[coursera][Functional Programming Principles in Scala] 關於課程學習心得(2)(完)

這是接下來寫幾個禮拜的學習心得. 其實我不知道是課程安排的問題,還是我習慣邊寫邊測試.到後面幾個禮拜,因為比較容易用worksheet去撰寫.整個變得相當容易寫而且快速. Week4: 撰寫霍夫曼樹的處理函示 主要內容是關於List的操作,但是比較奇怪的是關於List操作的課程卻是在week5的影音課程裡面 O_o 因為直接拿List來處理,搭配著patch matching其實很容易就上手.這裡可以建議各位多使用worksheet來當你學習上的好朋友,可以快速上手並且測試你的想法. 我的例子就是由於有worksheet可以使用,馬上就著手去開發相關的部分,並且一方面也可以馬上測試來看結果.(順便多寫一些unit test)這樣寫起來應該很快又可以寫完(不過我也是花了接近10+個小時) 最後結果雖然答案都寫完了不過由於用到太多輔助函示被扣了點分數. week5: 本週沒作業 主要是教導一些其他關於集合的處理方式比如說map,filter,flatMap等等相關的內建函示 week6: anagrams也就是給你一個字串把它重組後顯示所有可能的字 一開始是使用之前用過的pattern match來寫,不過看到提示要用high-order來寫.所以全部重寫花了一點時間.果然就可以一行寫好,不過很難閱讀啊… 整體寫起來比week4 還快,不過也不簡單因為許多high-order的函示要搞懂它的用法與如何好好的用它才能寫得更好. 這次還是被扣分~函示輸出太多記憶體不足…. week7: 寫出遊戲Bloxorz 總算把最後一個作業都做完了,感覺有點倒吃甘蔗.後面越來越能了解如何去使用high order function 還有使用各種的recursive 來找出解答. 課程上的倒水杯程式真的很有趣,也很有幫助.倒水杯就是給你兩個不容量度的杯子.比如說一個杯子300cc,另外一個500cc 然後請你倒出400cc的水,你能做的就是到滿某杯或是從某杯倒向另外一個杯子. 我從測試四開始的習慣就是在worksheet上面去寫程式.寫好一個馬上測試結果.並且重複思考每一個步驟是不是有問題.這樣得學習方式對於scala不算熟悉的我相當有幫助. 關於這個禮拜的習題,幾個小建議: 原來提供的unit test真的太少,自己寫一些 最後最佳答案找不出來,試著把圖弄小一點找問題 心得: 學習scala真的讓我有挫折的感覺.不僅僅有許多演算法,更有一些high order function的使用法或是methond/expression parameter .不過學完之後對於其他語言的學習(swift)我想是有相當程度的幫助. Scala的worksheet真的是很酷的東西,而最年輕的語言Swift 也有playground類似的東西(或者是類似iPython的東西). 以前沒有unit test的習慣,由於functional programming的每個函示跟UI的結合比較少而且需要確保每一個部分可以完美的運作,於是我必須要每寫好一個就去思考如何跑unit test.我想這會養成我之後相當好的習慣. 我其實很推薦每個程式設計人員都必須要學過functional programming,他能幫助你不斷地把問題切斷成小段的函示,彼此間不會互相干擾,並且能去組合出最後最佳的結果. 可以參考IBM這篇文章: Functional Thinking
繼續閱讀

[iOS][Android] 許多好用的SDK蒐集(1)

iOS MRProgress  https://github.com/mrackwitz/MRProgress 相當漂亮的 Loading Progress FlatUIKit https://github.com/Grouper/FlatUIKit 扁平化UI 設計的一些原件 WSCoachMarksView https://github.com/workshirt/WSCoachMarksView  製作app使用教學的SDK(interactive coach marks)  JazzHands https://github.com/IFTTT/JazzHands 另外一個製作app使用教學的SDK(app intro) PSTCollectionView https://github.com/pinterest/PSTCollectionView iOS 4.3相容的 UICollectionView不需要用到 iOS6以上,而且是由pinterest 的人弄的. YRDropdownView https://github.com/onemightyroar/YRDropdownView 比UIAlertView更好用的提醒視窗… 有許多種類… Android drag-sort-listview https://github.com/bauerca/drag-sort-listview 拖曳排序用的list view,其中也有section 的list view.可以參考https://github.com/……/android/demodslv/Sections.java Android-SwipeToDismiss https://github.com/romannurik/Android-SwipeToDismiss Listview做左右滑動刪除這個library已經寫好OnTouchListener只要把兩個java檔copy到你專案setOnTouchListener
繼續閱讀

[WWDC2014]影片學習心得

這裡放一些我看完WWDC2014 session 的心得 Introduce of Swift 身為WWDC2014最大的震撼彈,Swift的發表代表著iOS/MacOS的開發也可以使用現代程式設計語言的特性. Swift擁有的新的特性如下: Generic Tuples Closure 整個會場內容大多都是簡單地介紹語法,我覺得光是看官方語法就很足夠了. Introduce CloudKit 這是我最期待的session,因為他可以幫忙架設server的部分. CloudKit 的簡介: 主要是用來存取iCloud services 支援OSX與iOS 必須使用iCloud 帳號 可以擁有公開(?)與隱秘的資料庫 Container 基本單位,一個App會有一個Container 負責讀取與寫資料到iCloud Database 一個app可以管理一個公開的跟一個私密的資料庫 公開資料庫負責放共享的資料,只有在寫的時候才需要帳號~容量算在開發者身上 私密資料庫負責放使用者資料,不論寫或是讀都需要帳號~容量算在使用者身上 Record: 在我看起來很像是資料庫的Table一樣,不過他是採取Map的方式也就是Key->Value 才讀取/寫入 Record Zone: 管理一堆的Record,有分成Default Zone 跟 Custom Zone.俱有資料管理的功能,可以找回一些修改的變動. Design for Game Controller 主要是介紹如何設計一個能搭配MFi(Made For iPhone/iPad/iPod)的外在遊戲控制器的app. 所有的遙控器都支援GamePad而具有左右蘑菇頭的遙控器(joystick: API ThumbStick)會有GCExtendedGamePad PressedChangedHandler: 可以接受按下去與放開的event 可以偵測按鈕的敏感度(presure sensitive),官方也給一些幾個建議.  新的部分(iOS8)如下: Controller Forwarding 把iPhone當成一個額外的控制器來控制其他iDevice(iPad) (以後應該有 Apple TV) iPhone會被當成是搖桿而被GamePad API找到 Motion Forwarding 可以用G Sensor 並且有三軸定位的資料結構 Idle Timer 玩遊戲的時候到了iOS8 會自動把省電關閉螢幕的裝置關掉 (其實iOS7 是bug吧?) Pause Button 它是一個toggle的按鈕,要自己處理相關行為 Player Indicator LEDs 也就是定位你是第幾個遙控器(看來敵人真的是一般的遊戲主機) 當多人控制的時候,這邊有些部分要注意: 好好的分配整個Indicator Array 要分陪哪個控制器可以操控選單 定義如果有任何遙控斷線的撞控(哪些要暫停~哪些不需要)
繼續閱讀

[iOS]好用的XCode快速鍵 - Work efficiency with xcode

https://developer.apple.com/videos/wwdc/2012/#402  關於 三欄式UI的打開跟關閉 [command + 0] -> 切換打開/關閉左邊欄 [command + option+ 0] -> 切換打開/關閉右邊欄 關於搜尋 [command + shift + O] -> 快速搜尋 [command + option + click]  functions -> 可以快速找到implement  或是找出caller 或是 callee  類似瀏覽器的Tab相關控制 [command + T] -> 新增tab 這個對我應該會相當的好用,原本是不知道有這樣的功能. 跟縮排有關 [command + “[“ ] 向左縮 [command + “]“ ] 向右縮 跟自動完成(auto complete)有關 [ctrl + “.”] 自動完成 [ctrl + “/“,  ctrl+shift+ “/“] 選擇自動完成
繼續閱讀

[coursera][Functional Programming Principles in Scala] 關於課程學習心得(1)

偶然的狀況下,知道其實coursera 有在教 scala 的課程,於是多花一點自己的時間來學習. 其實主要的課程時間並不會花很多,就如同他所講的,一個禮拜頂多一兩個小時看video leture 但是assignment 可就不是開玩笑的了,每一次的assignment 都花了我好幾個晚上熬夜慢慢地看 目前到了week4 的階段,大概算是剛剛進入FP的世界,有一些心得可以分享: 千萬要注意assignment 的 instruction 或許也只有我吧,每次拿到作業就打開來想寫.結果就發現沒parameter或是沒有variable.其實都是因為沒有好好的看instruction 產生的. 用Functional Programing 來思考 (Think with FP) 由於我很習慣邊寫測試程式邊寫程式 (TDD is dead? XD) 所以這邊很容易遇到困難點 幾個推薦的方式是回過頭去慢慢思考set 與 list 的本質,不要被  p => Boolean 搞破頭   這裡也記錄一些課程摘要,有興趣可以考慮修修看,畢竟是scala的創辦人開的課(法國人講英文沒那麼難懂) week 0 主要是sbt應用跟簡單的scala 程式架構 week 1  主要是recursive的programming有 Pascal’s Triangle,Parentheses Balancing 跟 Counting Change 我覺得主要是換回你對於recursive programming 的熟悉程度 week 2 一些關於set 的操作,不論是 union 還是 contains  這邊就開始考驗著Functional Programming 的概念了. 讓我相當痛苦…. 所以為了能夠更了解整個架構~我寫了很多的unit test case 並且把整個結果在main 裡面都印出來看.才能有點了解 week3 感覺這次的比較實用,利用Set 與 List 來完成 TweetReader來尋找目前趨勢 Trending ,算是相當有用的課程,但是也很難. 因為一開始整個程式碼架構相當的大,極度推薦把instruction 好好看完,再開始看要完成的部分.跟著instruction 一步步把需要完成的完成,會比較容易….  弄了兩個禮拜~總算搞懂 week3 接下來要繼續努力 … week4…
繼續閱讀

