2010年12月9日 星期四
[開發日誌]windows phone 7 搶頭香送手機喔
不過昨天不小心看到這個http://mag.udn.com/mag/digital/storypage.jsp?f_MAIN_ID=322&f_SUB_ID=2920&f_ART_ID=287505,
所以決定先來摸摸windows phone 搶掛個app 拿手機,
這裡有免費開發包可以下載,
http://create.msdn.com/en-us/home/getting_started
結果第一步就卡關了,
需要vista或7才可以使用。
沒關係,第一步卡關是很正常的事,
趕快去找機器,
拿手機啊!
2010年12月2日 星期四
Wolke加入了第二屆的appWorks
和預演(偷看別人明天正式的要發表的東西),
及實際的Demo那天(爆滿的人,所以坐到地上去),
更加相信在appWorks的輔導下,
肯定能有些成果產生(七樓那些肯定不是傻瓜且堅信下去的人,是我玩下去的決心),
雖然我的idea在interview時,完全被打了回票(明明就還不錯),
雖然我再appWorks見面會重感冒所以沒去(
不過我還是加入了其中的團隊,因為想玩下去也是沒得選的,
聽說淘汰了很多團隊,
不過他們現在應該跑去加入Mr. X 了吧!
看別人好,立刻跟風。
台灣總是一窩蜂搞類似的東西啊!
Groupon 併購 地圖日記,
也加速了這些創投起步了。
web3.0的黃金十年是否就此展開。
2010年11月12日 星期五
「傾聽你的客戶,而非競爭對手」唸三次。約耳趣談軟體 讀書心得
The Joel Test 約耳測試
|
例如:規格、時程、Bug list等,
真是深得我心,
故欲罷不能的把整書給看完,
推薦給有心於精進自身程式撰寫的工程師朋友們。
最後:
「傾聽你的客戶,而非競爭對手」唸三次。
2010年10月22日 星期五
台灣殯葬業現況之我見
安養院裡多的是躺在病床,全身插滿維生器具的老人,有無意識的躺著活著,早就被宣告歸期,卻不會死;但也有走著走著生無任何病痛就離開人世了啊!
棺材裡躺著的是死人不是老人。
但每個人一定會輪到的葬禮,平時卻沒有人願意談論,甚至是很多人的忌諱。
所以,當忽然需要了,因為不了解,很容易成為肥羊。
平心而論,其實是滿辛苦的行業,所以合理的服務,肯定也會有基本合理的費用,但什麼是何理的收費呢?
北部的收費,葬儀社有偍供項目明細,資訊較為透明,也可以依喪家的意見,做項目的調整與更換,不過法事的時間和種類就不像中部那麼長和多種。
中部說是20萬包套,但很多法事佈置、道長、助唸等,都會額外收費,結果理論上生活水平較低的中部,因為不知怎麼的加東加西,反而最後結算時,是比較昂貴的。
不過這也是其來有至,凡人實在是很難了解,這個師公的功力到什麼程度,會不會無法超的渡成功等等....,所以多花錢請多一點人會不會比較好?
就是這麼的玄與不可侵犯的專業,所以,要說台灣下一個世代的明星產業,有千年歷史的殯葬業,怎麼可以沒份。
宅女日記。Bloger Watch:部落格觀察
宅女日記
不像彎彎女王等,
Blog而優則芸,
依舊是身藏不露,
神龍見首不見尾(雖然雖烈的懷疑可能是對自已的某部位有意見,所以就不好思來~)。
不過這也是少數除了文字Blog除了寫小說以外,有能力出書的blog,雖然好像還有庫存,不過依舊吸引了眾多的粉絲,害我後來都懶得留言~
美 顏 賞。Bloger Watch:部落格觀察
美 顏 賞 ♥ 網路相簿美女正妹是點綴這裡的唯一色彩
每個男人都愛正妹,
除了Gay 以外,
而這位Blog客從Blog開始時,
就不斷的抓正妹Blog上的圖,
並且與以歸類,
就這樣子也讓他找出了目前高達900多位的正妹,
原來台灣有那麼多正妹,
這樣子的工作也算是佛心來的,
必竟有很多正妹,
到了人生某一個階段不想玩了,
忽然關站也是常有的事,
而該格主就是做了這份避免在也無人可欣賞正妹身影的保存工作。
這也算是寫Blog的功能性之一,
互相拉抬之餘,
也可以免資料的忽然消失。
2010年10月14日 星期四
小太陽的夢想 Kit Kittredge: An American Girl
故事背景設定在美國的大蕭條時代,
小女孩的中產家庭忽然成為窮人,
天真的小女孩因此擔心受到同儕的取笑,
一開始是賣雞蛋,
然後是搬去貧民區,
等等..
但父親的一句話,
告訴他:「千萬不能被打倒」
一件嚴肅的歷史事件,
生活在裡頭的小女孩,
以天真無邪的觀點,
闡述出新的故事,
當時的遊民、人們的生活等。
當然,因為是闔家觀賞的電影,
所以擔任爆點的小偷,
也太容易被揭穿了。
不過依舊是一部探討美國經濟大蕭條時代的不錯電影。
補充:
1.後來wiki了美國經濟大蕭條,
間接造成了之後的二戰。
因為美國經濟大蕭條,
導致全球的不景氣,
不再採貨幣走"金元"準備,
改採" 生產"準備,
與他國貿易,
採以貨易貨,
撇開之後的暴行不談,
該政策使得二戰前夕的德國,
成為當時歐洲最強盛的國家。
當獨強的國家,與弱小的鄰邦並存時,
二戰的發生可期!
2.西班牙怎麼能在二戰獨善其身,
原來當時西班牙在內戰,
不用說,軸心國和同盟國肯定有將觸角深入交戰的雙方。
2010年10月12日 星期二
為什麼你接Case,竟要我再什麼都還看到之前要先付訂金
這其實是一種必要之惡,
也是因為認識接了一些皮的人,
所以的不得不為吧!
就好像傳統市場的麵攤,通常是先點吃完後,再結帳,但麥當勞要先付錢,
這是為什麼呢?
因為傳統市場的老闆可以在顧客不付錢時,左右攤找一找,再請澳客吃一頓粗飽,
不過麥當勞不行,因為他和我們一樣是斯文人嘛!
所以遇到了幾個皮的人,
我也只好學乖,從善如流了,
尤其是軟體,
一做下去之後,
才跟我說什麼(要轉別方向,或什麼..的籍口的朋友實在是...),
所以麻煩啦!
小朋友先來再說,
感恩!
2010年10月7日 星期四
Google Apps MarketPlace 整理筆記
Google 開放給Web App軟體開發商的平台,
目前主要是以企業用戶為主,
當然是英文介面,
所以目前在台灣根本就沒啥人在用,
相對於Android Market 以一般使用者為主,
名氣相對就小很多,
因為需要經過審核才能上架,
所以App的完整度就強很多了。
2010年10月1日 星期五
2010 Google Devfest Taipei 人爆多 軟體界的大拜拜
Confirmation code / 確認代碼: a3b4cf9a5654
Full name / 全名: Cloud Lin
Email / Email 信箱: wolkesau@gmail.com
Cloud, 您好!
謝謝您對於 Google DevFest 台北場的支持。本封郵件為您的報名確認信。
時間:
2010年10月01日星期五
報到時間:早上八點
活動時間:早上九點至下午五點
地點:
台大醫院國際會議中心 201 室
100台北市中正區徐州路2號
按此取地圖
最新的議程表,講師名單,還有分組議程將會陸續在 Buzz, Plurk, and Twitter 公佈。
更為詳盡的提醒確認信件,會在活動數日前寄發給您。
誠摯邀請您的參與
謝謝,
DevFest 台北團隊
Thanks for your interest in Google DevFest Taipei. This email confirms your registration for the event. Please bring a print out of this email with your confirmation code for faster check-in.
When:
Friday, October 1st, 2010
Registration will begin at 8:00am.
The agenda will run from 9:00am-5:30pm.
Where:
NTUH International Convention Center
No. 2, Xuzhou Road
Zhongzheng District 100
Taipei City
Map It
We’ll be posting more updates to the agenda, speakers, and sessions in the next few days, so follow us on Buzz, Plurk, and Twitter for the latest news.
A more detailed reminder email will also be sent out a few days before the event.
We look forward to seeing you there!
Cheers,
The DevFest Taipei team
2010年9月27日 星期一
小孩VS老人 之 借過妹 之 學習著看YOUTUBE
就是個小孩子和老人家吵嘴,
被拍了下來。
到是影片的留言,
筆戰了起來,
新舊觀念的碰撞
傳統儒家敬老尊閒 VS 美式對自已負責
剛好教師節要到了,
小朋友被無限上鋼的加了很多....,
到底是怎麼個回事,
怎麼開始的?
也沒人去探討,
到是影片中的一句借過,
神龍見首不見尾的妹,
成了主角!
也難怪,
近50年來只要是能在小小營幕裡播放的人物,
不管是好是壞都會是名人,
但YOUTUBE今天打掉了,
過往這層媒體掌控的藩籬,
下一個50年裡,
下一代不同於我們的是,
不會對框框裡的那位,
產生過度的聯想與崇拜。
也就是,
再過個20年,
子女們會覺得,
連臉都沒看到,
也能成為正妹焦點,
紅了起來,
想想,這會不會太瞎了點!
2010年8月27日 星期五
JSON GAE google appengine 吐血的特絑符號處理 換行符號 斜分號 等
吐血的特絑符號處理
1.換行符號:
會導致無法讀取JSON
GAE裡可在用template裡的linebreaksbr換成
2.斜分號 "\"在String裡會判斷錯,同樣導致無法讀取JSON,怪的是不見得一定會出現無法讀取的狀況,在local端做伺服時都正常,但一上線,就是掛~
在GAE裡可用urlencode先轉碼,然後輸出時,再用javascript 的 decodeURI再轉回來。
原以為如此如此就天下太平了,
但是一上線還是掛
return urllib.quote(value)
File "/usr/lib/python2.6/urllib.py", line 1223, in quote
res = map(safe_map.__getitem__, s)
KeyError: u'\xe3'
urlencode轉碼失敗
然後
http://groups.google.com/group/google-appengine-python/browse_thread/thread/70b10f012ae33aed/996ecc33e7444cfc?#996ecc33e7444cfc
http://seewah.blogspot.com/2009/11/django-template-urlencode-unicode.html
上面有解,
不過還是不行,殘念~
結論就是存檔前先擋吧~
今天完全敗給 \^^/
可恥的一天
2010年7月27日 星期二
LifePlant 新式地圖微博之我見
第一次看L到Life Plant,
從它的網址上,
只是覺得好大口氣,
想要做到地球那麼大的市場嗎?
所以還是連上去看了一下,
整體來說呢~
就是一個結合google map所開發的社群,
希望籍由map來讓網友們了解,
你所看到的發言的朋友和他所居住的地方,
了解他的地緣關係,
雖然Wolke我嚴重的懷疑,
此idea可能是工程師,
曾經在網路上認識一個正妹,
等到深入交往準備出遊時,
才發現佳人遠在地球的彼端而扼腕不已,
進而開發出了,
這個可以讓阿宅們先就地緣關係來鎖定目標,
不易再有憾事發生的一個聰明的微博。
好,話唬爛至此,
這麼可能會有因為為了把馬子而發展了出一個功能強大的webapp的這種事情呢?
簡單了解一下整個地圖分享的介面,
可以從地圖中了解每位朋友所在地,
及最新發表的短文,
還滿有趣的。
而註冊帳號方面,
可以直接從yahoo google facebook上的帳號直接做登入和使用,
也是非常的方便,
所以趕快進入,開始你的lifeplant體驗吧!
2010年7月22日 星期四
Wolke WebApp Studio 渥克程式專業網路應用程式開發
主要服務項目Blog 工具Blog 工具開發,主要為在既有的Blog環境下,開發出特定目的的工具。行銷嵌入式工具行銷嵌入式工具具開發,破除以外blog行銷只能是靜態的嵌入圖片,以程式來做新一代的行銷工具。Facebook 臉書應用程式Facebook 臉書應用程式開發,在全球最大的社群網路上,開發您所需要的功能。網路應用程式網站應用程式使用新一代互動式網頁應用網頁開發技術AJAX HTML5 CSS3等,開發出免於安裝更新等的新一代應用程式。WEB端使用者介面開發新一代的硬體設備,多半會有WEB端使用者介面需要開發,交給Wolke來幫您規畫整體UI。
BELIEVE。「相信」是人類最強大的力量。
正好收看到AXN上一個魔術節目「魔幻天使CRISS ANGLE」,
內容是這樣的,
在一個渡假中心的櫃台前,
魔術師遇到了一群來玩的遊客,
但事先並不認識,
魔術師載著一條項鍊,
但所有人事先並不清楚它的功用,
之後,魔術師發給每個人一本筆記,
要求每個人拿一張渡假中心的小冊了,
並自已挑一個字母,大大的寫在筆記本上,
最後,在每個人都不知道對方寫什麼,
以及後面還換位置的情況下,
居然拼出了「believe」這個字,
和項練背後的單字一模一樣。
我能說什麼呢,
唯有「相信」是人類最強大的力量。
2010年7月12日 星期一
剪輯世界現實篇-很殘忍確是事實
上述是某獎金不錯的影片比賽,
也算是格調比較高的。
本章來談談回收吧!
比賽就是這麼不公平,
出動了大陣仗,
花時間後製,
剪輯、配樂、音效、
如果有團隊弄最好,
花了這麼多金錢、時間、人力,
卻不代表回收,
沒得獎的肯定更多,
就算得獎了,
不小心踩到專利地雷,
也是沒完沒了。
那還是有得獎的,
如果比賽以得獎沒得獎2分法來看,
歌唱比賽通常第一名獎金約莫5000元,
優勝也有1000,
都是一人獨得,
怎麼算都比影片比賽來得好。
結論:
別傻了,
朋友,
影片比賽不用專門費空夫找工時錄製,
平常多錄錄素材,
有比賽機會就用的上了,
必竟後製,以得獎不得獎的2分法來說,
只需剪接,再不麻煩別人的情況下,
這樣子算的話,獎金就很可觀了。
2010年7月11日 星期日
心之芳庭「親親我的愛」愛的短片徵選活動。結果出爐之我見。
三樣作品如下:
第三名:
第二名:
第一名:
評審好像非常喜歡短短畫面加文字,
尤其是第三名的朋友,
不知道是不是用powerpoint轉avi出來的。
早知道啊!
輸了輸了。
這個滿遺珠的,
我覺的有拿第一名的實力,
比賽就是這樣。也別氣餒啦!
雖然心中小惡魔告訴我,
整部影片唯一的敗筆就是,
他沒放廣告啊!
如果前述邏輯確實,
那擠進第三名的捧友,
實在超乖的,
在最後一秒什麼資訊都上去囉!
如果這真是評審依據,
我還能說什麼呢!
當然評審有他的專業,
故此篇為瘋言瘋語。
以上言論純屬虛構。
下面是我自已的小作,
粗工濫造,
對比其他朋友的大作,
沒得獎也沒啥好抱怨的。
台茂生日慶 生日創意影片 酸葡萄時間
所以又是酸葡萄的時刻啦!
第一名:
第一名是水準之作,
其他的入圍作品就不丟出來,
自已連去看吧~
http://www.taimall.com.tw/news/event_youtube201007/event_youtube201007.asp
共同點大約就是老闆有交待,
要看到自已的商場吧!
所以第一名的作品依照這個邏緝得獎就很奇怪了,
應該是評審用命換來的吧!
其他...
反正記得要去現場拍一拍,
入圍機會就會高了。
最後:以上純屬虛構,如有電同純屬巧合。
後記:
既然拙作不被喜歡,
就關掉啦!
下次別的比賽還可以再運用。
科~科~
2010年7月8日 星期四
Wolke JQuery Language Tools, Wolke JQuery 語言包工具(JQuery Plugin)
Wolke JQuery Language Tools:
this is design for replace your words it means when your web or blog need to service to different language, you don't have to do the same copy action for your web, just link this in your code and set the words liberty like:window.WL_LANG.words={ welcome:{ en_us:'Welcome', zh_tw:'歡迎您', zh_cn:'欢迎你' }, hi:{ en_us:'Hi', zh_tw:'嗨', zh_cn:'嗨' } }這個是語言替換工具,如果的網站或是Blog有同時需要服務多種語系,置入此工具於你的Blog中,便不需因為其他的語言而做重複性質的工作,僅需定義語言包。例如:
window.WL_LANG.words={ welcome:{ en_us:'Welcome', zh_tw:'歡迎您', zh_cn:'欢迎你' }, hi:{ en_us:'Hi', zh_tw:'嗨', zh_cn:'嗨' } }至於置入js文件如下:
WL_LANG.GL('message') //呼叫換字,參數是原本定義的參數名。 WL_LANG.changeLang('.word'); //一口氣全換,參數同Jquery的selector規則。
2010年7月7日 星期三
輕鬆剪出好影片:素材篇
素材,
絕妙的畫面總是一閃而過的,
這就是為什麼,
相片攝影比賽,
老手總是習慣在既定的方向裡,
先找出時間、地點等條件,
然後等待拍出公式化的好照片。
而新手期待的是不期而遇,
不期而遇的好構圖是千金難買的,
只要你的手按下快門的速度,
和你的相機等級拍的下來。
那打敗老手贏得冠軍,
就非你莫屬了。
因應著全民剪輯時代來臨,
手邊的手機如果拍的下高畫質影片,
何不就用此收集好的畫面呢?
沒事,拿出手機東錄影西錄影,
你的好影像雷達就會慢慢強烈了,
就好像電視台的攝影大哥,
能在記者翻開水溝蓋時,
拍到底下正逃離的大老鼠。
(注意看33秒時)
這種可遇不可求的畫面,
難到老鼠是他偷放的嗎?
這可以說是新聞直覺,
但我相信對於攝影大哥來說,
這就是多年攝影工作培養出的強烈影象電達,
不是直覺的話,
他那裡知道要站在那裡,
才會產生出老鼠跑過的動態畫面呢?
不斷的拍攝、拍攝,
就是抓取到好素材的第一步。
有了好的素材,
日後肯定會有機會用上的,
收集,分類,
並相信這點就是日後產出好影片的第二步。
至於攝影的技巧,
從剪輯的角度來看,
莫過於:
1.不要晃太兇。
2.一錄下去請操過10秒。
3.太安靜時,麻煩秉住呼吸。
台灣非線性剪輯10年史
由Wolke我來聊聊台灣非線性剪緝10年史,
應該不為過吧,
話說2002年,
那時本校斥資購買最新MAC設備,
其中的一套MAC的剪緝軟體Final Cut,
那個時候好像是2.0吧!
現在都叫Final Cut Pro 還出到7.0了。
就是這最套軟體,
開啟Wolke我的剪緝人生,
要知道,在2002年,
一台DV入門級約莫3-4萬台幣,
再加上都是用DV帶來做主要儲存媒介,
DV帶也是一筆開銷,
不像現在都是硬碟式,
可以直接做存檔傳檔播放的動作;
所以那個時候一台跑得動非線性剪緝的電腦,
也是玩DV攝影者重要的一環,
說起DV的演進,
在硬碟式DV和DV帶的中間,
還有個過渡產品,
光碟式DV,
不過這個東西,
在光碟機本身都要被逃汰的當下,
本身也很快就被逃汰了。
之後DV的演進,
相信,
因為人人剪輯的時代來臨,
肯定也會像相機一樣被融入手機裡,
DV這個名詞不復存在,
當然專業性質的還是會有存在的空間
必竟科技始終來自於人類的惰性,
可以少帶一樣,
何樂而不為。
在拉回講非線性剪緝軟體,
Final Cut是單獨在MAC系統上的剪緝軟體,
在Windows上,通常是使用Adobe Premiere,
其他的阿里不達的剪緝軟體就不講了,
因為很多軟體光在讀檔或是轉檔時就會產生錯誤。
也因為種種的限制,
主要是金錢和時間,
因為想要進入好的數位影片剪緝的世界裡,
在當時的入門價,
算一算合一合約莫要個10萬了,
在那個時代或多或少也有些影片比賽,
幾乎有丟作品過去,
就很容易入圍了。
由此可知,
2002年,
當時非線性剪輯,
才正要開始發展,
Wolke我當時應徵的公司,
甚至還有在用線性剪輯的機器的,
你歌我歌系列MV的特效,
應該都是配特效機剪出來的喔!
和非線性剪輯單機作業相比,
線性剪輯佔的空間就大多了。
不過現在應該是都丟進倉庫,
或是當做是"拍東古舍"賣掉了吧!
說到這裡,
看看市面上的影片剪輯比賽,
已經不似當年,
玩票性質居多,
多的是不輸專業的作品,
可以看出下的苦功,
現在2010年的光入圍未得獎作品就可以扒掉2002年當時所有的影片得獎作了吧!
(除了內定的比賽以外,台灣暗盤的比賽多多少少,但最誇張的非屬這個事件)
不知道該感到開心還不是開心,
開心是有很多人下苦功在影片剪輯這塊市場,
不開心的是台灣有多大塊的影片剪輯市場啊!
「剪輯是整個文創活動裡,可以被切割出來的勞力型產業」
2010年7月6日 星期二
Blog Embed Tool: Blog Tamagotchi Blog插件:Blog電子雞 (JQuery Plugin)
可以實現Blog塗鴉者,
讓角色活於Blog的心願。
日後將支援說話、餵食等動作。
連至上傳圖檔頁面,
取個角色名字,
不能和已有的名稱重復,
依照,下列動作傳圖,
目前只有 asleep 和 walk的動作,
日後再支援其他的。
有什麼建議,直接留言吧!
<';code+='script>google.load("jquery", "1");';code+='function OnLoad(){';code+="$.getScript('http://wolkejqueryplugin.appspot.com/jqWL/WL_Tamagotchi.js',function(){TW.Go([INIT,";code+='"'+$('#NAME').val()+'"'+',[ASLEEP,WALK],{';var g={};for (var i in g=["INIT","ASLEEP","WALK_NORTH","WALK_SOUTH","WALK_EAST","WALK_WEST"]){code+='"'+g[i]+'":"'+$('#'+g[i]).val()+'"';if(i<(g.length-1)){code+=',';}};code+='}]);})}google.setOnLoadCallback(OnLoad);';code+='<';code+='/script>';$('#CODE').val(code);});});
Blog Tamagotchi
Character Name:
Picture place:
INIT:
ASLEEP :
WALK
NORTH:
SOUTH:
EAST:
WEST:
copy and paste it
2010年7月1日 星期四
Blog Embed Tool: AutoLink Blog插件:自動新增連結器 (JQuery Plugin)
This is for you to replace word in your article and add the link where you want.
There is a example below.
I add a link to the word '廈門' in original text article,
and '廈門' would has a link.
主要功能為自動找出文章中,
您所設定的關鍵字,
並且自動更換成您所定的連結。
例如以下原為純文字,
但被我將廈門兩個字自動加上了link。
摘自【聯合報╱記者肇瑩如/澎湖報導】 2008.11.11 02:20 am
兩岸海運直航將在「江陳會」簽定協議後40天內生效,澎湖海運業者已急著搶頭香。澎湖中和海運昨天表示,將與大陸廈門國貿集團合作,直航協議一生效,就提出台中、廈門航線申請,若作業順利,最快12月底即可開航,目前單趟票價暫定2500元,航程3.5小時。
中和海運公司董事長陳中和說,「江陳會」4日簽署的兩岸海運直航協議中明定簽定後40天內生效,中和海運看準兩岸海運直航商機,已先一步與排名在中國大陸百強企業中的「廈門國貿集團」洽談合作,雙方並已達成合作共識,待「江陳會」協議生效,兩家公司就將簽約在廈門合資成立航運公司,搶先提出台中、廈門往返航線申請,「為的就是搶兩岸客貨直航的頭香」。
陳中和說,未來台中、廈門航線若獲准,中和海運將於旗下重約4千噸的「今日之星」客輪為營運主力經營客貨運業務,「今日之星」客輪可載客近7百人,最高航速可達42節,從台中航行到廈門約3.5小時,至於票價定價是2500元,為增加競爭力,未來也將搭配各項優惠或套裝遊程,所以實際票價可能會更低。
除中和海運外,日前首航台中、馬公的華達國際海運「海洋拉拉號」客輪也計畫申請從馬公延航廈門的航線,華達公司副總經理盧卓君曾說,暫定台中經馬公到廈門的票價為每人2200元,他們也預計在兩岸開放海運直航後提出申請。
Blog Embed Tool: PictureSignature Blog插件:自動新增Link Blog 程式圖片加簽名(JQuery Plugin)
you can see the example below
or click this Blog Wolke 渥克 [到處亂走]
新時代要有有新的簽名章方法吧~
圖片加簽名章是我用程式的方式加上簽名,
範例可以直接連結
Wolke 渥克 [到處亂走]
寄件者 |
2010年6月27日 星期日
世界盃足球賽之我見
一向是沙漠運動,
原因無他,
沒有名次,
不過在內地,
可就不同了,
世足賽期間,
搭公車時,
吃飯時,
總而言之,
只要有電視,
幾乎都在播足球,
也可以買的到足球彩票,
報紙也有很多全版報導的都是足球,
和台灣許多世足賽特刊上,
走馬看花式的報導,
大陸的就專業很多,
分析著什麼攻略,腳法,走位的許多專業的術語,
肯定大部份的讀者都懂得足球。
足球是地球上最容易參與的運動之一,
一顆球不需要其他配備,
就可以有22個人參與,
不過還得要有廣闊的平地才行,
這可能也是台灣熱不起的原因之一。
台北的平地大都做停車場使用,
或是完全被地主圈住,
也不願無償提供民眾使用,
看看新莊重劃區,
只是用鐵籬笆圍起來,
不做任何生產,
只是養地,
不知道圈了20年了沒有啊!
在內地裡,世足賽是重要的新聞,
連CCTV都有一個頻道一直在播世足,
已經到了舉國狂熱的地步,
回到台灣,
過了這個世足月,
還有幾個人記得足球啊!
By Wolke
2010年6月16日 星期三
雲端的來臨,資料還要放在自已家嗎???
1.智財
2.隱私
智財的問題很多不談。
關於隱私。
youtube上有私人開放權限可設,
就是著眼於隱私的問題,
不過Wolke身為一個軟體工程師,
摸著良心講白的,
不管你再怎麼設定,
除了你看的到以外,
還是有個人看的到,
那就是後台工程師,
他看不到怎麼debug,
所以資料最終會不會流出去,
還是取決於那傢伙的良心,
我不是意有所指,
為什麼網路購物,
客戶資料容易流失,
而導致詐騙的發生,
是因為某些大網購賣家,
採用了某些沒有良心的阿陸仔的平台,
所以導致資料流出,
因為上述跟本就是事實。
當然不是每個阿陸仔都把別人的個人資料,
視為一根細髮,
不過當重利誘惑之下,
一個平台的開發與維護也是耗時,
有得二次獲利,
這也是可以預期的。
必竟他賣資料時,
買的人都是跟他說,
我是要做行銷用的,
所以囉!
總之,真的覺得完全不能放上網的東西,
就別放了。
2010年6月14日 星期一
政府總是用勞健保費繳費單提醒你還活在台灣
七、八、九月的就來。
不管你再怎麼省,
政府總是用勞健保費繳費單提醒你還活在台灣,
尤其是我這個新科獨立工作室軟體工程師,
不管再怎樣省,
永遠有人準備從你身上拿錢。
真不知國外的Open Source工程師,
啃著麵包時,
怎麼說服自已撐下去。
在Mr.6上看到一篇:
他從5年前撰寫Blog開始,
他的生活如何的改變,
從月薪5萬,這個在台灣算是高薪的像伙,
到,
1.不需上班
2.月入20萬
再到,
開一間每月燒30萬的公司,
再????
不知道??
不過這篇精神,
告訴我們錢不重要,
生活要有夢實現最重要。
其本上,
軟體工程師不難找工作,
但還是說服自已,
再繳這一季下去,
Wolke開始調整App撰寫的方向,
大型專案可能就暫時先寫到money Shielder了,
https://moneyshielder.appspot.com/
必竟Web金流系統,
只有一個人,一個月的時間裡,
有這樣的成果,
也算是不錯了,
雖然還是Bug到處爬。
重新調整撰寫 facebook app的策略,
先以能在一周內,
開發完成並release的功能明確的小app為主。
到9月前,
看能不能開發個10個,
紅個1個就行了吧!
哈!上帝啊!
如果再沒有任何 income,
可能很難說服自已,
繼續在家白吃白喝下去囉!
2010年6月11日 星期五
Microsoft 推出 Office Web App 的戰略?
2010年6月8日 星期二
實作教學 google app engine GAE 開發 facebook app FB應用程式
實作教學Facebook Application+JQuery + Google App Engine 初章.1
當時用的是pyfacebook,
也不過才半年多,
去年的那篇,
基本上可以把pyfacebook丟了,
目前在facebook上,
他們直接的針對GAE撰寫了新的SDK
- JavaScript SDK 可以在javascript裡操作FB物件,做為和facebook的連結
- PHP SDK
- Python SDK 丟了pyfacebook,改用這個吧
- iPhone SDK
- Android SDK
參考http://developers.facebook.com/docs/
基本上,這些Server端的SDK,
主要是從cookie中取得你的身份,
並於底層中操作Graph API
這個Graph API其實是包著上述方法,
再從Server get url方式取得Data,
所有你需要的Data幾乎都可以從這個API來做呼叫,
執行效率和bug的錯誤比之前用pyfacebook好很多。
在python SDK 的 github上有一段sample,
你可以試著做看看。
GAE的部份,就不在贅述,基本上只要將facebook.py,example.py,example.html置於你的gae目錄下,上傳後,應該就可以順利執行了。
去年的facebook應用設計,
整個呼叫API的部份不再和PHP綁在一起,
目前書店裡關於facebook開發的書,
老闆頭很痛吧!
執行若有問題再留言討論吧!
2010年6月7日 星期一
2010年5月27日 星期四
2010年4月30日 星期五
Design Pattern 設計模式 Decorator 裝飾者模式
今天來玩玩Decorator
javascript:
cd=console.debug; function Component(base) { this.base=null; try{ this.base=base; }catch(e){} this.name=""; this.value=0; this.getDes=function(){ var s=''; try{ s+=this.base.getDes(); }catch(e){} s+=this.name+',' return s; } this.cost=function(){ var v=0; try{ v+=this.base.cost(); }catch(e){} v+=this.value; return v; } } /*inherit*/ function Espresso(base) { var d=new Component(base); d.name="Espresso"; d.value=100; return d; }; function Mocha(base) { var d=new Component(base); d.name="Mocha"; d.value=10; return d; }; function Soy(base) { var d=new Component(base); d.name="Soy"; d.value=50; return d; }; (function(){ var e= new Espresso(), m= new Mocha(e), a= new Mocha(m), s= new Soy(a); cd(s.cost()); cd(s.getDes()); })();
python:
class Component(): base=None name='' value=0 def __init__(self,base=None): try: self.base=base except: pass def getDes(self): s='' try: s+=self.base.getDes()+',' except: pass s+=self.name return s def cost(self): v=0; try: v+=self.base.value except: pass return v+self.value class Espresso(Component): name='Espresso' value=2000 pass class Soy(Component): name='Soy' value=20 pass class Mocha(Component): name='Mocha' value=200 pass def main(): s=Espresso() s=Mocha(s) s=Mocha(s) s=Soy(s) st=s.getDes() v=s.cost() print st print v if __name__!='__main__': main()
2010年4月29日 星期四
Design Pattern 設計模式 Observer 觀察者模式
最近在開發 webpage app,使用GAE做為Server端,所以得使用到Python和Javascript,當然還有JQuery。
and because I am a person who like to use 'Design Pattern' in my code.
so I start to share how to use 'Design Pattern' in the code today, and hope this series can help someone who is writing webpage app ,too and help me to remenber this.
If you have any problem,it's welcome to comment,thx~
也因為我是個"設計模式"的愛好者,所以開始分享一些我觀察到的一些在javascript和python上可以運用的"設計模式"方法,希望可以提醒我自已記得如何使用,及幫助到需要的人。
若是有任何指教,歡迎留言,謝謝。
the first design pattern , I want to share its 'Observer' pattern:
觀察者模式:
Python:
import sys
import os
################### BASIC CLASS begin ##############
class Subject():
name='Subject'
def __init__(self,name):
self.name=name
#
parms={}
def setTemp(self,parms):
self.parms=parms
self.notify()
#for observer
objs=[]
def register(self,obj):
self.objs.append(obj)
def remove(self,obj):
self.objs.remove(obj)
def notify(self):
for i in self.objs:
print i
i.update(self,self.parms)
class Observer():
name='Observer'
def __init__(self,name):
self.name=name
def update(subject,self,parms):
print 'Subject Name: %s,Observer Name : %s ,Value: %i'%(subject.name,self.name, parms['value'])
pass
def display(self):
pass
################### BASIC CLASS end ##############
class Weather(Subject):
pass
class Board(Observer):
value=0
def update(self,parms):
self.value=parms['value']
self.display()
def display(self):
print self.value
class Combine(Subject,Observer):
pass
def main():
s=Weather('Weather')
b=Combine('Board')
s.register(b)
s.setTemp({'value':99})
if __name__!='__main__':
main()
javascript:
cd=console.debug
function Subject()
{
this.name='Subject';
this.parms={};
this.setTemp=function(parms){
this.parms=parms;
this.notify()
}
//
this.objs=new Array();
this.register=function(obj){
this.objs.push(obj);
}
this.remove=function(obj){
}
this.notify=function(){
for (i in this.objs){
this.objs[i].update(this.parms)
}
}
}
function Observer()
{
this.name='Observer';
this.update=function(parms){
this.display(parms);
}
this.display=function(parms){
cd(parms);
}
}
//set different class over there
function Weather()
{
var father=new Subject();
father.name='Weather';
return father;
}
function Board(){
var father=new Observer();
father.name='Board';
father.display=function(parms){
cd('Value:'+parms['value'])
}
return father;
}
function main()
{
var s=new Weather();
var o=new Board();
s.register(o);
s.setTemp({'value':99})
cd(o);
}
in the javascript, if you want to combine the Subject and Observer class, it also have a way to do it,like:
function Observer()
{
.....
this.dir={name:this.name,display:this.display}//you have to add all class's parms and fucntions pointer in the 'dir' arraylist,also do it in Subject class
}
//after this ,than you can add this class
function Combine()
{
var f1=new Subject();
var f2=new Observer();
var me={};
for (i in f1.dir)
{
me[i]=f1.dir[i];
}
for (i in f2.dir)
{
me[i]=f2.dir[i];
}
return me;
}
function Station()
{
var father =new Combine();
return father;
}
//then finally you get combine class
after create combine class in the javascript, the codes is not easy to read amymore,but for the class seldom have to be Subject and Observer.
so just for requirement.
不過為了實現'結合',程式碼好像不前麼好讀了,通常也很少是觀察者也是主題的,看需求囉。
2010年4月26日 星期一
程式設計者的無知而驕傲「四」之前的程式修改,如果我有時間的話先生
如果我有時間的話先生,是我最近觀察到自已本人在下我,
常常拿來跟測試工程師講的話,
測試工程師用力的幫我找了之前程式的一些問題或建議,
可是我卻只能殘忍的說:「如果我有時間的話」
是的,我真是個壞人,雖然我自認到目前為止的每個程式(期初的不算(汗))都不難改,因為,我可是堅守著對修改關閉,對擴充開放的底限,照理來說不 難改,但我還真沒時間改,因為老大的眼光又轉向了,這就好像船在大海上航行,船長對自已的方向沒把握一樣,船員也只好跟著,左邊轉一下,右邊轉一下。
所以,不好意思啊,阿測,我還真的沒時間改,必竟那不是個小bug啊~~新功能要找時間研究一下,才能加上去的啊(心中的吶喊)!!
老大要我寫別的東西,我就只好轉向看別的東西,不是我不想做啊~~
這是籍口(阿測心中的os)。
如果我有時間的話,還真是個不錯的籍口
程式設計者的無知而驕慠「三」先有再說先生 程式改不動先生
先有再說先生,總是先急著弄出個成品,不考慮之後程式修正的問題
就gadget(google桌面,網頁程式)說好了;
為了要考慮之後的擴充性,
或不得不為的修改,通常會盡量的切割之各個系統。
使其獨立,
MVC 構架是最常用的。
網頁application結構其實分割還滿容易的,
Server端(Model), Client端(View),
Control部份,個人是覺得盡量寫在Client(拖別人系統,決對比拖自已系統好,科科)
但先有再說先生,可以很棒的將其混在一起。
反正他只想先丟出去再說。
所以一個gadget(google桌面),
他用了<iframe> 將整個原在Server端的查詢網頁,
是的,也不是<iframe>不能用,
不過 gadget就已經是設計來成為你的網路桌面上的小程式的這件事情,
好像完全不管他,我完全看不到他的MVC架構在那裡?
這樣子的東西,也不可能在google桌面上縮放啊?
看了整個禮拜不知道在看啥?
(如果我也可以只整個禮拜只搞這個就好了,雜事有夠多的。)
反正先出去再說,
那今天老闆想要gadget上縮放呢?
這也不算強人所難,因為這本來就是google桌面設計的目的,
那你不就立刻倒了。
喔! 不會的! 因為 程式改不動先生(注意:康攢有夠才開的出這一隻)跳出來救你了。
老闆想要修改程式了,
「但這個程式改不動」程式改不動先生說話了。
(當然要說這句話前請先墊墊自已的份量),
其實程式改不動,也是因為你在Case期初時,
完全沒有考慮程式的擴充和修改性這件事。
就這醬出去了,真是營養雞排。
「反正我改不動,不然你找別人好了」程式改不動先生又說話了
(更高段的話,說這句話之前,請先考慮公司有多少專案在你手上,讓老闆投鼠忌器)
通常到這裡,
第一,找替死鬼收尾。
第二,算了。
是。算了機會還滿大的,通常 先有再說 先生 的程式,別人還真的改不動,
因為全都搞在一起了。重新幫他寫一個可能會比較快一點。
這個系列,不小心也寫到了第三篇,才發現,原來我是愛靠B的人(汗),
這些只是我在工作觀察到的,不見得對或錯,
可能在某些壓力下,你也不得不成為某一種先生。
不過請僅守「對修改關閉,對擴充開放的底限」吧
不然很難成為一個被尊敬的程式設計師。
這可能太難了,
那至少不要成為一位被唾棄的程式工人。
程式設計者的無知而驕傲「二」寫程式的態度?哇!台灣水泥工!
其實還滿礙眼的,
在公司其他人眼中(包括老闆)可能也是「米蟲」的角色,
(我朋友Y君說,有次公司的資料庫掛了,總公司派了個工程師來,
他們只覺得他在東摸摸西摸摸而已,不知道他到底在幹嘛)
這就是一個問題,
其實程式寫的好不好,
只有內行的人了解,
(不是加工業等粗工,以量計算,
不像美感雖然每個人都有見解,但至少看出你有沒有用心畫),
所以一個code寫的很爛的人,
1.可以因為加班加的久(加班先生),
2.或是他已經是個老資格先生(寫了八年連物件導向都不了解,還亂解釋,
大言不殘的說這個程式,是物件導向寫的喔(除了你寫的以外,其他都是吧!)
聽到都不敢偷笑,還敢說ajax的東西,還真大有人在),
所以被公司的其他人(包括管理階層)認為他很厲害之類的,
結果一個追求coding的精準及效率,
視多寫一行如罪惡的人,
因為準時下班,
反而被認為不積極,
後來我想了一想,
必竟大部份的老闆眼中,
覺得你留的愈晚,他就愈賺嘛(程式工程師,大部份為責任制,沒有加班費)~
所以也不會管你在幹嘛(他都走了,當然不知道你在幹嘛,只覺的又賺到了)!
(其實在這樣的工作環境中,偷公司的時間就對了, 唉呀~我說的不是A君喔!)
你就一直摸,摸,摸,最好是直接睡公司,明天也不可能遲到喔!
唉~就是因為這樣子,才會造就寫了八年,連物件導向都不懂~
for迴圈也用不好的人~
一段這樣可以解決掉的code
程式磚頭水泥工人,反正都是在混時間而已,這不過就是個工作,
只要電腦前,不斷的打code,讓老闆覺得很忙就行了,
但,就算是磚頭水泥工人,用心做的人,也是不斷的想增進自已的效率啊~
我想,可能是這樣的工作環境,才會養出這樣不重效率的程式工程師,
必竟,有無增進其coding能力,也不會多拿一分錢!
所以才會一直混時間而已~
反過來就要問問自已,為什麼要寫程式,
不就是不想做重複性的工作嗎?
結果反而把這麼有挑戰性的工作(不管你完成與否,一定有更好的解決方法的工作),
搞的和搬水泥一樣,以量計價,不是很可悲嗎?
程式設計者的無知而驕傲「一」別當個程式真理先生
不過就是對一些,這兩年看到的一些現象,疏發的一些想法與感覺;以及告誡自已千萬不要有以下這些行為。
「一」.程式設計,本來就是拿來被人推翻用的,你寫不出來不代表別人寫不出來;就算我寫出來了,那也不代表這個程式,會是完美的,一定有其他更總明的人有著更好的寫法 。
但是沉迷於以解決一時的問題,而寫出來的code,決對、肯定、保證,日後會成為你維護上的最大問題。
這個時候檢視 設計模式
尋找適合的 Deign Pattern 以利日後的維護是重要的。
雖然不想在這裡批評什麼,不過,程式真理先生,在說下肯定語句時,切記,你寫不出來不代表別人寫不出來,程式真理先生今天為搞定一時的問題,而hardcode寫出來的東西,以後一定會成為程式真理先生的扮腳石的。
如果程式真理先生連 Design Pattern,物件導向,都還不清楚是什麼東西,甚至Function都還不太會用的程式真理先生就會落得以打壓別的程式工人,以求在程式界生存的可悲境界。
程式目前講的都是Open Source,如果連 別人的分享 都不懂的讀懂他,而只是不斷的以抄襲來解決一時的問題,真的也不知該怎麼建議程式真理先生了。
所以,千萬別成為一個程式真理先生。
隨時要精進自已的程式功力方為上策。
程式設計師的求生術1.老闆才能放的大絕:「我不管,你給我做出來就對了」
簡單分析一下,這種情況,肯定有大哥(出錢的老大)和小弟(在香港古惑仔電影裡一出場就被秒殺的賤骨頭),
大哥:「我不管,你給我用好就對了」
通常大哥放大絕時,
兩種情況,
一、大哥沒有其他資源提供給小弟測試或支援小弟,所以直接放大絕看能不能逼出什麼,通常只是希望小弟去找出其他資源搞定這一切,當然大哥不可能支援你什麼。
二、小弟的能力有問題(不過大哥通常早就知道,只是可能考慮小弟忠的比他養的小白還乖,免強用之),大哥一時受不了,所以放了大絕,不過大哥通常只是情敘的發洩,沒其他的考量,過了就算了。
是的,這跟程式撰寫有什麼關係,
麻煩,請將老大換成老闆,小弟換成你,是不是一樣啊?
哈~
在這種情況之下,賤骨頭為了保住飯碗的第一步,
google一下嗎?
不,不,不,本篇不討論技術面的,
我想討論一下,都市叢林裡的生存面。
正所謂「忍一時,風平浪靜;退一步,海闊天空。」
當你被罵時,如果只想著「別人家都有請顧問,我們家什麼都沒有」的這種心態,肯定也只會讓心情更幹,是的,
那要怎麼辦呢?
其實也是看你怎麼看待這一份「程式設計」工作,如果對你來說這只是一份工作,下了班之後的你,肯定是不會在去鑽摩程式的東西,問一問離開了工作崗位的你在做什麼吧?
如果沒有在看程式的東西,那不建議你在看下去了。
人生短短數十寒暑,越是不懂利用自已的時間,越是被別人掌控你的時間,因為你真的不知道什麼時候該做什麼,所以需要個值星班長,整頓一下你。
這樣子下去的亟至,就是上班時,一直不斷的看著手中的手錶,因為你的心跟本就不在這邊,對你來說,這只是一份可以領到錢的工作;
但,這對我來說,不是一份工作,這是我的戰場,我人生的睹注,我不可能幫人家打工一輩子,我只是暫時性的需要一份工份一份薪水來支援我的生活,持續我的研究工作,等到機會來了,我會豪不猶豫的。
一定要有這樣的認之啊~ 朋友~
不然,活著很短暫,只是為了混時間,豈不可惜?
遇到被老大放大絕的機會,不是也是讓程式更精進的機會。
再言,如果寫程式對你來說很痛苦,要不要找點其他的事做?
轉行什麼時候都不遲吧!
你佔著毛坑那麼久,拉不出一坨好'屎',
不是只有你煩,大家都痛苦啊~ 唉~施主~及早回頭啊~
數字增加器;number increase embed (JQuery Plugin)
今日流量:100
2009自HIGH機本著不另BLOGGER們著眼於流量所製作之:
現更名為「數字增加器」
貼上下列的code於您的blog中
<script src="http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q"></script> <script>google.load("jquery", "1");function OnLoad(){ $.getScript('http://wolkejqueryplugin.appspot.com/jqWL/WL_CountBar.js',function() {$("#blog_hit_daily").WL_CountBar();//#blog_hit_daily =ID名稱請自行依需求更換,this name by your need })} google.setOnLoadCallback(OnLoad);</script>
2009年的最後一天之年末自high機
輸入文字強迫替換器;input words changer(JQuery Plugin)
老女上司產生器是我去年再看羞昂的書「宅女日記」時,一時有感而發的點子,經過一些修改,再重新推出,且正名為「輸入文字強迫替換器」
以較為符合其功能為名。
This embed is designed for someone who want to change the comment's words,for example you can type '123' in below textbox,itwould be the '456' and put 'abc' would be 'dabce'.
輸入123會換成456,輸入abc會變成fabce,將下面code碼貼入Blog內
<script src="http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q"></script> <script>google.load("jquery", "1");var repJson=[{'ori':'123','rep':'456','prefixes':'','suffixes':''},{'ori':'abc','rep':'abc','prefixes':'d','suffixes':'e'}];//依照規則可以新增新的替換文字 follow the rule ,you can add new words function OnLoad(){$.getScript('http://wolkejqueryplugin.appspot.com/jqWL/WL_autoUpdateWord.js',function(){ $('#content').WL_autoUpdateWords(repJson);//#content請依照自已的id囉! #content by your needed })} google.setOnLoadCallback(OnLoad);</script>
Blogspot的留言模式用的是iframe所以我沒法將功能用於此blogspot的昌言板,但其他的blog平台,應該是沒啥問題。
Blogspot use 'iframe' to be the comment,so can't change the value,but in the other blog service should be OK.
如何將程式碼正確貼於Blog;How to put the codes directly on Blog
syntaxhighlighter
基本上幾乎支援了全部的code,詳細列表參考上面連結
1.原本的作法是要大家download後再將js碼放置自已的host端,
不過看到後面有神人找出更好方法,
就是直接用google code的mirror網址就可以了,
所以,煩將下列網址貼於你的blog HTML中
我的blogspot要貼到最後面,
<link href='http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/SyntaxHighlighter.css' rel='stylesheet' type='text/css'/> <script src='http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/shCore.js' type='text/javascript'/> <script src='http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/shBrushCpp.js' type='text/javascript'/> <script src='http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/shBrushCSharp.js' type='text/javascript'/> <script src='http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/shBrushCss.js' type='text/javascript'/> <script src='http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/shBrushJava.js' type='text/javascript'/> <script src='http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/shBrushJScript.js' type='text/javascript'/> <script src='http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/shBrushSql.js' type='text/javascript'/> <script src='http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/shBrushXml.js' type='text/javascript'/> <script class='javascript'> //<![CDATA[ function FindTagsByName(container, name, Tag) { var elements = document.getElementsByTagName(Tag); for (var i = 0; i < elements.length; i++) { if (elements[i].getAttribute("name") == name) { container.push(elements[i]); } } } var elements = []; FindTagsByName(elements, "code", "pre"); FindTagsByName(elements, "code", "textarea"); for(var i=0; i < elements.length; i++) { if(elements[i].nodeName.toUpperCase() == "TEXTAREA") { var childNode = elements[i].childNodes[0]; var newNode = document.createTextNode(childNode.nodeValue.replace(/<br\s*\/?>/gi,'\n')); elements[i].replaceChild(newNode, childNode); } else if(elements[i].nodeName.toUpperCase() == "PRE") { brs = elements[i].getElementsByTagName("br"); for(var j = 0, brLength = brs.length; j < brLength; j++) { var newNode = document.createTextNode("\n"); elements[i].replaceChild(newNode, brs[0]); } } } //clipboard does not work well, no line breaks // dp.SyntaxHighlighter.ClipboardSwf = //"http://[YOUR HOST]/clipboard.swf"; dp.SyntaxHighlighter.HighlightAll("code"); //]]> </script>
第一個CSS網址,不知為何Blogspot吃不了,所以就直接將CSS碼貼在style裡,就可以吃了。
.dp-highlighter { font-family: "Consolas", "Monaco", "Courier New", Courier, monospace; font-size: 12px; background-color: #E7E5DC; width: 99%; overflow: auto; margin: 18px 0 18px 0 !important; padding-top: 1px; /* adds a little border on top when controls are hidden */ } /* clear styles */ .dp-highlighter ol, .dp-highlighter ol li, .dp-highlighter ol li span { margin: 0; padding: 0; border: none; } .dp-highlighter a, .dp-highlighter a:hover { background: none; border: none; padding: 0; margin: 0; } .dp-highlighter .bar { padding-left: 45px; } .dp-highlighter.collapsed .bar, .dp-highlighter.nogutter .bar { padding-left: 0px; } .dp-highlighter ol { list-style: decimal; /* for ie */ background-color: #fff; margin: 0px 0px 1px 45px !important; /* 1px bottom margin seems to fix occasional Firefox scrolling */ padding: 0px; color: #5C5C5C; } .dp-highlighter.nogutter ol, .dp-highlighter.nogutter ol li { list-style: none !important; margin-left: 0px !important; } .dp-highlighter ol li, .dp-highlighter .columns div { list-style: decimal-leading-zero; /* better look for others, override cascade from OL */ list-style-position: outside !important; border-left: 3px solid #6CE26C; background-color: #F8F8F8; color: #5C5C5C; padding: 0 3px 0 10px !important; margin: 0 !important; line-height: 14px; } .dp-highlighter.nogutter ol li, .dp-highlighter.nogutter .columns div { border: 0; } .dp-highlighter .columns { background-color: #F8F8F8; color: gray; overflow: hidden; width: 100%; } .dp-highlighter .columns div { padding-bottom: 5px; } .dp-highlighter ol li.alt { background-color: #FFF; color: inherit; } .dp-highlighter ol li span { color: black; background-color: inherit; } /* Adjust some properties when collapsed */ .dp-highlighter.collapsed ol { margin: 0px; } .dp-highlighter.collapsed ol li { display: none; } /* Additional modifications when in print-view */ .dp-highlighter.printing { border: none; } .dp-highlighter.printing .tools { display: none !important; } .dp-highlighter.printing li { display: list-item !important; } /* Styles for the tools */ .dp-highlighter .tools { padding: 3px 8px 3px 10px; font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif; color: silver; background-color: #f8f8f8; padding-bottom: 10px; border-left: 3px solid #6CE26C; } .dp-highlighter.nogutter .tools { border-left: 0; } .dp-highlighter.collapsed .tools { border-bottom: 0; } .dp-highlighter .tools a { font-size: 9px; color: #a0a0a0; background-color: inherit; text-decoration: none; margin-right: 10px; } .dp-highlighter .tools a:hover { color: red; background-color: inherit; text-decoration: underline; } /* About dialog styles */ .dp-about { background-color: #fff; color: #333; margin: 0px; padding: 0px; } .dp-about table { width: 100%; height: 100%; font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; } .dp-about td { padding: 10px; vertical-align: top; } .dp-about .copy { border-bottom: 1px solid #ACA899; height: 95%; } .dp-about .title { color: red; background-color: inherit; font-weight: bold; } .dp-about .para { margin: 0 0 4px 0; } .dp-about .footer { background-color: #ECEADB; color: #333; border-top: 1px solid #fff; text-align: right; } .dp-about .close { font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; background-color: #ECEADB; color: #333; width: 60px; height: 22px; } /* Language specific styles */ .dp-highlighter .comment, .dp-highlighter .comments { color: #008200; background-color: inherit; } .dp-highlighter .string { color: blue; background-color: inherit; } .dp-highlighter .keyword { color: #069; font-weight: bold; background-color: inherit; } .dp-highlighter .preprocessor { color: gray; background-color: inherit; }
參考網址:
http://yacoding.blogspot.com/2008/05/how-to-add-syntax-highlight-to-blogger.html
http://developertips.blogspot.com/2007/08/syntaxhighlighter-on-blogger.html
2010年4月23日 星期五
標籤淘氣啪啪走器;tags move naughty embed(JQuery Plugin)
淘氣的送出紐是我去年(2009)於前blog上發佈,
近日有時間,稍微做了一點更正,
因為不只可以用於button標籤上,
也可以用於其他標籤,
所以更正名稱為「標籤淘氣啪啪走」。
主要還是用JQuery所撰寫,
有興趣的朋友可放在自已的Blog上,
讓某個Tag一直跑還滿有趣的。
tags move naughty embed designed for elements on the blog , you let it move naughty, I think it`s interesting.
直接將下列code碼,置入您的Blog中就可以了
just put the code into your blog
<script src="http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q"> </script> <script>google.load("jquery", "1");function OnLoad(){ var strList={'felling':['ha','hi','h~','gi','gg','bb'],'word':['wait','give me a second']};//參數strList的felling和word的值可以做更換;you can change the parameter 'strList' for example: ,例如:strList={'felling':['嗨','yes','h~','gi','gg','bb'],'word':['等一下','give me a second']}; $.getScript('http://wolkejqueryplugin.appspot.com/jqWL/WL_DoNaughty.js',function(){ $('#comments').WL_DoNaughty(strList);//#comments為id名稱,請自行更換您所指定的物件;#comments is the object's name by your needed })};google.setOnLoadCallback(OnLoad); </script>
2010年4月8日 星期四
實作教學Facebook Application+JQuery + Google App Engine 初章.1
想要研究一下這一塊,發現中文網頁,竟然沒什麼相關資料,
可能因為是阿共仔屏蔽了Facebook吧!!
那好,我就把我目前就研究到此的作法和心得寫一寫,
以免後進走太多冤妄路,
想要撰寫我標題所說的Facebook +JQuery+ GAE
你必需具備:
- HTML基礎
- Python基礎
- Google帳號和已認證的可用的GAE帳號
- GAE的架構
- Facebook的架構
- FBML,FBJS的撰寫
上述可參考上官林傑的 Google應用服務引擎開發實戰及這邊可參考 賽大的 Facebook與funP應用程式設計
http://www.books.com.tw/exep/prod/booksfile.php?item=0010443092
http://www.books.com.tw/exep/prod/booksfile.php?item=0010445951
PS:這本用的是Facebook自行開發的PHP API,和我們要用的pyfacebook不同,
不過除了部份API不支援,其實大部份都是相通的,盡請安心服用。
Javascript基礎(初章暫不需)
Javascript書很多,本人推薦 JavaScript私房書
http://www.books.com.tw/exep/prod/booksfile.php?item=0010294368
JQuery基礎(初章暫不需)
我找不到覺得優的書,所以我都只直看網站的turtuial,不過歡迎大家推薦一下
IP分享器映射http port至你的電腦
各家分享器做法不同,請參考你的說明書
ok 重點來了..
本初章先將焦點放在如何在GAE上運行pyfacebook進而開發facebook的application
Pyfacebook基礎,網路神人團所撰寫的pyfacebook 用python撰寫的可以和facebook 溝通的Server端API可供GAE使用開發
pyfacebook:
http://github.com/sciyoshi/pyfacebook/
1.首先將 pyfacebook下載解壓後,存至gae目錄下
2.在pyfacebook目錄裡建置app.yaml
內容如下:
application: whatever
version: 1
runtime: python
api_version: 1
handlers:
- url: .*
script:main.py
主檔main.py
內容如下
# -*- coding: utf-8 -*-
import cgi
import sys, os
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
import facebook
from facebook import FacebookError
FACEBOOK_API_KEY = '你的key' #如何申請請自行參閱,不詳述囉
FACEBOOK_SECRET_KEY = '你的key'
_DEBUG = True
class MainPage(webapp.RequestHandler):
def get(self):
#def post(self):
fb = facebook.Facebook(FACEBOOK_API_KEY, FACEBOOK_SECRET_KEY)
if fb.check_session(self.request) and fb.added:
pass
else:
url = fb.get_add_url()
self.response.out.write('<script language="javascript">top.location.href="' + url + '"</script>')
return
#get friend list begin
friend_ids = fb.friends.get()
friend_ids.append(fb.uid)
info = fb.users.getInfo(friend_ids, ['name', 'pic_square', 'uid'])
template_values={}
template_values={'info': info}
#get friend list end
for i in info:
self.response.out.write('<img src='+i['pic_square']+' />'+i['name']+'<br />')
def main():
application = webapp.WSGIApplication([('/',Mainpage)],debug=_DEBUG)
wsgiref.handlers.CGIHandler().run(application)
if __name__ == "__main__":
main()
執行一下你的dev_appserver.py --address=映射好的內納IP --port=80 demos/pyfacebook
(其實你也可以直接下appcfg.py上傳你的程式至GAE上,不過這樣初期開發會增加很時間成本)
設定你的facebook developer 你的應用程式
將Canvas URL:設定為你的外網IP(或是GAE的應用程式網址)
運行一下:
http://apps.facebook.com/你的facebook網址/
(請輸入你的facebook app 網址)
將 將!!!
你就會看到你的朋友列表了
預告:目前是使用iframe的方式,
第二節來說一下FBML好了