2015/06/29

Raspberry Pi情報彙整(52)

我收集整理網路上看到的、感興趣的、跟Raspberry Pi相關的資訊,如果您發現任何新奇驚人的專案、新聞、活動等等,還請留言告知。

LifeBox with Raspberry Pi,有藍黃兩物種,不斷複製並競爭,不斷地形成新的樣子(畫面),可以由旋鈕改變參數。聽起來類似於Conway's Game of Life,不過我沒找到背後的演算法規則。

Kite mapping - Raspberry Pi,熱氣球太貴買不起嗎,試試看風箏吧,也能把相機與rpi送上天。
Garden Robot - Raspberry Pi,基金會的新教材:花園機器人,可以偵測光強度、溫濕度、土壤濕度,收集資料並儲存。
Raspberry Pi Official Case - Raspberry Pi,哇,rpi基金會官方設計推出的外殼,嗯,市面上已經有超多很棒的外殼產品,而且乍看之下,似乎看不出這個外殼是rpi官方產品;不過造型仍不錯,可看看文章,詳述設計過程。
Diddyborg metal edition - Raspberry Pi,PiBorg新產品,限量喔。在文章中,這台車還可以載一個人,真的還假的?
Flappy Brain EEG controlled game by Albert Hickey @winkleink » RasPi.TV,用腦波玩Flappy Bird,嘿,能過關嗎?
Outernet - Raspberry Pi,outernet?這什麼東西啊?透過與地球同步旋轉的衛星,廣播發送各種資料內容,譬如醫藥健康、維基百科、新聞消息等,屬於單向傳輸;這麼一來,許多遭受管制的地區,只要使用簡單的裝置,就可以接收這些資料,嘿嘿。
Moving Timelapse Féria de Nîmes 2015 | Nitchevo !,把縮時攝影裝置放在身上,呃,還不錯,不過拍下來的作品,看得我頭昏眼花。
PicoCluster - Computer and STEM education for everyone! by PicoCluster LLC — Kickstarter,推廣STEM教育的硬體載具,含有五台Pi 2,應該類似於運算叢集的概念,募資成功的話,之後會陸續教材與學習內容。
Raspberry Pi Posters,免費且有趣的rpi海報,真有心啊。
Naturebytes Wildlife Cam Kit - Digital Making for Wildlife by Naturebytes — Kickstarter,戶外攝影套件組合,捕捉野生動物的身影。

其他:

2015/06/26

在Raspberry Pi(Raspbian)上安裝matplotlib、使用pylab繪製簡單的圖形

之前已試過「在Cygwin上安裝matplotlib、使用pylab繪製簡單的圖形」,這篇則是試試在Raspberry Pi 2加Raspbian上做同樣的事情。

PS 已經忘記如何安裝了,印象中並無碰到困難,不是使用apt-get安裝Debian套件,就是使用pip安裝Python套件。

先試試輸出圖形到檔案吧,程式碼如下:

import matplotlib
matplotlib.use('Agg')

import pylab

pylab.figure(1)
pylab.plot([1,2,3,4,5], [1,7,3,5,2])
#pylab.show()
pylab.savefig('a.png')

沒問題,得到圖檔a.png後,如下:

然後試試直接在圖形視窗模式下直接顯示,我是以Windows的遠端桌面連線,透過RDP協定遠端登入,所以Raspbian應該安裝xrdp套件。

程式碼如下:

import pylab

pylab.figure(1)
pylab.plot([1,2,3,4,5], [1,7,3,5,2])
pylab.show()

可惜出現底下的錯誤訊息,雖會跳出一個視窗,但其內容是空白的。

** (a.py:2917): WARNING **: Can't load fallback CSS resource: Failed to import: The resource at '/org/gnome/adwaita/gtk-fallback.css' does not exist

