[MOPCON2014]蒐集一些有趣的MOPCON場次(1)

image

前言:

雖然我沒有去MOPCON2014,但是還是有去看一些有趣的題目,順便找找他的slide出來分享一下. 這裏有全部議題

有趣的題目:

  • 講個秘訣之:離開新手村後也可以順便聽一下的程式「設計」指南
    • Slide:
    • 內容與心得
      • 要提到程式設計中”設計”的思維.既然我們都稱自己是程式設計師,那麼你的作品是不是真的符合所謂”設計”的概念?
      • 裡面提到的設計心理學,如果將它應用到程式設計:
        • 預設用途:
          • 設計任何程式之前,對於他的預設用途必須要先想清楚.
        • 指意:
          • 要能讓別人一看就能了解並且不容易搞混的API設計.
        • 使用侷限:
          • 設計各種功能與API要注意到可能會有許多使用上的侷限.不論是[物理][文化][意義]或是[邏輯]上.
        • 對應性:
          • 設計的時候要有好理解的對應性,才能讓人馬上上手.
        • 回饋:
          • 設計適當的回饋,可以讓使用的人了解到目前的狀況.
        • 概念模型:
          • 高度簡化下,對於事物的如何運作的解釋.
      • 如同講者提到的,其實任何一種設計都是圍繞著人走.所以就算是程式設計也要圍繞者使用的人為出發點去思考,能能算是比較好的設計觀念.
  • in in der 響應式編程
// Impreative Programming
int x,y,z;
x=1; y=2;
z= x+y; //1+1
y= 2;
print("%d", z); //z=2

// Reactive Programming
int x,y,z;
x=1; y=2;
z= x+y; //1+1
y= 2;
print("%d", z); //z=3
 
  • Best software architecture in app development
    • Slide:
    • 內容與心得:
      • 如何容易地展現內容? 建議使用 ListView其中 UICollectionView是功能強大的部分.
        • 優點:
          • UICollectionView 可以自訂顯示方式,並且可以對應到不同的大小顯示方式.
          • Cell 可以重複用,具有彈性的顯示方式
          • 具有自動更新與記憶體管理的部分
      • 修改一次可以同時變更許多地方: (主要提到將一些常用到的顯示部份抽取出來)
        • 顏色:
          • 將顏色變成類別內的變數[參考下面的程式碼(1)]
      • UI Layout 建議使用Xib 而不是Stroyboard
        • 原因: Storyboard 不易閱讀,而且開很大的時候相當耗費時間,並且時常有衝突不好修改.
      • Unit Test: 建議使用XCTest Framework
        • 可以使用內建的Automation 來達成自動測試,就算是GPS相關的問題也可以透過GPX Creator 來測試.
      • 顯示你的內容
//(1)
+ (UIColor *) themeBackGround
{
    return [UIColor colorWithHexString:@"dedede"];
} 

[MOPCON2014]蒐集一些有趣的MOPCON場次(1)

image

前言:

雖然我沒有去MOPCON2014,但是還是有去看一些有趣的題目,順便找找他的slide出來分享一下. 這裏有全部議題

有趣的題目:

  • 講個秘訣之:離開新手村後也可以順便聽一下的程式「設計」指南
    • Slide:
    • 內容與心得
      • 要提到程式設計中”設計”的思維.既然我們都稱自己是程式設計師,那麼你的作品是不是真的符合所謂”設計”的概念?
      • 裡面提到的設計心理學,如果將它應用到程式設計:
        • 預設用途:
          • 設計任何程式之前,對於他的預設用途必須要先想清楚.
        • 指意:
          • 要能讓別人一看就能了解並且不容易搞混的API設計.
        • 使用侷限:
          • 設計各種功能與API要注意到可能會有許多使用上的侷限.不論是[物理][文化][意義]或是[邏輯]上.
        • 對應性:
          • 設計的時候要有好理解的對應性,才能讓人馬上上手.
        • 回饋:
          • 設計適當的回饋,可以讓使用的人了解到目前的狀況.
        • 概念模型:
          • 高度簡化下,對於事物的如何運作的解釋.
      • 如同講者提到的,其實任何一種設計都是圍繞著人走.所以就算是程式設計也要圍繞者使用的人為出發點去思考,能能算是比較好的設計觀念.
  • in in der 響應式編程
// Impreative Programming
int x,y,z;
x=1; y=2;
z= x+y; //1+1
y= 2;
print("%d", z); //z=2

