mdecourse / mocad

Mobile Oriented Computer Aided collaborative mechanical Design platform (MOCAD) 行動裝置導向電腦輔助協同機械設計平台
0 stars 0 forks source link

2019 KMOL 課程相關 #4

Open mdecourse opened 5 years ago

mdecourse commented 5 years ago

助教與課輔時間規劃

預計由 40623128 擔任 cp2019 與 cad2019 等兩門課程的助教 並推薦 40623130 擔任 Prof Lee 相關課程的助教

cp2019 與 cad2019 以及專題的 meeting 時間為開學後每週四 19:30-21:30 地點在綜一館電腦輔助設計室

cp2019 與 cad2019 課程網頁

cp2019

Fall 開學後課程進行時網站: http://mde.tw/cp2019

cad2019

Fall 開學後課程進行時網站: http://mde.tw/cad2019

2019 Fall 開始的課程學員評分流程

第一週即啟動亂數分組, 每 10 人一組, 並自第三週起啟動每一位學員的三種課程評分流程

  1. 學員透過課程表單, 登入個人的 @gm 電子郵箱後進行每週自我評分 (各週評分期間只能一份, 且自評時間自各週上課後, 至次週上課之前的時段間進行).
  2. 評分時段與個人自評相同, 且各學員必須在該時段對其他各組員進行互評 (依據各學員上課與課後時間, 進行各項課程相關任務的協同流程表現評分).
  3. 教師對課程各學員進行評分 - 每週針對各學員在 Github 個人倉儲與網頁、個人 Youtube 影片區, 以及各組分組網頁 (第三週起各組推舉出組長 (領頭羊), 在其帳號下建立分組倉儲, 例如: cp2019ag1 作為甲班第一組分組網頁) 中各組員的表現進行評分.

上課學員評分流程

'''
根據評分表單中的 自評分數, 互評得分, 教師評分, 計算學員課程成績
'''

def diff(自評分數, 互評得分):
    return abs(自評分數 - 互評得分)

def max(自評分數, 互評得分):
    if 自評分數 > 互評得分:
        return 自評分數
    else:
        return 互評得分

def 分組比分(自評分數, 互評得分):
    if diff(自評分數, 互評得分) < 5:
        學員得分 = max(自評分數, 互評得分)
    else:
        學員得分 = 互評得分 - diff(自評分數, 互評得分)
    return 學員得分

def 全班比分(學員得分, 教師評分):
    if diff(學員得分, 教師評分) < 5:
        學員成績 = max(學員得分, 教師評分)
    else:
        學員成績 = 教師評分 - diff(學員得分, 教師評分)/4
    return 學員成績

def 學員成績(自評分數, 互評得分, 教師評分):
    學員分組得分 = 分組比分(自評分數, 互評得分)
    學員課程成績 = 全班比分(學員分組得分, 教師評分)
    return 學員課程成績

print(學員成績(80, 70, 60))
print(學員成績(60, 70, 80))

上述程式希望能夠透過 1) https://dartpad.dartlang.org/, 利用 dart 程式語言程式進行分組, 2) 並設法將 dart 轉為 javascript, 以便能夠在網頁中直接執行, 3) 最後再設法轉為手機 app, 能夠直接在 Android 與 IOS 手機中執行亂數分組, 意即能夠直接在手機中選擇學員 url, 登入系統 (確認權限), 啟動近端分組或遠端分組, 完成後將分組資料存入遠端 Python Flask 所建立的網站或資料庫 (SQLite, MySQL 以及 PostgreSQL) 中.

意即, 目前的機械設計程式都必須具備三種執行介面:

1) 能夠直接在網頁中的 interpreter 環境執行, 結果可存入 https://firebase.google.com/ 2) 同第 1 項技術 (例如: 可以利用 brython, lua 或 dart 完成網頁執行), 但是 dart 必須轉為 Javascript 後 (brython brython 與 http://mde.tw/vecp2018/lua/SchoolProject/fengari-web.js 已經直接將 python 與 lua 轉為 js 執行), 本學期開始加入 dart. 3) 必須透過 dart 與 Flutter 建立手機程式介面, 設法與遠端的 Python Flask 程式互動.

希望達成甚麼目標

1) 可以利用手機程式控制遠端 V-rep 虛擬環境 (或實體系統)中的手足球, 抓娃娃機或機械手臂的運動控制. 2) 可以利用手機程式取得各項近端資料 (影片, 照片, 表單資料或二維條碼或近場認證資料等), 並將資料送到由 Python 及 C/C++ 建立的各 kernels 機械設計相關系統進行, (a) 平面機構合成或模擬運算及展示, (b) 進行機械相關零組件的深度學習辨識 ( 類似車牌辨識), 但必須取得各零件的 x, y 座標後, 傳回遠端操控虛擬或實體機電資系統.

