發表文章

目前顯示的是有「工作」標籤的文章

AES encryption/decryption

Encryption openssl enc -e -in original_file -out original_file.aes -aes256 -k password Decryption openssl enc -d -in original_file.aes -out original_file.out -aes256 -k password AES size: original file size + 1, then padding to 16bytes, then add 16 e.g. 1 117 bytes 117 + 1 padding to 16 bytes => 128 bytes 128 bytes + 16 = 144 bytes e.g. 2 127 bytes 127 + 1 padding to 16 bytes => 128 bytes 128 bytes + 16 = 144 bytes e.g. 3 128 bytes 128 + 1 padding to 16 bytes => 144 bytes 144 bytes + 16 = 160 bytes It's irrelevant to the length of password.

Lucene

http://lucene.apache.org/core/3_6_1/demo.html CLASSPATH OK export CLASSPATH=/home/mac/xxxx/xxx/xxx.jar:/home/mac/yyyy/yyy/yyy.jar export CLASSPATH=/home/mac/xxxx/xxx/*:/home/mac/yyyy/yyy/* Not OK export CLASSPATH=/home/mac/xxxx/xxx/*.jar:/home/mac/yyyy/yyy/*.jar export CLASSPATH=/home/mac/xxxx/xxx/:/home/mac/yyyy/yyy/ http://lucene.apache.org/core/3_6_1/demo2.html Need to detect doc language and change to use correct analyzer. Create Index open an directory to put index files (dir) new an Analyzer (analyzer) new an IndexWriterConfig (iwc) do some settings on IndexWriterConfig use dir and iwc to new a IndexWriter (writer) add documents new a Document (doc) add several fields new a Field (pathField) Field pathField = new Field("path", file.getPath(), Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS); pathField.setIndexOptions(IndexOptions.DOCS_ONLY); doc.add(pathField); new a NumericField (modifiedField) NumericField modifiedField =...

Send SMS

圖片
現在是個手機門號比人頭還多的年代. 簡訊幾乎是每個人都有"能力"收的一個媒介. 如果service有狀況, 用簡訊通知是最有效的! 之前在survey transcribe service時, 找到了一個叫 twilio 的網站. 它提供的服務可多了, 可以用程式打電話給使用者(1), 然後再唸一段文字給使用者聽(2), 可以錄下使用者的回話(3), 還可以把使用者的回話轉譯成文字(4). 手機的部份則可以送簡訊(5), 還可以收使用者送來的簡訊(6)當做request, 再另外做對應的事. 可以很簡單地把程式跟電話整合在一起. 價錢看起來不太貴(打電話一分鐘2 cents, 接電話一分鐘1 cent, 每送一個SMS 1cent). 我倒也沒比較過類似服務收費就是了... 註冊的方式很簡單, 只要在它的首頁上點 Try Twilio Free , 填上基本資料就可以使用他們的API了, 還有附送30 USD的credit可供試用. 之後它還會試著吸引你upgrade成正式用戶, 比如說再另外送25 USD的credit. 主要是要吸引你提供信用卡資料就是了... 之前帳號申請就放在那裡, 忘了! 今天剛好有一個場合可以試這個API. 主要是用crontab持續的去偵測目前server的狀況. 如果有需要注意的時候, 它會即時送SMS將當時的狀況送給能夠處理的人, 免得問題擴大. 它有提供各種不同語言的API, 最近都在用python, 所以就用它的python來達成目的. 真是無敵簡單的. 1. 安裝 在ubuntu上只要打sudo apt-get install pip, sudo pip install twilio, 基本上就將必需的python package裝好了. 2. 使用 在coding之前, 有兩個資訊是需要知道的, account id與token. 這兩個值可以在login後的dashboard上看到. 用了它,  twilio  才知道要跟誰收錢. 可以把這兩個值直接寫在程式碼裡, 或者是存成TWILIO_ACCOUND_SID與TWILIO_AUTH_TOKEN這兩個環境變數. 官方文件是建議存成環境變數, 這樣就不用擔心程式碼放到source...

再辦一次US Visa (下)

