2011年2月20日星期日

轉貼:在facebook上勤力書寫的人們究竟希望得到些什麼?

自從有了facebook,我們前所未有地關心自己的生活細節,並且主動貼上每一個自以為有意義的瞬間,然後像上了癮一樣靜候一衆“朋友”的回應,即使別人僅給我們一個“讚”,我們都會覺得這就是無比的認同,於是我們會把平時不會宣之於口的觀點和情緖,例如“我好憎你”、“xxx快點去死吧”、“我老闆眞賤”等毫無保留地貼上facebook。

當然也有人生活平淡無奇,但卻希望在facebook的生活可以多姿多采,他們以為用數量可以彌補質量,於是無時無刻都在報道自己的情況,不停貼上“食早餐中”、“現在很飽”、“巴士好多人”、“患了感冒,非常辛苦”、“今日吃了兩隻荷包蛋”、“剛才的士司機居然肯找錢比我”、“做了一日奴隸,累極了”,全無節制,眞情流露,看來要把自我無限放大,又似乎想引來更廣泛的關注。

還有一種留言連生活報道也欠奉,僅能描述一些自然現象,例如“好大雨呀”、“猛烈的陽光令人心情很好”、“天寒地凍,宅在家中”、“窗外的霧令我如置身仙境”,印證了把一個事實重複講一次,即可加強其影響力或殺傷力的奇妙想法,但我們都不會探究這些留言的意義。

也許,在這個人人都用網絡把生活切割成許多個瞬間的年代,沒有意義才是眞正的意義所在。

在開始用facebook的時候(留意我是說“用”,不是說“玩”),我曾經考慮過像經營專欄或網誌一般,認眞選擇題材,確保文章具有可讀性,我甚至嘗試把那個以“寂然”命名的facebook戶口經營成文學交流的平台,可是不久之後,某些跟我在現實中認識的“讀者”就跑來問我:你為什麼總是把 facebook的動態寫得那麼長/認眞/嚴肅呢?我們都沒有心思看這些東西,你總是寫一大段會令我們看得很“辛苦”。

我向來尊重別人的意見,也明白在網上一旦認眞你就輸的眞理,所以早已停止試驗,並且跟大家一樣會不時貼出一些很“生活化”的留言,但身為一名專欄作者,我總是不明白這個年代那些在facebook上勤力書寫的人們究竟希望得到些什麼?

也許,這情況只能套用一句網上的經典留言套語來形容:哥留的不是言,是寂寞啊!

只係供需關係
完美撮合左炫耀者與偷窺者

轉自:http://forum6.hkgolden.com/view.aspx?type=BW&message=2860680

2011年2月18日星期五

Windows 7 SP1可以下載了!

今天在MSDN Subscriptions已經可以Download,不過我自己會等待Visual Studio 2010 SP1和IE9 正式版出了之後才一起安裝。
貼一下相關資料 :

多國語系Service Pack (更新程式) (包括英文/香港中文版/台灣中文/簡體中文 + 32Bit/64Bit)
Windows 7 and Window Server 2008 R2 Service Pack 1 (x86 and x64) - DVD (Multilanguage)
File Name: mu_windows_7_and_windows_server_2008_r2_sp1_x86_x64_dvd_619642.iso
Date Published (UTC): 2/16/2011 9:14:42 AM Last Updated (UTC): 2/16/2011 9:14:42 AM
SHA1: F2ABA1102E18EAD08C78527AB422C09AB7D1F54C ISO/CRC: B07748AE

香港/台灣/簡單中文未見有Windows 7 SP1整合版...

英文版:
Windows 7 Enterprise N with Service Pack 1 (x64) - DVD (English)
File Name: en_windows_7_enterprise_n_with_sp1_x64_dvd_620165.iso
Date Published (UTC): 2/16/2011 8:52:41 AM Last Updated (UTC): 2/16/2011 8:52:41 AM
SHA1: CF70CABACE3E14D68C5A6EAC9A4F024E54DD7864 ISO/CRC: F0694A1B

Windows 7 Enterprise N with Service Pack 1 (x86) - DVD (English)
File Name: en_windows_7_enterprise_n_with_sp1_x86_dvd_620372.iso
Date Published (UTC): 2/16/2011 8:52:41 AM Last Updated (UTC): 2/16/2011 8:52:41 AM
SHA1: 2503686DC539E5C1DCEED3A1736BE5D154131155 ISO/CRC: 56633EBE