** (a.py:2917): WARNING **: Can't load fallback CSS resource: Failed to import: The resource at '/org/gnome/adwaita/gtk-fallback.css' does not exist
/usr/lib/python2.7/dist-packages/gi/types.py:113: Warning: Source ID 5 was not found when attempting to remove it
  return info.invoke(*args, **kwargs)

趕緊拜拜谷歌大神,雖然也有人碰到類似的問題,但似乎沒有一槍斃命的解決辦法;試著安裝gnome這個套件:

$ sudo apt-get install gnome

然後再試一次,嘿,成功了。
雖然還是有錯誤訊息。


參考資料:

2015/06/25

在Cygwin上安裝matplotlib、使用pylab繪製簡單的圖形

matplotlib是一套2D繪圖的Python程式庫,支援各式各樣的圖形表格;透過pyplot與pylab提供類似於MATLAB的介面,功能強大,用起來卻非常簡單,因為各種你會需要的功能,都已經幫你準備好了。

底下列出幾個從官網抓來的展示圖。

若要在Windows上安裝matplotlib,最簡單的方法是安裝已經統包整理好的套件,諸如Python(x,y)Enthought CanopyContinuum Anaconda,譬如安裝Canopy之後,開啟編輯器,輸入底下的範例程式碼:
import pylab

pylab.figure(1)
pylab.plot([1,2,3,4,5], [1,7,3,5,2])
pylab.show()
然後執行,嘿,便會出現新視窗顯示下圖。
真不錯,不過這篇的重點是在Cygwin上安裝matplotlib。安裝Cygwin本身的部分,請參考這篇

開啟Cygwin終端機,試著以底下指令安裝matplotlib:
$ pip install matplotlib
Collecting matplotlib
  Using cached matplotlib-1.4.3.tar.gz
    Complete output from command python setup.py egg_info:
    IMPORTANT WARNING:
        pkg-config is not installed.
        matplotlib may not be able to find some of its dependencies
    ===================================================================
    Edit setup.cfg to change the build options

    BUILDING MATPLOTLIB
                matplotlib: yes [1.4.3]
                    python: yes [2.7.10 (default, Jun  1 2015, 18:17:45)  [GCC
                            4.9.2]]
                  platform: yes [cygwin]
...省略...
    ==================================================================
                            * The following required packages can not be built:
                            * freetype

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-vScgZ4/matplotlib

出現錯誤訊息,因為沒有matplotlib需要的程式庫套件,我試了很多遍,參考了網路上許多文章,大概需要的套件有freetype、python-gtk、python-tk、libpng、gcc等,但因為試來試去,結果安裝了一堆,也不知道哪些其實是不需要的;我安裝的Cygwin套件有:libfreetype-devel、libfreetype6、python-gtk2.0、python-gtk2.0-devel、python-tkinter、libpng16、libpng16-devel、libpng-devel、libX11-devel、pkg-config、gcc-core

然後再試著安裝,成功囉:

$ pip install matplotlib
Collecting matplotlib
  Using cached matplotlib-1.4.3.tar.gz
Requirement already satisfied (use --upgrade to upgrade): numpy>=1.6 in /usr/lib/python2.7/site-packages (from matplotlib)
Requirement already satisfied (use --upgrade to upgrade): six>=1.4 in /usr/lib/python2.7/site-packages (from matplotlib)
Collecting python-dateutil (from matplotlib)
  Downloading python_dateutil-2.4.2-py2.py3-none-any.whl (188kB)
    100% |████████████████████████████████| 192kB 524kB/s
Collecting pytz (from matplotlib)
  Downloading pytz-2015.4-py2.py3-none-any.whl (475kB)
    100% |████████████████████████████████| 475kB 262kB/s
Requirement already satisfied (use --upgrade to upgrade): pyparsing>=1.5.6 in /usr/lib/python2.7/site-packages (from matplotlib)
Collecting nose>=0.11.1 (from matplotlib)
  Downloading nose-1.3.7-py2-none-any.whl (154kB)
    100% |████████████████████████████████| 155kB 655kB/s
