[Ruby] Get started

最近因為一些實務上的需求(真的嗎),所以不得不試著嘗試用RoR來開發程式,但是因為萬事起頭難,最困難的就是在一開始,所以就先試著了解Ruby這個語言的特性,再來往下階段做開發。

因為說實在的,不知道為什麼國內Ruby相關的資源很少,在網路上都沒有找到什麼比較淺顯易懂的書,所以就隨性上網找到了一本名為「The Ruby Programming Language」的書,就拿它來當cookbook吧。

因為我是從PHP跑來這邊玩沙,所以說實在的我還真的有點很不習慣,先看一下PHP在Wiki上的介紹:

『PHP 原本的簡稱為 Personal Home Page[4],是Rasmus Lerdorf 為了要維護個人網頁,而用c語言開發的一些CGI工具程式集,來取代原先使用的 Perl 程式。最初這些工具程式用來顯示 Rasmus Lerdorf 的個人履歷,以及統計網頁流量[5]。他將這些程式和一些表單直譯器整合起來,稱為 PHP/FI。』– From Wiki

PHP當初是延用了C的風格,再加上一些自有的特色,使得其多了一些較彈性的設計(如使用變數時可以不需要宣告型態)。但是,當我看到Ruby之後,反而讓我有種很難上手的感覺,因為它好精簡,讓我有種當初在寫Perl的感覺(雖然我沒有寫好,對不起c9s XD)。

好啦,廢話不多說,現在就來看看我看這本書時的一些小重點。

3.2.1.4 Arbitrary delimiters for string literals

還記得剛剛為什麼我說它讓我覺得好像Perl嗎,因為它也有支援Syntax Sugar,來看看它是怎麼做到的:
http://gist.github.com/288795.js?file=gistfile1.rb
還真的是很簡單,只要在前面要加個”%”就可以了(Perl 只要 q就好了呀!!!)

下面還說到要怎麼在使用Syntax Sugar時再跳脫那些用來當標記的符號,我覺得如果真的還要這樣子就有點本末倒置了吧…

3.2.1.5 Here documents

這邊再把上面的Syntax Sugar做個延伸,是借用Unix shell的語法,叫做 Here documents,它後面的註解很有趣,它說「因為這個文件就在個原始碼內,而不是存在於外部的檔案」,真是有夠白痴,有講和沒講不是一樣XD。

來看個小Example。

http://gist.github.com/288819.js?file=gistfile1.rb

“<<"和"<<-"的差別就差在後者的close tag的前面可以有空白,但是前者的不行,就這樣子而已。還有個特別強調的地方,就是close tag的後面不能插入comment,插了就會出現一堆錯誤!!這個東西在PHP也有,通常是用來存放HTML的部分,這樣就不用一直一行一行的輸出,算是把View分離的方法,範例如下。

http://gist.github.com/288830.js?file=gistfile1.rb

1st part 就覺牛刀小試一下到這邊啦。

[Hax4] Rainbow

測試頁面:在這、專案資訊:在這

這幾天因為心血來潮,想說來練習一下pure javascript,所以就都不用jQuery來做事情(雖然最後還是有用,不過我只用來做特效而已XD)。這個Idea其實是源於我以前做的一個很爛的liu-translator,它只能單方面做字根對字的轉換,所以就想說利用Ajax的概念來實作一個線上的IME,因此我就去找了之前Luke的網蝦米來研究他的UI介面。

研究了一下後就開始著手動工整個JS的架構,邊看深入淺出Ajax邊試著實作他說的一些思惟,像是要怎麼寫的很MVC,所以就開始學著把程式切成粗略的「資料」、「模組」、「樣式」三類,雖然之間還是有些耦合性,但是比較以前的我,這次的實作算是很成功的分離了。

之後又想到行易公司的練習嘸蝦米的打字程式一直沒有跨平台,只支援該死的M$,所以為何不幫他們設計一個Cross Platform的Web Application?反正只要解決Cross Browser的問題就可以了,雖然我在Cross Browser這條路上只是一個剛入門的新手,但總比Cross Platform好多了吧…因此就把分離完的架構再修改,改成有點像是遊戲的小程式。

原本已經接近完工的狀態了,但是Bu因為是「大新倉頡」的愛好者,所以就給個建議要我加入的其字根對應表,去擴充可支援的輸入法,就又經過了一場編碼和正規表達式的戰爭後,終於把切換輸入法的功能也加上了,這完全要歸因於先前的MVC架構,讓我能夠在很短的時間完成這個動作。

最後一個也是最重要的啦,為了提高遊戲性,我設計了一段可以自動去抓使用者給定URL的頁面回來,把該頁面上所有符合UTF-8繁體中文的字全部抓下來當成題目,這又比起以前行易公司設計的那些題目多了一些趣味。多了這個設計,你還可以邊看Yahoo!奇摩新聞邊練打字咧!!

附上程式截圖:




§2010/05/13 補上程式的Demo連結,原來我都沒有放出來= = ,舊的在這,新的在這
§2011/02/05 更新連結、圖片、介紹。