Windows 7 Ultimate with Service Pack 1 (x64) - DVD (English)
File Name: en_windows_7_ultimate_with_sp1_x64_dvd_618240.iso
Date Published (UTC): 2/16/2011 8:50:21 AM Last Updated (UTC): 2/16/2011 8:50:21 AM
SHA1: 1693B6CB50B90D96FC3C04E4329604FEBA88CD51 ISO/CRC: 8589EE18

Windows 7 Ultimate with Service Pack 1 (x86) - DVD (English)
File Name: en_windows_7_ultimate_with_sp1_x86_dvd_619077.iso
Date Published (UTC): 2/16/2011 8:50:22 AM Last Updated (UTC): 2/16/2011 8:50:22 AM
SHA1: 92C1ADA4FF09C76EC2F1974940624CAB7F822F62 ISO/CRC: C2966895

2011年2月15日星期二

Rapidshare/HotFile/FileServe/Megaupload下載檔案不用等

近期由於玩Wii模擬器關係要找很多"Wii檔案",而"Wii檔案"閒閒地都4GB,很多都要經免費空間下載,但大家都知免費空間很多限制,所以用JDownloader都無補於事。

如下圖,MegaUpload每天只可以限制同一IP下載三個檔案,用JDownloader的已經全軍覆沒,但用這些Generator就可以下載了。


所以上網找到幾個Premium Generator,我自己試過100%Work,操作大同小異,貼上連結,等一會就可以下載。

rapid8.com
這個支援最多空間,但要按一次強制性廣告。

LinkToPremium
這個每60分鐘可以下載1GB檔案,但下載速度最快,一般可以達200kb/s。

Megaupload Premium Link Generator
Rapidshare Premium Link Generator
這兩個用是沒問題,但可惜下載速度很慢,當做是後備而已。

2011年2月10日星期四

MSDN Ultimate Subscription Comprehensive Kit

一套微軟寄來的東西,有一般SQL/SharePoint/Windows等等Server系列,Office 2010,Windows 7等等正版碟。
不過紀念性遠高於實用性。

2011年2月4日星期五

Sony Ericsson Xperia X8 Android 2.1 Root機+App2SD教學

用了X8接近4個月,由1.6至2.1我一直都沒有Root機,因為未有需要,但今天見到這個Android VNC Server程式(可以在Windows用VNC Client控制Android),我決定都是Root機了。

整個Root機過程實在很容易,不到一分鐘。我Step-By-Step寫出來吧。

必須條件:
1. .NET Framework 2.0
Windows 7使用者一定有,其他Windows版本可以在這裡檢查 "C:\Windows\Microsoft.NET\Framework" ,看看有沒有"v2.0.50727"資料夾,有的話即是已安裝。
2. Sony Ericsson PC Companion 2.0
安裝這個軟件是因為需要用上它的USB Driver,安裝後,不用理它,關閉它也可以。
3. 修改版SuperOneClick
一個Root機程式,最原始出處於xda-developers.com,你可以下載這個,怕要註冊麻煩的話就用我上傳給你至DropBox的

事前準備:
1. 在手機進入 : 設定->應用程式->開發->開啟USB除錯
2. SD卡不用拔出,Root機不會搞到你的資料。

Root機開始:
1.插上USB線,Windows應該會安裝Driver,等待完成。
2.手機上會出現三個選項,你選第三個"充電模式"
3.開啟下載回來的SuperOneClick,Unzip後打開SuperOneClick.exe,你會見到如下圖。



4. 按Root按鈕,程式會自動運行,直到程式問你做不做一次Test的時候,按Yes,等一下,搞定!
5. Reboot你的手機,看看你手機是不是多了一個叫Superuser的程式,是的話,大功告成。

至於App2SD的教學可以看看台灣網友的X8 2.1 Root(已有一鍵Root) + APP2SD,Step-by-Step 你也會

2011年2月2日星期三

Dynamic CheckBox Control 取值技巧

正所謂"人類不斷犯重覆的錯誤",今天我工作上在搞一些Dynamic Control就剛好可以套用給自己。
自問對如何把玩Dynamic Web Control,Page Life Cycle是怎樣,如何重構Controls和ViewState都很了解。
但奈何今天敗在一個CheckBox Control下,花了我半天才搞定,所以在Blog上做一個記錄和分享。

而遇到的問題就是,
在同一個Form內,PostBack後,所有動態Control都存取都正常,唯獨是任何CheckBox Controls的Checked屬性一直都是False。