Collecting mock (from matplotlib)
  Downloading mock-1.0.1.tar.gz (818kB)
    100% |████████████████████████████████| 819kB 187kB/s
Building wheels for collected packages: matplotlib, mock
  Running setup.py bdist_wheel for matplotlib
  Stored in directory: /home/yehnan/.cache/pip/wheels/12/98/77/c3a045fea5159ea287a3db9d1c55c471d452019fecfde2f194
  Running setup.py bdist_wheel for mock
  Stored in directory: /home/yehnan/.cache/pip/wheels/c9/b4/72/4de2802cbc4bfd82f938ff92015e1b42f01131583675ab4d00
Successfully built matplotlib mock
Installing collected packages: python-dateutil, pytz, nose, mock, matplotlib
Successfully installed matplotlib-1.4.3 mock-1.0.1 nose-1.3.7 python-dateutil-2.4.2 pytz-2015.4

花費了不少時間,接著執行剛剛的範例程式碼(假設檔名為a.py):

$ python a.py
/usr/lib/python2.7/site-packages/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display
  warnings.warn(str(e), _gtk.Warning)
/usr/lib/python2.7/site-packages/matplotlib/backends/backend_gtk.py:61: GtkWarning: gdk_cursor_new_for_display: assertion 'GDK_IS_DISPLAY (display)' failed
  cursors.MOVE          : gdk.Cursor(gdk.FLEUR),
...省略...
  File "/usr/lib/python2.7/site-packages/matplotlib/backends/backend_gtk.py", line 61, in
    cursors.MOVE          : gdk.Cursor(gdk.FLEUR),
RuntimeError: could not create GdkCursor object


呃,DISPLAY?啥?不知道怎麼解決,不過可以把程式碼換成底下這一份,不要以圖形視窗介面顯示,而是儲存到PNG圖檔。

import matplotlib
matplotlib.use('Agg')

import pylab

pylab.figure(1)
pylab.plot([1,2,3,4,5], [1,7,3,5,2])
#pylab.show()
pylab.savefig('a.png')

執行後便會得到圖檔a.png,如下:
耶,成功囉。

有高手留言,需再安裝Cygwin/X,便能以pylab.show()顯示,讓我們試試看囉。再次執行Cygwin安裝程式,選擇套件xorg-server、xinit、xlaunch並安裝。

在Cygwin終端機下輸入指令startx,會看到一個全黑視窗(立刻會跳出),以及出現一堆訊息,然後就沒了。
嗯,試著從程式集選擇Cygwin-X的XWin Server:
看到底下的終端機介面,輸入$ python a.py執行範例程式(使用pylab.show()那一個):
哇,真的出現囉,收工。

參考資料:

2015/06/22

試用Arduino.org的Arduino Studio 0.0.1版

Arduino鬧分家,分成arduino.ccarduino.org,紛紛擾擾,一言難盡,身為局外人,若要說說不負責任的評論,說穿了就是arduino.cc屬於無工廠型的經營推廣模式,arduino.org則是工廠型營利模式,兩方起衝突,如此而已。

大致說來,一般maker應會支持arduino.cc那一方,雖然因為商標問題,不得不推新品牌Genuino,但與AdafruitSeeed合作授權之後,在製造方面應無問題。

至於另一方面,先前arduino.org另行推出令人混淆的Arduino IDE,招致大量惡評;我原本以為arduino.org會著重於硬體方面的設計,對於軟體方面只會提供基本支援,不過似乎錯了,因為arduino.org日前推出新軟體開發環境Arduino Studio,哇,趕快來看看。

Arduino Studio以Brackets為基礎,這又是什麼東西?Brackets是Adobe公司推出的開放原始碼編輯器平台,以HTML、CSS、JavaScript開發,跨平台可用於Mac、Windows與Linux,嗯,聽起來相當不錯。下圖取自Brackets官網

