2016年1月5日 星期二

更改AR.Drone的鏡頭方向

因為其他事忙,所以有一陣子沒有再動AR.Drone了,當然它蠻怕風的也是一個原因,我覺得這個產品與我們現在說的空拍機像DJI的還是有些不同,比較像是可以用手機即時錄影的遙控飛機,而且有一點就是,它的camera設計是朝著正前方, 飛上天空時,就是拍遠方,反而下面是錄不到的,我想它一開始是想讓使用者看著螢幕就可以看著飛機的前方,而不用仰頭去看飛行器。
可以看前方卻無法錄到下面的景物
所以又要發揮創客的精神,動手來改造它,雖然它不便宜,但是實驗及動手做的精神更可貴!
只要用美工刀就行了!割開磁性的鐵片
排線粘得蠻緊的,拆的時候得小心別拉斷了
接下來就是把原本向前伸的機鼻給切掉,這部份倒是很容易的,這種機子本來就是保麗龍做的, 依電子零件大小設計好形狀後,把機板和零件塞進去固定好,就可以賣個好價錢,這也是人家的創意在賺錢~,下回有空時,應自己找掉保麗龍或類似的輕量物,自己塑個新的飛行器外殼,或是乾脆把外殼都拆了裸飛,說不定就不怕風了!
就把機鼻切斷了~膽大心細唷!
準備把鏡頭往下拉
這樣子鏡頭就朝下囉
改裝後試飛,結果一切正常,飛行中錄到的畫面變成下方,不變的一點是它還是怕風,只要風稍微大一些,它就會受到影響,在很空曠的地方飛倒沒差,如果周圍有建物,被風吹時操控又來不及反應,那麼撞山的情事就會發生!
我最近念頭有點改變,不要再買人家設計好的完美產品,世界潮流都已走向「自造者」的驅勢,我們雖還缺少許多「自造」的技術和經驗,但可以從心裡的想法改變做起,唯有我們自己能體驗「創客」、「自造者」…的觀念,我們才能真正地將這門技巧傳達給學生和週遭的朋友及家人…

2016年1月4日 星期一

Samsung Galaxy S6 edge 翻頁皮套的秘密

一 直以來都知道手機翻頁皮套,翻開螢幕就亮起,蓋上螢幕就關上是因為這種保護皮套上利用磁力的原理,換新手機(Galaxy S6 edge )時,試了非原廠的翻頁皮套卻無法有作用,所以就買了原廠的皮套。
手機還是需要一點兒保護
不過,用了一段時間後,皮套就變得又髒又難清理, 尤其白色的很難維護,功能還有但外觀不佳,再買個新的原廠皮套實在有點貴,不買原廠的,又無法有感應功能,昨天看到一個外形可說是一模一樣的翻頁皮套,看了一下,正面好像一樣有塊磁性板,想說一定可以用,就買了,想不到事情可沒這麼美好!
唉呀!光前蓋板還是沒用
事到如今,就發揮一點實驗精神→一定是後背板也有機關,動手把原廠的給拆了…果然…
我第一時間想:這廠商未免太用心了吧!
我就小心地把這三小塊給卸下來,若割壞了可能也不能用了!
真的是塊晶片貼紙→RFID

這是塊圓形的小磁鐵吧!還有片方形的
完工,拆下來裝到相對應的位置
最後測試,果然可行…,我並不是在鼓勵「山寨」,而是這個小小的實驗其實可以看出人家很用心的,連這種配件都不是只倚仗著原廠的稱號就賣很貴的價錢,為了防山寨盜版,可是有下功夫在裡頭的,我們在做事情及做各項計畫時,也應該心思細密一些,成果才能細緻精密一點,這是我的感想…

2015年11月3日 星期二

寫一個電腦抽籤的程式

昨天,學校的教學組長提及有沒有辦法在校內語文競賽時,選手抽籤像全市比賽那樣,用電腦抽號!我直覺地回答:「這簡單呀!」(聽說主任本來要去找一下有沒有人在賣這種程式…)
其實,一切都是為了「比賽的公開與公平」,這個要從校內做起…,也是需要啦!
看了一下,全市比賽的抽籤程式用的是Excel巨集寫的,一來我不擅長那個,二來我想弄個漂亮點、功能好一點的,所以花了一下子來寫支「競賽抽籤程式」。
程式執行畫面

說來說去,就是電腦亂數啦!
程式裡的簡單說明
要用這支程式,首先就是建一個選手名單,要不然誰知道你要抽什麼?所以我很簡單地提供一個純文字的範本檔,使用者填好另存後,就可以當作給程式的Source了