// Reactive Programming
int x,y,z;
x=1; y=2;
z= x+y; //1+1
y= 2;
print("%d", z); //z=3
 
  • Best software architecture in app development
    • Slide:
    • 內容與心得:
      • 如何容易地展現內容? 建議使用 ListView其中 UICollectionView是功能強大的部分.
        • 優點:
          • UICollectionView 可以自訂顯示方式,並且可以對應到不同的大小顯示方式.
          • Cell 可以重複用,具有彈性的顯示方式
          • 具有自動更新與記憶體管理的部分
      • 修改一次可以同時變更許多地方: (主要提到將一些常用到的顯示部份抽取出來)
        • 顏色:
          • 將顏色變成類別內的變數[參考下面的程式碼(1)]
      • UI Layout 建議使用Xib 而不是Stroyboard
        • 原因: Storyboard 不易閱讀,而且開很大的時候相當耗費時間,並且時常有衝突不好修改.
      • Unit Test: 建議使用XCTest Framework
        • 可以使用內建的Automation 來達成自動測試,就算是GPS相關的問題也可以透過GPX Creator 來測試.
      • 顯示你的內容
//(1)
+ (UIColor *) themeBackGround
{
    return [UIColor colorWithHexString:@"dedede"];
} 

未完待續…..

[Mooc][Android]Programming Mobile Aplication on Android Platform(week5) - 2 Assignments

image

前言:

由於這個是我的有繳學費的課程,其實我很認真每天都把進度跑完.誰知道,本週竟然有兩個程式作業,一個是電腦評分,一個是同學們之間的互評.

Program Assignment:

這次的是Notification的作業,其實並不會太困難.要填上的程式碼也不多.只是原先題目拼字有先錯誤,所以找了一下.

Peer Assignment:

這次Peer Assignment 我覺得比較困難,是因為要搞UI的layout,幾個重點分享給大家.

  • 如何在 Andorid 上面做出分割的塊狀?
    • 主要就是利用 Linear Layout 然後記得要設定weight (他會幫你用分割,舉例而言: 兩個button 都設定weight 為1 的話就是平分)
  • Seekbar 的設定顏色部分,可以透過 setBackgroundColor 並且使用 Color.argb() 來調整顏色
  • 最後,如果要繳交Video Snapshot 在Mac上面可以直接透過QuickTime Player來使用

以上就是這次的Peer Assignment 的影片 http://youtu.be/NMd7Tw5aKL4

參考:

[Mooc][Android]Programming Mobile Aplication on Android Platform(week5) - Notification and Threads

image

前言:

來到第五週,其實作業已經越來越花時間.需要好好把握時間趕快做完才行.

筆記:

  • 關於 Broadcast:
    • 可以是有順序的(利用setPriority來設定),其中Priority 越高順序越前面.
    • 一個broadcast 可以同時被多個broadcast receiver 接收.
    • 其中一個Broadcast receiver 可以透過abortBroadcast 來強迫其他receiver來收取broadcast.
    • 關於sticky broadcast 比較需要注意的是:
      • 接收 sticky broadcast可以收到在註冊前發生的變動.
  • 關於 Threads:
    • Java的thread 建立之後不會馬上執行.需要跑start()
    • 背景的thread無法執行UI的相關動作.(這個地方跟 WinApp 跟 iOS App都一樣)
      • 需要執行要跑 runOnUIThread()
      • 或是每一個UI物件都有自己的View的post函式.View.post(Runnable action)

image

  • 關於AsyncTask:
    • 流程:
      • OnPreExecute -> doInBackground() -> publishProgress() -> OnPostExecute()
      • 其中如同上圖,有相對應的UI thread method OnProgressUpdate()最後 ObPostExecute() 也可以執行UI的更新.
  • 關於Alarm:
    • 註冊後,就送機器進入睡眠模式一樣可以收到.(除非關機)
    • 要取用Alarm需要使用 getSystemService(Context.ALARM_SERVICE) 來取得.
    • Kitkat (API 19) 之後,Alarm的使用變成inexact,也就是說他會盡量把幾個差不多時間的Alarm收集起來一起發送,即時他們時間有些許的差異.透過這個方式來節省電源的使用. (詳細可以參考這段)
  • 關於Networking: (Socket, JSON, URLRequest)
    • 要做網路溝通使用 HttpURLConnection 而不要使用 AndroidHttpClient 跟 DefaultHttpClient,由於Android team在 Android 2.3之後就不太積極開發
    • JSON的取用方式:
      • 要先用ResponseHandler 接回 client的 response 之後再逐一分解.
      • data array 可以用 JSONObject.getJSONArray
      • 每個mapping key/value 可以使用JSONObject.get(key)
    • XML的取用方式:
      • 主要有三種存取的方式: (DOM, SAX, PULL)
      • 其中記憶體消耗最高的是DOM,因為讀取的時候會把所有的XML樹狀資料全部載入.
      • SAX與PULL都是屬於event callback的方式,而PULL提供更多的彈性可以逐一的存取,並且可以控制event的結束.