因為不僅是編輯器,也是個開發平台,其他人可以加以擴充,撰寫外掛,加入自己的功能,Arduino Studio應該就是這麼來的。老實說我對於原本的Arduino IDE非常不滿,既陽春又缺少許多功能,當然啦,介面簡單也是它的成功因素之一,另外,高手們往往在命令列模式下工作,無視IDE。

趕快來試試看吧,到Arduino Studio官網下載,我下載的是arduinostudio-0.0.1-win32.zip,解壓縮即可,然後執行ArduinoStudio.exe。
嘿,上頭是黑色的,左右維持Arduino綠色色調,很不搭啊,不過這還是初版、測試版,相信之後會改進。找塊Uno板子,試試燒錄最簡單的LED閃爍範例程式吧。藉由簡單的操作動作,看看如何,先選擇選單File-Open samples,咦,範例程式出現在右邊,然後再開啟Blink,不過中間被輸出視窗擋住了,點按左邊底下的Console按鈕關閉,看到程式碼囉。
嗯,有程式碼摺疊功能,語法上色,介面底下還可以選擇程式語言。然後從選單Tools-Board選擇板子(或從視窗介面最底端)。
接著從選單Tools-Port選擇序列埠號,嘿,怎麼不能選啊,選了沒反應,真糟糕。只好換到Mac再試試看,可以囉。
然後從選單Sketch-Verify/Compile試著編譯看看吧,成功啦;需要自己手動開啟狀態輸出視窗,有點不便。
然後從選單File-Upload燒錄吧,成功啦。
大部分的功能都是原有Arduino IDE的功能,有些功能還打上[Coming soon],不過這只是0.0.1版,將來不知道會加入哪些新功能,期待中。

參考資料:

2015/06/19

Python筆記:operator.itemgetter

若有底下這種資料,是個串列,含有多個字典。
data = [
    {'age': 31, 'city': 'taipei', 'name': 'amy'},
    {'age': 71, 'city': 'tokyo', 'name': 'john'},
    {'age': 16, 'city': 'london', 'name': 'zoe'},
    {'age': 16, 'city': 'rio', 'name': 'cathy'},
    {'age': 48, 'city': 'frankfurt', 'name': 'david'}]

那麼,呼叫內建函式sorted時,能以參數key傳入lambda,指定要根據哪個元素進行排序。

根據age年齡排序:
print(sorted(data, key=lambda x: x['age']))

先排age年齡、再排name名字:
print(sorted(data, key=lambda x: (x['age'], x['name'])))

不過也能運用operator.itemgetter取出想排序的元素,而且聽說速度更快,試試看吧。
import random
import string
from operator import itemgetter

先寫個會亂數產生字串的函式,預設回傳長度介於3到10的字串,都是小寫字母。
def random_str(size_lower=3, size_upper=10):
    size = random.randint(size_lower, size_upper)
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(size))

然後撰寫亂數產生資料的函式,參數size代表想要幾個元素(字典)。
def random_data(size):
    result = []
    for _ in range(size):
        d = {}
        d['age'] = random.randint(1, 99)
        d['name'] = random_str()
        d['city'] = random_str()
        result.append(d)
    return result

產生資料,此處寫著DATA_SIZE為1000,之後測試時可修改。
DATA_SIZE = 1000
data = random_data(DATA_SIZE)

受測函式一,使用lambda,分別進行幾次排序。
def test_lambda():
    data0 = sorted(data, key=lambda x: x['age'])
    data1 = sorted(data, key=lambda x: x['name'])
    data2 = sorted(data, key=lambda x: x['city'])
    data3 = sorted(data, key=lambda x: (x['age'], x['name']))
    data4 = sorted(data, key=lambda x: (x['age'], x['city']))