為了呈現出公平中的公平,引入名單時還可以決定抽籤順序,免得有人連「誰先抽」也計較(※說實在的,有必要那麼計較小朋友的競賽得失嗎?學到了東西比較重要吧!)
接下來選手名單就會列表在左側的欄位裡了,這是主持人可以決定讓輪到的選手上來一個一個抽,或由電腦一次幫所有人抽好…
在這個部份,我就讓它呈現一點兒效果(正在抽及抽出號碼的畫面及音效)
正在抽號…

抽出來了…
我把這支程式放在網路上供有興趣的人→下載參考
※程式畫面我嵌死了忠義國小的校幑和學校名稱,不過那都是可以改掉的,如果有人有需要的話。
※寫這種程式,我想最重要的就是操摐亂數的技巧,以下面這個涵數(lua程式)來說,傳入一個數字 n 要求它在1~n之間取一個亂數,還要進行檢查這個數字在之間取過了沒
function num_set(n)
  g_no = Math.Random(n);
  g_tb_Count = Table.Count(g_tb);
  if g_b_Count == 0 then
Table.Insert(g_tb, 1, g_no);
  else
NumFind = false;
for i,j in pairs(g_tb) do
if g_no == j then NumFind = true; end
end
if not NumFind then
Table.Insert(g_tb, g_tb_Count+1, g_no);
end
  end
end
再來,我就會搭配一個迴圈來讓程式一直跑到我想要的所有亂數都產生為止,下面例子就是我想要電腦幫我跑出25個36以內的不重覆亂數來,呵呵…反正是電腦在忙!
   while g_tb_Count < 25 do
      num_set(36);
   end

2015年11月1日 星期日

Arithmetic Challenge Open2015開發紀錄

今天我把以前開發給學校學生使用的算術大挑戰(Arithmetic Challenge)改版開放給校外,主要是把消息Share在溫老師的備課Party,比較起來,這兒重視小朋友學習的老師或家長還是多一點吧!
程式網站的位置→http://163.26.23.3/app/math_game_ex/
這是一個主從式的程式,意思是程式在使用者的電腦上執行,背後卻可以和伺服器連動,很多電玩不都是這樣嗎?以這個程式來說,小朋友挑戰的成績可以上傳到伺服器配合的網站程式接收,這樣可以讓小朋友們比拼一下誰厲害。
原本結合在學校兒童學習網的後端
在這次的改版中,保留原本程式中算術項目功能,「個位數加法」、「二位數加法」]、[九九乘法]、[二位乘一位]、[100以內的減法],我覺得這些項目是小學生最需要的話題,簡單是簡單,就算是一位加一位的題目,如果趕你時間,就可能會出錯囉!
我趁這個機會,就把最近用的「憤怒鳥」加到畫面裡。
程式執行起來的畫面
當挑戰者(學生)按下開始後,程式會自動出題,共20題,題目在上方,答案會隨機出現在下面的八鈕之中,學生做完一題,程式會立刻出下一題,直到20題結束。
分數的核算方法:本程式計算成績的方法依據二個部份→答對的題數及所耗用的時間,而且連績答對還會有動態加分,如此設計的原因是希望學生能同時兼顧作答的正確性及速度。
進入測驗的畫面
我覺得我之前構思的計算分數的方法是蠻不錯的想法→想得高分,得兼顧速度和正確還有連續正確…,只是過去在學校實施,有很多學生的成績會很接近,使用的秒數有一樣的情形,那是因為之前的程式,我讓它每一秒核算一次所謂的「時間加分」,當許多認真的學生出現時,他們的成績會很接近,甚至一樣。
所以這一次,我修改程式這個部份,改為每0.1秒核算一次,我想這樣子,想同分的機會就不多了。

再來就是成績上傳這件事,原來的版本,小朋友測驗完後,想要上傳成績,會跳出一個視窗要求輸入帳號密碼,會送出到兒童學習網認証並取得學生的資料,再寫入成績表,所以可以上傳成績的都是本校的學生。
想讓程式改成讓學校之外的人上傳成績,以學習的角度來說,這絕對是很棒的事,但如何在上傳成績時進行「認証」變成一件很值得思考的事,我不可能要求凡是要上傳成績的人都來系統申請帳號,因為這樣會讓事情變複雜了,而且我也不想找自己的麻煩。
最後,我想了一個辦法,伺服器上不需要保有使用者的帳密,但大家都能以自己的名稱來上傳成績,且人不會有重疊的問題,就是某部電腦上執行這支程式而想上傳成績的,請家長或老師幫學生編輯一個我提供的文字檔,自行建立想要上傳的所有人資料(不違個資隱私的),然後mail給我(tnmongo@tn.edu.tw),而我只是打開來看看有沒有使用「不雅文字」的(我們教育單位總要注意一下)

