#SeeedStudio 的 #ReSpeaker[1] 整合了 #MediaTek 的 MT7688[2] 作為主板以及 XMOS XVSM-2000[3] 為核心的麥克風陣列擴充板,作業系統是 LEDE, 對接 Microsoft Cognitive Servcies, PocketSphinx 等聲學、自然語言工具。預計要在 #KickStarter 上眾籌,但是程式碼[5]與主板電路圖[6]都已經公佈啦! #可惡想要

[1]: https://respeaker.github.io/ “ReSpeaker”
[2]: http://www.mediatek.com/en/products/connectivity/wifi/home-network/wifi-ap/mt7688ka/ “MT7688K/A – MediaTek”
[3]: http://www.xmos.com/products/silicon/xcore-voice/xvsm “xCORE-VOICE Smart Microphone | XMOS”
[4]: https://github.com/respeaker/get_started_with_respeaker/wiki “Home · respeaker/get_started_with_respeaker Wiki”
[5]: https://github.com/respeaker “ReSpeaker”

聽說只要你投了超過五個 Linux kernel patches[1][2],你就可以得到一份工作。立志想要成為 Kernel developer 的 Nick Krause 從 2012 年開始[3]就想開始貢獻,在各種不同的 subsystem[4] 中提供各種微小的修改。

雖然 GregKH 等人都抱著歡迎新手的態度[5],但是最終封掉[6]亂入者比較可以節省社群的生產力。

[1]: https://www.linux.com/learn/it-careers-open-source-open-resume
[2]: http://www.informationweek.com/strategic-cio/team-building-and-staffing/it-careers-open-source-open-resume/d/d-id/1297734
[3]: http://marc.info/?a=135032148800004&r=1&w=2
[4]: https://lkml.org/lkml/2014/8/4/206
[5]: https://lwn.net/Articles/658231/
[6]: https://plus.google.com/+gregkroahhartman/posts/2tZKnnrNjGq “If you’ve had a frustrating experience on bugzilla.kernel.org with someone as…”
#來亂者去死 #linux #kernel

反恐行動與網路言論自由的衝折 – Facebook Messenger[1][2][3] 與 Google Allo 也開始使用 Open Whisper Systems[4] 的 Signal Protocol 的協議[5] ,而法國內政部長 Bernard Cazeneuve 則因為反恐行動想發起一個 anti-encryption campaign …

[1]: http://newsroom.fb.com/news/2016/07/messenger-starts-testing-end-to-end-encryption-with-secret-conversations/ “Messenger Starts Testing End-to-End Encryption with Secret Conversations | Facebook Newsroom”
[2]: https://fbnewsroomus.files.wordpress.com/2016/07/secret_conversations_whitepaper-1.pdf “Messenger Secret Conversations – Technical Whitepaper”
[3]: https://whispersystems.org/blog/facebook-messenger/ “Open Whisper Systems >> Blog >> Facebook Messenger deploys Signal Protocol for end to end encryption”
[4]: https://whispersystems.org/blog/allo/ “Open Whisper Systems >> Blog >> Open Whisper Systems partners with Google on end-to-end encryption for Allo”
[5]: https://whispersystems.org/blog/the-ecosystem-is-moving/ “Open Whisper Systems >> Blog >> Reflections: The ecosystem is moving”
[6]: http://www.reuters.com/article/us-france-internet-encryption-idUSKCN10M1KB “France says fight against messaging encryption needs worldwide initiative | Reuters”

隨著越來越多 IM 使用 Open Whisper Systems Signal Protocol,原本所使用的 GPLv3 授權造成了軟體無法上架到 Apple’s Store 的問題[1][2][3][5],於是專門為 Apple 新增了一個 Mozilla Public License version 2.0 授權[4]給 non-source executable versions,以便這些使用 Signal Protocol 的軟體仍夠順利上架。

[1]: http://www.fsf.org/news/2010-05-app-store-compliance “GPL Enforcement in Apple’s App Store — Free Software Foundation”
[2]: https://www.fsf.org/blogs/licensing/more-about-the-app-store-gpl-enforcement “More about the App Store GPL Enforcement”
[3]: http://www.openfoundry.org/tw/component/content/2385/2385?task=view “App Store 服務條款違反 GPL Apple 移除 GNU Go 遊戲”
[4]: https://whispersystems.org/blog/license-update/ “License update”
[5]: http://www.zdnet.com/article/how-to-avoid-public-gpl-floggings-on-apples-app-store/ “How to avoid public GPL floggings on Apple’s App Store”

Line 終於也在 iOS 9.3.1 之後[1]開始使用 Letter Sealing 的 e2ee 加密機制[2]了。Line 的加密協定相較起來還是比參考 Open Whisper Systems 的 The Signal Protocol[4] 設計的 WhatsApp 加密機制[3] 簡單陽春許多。雖然也是 end-to-end 加密,但是只要使用者可以拿到私鑰,就可擷聽過往與未來的對話。而不是每個對話階段都使用不同的加密金鑰。

