今年臺灣燈會辦在南投,原本去年底就想開始寫,那時候還不知道有什麼功能可以做,直到看了南投縣政府的官網出來後才花了一些時間寫(官網用CodeIgniter 做的樣子),最後利用Google Map API 做出了燈會地圖,希望不要有太多bug 就FC 啊…有的話請麻煩回報一下,有建議可以告訴我,在文章、Goolge Play 評論留言或者mail 給我 ym.huang0808 [at] gmail.com,測試的環境就有我的手機Nexus 5…,沒有平板能做測試(差點衝去買一個Nexus 7…)。
AWK 處理檔案
在處理「10,000 Top Passwords」的檔案時,想轉成array 資料型態存起來,檔案是:
password, 32027
123456, 25969
12345678, 8667
1234, 5786
qwerty, 5455
12345, 4523
dragon, 4321
pussy, 3945
baseball, 3739
football, 3682
第一欄是要儲存成array 的資料,就想到利用AWK 來處理,之前有用過了,不過現在有點生疏,來筆記一下,加深印象。
AWK 結構及選項
AWK 是讀取檔案或利用pipeline 的方式讀取接收到的結果,以每行為一個記錄(record)進行處理,在行中會在被區分成欄位(field),預設區隔欄位的則是空白
$ awk -F fs -v var=val 'pattern {action statements}' filename
- -F :可以自訂區隔欄位的字元是哪一個
- -v:則是可以設定變數
- pattern:當讀取每行時,可以利用pattern 判斷是否符合,如果沒pattern 需要判斷可以省略
- action statements:要進行的動作,要將執行的動作寫在{ } 大括號內
繼續閱讀 “AWK 處理檔案"
2013 TiC100 學習及獲得哪些
最近要開始改履歷了,所以就利用部落格來回想一下參加 2013 TiC100 的過程。
動機
距離去年(2013)的 TiC100 也有半年多的時間,從一開始看到學校研發處發的 email,用Google 搜尋到 Youtube 上的2012 年冠軍 team 總決賽影片(參考此連結),當下覺得可以完成一個東西真棒!
來自不同系的組員
在報名前,因為有些人有畢業後的工作,組員變動了不少次,最後我們由五個人組成了 CPU,組員來自不同背景包括企管、電機、景觀、資管,在一開始的履歷審核與議題配對就發現到不同系的人會有不同的溝通語言與思考邏輯。
主辦單位議題配對出來後會舉辦議題說明會,在說明會前,與 Dani 老師開會時,提醒我們要好好的了解選到的議題內容,因為不是每個組員對物聯網 (IoT)、RFID、ZigBee、商業模式(BM) 等有概念,每個人針對自己擅長的部分跟大家做分享。當天在研華公司的議題說明會時,大家都發現到對議題 owner 在說明、講解的技術應用與用詞會更加了解。

溝通是最大的無形成本
組員們一開始都是沒合作過也互相不認識,大部分 meeting 時,會從 A 方向討論到 C、D、E 方向,大家的想法都不同,所以幾乎 meeting 都是要 2~3 小時以上,在某一次 meeting 時,有發現到一個做法還不錯,要專注在單一方向實際上不太可能,可以利用大張一點的紙或白板記錄下討論過或者還沒討論完的內容,能記越詳細越好,這樣能避免討論到 E 方向時,要跳回 A 時又要重新來過(這跟 stack 很像)。
繼續閱讀 “2013 TiC100 學習及獲得哪些"
CodeIgniter 使用PDO driver
在CodeIgniter 中可以設定Database 使用的Driver,修改資料庫連線的設定檔存放在:
application/config/database.php
裡頭有一個設定值是有關使用dbdriver的:
$db['default']['dbdriver'] = '';
Android 3.X 以上加入Menu 鍵
在Android 3.X 以下的版本,手機都會有實際的Menu 鍵(Menu button),但是在3.X之後的把實體Menu 鍵拿掉,引進了ActionBar 的類別,將Menu 鍵放在ActionBar 的部分,因為,最近把手機換成Nexus 4,發現Portable e-Campus 學校的App 沒顯示Menu 按鍵,查了一下看到官網有提供解決方法,這個方法很簡單,不用加ActionBar,因為我們的App 在某些介面下加入ActionBar 看起來會不太搭,但是之後可以會把ActionBar 加上去,因為這樣才能讓使用者有一致的操作方式。
一、顯示方式