mdecourse commented 5 years ago

亂數分組程式

分為從近端讀取各班學員學號資料與從網頁讀取各班學員學號資料等兩種

從近端讀取各班學員學號資料版本

import random
filename = 'cdaw1_student_list.txt'
# 每組人數
num_in_one_group = 8
# 組序由 1 開始
group = 1
# 各班分組後所得數列
c2019 = []
with open(filename) as f:
    # 讀進全部檔案, 轉進數列, 並同時將各行的 \n 去除
    read_data = f.read().splitlines() 
print("共有 " + str(len(read_data)) + " 位學員")
# 利用 shuffle 將數列隨機弄亂
random.shuffle(read_data)
for i in range(len(read_data)):
    # 利用整數相除的餘數進行分組
    if i%num_in_one_group == 0:
        # 列出分隔符號
        print("-"*20)
        print("group " + str(group) +":")
        # 在分組區隔時重置各組學員數列
        group_list = []
        print()
        # 同時列出與分隔標註對應 i 的數列內容
        print(read_data[i])
        group_list.append(read_data[i])
        group = group + 1
    else:
        # 逐一列出同組的其他學員
        print(read_data[i])
        group_list.append(read_data[i])
    if i%num_in_one_group == 0:
        c2019.append(group_list)
# c2019 為該班分組後所得分組數列
print(c2019)

從網頁讀取各班學員學號資料版本

import random
import urllib3

target_url = "https://raw.githubusercontent.com/mdecourse/cd2019/gh-pages/data/cda/cdaw1_student_list.txt"

# 從 url 讀取資料, 之後利用 splitlines() 存入學員學號字串數列中
http = urllib3.PoolManager()
response = http.request('GET', target_url)
data = response.data.decode('utf-8')
read_data = data.splitlines() 
#print(read_data)

# 每組人數
num_in_one_group = 10
# 組序由 1 開始
group = 1
# 各班分組後所得數列
c2019 = []
print("共有 " + str(len(read_data)) + " 位學員")
# 利用 shuffle 將數列隨機弄亂
random.shuffle(read_data)
for i in range(len(read_data)):
    # 利用整數相除的餘數進行分組
    if i%num_in_one_group == 0:
        # 列出分隔符號
        print("-"*20)
        print("group " + str(group) +":")
        # 在分組區隔時重置各組學員數列
        group_list = []
        print()
        # 同時列出與分隔標註對應 i 的數列內容
        print(read_data[i])
        group_list.append(read_data[i])
        group = group + 1
    else:
        # 逐一列出同組的其他學員
        print(read_data[i])
        group_list.append(read_data[i])
    if i%num_in_one_group == 0:
        c2019.append(group_list)
# c2019 為該班分組後所得分組數列
print(c2019)
mdecourse commented 5 years ago

2019 Fall 課程施行規劃

原始教學示範影片

每週教師利用電腦、網路與雲端倉儲錄製該週所要傳達的相關內容, 存為 .mp4, 上傳至近端伺服器, 可讓各組下載.

各組協同製作該週教學內容相關的影片

各組可以採用協同方式, 規劃由學員同步進行與課程相關的操作示範影片片段, 各影片片段可利用 ffmpge.exe 進行編輯 (切斷, 合併等), 最後每週必須呈現至少一個與該週課程內容相關的教學影片, 且該影片必須呈現在各組分組網站中 (各學員必須以 Github 倉儲中,依據固定的倉儲名稱, 例如: cp2019 或 cad2019 命名, 且各分組網站必須依附在組長帳號下的 cp2019ag1 ....), 而且各影片必須利用 ffmpeg.exe 配上說明字幕, 且各組員所提供的影片片段必須在各影片的左下角呈現製作學員的浮水印.

各週第一堂課說明該週進度, 第二與第三堂由各組執行該週任務, 各組必須在次週上課之前完成各項取分任務, 且在次週的第二堂中處理上週各項 Q&A.

有關利用 ffmpeg.exe 執行影片編輯與加上字幕或浮水印等用法, 請參考:

http://mde.tw/cp2019_fall/content/FFmpge.html

各組所錄製之影片片段, 除了各製作學員的學號浮水印與說明字幕之外, 不得呈現其他利用 shareware 或 freeware 或其他影片製作套件的任何加註資料, 意即: 不得使用免費的威力導演軟體套件製作或編輯各週分組影片, 否則不予計分.