我也不用費什麼工,只要寄來的檔,沒什麼問題,我就原樣地把這個檔放上網站上的某個程式知道的位置,而我會回信給寄信者一個「特殊號碼」,如果有某個老師為30個學生建了資料,他只要跟這些學生講這個「特殊號碼」,就算在家中的電腦,學生第一次想上傳成績時就可以利用這個號碼,取得這30個學生的帳號,可選擇自己,然後上傳成績。
用特殊號碼取得帳號資料

取得後,帳號那一欄就有人可以選了

※其實「特殊號碼」就是引導程式到成績網站上載回老師建的文字檔回放在C:\cw_arithmetic中,一個叫user.enc的檔,您是不是想說:「想搞怪的,這時再去改這個檔,不是一樣」,可沒這樣簡單,因為我已讓程式將它「編碼」,改不了的!
如果,有老師日後想增減或改變帳號資料,只要重寄文字檔給我(tnmongo@tn.edu.tw),我就會再回一個不同的「特殊號碼」,使用者只要將C:\cw_arithmetic\user.enc給刪了,程式就會讓它重從取得資料檔了!
※老實說,對於想出這個方法,我自己都覺得蠻得意的。

在網站端接收程式的部份,其實就蠻簡單的,不管是ASP或PHP…都可以寫的,只要能接受傳送來的數據,寫進DataBase就行了,也不會有什麼資訊安全問題,以想上傳成績的使用者來說,也不會有什麼隱私問題,可以不要寫自己的真名,只要能識別自己就行了,成績上傳的用意是讓小朋友知道「人上有人、天外有天」也許就會更認真…

2015年10月19日 星期一

Multiplication Chessboard的更新紀錄





在10月上旬將這個程式Share出去之後,有許多老師同好對「九九乘法遊戲板」感到興趣,所以我儘可能地快速Update它到我認為較完整的版本,主要就是加入對戰紀錄分析,我個人認為這可比遊戲本身更重要,也加入了一點音效…
加入可以逐手討論的區塊
若有大人或老師,在某場遊戲結束之後,引導小朋友(對戰者或其他人)一起來「回顧」每一手紀錄,這可以讓小朋友長智慧,因為不僅是單純的背熟九九乘法這麼陽春,它還包含觀察對方的局勢做出是要「進攻」或是「阻止」的決定!
以程式的角度來說,就是要在遊戲進行中,不斷地留下紀錄,所以我讓程式在啟始時,在使用者的電腦裡檢查並建一個目錄,就在C:\cw_cheesboard,遊戲進行時,程式會截取盤勢畫面及寫下使用者動作的log,最後在程式中增加一個區塊→「對戰分析區」
每一次的對戰會被以時間為標記留下來
選了對戰紀錄後,就可以進入那一場的檢討畫面。
在這一次的Update中,有鑑於目前螢幕或是單槍都是16:10的比例,且解析度也都不錯,便加出一版使用1200X800的版面,並用KIOSK模式(全螢幕遮蔽),結果老師們也大都認為不錯。
KIOSK模式執行的程式
不久之後(才釋出程式一二天),有位新市國小的大紅帽老師來商談,希望能改一版適合他的「全黑板投影」,還很認真地提出了他的需求,想說如果不要太費時,就舉手之勞一下…

原來現在有一些老師認為原本的教室投影模式(單槍投在布幕上)太不清楚,所以就投在黑板上,這樣還可以用粉筆加上去,算是一種巧思,也有書商的數位教材光碟也提供了所謂的「黑板投影模式」,其實很多年前,我去台北開會或研所上課時,就有教授把畫面直接投在白板上,加上白板筆說明課程,用黑板的話,在目前的教室應是不錯的啦,因為教室配的投影幕都是4:3的居多,早就跟不上時代了,只不過認真的老師,仍免不了要吃些「粉筆灰」…

投影在黑板上有二個重點:1.黑板是狹長型的。2.投影在黑板上對於內容的顏色是有限制的
還有,大紅帽老師希望利用鍵盤來控制程式…,嗯…這些要求對我來說也還算可以啦,不過我也沒太多時間就是了,而且看來他使用雙螢幕在玩(這麼有衝勁的老師現在也不多了),所以我也加了一個螢幕來試程式效果。
這時筆電是主螢幕,另一個就是副螢幕(二個解析度可設為不同)

發現程式一開始會執行於主螢幕,由於寬長於螢幕解析會被截斷,拖到副螢幕也不會自己恢復

