2011年10月28日 星期五

Apple iMac G4 を入手しました


一直以來都很想添置一台 Apple iMac G4。因它的外觀設計特別吸引。然而一直都沒有行動。一來是金錢的考慮,二是 G4 已經是多年前的產品,不知道從何入手。幸而,在十月初購入的股票,在兩星期後出售而有點收穫,加朋友 Simon 的明燈指引,終於踏上了尋找 G4 之旅。

最後,我選擇跟一位 Yahoo 賣家以 HK$800 交易。產品亦在今天到手。雖然它的價錢不是最平的 HK$600,但比最貴的 HK$1000 來說,是中等的價位,而且產品的保養尚算不錯,性價比最高。原本對於用來收藏的產品,應該是選保養最好的那台。但對於我來說,花 HK$800 購買一台不會用的機器,實在是一種揮霍...。我的目標是購入 iMac G3, iMac G4, iPhone 3G 及 iPhone 3GS,現在 iMac G4 已經到位,並跟它的 iMac 後輩一起生活。希望其餘的機器能在今年內集齊吧!

2011年10月25日 星期二

Zombie in Xcode 4


進入 Xcode 4 後很少用 NSZombieEnabled 這個功能,今天在升級「Rate My Pics」時需要用上。但在 Xcode 4 下改變了位置,需要按下 Command-Option-R 鍵,在 Run - Diagnostics 中打勾。

2011年10月24日 星期一

PNGDecrypter

花了點時間優化了我的「PNGDecrypter」,令它更方便使用。這個工具能把 IPA 內的 PNG 解碼還原。整個項目的源碼已經上傳到 Google Code。一如以往,這個作品同時支援 iPhone, iPhone 4, iPad 及模擬器。安裝好後,只需要利用 iTunes 把 PNG 拷到 PNGDecrypter 的資料夾,執行 PNGDecrypter 並點選右上方的 (+) 鍵。便會把所有 PNG 解碼。解碼後的 PNG 會儲存在 output 目錄內。

有興趣的朋友可到 http://code.google.com/p/iphone-png-decrypter/ 下載 ZIP 包;或者用 SVN 也可以。如有任何意見,歡迎賜教。

2011年10月23日 星期日

LEGO 轉盤


公司在廣交會上展出的 3D 硬件得到矚目關注,我們決定要為它拍攝介紹影片。我很想拍下 360 度的產品圖,所以利用了 LEGO MINDSTORM NXT 組裝了一個轉盤,以協助拍攝的工作。

2011年10月22日 星期六

Gundam AW


今天在日本 AppStore 下載了幾個優秀的 App,其中一個是「ガンダムAW」。我發現遊戲內的 3D Model 做得不錯,於是拿它來了一次 Reverse Engineering。在 IPA 內儲存了很多 PNG 圖檔,我慣常使用 iPhonePNGApp 來把 PNG 解碼還原,不過這個軟件並不能解開所有的 PNG,有些時候解不到,有些時候則能解開一半。我是追求卓越的人,實在不容許有這個情況存在。在了解過解碼不是困難的事之後,花了 15 分鐘寫了一個解碼程式,幸好一切運作正常,亦能解開所有 PNG 圖檔作為參考。

2011年10月19日 星期三

又是 M$ 惹的禍(三)

The M$ Problems Part 3

又是 M$ 的問題,不知為何 M$ 老是把簡單事情複雜化。我想在 SQL SELECT 的同時,加入一欄日期比較結果數字,若是內容未過期為 0,已過期則為 1。在 MySQL 下十分簡單:

SELECT *, expiryDate <= now() AS expired FROM newsTable ORDER BY launchDate DESC

在 MSSQL 下卻變得複雜:

SELECT *, (CASE WHEN expiryDate <= GETDATE() THEN 1 ELSE 0 END) AS expired FROM newsTable ORDER BY launchDate DESC

要是拿內容來作運算的話,那 MSSQL 的語句能否處理都成問題…。

2011年10月18日 星期二

「走奶風暴」的啟發

由日本公司 NAVER Japan Corp. 開發的「LINE」於上周在香港迅速竄紅,成為免費榜人氣 No.1。更在我的朋友圈中極速取代 WhatsApp 成為預設吹水工具;甚至在 Facebook 隨處可見 LINE 的 QRCode。可惜不到兩天,這個勢頭又被 WhatsApp 奪回。

事緣由一篇誇張的報導引起。加上 LINE 本身的設計不良,以及在 Facebook 上的收費傳聞所拖累。使得大眾對 LINE 的信心大減。由於信心受到打擊,LINE 已經在我的朋友圈中快速及徹底地消失,再次投入 WhatsApp 懷抱。還將 LINE 最吸引的表情符號及貼紙移植到 WhatsApp 之中。