受測函式二,使用itemgetter,分別進行幾次排序。
def test_itemgetter():
    data0 = sorted(data, key=itemgetter('age'))
    data1 = sorted(data, key=itemgetter('name'))
    data2 = sorted(data, key=itemgetter('city'))
    data3 = sorted(data, key=itemgetter('age', 'name'))
    data4 = sorted(data, key=itemgetter('age', 'city'))

測量所需時間,此處TEST_COUNT為100,代表跑100次,可修改。
if __name__ == '__main__':
    from timeit import Timer
    TEST_COUNT = 100
    t_lambda = Timer('test_lambda()', 'from __main__ import test_lambda')
    print('lambda: ', t_lambda.timeit(TEST_COUNT))
    t_itemgetter = Timer('test_itemgetter()', 'from __main__ import test_itemgetter')
    print('itemgetter: ', t_itemgetter.timeit(TEST_COUNT))

來測試看看吧,環境是WinXP、Cygwin、Python 2.7.10:
DATA_SIZE 1000,TEST_COUNT 100
lambda 0.734375
itemgetter 0.71875

DATA_SIZE 1000,TEST_COUNT 1000
lambda 7.46875
itemgetter 6.25

DATA_SIZE 1000,TEST_COUNT 10000
lambda 77.421875
itemgetter 62.921875

加大DATA_SIZE試試看吧:

DATA_SIZE 10000,TEST_COUNT 100
lambda 12.203125
itemgetter 10.953125

DATA_SIZE 10000,TEST_COUNT 1000
lambda 123.90625
itemgetter 110.375

綜合而言,itemgetter比較快,所需時間大約是lambda的80%~97%。

我也用Python 3.4.3測試,情況差不多,不過實際測得的所需時間,都比Python 2.7.10版的時候要久,也就是說Python 3比2慢啦。

2015/06/17

Python筆記:迭代串列的各種寫法

記錄一下各種迭代串列的寫法。

使用3.x版的函式print。
from __future__ import print_function

以這個串列為例,含有五個元素(字串)。
names = ['Amy', 'Eric', 'Cathy', 'David', 'Bob']

算出串列長度,迭代索引值,以索引方式取出元素。
for i in range(len(names)):
    print(names[i], ' ', end='')
print()

直接迭代元素。
for name in names:
    print(name, ' ', end='')
print()

迭代索引值與元素。
for i, name in enumerate(names):
    print(i, name)

反轉串列後,再迭代元素。
for name in reversed(names):
    print(name, ' ', end='')
print()

排序串列後,再迭代元素。
for name in sorted(names):
    print(name, ' ', end='')
print()

逆向排序串列後,再迭代元素。
for name in sorted(names, reverse=True):
    print(name, ' ', end='')
print()

根據元素長度進行排序,再迭代元素。
for name in sorted(names, key=lambda x: len(x)):
    print(name, ' ', end='')
print()

2015/06/15

Python筆記:itertools.chain

練習使用標準模組itertools裡的chain,可以把數個可迭代者串連起來。

使用3.x版的函式print
from __future__ import print_function
匯入
from itertools import chain

手上有三個串列
a = [70, 81, 92]
b = ['hi', 'hello', 'aloha', 'ahoy']
c = [31.3, 32.5, 29.2, 28.5]

按照想要的順序,丟入chain,得到迭代器,
for e in chain(a, b, c):
    print(e, ' ', end='')

輸出:70  81  92  hi  hello  aloha  ahoy  31.3  32.5  29.2  28.5

自己實作
def my_chain(*iterables):
    for it in iterables:
        for e in it:
            yield e

for e in my_chain(a, b, c):
    print(e, ' ', end='')

輸出:同上

另外,如果你想丟進去的東西,會是動態產生、或是某種迭代器,那麼可使用chain.from_iterable。

底下這個函式,若傳入4,會依序回傳[0]、[0, 1]、[0, 1, 2]、[0, 1, 2, 3](不一定是串列,依Python版本而定)
def foo(x):
    i = 1
    while i <= x:
        yield range(0, i)
        i += 1