加上二行程式就解決了

就下指令要求視窗重繪就是了
經過與大紅帽老師一番來來返返,整個程式也差不多了!他應該還能接受吧!畫面就像下面一樣,程式的版面是1580X426,在執行時,大紅帽老師打算把控制區留在主螢幕上,只有遊戲區拖到副螢幕上,而他的副螢幕就是他的單槍。
因應黑板投影所使用的顏色大概就幾種

我讓數字盤面隨著目前的玩家移動

整個程式應還算可行
※若您也此樂趣想要一試,可以在下面的連接下載到這個版本:
http://163.26.23.3/app/multiplication_chessboard/MultiplicationChessboard_v117.exe
附記:
◆大紅帽老師提供了幾種適合於黑板投影時使用的色彩,我想這應該是經驗法則,而且每個人的看法會有不同的。我把提供的16進位順便轉換成RGB模式表示在下面這個網站可以轉換
http://www.ifreesite.com/color/color-code-converter.htm
紫圓:#9600E1 RGB150,0,255
藍圓:#005AE1 RGB0,90,225
紅圓:#FF0066 RGB255,0,102
綠圓:#368700 RGB54,135,0
黃字:#FFFF00 RGB255,255,0
紅字:#E90080 RGB233,0,128
紫字:#6E00A5 RGB110,0,165