在 Android 上,這把私鑰存在 /data/data/jp.naver.line.android/databases/e2ee 的 sqlite database 中。

在 Line Chrome App[5] 版本,私鑰則存在 IndexedDB 中,實際加密解密是在瀏覽器側實做,也代表私鑰被從手機上以某種方式傳送到瀏覽器上。但是你很難判斷透過伺服器轉送金鑰過程的過程是否安全,或是是否會遭到擷聽。

至於 WhatsApp 的 Web interface 則是透過用戶的手機實際傳送接受訊息,而不是在瀏覽器端實做。

[1]: http://developers.linecorp.com/blog/?p=3938 “The next step for even safer messaging: Letter Sealing « LINE Engineers’ Blog”
[2]: http://developers.linecorp.com/blog/?p=3679 “New generation of safe messaging: “Letter Sealing” « LINE Engineers’ Blog”
[3]: https://www.whatsapp.com/security/WhatsApp-Security-Whitepaper.pdf
[4]: https://whispersystems.org/blog/whatsapp-complete/ “Open Whisper Systems >> Blog >> WhatsApp’s Signal Protocol integration is now complete”
[5]: https://chrome.google.com/webstore/detail/line/menkifleemblimdogmoihpfopnplikde “LINE”

去年在 OpenStreetMap Taiwan Webinar 的題目「自己的圖磚自己刻」之後,注意到其實從頭到尾創建一個圖磚伺服器,要安裝、設定的軟體相當多,要設定資料庫、匯入海岸線 Shp、安裝 mapnik 相關的軟體、寫好 style sheet 等。為了簡化所有的程序,方便入門 2015 年已經先以 Docker 建立初版圖磚伺服器,這個伺服器將資料庫建立、匯入、軟體安裝等等合而為一,入門開發者只要三十分鐘內就可以配置好一個伺服器開始嘗試開發。就算不是 Linux 的開發者,也可以透過 Docker Machine 或其他虛擬機方式設定 docker 開發環境。

不過由於當初把所有的軟體擺在同一個映象檔 (docker image) 中,導致不容易抽出再做延伸的利用開發。 從「自己的圖磚自己刻」講者吳政璋 (小璋丸)的筆記中,可以初步理解要完成一個圖磚 (slippy map) 伺服器所需要的軟體堆疊 (Software stack) 大概可分為編輯後的原始資料、後台資料庫、繪圖輸出 (rendering) 以及前端視覺。

 

最近嘗試進一步的改善 Docker images 的實踐方式,將每個軟體元件拆分成獨立的 image,以便互相疊加應用。由於 Open Source geospatial software 的發展迅速,迭代頻繁,在過渡時期,偶爾會發現新版的函式庫的 Python binding 已經故障,反而是 node.js 的延伸開發迅速,反之新的技術實踐無法搭配舊伺服器使用。透過 Docker 技術可以很快的「解決」這些軟體版本的相依問題,直接搭配正確的 Linux Distro 版本使用,方便一個軟體服務同時使用新舊科技。希望可以陸續把 Linux 上 常用 Open Source geospatial software 也整理出來,方便進階開發者使用。

目前已經完成 PostGIS, osm2pgsql, mapnik, mod_tile, tilestache, gdal 以及幾個常見的 featured tiles. Docker images 都已經發布到 Docker Hub 上的 OpenStreetMap Taiwan 群組中,原始碼發布於 Github Group中,歡迎試用。

以下分享一些入門的實踐典範,可以供一般 GIS 從業人員或軟體開發者簡便利用開放街圖資料。

首先,對於一般 GIS 資料處理人員,利用 OSM 最初步的工作就是建立一個 Database Replication. 設定 OSM 資料庫並與最新的資料保持同步,並接取到桌面的軟體上進行處理。首先,你需要 PostgreSQl/PostGIS 與 osm2pgsql,其中 osm2pgsql 已經設計成每個十分鐘會抓取一次最新的資料,並匯入資料庫中。

操作的指令可以參考 osmtw/osm2pgsql 的說明,基本上只需要兩個指令

  1. 以環境參數設定資料庫名稱、帳號、密碼後,啟動 osmtw/postgis instance
  2. 以 link 參數連結 postgis/osm2pgsql,並以環境帶入想要匯入匯入的區域與更新頻率。

osmtw/osm2pgsql 會負責下載最新的 OSM PBF 檔案,並匯入 osmtw/postgis 資料庫。大概只要十分鐘內,就可以建立好包含最新台灣圖的資料庫,並可以透過 qgis 連上進行查詢,並做後續處理。

qgis connect to docker

QGIS

