[iOS] 把舊專案換到XCode7與iOS9上面會出現上下黑條(Application appears with black bars on top and bottom)

##問題:

主要是心血來潮把自己就的App”粉絲相簿“想拿出來改版(終於). 結果發現上下邊有黑條.這裡有個示意圖:

不過,我的App明明就是使用系統預設的UITableViewController,NavigationController跟UITabBar而已. 趕緊來找找解決方法.

##主要原因:

根據iOS 9 Xcode 7 - Application appears with black bars on top and bottom這邊的解答,是說由於你沒有” LaunchScreen.storyboard”在你的App,所以XCode會”預設”而把你的App變成比較能夠跑的狀況(類似iPhone4 App跑在 iPhone6 Plus一樣).

這樣其實很不好,因為有上下邊黑條還有擴大的效果.

##解決方式:

根據http://stackoverflow.com/a/32614526/1316907這邊的解釋,進行以下的方式可以解決這樣的問題:

  • 更改”Launch Image Source” 成 “Brand Assets”
  • 不過由於我還是有問題,我必須還要修改”Launch Screen File”成MainStoryBoard

這裡有個修改後示意圖:

打完收工,本來想加新功能,卻踩一堆舊Bug.不過這樣也學了一課.. 真棒…

##相關鏈結:

程式設計週記[2015/12/18]:大家都是秋生萬

這是什麼?

程式週記主要內容如下:

  • Gihub project 介紹:
    • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢
  • 網路文章心得:
    • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

本週摘要

幾經思考決定(好像只是之前偷懶),決定把之前的“工作上的一些雜事筆記“改一下名字,並且持續努力的改成每週更新.

碎念一下: 其實之前停止是因為在忙著上coursera,不過我發現我既然還是都會寫一些twitter就應該要繼續更新我的部落格.

論壇與研討會

網路文章

iOS/MacOSX

Python

Go

一些網站

本週專案

這邊會寫一些我的Project 52的成果本週專案是https://github.com/kkdai/youtube A Youtube download package in Golang

其實方法很簡單,紀錄一下:

  • 分析你輸入的網址,找出Youtube ID
  • 透過http://youtube.com/get_video_info?video_id=來找出影片下載網址與簽章(下載用)
  • 由於找出影片資訊有數個(不同解析度)挑出你需要的
  • 下載影片 url + sig

[Golang][BLE] Eddystone 初體驗(包含Beacon模擬器)

前言

今年(2015)的年中,Google發表了Beacon Platform,並且引入了Eddystone也就是新的Beacon資料格式.本篇整理包含了簡單的資料格式介紹,Beacon模擬器的尋找(我也寫了一個模擬器)與一些App去掃描Eddystone Beacon.

那麼來開始看Eddystone

Eddystone 主要的資料單位是Frame,而主要有三種資料為:

  • URL Frame:
    • 用來顯示URL,裡面的資料會經過編碼.
  • UID Frame:
    • 用16 bytes來記錄一個唯一的識別碼,其中包含10 bytes的namespace跟6 bytes的instance
  • TLM Frame:
    • 這個Frame主要是拿來傳輸資料,主要是用於傳輸beacon的感知器資料(電池壽命,溫度,開機多久…).

啟動一個Eddystone Beacon Simulator (模擬Eddystone Beacon)

這邊有兩個語言推薦,不過主要都是支援Mac OS與Linux.大家可以看看自己決定要不要使用.

Node.js Eddystone Simulator與簡單Node.js教學

這邊稍微紀錄一下關於Node.js的簡單教學.會需要用到Node.js主要是因為現在只有支援”Eddystone beacon simulator“這個模擬器,所以得來稍微跑一下Node.js,只要會安裝跟執行就好.

安裝npm

請愛用brew

brew install npm

npm 下載套件

其實npm的套件都是放在網路repository上,所以要裝任何套件只要

npm install 套件名稱

就可以,但是如果找不到索引,就可能要下載git後本地端安裝

npm install -l

執行Node.js 套件

安裝好套件後,就找到某個.js檔案(可能是自己寫,可能是放在examples)

vu app.js

加入以下的程式碼

EB = require('eddystone-beacon');
EB.advertiseUrl('http://goo.gl/uagFfW');

存檔後執行

node app.js

這樣就可以了.. 由於這個套件沒有網頁顯示.執行玩得直接拿Eddystone 的verifier來驗證.

如何驗證 Eddystone Beacon是否正確 (Eddystone Validator/Scanner)

iOS 可以使用 Chome iOS 版本的 Today

只要進入 Today (iOS 下拉顯示”今天”),加入Chrome Extension. 就會搜尋實體網路 (Physical Web),可以搜尋到具有 URL Frame 的Eddystone Beacon.

