Fold All / Expand All

2008年8月30日 星期六

在Excel裡,讓標題固定在上方,捲動時也不會改變位置

另外可參考微軟的「凍結或鎖定欄及列」(Freeze or lock rows and columns)


有時候當資料量很大的時候,我們希望捲軸往下捲之後,仍然能看到該欄的標籤,這樣才知道這欄是什麼東西。

在Excel裡面可以利用凍結窗格(Freeze Panes)來達成。

如上圖中,我們希望將最上方,也就是第一列固定,這時候必須選定要固定的下一列,如圖中是選取A2這一格,然後按凍結窗格。

Office 2007的凍結窗格是在「檢視」,Office 2003則是在「視窗」,下圖是利用Classic Menus模擬2003的樣子。


凍結窗格之後,第一列就固定在上面了,如下圖


這個功能不只可以固定列,也能固定欄,假設我們要讓第一欄排名,在往右捲的時候也不動,那就要在凍結的時候,選取B2這一格。


凍結的效果如下圖


補充說明,凍結不限於一列或一欄,也可以固定超過一列,設定差異就在一開始選取哪一格,其上所有列和其左所有欄都會固定住。

2008年8月24日 星期日

發行情報

コードギアス 反逆のルルーシュR2 O.S.T.
商品番号: VTCL-60071
発売日: 2008/08/27
価格: 2940円(税込)

兩首插入曲
2. Sensibility/ Hitomi
13. Lullaby of M/ Hitomi

コードギアス 反逆のルルーシュR2 O.S.T.2
商品番号: VTCL-60072
発売日: 2008/09/24
価格: 2940円(税込)

きただにひろしR-new
発売日: 2008/08/27
[DVD付初回限定盤] 商品番号: EVCA-8 価格: 3990円(税込)
[通常盤] 商品番号: EVCA-9 価格: 3150円(税込)

ダニー首張個人專輯!

栗林みな実dream link
商品番号: LACA-5802
発売日: 2008/08/27
価格: 3000円(税込)

栗の子第4張專輯

Lianew moon
商品番号: PCCR-90031
発売日: 2008/09/03
価格: 3150円(税込)

美郷あきhere I am
商品番号: LHCA-5091
発売日: 2008/09/10
価格: 3000円(税込)

第3張專輯

2008年8月20日 星期三

first time burning DVD+R DL

話說DVD Double Layer空片的價格逐漸下降,三菱、太誘都掉到單片不需百元,台製更有一片15的選擇!於是今天就跑了一趟建國。

其實現在選擇很多,That's、Mitsubishi、Verbatim、Ritek,最後想說先試燒還是買便宜一點的,就是圖片這個啦。

