2012年1月20日星期五

Visual Studio Achievements - 寫程式開成就

對打機既人o黎講,"開成就"(Achievements)絕對唔會陌生。
一年前,有人戲言如果Visual Studio有Achievements會包含什麼?
What if Visual Studio had Achievements?Reddit上亦有很多人討論。引起Microsoft有關部門注意,並提出落實開發成就功能。

一年後,這個成就功能誕生了。
Visual Studio Achievements, now a reality!



這個東西不是隨便玩玩的,可以跟Windows Phone,Facebook等連動。
Channel 9上亦有很多頁面介紹
Visual Studio Achievements主頁:
http://channel9.msdn.com/achievements/visualstudio

[轉]Wiki為什麼抗議?一分鐘看懂SOPA

轉自: http://n.yam.com/8news/international/201201/20120120885993.html

【報導:張之杰/圖:Ason】 對於我們天天使用的網路來說,SOPA將會具有非常龐大而且深遠的影響力,不過到底什麼是SOPA,寫在維基上頭一大串英文,就算有耐性看完,還是搞不清楚狀況?沒關係,畫新聞用漫畫解釋,讓讀者們一分鐘看懂SOPA。

SOPA通過之後。

美國司法部:「你侵犯版權。」
網站:「我沒有,有證據嗎?」
美國司法部:「我說你犯法就犯法,是你要提出證據證明自己清白,在這之前先關閉。」
網站:(暫時關閉調查)
台灣人:「哈哈哈,這是美國法案,跟我們好像沒什麼關係。」
美國司法部:「Youtube、Facebook、Wiki、Google有侵犯版權的內容,請證明自己的清白,在這之前先關閉。」
台灣人:「…」

網路版權問題的確需要解決,畢竟這是屬於他人心血結晶的智慧財產。不過SOPA會造成很大的問題,特別是在這個網路無遠弗屆的現在,牽連範圍龐大真的很難想像。有人在youtube上傳了違反版權的影片,結果在臉書上有人轉貼,google上面能夠搜尋,或者PTT上有貼連結,那麼這些平台都有機會中槍。甚至使用者在不知情的情況下轉貼連結,也都很可能被牽連。

SOPA出發點不是不好,只是太過躁進,沒有顧慮到後果以及程序正義。清白還得要自己證明,這與法律精神完全不符合。因此各大網站以及網路使用者群起反對,白宮方面也表示不贊同。

不過不得不說,網路支持力量頗為驚人,wiki和google在首頁上表達抗議後,廣泛引起使用者關注。跟著就有10名參議員表達要放棄支持SOPA。看起來這場戰爭,目前網路似乎比較佔上風。

至於另外一個類似性質的法案PIPA,在今天(1/19)新增13名參議員反對後,確定了支持陣營崩潰。

2012年1月19日星期四

炒iPhone必備 Apple Store Checker - 開賣喇免費版

#18/JAN/2012 Update!!! - 支援Smartone iPhone 4S - 儲值咭組合。
有很多人要求我做埋Smartone,其實唔難....可能本身不是眼紅者,所以再改版既意慾不大。但現實中又有同事要求,咁即管支援埋Smartone喇。
新版本0.03使用方法都是一樣,但Smartone部份要等到真正開賣才知道Work唔Work,不過我估問題不大的。
另外Fix埋如果冇Network Connection時,會誤報iphone開賣的問題。

上星期首次投入炒賣iPhone行列,第一次感覺到炒iPhone那種不勞而獲的快感。
之後上網試試找有沒有程式可以長時間監察Apple Store,一有iPhone開賣就通知自己。

點知原來好多程式都係手機版,仲要收錢,都有唔少人買,有幾千個水魚,我即時心諗:(嘩~早知我早o的寫喇~)
Android Market : https://market.android.com/search?q=%E9%96%8B%E8%B3%A3&c=apps
App Store : http://itunes.apple.com/hk/app/id468658936?mt=8

