[攝影] 給新手的幾點建言(二):幾個「要」

December 13th, 2008 Phanix

轉自冼鏡光老師的 blog,我覺得寫得很好。請自己過去看原文吧。

出來跑,總是要還的…

December 12th, 2008 Phanix

前一陣子熬夜熬太大,好不容易把報告交出去之後,這兩天開始在還債了… zzz

無聊來放一張鴨子(?)圖好了… XD
R0014829 (by Phanix)

拉花作品 My Latte Art

December 11th, 2008 Phanix

前一陣子發現原本買的二手 espresso machine 的 boiler 有裂會漏水,修理的價錢實在太貴,所以就從 ebay 上頭再找了一台來替代。

新來的這台機器還不錯,壓力也足夠可以拿來打奶泡,只是仍不夠細緻,但可以打出流動性高的奶泡是件好事情,這樣要作拉花(Latte Art)就容易許多,或許下一次可以拿這機器上的蒸汽打泡跟原本用的 frother 比較一下。

另外,比較遺憾的是這台機器水流比較大,所以原本的咖啡粉就顯得太粗,煮出來的咖啡就沒什麼 crema ,拉花出來的顏色對比就弱些而沒那麼好看,下次買咖啡豆大概是好一陣子之後的事情了。下面兩張是最近弄出來的作品…

Latte Art (by Phanix)

Latte Art (by Phanix)

初戀 by 島崎藤村 (from 神之雫 vol. 14 & 15)

December 10th, 2008 Phanix

中文翻譯(我覺得翻譯得很好)
========================================
在妳輕撥額前瀏海時
我在蘋果樹下看妳
至今我仍然想念著
頭上插著小花裝飾的妳

溫柔地伸出白色的手
把蘋果交給我
這淡紅的秋天果實
開始了初戀的甜蜜

我的心在嘆息
妳的頭髮令我著迷
妳在快樂的初戀酒杯裡
倒進柔情

蘋果園的果樹下
蜿蜒的小路
有被誰人踏進的痕跡
我在心底呼喚著妳

日文原文
========================================
まだあげ初《そ》めし前髪《まえがみ》の
林檎《りんご》のもとに見えしとき
前にさしたる花櫛《はなぐし》の
花ある君と思ひけり

やさしく白き手をのべて
林檎をわれにあたえしは
薄紅《うすくれなゐ》の秋の実に
人こひ初めしはじめなり

わがこゝろなきためいきの
その髪の毛にかゝるとき
たのしき恋の盃を
君が情け《なさけ》に酌《く》みしかな

林檎畠の樹《こ》の下《した》に
おのづからなる細道は
誰《た》が踏みそめしかたみとぞ
問ひたまふこそこいしけれ

5D MarkII 的錄影

December 8th, 2008 Phanix

1080p HD 真的很威啊~~~

Read the rest of this entry / 繼續閱讀 »

[攝影] 給新手的幾點建言(一):幾個「不要」

December 8th, 2008 Phanix

轉自冼鏡光老師的 blog,我覺得寫得很好。請自己過去看原文吧。

Local Wine Tasting — I

December 8th, 2008 Phanix

A few weeks ago, I join a local wine tasting tour… I may use a few posts to write down this wine tasting experience.
*未成年請勿飲酒*飲酒過多有礙身體健康*
Read the rest of this entry / 繼續閱讀 »

關於 Seattle Central Library

December 5th, 2008 Phanix

之前讓大家看過美麗的Seattle Central Library,這篇就來介紹一下這美麗圖書館。

Read the rest of this entry / 繼續閱讀 »

[Movie] Across the Universe

December 4th, 2008 Phanix

如果說 Wall-E 的劇情是向卓別林致敬,那麼 Across the Universe 就是在跟 The Beatles 致意了。

Read the rest of this entry / 繼續閱讀 »

[Memo] 整理一下最近寫程式用到的東西

December 4th, 2008 Phanix

免得以後要找很麻煩。都是 C# 的程式。

Threading 中作 output 到 textbox 中

delegate void SetTextCallback(TextBox tb, string text);

private void SetText(TextBox tb, string text)
{
    if (tb.InvokeRequired)
    {
        SetTextCallback d = new SetTextCallback(SetText);
        this.Invoke(d, new object[] { tb, text });
    }
    else
    {
        tb.Text = text;
    }
}

Extract text in <body> tag

strpage = ""; // Store The HTML Source
strtext = "";

// only fetch text between <body>
ibodystart = strpage.ToLower().IndexOf("<body");
ibodyend = strpage.ToLower().IndexOf("</body>");

if (ibodystart < 0) return;
if (ibodyend < 0) ibodyend = strpage.Length;

// j and k are used to quote text between continous tags
j = strpage.IndexOf(">", ibodystart);

sw = new StreamWriter([FILENAME], false, Encoding.UTF8);

#region filter out html tags, css and scripts, and then just keep plaintext
while (j > 0 && j < ibodyend)
{
    // j and k are used to quote text between continous tags
    k = strpage.IndexOf("<", j);
    
    
    // read text between tags, and store in strtmp
    if (k < 0)
    {
        strtmp = strpage.Substring(j + 1);
    }
    else
    {
        strtmp = strpage.Substring(j + 1, k - j - 1);
    }
    
    
    strtmp = HttpUtility.HtmlDecode(strtmp).Trim();
    
    // concate strtext and strtmp
    if (strtmp != "")
    {
        if (strtext == "")
        {
            sw.WriteLine(strtmp);
            strtext = strtmp;
        }
        else
        {
            sw.WriteLine(" " + strtmp);
        }
    }
    
    // find out next j
    if (k < 0)
    {
        j = -1;
    }
    else
    {
        //check comment
        if (strpage.Substring(k).Length <= 7)
        {
            j = -1;
        }
        else if (strpage.Substring(k, 4) == "<!--")
        {
            j = strpage.IndexOf("-->", k);
            if (j >= 0)
            {
                j = strpage.IndexOf(">", j);
            }
        }
        else if (strpage.ToLower().Substring(k, 7) == "<script")
        {
            j = strpage.ToLower().IndexOf("</script>", k);
            if (j >= 0)
            {
                j = strpage.IndexOf(">", j);
            }
        }
        else if (strpage.ToLower().Substring(k, 6) == "<style")
        {
            j = strpage.ToLower().IndexOf("</style>", k);
            if (j >= 0)
            {
                j = strpage.IndexOf(">", j);
            }
        }
        else
        {
            j = strpage.IndexOf(">", k);
        }
    }
}
#endregion

sw.Close();

Execute the other .exe with parameters from command line (without showing the window). This example uses WordNet.

Process p = new Process();
string strwn1, strwn2;

#region Call wn.exe for wordnet hypernym
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;

// word 1
p.StartInfo.FileName = @"C:\Program Files\WordNet\2.1\bin\wn.exe";
p.StartInfo.Arguments = @"" + w1 + " -hypen"; // w1 is a word

p.Start();

strwn1 = p.StandardOutput.ReadToEnd();

p.WaitForExit();

// word 2
p.StartInfo.FileName = @"C:\Program Files\WordNet\2.1\bin\wn.exe";
p.StartInfo.Arguments = @"" + w2 + " -hypen"; // w2 is the other word

p.Start();

strwn2 = p.StandardOutput.ReadToEnd();

p.WaitForExit();

#endregion