試用結果,不知道是1670沒刷firmware,還是這片的問題,片子上面雖然標最高8x,而各軟體所顯示的染料編號「CMC MAG-D02-00」,在網路上查詢也是說這能到8x,用Benq1670+ImgBurn 2.4.2.0只能燒2.4x,Pioneer 109+Ashampoo 7也只有2.4x的選項。速度就算啦,一片大約要燒40分鐘左右吧,比較討厭的是燒出來的片子,在PC上可以正常讀取、播放(至少在1670和109這兩台),但是那台Pioneer DVR-720H就完全不吃,而且是一吃就吐出來喔(面板顯示「CAN'T USE」,然後吐出來)。

看來還是一分錢一分貨啊…

後記:
用109+Ashampoo 7燒竟然讀不到!
現在燒同一個iso檔,換1670+Ashampoo 7試試,看究竟是Ashampoo的問題,還是109的問題

再後記:
Pioneer DVR-720H是挑食的傢伙,把片子餵給某伴唱機就可以吃到。
然後1670+Ashampoo 7也燒成功了,雖然109可能只是運氣不好,那張空片比較差,不過我也不想再冒險嘗試了@@
再燒一張JAM Project 2008 Live好了

alice nine.台壓

一口氣出了三張
華想夢想紙
絶景色
Alpha

這代表來台演唱也快了!?

最近日本藝人狂來台灣搶錢啊

pyLyricRetriever 4.3 (joysound supported)

py-lyric-retriever@Google Code

* 新增支援網站:JOYSOUND.com

嘖嘖…一個JOYSOUND就寫了這麼久。

目前JOYSOUND支援只有在pyLyricRetriever有支援,Lyric Retriever@Google App Engine沒有,因為遇到bug了啦…或者您也可以稱它為Open Issue。

Issue 412: urlfetch.fetch() returns incomplete value for 'Set-Cookie' header field.

在Google App Engine上不能用httplib或是urllib2,必須用google提供的urlfetch,而urlfetch其實也夠用了,可以吃https,也能送出自己定義的HTTP header,雖然是有所限制啦(可是doc寫不能改user-agent,我改好像可以耶@@,至少SDK上跑出來是這樣,丟到appspot不知道),沒想到竟然遇到bug。

Issue 412的重點就是使用urlfetch所得到的回應,如果有多行的Set-Cookie,理論上應該要把它合併成一行(這是rfc說的),在SDK上跑的時候是沒問題的,headers['set-cookie']就可以拿到這一行完整的cookie,然而上傳到appspot去跑的時候,拿到的set-cookie是不完整的,我目前遇到的情形是只會剩下最後一個出現的set-cookie,有種應該要append結果變成overwirte的感覺。

總之,目前JOYSOUND是可以拿到的。流程以下簡述:
1. 先向 forwardLogin.htm 送出登入資料,取得其回應的cookie,必定要取得的是JSESSIONID和AlteonP這兩個,其他不用管。
2. 對歌詞網頁送出request (例:_selSongNo_28721_songwords.htm),HTTP header必須有上述兩個cookie的值,這樣才能取得網頁內容,而不是要你登入的畫面。
3. 找到歌詞網頁中的viewLyrics.swf?sd=,後面那個sd的值抓出來。
4. 對 /flashservices/gateway 送出 application/x-amf request,要注意的是POST data內有non-ascii字元,不過那些值是固定的,所以寫死就好,唯一要變動的是sData值。
5. 拿到一長串的回應,也是含non-ascii字元,稍做parsing即可,編碼為UTF-8。

所以總共會有3個request出去,不過測試時,所需時間比歌詞ナビ少(種花電信)。

後記:
Google App Engine的bug已修復,目前Lyric Retriever@GAE可以取得JOYSOUND.com的歌詞

2008年8月18日 星期一

joysound.com前期分析

比想像中的還要討厭…一整個麻煩。

首先,歌詞網頁的網址,和實際取得歌詞所使用的sData值,不知道是有函式轉換,還是另外在資料庫裡面一對一,總之目前是一定要讀取到歌詞網頁後,拿到sData值才能拿到歌詞,而歌詞網頁必須有登入才可以存取。

取得歌詞算是比較簡單,只要有sData值,餵到HTTPConnection的request(),把header和parameters填一填就可以拿到,不需要Cookie。

所以parsing拿回來的資料不算的話,討厭的地方剩下登入取得Cookie,而登入竟然還是跑HTTPS的耶!而且form送出去的資料竟然有三千多bytes,有沒有搞錯啊,雖然很有可能只有某些是必填欄位,但是看到就累了,懶得一個個試。

先休息一下,待會再戰

Stealing the Network: How to Own a Continent

書中的Continent是指Africa。相較於這個系列的第一本How to Own the Box是一篇篇分開的故事,這回Stealing the Continent將每篇故事做了關聯,全部的人在知情或不知情的狀況下,協助了書中一位自稱「Knuth」的傢伙的計畫,當然這個名字也是刻意安排的,某章的事後調查中就寫到,在網路上搜尋只會找到一堆高德納的資料@@。

話說第5章The Don這邊,因為在玩電話交換機,真的是看不懂…所以跳過這章 ̄▽ ̄||

其他章節則是看到不少熟悉的東西,例如wireless hacking裡的wardriving(of course, NetStumbler)、arpspoof + dnsspoof + self-signed Certificate = Man-In-The-Middle、unchecked user input (this may result SQL injection or remote script execution),另外就是從以前到現在最有用的social engineering在各章都加減出現。

裡面很多句子也非常有趣,像是Fyodor寫的第6章裡用好鄰居無線網路,但是想想還是要過幾個跳板,不然警察找上門的時候,他很可能被懷疑,因為
Sendai suddenly regrets ordering the license plate HACKME for his vehicle. The police might not even notice a more subtle plate such as SYNACK.
車牌掛SYNACK的話就真的超殺。

第7章是h3x再度遇上Dizzy,話說Dizzy真的是衰尾道人,好死不死每次都遇到,上回是因為學校沒有買router的ssh登入模組,被印了一個"I still own your ass";這回則是遇到軟體安裝程式的0-day,被留了一個訊息inavlid command name "WHEN_YOU_READ_THIS_YOU_R_OWNED"。

對hacking有興趣的人推薦去看一看。

2008年8月17日 星期日

新書到

好吧,其實前幾天就到了,不過今天才摸到東西。

這回bk1沒有用紙箱了,不過包裝還是很紮實,基本上書在運送的過程中,毀損機會很小,amazon.jp這點就差多了(請參照之前的文章)



這次三本是
東野 圭吾『容疑者Xの献身』
新海 誠『小説・秒速5センチメートル』
橋本 紡『流れ星が消えないうちに 新潮文庫』



嗯…要先從哪一本開始呢?

This is a feature, not a bug

I don't need ``auto srcoll in Live Capture'' when I am doing HTTP tracing!!!

真的是很奇怪,記得以前的版本沒有這個"功能"啊。目前的Wireshark (version 1.0.2)當原本Auto Scroll in Live Capture關掉,而在畫面上自己手動捲啊捲的時候,「此時」,如果捲到了最下面,Auto Scroll in Live Capture就會自己啟動!!

然後在Preferences裡找不到有關掉這個"功能"的地方。

這就是所謂的「This is a feature, not a bug」嗎!?

P.S. joysound.com似乎比想像中的麻煩一點,第一個是它要登入才能拿到id那一頁,另一個是它竟然用Flash AMF protocol去拿歌詞。

2008年8月1日 星期五

Call FlashGet AddUrlList using Pythoncom

結果還是跳回來Python了@@

上一篇要在.Net環境下嘗試呼叫FlashGet的COM extension,雖然x64, x86的問題解決了,但是AddUrlList(ref object params)卻沒有辦法解決。

Orbit Downloader的downloadList(ref object urls, ref object notes, string referer, string cookie)也是一樣的問題,型別為ref object的,其實是所謂的VARIANT型別,在VBScript因為沒有型別的差異,所以開array,然後把值丟進去,再餵給這些function就可以了,但是在.Net下並沒有VARIANT的型別,所以urls和notes沒有辦法餵。

有人知道解法的話,麻煩通知一下唄。

跳回來Python,之前Pythoncom亂試沒成功,今天在找.Net解法時,又翻到Python那邊的,結果翻個幾頁後,看到解法,剛才試了一下也成功了!

首先,要安裝Python Win32 Extensions,然後開啟PythonWin

執行Makepy utility



FGCatchUrl是FlashGet的COM extension,上面的FDM則是Free Download Manager的。

按下ok之後,會產生一個python檔,檔名很長(79DE8D41-161C-11D3-8B9B-DF77640BA112x0x1x0.py)


畫面上會顯示該python檔的位置,我們接下來要做的事是修改這個檔案。
在「def AddUrlList(self, pList=defaultNamedNotOptArg):」函式裡面,把「16396」這個值改為「pythoncom.VT_VARIANT|pythoncom.VT_ARRAY|pythoncom.VT_BYREF
」,然後就ok了!

以下為呼叫FlashGet的Python code範例:
import win32com.client

flashget = win32com.client.Dispatch('JetCar.Netscape')

referer = "http://comic.ktxp.com/book/0801/1760/18664.html"
urls = [
"http://comiccnc.ktxp.com/comicdata3/h/hgj/01/001.jpg", "KuroShitsuji001",
"http://comiccnc.ktxp.com/comicdata3/h/hgj/01/002.jpg", "KuroShitsuji002",
"http://comiccnc.ktxp.com/comicdata3/h/hgj/01/003.jpg", "KuroShitsuji003",
]

params = [referer] + urls
flashget.AddUrlList(params)


Orbit Downloader也是類似的方法,在產生出來的python檔裡,把downloadList()裡的16392改為pythoncom.VT_VARIANT|pythoncom.VT_ARRAY|pythoncom.VT_BYREF。
import win32com.client

orbit = win32com.client.Dispatch('Orbitmxt.Orbit')

referer = "http://comic.ktxp.com/book/0801/1760/18664.html"
cookie = ""
urls = [
"http://comiccnc.ktxp.com/comicdata3/h/hgj/01/001.jpg",
"http://comiccnc.ktxp.com/comicdata3/h/hgj/01/002.jpg",
"http://comiccnc.ktxp.com/comicdata3/h/hgj/01/003.jpg",
]
notes = [
"KuroShitsuji001",
"KuroShitsuji002",
"KuroShitsuji003",
]

orbit.downloadList(urls, notes, referer, cookie)


Free Download Manager則是
import win32com.client

fdm = win32com.client.Dispatch('WG.WGUrlListReceiver')

referer = "http://comic.ktxp.com/book/0801/1760/18664.html"
cookie = ""
urls = [
"http://comiccnc.ktxp.com/comicdata3/h/hgj/01/001.jpg",
"http://comiccnc.ktxp.com/comicdata3/h/hgj/01/002.jpg",
"http://comiccnc.ktxp.com/comicdata3/h/hgj/01/003.jpg",
]
notes = [
"KuroShitsuji001",
"KuroShitsuji002",
"KuroShitsuji003",
]

fdm.Referer = referer
fdm.Cookies = cookie

for url, note in zip(urls, notes):
fdm.Url = url
fdm.Comment = note
fdm.AddUrlToList()

fdm.ShowAddUrlListDialog()


Net Transport有神秘問題,傳網址進去會說是「未含有合法的URL!」,尚待研究。

Retrieving the COM class factory for component with CLSID {FB5DA724-162B-11D3-8B9B-AA70B4B0B524} failed due to the following error: 80040154.

有用過MangaDowner的應該知道它有個功能是把取得的圖檔網址直接餵給FlashGet下載,這個功能的做法並不難,其實是利用各家downloader的瀏覽器add-on(or you may call it COM extension),例如:「Download All with FlashGet」。

在C#,本來只要將dll import進來,再一句「FGCATCHURLLib.JetCarNetscapeClass flashGet = new FGCATCHURLLib.JetCarNetscapeClass();」就可以利用裡面有的AddUrl功能,然而今天在試的時候卻一直出現標題這個錯誤。

Retrieving the COM class factory for component with CLSID {FB5DA724-162B-11D3-8B9B-AA70B4B0B524} failed due to the following error: 80040154.

其實,這個錯誤出現的原因是作業系統…因為我是用WinXP x64,而這些COM component是win32的。

解決辦法:1)改到x86 Windows上寫這個程式,2)將project設定裡,把platform從Any CPU改成X86。

很多事情都是第1個方法就解決了,不過到現在還是繼續用WinXP x64。

第2個方法,看起來應該很簡單,但是沒想到Visual C# 2008 Express Edition竟然沒有這個選項!!於是現在開發停擺中…

順帶一提,其實程式是可以build也可以publish,只是runtime會產生該錯誤,所以也可以在x64下開發,然後再丟到x86的機器上面去測。
(謎:也太麻煩了吧…又不是在搞cross compiling)