呢句說話並不是馬後炮,我即使不是長時間在Apple Store打躉,但略有Web開發水平,而又懂得用Firebug之類的Debugger,花一點時間去分析一下Apple Store網頁就可以。

其實我有幾個想法係可以檢查Apple Store開賣情況,(以下內容含一點技術成份)

1. 用WebClient把Apple Store的頁面整個下載,如果字串長度有所變更,就進行通知。但這個方法有一定的誤中率。
2. 跟(1)一樣,下載網頁,不同的是偵測一下開賣時的綠色Checkout按鈕是否存在。但我沒有實行過,因為我寫這個Apple Store Checker時,沒有開賣,根本不知道那個按鈕的HTML含有什麼,是圖還是CSS3都不知道,但理論上是可行而且準確的。
3. 這個方法就是我程式使用的,直接模擬按下購買iPhone時的按鈕。當按下iPhone按鈕後,如果你用Firebug或類似IE Developer Tool監察Network活動時,你會發現Browser會Request一條URL,這條URL回應的內容已經十分明顯,如下圖。

20111221_171602_2-t.jpg

所以我要做的事十分簡單,只需要下載這個JSON字串做檢查已經可以,連deserialize那Json都不用。因為字串含有"暫無供應",那已不需要再問吧。

這個聖誕就送給各炒家一個程式,不用眼紅人了。
這個程式原理就如上述所說,不過我加入Timer每60秒做自動檢測,如果開賣的時候,那就大件事了。
右下角會有Notify彈出,程式本身都有Alert Window彈出,你不用怕會走漏眼。

程式本身開啟後會有一個藍色蘋果圖示在Windows右下方,點擊就可以開啟主畫面。而裡頭的Debug Mode其實是給我使用,Debug Mode是可以修改Json網址的,但不建議修改,除非有一天Apple Store把網址改了。
20111221_173517_4-t.jpg20111221_173431_3-t.jpg

原理,程式,用法就是這麼簡單,不要再花錢買那些App了。
Apple Store Checker下載網址 : http://dl.dropbox.com/u/19160547/Files/AppleStoreChecker.zip

#24/12/2011 Update
今天的流量嚇了一嚇,多了千多人到來,原來是高登眾巴打的捧場
而今天我自己終於都實際試驗到這程式,因為寫的時候到今天為止都沒有開賣,但今天早上10:10分左右,程式彈Pop-up,立即叫全公司所有人狗沖上Apple Store,証明程式是Work的。
但發現原來Apple Store是有配額制度。因為我的電腦和另外兩個同事的電腦,無論程式本身或實際上Apple Store都有不同的情況。

我自己在10:10am (左圖) 收到程式通知,上Apple Store,整個Checkout過程很快。同事A和同事B,遲過我上Apple Store幾分鐘,但奇怪的是程式沒通知,上Apple Store都是顯示未有得賣。
他們Clear Browser的Cache/Cookie,轉IE/FireFox/Chrome都是一樣。直到10:30am (右圖),他們才出現購買綠色按鈕。
所以我懷疑不只電話本身數量有限,而Apple Store是分批給人購買,並不是一開賣就全香港人都可以買到。
最後我仲發現自己打錯字,打左34GB...
20111224_ips4_sell_2-t.jpg20111224_ips4_sell_1-t.jpg

同埋我岩岩睇Post,話大陸人寫Bot Check埋係咪開賣,開賣仲自己買埋機,係就係有,
但係話"搵好多錢請左幾個精英編寫員黎寫",未免太誇張喇。
20111224_010424_7-t.jpg

其實呢o的Bot你地都可以寫到。
一般做Web Development或SQA既人,除左UnitTest呢類較Formal既測試,仲會有一樣o野,
你可以叫做WebTestAutomated Test。(較正確解說,自己上Google睇下係乜)
呢類Test正正就係可以做到自動檢查開賣,在某條件下,自己Click條Link,填埋Credit Card info等等。但當然寫呢類Test唔係o野少。
但Firefox就有一個叫iMacro既Extension俾你簡化做類似既事。其實Chrome都有,不過Chrome果個好Kai。
iMacro可以Load External Javascript去做Checking,網頁上既控制,當然有條件式Retry/Loop。