搞了一段時間後,我決定由最原始的方式 Request.Form 的方式,去找出問題在那裡。
或者這樣說太抽象,先看看Source Code和Screen Shot。

Markup 方面很簡單,一個Button,一個PlaceHolder。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body style="font-family: Tahoma; font-size: 11px;">
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="btnAdd" runat="server" Text="Add CheckBox" OnClick="btnAdd_Click" />
        <asp:PlaceHolder ID="PlaceHolder1" runat="server" />
    </div>
    </form>
</body>
</html>
再來是Source部份,留意Line:62 & 63 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class test : System.Web.UI.Page
{
    protected int NumberOfControls
    {
        get { return (int)ViewState["ControlCount"]; }
        set { ViewState["ControlCount"] = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
            NumberOfControls = 0;
        else
            RecreateControls();
    }

    protected void btnAdd_Click(object sender, EventArgs e)
    {
        CreateControls(this.NumberOfControls);
        this.NumberOfControls++;
    }

    private void CreateControls(int i)
    {
        CheckBox chk = new CheckBox();
        chk.ID = "chk" + i.ToString();

        Label lbl = new Label { ID = "lbl" + i.ToString(), Text = "
Index : " + i.ToString() };

        PlaceHolder1.Controls.Add(lbl);
        PlaceHolder1.Controls.Add(chk);
        PlaceHolder1.Controls.Add(new Literal { Text = "
" });
    }

    private void RecreateControls()
    {
        int count = this.NumberOfControls;
        for (int i = 0; i < count; i++)
            CreateControls(i);

        int idx = 0;
        for (int x = 0; x < PlaceHolder1.Controls.Count; x++)
        {
            Control ctl = PlaceHolder1.Controls[x];

            if (ctl is Label)
            {
                Response.Write(((Label)ctl).Text);
            }
            else if (ctl is CheckBox)
            {
                Response.Write(" Checked : "
                + ((CheckBox)ctl).Checked.ToString() + " | "
                + Request.Form["chk" + idx.ToString()] + "
");
                idx++;
            }
        }
    }
}

得出來的結果如下圖 :



使用((CheckBox)ctl).Checked.ToString()輸出是False,但Request.Form找取Value卻是"on",最奇怪就是用IE的Deveper Tool看一看文件,明明真的有CHECKED="checked",換句話說,ASP.NET的CheckBox Control在勾選或取消勾選雖然會變更Client-Side Value和Checked屬性,但不會更改Control States的Checked的屬性,這就是問題的根源,於是我立即想起沒有PostBack的原故。

那如何解決呢? 很簡單,就是把CheckBox的AutoPostBack設成True,再在CheckedChanged的Event加上Event Handler就可以了。



整理後的Source :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class test : System.Web.UI.Page
{
    protected int NumberOfControls
    {
        get { return (int)ViewState["ControlCount"]; }
        set { ViewState["ControlCount"] = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
            NumberOfControls = 0;
        else
            RecreateControls();
    }

    protected void btnAdd_Click(object sender, EventArgs e)
    {
        CreateControls(this.NumberOfControls);
        this.NumberOfControls++;
    }

    private void CreateControls(int i)
    {
        CheckBox chk = new CheckBox();
        chk.ID = "chk" + i.ToString();
        chk.AutoPostBack = true;
        chk.CheckedChanged += CheckedChanged;

        Label lbl = new Label { ID = "lbl" + i.ToString(), Text = "
Index : " + i.ToString() };

        PlaceHolder1.Controls.Add(lbl);
        PlaceHolder1.Controls.Add(chk);
        PlaceHolder1.Controls.Add(new Literal { Text = "
" });
    }

    private void CheckedChanged(Object sender, EventArgs e)
    {

    }

    private void RecreateControls()
    {
        int count = this.NumberOfControls;
        for (int i = 0; i < count; i++)
            CreateControls(i);

        int idx = 0;
        for (int x = 0; x < PlaceHolder1.Controls.Count; x++)
        {
            Control ctl = PlaceHolder1.Controls[x];

            if (ctl is Label)
            {
                Response.Write(((Label)ctl).Text);
            }
            else if (ctl is CheckBox)
            {
                Response.Write(" Checked : "
                + ((CheckBox)ctl).Checked.ToString() + " | "
                + Request.Form["chk" + idx.ToString()] + "
");
                idx++;
            }
        }
    }
}