2013年11月14日 星期四

安裝 elasticsearch 與 python client for elasticsearch

安裝 elasticsearch

官網下載 http://www.elasticsearch.org/download/

解開壓縮檔後,至bin目錄下即可執行啟動 elasticsearch

> elasticsearch.bat 或 > elasticsearch.sh


安裝 urllib3 package

> easy_install urllib3 或 > pip install urllib3

或至官網下載https://pypi.python.org/pypi/elasticsearch

接著利用下列程式測試一下...
# -*- coding: utf-8 -*-

import urllib3
http = urllib3.proxy_from_url('http://proxy.hinet.net/')
r = http.request('GET', 'http://tekibrain.blogspot.com/')

print r.status # 正常的話應該會印出 '200',網站傳回 HTTP Return code '200'
print r.data # 印出網頁原始碼資料



安裝 python client for elasticsearch package

> easy_install elasticsearch
或者
> pip install elasticsearch

或至官網下載 https://pypi.python.org/pypi/urllib3

接著利用下列程式 estest.py 測試一下...
# -*- coding: utf-8 -*-

from datetime import datetime
from elasticsearch import Elasticsearch

# 預設連線至 ElasticSearch Server Port 9200,  localhost:9200
es = Elasticsearch()

# 加入資料進行索引, 自己設定  id = 1
# http://localhost:9200/social/tweet/1
setdata = es.index(index="social", doc_type="tweet", id=1, body={"content": "大家好","user":{"name":"老王","id":670085},"tags":["demo","test"], "timestamp": datetime.now()})
print 'set data => ' 
print setdata
setdata = es.index(index="social", doc_type="tweet", id=2, body={"content": "大家好2","user":{"name":"小王","id":670086},"tags":["demo","test2"], "timestamp": datetime.now()})
print 'set data => ' 
print setdata


#  取得 id=1 資料
getdata = es.get(index="social", doc_type="tweet", id=1)['_source']
print '-------------------------'
print 'get data <= ' 

es.indices.refresh(index="social")
# Search:
qdoc = {
 "query": {
  "match" : {
   "tags" : "demo"
  }
 }
}
getdata = es.search(index="social", body=qdoc)
print 'get data <= '
#print type(getdata)
print("Got %d Hits:" % getdata['hits']['total'])
for hit in getdata['hits']['hits']:
    print("%(content)s %(user)s: %(tags)s" % hit["_source"])


測試成功結果 (timestamp依照系統時間而不同):
> python estest.py
set data =>
{u'_type': u'tweet', u'_id': u'1', u'ok': True, u'_version': 44, u'_index': u'social'}
set data =>
{u'_type': u'tweet', u'_id': u'2', u'ok': True, u'_version': 42, u'_index': u'social'}
-------------------------
get data <=
get data <=
Got 2 Hits:
大家好2 {u'name': u'\u5c0f\u738b', u'id': 670086}: [u'demo', u'test2']
大家好 {u'name': u'\u8001\u738b', u'id': 670085}: [u'demo', u'test']

#

2013年11月4日 星期一

