網頁
▼
Friday, December 27, 2013
Tuesday, December 10, 2013
[翻譯] 七個可以幫助你的生存技巧
- 在緊要關頭時需要光源又怕蠟燭被吹熄 ? 拿一個汽水罐割開側邊,向外折開然後將蠟燭放置其中。這可以反射光源並且對蠟燭提供一些保護。
- 如果你在一個沒有乾淨水源的地方,拿一塊布跟兩個容器,將髒水放在一個容器中,然後用布連接髒水容器與空容器,過陣子候你就可以有經過過濾後乾淨的水了,但記得要煮沸。(髒水容器放高點效率會比較好)
- 想花最少的力氣做出烹飪的火源嗎 ? 拿一個空蛋盒,把木炭放進去,闔上他,點燃一個角落,然後開始使用。
- 如果蚊子越咬越兇,可以用常見的家用植物來輕鬆擊退它們。既然你已經生火起來了,將羅勒或迷迭香灑進炭裡,蚊蟲會受不了而遠離這裡。
- 用太陽來微波如何 ?拿一個盒子切出一個框,將其內裡與頂蓋包上錫箔,然後把食物放置其中,面向陽光,給他一些時間。你現在可以享用太陽能炙烤的起司三明治。
- 需要找到正確的方向回家 ? 拿一個小金屬條,像是針,然後跟你的衣服摩擦數次,將它放上漂浮於水上的葉子,針將會指向北方。
- 最後,緊急油燈。拿一塊布揉成一條,拿一個汽水罐倒入約半滿的橄欖油,將布條放入罐中然後點火,你就有一個可以持續數小時的臨時油燈。
Friday, November 15, 2013
[node.js] express.js add ip / path filter middleware
前陣子因為有一個不同目錄限制不同IP可以連線的需求,所以研究了一下寫出這個小功能來,在這邊分享一下,因為沒啥空就懶得寫英文版了,希望老外看得懂。
基本上就是做到可以指定多個目錄分別對多個IP做到限制連線的功能,如何設定多目錄可以看config.js那段
寫得不複雜,也還沒加上sub mask 或是 192.168.1.* 之類的功能,等有需要再加吧
懶得打字,收工。
忘記寫了,我是參考這篇"How to Write Middleware for Connect / Express.js"的
基本上就是做到可以指定多個目錄分別對多個IP做到限制連線的功能,如何設定多目錄可以看config.js那段
寫得不複雜,也還沒加上sub mask 或是 192.168.1.* 之類的功能,等有需要再加吧
middleware\ipFilter.js
var config = require('../config'); var enabled = true; module.exports = function(onoff) { enabled = (onoff == 'on') ? true : false; var IParr = config.IPFilter; return function(req, res, next) { if(enabled && IParr.length>0){ for(var index in IParr){ var inArea = false; for(var pa in IParr[index].path){ inArea = (req.path.indexOf(IParr[index].path[pa])>-1)?true:inArea; } if(inArea) { if (IParr[index].ip.indexOf(req.connection.remoteAddress) == -1) { console.log('Banned IP from '+req.connection.remoteAddress); res.end('Banned'); } } } next(); }else{ next(); } }; };
where you setting Express.js
var express = require('express'); var ipfilter = require('./middleware/ipFilter.js'); var app = express(); app.use(ipfilter('on'));
config.js
exports.IPFilter =[ { path:['/static/admin/','home/statistic/'], ip:['127.0.0.1','192.168.1.110','123.123.123.123'] }, { path:['/job/'], ip:['1.1.1.1','127.0.0.1','192.168.11.1'] } ];
懶得打字,收工。
忘記寫了,我是參考這篇"How to Write Middleware for Connect / Express.js"的
Sunday, November 10, 2013
柯文哲影片蒐集,更新至2013/12/21
update to 2013/12/21
最近開始對柯文哲醫生有興趣,看了不少他的言論之後,發現柯文哲真的聰慧、獨特、真誠、充滿熱情,台灣真的需要有這種有能力的人來為台灣做點好事,就如他在新聞看透透內說的"改變台灣,從首都開始",我相當希望這個人可以上到可以做事的位子,改變台灣的社會,所以我想蒐集一些我找到的影片,讓大家更認識柯文哲醫生。
影片順序,我覺得在TED的演講很有意思,可以先看,剩下的按照時間順序排列放。
2013/09/28
[TEDxTaipei 2013] 生死的智慧
Monday, November 4, 2013
[MongoDB] 用aggregate做到大部分Select功能
在MongoDB中,要做到像之前SQL中一樣的查詢,簡單的還可以,複雜的可能就比較要花時間了,研究了一下後,找到MongoDB內有Aggregation Framework可以做到很多想用的操作,SQL to Aggregation Mapping Chart這篇文章中有很多範例了,基本上SQL中的WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, SUM, COUNT等操作,用aggregate都有方法代替,文章中已經有很多範例了,我再多寫幾個有用到的例子,這樣大部分別太複雜的查詢應該都足夠涵蓋了。
其他範例在MongoDB的官方文件範例上都差不多有,我就不重複了,至於要用Join的方式我還沒試過,而更複雜的查詢就要用MapReduce了。
SQL
Mongo
SELECT MAX(price) AS 'max', AVG(price) AS 'avg', MIN(price) AS 'min' FROM dbo.orders WHERE ord_date>='2013/10/1' AND ord_date<'2013/11/1'
db.orders.aggregate([ {$match: { ord_date:{ $gte:new Date('2013/10/1'), $lt:new Date('2013/11/1')}}}, {$group: { _id:null, max:{$max:'$price'}, avg:{$avg:'$price'}, min:{$min:'$price'}}} ])
SELECT TOP 20 cust_id, status, count(1) AS 'count' FROM dbo.orders WHERE ord_date>='2013/10/1' AND ord_date<'2013/11/1' GROUP BY cust_id, status ORDER BY 'count' DESC
db.orders.aggregate([ {$match:{act:act, ord_date:{$gte:new Date('2013/10/1'), $lt:new Date('2013/11/1')}}}, {$group:{ _id:{cust_id:'$cust_id', status:'$status'}, count:{$sum:1}}}, {$sort:{count:-1}}, {$limit:20} ])
SELECT status AS '_id', sum(price) AS 'total' FROM dbo.orders WHERE ord_date>='2013/10/1' AND ord_date<'2013/11/1' GROUP BY status
db.orders.aggregate([ {$match: { ord_date:{$gte:new Date('2013/10/1'), $lt:new Date('2013/11/1')}}}, {$group: {_id: '$status', total: {$sum: '$price'}}} ])
其他範例在MongoDB的官方文件範例上都差不多有,我就不重複了,至於要用Join的方式我還沒試過,而更複雜的查詢就要用MapReduce了。
Friday, November 1, 2013
Mongoose ERROR : connection closed due to parseError
老實說我不太喜歡使用很多packages/plugins,有時候方便是方便,但是常常會帶來莫名的限制與找不出來原因的錯誤,或是要花不少時間去debug,通常一定會遇到的就是不敢升級....有些東西還是自己開發來的穩當,公司的技術還是要掌握在自己手中比較穩。
不過anyway,入境隨俗,既然我也不能決定,就只好用了,這次遇到是node.js的MongoDB套件"Mongoose"出的錯誤,就不提為何要用Mongoose來把原本schema-free的mongoDB搞回要schema了 -_-
錯誤是長這樣的
老實說,這錯誤訊息是很難看懂的,瞎試也很花時間,所以研究了一下,找到了下面這個地方。
在node_modules資料夾中搜尋"mongoReply.parseBody"。
Search "mongoReply.parseBody" in node_modules folder.
將錯誤印出來幫助除錯。
console.log the err to help debug.
收工,終於有比較清楚的錯誤訊息了。
不過anyway,入境隨俗,既然我也不能決定,就只好用了,這次遇到是node.js的MongoDB套件"Mongoose"出的錯誤,就不提為何要用Mongoose來把原本schema-free的mongoDB搞回要schema了 -_-
錯誤是長這樣的
connection closed due to parseError
老實說,這錯誤訊息是很難看懂的,瞎試也很花時間,所以研究了一下,找到了下面這個地方。
在node_modules資料夾中搜尋"mongoReply.parseBody"。
Search "mongoReply.parseBody" in node_modules folder.
將錯誤印出來幫助除錯。
console.log the err to help debug.
收工,終於有比較清楚的錯誤訊息了。
Wednesday, October 16, 2013
[Facebook] Tracking social plugin like button callback
>
↑ Here is the Status Bar ↑system start up....
If you using Facebook Social Plugin , you can like and comment on each page , but you can't calculate how many like, comment, unlike, comment-delete happed on the webpage if you only using Social Plugin , so we need to add something to tracking those events.
如果你有再用Facebook Social Plugin , 你可以在每個頁面上按讚、留言,但是只用Socail Plugin並沒辦法計算有多少讚、留言產生或是取消,所以我們需要加點東西來追蹤這些事件。
Facebook Javascript SDK has a feature called FB.Event.subscribe https://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/ , it can "Attaches an handler to an event and invokes your callback when the event fires." , then we can get that we need.
Facebook Javascript SDK 有個功能叫做 FB.Event.subscribe ,它可以在事件上掛上handler,然後在事件觸發時 callback ,然後我們就可以取得我們要想的東西了。
Monday, October 14, 2013
[node.js] mongodb $inc update using mongoose example
最近在mongoose上卡了不少時間,所以解決之後來寫篇文章記錄一下。
卡的這個指令是$inc , 我是要拿來做counter使用的,看了MongoDB>的說明感覺應該是很簡單的,但是搬到mongoose上就感覺鬼打牆一樣,試了好久才知道怎麼弄,下面就是我的sample code.
要注意的地方有兩個,一個是MODEL.update,一個是options要有{ upsert: true },這樣才能在沒有那筆資料時自動insert進去。
大概就是這樣,對node.js還有這些鬼套件都還很不熟,習慣中。
參考資料:
MongoDB $inc
Mongoose Model.update
卡的這個指令是$inc , 我是要拿來做counter使用的,看了MongoDB>的說明感覺應該是很簡單的,但是搬到mongoose上就感覺鬼打牆一樣,試了好久才知道怎麼弄,下面就是我的sample code.
'use strict'; var mongoose = require('mongoose'); var conn = mongoose.createConnection('mongodb://127.0.0.1:27017/CounterTest'); var CounterSchema = new mongoose.Schema({ itemId : String, like : Number, share : Number, comment : Number }); var Counter = conn.model('Counter', CounterSchema); Counter.update({ itemId : 'test'}, { $inc: { like : 1 }},{ upsert: true }, function(err){ if(err){ console.log('update failed'); process.exit(1); } else{ console.log('update success'); process.exit(0); } });
要注意的地方有兩個,一個是MODEL.update,一個是options要有{ upsert: true },這樣才能在沒有那筆資料時自動insert進去。
大概就是這樣,對node.js還有這些鬼套件都還很不熟,習慣中。
參考資料:
MongoDB $inc
Mongoose Model.update
Thursday, October 10, 2013
[十月十日,天下為公] 會前場地紀錄
公民 1985 行動聯盟於國慶日要舉行的"十月十日,天下為「公」"活動,申請的路權在立法院前,濟南路一段這邊,因為我有報名參加這次活動的志工,所以在前一天晚上(其實是當天凌晨)就先去看看場地。
下面其實沒多少內容,就是簡單的紀錄而已。
Wednesday, October 2, 2013
Monday, September 30, 2013
Node.js 初試
Tuesday, September 24, 2013
[LOL] lolesports.com 疑似遭hack ? (已正常)
今天回家,正想看LOL S3 八強賽的VOD,結果發現ESET跳出警告,看了看好像是lolesports的icon被掛了script injection ?
我把這個favicon.ico丟上virustotal掃完之後,結果只有ESET-NOD32掃出的結果是HTML/ScrInject.B.Gen,不曉得是不是誤判,但是我翻出八月的na.lolesport.com的favicon.ico,確實是長得跟ESET說有毒的不一樣,所以也不是沒有可能有問題,只好跟大家說小心了。
btw看了一下lol論壇,也有人發現了同樣的問題(Virus on LoLesports.com?),加上之前NA/EU的db被hack,還是請大家自求多福吧XDDDD
PS:早上我還沒有看到有問題,晚上ESET才發現有掛馬的,所以感覺可能性不低。
Update:2013/09/25 凌晨ESET更新病毒碼後,重新上去看,已經沒事了,看起很有可能是假警報。
Monday, September 16, 2013
Swiss Tech Utili-Key 6-In-1 六用工具鑰匙
前陣子在網路上看到這個Swiss Tech出的Utili-Key 6-In-1工具鑰匙,感覺是個相當方便的東西,看看價錢也不貴又是終生保固,就買了回來,試了一下,算蠻實用的東西,而且大小就跟鑰匙一樣而已,重量才0.5盎司(14克),多帶一隻完全沒有感覺,所以雖然我的鑰匙圈上本來就有Keyring Size Leatherman工具鉗,我還是把這個Utili-Key掛了上去。
Tuesday, July 9, 2013
[js] Table add / delete column 表格新增刪除欄位
這項功能是之前在做產品比較的時候弄的,原本我想把比較做的人性化一點,後來因為有人要求要照抄,所以就做成這樣了XD
這段程式目的是要將後端產出的json塞進前端固定格式的表格,然後若json長度超過table的row就不去理他,而且要做到不限制欄位增加的數量,還有要可以刪除欄位,最後的結果就是這樣了,主要是參考這篇來寫的,然後我在jsfiddle上寫了範例,就是Alienware 14與Alienware 17的比較。
詳細內容可以看放在 jsfiddle上的範例,下面是demo
這段程式目的是要將後端產出的json塞進前端固定格式的表格,然後若json長度超過table的row就不去理他,而且要做到不限制欄位增加的數量,還有要可以刪除欄位,最後的結果就是這樣了,主要是參考這篇來寫的,然後我在jsfiddle上寫了範例,就是Alienware 14與Alienware 17的比較。
詳細內容可以看放在 jsfiddle上的範例,下面是demo
Friday, June 28, 2013
Motorola Talkabout MS350 Series Radio channel frequencies
Channel | Frequency | Type | Channel | Frequency | Type |
---|---|---|---|---|---|
1 | 462.5625 | GMRS/FRS | 12 | 467.6625 | FRS |
2 | 462.5825 | GMRS/FRS | 13 | 467.6825 | FRS |
3 | 462.6125 | GMRS/FRS | 14 | 467.7125 | FRS |
4 | 462.6325 | GMRS/FRS | 15 | 462.5500 | GMRS |
5 | 462.6625 | GMRS/FRS | 16 | 462.5750 | GMRS |
6 | 462.6825 | GMRS/FRS | 17 | 462.6000 | GMRS |
7 | 462.7125 | GMRS/FRS | 18 | 462.6250 | GMRS |
8 | 467.5625 | FRS | 19 | 462.6500 | GMRS |
9 | 467.5825 | FRS | 20 | 462.6750 | GMRS |
10 | 467.6125 | FRS | 21 | 462.7000 | GMRS |
11 | 467.6325 | FRS | 22 | 462.7250 | GMRS |
for Motorola Talkabout MS350, MS355, MS356 ...etc
Sunday, June 23, 2013
Saturday, June 1, 2013
Monday, May 27, 2013
Wednesday, May 22, 2013
【不能戳的秘密2 國家機器】10分鐘摘要版 - 懶人包
2011年七月,李惠仁導演的紀錄片【不能戳的秘密】,踢爆政府匿禽流感疫情一事,讓大家關注起禽流感話題;七個月後,2012年三月,行政院農委會防檢局召開緊急記者會,首度承認台灣爆發高病原性H5N2禽流感;隔日,農委會防檢局長許天來請辭獲准。八月,農委會副主委王政騰、前防檢局長許天來涉隱匿禽流感疫情,遭監察院彈劾並移送公懲會,兩人各遭降二級改敘處分,而在2012年二月安然下莊的前農委會主委陳武雄則未遭監察院彈劾,他強硬表示,「在我任內到離職期間,都沒有要道歉的部分,至於離職後出現新的事證,那是另一回事。」
事件,持續發展;影片,持續拍攝,而病毒,持續蔓延…
時間到了2013年五月13日,李惠仁導演再戳農委會,隱匿禽流感疫情,他發布了禽流感疫情揭密紀錄片《不能戳的秘密》第2集:國家機器,暴露政府規避媒體監督的表現,並指控官方在2004年至2007年,至少隱匿了十多起疫情。
完整版影片可以在誠品買到實體DVD,公視也有撥出,接下來也會有巡迴撥出,可以實際面對面看影片並提問題,最後巡迴完李惠仁導演將會把完整影片放上網。
這邊先就這個10分鐘摘要版做重點懶人包
- 家畜衛生試驗所會議紀錄中發現隱藏19筆高病原禽流感病毒
- 政府(執政黨)強力為農委會護航
依影片時間序紀錄重點
- 2012/3/4 農委會承認爆發高病原性禽流感隔天,李惠仁接到恐嚇電話,威脅生命安全
- 防檢局接到家畜衛生試驗所檢驗出禽流感病毒後,未立即通報到世界衛生組織(OIE)
- 行政院院長吳敦義、副院長陳冲、秘書長林益世皆不肯接受李惠仁導演訪談
- 農委會主委陳武雄不肯出席會議,讓一個科長撐場面
- 2012/2/1 防檢局長許天來表示疫情要等老闆下台再做決議
- 2012/2/6 剛卸任的農委會主委陳武雄,面對李惠仁導演提問,表示「我不回答你任何問題」
- 2012/10/18 國民黨立院黨團書記長吳育昇發出甲級動員令,全力為農委會護航
- 2012/10/15 國民黨禽流感調查報告一小時即產出,並且與隔天防檢局的檢討報告幾乎一模一樣
- 國民黨禽流感調查報告提出「李惠仁條款」,回頭檢討李惠仁
- 最終在國民黨強力護航下,禽流感調查報告與爭議無疾而終
- 2013/1/29 李惠仁導演二次申告農委會官員隱匿疫情
- 2009/4/6 家畜衛生試驗所會議紀錄中發現隱匿的19筆H5N2病例編號
- 高病原性禽流感病毒親緣性分析圖中:2006年宜蘭0103、2006年台中A474、2007年苗栗0207、2006年彰化A745、2006年台南A494、2006年屏東0102、2005年彰化1203、2007年台南0403、2007年彰化0104、2007年彰化0107、2007年彰化0205,皆與農委會副主委王政騰台南友人養雞場分離出來的2009台南0301禽流感病毒一樣,為高病原病毒
最後附上19筆藏在會議記錄中的H5N2高病原病毒病例編號,資料來源是公視新聞議題中心的【不能戳的秘密】李惠仁再戳農委會 隱匿禽流感疫情報導
Monday, May 13, 2013
Get Youtube / Vimeo 's video ID
前幾天為了一個功能,在研究如何取出youtube的ID,然後取得他的影片縮圖,取得影片縮圖的地方很簡單,youtube有固定格式,只要把id塞進去就好,而取得id的部分,找了一陣子,試了不少方式才整合出下面這個方式。
function parseVideoURL(url) { var retVal = {}; if (url.match(/(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|[a-zA-Z0-9_\-]+\?v=)([^#\&\?\n<>\'\"]*)/)) { retVal.provider = "youtube"; retVal.id = RegExp.$2; } else if (url.match(/vimeo.com\/(\d+)/)) { retVal.provider = "vimeo"; retVal.id = RegExp.$1; } return (retVal); }主要是可以從影片的Url辨認這是 Youtube 或 Vimeo 的影片,然後回傳影片來源與ID,Demo可以看這,未來如果想加別的影片來源也很簡單。
Wednesday, May 1, 2013
使用列舉的描述功能 Using Enum with Description
眾所皆知,在程式中遇到魔術數字是很擾人的,不但降低可讀性,除錯時也增加困擾,所以通常是建議使用一些增加可讀性的方式去取代,例如使用列舉型別(Enumeration)去將這些魔術數字轉變成比較好讀的形式,但是列舉預設只能塞int,雖然可以直接把列舉名稱toString拿來用,但是如果要有特殊符號(如空白)就沒辦法了。
在這時候,我們可以利用Description的屬性去把我們想要的資訊塞進去。
public enum Country { Afghanistan, Albania, Algeria, Andorra, Angola, AntiguaAndBarbuda,//Antigua and Barbuda Argentina }
在這時候,我們可以利用Description的屬性去把我們想要的資訊塞進去。
Monday, April 29, 2013
Twitch 公司的福利
photo from ShootMania
之前寫了 twitter 與 dropbox 的公司福利,原本要繼續寫其他公司的,後來因為比較沒空所以還沒寫,結果有人點播要寫 Twitch 這家出名的網路直播服務公司,於是就來開工了。
Saturday, April 20, 2013
華光殘影
今日趁著華光社區尚未拆掉去給財團賺錢,與同學去吃廖家牛肉麵,走著走著,邊聊邊感嘆,看看這些老房子,看看金華街上滿街的老樹,在未來可能就會消逝無蹤。台灣只知道拆,只知道圖利財團,而不知道怎麼保存,未來的台灣還會是台灣嗎 ? 我不知道...
如同拷秋勤的《北城講古》這首歌所說的一樣,「(台語) 啥物時陣開始,開始尋無古早味;老城門換頭改面,失去了意義;舊車頭毀毀去,新起嘛無咖sui;進步兮城市,毋倘給過去放未記 」。因為華光社區這塊地的地價夠高,所以以前那些歷史因素也都不需要管了,以前答應的安置也都可以當作沒說過,反正先BOT給財團,之後再用各種手段弄掉土地上這些人跟房子,就可以賺大錢了,可賀可喜。
Tuesday, April 16, 2013
設定工作階段逾時 Configure Session Time-out (IIS 7)
今天友人 M 氏問我了一個關於IIS設定的問題,他要設定IIS上的session timeout,但是參考了technet上的教學"設定工作階段逾時 (IIS 7)"卻失敗,因為他主要對php比較熟,所以就來問我了...
Monday, April 15, 2013
twitter 公司的福利
之前寫了一篇DropBox 公司的福利,沒想到還蠻多人看的,所以這次就來翻譯一下twitter這間社群網站公司的福利吧。
Benefits & perks 福利與津貼
- 完整的醫療與牙科保險
- 靈活且慷慨的休假政策
- 在舊金山辦公室提供每日的早餐與午餐
- 401K 儲蓄計畫
- 帶薪的產假與陪產假
- 健身房會費報銷
- 每周在公司有瑜珈與彼拉提斯(pilates)課程
- 通勤方案
- 洗衣與乾洗服務
- Zipcar(洗車服務)折扣
- 無線網路折扣
感覺上好像沒有 DropBox 寫的那麼活潑,不過還是相當不錯的!!
本篇圖片與資料來源都來自 twitter-Benefits & Perks
Friday, April 12, 2013
單位換算機 Unit Converter
前幾天晚上與同學聊天,在繳錢的時候提到這些錢可以換成幾個核四,用google計算機算了之後,發現因為小數點後面的0太多,所以就變成 2.00909091e-9 這樣的顯示方式,有點難以閱讀,於是產生了研究的動機,大概抽了兩天的閒暇時間後,做出來這個單位換算機 Unit Converter,因為剛弄好,所以可能還有點問題,可轉換單位也不多,若對這個單位換算功能有任何意見的話,請麻煩告知我,我會盡力去處理的。
Monday, April 8, 2013
[JS] 依 iframe 內容動態調整高度
Dynamically adjust iFrame height
在公司的網站上發現了一個 js 的小 bug,這個頁面內鑲了 iframe ,但是因為 iframe 內的資料來源不一,所以頁面長度也必須跟著調整,原本的寫法是每兩秒去檢查iframe高度然後調整,但是在某些瀏覽器上會有問題,我後來想了一下,決定改成去抓iframe load event來調整高度,試過之後,code更簡潔,效果看來也更好,跨瀏覽器測試目前也沒問題,所以就先改成這樣用了,如果未來有問題再來調整。code大致如下
document.getElementById('myframe').onload = function() { var ih = document.getElementById('myframe').contentWindow.document.body.scrollHeight; $('#myframe').css('height', (ih+50) + "px"); };
myframe就是那個 iframe 的名稱,我是多加了50px以求美觀,要怎麼運用可以再看個人需求去修改了。
____Update____
結果我很快又回來了,前面那份code因為只會在iframe第一次載入完成時才做動,所以若iframe裡面點連結然後高度改變,就沒辦法再次更新高度,於是我又研究了一下,找出這個改法,將resize事件註冊進每次iframe更新後做動,這樣應該就可以解掉大部分可預見的狀況了,然後也順便改成不需要jquery就可以跑。
var iframe = document.getElementById('myframe'); function resize() { var ih = iframe.contentWindow.document.body.offsetHeight; iframe.style.height = (ih +30) +"px"; } if (iframe.attachEvent) iframe.attachEvent('onload', resize); else iframe.addEventListener('load', resize, false);
因為偷懶我只在chrome , firefox , opera , ie10 上測過,我想大致應該是沒問題了。
Thursday, March 14, 2013
DropBox 公司的福利
picture from techfaster
最近雲端儲存市場,多出了Copy這家來跟DropBox搶生意,正在看的時候,發現DropBox的工作機會裡,福利與津貼那塊寫得相當有趣,於是想說翻一下供大家參考,反正很短XD
前面的介紹、願景啥的我就跳過了
Benefits & perks 福利與津貼
- 可以自己設定自己DropBox的容量
- 免費的早、午、晚餐,還有吃不完的點心與飲料
- 辦公室對面就是舊金山巨人隊的球場
- 真正的彈性工時
- 18天的帶薪休假與11個帶薪節日
- 如果你生病了,只管待在家讓病好起來
- 健身房與通勤補助,在舊金山有DropBox專用交通車可搭
- 401K(美國的退休福利計畫)
- 視力、牙齒、生活與健康的保險
- 參加樂團!!練團室有完整的設備,包含鼓、音控與放大器(AMP)等
- 威士忌星期五
- 遊戲!!星海爭霸、專用的遊戲室、DDR跳舞機(是的,真的機器)、乒乓球、競技場,還有更多
台灣的高科技公司,學學吧XD
Wednesday, March 6, 2013
[python] md5 與數字 hash
python新手上路,寫點東西記錄一下以免自己忘記。
這次剛好有個需求是需要給金流一個流水號,但是由於cassandra設計上沒辦法像mssql有@@IDENTITY這種方便的取識別值方式,所以只好自己想辦法了,原本想說要找zookeeper或是snowflake這些分散式系統取流水號的方式,但是因為時間因素沒辦法研究這些東西,只好先想個方法硬上。
由於spec上的規格是九位的數字,所以研究了一下,決定將key值拿來md5後的hash轉成int,再取九碼出來(原本會是大約38~40位的數字),原則上在短時間內是不會遇到重複的情況,然後只要每次產生數字hash後,先確認cassandra內有沒有這個number hash,沒有的話再使用,有的話就重生一個;由於理論上這個number hash會發生一次重複的時間應該遠比cassandra最終同步的時間來的長,所以會遇到丟出重複流水號的機會可說是微乎其微,在有更好的解法之前這個方式應該可以加減用。
語法很簡單,大概就是這樣
跑起來結果就是這樣,不過下圖測試時我是取十位XD
小小記錄一下心得。
update一下,如果要取一個不到20位的數字,可以使用這個方式,str(uuid.uuid4().get_time())會回傳一個約19位的數字字串,我不曉得他會不會長到20,不過看來是可以用的,而且又不是亂數,剛好符合另一個需求,可賀可喜。
這次剛好有個需求是需要給金流一個流水號,但是由於cassandra設計上沒辦法像mssql有@@IDENTITY這種方便的取識別值方式,所以只好自己想辦法了,原本想說要找zookeeper或是snowflake這些分散式系統取流水號的方式,但是因為時間因素沒辦法研究這些東西,只好先想個方法硬上。
由於spec上的規格是九位的數字,所以研究了一下,決定將key值拿來md5後的hash轉成int,再取九碼出來(原本會是大約38~40位的數字),原則上在短時間內是不會遇到重複的情況,然後只要每次產生數字hash後,先確認cassandra內有沒有這個number hash,沒有的話再使用,有的話就重生一個;由於理論上這個number hash會發生一次重複的時間應該遠比cassandra最終同步的時間來的長,所以會遇到丟出重複流水號的機會可說是微乎其微,在有更好的解法之前這個方式應該可以加減用。
語法很簡單,大概就是這樣
import hashlib def md5(istr): return hashlib.md5(istr).hexdigest() def randNum(istr): return str(int(md5(istr),16))[:9] print md5('test') //098f6bcd4621d373cade4e832627b4f6 print randNum('test') //1270773689
跑起來結果就是這樣,不過下圖測試時我是取十位XD
小小記錄一下心得。
update一下,如果要取一個不到20位的數字,可以使用這個方式,str(uuid.uuid4().get_time())會回傳一個約19位的數字字串,我不曉得他會不會長到20,不過看來是可以用的,而且又不是亂數,剛好符合另一個需求,可賀可喜。
a=uuid.uuid4() print(a) //38015b71-d95a-4bd4-a1d2-f1d30bb165d2 print str(a.get_time())[:20] //852545210989763441
Friday, March 1, 2013
Python on Visual Studio
最近換了新公司,主要需要用Python開發,所以需要將開發環境建起來,之前寫C#,IDE一直是用Visual Studio,但是Python要用什麼呢 ? 因為我記性不好,指令背不起來,所以蠻需要開發工具的intellisense協助,在網路上找了一下大家的推薦,Python IDE@wikipedia 、 What IDE to use for Python? 這兩個連結內都介紹了不少,我同事分別是用 vim 與 PyCharm 來開發,原本我也打算用PyCharm,後來發現要錢,所以最後決定用這個 Python Tools for Visual Studio ,我安裝的時候是1.5版。
Wednesday, February 27, 2013
Nite-Ize Inka Pen
Thursday, February 7, 2013
Format C: 格式化C槽
Tuesday, February 5, 2013
[東區] 樂樂咖啡 Cafe LakuLaku 大安店
Thursday, January 31, 2013
[長知識] 瑞典鹽醃鯡魚 Surströmming - 世上最臭的食物
picture from Sampling Sweden’s Traditional Surströmming
晚上的時候我常常亂逛,偶而也會看到些神奇的知識,這次發現的是這個瑞典傳統美食-鹽醃鯡魚 Surströmming,會看到這個東西,是因為正在看有個論壇討論攜帶式口糧,討論到各國無法被接受的食物,後來有人舉出了日本的一個測試數據,舉出了各種奇臭無比的食物,還有數據表示臭度,相當有趣。
picture from 図録▽臭い食べ物ランキング
這就是日本所測量的臭度表,其中最威猛的就是這個Surströmming了,臭度高達8070Au!! 舉其他例子,臭鞋的味道大約是120Au,臭豆腐(很臭的那種)的味道是420Au,這樣應該可以想像一下Surströmming臭的程度了。
鹽醃鯡魚Surströmming是有其歷史、位置因素所在,早期中古世紀時,教徒在復活節前的大齋期(40天或更長)是禁止吃肉的(但是可以吃魚),所以附近的北海盛產的鯡魚就是當時重要的蛋白質來源,當時的保鮮技術與交通運輸尚不發達,所以才發展出鹽醃的技術,用以將鯡魚送至歐陸各地,而這個傳統食物至今還是有人不少人會去食用,目前的鹽醃鮭魚罐頭是直接將未處理過的生魚抹鹽折半放入罐頭中,由於未經過加熱消毒處理,所以鯡魚會在罐頭內發酵,由於發酵時會產生氣體,所以常常罐頭都會膨脹起來,在室溫打開時因為壓力的關係也很容易噴出液體,因此許多人在打開罐頭時,除了因為惡臭選擇在室外,也會選擇在水中開罐,避免被噴到汁液讓衣物報銷(據說是洗不掉哪種味道),至於食用方式,在不同地區會有不同的配合食物,下面貼段食用的影片。
這是有配上其他食物,而且除去內臟只剩魚肉配東西來吃,這時候就變成看起來還蠻正常的食物了。
但是下面這個Food For Louis的影片就不一樣了...
他是直接連內臟吃掉半隻魚.....看他吃下去整個臉色都白了,還強忍著不吐,就知道這應該相當痛苦XD
總之,又長了些知識,感謝資訊發達的網了。
Wednesday, January 2, 2013
如何無密碼移除OfficeScan
先前去客戶那邊被安裝了OfficeScan,最近沒需要過去想把他移除,卻因為移除OfficeScan需要輸入密碼而擋在哪邊,要請客戶再問他們mis可能又要花上兩三天時間,所以只好自救了。網路上看到的改register方式試了沒用,還好後來找到了一個很有趣的方式,直接修改移除密碼成我要的,然後就可以移除了,下面簡單分享一下。
步驟如下:
1.找到 OFCSCAN.INI 這個檔案,大約的位置會在 C:\Program Files\Trend Micro\OfficeScan Client\ 下面
2.打開 OFCSCAN.INI ,找到 Uninstall_Pwd= 這行,整行的資訊大概會長的像這樣(我亂打的)
Uninstall_Pwd=!CRYPT!F73A42AA7DE03AA2EE31291C86D856DE0BF96215B6EB9B7E53.找一個MD5產生的網站(google md5 generator就有),將你要用來移除的密碼打進去,取得MD5值
我輸入的是abc,得到的會是
md5("abc") = "900150983cd24fb0d6963f7d28e17f72"4.將第二步找到的那行,改成 Uninstall_Pwd=!CRYPT!111 後面加上你剛剛拿到的MD5,像我就會變成
Uninstall_Pwd=!CRYPT!111900150983cd24fb0d6963f7d28e17f725.存檔,然後移除OfficeScan的時候輸入你剛剛打的password就可以通過了。
自救成功,可賀可喜。