Fold All / Expand All

2015年2月24日 星期二

Universal Media Server

還沒試用,先佔個位置,看 comparison 似乎很厲害

http://www.universalmediaserver.com/
https://github.com/UniversalMediaServer/UniversalMediaServer/

是源自於 PS3 Media Server ,此 project 2012年5月開始,目前2015年2月,最新版本是 5.0.1

和各家 Media Server 比較
Comparison of Media Servers
http://www.universalmediaserver.com/comparison/

裡面比較對象有

  • Universal Media Server
  • PS3 Media Server
  • Serviio
  • KooRaRoo
  • Plex

2015年2月23日 星期一

pyLyricRetriever on Mac OS X 10.10 Yosemite


因為要找 pyLyricRetriever 的 screenshot 竟然找不到,在 Mac OS X 10.10 Yosemite 上終於弄到可以跑,所以先擷一張來記錄

話說 wxPython 裝不起來的原因是,要把安全性調低,才可以裝成功

系統偏好設定 => 安全性與隱私 => 一般 => 允許從以下來源下載的 App,改為「任何來源」後,cocoa py2.7 那包就可以裝成功

PythonCard 的話,用 sudo python setup.py install 可以裝成功

至於打包的話…再研究 pyinstaller 的 spec 檔要如何寫

2015年2月22日 星期日

Kivy 試寫 pyLyricRetriever…中文有問題

只能直接貼 code…竟然是敗在字型設定無法顯示中文、日文…
把目前試到的 code 貼上來,之後 unicode font 有解的話…再看看,或許在 Windows 上是可行的?Mac Yosemite 目前試,指定 font_name 後,會 segmentation fault
import kivy
kivy.require('1.8.0') # replace with your current kivy version !

from kivy.uix.boxlayout import BoxLayout
from kivy.app import App

import lyric_engine

class Lyric(BoxLayout):
    def fetch_lyric(self, args):
        url = self.url_input.text

        self.process_url(url)

    def process_url(self, url):
        # call lyric engine to get lyric
        try:
            lyric = self.get_lyric(url)
            if lyric == None:
                return False
        except IOError:
            # site not available, or bad network connection
            return False

        # show lyric
        self.show_lyric(url, lyric)

    def show_lyric(self, url, lyric):
        self.lyric_result.text = lyric.encode('utf-8')

    def get_lyric(self, url):
        """ choose different processing function to handle """
        engine = lyric_engine.Lyric(url)

        try:
            lyric = engine.get_lyric()
        except IOError:
            raise

        return lyric

class LyricApp(App):

    def build(self):
        return Lyric()

if __name__ == '__main__':
    LyricApp().run()
# lyric.kv
#:kivy 1.8

<Lyric>:
    padding: 10
    spacing: 6
    orientation: 'vertical'
    url_input: url_input
    lyric_result: lyric_result
    BoxLayout:
        height: 30
        size_hint: 1,None
        orientation: 'horizontal'
        url_input: url_input
        TextInput:
            hint_text: 'Paste URL here...'
            multiline: False
            focus: True
            id: url_input
            on_text_validate: root.fetch_lyric(args)
        Button:
            text: 'Fetch'
            size: 100, 60
            size_hint: .3,1
            on_press: root.fetch_lyric(args)
    TextInput:
        readonly: True
        multiline: True
        id: lyric_result
.kv 檔是 Kivy 用來描述 UI 的語言

Python GUI Toolkit 2015 年要用什麼?

用了一個看似會有解決方案的標題,但事實是…

之前的 pyLyricRetriever 停在 4.5 beta 很久了,竟然是2011年的事,lyric engine 都不知道更新多久了

前日因為 PetitLyrics 更新,有來自 googlecode 的回報(這又是另一個超久沒動的地方),想說來處理一下吧

但…第一點,GUI 的 code 竟然沒上 public repository,看來是藏在某台電腦的資料夾下吧…只有一份 4.0 的打包 src,裡面是 wxPython + PythonCard + InnoSetup,在 Windows 下想要包起來,不過 PythonCard 安裝就有問題了,在 Windows 7 64-bit 版本

其實那份 pyLyricRetriever 4.5 在 Windows 7 64-bit 下是跑不起來,缺少某個 dll 檔,似乎是和 .Net framework 舊版本有關