Python 2.7 進行 datetime 加減(timedalta)及設定輸出格式(strftime)


  1. 設定 someday = datetime.date(2013,10,28)
  2. datetime.timedelta(days = 1) 用於計算 datetime 時間增減(本例:以1天為單位)
  3. 可利用 strftime("%Y%m%d) datetime 控制輸出格式

vi test.py
import time
import datetime

someday = datetime.date(2014,9,20)

while (someday <= datetime.date.today()) :
    # print out with date format : YYYYMMDD, example : 20140920
    print str(someday.strftime("%Y%m%d"))
    someday += datetime.timedelta(days = 1)

print "================="
    
someday = datetime.date.today()

while (someday >= datetime.date(2014,9,15)) :
    # print out with date format : YYYYMMDD, example : 2014-09-20
    print str(someday.strftime("%Y-%m-%d"))
    # minus, timedelta(days = 1)
    someday -= datetime.timedelta(days = 1)

print "================="

someday = datetime.date.today()

while (someday >= datetime.date(2014,9,15)) :
    # print out with date format : YYYYMMDD, example : 2014/09/20
    print str(someday.strftime("%Y/%m/%d"))
    # add, timedelta(days = -1)
    someday += datetime.timedelta(days = -1)

執行結果:
$ python test.py
20140920
20140921
20140922
=================
2014-09-22
2014-09-21
2014-09-20
2014-09-19
2014-09-18
2014-09-17
2014-09-16
2014-09-15
=================
2014/09/22
2014/09/21
2014/09/20
2014/09/19
2014/09/18
2014/09/17
2014/09/16
2014/09/15

延伸閱讀:datetime - Basic date and time types (python.org)

#

2013年10月27日 星期日

Mac OS X USB裝置樹(裝置列表) : alias lsusb="system_profiler SPUSBDataType"

Linux 環境下 lsusb 指令可以快速提供電腦上 USB 裝置的清單列表。

Mac OS X 上雖無 lsusb 指令,但其實有對應的功能可以使用。

點選 螢幕左上角的蘋果icon > 關於這台Mac > 更多資訊... > 系統報告 > USB

就能顯示出目前系統的USB裝置樹。

USB 裝置樹
USB 裝置樹

喜歡在終端機 (Terminal)手動下指令的話,可以執行 > system_profiler SPUSBDataType 指令。也能看到所有USB裝置列表。

執行 system_profiler SPUSBDataType
如果您真的執意想要執行 lsusb 指令的話,不妨就在 ~/.bash_profile  中利用alias指令將 system_profiler SPUSBDataType 指令 alias 成 lsusb 。


alias lsusb="system_profiler SPUSBDataType"

  • 開啟編輯 ~/.bash_profile 設定檔加上上面 alias 指令存檔後。
  • 執行 > source ~/.bash_profile 。


接著就能在終端機下文字指令 > lsusb 來看 USB 裝置清單囉。

#




2013年10月19日 星期六

Apple TV 3 Remote (IR codes) 遙控器紅外線編碼

Apple TV 3 Remote (IR codes)
紅外線訊號編碼

  • UP 0x77E1D05F
  • LEFT 0x77E1105F
  • DOWN 0x77E1B05F
  • MENU 0x77E1405F
  • ENTER 0x77E1BA5F
  • RIGHT 0x77E1E05F
  • PLAY 0x77E17A5F
有了上述的紅外線訊號編碼,就可以利用Arduino接上紅外線發射LED模擬原廠紅外線遙控器,來遙控 Apple TV 3 囉~
參考:babelman's Blog
#

2013年10月6日 星期日

SONY Xperia Z1 與 外掛鏡頭 SONY QX10 ~ SONY的創新魂又回來了?

前陣子Sony Z1 與外掛鏡頭QX10、QX100發表,身邊不少朋友都對分離鏡頭與感光元件的設計頗感興趣。對於已有輕便隨身相機如SONY RX100或RX100 II的朋友來說,QX10、QX100便利性和成像品質或許不一定具吸引力,但可以分離拍攝卻依然讓使用者有了諸多不同使用情境的想像。

總覺得似乎有很多有趣的應用會因應而生。

Sony以前一直是大家頗為讚賞的創新品牌代表,然而這幾年在Apple、Google、Nintendo、Samsung...各種產品強大競爭對手環伺下,似乎讓品牌粉絲覺得失去了以前那種能帶給人驚豔感受,當然這也可能是因鎂光燈焦點都被其他競爭品牌所搶去所致。

不過這幾年依然可以看到Sony不斷持續的進行各種產品創新,或許不見得成為市場第一龍,但各產品線的持續創新,卻慢慢在進行異質整合時看到激盪出來的火花。

QX10與QX100何嘗不是Sony持續在行動電話與數位影像、攝影類產品努力下,激盪出來的異質火花。

相較於其他品牌,Sony在視覺影像、視聽家電、消費3C的產品線更完整,未來在跨螢整合服務的優勢相信也會逐漸展露。

當然,這也是Apple、Samsung等品牌極力想要切入與競爭的領域。

#

2013年9月22日 星期日

Raspberry Pi 安裝USB無線網卡 (Buffalo WLI-UC-GNM)

安裝USB無線網卡


執行lsub確認Raspberry Pi已經抓到USB無線網路卡。範例為Buffalo WLI-UC-GNM無線網卡。

> lsusb

執行結果:
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]
確實抓到網卡(Ralink RT8070相容驅動程式)。

