模糊面孔

Saturday, May 17, 2008

Google Street View 因為私隱問題,決定以技術將人面車牌等模糊化掉,看起來像是這樣子的:

google stree view

看到這張照片,覺得似曾相識啊… 原來… 莫非… 他們都看了 錄影帶

當年的《午夜凶鈴》嚇倒不少人,我也是其中之一。我認為面對恐懼的其中一個方法,就是去理解它。因此,我去看了整個系列的四本小說、四部日版電影、兩部美版電影、數本漫畫等等,去了解山村貞子這個謎。

因此,我對整個系列也有好些「心得」,但原來沒有在這裏寫過,可能是不知從何說起吧!之後或許會寫幾篇關於這個系列的文章。

疑似人肉 SPAM

Friday, May 16, 2008

最近多了些奇怪的留言,最新鮮的有 這篇 在回覆 05 年的 Blog 事回顧一文。他這樣寫:

BLOG已經大眾化,民間化。我們每天落班必做的事。
抱住不同的心態,在這虛幻的空間裡暢遊。記錄落每天發生在身邊的點點滴滴事情,等10年過後回味也是件好事

這些留言有這些特點:

  • 內容字眼好像相關,但其實文不對題。例如上文,除了「阿媽係女人」的道理外,還有甚麼 10 年啊?
  • 留言者的名字怪怪,例如上例的自稱「recycle bag」
  • 留言者的網址指向某些商業網站,上例就指向環保袋網站 (我已移除了連結)

很顯然這是 SPAM 留言。然而,我更有興趣的問題是,這些留言是如何產生的?內容可以如此「疑似真人」?究竟是人寫還是機器寫的?

我實在很難想像這是真人到各個 blog 特地對文留言,這樣太沒效率太花成本,所以我想還是機器來的。其方法可能是:先掃描文本找關鍵字,然後再用 blog search 之類找其他相關文章,再抄下這些文章的留言來當成新留言。又或再進一步,用關鍵字眼,建立「範例答案」資料庫,配合使用。

如果真的是這樣子的話,這些 SPAM robot 又真的進步不少了… 希望不是這樣吧?

現在我的做法是先移除連結再看,如果再多其他同類留言,則會刪除。暫時數量不多,只是有些煩,而且我始終不想加 CAPTCHA。況且,如果是真人肉 SPAM,加 CAPTCHA 也沒有效啦…

Focus first text field using jQuery

Monday, April 14, 2008

When it comes to focus the first text field on a page using jQuery , the usual solution would be:

JavaScript:
  1. $(“:text:visible:enabled:eq(0)”).focus();

This query means to find the first of input text field(s), which is/are visible and enabled. However, this would also extract text field(s) which is/are under a display:none parent(s). So a more complete way would be:

JavaScript:
  1. $(“:text:visible:enabled”).filter(function(){
  2.      return $(this).parents(“:hidden”).size()==0;
  3.  }).slice(0,1).focus();

The filter here would try to determine if the text field is a descendant of a hidden ancestor. The usage of slice(0,1) instead of get(0) is to keep the chainability. A test page is put up here .

Finally, you may wrap it up with a plugin:

JavaScript:
  1. (function($){
  2.     $.fn.focusFirstField = function(){
  3.         $this = this;
  4.         $this.find(“:text:visible:enabled”).filter(function(){
  5.             return $(this).parents(“:hidden”).size() == 0;
  6.         }).slice(0,1).focus();
  7.         return this;
  8.     }
  9. })(jQuery)

So that you can do this:

JavaScript:
  1. $(“#form1,#form2”).focusFirstField(); //form1 or form2 may be ‘hidden’ dynamically

I just wonder if there is any ‘selector-only’ solution for this?

Update: It turns out that the child’s visiblity would override parent’s visibility. So the filter should only check display none:

JavaScript:
  1. $(":text:visible:enabled").filter(function(){
  2.      return $(this).parents.filter(function(){
  3.          return this.style.display == "none"; })
  4.     .size()==0;
  5.  }).slice(0,1).focus();

I’ve updated the demo page .

08 脫皮日

Monday, April 7, 2008

今年的 CSS Naked Day 轉到四月九日,原因如下:

  • 應在星期二、三或四這些高流量的日子
  • 應在四月第一個星期
  • 不應在愚人節
  • 公佈之前應有五天時間

想參加的到官方網站報名,站上也有相關的 PHP script。

Appjet 陽春 Outliner

Monday, March 3, 2008

最近在 Appjet 試寫了一個簡單的 Outliner 程式,主要是想試用這個服務,也想寫一個自己可能會用得著的程式。

Appjet 早在上年十二月就已經出現了,可以在瀏覽器完成所有開發、測試、發佈等動作,本身也提供 hosting 服務。使用 Javascript 為後台語言,上手不難。簡化了後台儲存,只需直接寫入 StorableObject 。其提供的 library 可作簡單的 request dispatch。加上 wget 等一類存取其他網站的功能,可以很方便做出一些 mashup 應用。

而這個 Outliner 也是很簡單的,用戶登入後可以建立不同的 outline (其實也只是 nested list)。我的要求是:

  • 可以快速地記下一些 idea 或 draft,因此 outliner 的介面必需可以使用鍵盤作全面運作
  • 定時自動儲存
  • 可以列印

在開發上,用戶 login 直接使用 lib-user 庫,所以十分簡單。至於介面則要寫 Javascript 了,我使用了 jQuery 並開發了一個 outliner plugin 來使用,主要處理所有 add/delete/edit node 的運作和鍵盤連接。至於排版則使用了 YUI Grids CSS

開發上,Appjet 的部份並不難,反而是花比較多時間在頁面 Javascript 上的啄磨,不過基本上沒有遇上甚麼大難題,出來的東西也算是做到心中想要的效果,比較麻煩的是現在預設的控制鍵大都是英文字母,如果想打一個中文 outline 就要不停切換…

而對於 Appjet 的開發環境,有以下感想:

  • 因為 source code 是單一頁的關係,所以程式碼一多時就會有些亂
  • Appjet 並沒有 file hosting 的服務,除非你將所有檔當成 storage 物件來存,否則也是要找一些免費空間來放一些 scripts、css 等,我使用了 cachefile.net 和  googlepages.com 來放置。
  • Appjet 本身有 dispatch request 的 library,但就太簡單了些,如果慣於 MVC 模式的話可能會覺得亂。
  • Template 要自己想辦法。看到這個 lib-templates 不錯,不過今次並沒有使用。
  • 若果未來要更改 data structure,看來暫時只可以用 shell 做 up/down 的程序。

總括來說,Appjet 可以來開發簡單至中等複雜的應用,但若果是大型的,就必須自己開發一堆 library/framework 來支持了,還好在 Appjet 裏建立和引用 library 很簡單。

各位也可以試用這個 Outliner ,也是 Open Source 的 (基本上全部 Appjet 上的應用也是啦),但緊記這只是實驗性質,不要將重要資料放上去就是了。