所以想說,要想換個 GUI framework,到了2015年,搜尋一下,好像選擇還是很多,主要還是

以上為老字號的 Qt, wxWidgets binding 系列

新的有什麼呢?

似乎是在各平台,會搭各自的對應,例如 Windows 是 pywin32、Mac 是 PyObjC,最後更新是 2011年

2014-12-20 的 doc,不過搜尋一下,好像不太有人用

看起來蠻活躍,也有 create package 的說明 (http://kivy.org/docs/guide/packaging-windows.html)
不過不是傳統的 GUI widget,不知道想要單純的 text input and show text 的功能如何,還有是否有 menu 功能

在 Mac OS 要直接用 pip 好像裝不起來,先下載官網的 dmg 試試好了

坂本真綾 20周年記念トリビュートアルバム 『REQUEST』

http://www.jvcmusic.co.jp/maaya/20th/

坂本真綾 20周年記念トリビュートアルバム「REQUEST」
2015.4.22 Release
初回限定盤(2CD) VTZL-99 ¥3,900 +tax
通常盤 VTCL-60396 ¥2,800 +tax
20周年を祝して、様々なアーティストが坂本真綾の代表曲や各自の思い入れの深い曲をカヴァーしたトリビュートアルバム。
初回限定盤には、同じ曲順で坂本真綾のオリジナル音源を収録したスペシャルCD「ORIGIN」を同梱。
(オリジナルとカヴァーを同時に楽しめます)

好像這個年紀就有 tribute album 太快了XD

http://www.amazon.co.jp/dp/B00TUBFUB4/
http://www.neowing.co.jp/product/VTZL-99


Disc1「REQUEST」

  1. the band apart「約束はいらない」
  2. KIRINJI「うちゅうひこうしのうた」
  3. 渡辺麻友「トライアングラー」
  4. TRUSTRICK「雨が降る」
  5. SUGIZO feat. IA「バイク」
  6. 鈴木祥子「さいごの果実」
  7. 冨田ラボ feat. Emi Meyer 「光あれ」
  8. Negicco「プラチナ」
  9. 新居昭乃「奇跡の海」
  10. Rasmus Faber feat.Frida「afternoon repose」
  11. 真心ブラザーズ「ポケットを空にして」
通常盤就是各歌手版本,限定盤則是多一片同樣曲順,maaya的原唱

其實裡面認識的歌手不多(逃)


2015年2月21日 星期六

Monosnap - Free Screenshot Tool

https://www.monosnap.com/

也是可以在 Mac App Store 安裝
https://itunes.apple.com/us/app/monosnap/id540348655?mt=12

一樣有 Windows, Chrome extension,還有 iPhone, iPad 版!?

大部分功能和 Skitch 差不多 (https://evernote.com/skitch/)

預設快速鍵是 Command + Option + 6 擷取全螢幕

擷取完預設是跳出內建 editor,可以更改設定為儲存、上傳、以外部編輯器開啟、複製影像至剪貼簿

內建編輯器,基本的 crop, text, arrow, rectangle, circle 都有,顏色選擇也是有幾個預設顏色,可以再開色盤出來挑

然後是 Skitch 先,或者是哪一個 editor ,text 的樣式,都是字有白色外邊

寫字的功能,Skitch 寫完後,還可以移動位置,Monosnap 就不行

不過 Monosnap 有一個 Bubble,其實就是 Arrow + Text 功能,用這個的話,因為可以移動 Arrow,連帶就可以移動 Text

就擷圖和內建編輯器來說,Monosnap 和 Skitch 大致上差不多,就是一些小地方不同

而 Monosnap 讓我驚豔的地方,是它有 Record Video 的功能

在 Mac OS 的 Record Video,除了錄螢幕之外,還可以把 Webcam 畫面、麥克風,都一起錄進來,存檔時,有 AVC in mp4 和 gif 可以選,傷當實用!

到時候來試試 Windows 版是否也如此強大,因為 free 的 video capture 之前在看,好像都沒有很好用的


先前文章

LightShot - screen capture tool

又是個先前文章的集合

話說之前在 Windows 上試了幾套 screen capture tool,到目前還是 PicPick 比較順手,不過 PicPick 新版的邏輯改變了,也還在習慣

今天要來試的是 Mac OS X 上的 screen capture tool

在 Mac OS 其實有內建快速鍵

擷取全螢幕:Command + Shift + 3
擷取自選範圍:Command + Shift + 4
擷取視窗:Command + Shift + 4 再按空白鍵


或者是開啟內建的 Grab 程式

這裡也有一篇詳細的介紹,包括修改快速鍵的預設儲存位置 (快速鍵擷取預設是放到桌面上)

寫到這,應該把標題改為如何在 Mac OS 擷取畫面了…

開始來說標題的 LightShot 吧

在找擷取工具時,一個當然是很有名的 Skitch,被 Evernote 買下的

想說找個別的,就看到了 LightShot

是有上 App Store 的

官網上列出有 Windows 版本、Ubuntu,還有 Chrome extension 耶

之後再試試其他 OS 的版本看看,不過 Mac 版的目前不符需求啊

之前 Alternative to PicPick 都有提到,習慣上是先擷取全螢幕,然後再 crop 出要的部分,因為先把範圍選對實在是很困難,滑鼠都不好弄了,用 MacBook touchpad 更是痛苦啊…

但是 LightShot 就只有擷取範圍的功能,沒有擷取全螢幕

而 editor 功能嘛…in-place 沒有另外跳出視窗,似乎是很厲害,不過會被後面畫面影響啊…

所以結論就是…移除

上傳在 Facebook, Twitter...這種功能真的重要嘛…

下一個來試試 Monosnap

iPad 售價 2015年2月

容量 iPad Air 2
(Wi-Fi)
(+Cellular)
iPad Air iPad mini 3 iPad mini 2
16GB $15900
$19900
$12900
$16900
$12900
$16900
$9400
$13400
32GB X $14400
$18400
X $10900
$14900
64GB $18900
$22900
X $15900
$19900
X
128GB $21900
$25900
X $18900
$22900
X
沒有 retina 的 iPad mini 就不列了
顏色都有銀色和太空灰,2014年款,也就是 iPad Air 2 和 iPad mini 3 多了金色
螢幕解析度都是2048 x 1536,大小為 9.7 吋和 7.9 吋
運算晶片,iPad Air 2 採用了 A8X,其他3款則相同都是 A7
這樣看起來,好像 iPad mini 3 除了多 Touch ID 之外,沒有多 iPad mini 2 什麼東西,但是貴上 3500 元啊…
iPad Air 2 則是有較快的運算晶片、更薄的厚度 (6.1mm,iPad Air 為 7.5mm)、更輕的重量 (437g, iPad Air 469g)
話說 2015年的 Apple 會有特價日嗎?

2015年2月20日 星期五

[Lyric Get] Fix for PetitLyrics

由於實在太過崩潰,一個原本20分鐘就可以收工的東西,竟然花了四天才解決,讓我想大喊「珍惜生命 遠離GAE」

在 Python Requests on Google App Engine 裡,有提到 urllib2 會改 HTTP header 大小寫,所以改用 Requests 來處理,不過事實上,只要是 GAE ,不管用什麼都沒救啊…

先來描述一下這一路走來的問題

  1. 收到回報 PetitLyrics 有問題,花了點時間看,發現問題是要多送 X-CSRF-Toekn header
  2. 改好拿到 token 以及送出多加 token,結果失敗了,檢查實際送出 header ,發現透過 urllib2 會改大小寫,變成 X-Csrf-Token,而 PetitLyrics 大小寫不同,會認不到
  3. 於是改用 Requests 來發,在一般 Python 環境下,可正常拿到回應,但是用 GAE 環境,就會失敗,想要用 Wireshark 來確認 request,卻在 Yosemite 無法開啟
  4. 升級 Wireshark 至 development version 1.99.2 後,可以在 Mac OS X Yosemite 使用,發現在 GAE 環境,換成 Requests 後,依舊大小寫會改變
  5. 嘗試之前的 trick,用 'dummy\r\nX-CSRF-Token: token' 來嘗試,在 local 端的 GAE 可行,但是 deploy 上去仍失敗,發 request 到 header echo page,發現 \r\n 會被換成底線
  6. 打算放棄 GAE,改用之前透過外部 helper 來取得後半段歌詞,但是 helper 用的伺服器,沒有開 curl...
  7. 想到 GAE 也有 PHP 版,裝了 GAE PHP SDK 來試,結果 PHP 版一樣是過特製的 urlfetch,大小寫也會改變
  8. 在 GAE PHP sample 看到神奇的寫法,透過 file_get_contents() 也可以有 custom header (https://cloud.google.com/appengine/docs/php/urlfetch/)
  9. 回到 helper 伺服器,用 file_get_contents() 寫法,成功取得後半段歌詞
結論是,GAE custom header 大小寫都會改掉,在 Python 版或 PHP 版都一樣

所以遇到需要 match case 的,就不能透過 GAE 來發…

耗掉了四天時間,不過學到了 stream_context_create() 搭配 file_get_contents() 的用法

最後 solution 是
  • GAE 端拿到第一段歌詞和 cookie, token
  • 把 id, cookie, token 傳給 helper
  • helper 端沒有 curl,用 file_get_contents() 拿到第二段歌詞
話說…上面少寫到,期間還有申請另一個 python hosting solution,不過寫好之後,一發 request 就被擋下來,說 free solution cannot send request to sites other than whitelist

2015年2月19日 星期四

Python Requests on Google App Engine

一波無限折啊…
原本只是要修個 Petit Lyrics,解法也只要把 CSRF token 抓下來,塞到第2個 request 的 header 就好
但是先是撞到 urllib2 塞 HTTP header 會改大小寫,原本餵 X-CSRF-Toekn,卻會變成 X-Csrf-Token
而這個問題不會修正,原因是 HTTP by spec 其 header 是要不分大小寫,但今天它伺服器端實作就是大小寫不對就不行啊…
於是找了一下,Python 有一套 Requests library,利用另外一個 library urllib3 再包裝成更好用的 API,想說來改用這套吧
結果 code 改好,python 直接跑 ok,放到 GAE 環境下就爆炸,說是 import certs 失敗
再找網路上解法,要在 app.yaml 加上
- name: ssl
  version: latest
好,改完,再跑,還是失敗…
但是這回除了看到 Content-Length header 被 strip 掉,其他沒有什麼 log 啊
那就開 Wireshark 起來看吧…似乎是因為升級到 Yosemite,Wireshark 在 Mac 上開不起來啊………
一個簡單的東西,卻弄到現在還沒收工…

2015年2月8日 星期日

JavaScripting.com - The Database of JavaScript Libraries

其實就是之前的 JSDB.io,只是改了 domain name
JSDB.io - The Database of JavaScript Libraries

Popular 排名

  • Angular.js (100%)
  • React (98%)
  • Foundation (98%)
  • Three.js (98%)
  • Ember (97%)
  • Backbone (96%)

其中 Foundation 第一次聽到耶,看說明是 responsive front-end framework,以 mobile 為主,不支援 IE7, IE8

是該來試試是否真的可以 fast prototype for any kind of device

2015年2月1日 星期日

賀!Novak Djokovic拿下2015年澳網男單冠軍

發現這個標題,用過好幾次了XD
這次也是 Djokovic 第5座澳網男單冠軍、第8座大滿貫男單冠軍
5次澳網的對手分別是
2008: Jo-Wilfried Tsonga
2011: Andy Murray
2012: Rafael Nadal
2013: Andy Murray
2015: Andy Murray
和 Murray 在大滿貫的7次對決,就有3次是澳網決賽,其實還有1次也是澳網,在2012年的四強
http://en.wikipedia.org/wiki/Djokovic%E2%80%93Murray_rivalry
5次的澳網男單冠軍,也追平了開放年代以來,同樣有5次冠軍,而且是連續(1963-1967)的 Roy Emerson
另外一邊的女單,其實是更恐怖的記錄,也就是目前擁有19座女單大滿貫冠軍的 Serena Williams
Serena 拿下的2015年澳網女單冠軍,是生涯第6座,也是目前開放年代擁有澳網女單冠軍數最多的選手
不過 Serena 目前大家最期待的,應該是她能否超越 Steffi Graf 的22座女單冠軍