編輯網路介面設定檔案


> vi /etc/network/interfaces
auto lo
iface lo inet loopback

# 設定Ethernet網卡以DHCP取得IP
iface eth0 inet dhcp

# 設定Ethernet網卡以DHCP取得IP
allow-hotplug wlan0
iface wlan0 inet dhcp

# 強制網卡以WPA2方式與Wi-Fi AP連線
wpa 2

# 設定Wi-Fi AP 之SSID與密碼
wpa-ssid <<YOUR_SSID>>
wpa-psk <<YOUR_WPA2_PSK_PASSWORD>>

重新啟動networking

> service networking restart


確認網卡已配置IP

> ifconfig -a

wlan0     Link encap:Ethernet  HWaddr 10:6f:00:00:00:00
          inet addr:192.168.1.7  Bcast:192.168.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3458 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2583 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:602575 (588.4 KiB)  TX bytes:1077331 (1.0 MiB)

已經配置 192.168.1.7 給 wlan0 無線網卡介面

#

重新開啟Apple TV 3 影片封印 (DNS設定)

之前的文章「開啟Apple TV 3 影片封印 (DNS設定)」在Apple更改預告片服務連結為SSL(Port443)連線後,必須再重新動些手腳才能恢復。

請按下列步驟執行,就能再重新開啟Apple TV 3影片封印。

材料
  • Apple TV 3 x 1
  • MicroUSB連接線 x 1
  • MAC或Windows個人電腦 x 1

軟體工具
  • Apple iPhone 設定工具程式 (MAC版或Windows版)
  • Apple TV設定描述檔壓縮檔 (下載點,內有.mobileconfig檔)

步驟
  1. 安裝Apple iPhone設定工具程式,並開啟執行程式。
  2. 解壓縮Apple TV設定描述檔壓縮檔後,內有appletv-fix.mobileconfig檔案。
  3. 點選 iPhone設定工具程式左邊列表「設定描述檔」選項,將解壓縮後取得的appletv-fix.mobileconfig拖拉至右邊的視窗中。

  4. iPhone設定工具程式
  5. 接上Apple TV 3電源,先等待電源指示燈從間隔閃爍狀態轉變為恆亮(長亮)狀態。
  6. 將MicroUSB連接線接上Apple TV 3 與個人電腦。
  7. 當iPhone設定工具程式左邊出現Apple TV裝置後,點選 appletv-fix設定描述檔旁的「安裝」按鈕,將描述檔安裝到Apple TV中。
  8. 移除 USB 連接線、關閉Apple TV電源。重新將Apple TV接上電視。
  9. Apple TV開機後,再設定檢查DNS設定。(設定>一般>網路>設定Wi-Fi>手動設定TCP/IP將DNS改為210.129.145.150)
  10. 重新回到Apple TV的預告片選單中,應該就會出現不少新增選項囉~

注意事項

  • 千萬確認Apple TV 3電源燈轉變為恆亮(長亮)狀態後,再插上USB連接線。
  • 若想復原,可執行iPhone設定工具程式,接上Apple TV後將appletv-fix設定描述檔自Apple TV上移除。


參考資料


#