[分享] PTT Client 開發經驗(1)
網頁好讀版(部落格, 有廣告)
http://goo.gl/GvUoPg
不知道發布這種技術文章有沒有違反 PTT 站規之類的?
因為 App 這麼多款了可是好像沒人發過... 有點怕怕的
有的話再麻煩各位跟我說一下
--
警告! 開發 PTT Client 非常之危險!
無所不在的時間黑洞以及各種無法預料的狀況會將你的精神折磨至崩潰!!!
哈哈哈哈哈哈哈哈哈哈(就像這樣)
--
以下都是廢話加閒談,趕時間的可以按這裡跳到重點(可是PTT沒有Anchor!!!)
可喜可賀!
經過了漫長的開發時間終於成功上架了
目前似乎也運氣很好的穩定運行了一段時間
有興趣的朋友可以自己在部落格內尋找 App 連結,我就不多打廣告了
自信滿滿,人稱程式小Bug王的我原本想說這種小東西大概一兩個月就可以完成了吧!
結果花了我快半年...
其中一個原因是第一次開發 Android App
另一個就是氣死人不償命的 VT100 終端機訊息傳遞機制,這個留待往後慢慢說明
而且網路上的資源可以說是少之又少
很多東西都是自己Google來東拼西湊才知道的
所以很多東西看看就好不一定是對的,自己找重點記(超不負責任)
尤其很多都是英文的資料,對於 PTT 這中文的論壇所需的技術來說實在是很不友善
於是我就想說寫這篇教學文章來好好闡述一下這血與淚的開發史
希望可以求得一些歷史定位(!?)
呃...是造福其他開發者啦
最主要的目的是告訴其他有興趣的開發者趕快放棄開發的計劃,因為實在太難做了
如果再讓我選一次我絕對不會選擇開發這個 App!!!
心理準備
首先我們來彈彈 PTT 的額頭,要很用力!(到底有多恨...)
是來談談 PTT 使用的 ANSI Escape Sequence 以及相關的知識
如果以為這只是單純的文字處理那就大錯特錯了!
當初天真爛漫的我其實就是這麼想的,殊不知背後龐大的利益鳩葛與情仇交纏...
PTT 是使用 VT100 這種類型的終端機定義來傳遞訊息
而使用 ANSI Escape Sequence 則可以將訊息格式化
諸如文字顏色、背景顏色、閃爍、文字出現位置以及清除畫面等等
所以你用 PC MAN 或任何終端機連上後可以看得見如此精美的畫面
http://imgur.com/eaQB3h0
但是你得到的資料其實是...
https://gist.github.com/anonymous/644b681bc52f26166f9f
有沒有感覺到一種被欺騙了的感覺
...
...
...
那麼接下來我們就進入正式的介紹了(現在才開始!? 那前面打那麼多字幹嘛啦)
ANSI Escape Sequence
首先我希望各位將以下幾個網頁加入最愛或是直接儲存整個網頁
對於往後的開發來說會是非常重要的資源
控制字元對照表 - ASCII code caracters
http://goo.gl/lUND7H
ANSI 控制碼對照表 - ANSI Codes
http://bluesock.org/~willg/dev/ansi.html
CTRL 複合按鍵對照表 - Key Pressed with CTRL key down
http://www.vt100.net/docs/vt100-ug/table3-5.html
第一個跟第三個連結暫時還用不上,我們先打開 ANSI Codes 的連結
然後看到下方表格的 color and text formatting 這欄
http://imgur.com/s5p78QX
這邊主要是在說明所有可以用的文字格式設定控制碼
https://gist.github.com/anonymous/24ce59b4f0ab0323e3b6
再來就是另一個比較複雜的重頭戲了
請看到網頁中表格的 cursor controls 以及 erase functions
http://imgur.com/k3FlV7w
這邊主要是在處理文字的排版
也是上面那一大串文字的最主要原因
PTT 回傳的資料有很多種類型, 有時會給你完整的字串用空白補齊位子
有時會不給你空白, 而是使用 ESC[12;30H 的方式告訴你接下來的字是放在哪個位置
https://gist.github.com/anonymous/4d661ce0f45d8798849c
其他的部分因為 PTT 不會回傳那些控制碼所以可以暫時不用看
下一章就會開始講解 ANSI Escape Sequence Parsing Engine 該如何撰寫
用一長串英文有沒有感覺很專業?
其實就是將 PTT 回傳的資料一個蘿蔔一個坑的放入剛剛提到的 24 * 80 陣列的方法
算是整個 PTT Client 的第一個最重要的核心
也是當初撰寫時遇到的第一個難關
那麼就容我稍微拖個稿,請待下回分解!!!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.251.132.223
※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1450260900.A.D6A.html
推
12/16 20:23, , 1F
12/16 20:23, 1F
→
12/16 20:33, , 2F
12/16 20:33, 2F
推
12/16 20:39, , 3F
12/16 20:39, 3F
推
12/16 21:00, , 4F
12/16 21:00, 4F
推
12/16 21:15, , 5F
12/16 21:15, 5F
推
12/16 21:25, , 6F
12/16 21:25, 6F
推
12/16 22:25, , 7F
12/16 22:25, 7F
推
12/16 23:35, , 8F
12/16 23:35, 8F
推
12/16 23:51, , 9F
12/16 23:51, 9F
推
12/17 00:21, , 10F
12/17 00:21, 10F
推
12/17 01:43, , 11F
12/17 01:43, 11F
→
12/17 01:43, , 12F
12/17 01:43, 12F
→
12/17 11:34, , 13F
12/17 11:34, 13F
開源可能等我之後架完 Server 再考慮囉
不過現在還會FC喔...
6.0 權限的部分我上次有改了 應該會在一開始要求檔案存取權限
可以幫我按一下回報嗎? 我看看是什麼問題
然後其實我當初就是找不太到相關資源XD
關鍵字也不知道該怎麼下
所以才會想寫這系列的文章
希望能用較簡短的文字讓大家了解基本的原理這樣
因為沒有看過正式文件,都是用try出來的結果推測的結論
所以可能會較不正確,但應該可以給出一個明確的開發方向
推
12/17 19:56, , 14F
12/17 19:56, 14F
→
12/17 19:56, , 15F
12/17 19:56, 15F
→
12/17 19:56, , 16F
12/17 19:56, 16F
→
12/17 20:53, , 17F
12/17 20:53, 17F
→
12/17 20:53, , 18F
12/17 20:53, 18F
另外補充,
以現今 App 能做到的寫法來說
其實加了那個反而會增加更多流量...
有多少呢?
大概有兩倍以上吧XD
下一章會提到其中一個原因
另一個原因我可以講一個例子
大家常常看到的 "按任意鍵繼續" 那一行短短幾個字
但 PTT 回傳的資料加上控制碼有多長呢?
https://gist.github.com/anonymous/c3ea3f4cd809f9ab2503
有429個字元這麼長
中間有一些字元是不會印出來的
※ 編輯: kiwatami (111.251.132.223), 12/17/2015 21:25:38
推
12/18 00:36, , 19F
12/18 00:36, 19F
推
12/19 00:05, , 20F
12/19 00:05, 20F
推
12/19 04:04, , 21F
12/19 04:04, 21F
推
12/22 11:27, , 22F
12/22 11:27, 22F
推
12/31 13:53, , 23F
12/31 13:53, 23F
推
01/06 09:48, , 24F
01/06 09:48, 24F
推
01/20 10:01, , 25F
01/20 10:01, 25F
推
08/06 01:08, , 26F
08/06 01:08, 26F
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章