如果要搜尋其他的Eddystone Beacon(UID Frame and TLM Frame_還是要使用專用軟體.

Android 推薦App

這個App我覺得很好用,iBeacon & Eddystone Scanner. 推薦給大家,還可以查詢RSSI的強弱.

Windows 請用Bluetooth Beacon Interactor

(Bluetooth Beacon Interactor)是UAP,下載鏈結

這裡有原始碼

相關專案

最後我把所有的Golang beacon simulator 整理成一個小專案,希望能幫助大家.

https://github.com/kkdai/beacon

[更新:12/30] 我也寫了一個Golang的Eddystone Beacon Scanner有興趣可以看看.

相關鏈結

[筆記] 一些新創產業的架構簡報收集

前言:

主要是記錄一下一個有趣的話題在gitter.im/CodeTengu/headquarters

請問有台灣有哪些 startup 寫過他們的系統架構, 使用哪些軟體、服務之類的嗎? 有點類似 stackshare.io 那樣把一些東西列出來?

整理:

以下為條列式紀錄:

[Golang] 來玩玩Golang的效能評估-Benchmark

##前言

在寫Project52的過程中,其實寫了不少的資料結構實作,或是寫了一些演算法的實作. 一直以來由於Golang內建了單元測試的工具,所以基本的go test都有跑.

不過最近由於有個小專案trigram人氣飆高,所以心血來潮來跑跑他的效能測試.發現效果不太好,於是本週的課題就是要來評估你的Go專案效能,並且讓他跑得更快.

Go內建的效能評估 - Benchmark

###如何建立效能評估

首先要講回來,在Go裡面通常而言的習慣是我們會把一個相關的物件寫在同一個檔案.並且把相關的測試寫在obj_test.go裡面.舉例而言:

一個物件 skiplist
檔名為  skiplist.go
相關測試與效能評估會寫在  skiplist_test.go

那效能評估要怎麼寫,我拿個例子來看:

func BenchmarkSliceInsert(b *testing.B) {
	var sl []uint32
	b.ResetTimer()
	var i uint32
	for i = 0; i < uint32(b.N); i++ {
		sl = append(sl, i)
	}
}

這段代碼主要是來效能評估slice對於append的速度.

###如何跑效能評估

那麼要如何在Go上面跑效能評估呢?

go test -bench=.

就可以看到類似的效果

BenchmarkSliceInsert-4   	100000000	        29.6 ns/op

不同資料結構間的效能評估

接下來放一些關於我在測試skiplist的數據,也能做些簡單的筆記:

BenchmarkSliceInsert-4   	100000000	        29.6 ns/op
BenchmarkSliceSearch-4   	   20000	     81506 ns/op
BenchmarkMapInsert-4     	 5000000	       283 ns/op
BenchmarkMapSearch-4     	30000000	        42.4 ns/op

這邊有些簡單的重點可以整理:

以資料結構插入而言: Slice 最快,Map 很慢

這也是很重要的slice是簡單的資料結構,雖然要iterator起來相當的繁瑣.(也很慢) 但是就資料的新增操作上,就快很多了.

如果要寫會一直變動的資料結構(或是很多複製與新增刪除的動作)就比較建議還是使用slice

以資料查詢而言: Map實在快多了

由於我測試流程裡面,slice是以找不到為範例.所以速度差異有點大.不過事實也是,Map的查詢真的快多了,所以如果要建立大量查詢的資料,其實很建議使用Map而不是使用Slice來管理你內部的資料存取.

小專案:

最後,我一樣放上我本週的專案.就是把上個禮拜的專案”trigram“的效能提升後,並且把他的切割格式增加兩個與四個.修改為Ngram

相關鏈結:

[Docker] 在Mac OSX上使用筆記

image

前言

自從之前把我的Macbook Air上面的空間加以清理之後.總算也空出了20~30G,可以好好的練習一下關於docker在swarm與其他在跨機器端的應用. 不過這裡稍微紀錄一些關於Mac上面使用docker的小筆記.

一些筆記

如何讓Docker Setting記錄在你所有的console

由於Docker在MacOSX 是使用VM的方式來架設,其實真正執行docker的機器是你Virtual Box裡面的Linux VM,所以去呼叫docker相關指令一般有兩個方式:

  • 透過Docker Quickterminal來跑
  • 另外一個也可以透過SSH的方式主要是鏈接ssh: 192.168.99.100:2376 帳號密碼是 docker/tcuser

不過這樣多少有些麻煩,有沒有可能讓我在我的console裡面(比如說iTerm2)裡面的每一個tab可以直接使用docker呢? 方法如下:

(假設你是使用bash) 打開 ~/.bash_profile 加入這行

eval "$(docker-machine env default)"

這樣你的預設使用者都可以找到正確的docker socket並且直接使用docker指令 (ex: docker run, docker build …)

如何讓root 使用相同docker環境

一般而言,原本的docker指令是需要透過sudo docker XXXX來執行.但是你會發現這件事情在Mac OSX下面會出現問題.

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

一查才發現,上面設定的環境參數並沒有在root的環境變數裡面.而且docker-machine是找不到原先的設定(docker-machine預設會讀該使用者的docker socket),所以你不能像上面一樣使用docker-machine env來設定環境變數.

必須要依照以下的方式來設定(假設你root也是使用bash,如果不是可以使用chsh -s /usr/local/bin/bash root來變更:

  • 先在你安裝docker的使用者下執行docker-machine env,可能會跑出類似以下的資料:
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/USER/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
  • 將以上的資料複製起來,編輯到root的.bash_profile.也就是執行sudo su 再來編輯 vi ~/.bash_profile
  • 把以上設定放在裡面,並且儲存
  • 呼叫sudo docker xxx 改成 sudo -i docker xxx

如此一來可以正常執行了.不過缺點是你只要用docker-machine 新增會刪除default的時候,就得重新設定.