有了資料庫之後,接下來是做出 Slippy Map Server,線上即時產生圖磚。從這裡開始,就可以像是疊積木一樣,依照需求配合不同的軟體來搭建。
常見的組合有有 Mapnik/Cascadenik/Carto/Millstone 搭配圖磚處理服器如 mod_tile/Tilestache 輸出成 Raster Image,或是直接以 Mapnik API 輸出成圖。網站伺服器則可以用 nginx/apache2.

透過 Docker Compose 可以很容易的組成所需的軟體結構。依照 OpenStreetMap 標準的圖磚為例子,包含傳統使用 Mapnik xml style, Cascadenik XML 的 OpenStreetMap 標準圖磚,以及使用 Carto CSS style 相當簡潔漂亮的 Mapbox OSM-Bright。前端界面則配合 LeafletJS 做出使用者界面,方便切換幾個不同的底圖。網站服務器則用 mod_tile+apache2. 相關的程式碼與操作請見 github

本地街圖

osm-bright

另外一個例子則是小璋丸手刻自創的鬼島地圖,他使用 Cascadenik 語法產生樣式,並以 tilestache 產圖以及 uwsgi 作為網站伺服器。

鬼島圖磚-1

鬼島圖磚-2

 

這幾個樣式大多是僅透過 SQL 取出 PostGIS 中的圖徵,然後配上 stylesheet 產出。有時候會需要做一些資料的前製處理後,才能搭配輸出到圖中。例如等高線圖與地勢圖,就可以從 DEM 資料中計算得出,這個時候可以用 gdal 等工具將原始資料轉成 TIF 或是 SQL,再套疊到地圖上,這樣就可以做出地勢顏色與等高線圖等效果。

2016-06-10 14-20-37 的螢幕擷圖 2016-06-10 14-20-48 的螢幕擷圖

20160609-本地街圖

 

最後,光是做出 Slippy Map / Raster Image 其實是很空洞的平面地圖,許多地圖的使用者往往希望可以取得特定 POI 的詳細資料。這個時候就需要搭配向量圖磚來豐富地圖上的資訊量,雖然像是 Mapzen, Mapbox 商業公司已經提供現成的接口可用,但是常常比不上自己下 SQL 語法來的有彈性。

我們可以透過 OpenStreetMap 圖資與 TileStache 來輸出支援 GeoJSONTopoJSONMapBox Vector (MVT) 等格式。請參考飲水地圖 vector tile server 的實做方式,從資料庫中搜尋 amenity=’drinking_water’ 的 POI ,並以 LeaftletJS 將資料繪製到地圖上。由於他使用本地資料庫,所以會比飲水地圖官方網站透過 overpass 撈取資料快速許多。

Leaflet GeoJSON Example

Google’s I/O 2016 的演講[1]提到會支援 Raw GNSS measurements,開放開發者取得 pseudoranges, dopplers and carrier phase 等資料。

過去,這些資料是在 GPS basdband processing 就已經計算處理好,對於一般軟體開發者而言通常直接使用 LocationManager 取得最終的定位資料,而非衛星訊號數值等資料。

對於需要做 GPS 效能調校的硬體、韌體工程師,通常透過 Android HAL API 測試 GPS 訊號。在 Android 中最低階的協議是透過 NMEA sentence 協議取得衛星訊號數值,但是這其實還不夠低階到包含如 pseudoranges 等資料[5][6]。這些 raw data 資料只來自使用該晶片商獨家的 binary protocol,而沒有標準的 API 可用。

Google I/O 的講者 Steve Malkos 的演講 (37分30秒)[7] 其實只提到會拿到原始 GNSS 測量資料。但是他還沒有分享具體的設計會長什麼樣子,另外最大的改變是 GPS, Wi-Fi, Cell 等 Connectivity API 會被從較高階 API 移到底層的 Sensor Hub (low power domain),這樣可以更省電且有效的計算位址資料。

查了一下 android-n-preview-3 的 codebase,目前 libhardware 的 HAL Interface[2][3] 還沒有改變,上層的 Location API[4] 也還沒有跟著新的設計異動。

繼續期待。

[1]: http://gpsworld.com/google-opens-up-gnss-pseudoranges/ “Google opens up GNSS pseudoranges : GPS World”
[2]: https://android.googlesource.com/platform/hardware/libhardware/+/android-n-preview-3/include/hardware/gps.h “include/hardware/gps.h – platform/hardware/libhardware – Git at Google”
[3]: https://android.googlesource.com/platform/hardware/libhardware/+/android-n-preview-3/include/hardware/sensors.h “include/hardware/sensors.h – platform/hardware/libhardware – Git at Google”
[4]: https://developer.android.com/reference/android/location/GpsSatellite.html
[5]: https://en.wikipedia.org/wiki/Pseudorange
[6]: https://en.wikipedia.org/wiki/Doppler_effect “Doppler effect – Wikipedia, the free encyclopedia”
[7]: https://www.youtube.com/watch?time_continue=2251&v=OEvycEMoLUg “Making Android sensors and location work for you – Google I/O 2016 – YouTube”