[研討會訊息][PaaS] Pivotal 與 Heroku討論

Taiwan PaaS Meetup http://www.meetup.com/%E5%8F%B0%E7%81%A3-PaaS-%E9%9B%B2%E7%AB%AF%E6%8A%80%E8%A1%93%E4%BA%A4%E6%B5%81%E6%9C%83/about/
Meetup PaaS HackPad: https://paas-tw.hackpad.com/Getting-Started-with-Pivotal-Web-Services-PadMnuFp1vd

總結:

  • 相較於Pivotal (Cloud Foundry) ,Heroku可能真的比較廉價.

  • 收費方式都不是算流量:

    • Pivotal : 記憶體

    • Heroku: 依照計算能力 Dyno

  • 自動Scale

    • Pivotal似乎沒有自動調節scale 的能力.

    • Heroki似乎沒有看到

  • 與git的搭配:

    • Pivotal並沒有

    • heroku 不僅僅原生就支援git,也可以直接跟github互動.

心得:

  • 這次參加的人數不算多,不過倒是很多高手.有看到ihower 還有似乎是他同公司的mose.可見PaaS再用的人真的都不是DevOP的人而是developer.

  • 文創中心算是不錯的場地,交通也算方便.場地費似乎也不貴.其他人要辦活動挺推的.

  • 看起來Pivotal跟 Heroku沒有太多差異,但是 Heroku有免費的方式, Pivotal卻沒有,可能在初期是可以先用 Heroku 正式上線後再考慮要不要挑到 Pivotal.

  • 有很多的討論都可以看出來PaaS跟docker有更多的交錯,只是接下來接近會走向dokku 還是???

 

 

Pivotal:

 

Heroku:   /her-OH-koo/ 

  • 架構:

    • Slug Compiler -> Slug

      • Slug -> dyno (based on scale)
  • Dyno 特性:

    • isolated

    • self-healing

    • read-only

    • stateless

    • recycle 24hrs

  • Twelve factors App: http://12factor.net/

    • Codebase

    • Dependency

    • Config

      • Store config in environment don’t check-in it in your codebase.
    • Backing Services

      • Treat backing service as a attachment service(可抽換)
    • Build, release and run

      • 每個階段應該要是可以切割的
    • Processes

      • stateless, isolated
    • Port binding

      • via port not specific service. 
    • Concurrency

    • Disposability

      • 快速地啟動,優雅的結束
    • Logs

      • Treat logs as stream
    • Dev/Product Parity

      • 必須把 staging,Dev與 Production 要分得開~但是應該要緊接著.
    • Admin Processes

  • Docker V.S. Heroku

Docker vs. Heroku