[Mac] How to enable GD lib ?

意外找到這個開發者寫的pkg檔,真的是一裝就Happy Ending了,省下不少時間,

以下是該pkg檔的特色,記下來給以後有需要的人!!

連結

  • the MySQL and PostgreSQL databases
  • the cURL library for various communications protocols
  • the GD image creation library (with PNG, JPEG, PostScript Type 1 and TrueType font options).
  • the expat XML parser and WDDX support
  • XSLT transformations
  • LDAP access
  • the IMAP client library
  • mcrypt encryption functions
  • GNU gettext

[計畫]想做的事

就在剛剛終於逃離了期末考的魔爪,現在要來列個清單是關於我整個寒假的計畫,能完成多少就多少吧。

  • 讀書計畫
    1. read 愛上jQuery & 深入淺出 Ajax
    2. [Done]read Facebook:性愛與金錢、天才與背叛交織的祕辛
    3. read Introduction to Algorithms
    4. …增加中
  • 工作計畫
    1. EatMe 主站規劃
    2. Hax4   主站規劃
    3. 畢業專題構思
    4. ACM解題
    5. …增加中
  • 其餘活動
    1. 食我出遊
    2. [Done]資轉出遊
    3. 死黨聚會
    4. ??
    5. …增加中

結論就是,等著累死吧!!!!!

[評論]線上購物機制與其應用