藍字:#00F0B0 RGB0,240,176
◆關於留下玩家每一手的對單紀錄,我用方法是讓程式去截取程式數字盤的影像存成jpg檔,這個部份其實很有程式難度,不過很幸運地,以前在開發論譠有一位厲害的荷蘭工程師SSIDE釋出了涵式作法,這需要dotNet2.0以上的支援,以前我就曾用在我的論文所開發的系統中,現在win7以上都內建.net framework,所以這部份能順利解決。
◆大紅帽老師所需要的鍵盤控制功能,在程式的實作上並不難達成,主要是將程式碼寫在ON key這一個event中就行了,當然得判斷一下使用者是按了哪個鍵?而電腦鍵盤的每個按鍵原本就有特定的代碼能讓程式截取
Decimal
Hex
Character
8
8
Backspace
9
9
Tab
13
D
Enter
16
10
Shift (both)
17
11
Ctrl (both)
18
12
Alt (both)
19
13
Pause
20
14
Caps Lock
27
1B
Esc
32
20
Spacebar
33
21
Page Up
34
22
Page Down
35
23
End
36
24
Home
37
25
(left arrow)
38
26
(up arrow)
39
27
(right arrow)
40
28
(down arrow)
45
2D
Insert
46
2E
Delete
48
30
0
49
31
1
50
32
2
51
33
3
52
34
4
53
35
5
54
36
6
55
37
7
56
38
8
57
39
9
65
41
A or a
66
42
B or b
67
43
C or c
68
44
D or d
69
45
E or e
70
46
F or f
71
47
G or g
72
48
H or h
73
49
I or i
74
4A
J or j
75
4B
K or k
76
4C
L or l
77
4D
M or m
78
4E
N or n
79
4F
O or o
80
50
P or p
81
51
Q or q
82
52
R or r
83
53
S or s
84
54
T or t
85
55
U or u
86
56
V or v
87
57
W or w
88
58
X or x
89
59
Y or y
90
5A
Z or z
91
5B
(left Windows key)
92
5C
(right Windows key)
93
5D
(application key - located between
the right Windows and Ctrl keys
on most keyboards)
96
60
0 (numpad with Num Lock on)
97
61
1 (numpad with Num Lock on)
98
62
2 (numpad with Num Lock on)
99
63
3 (numpad with Num Lock on)
100
64
4 (numpad with Num Lock on)
101
65
5 (numpad with Num Lock on)
102
66
6 (numpad with Num Lock on)
103
67
7 (numpad with Num Lock on)
104
68
8 (numpad with Num Lock on)
105
69
9 (numpad with Num Lock on)
106
6A
* (numpad)
107
6B
+ (numpad)
109
6D
- (numpad)
110
6E
. (numpad)
111
6F
/ (numpad)
112
70
F1
113
71
F2
114
72
F3
115
73
F4
116
74
F5
117
75
F6
118
76
F7
119
77
F8
120
78
F9
121
79
F10
122
7A
F11
123
7B
F12
144
90
Num Lock
145
91
Scroll Lock
186
BA
;
187
BB
=
188
BC
,
189
BD
-
190
BE
.
191
BF
/
192
C0
`
219
DB
[
220
DC
\
221
DD
]
222
DE
'
※還有一點可以提醒自己的,程式若是用到onkey的,在開始執行後一定要記得給一個命令focus住畫面上某一個物件,如此鍵盤的截取才會開始運作,還有當鍵盤模式處於中文狀態,不管按哪個鍵,返回值都會是229

2015年10月10日 星期六

開發Multiplication Chessboard紀錄

中秋節連假前的星期五(2015.9.25),我們利用下午沒有課務的時段,在圖書館辦了一場校內的研習:「桌遊在教學上的運用」,參加的就是幾位平時對於桌遊很有興趣的老師,像是内人(Spring Wu)和女兒(Irene Zheng)就是桌遊長期以來的支持者。所以在這小小的研習中,老婆帶了許多之前買的桌遊和其他老師及小朋友分享,也分享了最近在溫老師備課party中看到的資訊:有位邱老師分享了九九乘法盤遊戲的作法,大人和小孩都覺得效果很好。
剛好本人會寫點小程式,心想可以把這「寓教於樂」的想法化成程式,或二人玩或投影,若有電子白板的教室,豈不美事一件,就立刻動手…
※寫程式對自己也是很有幫助的,它可以促進腦細胞快速運動,讓一個人即使夜深了也不會累…哈哈!是隔天才會累
第一件事就是看著人家這張設計,想一下人家建議的玩法
分析原本構思者的想法很重要,它將成為程式最基本的樣子,這方面我算是還可以啦!過去也累積了許多經驗。

一開始先把想像中的畫面做出來
既為「程式」,程式碼才是最重要的,接下來就是思考畫面上的各種功能要如何佈置及靠程式碼去實現,這過程中充滿了腦海中對於未來運作程序的順序模擬,事件及動作,如果怎樣就怎樣…英文就是event→function→if xxx then else xxx,我寫程式的速度算是蠻快的(如果慢下來放著,就會不想寫了),很快地我就完成了基本樣式(約莫一二天中的空餘時間),也不能全部時間都拿來做這事,還是要上課、打球、家務事、也得睡覺…
第一階段最費腦袋的應該就是如何判斷所有三連環的情形,一想之下,情形真多…如何把它化為公式判斷是很重要的,像下方這樣:
function chk_line(user,point)
  if user == "user_green" then
    if String.Find(txt_user_green, "|" .. n-6 .. "|", 1, false) ~= -1 and String.Find(txt_user_green, "|" .. n+6 .."|", 1, false) ~= -1 then
      victory = true;
    end
  elseif user == "user_red" then
    if String.Find(txt_user_red, "|" .. n-6 .. "|", 1, false) ~= -1 and String.Find(txt_user_red, "|" .. n+6 .."|", 1, false) ~= -1 then
      victory = true;
    end
end
這大概花了我最多的時間來思考吧!
還有我也希望程式能吸引小朋友,剛好我家女兒很喜歡「Angry Birds」,所以裡頭如果能用Angry Birds圖案就不錯,但會不會有版權問題呢?上網找了一下,Angry Birds Playing CardDeck and Vector Characters,很棒的外國作者的作品,以創用CC 3.0釋出,看來應該可以使用

在程式中我也用了女兒(Irene Zheng)的手繪作品,寫程式的人特權就是愛用什麼素材就用什麼素材,可以完全客製化
玟琳喜歡畫Angry Birds(其中一張)
這個夠活化腦細胞的
經過一番努力,我完成了所謂的Beta版,迫不及待地請老婆女兒當首席測試員,看看有沒有什麼問題,果然就有問題,竟然出現了該獲勝,程式卻沒反應的情形,當然就是有Bug啦!
這程式是耍呆嗎?
這其實很平常啦!「哪有人吃燒誁餅不掉芝麻的!」寫程式哪有沒bug的,但這可又要想一下了,快速地掃視一下程式碼,果然原本的想法裡有漏洞,通常我會做筆記把情形寫下
這東西應該只有我自己看得懂
很幸運地!很快看出問題出在哪兒,就可以快速修正它,所有的邏輯思考到此應算完成了,接下來我就想為程式加些原本沒有的想法,免得遊戲太陽春了,所以我加入了進階版亂數盤面的功能和限時的功能,以及讓玩家能選擇代表圖的功能。
跑起來的畫面
先這樣吧!就Release了,這程式我放在http://163.26.23.3/app/multiplication_chessboard/,讓有興趣的同好們一起玩玩看,過二天有空,我還會繼續Update它,最終我想讓它和「兒童學習網」連接,取得學生的資訊,並可以上傳對戰歷程。
以下是一些程式中用到的畫面:都是用女兒畫的圖來做的



這是我個人最喜歡的咖菲貓