噹噹! 我面試回來了, 這次面試真是很漫長. 首先, 在 源訊 的網頁上Blanket L-1可以預約的日期真是少之又少, 一喳呼就要排到三月初了. 這對我出發的行程來說實在是太晚了, 所以我就照AIT網頁上面寫的" Expedited Visa Interview Request ", 寫封信去拜託能不能給我一個早一點的預約日期. 結果心誠則靈呀, 隔沒兩天就回信, 提早到下週即可面試. 需要印出他的Email作為證明. 因為L1的預約時間都是早上7:45, 而且特別註明請7:30提前報到. 我這個插隊的更是心驚膽跳, 擔心一個閃失就不讓我進去AIT了. 所以難得早起的我很早就出門, 不過因為塞車加多繞了AIT一圈, 還是大約7:50分才到AIT門口. 首先, 要拿那封印出來的Email當作證明, 拿到面對AIT時左手邊的information desk. 這個地方要到八點整才開, 所以我遲個20分鐘根本沒差, 不知道要我這麼早到作啥. 拿著這個Email跟護照, 裡面的小姐會開一張插隊單, 然後就拿著這張單子越過層層人牆進入AIT了. 進入AIT後, 沒有因為不同的VISA排不同的隊, 還是照原本的隊伍慢慢往前走. 裡面的小弟還是一樣一一檢查DS-160確認單, 大頭照, 兩張匯款單. 第二個小姐會問有沒有改名, 再幫忙把一張快遞單黏在護照後面(這個很討厭, 我現在護照封底就一直黏黏的), 要你簽名. 之後就會到一個小櫃台. 上面有另外兩個小弟, 會根據要辦的不同的Visa, 檢查是否需要的資料都齊全. 結果在這裡我就出包了. 根據 網頁 , 辦L-1 Visa要付150元美金, 合台幣4650元. 但是公司給我的劃撥單, 只有付一般B1/B2要繳的140元美金, 還差310元台幣. 在這裡小弟就給我另外一張已經印好的劃撥單, 要我直接出去對面的郵局繳. 繳回來之後晃晃手上之前寄物的牌子, 門口的警衛就讓我進去繼續我的行程. 直奔剛才挑戰失敗的兩個小弟那裡, 給上補繳的310元劃撥單, 他開始要其它的文件. 第一個就要I-129跟I-797的影本各三份. 我那偉大的米國律師樓幫我準備好裝釘的漂漂亮亮的三份文件讓我委實狼狽, 在一堆排隊的人群中手上又拎著一把雨傘, 要拆呀裝呀的把三份厚達五公分的文件堆中把I-129跟I-797挑出...

再辦一次US Visa (上)