雖然我唔知大陸果款係點,但呢類都係Bot既一種。亦可以幫你地慳水慳力,我都想有條大水喉搵我寫個咁既o野。

2012年1月18日星期三

香港高登改版面,Userscript出動了

香港高登Admin又食飽飯冇事做更新版面,令到我一向用開的Firefox Extension - Helianthus.annuus部份功能失效。
諗都唔洗諗,立即左Keyboard右滑鼠花半粒鐘時間Fix返佢,順便造福人群。

呢個Userscript Fix返幾樣o野:
  1. 快速回覆會好似以前咁浮動形式+摺合。
  2. Helianthus.annuus果個Message Template,如果太多自訂訊息會按唔到OK制,亦新增唔到。
  3. 刪除阻住晒既討論區守則。
  4. 刪除阻住晒既咖啡色Menu bar。
  5. 刪除阻住晒既高登 Logo。
  6. 修正頁面闊度
  7. 放大Menu bar左手邊o的字
  8. 加返[返回吹水台]

暫時Fix返以上係我覺得對我好唔方便既野。

如果真係後繼無人,或者之後有時間再更新這個Post,增加一下功能。

使用方法一如以往新增一個Userscript,Copy And Paste,Save,搞掂。
18/Jan/2012 20:56 Update :
似乎好多巴打都有用,我岩岩再Update左一次,現在Resize browser後,條快速回覆Bar都會起度。
起高登不便出Post,有什麼想加或Bug可留言,因為林祖舜之前都因為我寫高登Post Parser而Bam過我一次。 :fuck:

// ==UserScript==
// ==UserScript==
// @name   HKGolden.js
// @namespace HKGolden.js
// @description 修正/增強HKGolden
// @include  http://forum*.hkgolden.com/topics.aspx?type=*
// @include  http://forum*.hkgolden.com/view.aspx?type=*&message=*
// @include  http://forum*.hkgolden.com/view.aspx?message=*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
// @require  http://cachedcommons.org/cache/jquery-bbq/1.2.1/javascripts/jquery-bbq.js
// ==/UserScript==
var QrOpenTop = 27;
var QrCloseTop = 322;

function toggleNMTop() {
    var status = jQuery('#QrStatus').text();
    if (status == 'show') {
        jQuery('#newmessage').animate({
            top: window.innerHeight - QrOpenTop
        }, 400);
        jQuery('#QrStatus').text('hide');
    } else {
        jQuery('#newmessage').animate({
            top: QrCloseTop
        }, 400);
        jQuery('#QrStatus').text('show');
    }
    return false;
}

function PosQrDiv() {
    jQuery('#newmessage').css('top', window.innerHeight - QrOpenTop);
}
document.body.onresize = PosQrDiv;