使用chain.from_iterable把它們串起來
for e in chain.from_iterable(foo(4)):
    print(e, ' ', end='')

輸出:0  0  1  0  1  2  0  1  2  3

自己實作
def my_chain_from_iterable(iterables):
    for it in iterables:
        for e in it:
            yield e

for e in my_chain_from_iterable(foo(4)):
    print(e, ' ', end='')

輸出:同上

2015/06/14

Raspberry Pi情報彙整(51)

我收集整理網路上看到的、感興趣的、跟Raspberry Pi相關的資訊,如果您發現任何新奇驚人的專案、新聞、活動等等,還請留言告知。

[活動] Raspberry Pi社群聚會 #08 @2015/06/29,好久不見的聚會,大家要來喔。

[活動] Raspberry Pi GPIO 遊戲機工作坊 @ 2015/06/27,哇,台灣樹莓派與PyLadies合辦rpi遊戲機工作坊耶。
A wheelchair controlled by eye movements - Raspberry Pi,眼珠動一動,就能控制輪椅。使用Pi 2、Python、OpenCV,具備紅外線距離偵測,避免碰撞;創作者是兩位小女生,只有十四五歲的年紀。
Lucid Labs Raspberry Pi DAC by Lucid Labs — Kickstarter,想要打造具備網路連線能力的音樂播放器嗎,除了rpi,你還需要這張DAC擴充板,32位元、384kHz、使用I2S。
SamplerBox - drop-and-play sampler - Raspberry Pi,自己建構取樣機(sampler)吧,零件與步驟在此
Pi PoE Switch HAT - power over Ethernet for Raspberry Pi by Pi Supply — Kickstarter,rpi常被要求的功能之一就是PoE。
Ant-Man: Micro-Tech Challenge - Raspberry Pi,第一眼看到時,我根本搞不清楚這是什麼,應該是個競賽,招募14~18歲的女性(限定!),運用微小技術與零件進行創作,獲選者可到加州好萊塢遊玩喔,參訪迪士尼工作室,參加迪士尼樂園的工作坊。
Maker Faire Bay Area 2015 - Raspberry Pi,基金會成員前往地球上最大的Maker Faire(加州灣區),也向小孩子展示DOT板。
Lightning! The Lightning Detector for Raspberry Pi Weather Station,其他人都在記錄溫度與濕度,而你卻可以偵測閃電,帥吧。
Pi Wars | The Raspberry Pi Robotics Challenge Competition,Pi Wars 2015來囉,似乎還未決定要不要舉辦,先去看看2014年的比賽影片吧。
Raspberry PI Arcade Cabinet Part I - News - SparkFun Electronics,打造大型機台。
Raspberry Pi Rack • Hackaday.io,除了教育、maker專案等,rpi也常被用於工廠控制、企業、伺服器;模仿刀鋒伺服器,打造rpi的機架式伺服器。
CamJam June 2016 » RasPi.TV,劍橋Pi聚會記錄,非常豐富。
Automated cooling fan for Pi,撰寫Python程式,根據pi的溫度,透過繼電器控制風扇。

其他:

LinkIt ONE:Arduino IDE 1.6.4加SDK 1.1.09

LinkIt SDK 1.1.09 Beta開始支援Arduino 1.6.4,Windows與Mac都支援。底下試試在Windows XP上安裝。

下載Arduino IDE 1.6.4,並解壓縮。

首先安裝板子需要的USB驅動程式,到這裡下載,解壓縮後得到InstallMTKUSBCOMPortDriver.exe,執行。