今次的事件可以說峰迴路轉,見識了「來匆匆,去也匆匆」的實證。也學到了:
  • 要超越既有的強敵,只需要捉到一個關鍵的需求
  • 一個傳聞,足以扭轉局面
  • 需要即時及時的危機處理
  • 介面設計要簡單清楚,弄巧可以成拙
  • 不要隨便使用 SMS,尤其是對用戶沒有好處的部份
  • 讀取個人資訊時要讓用戶知道
  • 需要顧及使用者的私隱保護
  • 2011年10月17日 星期一

    談創意

    很多從事創作的公司都崇尚工作自由的空間,認為有助創意思維;BeyondZ 也是走這條路線。不過,我也認為「嚴緊」及「局限」的環境也能激發創意。我自小時的社區經常有毒友出沒,所以父母禁止外出,要求留在家中。在缺乏趣味的生活中,我激發出創意,創作出不同玩意自娛,也從而找到了目標,要成為一位遊戲設計師。在當時沒有互聯網、沒有遊戲課程、沒有遊戲設計書籍、沒有多少遊戲公司的年代,要進入遊戲界基本上是沒途徑。就是因為有沒有途徑,才會嘗試不同的方法。而這個目標卻在我十八歲時達成了,一做便做了十八年。

    2011年10月16日 星期日

    二手 Mac 價


    聽聞新高登是二手 Mac 機的集散地後到此一遊,發現真的有很多 Mac 機的蹤影,尤其是 iMac。至於我最希望添置的檯燈 Mac 就發現在三家店中出現,其中兩家只作陳列,並不割愛。剩餘的一間則售 HK$1000。由於機身較黃及殘舊,加上在 Yahoo 拍賣場的都打理得比較好,所以最終都沒有出手收購...。

    2011年10月15日 星期六

    ASP.NET 指令筆記

    ASP.NET Commands

    在編寫 ASP.NET 指令時要留意大小寫,例如 String.Length 寫成 String.length 便會發生問題。
     
  • 以 GET 形式取得 URL 參數
    String tokenString = Request.QueryString["token"];
     
  • 以 POST 形式取得 URL 參數
    String tokenString = Request.Form["token"];
     
  • 取得字串長度
    String username = "Steve Jobs";
    int stringLength = username.Length;
     
  • 把字串轉換成數字
    int value = Convert.ToUInt16(string);
     
  • 防止出錯
    On Error Resume Next
  • 2011年10月14日 星期五

    又是 M$ 惹的禍(二)

    The M$ Problems Part 2

    每一次在 M$ 環境下工作都特別多問題,今次的受害者是 Facebook App。之前在 IE 中已經出現特別多問題,本來整個 App 已經完成。但由於客戶十分著重保安,我們的 App 在經過 IRM 掃瞄後而不獲通過。其中一點是要加入 Session ID 檢查來減低被黑的風險。改動後的版本在 Safari, Chrome, Firefox 這些大品牌瀏覽器都能運作正常,唯獨是 IE 卻出現問題。原因是在 iframe 下的頁面,其 Session ID 每次都會不同,造成無法比對。

    經過同事的研究,發現跟 W3C 的 Platform for Privacy Preferences 有關。最後找到解決方法是在每頁的開頭部份加入:
    HttpContext.Current.Response.AddHeader("p3p","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");

    2011年10月13日 星期四

    Lion vs NAS

    又自從升級到 Lion 之後,便間中無法連到公司的 NAS 伺服器,實在很不方便。原來 Lion 不再支援「DHCAST128」協議。這個正正就是大多數 NAS 採用的協議,所以公司的 QNAP NAS 也難逃一劫。不過,由於 DHCAST128 的保安程度不夠高才會被 Apple 所取締,對使用者來說也是多一點保護。

    但是無法連接 NAS,我便無法工作。幸好今天在網上 http://www.alexanderwilde.com/2011/04/os-x-lion-connection-error-with-afp-and-workaround/ 找到了情報,提供了解決方法。
  • 啟動 /Applications/Utilities/Terminal
  • 輸入 sudo chmod o+w /Library/Preferences 然後拍一下 Return 鍵
  • 輸入 defaults write /Library/Preferences/com.apple.AppleShareClient afp_host_prefs_version -int 1 然後拍一下 Return 鍵
  • 重新開機
  • 在 Finder 中選 Connect to Server
  • 輸入 NAS 伺服器的地址,然後按 Connect
  • 啟動 /Applications/Utilities/Terminal
  • 輸入 sudo defaults write /Library/Preferences/com.apple.AppleShareClient afp_disabled_uams -array “Cleartxt Passwrd” “MS2.0″ “2-Way Randnum exchange” 然後拍一下 Return 鍵
  • 輸入 sudo chmod o-w /Library/Preferences 然後拍一下 Return 鍵
  • 重新開機
  • 2011年10月12日 星期三

    Steve Jobs 的八字

    時間過得十分之快,今日就是 Steve Jobs 的頭七。原來 Steve Jobs 已經離開了七日,事情就像昨天發生一樣。聽我一個篤信鬼神的姑姐說,指她曾到過另一個世界,那裡已經是有電腦系統。我希望真的如她所說,這樣 Steve Jobs 就能在另一個世界再次大展拳腳,造福那個世界的生命。

    對於 Steve Jobs 的一生,我嘗試在八字層面,用我有限的功力來了解一下。
    Steve Jobs 生於 1955 年 2 月 24 日。轉換成八字是:

    X 日 食 印
    O 丙 戊 乙
    O 辰 寅 未
    X 食 偏 傷

    由於沒有出生時間資料,所以留空。而出生當天的 12 時辰為:
    戊子、己丑、庚寅、辛卯、壬辰、癸已、
    甲午、乙未、丙申、丁酉、戊戌、己亥

    死於 2011 年 10 月 5 日早上 3 時左右。轉換成八字是:

    甲 癸 丁 辛
    寅 已 酉 卯

    2011 年虛齡為 57 歲,剛剛轉入十年壬申大運。意味著是轉運而死。看看八字的解說。丙火日生於寅月,木旺之月。乙寅木透,木火通明,木及火的威力大增。火炎土燥之命,所以脾氣非常利害。食神透出,乃聰明之象。木為桃花,位置在年柱,於 30 歲前受人愛戴,但 30 歲後不見桃花,理應不及 30 歲前的程度。既然事實是 30 歲後也受歡迎,則可以假設時柱也見桃花。那麼會得出以下兩組八字:

    財 日 食 印 | 印 日 食 印
    辛 丙 戊 乙 | 乙 丙 戊 乙
    卯 辰 寅 未 | 未 辰 寅 未
    印 食 偏 傷 | 傷 食 偏 傷

    前者寅卯辰木局,時干辛金,在癸酉及壬申二運時能令金透,增加金的威力。後者則似乎沒有導致喪命的伏線。再以兄弟姊妹數目來印證,前者是 1 或 2;後者是 1 或 4;而事實是 2。而子女數目,前者是 1 或 4;後者是 1 或 5;事實是 4。初步印證了 Steve Jobs 是生於早上 5 至 7 時之間。

    30 歲時正值乙亥運的一半,即是由乙轉亥的時間,Steve Jobs 被 Apple 公司解僱,進入人生低潮,可以假設 Steve Jobs 是忌「水」。乙亥運中的乙是桃花,所以由 25-30 歲時受人歡迎。順帶一提,蘋果五行也是木,桃花也;而電腦行業屬火,證明 Steve Jobs 五行喜木火吧。那 56 歲起的壬申大運中,壬是大河江水,給了致命一擊。不過,亥也是壬水的化身,為何 30 歲時卻沒事?我估可能是因為乙亥運的乙在幫忙,水生木之緣故,減弱了水的威力之餘,亦加強了木氣,繼而生火。而在壬申運則剛好相反,申為金,時干辛金透出,金的威力增強。金生水,再生旺了壬水的威力。加上身故時辛卯流年,丙辛化水,連自己都化成水;酉月金又生水。忌水者見大水,豈不發生大事!但 10 月 4 日是壬辰,水的量度比癸已日多,為何不是前一天出事?以我的功力則解答不了。而上一個大運癸酉也是金生水,為何不是早十年出事?以我估計,是因為月干戊土跟癸水合化成火吧。沒錯,又是火。冥冥中自有主宰。

    2011.10.12 更新
    找到網上討論,似乎小弟全部錯晒。
    http://forum.juxian.com.hk/viewthread.php?tid=5980&extra=&page=1

    2011年10月11日 星期二

    ASP.NET 下的推送通知(二)

    Push Notification Using ASP.NET Part 2

    雖然上一次能令 Windows Server 執行 .asp 及 .aspx,可是當我行用 SharpDevelop 建立一個新的 ASP.NET Web Application 後,這個新的項目卻無法執行。原來需要在 IIS 中為網頁建立 Application Name。設定後執行卻發現錯誤。解決方法是在 IIS 中加入 .NET Framework 4.0。終於能夠執行 SharpDevelop 的示範程式了。確認沒問題後,我加入了從網上找到的 Push Notification 代碼。編譯一切正常!下一步便是加入 deviceToken 來進行實際操作。
    Macintosh
    1. Open "Keychain Access"
    2. Select "Apple Development IOS Push Services: 9B6T95NAS2:9B6T95NAS2"
    3. Export a .p12 file
    4. Upload .p12 to server

    Windows Server
    5. Double click on .p12 file to install it
    6. Grant access to ASPNET account:
    DOS> winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "Apple Development IOS Push Services: 9B6T95NAS2:9B6T95NAS2" -a ASPNET
    7. To grant access to Network Service:
    DOS> winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "Apple Development IOS Push Services: 9B6T95NAS2:9B6T95NAS2" -a "Network Service"
    8. To grant access to Authenticated Users:
    DOS> winhttpcertcfg -g -c LOCAL_MACHINE\MY -s"Apple Development IOS Push Services: 9B6T95NAS2:9B6T95NAS2" -a "Authenticated Users"
    9. Make sure port 2195, 2196 was opened on firewall

    2011年10月10日 星期一

    ASP 指令筆記

    ASP Commands
     
  • 取得 URL 列的參數
    Dim udid
    udid = Request.QueryString("udid")
     
  • 執行 SQL 指令
    Dim connection
    Set connection = Server.CreateObject("ADODB.Connection")
    connection.Open "DSN=dsnName; UID=sqlUser; PWD=sqlPassword; Database=database"
    connection.Execute sqlString
     
  • 設定輸出的 Content Type
    Response.ContentType = "text/html"
     
  • 取得當前目錄的檔案清單
    Dim folder
    Dim fileObject
    Dim folderObject
    Dim fileArray

    folder = server.mappath(".")
    Set fileObject = server.createobject("Scripting.FileSystemObject")
    Set folderObject = fileObject.getfolder(folder)
    Set fileArray = folderObject.files
     
  • 把字串分拆成為 Array
    Dim resultArray
    resultArray = split(Contents, ",")
  • 2011年10月9日 星期日

    Think Different


    我很喜歡「Here's to the crazy ones」這支廣告,尤其是 Steve Jobs 旁白演譯那個。很有共鳴、很有感覺。原來一直使用的 OSX 中也出現了這支廣告的蹤影,它就藏在 TextEdit 圖示裡頭。把圖示放大,看到的就是廣告的對白,很有意思。

    2011年10月8日 星期六

    UIImageView to UIImage

    在編寫 App 時,我喜歡把 UIView 以組編列。例如很多時會彈出一些視窗,假設名稱為 windowView。我會把視窗內的所有 UIView 類的東西都放進 windowsView 內,亦即是 [windowView addSubview:uiview]。這樣做方便在改變視窗位置時,其他的 subviews 會自動跟著一起移動,不用再作處理。如果我要把視窗畫面輸出成 UIImage 或 PNG 檔時,亦會變得很方便,只要以下四句指令便能完成。

    // Get image of an UIImageView
    UIGraphicsBeginImageContextWithOptions(photoImageView.bounds.size, YES, 0.0f);
    [photoImageView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    2011年10月6日 星期四

    Missing Steve Jobs


    今天是非常沉重的一天。Steve Jobs 在重陽節離開了我們。世界上失去了一位天才、一位精神領袖。素未謀面的他改變了我的生活、改善了我的收入,也拓闊了我的視野。多謝 Steve Jobs,永遠懷念你。

    2011年10月4日 星期二

    ASP.NET 下的推送通知(一)

    Push Notification Using ASP.NET Part 1

    最近的一個項目需要使用 ASP.NET 來進行「推送通知」。對於改用 Mac 已有三年的我,M$ 方面的產品知識已經變為零,需要重頭學起。不過,越是接觸 M$ 的產品則越不想用;就像今次的「推送通知」,對於 ASP.NET 方面的訊息實在少之又少。

    安裝好 Windows Server 之後,ASP 也能運作,可是某部份的內容卻無法執行。原來那些內容是 .aspx,預設是關閉的,需要在 IIS 下打開才能運作...。而在網上找到的 C# Push Notification 源碼,生成出來的是 DLL 及 EXE。暫時仍找不到使用它的方法。由於時間無多,希望能盡快解決!

    2011年10月3日 星期一

    又是 M$ 惹的禍

    The M$ Problems

    公司正在製作的一個 Facebook App 已經進入尾聲,本來只剩下客人對介面上的微調。可是今日卻發現使用 https 後,在 I.E.8 下會發生幾個問題。一是 A href 方或的 Javascript 無法執行,二是 Facebook 的 Profile 相片無法顯示,三是 A href 到外部網址時,竟然被 Facebook 包著,而內容又被禁止執行。至於其他瀏覽器如:Chrome, Safari, Firefox 則完全運作正常,實在不禁想罵 M$ 一頓!