jQuery(document).ready(function ($) {

    //Delete條咖啡色Menu bar
    jQuery('table table > tbody > tr:eq(1)').remove();

    //Delete 高登 Logo
    jQuery('table > tbody > tr:eq(1) table > tbody > tr:eq(0)').remove();

    //Remove 討論區守則
    jQuery('div.DivBoxContainer').remove();

    //Fix Helianthus.annuus Message template dialog size.
    jQuery('#ctl00_ContentPlaceHolder1_QuickReplyTable select:eq(2)').live("click", function () {
        if (jQuery('.an-forum').css('display') != 'none') {
            jQuery('div.an-forum').css('margin-top', -400);
            jQuery('#an-snippets').css('height', window.innerHeight - 100).css('overflow', 'scroll');
            jQuery('#an-snippets > div:eq(0)').css('float', 'left');
            jQuery('#an-snippets > div:eq(0) > input:eq(0)').css('width', '400px').css('float', 'left');
            jQuery('#an-snippets > div:eq(0) > textarea:eq(0)').css('width', '600px');
        }
    });

    //Fix 快速回覆
    jQuery('#newmessage').append("");
    jQuery('#QrStatus').text('hide');

    jQuery('#newmessage').css('position', 'fixed');

    jQuery('#ctl00_ContentPlaceHolder1_QuickReplyTable > tbody > tr > td > table > tbody > tr:eq(0)').css('cursor', 'pointer');
    jQuery('#ctl00_ContentPlaceHolder1_QuickReplyTable > tbody > tr > td > table > tbody > tr:eq(0)').click(function () {
        toggleNMTop();
    });

    jQuery('#ctl00_ContentPlaceHolder1_btn_Submit').live("click", function () {
        jQuery('#newmessage').animate({
            top: window.innerHeight - QrOpenTop
        }, 400);
    });
    PosQrDiv();

    //Fix Helianthus.annuus 頁面闊度
    var width = '80%'; //可設定為auto, 80%, 1000px等
    var maintable = jQuery('table > tbody > tr:eq(3) > td > table:eq(0)');
    jQuery(maintable).attr('width', width);
    jQuery('div.PageMiddleBox', 'table.repliers').css('width', width);
    jQuery('tbody > tr >td', maintable).attr('width', width);

    //放大Menu bar左手邊o的字
    var menubar_left = jQuery('table:eq(4)');
    jQuery('span,a', menubar_left).css('font-size', '16px');
    //加返[返回吹水台]
    jQuery('#ctl00_ContentPlaceHolder1_view_form > div:eq(4)').append("  返回吹水台");
});

2012年1月10日星期二

JavaFX的Free Load/Stress Test Tool - loadUI

因為近期現職公司打算由Shared Hosting搬至自家Server,所以要對幾百個User的Server做Load Test。

整天都在找一個免費,比較易用的Load Test (或者叫做Stress Test)的軟件。
第一時間不用說,上Google Search "Free Load Test Tool",結果都是連去StackOverFlow網站。
另外還找到兩個SQA方面的資源網站 :
Software QA and Testing Resource Center - Load and Performance Test Tools
Software Quality Assurance Testing and Test Tool Resources - Performance Test Tools

試用過多個在Windows上可行的方案,到最後都落空,因為沒有一個"我"認為是稱得上好。
我需要這個軟件的要求很簡單,不是要把Server跑到半死為止,純粹是想在多個(100-200+)的New Session User下的Performance 圖表和Request/Response時間參考數值等等而已,更莫說Disk I/O,CPU loading方面,免費但簡單易用的,就可以。

原以為很多選擇,但原來事情沒這麼簡單...
OpenSTA
首先試用的是OpenSTA
最後更新日期已經是2007年,最後支援Capture & Record模式的IE版本竟然是IE7。
已心知不妙,但即管用一下。程式很累贅 - 有三個元件 : OpenSTA Commander / OpenSTA NameServer / Web Relay Daemon。

奇怪古老的介面,很難接受,但始終我要的是功能吧...新增Http Script,按錄影後,雖然OpenSTA只支援IE7,但沒有IE7的情況下會如常叫出Default Browser - IE9。
IE9會Load入Plugin去Record,但完成的時候,Ops!竟然不能Save或Replay。出現Error Message :
Compiling... NEWSCRIPT.HTP
scl: error (openout), Error Opening NEWSCRIPT.TOF as Output
-Invalid argument

上Google搜尋,很多人有同樣問題,是軟件本身不支援Windows Vista/7/2008,我都懶得去再試。

20120109_222342_000-t.jpg20120109_223349_000-t.jpg

Web Capacity Analysis Tool (WCAT)

WCAT,微軟出品,必屬User Friendly,但竟然是Command Line軟件,沒有官方的GUI,原因我估都是因為Visual Studio有Team System / Test Editon的Application Center Test (ACT)做Load Test,不想搶去自己的客人吧?

雖然有人寫了WCAT Fiddler Extension,但是沒有用的。看看下圖,我實在不知怎樣搞。
WCAT Performance test didn't produce output file