參考資料:

[iOS][Python]手機掃描條碼下載相關的登入帳號數據

image

記錄一些關於開發這個的一些心得,主要就是手機會透過掃QR-code的方式,來讀取一些帳號資料讓手機可以登錄到相關的服務. 也就是說, 其實手機不用再透過手動的輸入帳號與密碼.而是使用QR-Code掃描.

所以流程就是:

  • 手機打開App
  • 掃描QR-code
  • 連接到某個Json網頁
  • 分析json 資料變成登入帳號密碼
  • 登入某些服務.

剛好遇到我切換到xcode6.1,這裡有一些筆記:

  • Xcode 6.1 GM似乎不太穩定,遇到問題有以下兩個:
    • Random crash: 而且Mac App會收起來(?)真百思不得其解.
      • 主要發生crash 在用滑鼠去點執行或是停止,但是用快捷鍵 Cmd + R 跟 Cmd + . 是沒問題的.
    • Storyboard 物件,變更大小的時候,某些物件會消失.
  • 關於使用的PAAS Server
    • 之前架設django的資料庫管理,當然還沒有連到外在的資料庫,而是使用SQLlite.所以當服務被重啟(PAAS每個30分鐘到一個小時會把你的服務設定維修棉.需要重啟大概要30 sec的啟動時間). 服務重啟~檔案會恢復當初上傳的狀態.
    • 暫時解決方式,先把需要測試的資料上傳SQLlite檔案上去.
    • 之後會把資料移到MongoDB HQ
  • XCode 6.1使用到不知道 X64的toolkit

相關資料:

[Mooc][Python]開始上課Interactive Programming in Python(第一部分) week 0~week5

image

前言:

其實這堂課之前有開始學,不過因為之前卡著學Scala而放棄.這次希望能一併學完它.先放上前五週的心得跟筆記.

筆記:

  • 好用的codeskulptor http://www.codeskulptor.org/
    • 這個東西真的很方便,可以step debugging 之外,還可以視覺化目前(Viz Mode)的記憶體的狀況.
    • 使用方法: 點下Viz Mode -> 按下設定的按鈕 -> 按下單步執行的按鈕.
  • 應該知道的基本常識:
    • 除法要保留小數點,記得要把被除數變成浮點數. (ex: 1/4 = 0 –> 1.0/4 = 0.25)
  • Python也是具有類似指標意義的,可以兩個變數名稱指向同一份資料
    a = b = [1,2,3,4,5]
  • 關於Global 與 Local 的筆記:
    • Valraible 需要加上Global才能存取到Global
    • List 不需要加上Global 可以存取某個元素
    • 但是如果是給值整個list 不使用Global會存取到新的List
  • 關於List的操作
    • 可以用 my_list + [1,2] 來做list 操作
    • append,extend 跟 reverse 都會改變source list
    • 取出可以使用pop (會變動),或是使用 my_list[index].其中index 若為負值是由最後開始算.
  • 關於Dictionary 的操作:
    • Key 可以是 tuple,number,string.但是不可使用list (但是可以使用list的value)
    • Value 可以是 tuple,number,string.甚至是list或是dictionary
    • Key跟Value都不能包含,另外一個Dict
    • dict travesal 可以使用以下的方式
lista = [1, 2, 3, 4]
dict = { 1: 'x', 'x':2, lista[2]: lista, (2,3):(5,2), 77: {1:2, 2:3} }
'''
Using key to find dictionary value
'''
for key in dict:
    print dict[key]

'''
Using tuple ()key,value) to find dictionary items
'''
for key,value in dict.items():        
    print "(", key, ",", value,")"

關於作業:

作業都偏向跟使用者UI互動有關,其中跟Python原理應用比較少.大多圍繞在simplegui

  • 第二週: 一個比猜拳更複雜的猜拳遊戲:
    • 總共有五個型態,考驗random 跟判斷
  • 第三週: 猜數字
    • 就是0~100猜一個數字,然後告訴你太高或是太低
  • 第四週: stopclock
    • 重點是在timer的應用
  • 第五週: pong (乒乓球)
    • 一樣是考驗timer 與碰撞的畫圖部分應用