DOCKERHEROKU
Dockerfile BuildPack
Image Slug
Container Dyno
Index Add-Ons
CLI CLI
  * [http://tuhrig.de/docker-vs-heroku](http://tuhrig.de/docker-vs-heroku)

[Golang][MongoDB] 練習一下MongoDB 與Golang 的基本連結

前言:

自學Golang也到了現在,除了繼續深究Golang在許多層面的應用之外.也必須學習一些新的資料庫.
想了一下,就決定拿經常在研討會裡面看到的NOSQL (並不是 NO - SQL 而是 Not-Only SQL )的資料庫 MongoDB來練習一下.
MongoDB比起一般的RDBMS而言,應該算是比較容易了解的.而且對於從手機程式設計開始學習的人可能會更容易上手.
因為 MongoDB本身不斷圍繞著一個資料結構,就是 JSON

MongoDB:

關於:

本身概念相當的簡單,主要分為Database(資料庫), Collection (中文該怎麼翻比較順呢?) 還有就是最基本的資料原件 Document (文件).
這樣如果還不是很容易了解,換這樣來換吧:  

  • DB一樣就是原先RDBMS裡面的資料庫
  • Collection 可以當成一個個的Table
  • Document 可以當成一個個的Record

這樣並不是最好的對比,不過這是一個概念上可以讓人一開始馬上進入的方法.

安裝或使用:

如果要自己架設MongoDB(Mac OS)可以參考一下這裡,或者是去 MongoDB HQ上面申請一個免費的MongoDB (我目前是申請一個免費的資料庫來測試)

使用上需要注意的特點:

  • 由於你的資料欄位最基本是JSON,所以每個Collection 裡面並沒有固定的欄位格式.可以前兩個documents 是有五個欄位,後面卻不是.
  • 關於查詢
    • equal 比較簡單,就是一般JSON語法  { price: 40 } 查詢價錢40元的
    • greater than (大於) 或是 Less than (ls)的時候需要使用   { price: { $gt : 40} } (查詢價錢 大於 45)  (要查小於就是  $lt

Golang上面大家推薦的MongoDB Driver — mgo

其實安裝跟使用相當的簡單,裡面也提供很多好用的方法.不過我在學習的途中有遇到一些問題希望可以幫助大家.

  • Document 的type struct 裡面的資料名稱,不可以全部小寫(lowercase)不然會出現insert到collection 裡面變成空白(empty document except ObjectID).
    • 我本身有在追他的source code但是還看不出是在哪裡有問題.
  • (承上)雖然變數名稱必須有大寫(uppercase)但是到了MongoDB裡面又得用全部小寫(lowercase).在一般的資料庫操作中,這是可以理解的.
  • 關於Query Criteria 的參數
    • 要下greater than 必須用 $gt  範例:  bson.M{"price": bson.M{"$gt": 40}} 找出價錢大於40

基本的查詢與操作都會了之後,接下來要弄到Heroku上面去跟server搭配了. 範例可以到這裡去找 Github …..

參考:

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

最近有一些值得記錄的部分,隨手寫一下:

  • SDL_CloseAudio 會發生一些問題 (deadlock),如果Server 已經斷線了.

    • 發生狀況:

      • 當RTSP Server斷線或是網路中斷的時候,嘗試著去Close SDL 會產生deadlock 在 SDL_CloseAudio

      • 如果封包持續進來的狀況下,不會有任何問題.

    • 主要原因:

      • 根據SDL source code, RunAudio 裡面會去 OpenMutex讀取資料.這個狀況下,如果Server斷線(或是網路斷線) 會造成一直在等封包的結束.必須等到每個封包做完後會SDL_Delay特定時間,這時候就可以順利關閉設備.
    • 解決方式:

      • 為了解決這種deadlock的狀況,要試著去關閉設備的時候,先送一個空的封包進去.讓SDL跑到等待下一個封包的進入才能順利關閉.
    • 參考:

  • SDL_DestroyWindow 有threading 的問題,SDL_CreateWindow 必須要跟SDL_DestroyWindow 在同一個thread

    • 發生狀況:

      • 使用SDL_DestroyWindow 會發生no response(hang),如果SDL_DestroyWindow與SDL_DestroyWindow在不同的thread.
    • 解決方式:

      • 本來都以為是因為必須在UI thread,但是由於我自己架設的環境RTSP 是在另外一個thread去執行,以致於不會卡住所有UI response.

      • 後來發現用另外一個thread來處理RTSP,也是可以讓SDL來render畫面與聲音的輸出.但是在SDL_DestroyWindow的時候就會卡住.

      • 後來調整後,就發現可以正常的SDL_DestroyWindow.

    • 參考:

SDL_DestroyWindow mongo kahana.mongohq.com:10042/MongoTest1 -u -p

[iOS][粉絲相簿更新v1.2] 主要是修復一些比較大的問題還有視覺icon調整

前言:

在07/23更新了粉絲相簿到v1.2版本,主要是修復不論是視覺界面的問題,還有操作上的一些問題.

主要修復:

  • 美化icon解析度,修復視覺問題

  • 修復使用者端資料庫會產生錯誤讀取的問題

  • 修復許多操作上的問題

雜言:

這次更新的上架速度比我想像中的快了很多,大概一個禮拜就可以正式上架.果然更新跟第一次上架有天壤之別.
此外~自己來寫app真的很難做完全的測試.每次都是上架後,朋友才會來跟我講哪裡有問題,哪裡有錯誤.
這樣一直更新都讓自己覺得不好意思  XD

 

最近有人問我一些問題,在這裡寫一下幾個FAQ

  • Q: 這個APP寫了多久?

    • A:這個APP總共前前後後寫了一年多.從我買Macbook Air到現在 .前後貫穿了從我完全不會寫iOS到現在(也沒多懂@_@)
  • Q:這個App有用到哪些技術呢?

    • 這個問題比較複雜一點,裡面主要有用到幾個SDK:

    • Facebook SDK

      • 主要就是讀取粉絲相簿與資料,其中也包括了 Single-Sign-On
    • Parse SDK

      • 就是網路伺服器與資料庫管理的部分使用Parse,一個簡單使用並且在某些流量下是免費的PaaS.

      • 可以讓我存取一些資料庫,還可以發送push notification.

    • FGallery

      • 主要負責的就是各位看到的相簿瀏覽的部分,我知道裡面有許多的問題.比如說:不能批次讀取,滑動會上下,不能暫存等等.

      • 這些部分的加強就會擺在之後,當然也是我更熟悉後.

  • Q:App的資料哪裡來?

    • A:主要都是網友分享的,所以也希望又更多網友能夠分享你們喜歡的粉絲頁面給大家,讓這個更好用.

 

 

 

[Golang][Heroku] 如何用Golang 做出簡單的 REST API Web Application

 網路上找了一下方法,其實方法相當的多.大家可以找自己適合的方式來做,反正我也在學,乾脆把每一種看到的都開始試試看:

  • net/http

    • 這篇文章談到如何用net/http 來做,其實也沒那麼難,不過問題都一樣.都得對於每個物件與方式座對應.

    • 不僅僅是個別東西得自己寫出來,由於每一個都是走 url.values所以幾乎是無法辨別 albums/1 這樣的REST API,必須傳遞 ?albums=1 

    • 目前還沒有想到比較好的方式可以做出get/add/delete,繼續研究其他的.

  • gorilla/mux:

  • go/martini

    • martini算是相當適合拿來做REST(基本上內建已經支援了)

    m.Get(“/hello/:name”, func(params martini.Params) string { return “Hello “ + params[“name”] })

    • 這邊要注意的是:

      • 內容是  :name 你可不能輸入 curl  -i  localhost.com:xxxx/hello/:name  而必須要輸入 name

      •  params[“name”] 出來都是字串,要轉數字要注意error exception.  

      • 其實有個文件上沒有講清楚的就是針對 Get/PUT/POST 的function input,少寫是會找不到的
        func getItem(params martini.Params) string {
          //….
        }
        func updateItem(w http.ResponseWriter, r *http.Request, params martini.Params) (int, string) {
          //…..
        }
        func addItem(w http.ResponseWriter, r *http.Request) (int, string) {
         //….

    • 範例與實作的部分:

      • 我在練習的時候主要是利用類似範例裡面的in-memory database 還有 martini 來完成REST.此外並沒有用到JSON的格式,主要是因為之後打算拿來練習其他的資料庫mongoDB.

      • 實作的時候,我發現問題比較多的其實不外乎就是function的parameter 之外,再來就是client端要如何下指令去打成 GET/PUT/POST/DELETE 的指令,主要用的是CURL這裡簡單的列一下:

        • GET:  curl -i  ”https://localhost:8001/albums”

        • POST:  curl -i POST –data “band=Carcass&title=Heartwork&year=1994” “https://localhost:8001/albums.xml”

        • PUT:  curl -i  PUT –data “band=Carcass&title=Heartwork&year=1993” “https://localhost:8001/albums/4”

        • DELETE: curl -i DELETE “https://localhost:8001/albums/1”

    • 參考:

[研討會訊息] Android Taipei - 2014/July

心得:

Android Taipei 有好幾次的活動不是跟GTUG對衝,就是剛好遇到颱風.這次剛好有機會可以參加(其實是GTUG JavaFX不太懂 XD)
所以今天就去了,恰巧也有機會揪了以前的同事一起去(Nick,Veret).
以下簡單的記錄一下三個講者的內容跟心得:

  • MonkeyRun:

    • 這個東西主要是透過MonkeyRecorder 來錄下自動測試的腳本,搭配本身有的一些進階功能可以拍下截圖並且寄出錯誤資訊.講者有增近一些功能後OpenSource出來,挺值得一看.

    • 會後有找講者討論了一下這個東西能導入的狀況與真正幫助到測試的範圍:

      • 新版本出來以後,分成兩個部分.一部份還是QA來跑,另外交給自動測試.隨著QA測試錄下的腳本增加,需要真人的部分可以越來越少.

      • 自動測試主要是跑一些比較簡單還有透過截圖的比較,測試流程的減少看來有20%左右(透過了解的估計)

  • Chrome Cast (或者稱為 Google Cast)

    • 主要講解整體架構,基本上就是App(Sender)透過通訊協定讓receiver 去播放網路上的資料(是網路上的而非手機上的)

    • 也稍微有講解了一下可能遇到的問題,下面都有提到.

    • 會後有跑去跟講者討論一下是否可能直接手機透過streaming 到server上後再cast 到receiver,看來是可以的只是造成的latency看來是很難突破.(IP-CAM?)

  • Google IO 2014 分享

    • 主要是講者分享一下GOOGLE IO 2014在當地參加的心得與內容,由於我有到臺北Google辦公室看過直播,所以還好.

    • 之後講者有把這次有趣的玩具 Cardboard讓大家體驗一下,其實讓我相當驚訝的是,本來以為會像3D眼鏡,其實不然~是真的很像VR虛擬螢幕在前面.透過G-Sensor可以調整.

    • 它提供的SDK就是可以切割兩個螢幕外,還用突透鏡羽還原的技巧來讓立體成像更為清楚.彷彿眼前有個大螢幕在前面,還可以上下擺動看到不同的東西.

速記: 

  • GogoMonkeyRun MonkeyRunner  (gogolook)

    • Auto testing

      • Android Instrumentation test

      • uiautomator

      • monkey/monkey runner

        • monkey runner — using python code to execute auto testing 

        • Using python to click specific point. (x,y)

    • Monkey runner 不足

      • Q:  How to determine x, y.

        • A:  using “monkey recorder”, project cellphone to PC.
    • 常出現問題:

      • 不能截圖

      • 不能取消動作

      • 不能back

      • 畫面被壓縮

      • 拖曳無法知道起始點與終點

      • 無法旋轉

    •  gogolook 強化: github-> (gogomonkeyrun)

      • 特點:

        • 可選擇安裝apk

        • 可以截圖

        • 可以寄信給開發者

        • 可以按back

        • *修改App內容

        • *遠端控制

      • 使用:

        • 先用人工點一次,結束後可以產生相關動作的python code

        • 如果要跑不同的機型,需要執行多次的monkey runner 

        • 跑的截圖可以做比較,來發現說是否有錯誤和異常.

        • 可以用來catch exception  然後寄信給開發者

    •  辛酸史:

      • Monkey recorder 跑完馬上跑monkey runner 是會出現錯誤,device 被decoder 佔走

        • 解決方法:  shell stop
      •  Windows 到Mac 容易出現問題

      • Google 從2012年後就沒有更新

    • Feature works:

      • 產生更豐富的資訊

      • Jenkins 結合 (other Android Emulator)

      • 手機端看結果

    • 參考:

  • Chromecast SDK (google cast) (kkbox: Ascii)

    • 基本概念:

      • Sender:  手機

      • Receiver  電視

    • 使用方法:

      • 新增一個button 可以share 到電視 (MediaRoutingButton)

      • 每個15秒換待機圖

      • sender will send application ID, receiver will determine to open which application (web + java script)

    • 注意事項:

      • Chrome cast debug console: port 9222 (web debug console)

        • 出現404  -> 需要到設定把 [檢查更新把序號送到Chrome cast) 打勾
    • About chrome cast

      • Sender app

        • Android

        • iOS

        • Chrome Sender

      • Receiver app

        • default media player

        • style media player 

        • custom player 

          • 任何都可以,動態歌詞,界面
    • Register application developer account

      • each chrome cast developer need $5.

      • Default Media Receiver

        •  (不需要花$5)

        • 不需要架設https

    • 開發中遇到的問題:

      • Resolution (亂跳)

        • Style receiver 會先用1080p

        • custom receiver 會先跳 720p

        • 解法 

          • 這是google bug, 如果硬用720p 等google 修掉會出現空白
      • MediaRouterButton 一直grey out

        • 解法:

          • 不同network

          • 先使用 “CC1AD845” (default app ID 去測試)

    • Chrome Cast SDK

    • DRM: 

      • MSFT playready

      • Google DRM

      • kkbox using KKbox-DRM

    • Chrome Cast capability:

    • 參考:

  • Google IO 經驗

    • Android Wear (各一個)

      • Moto 360

      • Samesung / LG

    • Android Auto

    • Android TV

    • Android L

      • Animation:

        • Rendering 不再拘束在main thread. —> UI Toolkit thread
      • Shader

        • 4 Layers
    • Cardboard

      • 有提供SDK 去處理分割畫面與凸透鏡的效果

      • 可以做到VR