我真是辦US Visa辦到有經驗了, 2005年六月辦第一次B1/B2,  2008年七月辦F1去遊學, 2010年七月辦第二次B1/B2. 現在要來辦挑戰性更高的L-1A. 現在還沒辦, 只是事前的準備工作, 看看要做哪些. AIT網頁對L-1的說明 照標準 申請非移民簽證 的方式, 填DS-160. 列印DS-160確認單, 預約時間. 這個表每次填我都覺得很痛苦, 改成網頁版後也沒減低, 落落長之外, 有時候還沒法存檔, 又要重來. 提供核准的 I-129 收件號碼 I-129 申請書影本 I-797核准通知書影本 ( Sample ) 學歷 工作資歷證明 繳交防範作假行為與識別費, 美金500元. 以美金現金繳納. 之後老婆小孩分開申請, 提出 出生證明 結婚證書 戶籍謄本 公司在美國找的律師事務所幫忙準備了這些東西 (四大份, 超過五公分厚) 一份說明文件, 跟我說明我是申請哪一種Visa, receipt number (WAC-xx-xxx-xxxxx). 以及說明整包文件裡有哪些東西. Original and fully executed Froms G-28 and I-129S Corporation's Letter of Support and Organizational Chart Copy of the Form I-797 L Blanket approval notice with a list of xxx's subsidiaries Copy of xxx's business information together with a copy of xxx's most recent Annual report Copies of your resume, educational documents with evaluation, and passport identification page 另外要我自已準備 Original receipt (郵局的匯款收據, US$150) Valid passport (must be valid for at least six months beyond the intended period ...

挑手機通訊商...

圖片
快要去米國了, 總要做些準備, 因為上次去 Google I/O 2010 的時候, 靠送的那支 EVO 4G 救了一命. 覺得要有一個可以用的smartphone非常重要(只能用voice, 不敢開data不算smartphone). 所以先從挑手機通訊商開始. 第一個, 先挑service provider. 據聞米國分兩大類手機協定. CDMA跟GSM. 先分類一下. GSM: AT&T , T-Mobile CDMA: Sprint , Verizon , MetroPCS, U.S. Cellular iDEN: Nextel 還有一些Mobile Virtual Network Operator(MVNO), 是跟這些大家的租線路. Virgin: Sprint 因為我們家目前只做GSM的手機, 所以目標只能鎖定 AT&T 跟 T-Mobile 了. US band: 850MHz, 1900MHz EU band: 900MHz, 1800MHz 看到 這張表 , 讓我狐疑了起來, 我只聽過UMTS跟HSDPA, 是否代表我只能用 AT&T 的3G? 既然只能選 AT&T 跟 T-Mobile , 兩家都很大. 所以也不用考慮coverage, 只剩價錢考量. 我電話打的不多, 簡訊也打不多, 唯一要的應該是data的量要大. AT&T (450 minutes) Voice: 39.99 200MB Data: 15 2G Data: 25 Unlimited Data: 10 (Must go with unlimited messages) 1000 Messages: 10 Unlimited messages: 20 Total: 69.99 T-Mobile (500 minutes, 1500 minutes is the same price now! ) Talk + Text + Unlimited Data: 79.99 per month (+10 USD to extend to 1000 minutes) Talk + Text + 200MB Data: 59.99 per month Total: 79.99 目前...

app engine datastore benchmark

用 app engine 最難以適應的應該就是 data store 了, 它是基於big table做出來的一種分散式的資料庫. 因為是分散式, 號稱非常scalable. 不過也因為是分散式, 很多在relational database很直覺的功能都不能用. app engine 還有每個request只能執行30秒的限制, 所以一些database更新的行為要分段做, 更增加寫程式的困難度. 寫的時候除了更小心一點, 我還想知道app engine到底寫data store有多慢. (或多快?)

解了一個怪BUG

圖片
昨天解了一個很奇怪的BUG, 這個BUG若沒有各方的經驗, 在昨天那個moment, 水到渠成, 我想應該是誰也解不了.

Meta-xx, 大都會失敗...

遇到一個問題, 自己沒有能力解決, 或是不想投資時間/人力來解決, 就得求助於外力. 而外力有很多來源, 自己又沒有能力做判斷哪一種最好的時候. 最簡單的做法就是統統都接受, 統統都採納. 這, 通常會失敗 .

python怎麼sort dictionary?

為了做一個統計的圖表, 我對python的list操作又熟悉了一點. 這是要用server蒐集到的一堆資料, 做幾張圓餅圖. 那些資料會被統計為"A發生n次, B發生m次, C發生i次, D發生j次", 以此類堆. 可能有數十到數百種, 每個的發生次數不一, 從個位數到幾千幾萬都有可能.

一定要自己踢過一次鐵板才能學會 (二)

圖片
經過一夜的蒐集資料, 看了 Google I/O 的影片, 覺得用 MapReduce 就是正解啦. 用法很簡單 Step 1 Download最新的 MapReduce , 在local自己的appengine程式的地方執行. svn checkout http : //appengine-mapreduce.googlecode.com/svn/trunk/python/src/mapreduce Step 2 修改app.yaml, 固定都是加上下列這段code. - url: /mapreduce(/.*)? script: mapreduce/main.py login: admin Step 3 新增一個mapreduce.yaml檔 mapreduce: - name: Count the number of entities mapper: input_reader: mapreduce.input_readers.DatastoreInputReader handler: jobs.process params: - name: entity_kind default: main.Report 第一個name, 就是之後會顯示在mapreduce的網頁介面上的job name. input_reader, 目前有四種reader可以選, 詳情可見 這裡 . 主要是從DataStore裡抓, 或是從BlobStore裡抓, 或是從zip檔裡抓資料. handler, 指定之後會被MapReduce call的function. 這裡有點tricky, 文件寫得不是很清楚, 查了MapReduce的source才知道要填什麼. 簡單的說它可以吃三四種格式, 會試著用不同的方法去找到對應的python檔, class定義跟function定義. 最簡單的方法就是"file.function". 像這裡就是有一個叫jobs.py的檔, 裡面有一個process(). 之後MapReduce就會一直重覆地呼叫這個function. param, 這裡可以指定一些參數, 最重要的是entity_kind這個欄位, 這裡指定了預設值是main.py裡定義的R...

一定要自己踢過一次鐵板才能學會 (一)

在公司的一個appengine程式, 終於蒐集了一小筆資料(不到一千筆), 現在想對這些資料做些統計, 再用Google Chart API顯示出來. 可以預期等到這個程式正式上線, 資料是幾十幾百萬來計算的時候, 這個統計方法一定會有問題, 不過我還沒什麼想法, 現在一開始是這麼做的.

interview

最近畢業季, 一口氣interview了不少台大, 交大, 台科大畢業的新鮮人. 雖然有些不是根正苗紅的資訊相關科系畢業, 但是平均來說水準堪憂. 我已經搞不懂現在的資訊系在教什麼了, 最基本資料結構, 演算法都沒什麼概念. 寫個sort也寫得零 零落落. 別人可以說我不用會那麼多, 只要會用library就可以了. 但是身為相關科系的畢業生也不知道裡面的原理跟門道就說不過去了. 程式語言也是, 現在很多學生可能在大學的六年就只接觸Java. 其實會Java很好, 但是不夠底層, 它把太多 CPU特性包裝起來, 寫程式的時候接觸不到. 習慣後以為這就是電腦科學的全部, 無法寫系統程式. 如果C也不會, 那其它像是Lisp, Scheme, Prolog這些語言應該更是沒有概念. 會不會寫這些語言不是重點, 而是這些語言背後代表的想法. 如果從來沒有接觸過, 就會缺少一種把問題抽象化的可能想法. 那麼在解決問題的時候就可能是用硬幹的, 而不是一個優雅的解法. 面試這些人的感覺是, 大家的興趣都很廣, 通識修了不少, 自己本科的東西修的不多. 我考的題目他們在考研究所的時候一定都會, 但是當場就是寫不出來, 代表這些東西曾經是用背的, 而不是理解後又常常用到. 所以我猜本科的的課程的作業或是Project又不是太難, 所以底子不深. 再面試一輪就要做決定了, 再看看有沒有讓人驚艷的吧...

vim的search

原來我錯的離譜! 在用vi的經驗中, 經常會覺得很奇怪, search有時按n會是往上跳, 有時是往下跳. 今天終於真相大白了, 原來一切都是我一廂情願. 我在vi裡經常是用#這個鍵來search同一份文件裡目前focus到的這個字. 我預期它的結果跟我在command mode下按/, 再打那個字一樣. 就在剛才想要追根究柢一下, 原來#這個鍵本來就是往上查目前focus的字, 而*才是往下查. 我用了這麼多年vi, 一直把它用錯了!

GMail要爆了...

圖片
來了快兩年的部門, 這裡寄信如流水. cc來cc去. 不必要的夾檔跟收信人一堆. 差不多半年, 我的GMail就要爆了... 酷吧, 我想看到這個訊息的人應該不多吧? 我整理了幾次, 試著把有大夾檔的信砍一砍. 不過對於7.xG的信來說, 一次砍個幾十幾百MB好像沒什麼用, 所以我最後決定等到真的爆掉的那一天, 我就要花錢買容量了...

杯莫停

圖片
上星期快進快出了舊金山一趟, 除了公事之外, 幾乎沒有多餘的時間去東看看西看看. 原本想去米國買嬰兒車跟DV也因此失敗. 最多就是在機場免稅店逛了逛. 剛好叔叔要我幫他買瓶酒, 要Hennessy, 又要比XO更高級的. 就在網路上查了查. 原來在VSOP->XO上還有一級, 叫Paradis, 台灣叫"軒尼詩杯莫停". 拷, 有夠土的名字. 在舊金山機場裡的免稅店, 一瓶535美金, 依目前匯率來算, 合台幣17491元. 最後回台灣買, 一瓶14400元.

我第一個Android程式上架了...

上星期逛到一個網站, aNobii , 好像已經出現很久了, 我現在才發現. 它是個藏書網站, 我一發現就愛不釋手, 想把自己所有的書都放上去. 無奈它加書的方式, 是要把ISBN打進去. 一個ISBN有10或13碼兩種, 無論哪種, 我都打很慢. 看著書櫃上的書, 似乎要把它全部打上去要很久. 然後我就想到Android上不是有個Barcode Scanner的程式嗎? 它可以把各種條碼的值掃出來. 那我最近又在玩Android, 何不寫個程式, 用手機先把條碼一個一個掃出來, 存在database裡, 掃完後再一次用GMail寄出來. 然後再到PC上用browser copy & paste, 把書加進去呢? 於是乎就在前兩天, 我的第一個Android程式 aNobii Scanner 在Android Market上架了. 目前已經有兩百多個人在用它了, 評價3.3顆星... :p PS. 之所以要用GMail這種迂迴的方式, 實在是因為aNobii這個網站本身提供的API, 只能讓外面的程式來Query, 而不能由外面來塞書的ISBN號碼進來. 所以只要分成兩段, 前半段手機處理, 後半段還是要用手工去Copy & Paste. 不過還好的是aNobii有提供multiple add的功能, 所以copy & paste只要做一次就好. 還算不是太麻煩.

工程師的幽默...

最近身體微恙有點感冒, 痛苦了將近一個多星期, 好在這次不鐵齒不肯吃藥, 吃個普拿疼日夜錠就讓我舒服很多. 不過就在我快好的時候, 在辦公室出了點笑話... 座位在我隔壁的學弟: 學長你感冒喔 我: 是啊, 不過快好了, 等我把感冒複製給你之後 學弟: ...沈默三秒... 學弟: 你是說剪下吧? 我: 什麼? 學弟: 應該是剪下, 貼上啊, 如果是複製的話, 那你應該還是有感冒 我: ...沈默三秒... 我: OMG!(大喊! 應該很多人聽到這一聲吧) 學弟, 我相信你會是一個很好的工程師的, 繼續保持... good job.

IN-N-OUT

圖片
很久以前T老師就特別說過, 到加州一定要吃IN-N-OUT的漢堡, 這是最好吃的速食漢堡! 這次到了SD當然也不能例外. 今天的行程很簡單, 就是坐飛機. 台灣時間下午六點半的飛機, 飛到LA已經西岸時間下午兩點多, 將近12小時的飛行時間. 出了關之後就去Hertz租車, 這次因為有三個人, 租的車不再是compact size的Ford Focus或是KIA這類的爛車, 而是TOYOTA Camry. 雖然日本車只喜歡Honda, 不過相較Ford跟KIA, Camry也算是很好的選擇了. 從LA到SD在地圖上看起來只有112英哩/180公里, 大約基隆到台中的距離, 似乎只要兩個多小時就可以開到, 中間有開一小段Toll road, 也就是要付錢的公路, 在路上有點小緊張, 到時候不知道怎麼付錢怎麼辦. 後來其實也不過就像是台灣的收費站, 不過價錢貴得多囉, 一台車weekday一次要$5.25, 大約台幣170塊吶. 而且它收錢的方式好像是看有幾個車軸來計價的, 一般小車前後兩排輪子, 算$5.25. 大一點的車子一邊有三個或四個輪子的就更貴一點. 沒多久就到Q公司的地盤了, 一下交流道就看到Q公司的建築群, Q公司真是出乎我想像的大呀. 對打的T公司在他們對面也有一幢大樓. 今晚要住的Holiday Inn Express就在Q公司的建築群的包圍之下, 據說還有Shuttle bus巡迴. 這家Holiday Inn Express應該不少生意都是Q公司給的, check in的時候發的是Priority check-in的卡. 怎麼這次旅行priority這麼高, 一路從艙等, 行李, 貴賓室, 車子, 連旅館都是priority等級的呀. Check in之後, 跟front desk的人問過最近的IN-N-OUT在哪之後, 就驅車前往啦. 說近也不是挺近, 大約5.4 miles, 低頭看看油表才發現這台Camry還挺省油的咧, 開了一百多英哩, 吃不到1/4的油. 那整桶油豈不是可以開個450英哩/700公里以上? 一直聽說IN-N-OUT有 隱藏菜單 , 這次就點來試試. 這次點的是Cheese burger餐, 不過加註Animal style. 那個時候沒網路, 不知道Animal style是午麼東西. 最後拿來一吃...

San Diego

下星期一要前進 San Diego 囉. 去了San Diego之後, 美國西岸大城市由北到南, 西雅圖, 波特蘭, 舊金山, 洛杉磯, 聖地牙哥就都去遍了. 這次會在SD待三天, LA一天. 說也奇怪, LA去了兩次, 上一次就是去年去的, 還待了一個星期. 不過我現在怎麼想也想不起來那裡有什麼, 只記得Santa Monica跟星光大道大概的樣子. 是我的腦力退化還是LA沒有那麼鮮明的地標呢? 喔對了, 我還記得LA地勢很平, 那天晚上看完 Once 之後, 在回文惠家的路上, 那個月亮真的很大很圓, 還有點偏紅. 這次是出差, 時程還安排得很緊湊, 不過還是找了一下SD的資料, 這個地方不知道是太小還是怎樣, 書店裡是找不到單獨一本介紹SD的書. 後來在家裡找到一本"美國西海岸"裡面有提到, 不過整個SD就只有8頁. 裡面沒提到什麼重要的東西, 除了一句話 唯獨7th Ave.以東治安不太好 不知道此行有沒有意思呢!?