接下來要讓Arduino IDE支援LinkIt ONE板子,開啟後,到選單「File-Preferences」,在「Additional Boards Manager URLs」裡輸入「http://download.labs.mediatek.com/package_mtk_linkitone_index.json」。
到選單「Tools-Board-Boards Manager...」,應會看到LinkIt ONE,按下「Install」進行安裝。
然後重新啟動Arduino IDE,接下來必須更新韌體以符合SDK版本。選單「Tools-Board」選「LinkIt ONE」,選單「Tools-Programmer」選「LinkIt Firmware Updater」,然後執行「Tools-Burn Bootloade」,出現韌體更新工具。
把開關MS/UART撥到MS,拔插USB線,更新韌體。然後便可試著燒錄LED閃爍範例程式,記得把開關MS/UART撥回UART。

改成Arduino 1.6.4後,許多原始程式碼就不必每次都重新編譯了,太好啦。不過LinkIt的原始碼仍需要。

改成SDK 1.1.09(或1.1.08)後,就不必一直切換Debug port/Modem port了,太好啦。


參考資料:

LinkIt ONE:Mac OS X安裝SDK 1.1.09

LinkIt ONE SDK 1.1.09開始支援Mac OS X 10.9與10.10,底下簡述安裝過程。

PS 我的Mac OS X版本是10.8,也可以。

下載Java 7,我下載的是jdk-7u79-macosx-x64.dmg,掛載後執行JDK 7 Update 79.pkg。

下載Arduino軟體,1.5.6-r2或1.5.7,我下載的是arduino-1.5.7-macosx-java7-r2.zip,解壓縮後得到Arduino.app,放進目錄「應用程式」(/Applications)。

下載LinkIt ONE SDK 1.1.09(檔案名MediaTek_LinkIt_SDK_for_Arduino_Mac_1_1_09.zip),解壓縮,得到目錄MediaTek_LinkIt_SDK_for_Arduino_Mac_1_1_09。把這個目錄搬移放進/Applications。

開啟終端機,切換進SDK目錄,
$ cd /Applications/MediaTek_LinkIt_SDK_for_Arduino_Mac_1_1_09
$ ./install_linkit_sdk -i /Applications/Arduino.app

應出現「Install done.」字樣。

然後在Arduino.app上點按滑鼠耍右鍵,選「顯示套件內容」,應可在Contents/Java/hardware/arduino與Contents/Java/hardware/tools底下看到新子目錄mtk。

接下來要燒錄最簡單的LED閃爍範例程式,開啟Arduino IDE後,到選單「Tools-Board」選擇「LinkIt ONE」,到選單「Tools-Port」選擇「/dev/cu.usbmodem1443」,也就是以「cu」開頭、而且尾端沒有「(LinkIt ONE)」字樣的那一個。

然後開啟Blink範例程式,燒錄,成功囉。


後話:

我之前在Mac OS X 10.8上安裝SDK 1.1.09,須修改指令./install_linkit_sdk -i /Applications/Arduino.app的安裝路徑為/Applications/Arduino.app/Contents/Java,而且會出現底下的錯誤訊息,無法安裝。

file /Applications/Arduino.app/Contents/Java/hardware/tools/mtk/autostart.txt does not exist, create it.
Create file /Applications/Arduino.app/Contents/Java/hardware/tools/mtk/autostart.txt failed, error [13]: Permission denied
Read target start file C:\autostart.txt failed.

參考資料:

2015/06/10

[廣告] 雲端網頁程式設計: Google App Engine 使用Python(Python for Google App Engine)

嗨,我翻譯了一本書,在這裡打打廣告。

書名:雲端網頁程式設計: Google App Engine 使用Python
原書名:Python for Google App Engine
作者:Massimiliano Pippi
譯者:我
出版社:博碩
出版日期:2015年5月28日
頁數:192

簡介:

Google App Engine不僅是Google Cloud Platform的重要組成元件,也是功能相當廣泛的雲端服務,而Python則是該平台所支援的第一款程式語言,藉由Python,你便能夠在Google App Engine上快速開發,為你的專案帶來顯著成效。

