-
Notifications
You must be signed in to change notification settings - Fork 0
/
cdproject.leo
987 lines (847 loc) · 40.6 KB
/
cdproject.leo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
<?xml version="1.0" encoding="utf-8"?>
<!-- Created by Leo (http://leoeditor.com/leo_toc.html) -->
<?xml-stylesheet ekr_test?>
<leo_file xmlns:leo="http://www.leo-editor.org/2011/leo" >
<leo_header file_format="2" tnodes="0" max_tnode_index="0" clone_windows="0"/>
<globals body_outline_ratio="0.5" body_secondary_ratio="0.5">
<global_window_position top="50" left="50" height="500" width="700"/>
<global_log_window_position top="0" left="0" height="0" width="0"/>
</globals>
<preferences/>
<find_panel_settings/>
<vnodes>
<v t="course-mde-tw.20140417093332.1998"><vh>@settings</vh>
<v t="course-mde-tw.20140417093332.1999"><vh>@data qt-gui-plugin-style-sheet</vh></v>
<v t="course-mde-tw.20140417093332.2000"><vh>@string initial_split_orientation = horizontal</vh></v>
<v t="course-mde-tw.20140417093332.2001"><vh>@string rst3_write_intermediate_extension = .rst</vh></v>
</v>
<v t="course-mde-tw.20140417093332.2063"><vh>協同產品設計實習</vh></v>
<v t="2014pythonE.20140422152422.1669"><vh>電子郵箱管理</vh></v>
<v t="2014pythonE.20140422152422.1671"><vh>Github 帳號管理</vh></v>
<v t="2014pythonE.20140422152422.1670"><vh>OpenShift 權限管理</vh></v>
<v t="course-mde-tw.20140422171455.1745"><vh>Github 倉儲與 OpenShift 同步</vh></v>
<v t="2014spring.20140430175148.1771"><vh>@edit README.md</vh></v>
<v t="2014spring.20140430205920.1773"><vh>分散式課程評量</vh></v>
<v t="2014spring.20140430165707.2063" a="E"><vh>第十一週任務</vh>
<v t="2014spring.20140506093255.1795"><vh>組立約束條件</vh></v>
<v t="2014spring.20140506093255.1796"><vh>組立 0 程式</vh></v>
</v>
<v t="2014spring.20140508134612.2129" a="E"><vh>第十二週任務</vh>
<v t="2014spring.20140513154549.2535"><vh>組立約束條件屬性</vh></v>
</v>
<v t="course-mde-tw.20140417093332.2027" a="E"><vh>@path wsgi</vh>
<v t="course-mde-tw.20140417093332.2028" a="E"><vh>@file application</vh></v>
<v t="2014spring.20140508134612.2197"><vh>@file cmsimply.py</vh></v>
</v>
<v t="2014spring.20140503125211.2097" a="E"><vh>分組程式開發</vh>
<v t="2014spring.20140503125211.2098" a="E"><vh>@path wsgi/programs/cdag1</vh>
<v t="2014spring.20140503125211.2099"><vh>@edit __init__.py</vh></v>
</v>
<v t="2014spring.20140503125211.2100" a="E"><vh>@path wsgi/programs/cdag2</vh>
<v t="2014spring.20140503125211.2101"><vh>@edit __init__.py</vh></v>
</v>
<v t="2014spring.20140513092629.1905" a="E"><vh>@path wsgi/programs/cdag3</vh>
<v t="2014spring.20140513092629.1906"><vh>@edit __init__.py</vh></v>
</v>
<v t="2014spring.20140513154549.2217" a="E"><vh>@path wsgi/programs/cdag4</vh>
<v t="2014spring.20140513154549.2218"><vh>@edit __init__.py</vh></v>
</v>
<v t="kmolII_lite.20140513162816.2130" a="E"><vh>@path wsgi/programs/cdag5</vh>
<v t="kmolII_lite.20140513162816.2131"><vh>@edit __init__.py</vh></v>
<v t="kmolII_lite.20140520162524.1775"><vh>@edit man.py</vh></v>
</v>
<v t="2014pythonE.20140520190326.1947"><vh>@path wsgi/programs/cdag6</vh>
<v t="2014pythonE.20140520190326.1948"><vh>@edit __init__.py</vh></v>
</v>
<v t="2014pythonE.20140520234911.1956" a="E"><vh>@path wsgi/programs/cdag8</vh>
<v t="2014pythonE.20140520234911.1957"><vh>@edit __init__.py</vh></v>
</v>
<v t="kmolII_lite.20140519210900.2176" a="E"><vh>@path wsgi/programs/cdag9</vh>
<v t="kmolII_lite.20140519210900.2177"><vh>@edit __init__.py</vh></v>
</v>
<v t="2014spring.20140513154549.2225" a="E"><vh>@path wsgi/programs/cdag10</vh>
<v t="2014spring.20140513154549.2226"><vh>@edit __init__.py</vh></v>
</v>
<v t="kmolII_lite.20140519204745.1773" a="E"><vh>@path wsgi/programs/cdag11</vh>
<v t="kmolII_lite.20140519204745.1774"><vh>@edit __init__.py</vh></v>
</v>
<v t="kmolII_lite.20140520211255.2555" a="E"><vh>@path wsgi/programs/cdag12</vh>
<v t="kmolII_lite.20140520211255.2556"><vh>@edit __init__.py</vh></v>
</v>
<v t="2014spring.20140513154549.2221"><vh>@path wsgi/programs/cdag14</vh>
<v t="2014spring.20140513154549.2222"><vh>@edit __init__.py</vh></v>
</v>
<v t="2014spring.20140513154549.2229"><vh>@path wsgi/programs/cdag16</vh>
<v t="2014spring.20140513154549.2230"><vh>@edit __init__.py</vh></v>
</v>
<v t="2014spring.20140513092629.2151"><vh>@path wsgi/programs/cdag17</vh>
<v t="2014spring.20140513092629.2152"><vh>@edit __init__.py</vh></v>
</v>
<v t="2014spring.20140506174436.1831" a="E"><vh>@path wsgi/programs/cdag30</vh>
<v t="2014spring.20140506174436.1832"><vh>@edit __init__.py</vh></v>
<v t="2014spring.20140513154549.2534"><vh>@edit man.py</vh></v>
<v t="2014spring.20140521133830.2641"><vh>@edit man2.py</vh></v>
</v>
</v>
<v t="course-mde-tw.20140417093332.2058" a="E"><vh>利用 pandoc 進行格式轉換</vh>
<v t="course-mde-tw.20140422221207.1747"><vh>注意事項</vh></v>
<v t="2014spring.20140430205920.1897"><vh>@button pandoc_auto</vh></v>
<v t="course-mde-tw.20140417093332.2060" a="E"><vh>@path wsgi/doc</vh>
<v t="course-mde-tw.20140417093332.2061"><vh>@edit title.txt</vh></v>
</v>
</v>
<v t="course-mde-tw.20140417093332.2047" a="E"><vh>分組協同報告區</vh>
<v t="course-mde-tw.20140417093332.2048" a="E"><vh>@path wsgi/doc</vh>
<v t="course-mde-tw.20140417093332.2049" a="E"><vh>@path 2ag1</vh>
<v t="course-mde-tw.20140417093332.2050"><vh>@edit doc.txt</vh></v>
</v>
<v t="course-mde-tw.20140417093332.2051" a="E"><vh>@path 2ag2</vh>
<v t="course-mde-tw.20140417093332.2052"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014pythonE.20140429104126.1755" a="E"><vh>@path 2ag3</vh>
<v t="2014pythonE.20140429104126.1756"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014spring.20140506161101.1960" a="E"><vh>@path 2ag4</vh>
<v t="2014spring.20140506161101.1961"><vh>@edit doc.txt</vh></v>
</v>
<v t="kmolII_lite.20140430001511.1599" a="E"><vh>@path 2ag5</vh>
<v t="kmolII_lite.20140430001511.1600"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014spring.20140506161101.1964" a="E"><vh>@path 2ag6</vh>
<v t="2014spring.20140506161101.1965"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014pythonE.20140429160432.1843"><vh>@path 2ag7</vh>
<v t="2014pythonE.20140429160432.1844"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014pythonE.20140520234454.1952" a="E"><vh>@path 2ag8</vh>
<v t="2014pythonE.20140520234454.1953"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014pythonE.20140512203125.1905" a="E"><vh>@path 2ag9</vh>
<v t="2014pythonE.20140512203125.1906"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014spring.20140506161101.1968" a="E"><vh>@path 2ag10</vh>
<v t="2014spring.20140506161101.1969"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014spring.20140506161101.1972" a="E"><vh>@path 2ag11</vh>
<v t="2014spring.20140506161101.1973"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014spring.20140506161101.1976" a="E"><vh>@path 2ag12</vh>
<v t="2014spring.20140506161101.1977"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014spring.20140506161101.1956" a="E"><vh>@path 2ag13</vh>
<v t="2014spring.20140506161101.1957"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014spring.20140506161101.1980" a="E"><vh>@path 2ag14</vh>
<v t="2014spring.20140506161101.1981"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014pythonE.20140429160432.1847" a="E"><vh>@path 2ag16</vh>
<v t="2014pythonE.20140429160432.1848"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014spring.20140506161101.1984" a="E"><vh>@path 2ag17</vh>
<v t="2014spring.20140506161101.1985"><vh>@edit doc.txt</vh></v>
</v>
<v t="123.20140502221015.1628" a="E"><vh>@path 2ag21</vh>
<v t="123.20140502221015.1630"><vh>@edit doc.txt</vh></v>
</v>
<v t="2014pythonE.20140424070658.1679" a="E"><vh>@path coursemdetw</vh>
<v t="2014pythonE.20140424070658.1680"><vh>@auto doc.txt</vh></v>
</v>
</v>
</v>
</vnodes>
<tnodes>
<t tx="123.20140502221015.1628"></t>
<t tx="2014pythonE.20140422152422.1669">配合 2014cda 專案
2014cdaproject@gmail.com
正好可以有三個 Python 3.3 應用程式, 用於
2014cda, 2014cdb, 2014c2 等三個專案使用</t>
<t tx="2014pythonE.20140422152422.1670">puttygen.exe 導入 private key 後, 以 Conversions->Export OpenSSH key
將資料存入 V:\home\.ssh\id_rsa 檔案中
當使用者利用 git clone OpenShift 平台上專案時, Git 將會利用 id_rsa 私鑰與 OpenShift settings 設定所儲存的 public key 進行配對, 若通過驗證才能更新或擷取 OpenShift 平台上的程式碼.</t>
<t tx="2014pythonE.20140422152422.1671">course-mde-tw on Github 使用 coursemdetw@gmail.com 登記
couorsemdetw on Github 使用 course@mde.tw 登記
2014cda, 2014cdb, 2014c2 Github 專案登記在 coursemdetw 名下
course-mde-tw 為協同人員
</t>
<t tx="2014pythonE.20140424070658.1679"></t>
<t tx="2014pythonE.20140429104126.1755"></t>
<t tx="2014pythonE.20140429160432.1843"></t>
<t tx="2014pythonE.20140429160432.1847"></t>
<t tx="2014pythonE.20140512203125.1905"></t>
<t tx="2014pythonE.20140520190326.1947"></t>
<t tx="2014pythonE.20140520234454.1952"></t>
<t tx="2014pythonE.20140520234911.1956"></t>
<t tx="2014spring.20140430165707.2063">0. 請各組閱讀
https://wiki.mde.tw/doku.php?id=%E5%8D%94%E5%90%8C%E7%94%A2%E5%93%81%E8%A8%AD%E8%A8%88:2014s_week10
中的注意事項與 push 前確認事項.
1. 各組要自行建立 doc 檔案目錄, 而且可以納入 pandoc pdf 與 html 文件產生機制
2. 各組以協同模式在教材一中各選一段, 以英文+中文並陳的方式, 列在各自的 doc.txt 文件中. (之後將需要寫一個類似 pandoc 按鈕來整合此份文件)
3. 各組將上學期的 Pro/Web.Link 程式取出, 準備以各組編寫一個零件尺寸修改的模式來修改 application 雲端程式.
4. 除整班協同的 github 外, 各組需要在組內另外建立一個小分組協同專案來執行小分組協同任務.</t>
<t tx="2014spring.20140430205920.1773">評量規劃:
每週以組為單位執行分組任務, 評分類別如下:
每完成一項任務: 得分 5 分
幾乎完成: 得分 4 分
部分完成: 得分 3 分
未能完成: 得分 0 分
Week 12: 二項任務, 配分 10 分
Week 13: 三項任務, 配分 15 分
Week 14: 三項任務, 配分 15 分
Week 15: 三項任務, 配分 15 分
Week 16: 三項任務, 配分 15 分
Week 17: 三項任務, 配分 15 分
Week 18: 三項任務, 配分 15 分
備註:
各週任務評量將在下課前 15 鐘完成
若該週因放假不上課, 則任務仍由 Github 專案上發送, 並以 take-home 模式執行.</t>
<t tx="2014spring.20140430205920.1897">@language python
import os
import re
def atoi(text):
return int(text) if text.isdigit() else text
def natural_keys(text):
'''
alist.sort(key=natural_keys) sorts in human order
http://nedbatchelder.com/blog/200712/human_sorting.html
(See Toothy's implementation in the comments)
'''
return [ atoi(c) for c in re.split('(\d+)', text) ]
'''
c is the commander of the outline containing the script.
g is Leo's leo.core.leoGlobals module.
p is the presently selected position, the same as c.p.
'''
d = c.scanAllDirectives(p)
#g.es(d)
# d 為 commander 由目前所在目錄進行指令設定掃描
# d 資料格式為 dictionary
'''
實際操作下, d 為
{'tabwidth': -4, 'lineending': None, 'language': 'python', 'encoding': None, 'pluginsList': [], 'pagewidth': 70, 'wrap': True, 'path': 'D:\\github\\mdeCourse\\2013spring', 'delims': ('#', '', '')}
'''
# 在處理 pandoc 之前, 將協同人員上傳的 file1.txt 與 file2.txt 結合為 demo.txt
# 以下採用 os.walk 自動進入目錄取出目錄與檔案名稱後, 採自然排序
# 最後再利用 insert 將標題頁面放入數列最前頭
'''
# 這裡是原先使用的手動檔名排序數列, 好處為可以任意編排次序
filenames = ['title.txt', '2bg1/doc.txt', '2bg2/doc.txt', '2bg3/doc.txt', '2bg5/doc.txt', '2bg15/doc.txt', '2bg13/doc.txt', '2bg9/doc.txt']
'''
# 定義要合併檔案的共同目錄
directory = "V:/project/2014cda/wsgi/doc/"
# 定義一個空數列
filenames = []
for (path, dirs, files) in os.walk(directory):
for fname in files:
# 利用 if 判斷式將外部的 title.txt 與其他檔案隔開不取
if path != directory:
filenames.append(path+"/"+fname)
# 依照 natural_keys 客製化排序, 使用上面的函式定義
filenames.sort(key=natural_keys)
# 利用 insert 以 0 為索引, 將 title.txt 放在數列最前頭
filenames.insert(0, directory+"title.txt")
# 以下將依據 filenames 數列中的檔案合併為 result.txt 之後再進行文書處理轉換
with open('V:/project/2014cda/wsgi/pandoc/result.txt', 'w', encoding="utf-8") as outfile:
for fname in filenames:
#fname = directory+fname
with open(fname, encoding="utf-8") as infile:
for line in infile:
outfile.write(line)
outfile.write("\n\n")
# 將目錄指到 pandoc
mandir = d.get('path') + "/wsgi/pandoc"
g.es(mandir)
os.chdir(mandir)
# 先轉一份 html
os.system("V:\\apps\\pandoc\\pandoc.exe -s result.txt -o result.html")
# 利用 pandoc 將 demo.txt 轉為 demo.tex, 在此決定是否要有 toc
os.system("V:\\apps\\pandoc\\pandoc.exe -s result.txt --toc -o result.tex")
# 中文設定必須要放在 begin document 之前
setup = '''
\\usepackage{xeCJK} % 中英文字行分開設置
\\usepackage[T1]{fontspec} %設定字體用
\\usepackage{graphicx}
\\usepackage{fancyvrb} % for frame on Verbatim
\\setCJKmainfont{新細明體}
'''
# 在 demo.tex 最前頭加上"中文設定"
file = open("result.tex", "r", encoding="utf-8")
lines = file.read().splitlines()
file.close()
file = open("result.tex", "w", encoding="utf-8")
for i in range(len(lines)):
# 設法將中文設定放在文件開始之前, 以便蓋掉之前的設定
if "\\begin{document}" in lines[i]:
file.write(setup+lines[i]+"\n")
else:
file.write(lines[i]+"\n")
file.close()
target_name = "result"
filename = target_name+".tex"
os.system("V:\\apps\\portableLatex\\MiKTeX\\texmf\\miktex\\bin\\xelatex.exe -no-pdf -interaction=nonstopmode "+filename)
os.system("V:\\apps\\portableLatex\\MiKTeX\\texmf\\miktex\\bin\\xelatex.exe -no-pdf -interaction=nonstopmode "+filename)
filename = target_name+".xdv"
os.system("V:\\apps\\portableLatex\\MiKTeX\\texmf\\miktex\\bin\\xdvipdfmx.exe -vv -E "+filename)
filename = target_name+".pdf"
os.system(filename)</t>
<t tx="2014spring.20140503125211.2097">各分組在 Github 中要有一個參與 2014c2 協同程式開發的帳號外
各組員同時在 Github 與 Bitbucket 下都要有對應帳號, 並且利用 Github (不限協同人員個數, 但是免費帳號只允許建立開放專案)或 Bitbucket (專案可以選擇公開或私用, 但是免費帳號只允許最多 5 人協同) 的協同模式, 在小分組下共享程式碼.
Github 2014c2 全班協同專案將會有一個對應的 OpenShift 網站, 各組另外要建立一個分組的 OpenShift 網站與 Github 全班協同專案同步, 以練習各分組的雲端程式部署與控管流程 (各分組成員必須將各自的 public keys 放到分組 OpenShift 應用程式中, 並且自行練習以協同模式控管雲端網站, 而且要與各分組的 Bitbucket 或 Github 程式同步).
各分組雲端程式位於 wsgi/programs/c2g1 目錄下, 使用時必須:
1. 確認主要程式 application 中已經導入分組模組, 且與 root 下屬方法加以對應
也就是下列程式的置入.
#####################################################
# 這是 c2g1 組的物件案例定義
#####################################################
# 導入 application 目錄下的模組
# 導入 programs/c2g1 並且命名為 c2g1
# 模組內建使用 __init__.py 中的 C2G1 類別
# 若使用 programs/c2g1/class1.py, 則使用 import programs.c2g1.class1 as c2g1
import programs.c2g1 as c2g1
# 利用 c2g1 目錄下的 __init__.py 檔案中的 C2G1 類別建立案例物件
# 而且指到 application 根目錄下的 c2g1
root.c2g1 = c2g1.C2G1()
#####################################################
# 結束 c2g1 組的物件案例定義
#####################################################
2. 各分組則在 wsgi/programs/c2gX 目錄下各自開發 __init__.py 程式方法
3. 完成後先在近端測試, 完全符合需求且根據標準流程, 拉下目前協同專案區最新的 github 程式碼後, 檢驗 .leo 是否可以正確開啟, 各對應目錄是否正確配置, application 是否可以正確執行後, 再推送到協同專案區, 並與各分組的 OpenShift 雲端網站進行同步.</t>
<t tx="2014spring.20140503125211.2098"></t>
<t tx="2014spring.20140503125211.2100"></t>
<t tx="2014spring.20140506093255.1795">Constraint Attributes
約束條件屬性
Methods and Properties Introduced:
衍生的方法與性質
pfcConstraintAttributes.Create()
建立約束條件屬性
pfcConstraintAttributes.Force
強制約束條件
pfcConstraintAttributes.Ignore
忽略約束條件
The method pfcConstraintAttributes.Create() returns the constraint attributes object based on the values of the following input
parameters:
約束條件建立方法, 依照下列輸入變數而傳回不同的約束條件屬性
• Ignore—Constraint is ignored during regeneration. Use this capability to store extra constraints on the component, which allows you to quickly toggle between different constraints.
是否忽略 – 約束條件在更新模型時是否忽略, 可以利用此一忽略特性, 將額外的約束條件附加在組立元件上, 讓使用者可在不同約束條件間切換
• Force—Constraint has to be forced for line and point alignment.
是否強制 – 當使用線或點對齊約束時, 可以強制進行約束.
• None—No constraint attributes. This is the default value.
無約束屬性 – 內定為無約束屬性.
static pfcConstraintAttributes Create (boolean Force, boolean Ignore)
Creates a new constraint attributes object.
用來建立新的約束條件屬性物件
Parameters:
輸入變數
Force
強制變數
true if the constraint should be forced (required for ASM_CONSTRAINT_PNT_ON_LINE).
若設為真, 表示約束條件將會強制執行 (使用點在線上約束時必須設為真)
Ignore
忽略變數
true if the constraint is stored with the component, but not enforced. false if the constraint is enforced.
若設為真, 表示約束將附加在元件上, 但卻不強制執行, 若設為偽, 則該約束條件將會強制執行</t>
<t tx="2014spring.20140506093255.1796"><!-- 組立 0 程式 -->
<script src="jscript/weblink/pfcUtils.js">
</script><script language="JavaScript">
if (!pfcIsWindows())
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var session = pfcGetProESession();
// 建立擺放零件的位置矩陣
var identityMatrix = pfcCreate ("pfcMatrix3D");
for (var x = 0; x < 4; x++)
for (var y = 0; y < 4; y++)
{
if (x == y)
identityMatrix.Set (x, y, 1.0);
else
identityMatrix.Set (x, y, 0.0);
}
var transf = pfcCreate ("pfcTransform3D").Create (identityMatrix);
// 取得目前的工作目錄
var currentDir = session.getCurrentDirectory();
// 以目前已開檔, 作為 model
var model = session.CurrentModel;
// 查驗有無 model, 或 model 類別是否為組立件
if (model == void null || model.Type != pfcCreate ("pfcModelType").MDL_ASSEMBLY)
throw new Error (0, "Current model is not an assembly.");
var assembly = model;
var descr =
pfcCreate ("pfcModelDescriptor").CreateFromFileName ("link1.prt");
// 若 link1.prt 在 session 則直接取用
var componentModel = session.GetModelFromDescr (descr);
// 若 link1.prt 不在 session 則從工作目錄中載入 session
var componentModel = session.RetrieveModel(descr);
// 若 link1.prt 已經在 session 則放入組立檔中
if (componentModel != void null)
{
var asmcomp = assembly.AssembleComponent (componentModel, transf);
}
// 設定組立檔中的三個定位面, 注意內定名稱與 Pro/E WF 中的 ASM_D_FRONT 不同, 而是 ASM_FRONT
var asmDatums = new Array ("ASM_FRONT", "ASM_TOP", "ASM_RIGHT");
// 設定零件檔中的三個定位面, 名稱與 Pro/E WF 中相同
var compDatums = new Array ("FRONT",
"TOP",
"RIGHT");
// 建立約束條件變數
var constrs = pfcCreate ("pfcComponentConstraints");
// 利用迴圈分別約束組立與零件檔中的三個定位平面
for (var i = 0; i < 3; i++)
{
// 設定組立參考面
var asmItem =
assembly.GetItemByName (pfcCreate ("pfcModelItemType").ITEM_SURFACE,
asmDatums [i]);
// 若無對應的組立參考面, 則啟用互動式平面選擇表單 flag
if (asmItem == void null)
{
interactFlag = true;
continue;
}
// 設定零件參考面
var compItem =
componentModel.GetItemByName (pfcCreate ("pfcModelItemType").ITEM_SURFACE,
compDatums [i]);
// 若無對應的零件參考面, 則啟用互動式平面選擇表單 flag
if (compItem == void null)
{
interactFlag = true;
continue;
}
// 建立 ids 變數, intseq 為 sequence of integers 為資料類別, 使用者可以經由整數索引擷取此資料類別的元件, 第一個索引為 0
var ids = pfcCreate ("intseq");
// 建立路徑變數
var path = pfcCreate ("MpfcAssembly").CreateComponentPath (assembly,
ids);
// 採用互動式設定相關的變數
var MpfcSelect = pfcCreate ("MpfcSelect");
var asmSel = MpfcSelect.CreateModelItemSelection (asmItem, path);
var compSel = MpfcSelect.CreateModelItemSelection (compItem, void null);
var constr = pfcCreate ("pfcComponentConstraint").Create (
pfcCreate ("pfcComponentConstraintType").ASM_CONSTRAINT_ALIGN);
constr.AssemblyReference = asmSel;
constr.ComponentReference = compSel;
constr.Attributes = pfcCreate ("pfcConstraintAttributes").Create (false, false);
// 將互動選擇相關資料, 附加在程式約束變數之後
constrs.Append (constr);
}
// 設定組立約束條件
asmcomp.SetConstraints (constrs, void null);
try
{
document.write("目前 Creo 的工作目錄:<br />"+currentDir);
}
catch (err)
{
alert ("Exception occurred: "+pfcGetExceptionType (err));
}
assembly.Regenerate (void null);
session.GetModelWindow (assembly).Repaint();
</script>
<!-- 以下為組立 1 程式 -->
script src="jscript/weblink/pfcUtils.js">
</script><script language="JavaScript">
if (!pfcIsWindows())
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var session = pfcGetProESession();
// 建立擺放零件的位置矩陣
var identityMatrix = pfcCreate ("pfcMatrix3D");
for (var x = 0; x < 4; x++)
for (var y = 0; y < 4; y++)
{
if (x == y)
identityMatrix.Set (x, y, 1.0);
else
identityMatrix.Set (x, y, 0.0);
}
var transf = pfcCreate ("pfcTransform3D").Create (identityMatrix);
// 取得目前的工作目錄
var currentDir = session.getCurrentDirectory();
// 以目前已開檔, 作為 model
var model = session.CurrentModel;
// 查驗有無 model, 或 model 類別是否為組立件
if (model == void null || model.Type != pfcCreate ("pfcModelType").MDL_ASSEMBLY)
throw new Error (0, "Current model is not an assembly.");
var assembly = model;
var descr =
pfcCreate ("pfcModelDescriptor").CreateFromFileName ("link1.prt");
// 若 link1.prt 在 session 則直接取用
var componentModel = session.GetModelFromDescr (descr);
// 若 link1.prt 不在 session 則從工作目錄中載入 session
var componentModel = session.RetrieveModel(descr);
// 若 link1.prt 已經在 session 則放入組立檔中
if (componentModel != void null)
{
// 注意這個 asmcomp 即為設定約束條件的本體
// asmcomp 為特徵物件,直接將零件, 以 transf 座標轉換放入組立檔案中
var asmcomp = assembly.AssembleComponent (componentModel, transf);
}
var ids = pfcCreate ("intseq");
// 取得 assembly 項下的元件 id, 因為只有一個零件, 採用 index 0 取出其 featID
var components = assembly.ListFeaturesByType(true, pfcCreate ("pfcFeatureType").FEATTYPE_COMPONENT);
var featID = components.Item(0).Id;
ids.Append(featID);
// 在 assembly 模型中建立子零件所對應的路徑
var subPath =
pfcCreate ("MpfcAssembly").CreateComponentPath( assembly, ids );
document.write("id 為:"+subPath.ComponentIds(0));
subassembly = subPath.Leaf;
// 設定組立檔中的三個定位面, 注意內定名稱與 Pro/E WF 中的 ASM_D_FRONT 不同, 而是 ASM_FRONT
var asmDatums = new Array ("RIGHT", "TOP", "FRONT");
// 設定零件檔中的三個定位面, 名稱與 Pro/E WF 中相同
var compDatums = new Array ("TOP",
"FRONT",
"RIGHT");
// 建立約束條件變數
var constrs = pfcCreate ("pfcComponentConstraints");
// 利用迴圈分別約束組立與零件檔中的三個定位平面
for (var i = 0; i < 3; i++)
{
// 設定組立參考面, asmItem 為 model item
var asmItem =
subassembly.GetItemByName (pfcCreate ("pfcModelItemType").ITEM_SURFACE,
asmDatums [i]);
// 若無對應的組立參考面, 則啟用互動式平面選擇表單 flag
if (asmItem == void null)
{
interactFlag = true;
continue;
}
// 設定零件參考面, compItem 為 model item
var compItem =
componentModel.GetItemByName (pfcCreate ("pfcModelItemType").ITEM_SURFACE,
compDatums [i]);
// 若無對應的零件參考面, 則啟用互動式平面選擇表單 flag
if (compItem == void null)
{
interactFlag = true;
continue;
}
// 採用互動式設定相關的變數
var MpfcSelect = pfcCreate ("MpfcSelect");
var asmSel = MpfcSelect.CreateModelItemSelection (asmItem, subPath);
var compSel = MpfcSelect.CreateModelItemSelection (compItem, void null);
var constr = pfcCreate ("pfcComponentConstraint").Create (
pfcCreate ("pfcComponentConstraintType").ASM_CONSTRAINT_ALIGN);
constr.AssemblyReference = asmSel;
constr.ComponentReference = compSel;
constr.Attributes = pfcCreate ("pfcConstraintAttributes").Create (false, false);
// 將互動選擇相關資料, 附加在程式約束變數之後
constrs.Append (constr);
}
// 設定組立約束條件, 以 asmcomp 特徵進行約束條件設定
// 請注意, 第二個變數必須為 void null 表示零件對零件進行約束, 若為 subPath, 則零件會與原始零件的平面進行約束
asmcomp.SetConstraints (constrs, void null);
try
{
document.write("目前 Creo 的工作目錄:<br />"+currentDir);
}
catch (err)
{
alert ("Exception occurred: "+pfcGetExceptionType (err));
}
assembly.Regenerate (void null);
session.GetModelWindow (assembly).Repaint();
</script>
<!-- 以下為多重組立函式 -->
希望改寫成函式, 可以針對特定約束執行多重自動組立
<script src="jscript/weblink/pfcUtils.js">
</script><script language="JavaScript">
if (!pfcIsWindows())
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var session = pfcGetProESession();
// 建立擺放零件的位置矩陣
var identityMatrix = pfcCreate ("pfcMatrix3D");
for (var x = 0; x < 4; x++)
for (var y = 0; y < 4; y++)
{
if (x == y)
identityMatrix.Set (x, y, 1.0);
else
identityMatrix.Set (x, y, 0.0);
}
var transf = pfcCreate ("pfcTransform3D").Create (identityMatrix);
// 取得目前的工作目錄
var currentDir = session.getCurrentDirectory();
// 以目前已開檔, 作為 model
var model = session.CurrentModel;
// 查驗有無 model, 或 model 類別是否為組立件
if (model == void null || model.Type != pfcCreate ("pfcModelType").MDL_ASSEMBLY)
throw new Error (0, "Current model is not an assembly.");
var assembly = model;
var descr =
pfcCreate ("pfcModelDescriptor").CreateFromFileName ("link1.prt");
// 若 link1.prt 在 session 則直接取用
var componentModel = session.GetModelFromDescr (descr);
// 若 link1.prt 不在 session 則從工作目錄中載入 session
var componentModel = session.RetrieveModel(descr);
// 若 link1.prt 已經在 session 則放入組立檔中
if (componentModel != void null)
{
// 注意這個 asmcomp 即為設定約束條件的本體
// asmcomp 為特徵物件,直接將零件, 以 transf 座標轉換放入組立檔案中
var asmcomp = assembly.AssembleComponent (componentModel, transf);
}
var ids = pfcCreate ("intseq");
// 取得 assembly 項下的元件 id, 因為只有一個零件, 採用 index 0 取出其 featID
var components = assembly.ListFeaturesByType(true, pfcCreate ("pfcFeatureType").FEATTYPE_COMPONENT);
var featID = components.Item(0).Id;
ids.Append(featID);
// 在 assembly 模型中建立子零件所對應的路徑
var subPath =
pfcCreate ("MpfcAssembly").CreateComponentPath( assembly, ids );
document.write("id 為:"+subPath.ComponentIds(0));
subassembly = subPath.Leaf;
// 設定組立檔中的三個定位面, 注意內定名稱與 Pro/E WF 中的 ASM_D_FRONT 不同, 而是 ASM_FRONT
var asmDatums = new Array ("RIGHT", "TOP", "FRONT");
// 設定零件檔中的三個定位面, 名稱與 Pro/E WF 中相同
var compDatums = new Array ("TOP",
"FRONT",
"RIGHT");
// 建立約束條件變數
var constrs = pfcCreate ("pfcComponentConstraints");
// 利用迴圈分別約束組立與零件檔中的三個定位平面
for (var i = 0; i < 3; i++)
{
// 設定組立參考面, asmItem 為 model item
var asmItem =
subassembly.GetItemByName (pfcCreate ("pfcModelItemType").ITEM_SURFACE,
asmDatums [i]);
// 若無對應的組立參考面, 則啟用互動式平面選擇表單 flag
if (asmItem == void null)
{
interactFlag = true;
continue;
}
// 設定零件參考面, compItem 為 model item
var compItem =
componentModel.GetItemByName (pfcCreate ("pfcModelItemType").ITEM_SURFACE,
compDatums [i]);
// 若無對應的零件參考面, 則啟用互動式平面選擇表單 flag
if (compItem == void null)
{
interactFlag = true;
continue;
}
// 採用互動式設定相關的變數
var MpfcSelect = pfcCreate ("MpfcSelect");
var asmSel = MpfcSelect.CreateModelItemSelection (asmItem, subPath);
var compSel = MpfcSelect.CreateModelItemSelection (compItem, void null);
var constr = pfcCreate ("pfcComponentConstraint").Create (
pfcCreate ("pfcComponentConstraintType").ASM_CONSTRAINT_ALIGN);
constr.AssemblyReference = asmSel;
constr.ComponentReference = compSel;
constr.Attributes = pfcCreate ("pfcConstraintAttributes").Create (false, false);
// 將互動選擇相關資料, 附加在程式約束變數之後
constrs.Append (constr);
}
// 設定組立約束條件, 以 asmcomp 特徵進行約束條件設定
// 請注意, 第二個變數必須為 void null 表示零件對零件進行約束, 若為 subPath, 則零件會與原始零件的平面進行約束
asmcomp.SetConstraints (constrs, void null);
try
{
document.write("目前 Creo 的工作目錄:<br />"+currentDir);
}
catch (err)
{
alert ("Exception occurred: "+pfcGetExceptionType (err));
}
assembly.Regenerate (void null);
session.GetModelWindow (assembly).Repaint();
</script></t>
<t tx="2014spring.20140506161101.1956"></t>
<t tx="2014spring.20140506161101.1960"></t>
<t tx="2014spring.20140506161101.1964"></t>
<t tx="2014spring.20140506161101.1968"></t>
<t tx="2014spring.20140506161101.1972"></t>
<t tx="2014spring.20140506161101.1976"></t>
<t tx="2014spring.20140506161101.1980"></t>
<t tx="2014spring.20140506161101.1984"></t>
<t tx="2014spring.20140506174436.1831"></t>
<t tx="2014spring.20140508134612.2129">總結目前所完成的相關配置與任務
- 最初利用 Dokuwiki on OpenShift 建立多人協同的 wiki 寫作系統
好處是此一系統可以由管理者自由掌控, 所有內容都是純文字檔案, 無需資料庫
- 接著, 為了讓管理者可以利用程式控管 Dokuwiki 多人模式下的帳號與密碼, 採用 Python 3 與 sha1 編碼, 產生多人帳號與密碼, 並且可以自由控管各帳號所能擷取的頁面
- 近端與遠端的 Dokuwiki 可以嵌入 STL 零件, 設計圖片, Vimeo 影片等產品設計相關內容
- 接著為了利用 Python 3 控管多人所建立的文書處理與產品設計程式內容, 利用 Leo Editor 與 CherryPy 建立一個 Github 上全班協同的專案倉儲, 所有 collaborators 可以自由更新專案內容, 而且可以自由編寫 Github 所提供的 Wiki 系統.
- 此外全班協同專案中, 除了各組協同文書處理外, 也透過 CherryPy 與 Python 3 的模組導入, 讓各組各自擁有網際協同程式模組的控制權, 可以利用 Creo Pro/Web.Link 建立網際協同設計程式.
- 協同倉儲的 CherryPy 程式除了可在 Github 上進行版次管理外, 也可與對應的 Bitbucket 倉儲與 OpenShift 雲端網站進行同步, 而雲端網站的同步設定則分為全班協同網站(由老師控管) 以即由各組自行設定對應的 OpenShift 雲端網站兩種.
本週的任務一即是希望透過目前已經完成的協同環境配置, 利用流程圖進行表示, 將各模組的功能與設置目的加以整合, 並將內容放入各組的文書處理區.
但是, 由於全班協同的雲端網站目前並沒有內容管理系統, 因此本週將設法嵌入 CMSimply 套件, 充當全班協同網站的內容管理系統, 以便導引全班協同的相關內容.</t>
<t tx="2014spring.20140513092629.1905"></t>
<t tx="2014spring.20140513092629.2151"></t>
<t tx="2014spring.20140513154549.2217"></t>
<t tx="2014spring.20140513154549.2221"></t>
<t tx="2014spring.20140513154549.2225"></t>
<t tx="2014spring.20140513154549.2229"></t>
<t tx="2014spring.20140513154549.2535">Constraint Attributes
約束條件屬性
Methods and Properties Introduced:
衍生的方法與性質
pfcConstraintAttributes.Create()
建立約束條件屬性
pfcConstraintAttributes.Force
強制約束條件
pfcConstraintAttributes.Ignore
忽略約束條件
The method pfcConstraintAttributes.Create() returns the constraint attributes object based on the values of the following input
parameters:
約束條件建立方法, 依照下列輸入變數而傳回不同的約束條件屬性
• Ignore—Constraint is ignored during regeneration. Use this capability to store extra constraints on the component, which allows you to quickly toggle between different constraints.
是否忽略 – 約束條件在更新模型時是否忽略, 可以利用此一忽略特性, 將額外的約束條件附加在組立元件上, 讓使用者可在不同約束條件間切換
• Force—Constraint has to be forced for line and point alignment.
是否強制 – 當使用線或點對齊約束時, 可以強制進行約束.
• None—No constraint attributes. This is the default value.
無約束屬性 – 內定為無約束屬性.
static pfcConstraintAttributes Create (boolean Force, boolean Ignore)
Creates a new constraint attributes object.
用來建立新的約束條件屬性物件
Parameters:
輸入變數
Force
強制變數
true if the constraint should be forced (required for ASM_CONSTRAINT_PNT_ON_LINE).
若設為真, 表示約束條件將會強制執行 (使用點在線上約束時必須設為真)
Ignore
忽略變數
true if the constraint is stored with the component, but not enforced. false if the constraint is enforced.
若設為真, 表示約束將附加在元件上, 但卻不強制執行, 若設為偽, 則該約束條件將會強制執行.</t>
<t tx="course-mde-tw.20140417093332.1998"></t>
<t tx="course-mde-tw.20140417093332.1999">QSplitter::handle {
background-color: #CAE1FF; /* lightSteelBlue1 */
}
QStackedWidget {
/* background-color:lightpink; */
border-color: red;
padding: 0px;
/* border-width: 0px; */
/* background-color: yellow; */
}
QSplitter {
border-color: white;
background-color: white;
border-style: solid;
}
QTreeWidget {
/* These apply to the selected item, but not to editing items.*/
background-color: #ffffec; /* Leo's traditional tree color */
selection-color: black; /* was white */
selection-background-color: lightgrey;
/* font-family: SansSerif; */
/*font-family: DejaVu Sans Mono;*/
font-family:YaHei Mono;
/* 標題字型大小設定 */
font-size: 22px;
font-weight: normal; /* normal,bold,100,..,900 */
font-style: normal; /* normal, italic,oblique */
}
/* Headline edit widgets */
QTreeWidget QLineEdit {
background-color: cornsilk;
selection-color: white;
selection-background-color: blue;
/*font-family: DejaVu Sans Mono;*/
font-family:YaHei Mono;
/* 沒有特別對應字型大小 */
font-size: 22px;
font-weight: normal; /* normal,bold,100,..,900 */
font-style: normal; /* normal, italic,oblique */
}
/* The log panes */
QTextEdit {
background-color: #f2fdff;
selection-color: red;
selection-background-color: blue;
/* font-family: Courier New; */
font-family:YaHei Mono;
/* log font 大小 */
font-size: 22px;
font-weight: normal; /* normal,bold,100,..,900 */
font-style: normal; /* normal, italic,oblique */
}
/* The body pane */
QTextEdit#richTextEdit {
background-color: #fdf5f5; /* A kind of pink. */
selection-color: white;
selection-background-color: red;
/*font-family: DejaVu Sans Mono;*/
/* font-family: Courier New; */
font-family:YaHei Mono;
/* 內文字型大小 */
font-size: 22px;
font-weight: normal; /* normal,bold,100,..,900 */
font-style: normal; /* normal,italic,oblique */
}
QLabel {
font-family:YaHei Mono;
/* 下方的 Minibuffer 標題字型大小 */
font-size: 22px;
font-weight: normal; /* normal,bold,100,..,900 */
font-style: normal; /* normal,italic,oblique */
}
/* Editor labels */
QLineEdit#editorLabel {
background-color: #ffffec;
font-family:YaHei Mono;
/* 沒有直接對應字型大小 */
font-size: 22px;
font-weight: normal; /* normal,bold,100,..,900 */
font-style: normal; /* normal,italic,oblique */
border: 2px;
margin: 2px;
}</t>
<t tx="course-mde-tw.20140417093332.2000">horizontal: body pane to the left
vertical: body pane on the botton</t>
<t tx="course-mde-tw.20140417093332.2001"></t>
<t tx="course-mde-tw.20140417093332.2027"></t>
<t tx="course-mde-tw.20140417093332.2047">各組的報告統一放在 doc 目錄下, 並且按照分組編號作為目錄名稱
最後希望能夠利用程式整合各分組報告內容, 統一處理成為 pdf 與 html 檔案
目錄架構:
doc
2ag1
doc.txt
2ag2
doc.txt</t>
<t tx="course-mde-tw.20140417093332.2048"></t>
<t tx="course-mde-tw.20140417093332.2049"></t>
<t tx="course-mde-tw.20140417093332.2051"></t>
<t tx="course-mde-tw.20140417093332.2058">@language latex
% 中文內容設定
\usepackage{xeCJK} % 中英文字行分開設置
\usepackage[T1]{fontspec} %設定字體用
\usepackage{graphicx}
\usepackage{fancyvrb} % for frame on Verbatim
% 新細明體
% 文鼎PL新宋
\setCJKmainfont{新細明體}</t>
<t tx="course-mde-tw.20140417093332.2060"></t>
<t tx="course-mde-tw.20140417093332.2063">@language md
"# This is my README"
同步規劃:
Bitbucket: https://bitbucket.org/cmsimply/public_cmsimply
Bitbucket 免費帳號特性:
可以自由將倉儲轉為 public 或 private, 沒有限制
每一倉儲最多只能有 5 個 collaborators
OpenShift: http://cdproject-coursemdetw.rhcloud.com/
OpenShift 免費帳號特性:
支援各種網際程式雲端部署, 但是每一帳號至多只能建 3 個應用程式
接下來要加上與 Github 的全班協同倉儲進行同步
Github 免費帳號特性:
免費帳號只能使用 public 倉儲
沒有限制 collaborators 個數, 適合多協同人員執行開放專案使用
</t>
<t tx="course-mde-tw.20140422171455.1745">在 Github 倉儲中將 OpenShift 倉儲設為 remote 倉儲
git remote add openshift ssh://5356315e4382ec2b3f000557@2014cda-mdenfu.rhcloud.com/~/git/2014cda.git/
利用 git pull 拉下目前位於 OpenShift 對應倉儲上的程式碼
git pull 的目的在設法讓 OpenShift 與 Github 中的 git 專案合併
若與 Github 近端倉儲中的資料沒有產生衝突, 則可以在內容修改後, 同時 push 到 Github 與 OpenShift
目前 OpenShift 網站: http://2014cda-mdenfu.rhcloud.com/
Github 倉儲則為: https://github.com/coursemdetw/2014cda
目前的規劃是讓參與協同者可以自由更新 Github 倉儲內容
並且將 Github 倉儲與各組可以控制的 OpenShift 網站同步</t>
<t tx="course-mde-tw.20140422221207.1747">mathspec.sty 檔案必須放在 pandoc 目錄中, 與文書處理原始檔案放在一起.</t>
<t tx="kmolII_lite.20140430001511.1599"></t>
<t tx="kmolII_lite.20140513162816.2130"></t>
<t tx="kmolII_lite.20140519204745.1773"></t>
<t tx="kmolII_lite.20140519210900.2176"></t>
<t tx="kmolII_lite.20140520211255.2555"></t>
</tnodes>
</leo_file>