20120109_224529_000-t.jpg
但我沒有放棄,因為我對微軟有信心。唯有從Command Line入手。
找到個教學網站和Doc:
Stress testing with Microsoft Web Capacity Analysis Tool (WCAT)
WCAT 6.3 Documentation

我花了幾小時,依然搞不到一個Test,需要人手去修改兩個Script Files - home.ubr/settings.ubr,感覺上就是差一點點就搞定,但總之失敗,再次放棄。

JMeter
這個名字叫JMeter的軟件,在SOF上,很多人推薦
Apache官方出品,但程式使用上是極度困難,需要花時間學習。
網上教學是幾多的 - http://www.google.com/search?q=jmeter教學
我順著以下幾個教學相互補短,亦可以執行到Test。
Apache jmeter 2.3教學
JMeter 使用入門 -- HTTP Request
Stress Testing your website with Apache jMeter

但出來的Graph,怪怪的,而且運行後,我的電腦接近癱瘓。
Image-39-t.jpg

Fiddler2+StresStimulus

這個就開始像樣,支援100個virtual users及Input Field的Parameter,換句話說,你可以用它的Parameterization功能去Fill Form/Post Form,這個是很重要的,例如要測試一個搜尋頁面,需要自動化輸入關鍵字已經是一個好例子。
但依然有很多限制 - Free and Pro Editions Comparison Chart

20120109_230747_000-t.jpg20120109_230943_000-t.jpg

loadUI
到最後試用的是這個名字叫loadUI的軟件,官方網頁裡頭的介紹 - What is loadUI? 是這樣說的:

loadUI is a open source Load Testing solution that is free and cross-platform.
With a visual, drag-and-drop interface, it allows you to create, configure and redistribute your Load Tests interactively and in real-time.

It supports all the standard protocols - from HTTP(S), HTML, SOAP/WSDL and REST to AMF, JDBC, JMF and POX.

In a single test environment, loadUI provides complete test coverage, including Web Load Testing, Automated Testing, Stress Testing, and more.

很利害的介紹,安裝的時候,竟然要求我電腦安裝JavaFX!?我第一次使用軟件要安裝JavaFX,正好見識一下,好喇,要就安裝喇。
之後Double-Click short-cut,雖然等了幾十秒介面才出來,但GUI十分漂亮。經歷之前幾次的失敗,還是使用上才是最重要。

軟件幾易用,很簡單就可以搞到一個Stress Test,配合同公司免費的soapUI可以一併做automated test。暫時未試到有太大限制,值得一用。
本身有Sample Project已經是做HTTP Load Test,所以幾乎你開啟軟件後,改一改設定,已經可以立即使用。
老實說,JavaFX給我幾大驚喜,之前幾乎沒接觸過JavaFX的軟件。

loadUI-Image-001-t.jpgloadUI-Image-002-t.jpg

到最後我決定會用Fiddler2+StresStimulus和loadUI互補地使用,但後者是比較值得去研究一下的。

其實我見到有部份Blog友說用SeleniumWatin這類Automation Test軟件做Stress Test,但其實是很不同的。一直我說的New Session User以及模擬真正的Browser就是原因。

可以看看這裡的說法:
How do You Stress Test Your Web Application?

WatiN
This tool isn’t really intended as a stress test tool. It’s primary use is for UI testing. It provides a nice API to launch and operate Firefox and IE so that you can write C# UI tests. However by launching multiple instances one of my correspondents has been successfully using it for stress testing. I guess my main question would be, how much hardware I would need to run enough instances of Firefox or IE to simulate high loads.

Selenium Grid
Selenium is another UI test tool, similar to WatiN. It’s what I use for UI based tests. Selenium Grid allows you run to many Selenium tests in parallel. Once again, it’s primary design goal is to aid UI integration build tests, but there’s no reason you couldn’t use it run stress tests.

Selenium 2 has merged in WebDriver which can drive the headless browser HtmlUnit (see below), this might mean that sufficiently high loads can be driven from minimal hardware.