[MySQL]利用mysqldump備份
mysqldump工具蠻常來使用備份資料庫,會將所要dump的Database備份成一個SQL Script檔案,如果要還原的話,只要在MySQL執行SQL Script即可。
一、mysqldump指令語法
mysqldump [options] [db_name [tbl_name ...]]
二、 mysqldump選項
- –all-databases, -A 輸出所有資料庫
- –databases, -B 輸出的資料庫名稱
- –user=user_name, -u user_name 資料庫使用者名稱
- –password[=password], -p[password] 資料庫使用者密碼
- –complete-insert, -c 使用完整的INSERT指令,也就是包含欄位名稱
- –no-create-db, -n 不輸出CREATE DATABASE指令
- –no-create-info, -t 不輸出CREATE TABLE指令
- –opt 是mysqldump中的預設參數,參數功能相等於加入了 –add-drop-table –add-locks –create-options –disable-keys –extended-insert –-lock-tables –quick –set-charset等參數
- –hex-blob 將binary的欄位(含BINARY, VARBINARY, BLOB等資料型態)轉換為16進位,如果有binary欄位要加入這個選項
在mysqldump的文件中有介紹到常用的指令方式
shell> mysqldump [options] db_name [tbl_name …]
shell> mysqldump [options] –databases db_name …
shell> mysqldump [options] –all-databases
繼續閱讀 “[MySQL]利用mysqldump備份"
CodeIgniter開啟CSRF保護時使用Ajax
最近在利用CodeIgniter開發網站時,需要檢查使用者輸入的值是否有重複,為了避免使用者都輸入完資料送出表單後才去檢查,利用JQuery中的Ajax在輸入完的時候就進行檢查,但是利用Chrome Developer Tool來Debug時候,發現錯誤訊息是:
POST http://localhost/index.php/my_ajax/is_username_duplicate 500 (Internal Server Error)
最後Google後發現原來是我在之前開啟CSRF的問題。
一、什麼是CSRF
CSRF(Cross-Site Request Forgey, 跨站冒名請求)為當使用者在已登入的狀態下,被攻擊的人執行了使用者未知的操作,因為,當使用者在登入狀態下,只要不關閉瀏覽器,就會保留著Session或Cookie,網站通常都是利用檢查Session或Cookie來確認使否連線進來的使用者是否已經登入,所以攻擊者可以利用社交攻擊,傳送一個連結或操作等,使用者在未知情況下去操作,就可能會依照使用者所安排好的操作去執行,聽來聽去可能有點霧煞煞,參考網路上的一下範例解釋一下:
HTTP Request有兩種分別是POST及GET,在GET 方法可以利用網址後面帶入變數的方式,例如:
攻擊者可能利用電子郵件或者社群網站寄送一個連結給使用者
這個連結可能是讓使用者買某個東西送給某人,如果使用者不經意點擊,就可能發生了,那會有人說改用POST就好了,其實不盡然,因為只要攻擊者利用JavaScript就可以執行POST 方法了
繼續閱讀 “CodeIgniter開啟CSRF保護時使用Ajax"
Google Nexus 4 開箱文
總覺得該寫些什麼
好久沒發文了,距離上次發文已經一年了,總覺得該為這一年記錄下些什麼。
專題
11月中專題終於告一段落,最後的結果雖然不盡理想,但自己卻頗有收穫,不管對於Android App開發或者專案開發或者團隊合作及分工上面,我們也將開發出來的App上架在Google Play。
在整個專題的過程,從一開始的熟悉Java語法到Android SDK,我們都靠著自己自學、上網找資料到最後的幾個月才進行開發,開發過程中跌跌撞撞,現在想起來並沒有很周全的計畫及思考,最先完成的是課表功能,利用到學校e校園服務網解析HTML tag來擷取到課表,儲存到SQLite中,讓使用者能夠在手機上查看課表,也能使手機在上課中自動開啟靜音,這是一開始最初的想法,其中遇到幾個難題是登入e校園服務網的部分,這部分利用到HTTP方式將值帶入form中利用HTTP POST method達成,並且儲存了cookie到課表頁面,靜音的部分差點做到一半想放棄了,因為對Android中的AlaramManger及PendingIntent不是很熟,所以一直卡住,尤其是在PendingIntent的getBoroadcast() method,當初看書及網路上的資料都把requestCode設為1或0,但是這卻造成靜音的部分只能夠成功一次,可是利用LogCat查看程式都有設定每個上課及下課時間,最後才試出來requestCode在每個設定要唯一。
另外一個功能是WiFi登入,原本的構思是要當使用者在學校開啟WiFi將可以自動在背景登入WiFi連上網,最初想說一樣利用HTTP POST認證網頁達成,沒想到認證網頁的submit是利用JavaScript觸發事件,所以利用HttpPost類別無法成功,查了StackOverflow有人利用HtmlUnit完成,可是在中間遇到一些Class連結不到的問題也試著很多方式解決都無法成功,所以放棄了HtmlUnit,在這之前組長一直說利用WebView去完成,但是因為WebView要跑UI出來才能,這是最後一個方法,沒想到還是利用WebView去完成,WebView能執行JavaScript,我們不呈現出認證網頁,而是顯示認證訊息,結果雖然與預期的不同,需要開啟App後才能進行認證,不是與原本的想法利用Service在背景認證。
專題中,與組員們有時候會鬧的不愉快,但是最後都能大家講開,自己也體會到一點,有些事情是不能強求,也不是會照自己所想的去進行,或許有時候能退一步去想,依照每個人興趣、擅長的部份去分配,像開發出了App,除了需要用到技術面的程式之外,也需要進行行銷等。我們也有對程式碼利用SVN 來進行版本控制,最近也利用Trac來進行issue track與Wiki文件編寫等。
FreeBSD擷取封包
好久沒發文了,最近好多問題,院上的DNS Server查詢有問題,檢查過設定,看過log也沒發現到什麼問題。
最後,因為又發生了一些事情,好像是網路方面的問題,就試著檢查封包看看。
在FreeBSD檢查流經網卡封包的工具為TCPDump,可以擷取封包,看是要在FreeBSD上看或者是要將擷取到的資訊儲存成檔案,再利用WireShark來解析也可以。
擷取通過bce0網卡的所有封包:
% tcpdump -i bce0 -s 0 -w 20111016.cap
擷取通過的HTTP封包
% tcpdump -i bce0 -s 0 -w 20111016_http.cap port http
除了FTP、HTTP、SMTP、SSH以外的封包全部擷取
% tcpdump -i bce0 -s 0 -w 20111016_ex.cap not port ftp not port http not port smtp not port ssh
參數說明:
-i:指令的網卡代號
-s:抓取的封包長度最大值,值為0代表沒限制
-w:輸出的檔案名稱