在這網路發達的世代,現今的電腦已經不再是當初的電腦了,各種服務和網路都有許多密切的結合,這使得我一直有種想法「沒有網路的電腦,就像是沒有靈魂的空殼」。正因為網路的出現,才真正的賦予電腦生命,讓他思考、成長以及突破,也因此產生了許多可能,而其中一個魔法就是「線上購物」機制(以下稱網購)。
有別於以往,網購這種方式可以說是把『使用者付費』的動作和『網路』這個虛擬平台融合得無懈可擊,現在人們只要線上輸入信用卡號再搭配簡單的基本身份認證,想要的東西就唾手可得、手到擒來,根本就不需要走出家門一步,這種距離的不可取代性,就是促使網購發展的利器。而以下我想用一些例子來討論一下我觀察到的思惟,並從中探討其之所以吸引人之處。

  • 付費方式(Methods to pay)

  • 線上刷卡

    目前的線上刷卡付費方式有很多種,一種是在前文我們提及過的方式,在線上輸入信用卡的使用期限與背面的SecurityCode,這樣就可以做到線上刷卡付費的功能。而另一種是搭配晶片讀卡機並插上實體金融卡來付帳,但是和前者不同的是,因為他是金融卡,是有存額的卡片,所以它的運作方式是及時在刷卡的同時就直接扣除帳戶內的存額,和信用卡累積到月底再結算的制度不太一樣。
  • 線上小額付款

    小額付款系統(Micro Payment)是整合認證、授權和計費三種技術成為一個標準平台,提供給消費者和內容廠商(Internet Content Provider)安全、便利、通用的小額付款收費系統。而這種付費方式是我個人認為門檻最低的一種,因為通常我們的ISP如Hinet或是Seednet甚至是提供手機服務的公司如台灣大哥大等公司都有提供這種線上付款的方式給其用戶,只要一般人有手機或是能上網,就能輕鬆付帳。而其付款方式就是輸入相關的上網、手機資訊及個人資料以供比對後,就可以先享受後付費,在下筆帳單內才會入帳。

  • 虛擬等值貨幣
    目前全世界最大的在線支付提供商是PayPal,它們把實體的貨幣轉換成可以在網路上流通的虛擬貨幣,使得PayPal的用戶可以直接透過線上給予的方式利用網路把真實的貨幣輸送到對象那,而且重點是這是虛擬的等值貨幣,所以可以利用轉帳的方式把這筆金額的金錢轉到指定的銀行戶頭內,再提取成真實的實體貨幣。是有別於前面兩者,PayPal是唯一一個把現實和虛擬完美的接合在一起的線上付費平台,讓它不再只是以往的貨幣,而是一種能依使用者的自我意識存在於網路或是日常生活內的貨幣。
    • 幣值的陷阱(The trap of currency value)

    • 因為幣值之間的匯率不同,所以常常在轉換的時候會有一些落差,而人是一種視覺性的動物,除非你對數字極度敏感,否則通常會陷入這個陷阱,以下我用兩個網路免費空間的付費方案來當作一個例子:

  • 下RapidShare
  • 下MegaUpload(中英)

  • 如果單從數字來看的話,一般的使用者很容易因為字面上54.99比59.99小而認為RapidShare的服務比較便宜因此乎略了旁邊的€和$兩個幣值符號的差別,這就是在網路上有提供跨國服務的公司時常使用的一種商業策略,利用幣值的差異,就可以讓一般的使用者掉入他們所設下的陷阱。在這邊要補充的是,右邊那家公司在各語言版本的網頁上,放的都是同樣的價格,而且都是以美金呈現,如果沒有切換到英文版的首頁的話,我自己都會以為那是以新台幣為單位。

    • 虛擬的紅利(Invisible Bonus)

    網路最大的優勢就是他是一個虛擬的平台,所以現有的服務都是以其為基準所建立出來的,什麼是虛擬的紅利?以論壇為例,它運作的方式就是提供一個可以讓大家討論分享的環境,但是這對於論壇服務的提供者來說,要如何在這上面達到盈利就是一個很重要的問題。而最常見的手法就是利用『積分』、『權限』來吸引用戶的注意力。先以後者為例,管理員可能就會隱藏熱門討論區的可見度,只允許高於一定權限的玩家才可以進入到該區並瀏覽,再以前者為例,這時光是進入子討論區還不夠,還要再付出相對應的積分數才能看到詳細的文章內容,否則也只是枉然。
    在上面的兩個手法就可以看出,『積分』和『權限』就可以視為一種虛擬的紅利,為什麼說是紅利呢?因為管理員可以藉由增加積分和提高權限的方式,以紅利的形式發放出去來吸引更多的使用者,讓他們覺得這個網路空間成為他們生活中一個不可或缺的部分,就達到了成功吸引使用者的效果。但是在日常生活中,我們很難以個人的角度提供出什麼吸引人的優惠來增加客源,假設你是一個才剛創業而且資本額不高的小餐廳,你有可能在一開始就燒錢提供個買一送一的優惠餐券嗎?通常是不太可能的。從一些實例就可以看出,虛擬的紅利在現今的網路世界是一大武器,特別是對於那些想要經營出具有盈收的網站經營者。

    • 宣傳的平台(Advertising platform)

    最後要討論的就是宣傳平台,以前的人們是用口耳相傳的方式來宣傳,現在的人們則是大量利用媒體、新聞等第四權的力量來宣傳,但是在現實世界裡,其宣傳的費用通常不是一個人可以負擔得起的,因此佛里曼(Thomas Friedman)曾在他的書–「世界是平的(The World is Flat)」內提到了網路這台推土機。在這個資訊網路發達的世紀內,要以個人的能耐力拼大公司的話,就要善用這台推土機的力量推倒和他人之間的高牆,因此怎麼善用便成為了一個很重要的議題。所以現在有提供網購服務的站台,都開始把觸角延伸到了虛擬社交平台如目前當紅的FaceBook、Plurk、Twitter等,把一些相關的商品或是活動以訊息或是遊戲的方式滲透到了這些平台,間接的利用社群的力量來達到宣傳的效果,而和那些第四權相比之下,他相對要付出的資金和心力可以說是大大的減少了許多。
    所以如果你是一位想要善用線上購物的方式來經營的一位經營者的話,如果可以善用到上述的一些已經在網路上的應用和現象的話,就能把有限的資源做最有效的利用,就能利用這個藍色虛空打造出自己的一個王國。

    [Mac] dock crash

    之前一直常出現一種狀況,就是有時候整個電腦會停住的感覺,不能用cmd+tab去切分頁、dock整個都不會動。

    去查了一下原來是Dock crash的問題,在這邊可以利用ps or top command 搭配上 kill去把該process刪掉,而Dock就會自動重啟了。

    http://gist.github.com/277106.js?file=gistfile1.sh

    因為我是直接grep出來,所以自己的terminal也會被grep到正在做grep Dock的動作,因此只要挑長的像System/Library/CoreServices/Dock.app/Contents/MacOS/Dock -psn_0_4047836的pid就可以了

    最後就 kill pid 啦。

    2010/01/17✙補充Money說的以process為parameter的另一個指令killall,使用方法如下
    http://gist.github.com/279304.js?file=gistfile1.sh

    [WordPress] Coding Standards

    這裡面的Coding Standards講到很多以前看到還蠻重要的東西,

    像是下面這個做法可以避免”==”寫成”=”所產生的BUG,算是還蠻好用的。


    if('abc' == $var) ...

    另外還有一個也還重要的就是

    Self-explanatory flag values for function arguments

    這幾個點大家可以看一下,其他的就比較偏個人的習慣了。

    Source

    [JS] Image preload

    The way a browser normally works, images are loaded only after an HTTP request is sent for them, either passively via an tag or actively through a method call.

    所以這就是為什麼圖片都會有Delay抓不到的情況…因為他通常是被觸發時才會自動去抓src的圖。可是如果真的是這樣的話,那就要想個辦法來避免這個問題。不過該怎麼辦咧?

    The simplest way to preload an image is to instantiate a new Image() object in JavaScript and pass it the URL of the image you want preloaded , and load it simultaneously to the page with the onLoad() event handler:

    哦酷哦,直覺上的想法就是要讓頁面load完時就先onload 一個function,這樣就可以把執行時間提前,因此只要寫個function包起來讓onload去讀就可以了。

    DEMO CODE:
    http://gist.github.com/251380.js?file=gistfile1.js