本書將會指引你利用Python搭配Google App Engine,從Google Cloud Platform基礎知識開始,接著成功地設計、建置並且執行現代化且具擴展性的網頁應用程式。從認證程序到資料儲存、以及非同步任務和伺服器推送技巧,讀者將會學習如何在 Python 應用程式裡,基於 Webapp2和Django等Web開發框架,並使用Datastore、Cloud Storage、Cloud SQL、任務佇列以及Channel等服務。

內容:
  • 使用 NDB Python API 在 Cloud Datastore 裡進行資料儲存與管理。
  • 使用任務佇列及 Cron 執行非同步任務。
  • 在 Cloud SQL 裡設定、使用以及管理 MySQL 伺服器。
  • 利用 Channel 開發出伺服器的推送通知以及即時的應用程式。
  • 使用 Cloud SQL 作為資料後台,撰寫出完整的 Django 應用程式。
  • 使用 Cloud Endpoints 為你的行動客戶端快速地提供 REST API。

目錄:
  1. 邁出第一步
  2. 更複雜的應用程式範例
  3. 使用者資料的儲存與處理
  4. 增進應用程式執行效能
  5. Google Cloud SQL 儲存資料
  6. 運用 Channel API 實作即時應用程式
  7. 打造 Django 應用程式
  8. 以 Google Cloud Endpoints 發佈 REST API

2015/06/09

Raspberry Pi情報彙整(50)

嘿,沒想到居然50期了,嘿嘿。

我收集整理網路上看到的、感興趣的、跟Raspberry Pi相關的資訊,如果您發現任何新奇驚人的專案、新聞、活動等等,還請留言告知。

Despicable Katie's Minion Pi - Raspberry Pi,11歲女孩的作品,這是她征服世界的第一步,來這邊看看她寫的建造日記吧。英雄出少年啊,想想我11歲還流著鼻涕咧。

LEDs Strips Tell You the Trains Aren’t Running | Hackaday,有這麼管道可以得知地鐵火車的即時狀態,但仍不夠,最好使用五顏六色的LED燈條,這樣才炫嘛。
UDOO Neo = Raspberry Pi + Arduino + Wi-Fi + BT 4.0 + Sensors by UDOO — Kickstarter,嘿,UDOO將要推出新版,簡言之是比較便宜的版本,有兩個處理器,分別可跑Linux與Arduino程式,再加上9軸感測器、WiFi、藍牙4.0,嗯,看起來很有競爭力啊。
Astro Pi flight case - Raspberry Pi,要把Pi送上太空,可不容易啊,太空人有太空衣,那麼Pi也要有特製的外殼才行。
The Sense HAT: headgear for the terminally curious - Raspberry Pi,這是要送上太空的感測擴充板,將會公開販售,嘿,好期待啊。
[活動] PyConAPAC 2015 Tutorial - Raspberry Pi Camera + Python @ 2015/05/31,想了解rpi的相機模組嗎,趕快來參加這個工作坊吧,會使用Python語言喔。
Turning EEG Data and a Raspberry Pi into Brainwave Games | Make,讀取EEG(人體標準腦波圖),嘿,這玩意好像越來越常見了,將來可以正確顯示一個人的心情與情緒嗎?。
Raspberry Pi retroScreen by Arthur Amarra — Kickstarter,嘿,你需要笨蛋手機那種的螢幕嗎,簡簡單單地顯示訊息,不需要絢麗色彩與觸控功能。
Pocket PiGRRL | Adafruit Learning System,更新後的建構指引,打造一部你自己的掌上遊戲機吧。
Game Boy XXL Is A Handheld For Giants,喂喂,這台Game Boy也太隻了吧。
Rate these 53 sub-$200 hacker SBCs, win one of 20 ·  LinuxGizmos.com,單板電腦琳琅滿目,怎麼選啊,做個調查吧,看看大家心愛的是哪一塊板子。去年的贏家是Raspberry Pi Model B、BeagleBone Black、Odroid-XU、CubieTruck (CubieBoard3)與Banana Pi。

其他: