June
18th,
2014
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
繼續閱讀
June
10th,
2014
這裡放一些我看完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
要分陪哪個控制器可以操控選單
定義如果有任何遙控斷線的撞控(哪些要暫停~哪些不需要)
繼續閱讀
May
29th,
2014
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+ “/“] 選擇自動完成
繼續閱讀
May
20th,
2014
偶然的狀況下,知道其實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…
繼續閱讀
May
20th,
2014
這邊記錄一下筆記,因為太多公司內部的運作就無法貼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 做一個簡單的講解… 挺值得一看…
繼續閱讀
May
18th,
2014
Keynote: Jessica McKellar Python is everywhere -1000 meter (deep ocean) to 80000 meter space center OpenData for UK open.gov.uk Government will use Good tool Need to improve user using Python in Windows Hard to use in Windows for lots step Write python Mobile app is big challenge but it is doable iOS SDK for Python Kivy http://kivy.org/ Pyzia http://pyzia.com/technology.html Write Python in Chinese? https://code.google.com/p/zhpy/ 周蟒 但周蟒已不再維護… 官網說請參考 https://blockly-demo.appspot.com/static/apps/code/index.html?lang=zh-hant PypyJS Python with JS PyPy http://pypy.org/features.html PyPi Python in Respberry Pi Do a thing with python you never done before 2015 Resource: robonaut: http://www.i-programmer.info/news/169-robotics/4527-robonaut-2-simulator.html http://www.w3schools.com/browsers/browsers_os.asp https://docs.python.org/3/using/windows.html http://interactivepython.org/ https://github.com/bnmnetp/runestone http://pythonsprints.com/ https://www.python.org/psf/grants/ zhpy: https://code.google.com/p/zhpy/ kivy: http://kivy.org/#home pypy.js: https://github.com/rfk/pypyjs (PyPy.js: PyPy compiled into JavaScript) R2 What Is Async, How Does It Work, and When Should I Use It? A. Jesse Jiryu Davis http://emptysqua.re/blog/ https://twitter.com/jessejiryudavis Non-Async Sub process in NYC, it is non-async Way to speed it up, add more cooker Async Pizza in NYC All food need wait the microwave to make pizza No way...
繼續閱讀