[live555][OpenRTSP][SDL][ffmpeg] 利用ffmpeg 與SDL 達成 streaming 筆記(1)

這邊記錄一下筆記,因為太多公司內部的運作就無法貼code 關於ffmpeg Streaming與 SDL ffmpeg本身就支援 RTSP streaming,只是你需要把資料用 SDL來render 這邊可以參考這段tutorial  http://dranger.com/ffmpeg/ 中文解釋(1) http://ycfu.blog.mypc.tw/2010/01/ffmpegsdl-1.html 從live555的 OpenRTSP 拿出 data buffer 丟到 ffmpeg 去decode 這邊大概是我最不熟悉的部分,也是花最久時間的部分.一開始是拿openRTSP.c 來改 由於我是接H264得source stream所以我拿 QuickTimeFileSink來用,選定MPEG4與MP4之後,其實檔案接下來都可以直接播放~這是沒有問題的. 那如何要把資料接出來,方法如下: 先到QuickTimeFileSink的 AfterGettingFrame 去implement 一個callback function 其中最重要的是把buffer data 接出來 ioState->fBuffer->dataStart 這是frame buffer資料的起頭 packageDataSize 是frame buffer的大小 由於資料是一個video frame 後面緊接著有數個audio frame,所以記得要先查看是哪一種格式好做相關的decode 準備 ioState->fOurSubsession.mediumName() 至於接出來要怎麼decode 就要參考第一段的tutorial 這裡要注意的是,由於拿到的frame data 是一張一張的,所以許多ffmpeg資料要填好 (SDL_AudioSpec) 在ffmpeg中audio decoder無法順利地打開 這個問題主要是在SDL_OpenAudio 可以正常開起,如果有把相關資料填對的話.但是卻無法開啟ffmpeg audio 的 avcodec_open2  原因是因為你需要把 audio Codec context 要填對,主要是: adoContext->sample_rate adoContext->channel 在ffmpeg 接到的時候,video frame 無法順利decode 這個狀況會很詭異的是,直接用ffmpeg 去接RTSP會成功,但是把一張張frame data接過來用ffmpeg去decode的話就會失敗. 回去觀察原來的h264 frame data會發現,其實在video frame data buffer 起始的四個data 分別是 0x00, 0x00, 0x00, 0x01 所以如果把這四個位元加在video frame buffer的前面,就可以正常decode   先寫到這裡,其實還有許多更多的相關處理.之後整理一下心得在寫….    參考: RTSP Client use OpenRTSP (live555) with H264/MJpeg http://blog.xuite.net/antony0604/blog/130505326-RTSP+Client+use+OpenRTSP+(live555)+with+H264%2FMJpeg%3E 這篇很有幫助,幫助我知道哪些地方開始修改,也知道哪些地雷可以避免踩到 ffmpeg(2):ffmpeg结合SDL2.0解码视频流 http://blog.csdn.net/oldmtn/article/details/20284721 這篇可以幫助你快速建立 ffmpeg + SDL 2.0 player也可幫助我看如何從 SDL 1.2 -> SDL 2.0 Live555官方文件  http://www.live555.com/liveMedia/#testProgs 最主要這邊是提醒我們可以如何開始把frame buffer 找出來,也提醒我們如何去結束一個session .主要都是參考  testRTSPClient.c Live555类结构  http://www.cppblog.com/tx7do/archive/2013/09/10/203134.html 把相關的結構整理了一下,其實很適合閱讀.不過呢~這種東西沒有真的下去碰過好像也是都看不懂. live555 livemedia库结构分析[原创]  http://blog.csdn.net/gjgsoft/article/details/7705349 有把 Medium,Sink與其他的關係作了一下說明,並且有把TestRSTPClient 做一個簡單的講解… 挺值得一看…
繼續閱讀