2008年12月24日 星期三

[筆記] SQLite 加密?

使用ADO.NET 2.0 Provider for SQLite,在Visual Studio中建立連線時,可以設定密碼。

而我發現設定密碼之後產生的.sqlite資料庫(檔)用ultraedit開啟,會變成一篇亂碼,原本的sqlite檔頭不見了,應該是用password當做加密字串來處理過內容了吧。

但是麻煩的是,設定password產生的資料庫,無法使用其他sqlite工具來開啟,因為檔案內容無法被這些工具辨識的關係。

或著是,這是ADO.NET 2.0 Provider for SQLite僅有的規格?

[筆記] SQLite 如何選取前幾筆的資料

像TSQL有選取前幾筆的語法:

select top n,如:

select top 100 * from table1 order by column1

而SQLite選取筆數的語法為:

在語法最後加上 limit n,如:

select * from table1 order by column1 limit 100
延伸閱讀: How to optimise queries to limit the number of rows returned...

[筆記]如何將datetime型的變量存入sqlite中

因為sqlite的時間是用標準時間utc+0,要改為localtime

insert (update_time) values (datetime(CURRENT_TIMESTAMP,'localtime'))

另外關於sqlite的時間函數,可以參考:

編程資料:SQLite的日期時間函數!

官方wiki文件

 

參考來源: c#中如何將datetime型的變量存入sqlite中型的變量存入

2008年12月22日 星期一

Google Talk的翻譯服務

這也不是新玩意了,只是我最近才發現。

下面列述: http://googletalk.blogspot.com/2007/12/merry-christmas-god-jul-and.html

For more languages, just add any of the 29 23 other translation bots. They're named using two-letter language abbreviations as "[from language]2[to language]@bot.talk.google.com", and the supported language pairs are: ar2en, de2en, de2fr, el2en, en2ar, en2de, en2el, en2es, en2fr, en2it, en2ja, en2ko, en2nl, en2ru, en2zh, es2en, fr2de, fr2en, it2en, ja2en, ko2en, nl2en, ru2en, zh2en. So, for French to German translation, talk to fr2de@bot.talk.google.com.

於是我一口氣加了好幾個進來我的gmail talk…

2008-12-22_141423
2008-12-22_141433

有這樣方便的工具,多少能幫助快速閱讀一些文章吧XD

2008年12月18日 星期四

GMail阻擋附件的條件

剛剛心血來潮試了一下,作了個小實驗:

  1. 用空白的文字檔(0 kb),檔名最後加".exe",寄給自己的gmail。
  2. 將一般的執行檔後面的".exe"去掉,寄給自己的gmail。

結果是附件有exe字串的信件被退回來了(實驗1),而真的執行檔可以正常的被gmail收下(實驗2)。

成功  失敗

這個是Gmail指出的阻擋條件: Some file types are blocked

只要是附件用".exe"結尾的,或是有".exe"結尾的檔案包在常見的壓縮檔裡面(.zip, .gz, .tar...etc.)(不包括rar, 7z),都會被退回。

這樣簡單的規則也不錯,以後要寄程式(".exe")給自己備份的話,壓成zip後把".zip"給去掉,應該就不會被退回了。

2008年12月17日 星期三

使用TortoiseSVN的筆記

排除已經加入版本控制的檔案

原文: Ignore files which are already versioned 圖: 2008-12-17_163844
  1. 步驟: 選取已經版控的檔案組,按住shift後在上面點滑鼠右鍵,用TortoiseSVN > 刪除並保留檔案。
  2. SVN送交,即可保留本機端檔案並刪除Repository端檔案。
  3. 記得把這些檔案加入忽略列表,以免下次又發生同樣的蠢事。

2009.01.15更新 這個shift+滑鼠右鍵,可能只能用在explorer(也就是檔案總管),其他的類檔案總管程式可能無效。

2008年12月10日 星期三

綠色版光影魔術手0.28版的一些問題

光影魔術手算是一個不錯用的影像修編軟體,但由於後來改為收費軟體(shareware),雖然在網路上可以找到一些綠色版的,看起來應該是由玩家自行改編過的安裝檔,但好像某些版本會有一些問題。

以0.28版繁中免安裝版來說,列出兩個: 阿榮版 | easylife版 (後面有新版連結)

原先我是抓阿榮版的來用,後來發現,為什麼第二次執行的時候,總是會出現亂碼的安裝畫面,一看就知道應該是簡體安裝檔編碼無法正常顯示的問題。昨天心一橫就想把問題找出來。 2008-12-10_103004

比對之後,果然程式第一次開啟後,發現有安裝檔被自動下載,藏在某個地方… 2008-12-10_102900

因為程式裡面也沒有設定的可以取消更新,只有一個有時會跳出來的更新提示對話方塊,我已經把它改為最大值99天再通知了。於是把試著用xp sp2內建的防火牆,把光影魔術手擋掉,但是我發現沒有用,即使已經擋掉了 ,它還是可以連上到它的伺服器用ftp下載(記得好像是)… 2008-12-10_105157 2008-12-10_105416

所以第二次開光影魔術手的時候,就會出現上面那個簡體安裝的亂碼對話方塊,要解決是有辦法,就是每次都去刪除data目錄,再執行程式就不會出現安裝畫面了。但是這不是治本的辦法啊!!

然後我就上網google,看有沒有人發現一樣的問題,後來找到easylife版(下面有新版),抓下來解壓執行後,發現就沒有這個問題,不會背地裡偷偷下載安裝檔,所以我就決定改用這個版本了。

Update at 2009.03.03 :

  • 感謝阿福提供: 光影魔術手0.297 免安裝版
  • 感謝匿名提供方法: 想要使用舊版本且避免自動更新的方法也有,刪除或更名光影資料夾底下的「niUtils_x5.dll」檔案就可以了。

2008年12月9日 星期二

搜尋並下載各類產品手冊

昨天看到這一篇: Jackbin 的懶人筆記: 可以幫您搜尋與下載各種物品使用手冊的網站 ,想到公司的那台Canon 5D,我一直都不知道怎麼在手動模式下調整光圈,Nikon用戶碰Canon機器真是一整個不習慣 XD

於是就用http://tw.diplodocs.com/搜尋了一下5D的說明書,不錯馬上就找到我要的了。

2008-12-09_145900

可惜手上沒有機器可以試,不過我想應該是沒錯的吧!~

這網站還真方便。

2008年12月4日 星期四

CSS Selector/Hack Tips

今天在寫CSS發現ie很多很不合群的地方,雖然以前就知道它很擺爛了。所以google了一些可能會用的到的CSS Hacks做做筆記。

IE 6 and below (以下)

* html selector{} 

IE 7 only

 *:first-child+html selector{} 

IE 7 and below

*:first-child+html selector{} 
* html selector{} 

IE 7 and modern browsers only

html>body selector{} 

Modern browsers only (not IE 7)

html>/**/body selector{} 

Recent Opera versions 9 and below

html:first-child selector{}

 

另外有人提出下面這個方法,只能在ie有效:

語法: +property: value

範例:

* {  
   font-size: 1.5em; /* 通用 */   
   +font-size: 2em; /* only IE */
}

2008年11月28日 星期五

Windows Live Writer獨立安裝版

2008-11-28_115859

看起來是年中就發佈的版本,比我原有的Build 12.x版還要新。

重點是它解決了一個問題,在原始碼裡面用<pre></pre>標籤時,切換畫面檢視時,<pre>裡面的換行會全被拿掉,內容會變成單一行。害我每次都得在發佈完文章後,再上blogger編輯文章手動斷行。

這個版本就沒這個問題囉,這樣用的比較順手多了。

另外還改了一些小細節,像是切換檢視的熱鍵。

下載點

獨立安裝檔

 

延伸閱讀: Technical Preview: Now Available for Download

2008年11月27日 星期四

在Blog顯示圖片的工具 – jQuery.Lightbox

2008-09-25_125706

以前在逛網頁的時候,有印象看過這類的顯示方式,昨天心血來潮,查到了這個工具的名稱: Lightbox,並且下載來套用在自己的blog,讓它可以更痴肥一點。

這邊我前後試了兩種Lightbox:

  1. 一種是原始的,目前到第2版。
  2. 一種是使用jQuery實作的Lightbox,目前到0.5版。

原先我是先裝了第一種,全都設定好之後發現好像無法work,看一下原始碼跟開了jash來debug才發現,跟我原本已經掛上的jQuery好像有衝突,它的prototype.js用到了$這個名稱。

於是我又上網找,就發現了第二種這個jQuery-lightbox,而這個版本所需script檔更少更小(第一種版本光script檔就要5個,加一加是200kb;而第二種版本只要一個script檔,而且只要10kb,當然前提是要先掛好jQuery)。

下載點

jQuery Lightbox最新版

安裝方法

將壓縮檔內的相關檔案(jquery.lightbox.min.js, images, css)都上傳到你自己的網頁空間(如Google Pages)後,在你的blog的html範本檔中header內加入:

<script type="text/javascript" src="jquery.js"></script>
<script type=”text/javascript” src=”lightbox.js”></script>
<link rel="stylesheet" href="lightbox.css" type="text/css" media="screen" />

上面檔案的位置請改為對應存放的網址。

然後,在你的script最後加上:

//for jQuery.lightbox 
$(function() {
    $(".lightbox").lightbox({fitToScreen: true});
});

使用方法

單張圖片: 在a 標籤裡加上 class="lightbox",如 :

<a ref="lightbox" href="http://lh4.ggpht.com/_K5qAbjq2xng/SJnKnk_0PnI/AAAAAAAAAi8/tuMeoYC8ElA/s800/20080803234.jpg">My Photo</a>

範例: My Photo

一組圖片: 除了class="lightbox"外,在要顯示的a 標籤裡加上rel="groupname" ,groupname為這組要顯示的圖片組名。注意! 是rel 不是ref 哦…(謎之聲:誰會跟你一樣笨啊!!…囧rz)

<a href="photo1.jpg" class="lightbox" rel="2008112701"><img src="photo1.jpg"/></a> 
<a href="photo2.jpg" class="lightbox" rel="2008112701"><img src="photo2.jpg"/></a> 
<a href="photo3.jpg" class="lightbox" rel="2008112701"><img src="photo3.jpg"/></a>

範例: | |

另外可以用title這個屬性來決定相片的標題。

[Visual Studio]在Properties.Settings裡面使用Hashtable或Dictionary的方法

其實這算是一種折衷的方法,並不是真的建立Hashtable/Dictionary在Properties裡面。

我自己試過的結果,在Properties.Settings.Default裡面雖然可以建立Hashtable(沒法建立Dictionary),但是在程式裡面去讀取這個Hashtable會出現Exception,因為這個型別並沒有被初始化及讀取user.config的值,不像其他Properties.Settings.Default其他型別的值都會自動被建立並初始化讀取user.config的值,所以沒法使用。(至少我不知道如何用)

最後在網路查到使用的方法,就是先將Hashtable/Dictionary的值序列化成XML字串,再用string型別把值塞到Properties.Settings.Default裡面。

讀取出來也是一樣,先讀出string的值,將string反序列化,將值寫回指定的Hashtable/Dictionary。

下面是Source Code參考:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml.Serialization;

namespace Neil.Tools
{
    public class XMLSerializing
    {
        //這邊可以改寫為擴充方法
        /// <summary>
        /// 將Dictionary轉為字串。
        /// </summary>
        /// <typeparam name="T1">Key型別,通常為string</typeparam>
        /// <typeparam name="T2">Value型別,通常為string</typeparam>
        /// <param name="d">來源Dictionary</param>
        /// <returns>傳回轉換後字串</returns>
        public static string ToDictionaryString<T1,T2>(Dictionary<T1, T2> d)
        {
            if (d.Count == 0)
            return "";
            
            StringBuilder sb = new StringBuilder();
            StringWriter sw = new StringWriter(sb);
            Serialize(sw, d);
            return sb.ToString();
        }


        //這邊可以改寫為擴充方法
        /// <summary>
        /// 將string轉回Dictionary
        /// </summary>
        /// <typeparam name="T1">Key型別,通常為string</typeparam>
        /// <typeparam name="T2">Value型別,通常為string</typeparam>
        /// <param name="value">XML格式的文字字串</param>
        /// <returns>傳回Dictionary<T1,T2></returns>
        public static Dictionary<T1, T2> ToDictionary<T1,T2>(string value)
        {
            Dictionary<T1, T2> d  = null;
            try
            {
                d = new Dictionary<T1, T2>();
                StringReader sr = new StringReader(value);
                Deserialize(sr, d);

                if (d.Count == 0)
                    return null;
            }
            catch
            { }

            return d;
        }

        public static void Serialize(TextWriter writer, IDictionary dictionary)
        {
            List<Entry> entries = new List<Entry>(dictionary.Count);
            foreach (object key in dictionary.Keys)
            {
                entries.Add(new Entry(key, dictionary[key]));
            }

            XmlSerializer serializer = new XmlSerializer(typeof(List<Entry>));
            serializer.Serialize(writer, entries);
        }

        public static void Deserialize(TextReader reader, IDictionary dictionary)
        {
            dictionary.Clear();
            XmlSerializer serializer = new XmlSerializer(typeof(List<Entry>));
            List<Entry> list = (List<Entry>)serializer.Deserialize(reader);

            foreach (Entry entry in list)
            {
                dictionary[entry.Key] = entry.Value;
            }
        }

        public class Entry
        {
            public object Key;
            public object Value;

            public Entry()
            {
            }

            public Entry(object key, object value)
            {
                Key = key;
                Value = value;
            }
        }
    }
}

而轉換為XML字串的Dictionary會像下面這種內容存儲在user.config:

<setting name="ListViewColumnsOrder" serializeAs="String">
                <value>&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;ArrayOfEntry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
  &lt;Entry&gt;
    &lt;Key xsi:type="xsd:string"&gt;lvQueryPatient&lt;/Key&gt;
    &lt;Value xsi:type="xsd:string"&gt;0,1,2,3,4&lt;/Value&gt;
  &lt;/Entry&gt;
  &lt;Entry&gt;
    &lt;Key xsi:type="xsd:string"&gt;lvQueryStudy&lt;/Key&gt;
    &lt;Value xsi:type="xsd:string"&gt;0,1,2,5,3,4&lt;/Value&gt;
  &lt;/Entry&gt;
&lt;/ArrayOfEntry&gt;</value>
            </setting>

 

延伸閱讀: XML Serializing a Hashtable or generic Dictionary

延伸閱讀: Storing a hashtable in the .config file?

2008年11月26日 星期三

MSN(Windows Live)email帳號無痛轉移

剛剛在網路上看到的資訊,這邊也把自己實作的流程分享出來。

無痛轉移的意思,是因為原本msn是使用email來當作個人的帳號,如果有些人想要把年久不用的email信箱(像我的yahoo),改成比較有在用的email當作帳號,就得註冊使用新的email來註冊一個新windows live帳號,然後麻煩的是一堆msn裡的好友名單就得重加,如果有上百個就頭大了…

然而,windows live的帳戶現在提供你轉換(更改)帳戶的email,也就是msn會使用到的登入帳號,而其他的資訊都還是保存著,這真是給使用者一個方便。

  1. 首先到下面這一頁登入:

    https://account.live.com/SummaryPage.aspx?mkt=zh-tw

    2008-11-26_094113

  2. 接下來在你的email旁邊會看到一個變更,點下去。

    2008-11-26_094305 

  3. 在下面選擇並輸入新的email,確定沒有人使用這個email,就可以點儲存

    2009-10-09_105140

  4. 之後再完成驗證的動作,就完成email修改的動作了。

    2008-11-26_094722

延伸閱讀: 輕鬆更換MSN帳號 不怕大家忘了你!

2008年11月20日 星期四

滑鼠右鍵選單的管理

首先來講到Regedit這個部份,以我的[工具]複製檔案/目錄路徑為例,這裡直接使用登錄檔建立自己的選單。

在HKEY_CLASSES_ROOT\AllFilesystemObjects這個機碼裡面,表示關聯所有系統檔案物件。而shell 或shellex就是在explorer下,對這類物件按右鍵會對應到的功能or選單。

通常shellex裡面,都直接對應到指定的COM元件,通常看到的資料值都是一串串的GUID。

在shell下,如果要把不用的選單隱藏,只要在該機碼下面新增一個字串值,名稱取為"Extended" 或是"LegacyDisable",值保持空白即可,這樣該選單就不會出現了。

修改前:

2008-11-20_161220 2008-11-20_161240 

修改後:

2008-11-20_161416 2008-11-20_161440

而shellex下,如果是對應到GUI的選單,將它的資料值修改一下,例如"前面加一些-----",就可以隱藏了。

這邊用常見的"傳送到(N)"為例。

修改前: 2008-11-20_161727    

修改後: 2008-11-20_161820 2008-11-20_161849

瞧,"傳送到"就不見了。

要復原的話,就把上面修改過的內容改回來即可正常。

比較懶的人,可以直接選擇使用一些小工具來修改:

Glary Utilities 2.8.0.366 阿榮版

ShellExView

ShellMenuView

來源參考: How to Clean Up Your Messy Windows Context Menu

2008年11月18日 星期二

[工具]複製檔案/目錄路徑

說明

這是我用寫的一個簡單的script,用於複製目前檔案選取的檔案/目錄的絕對路徑。

在檔案總案上面的目錄/檔案按滑鼠右鍵,選"複製選取的路徑",就會把檔案的絕對路徑複製到剪貼簿,並跳出對話方塊顯示"複製成功"的訊息,在1秒鐘後自動關閉。

這邊使用AutoIt而不用AutoHotKey的原因,因為AutoIt v3有支援Unicode,而AutoHotKey沒有,有機會遇到一堆???。而系統檔案這東西,偶爾會遇到Unicode。(謎之音A: 還不是因為某人AutoHotKey不熟...)(謎之音B: 這種一兩行而已的東西…)

Screenshot

2008-11-18_141712 2008-11-18_141736

AutoIt原始碼

If $CmdLine[0] = 1 Then
	$path = $CmdLine[1]
	if ClipPut($path) Then
		MsgBox (0, "路徑複製成功", $path, 1)
	EndIf
EndIf

AutoHotKey原始碼

clipboard = %1%
MsgBox ,,路徑複製成功,%clipboard%, 1

安裝檔下載點 | 原始檔下載點

.reg刪除登錄檔的寫法

給自己的筆記。

刪除登錄機碼:RegistryPath 之前加上連字號 (-),例:
[-HKEY_LOCAL_MACHINE\Software\Test]
刪除登錄值:RegistryKey 使用=-,例:
HKEY_LOCAL_MACHINE\Software\Test
"TestValue"=- 

來源: 如何使用登錄項目 (.reg) 檔案新增、修改或刪除登錄子機碼和登錄值

2008年11月14日 星期五

讓SyntaxHighlighter幫你網誌內的程式碼上色

寫程式又上網google的人,應該常常看到很多網頁或是blog,都會把code依文法上色,或是設計一些css來表現出程式碼的部份。

也有不少線上高亮度語法的服務,讓你貼上原始碼,選好程式語言,就做好html碼給使用者。或是給一段script,在網頁內直接即時產生出code。

今天介紹的是是只要將下載回來的script檔,找個空間放好,再修改一下自己網誌的樣本檔,然後每次要發佈程式碼時,加上對應的name跟class即可。

因為我個人希望的要求是:

  • 在撰寫文章時不會太麻煩,可以直接用簡單的<pre>來區分貼上的程式碼,不用每次都要另外找線上服務來轉html。
  • 文章從RSS發佈出去,能看到正常的內容即可。像一些用script即時產生方式就不適合,在rss裡面就看不到程式碼。

剛剛把工具設定好了,這邊分享一下我的經驗。

  1. 下載SyntaxHighlighter_1.5.1.rar,然後讀一下Usage
  2. 把下載回來的檔案解壓出來,將裡面Scripts目錄下面的所有檔案,都傳到自己固定的網路空間,這邊我是使用Google Pages。(其實js傳自己會用到的語法就可以。)
  3. 將下面這一段,貼到你的網誌樣本檔的header裡面。
    <link href='http://nio127.googlepages.com/SyntaxHighlighter.css' rel='stylesheet' type='text/css'/>
    <script src='http://nio127.googlepages.com/shCore.js' type='text/javascript'/>
    <script src='http://nio127.googlepages.com/shBrushCss.js' type='text/javascript'/>
    <script src='http://nio127.googlepages.com/shBrushXml.js' type='text/javascript'/>
    <script src='http://nio127.googlepages.com/shBrushPython.js' type='text/javascript'/>
    <script src='http://nio127.googlepages.com/shBrushCSharp.js' type='text/javascript'/>
    <script src='http://nio127.googlepages.com/shBrushJScript.js' type='text/javascript'/>
    <script type='text/javascript'>
    $(function() {
    dp.SyntaxHighlighter.ClipboardSwf = 'http://nio127.googlepages.com/clipboard.swf';
    dp.SyntaxHighlighter.BloggerMode();
    dp.SyntaxHighlighter.HighlightAll('code');
    });
    

    這邊除了shCore.js之外,其他就看個人需求來加了。src那個後面改成自己的空間。

  4. 到這邊設定就完成了,之後要放程式碼的話,只要使用以下語法放到文章內文: <pre name='code' class='javascript'> [程式碼] </pre> 到時網頁載入後,SyntaxHighlighter就會幫你把程式碼的部份即時轉換了。

這邊有幾點要注意的:

  • Blogger的使用者,在要加上BloggerMode(),如下:
    dp.SyntaxHighlighter.ClipboardSwf = '/flash/clipboard.swf';
    dp.SyntaxHighlighter.BloggerMode();
    dp.SyntaxHighlighter.HighlightAll('code');
  • 我上面有使用到jQuery的語法,所以要加上:
    <script src='http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js' type='text/javascript'/>
  • 不同類型的程式語言,就在class裡面來決定要使用何種類型。
    Language Aliases
    C++ cpp, c, c++
    C# c#, c-sharp, csharp
    CSS css
    Delphi delphi, pascal
    Java java
    Java Script js, jscript, javascript
    PHP php
    Python py, python
    Ruby rb, ruby, rails, ror
    Sql sql
    VB vb, vb.net
    XML/HTML xml, html, xhtml, xslt

這樣應該就可以輕鬆的在blogger貼程式碼了。

補充一下SyntaxHighlighter的額外用法:
nogutter Will display no gutter.
nocontrols Will display no controls at the top.
collapse Will collapse the block by default.
firstline[value] Will begin line count at value. Default value is 1.
showcolumns Will show row columns in the first line.
  • nogutter 是把左邊的數字條拿掉。
  • nocontrols 是把上面的bar拿掉。
  • collapse 是預設變成合起來的,上面的bar會多一個+展開。
  • 範例: <pre name="code" class="html:nocontrols:nogutter">...</pre>
  • 其他請自行參考。

2008年11月13日 星期四

如何修改自己Blogger的網址列RSS連結到Feedburner

RSS

前兩天試著用Feedburner,然後把Blogger的RSS都改過來了,就差網址列的rss圖示連結沒變,於是到ptt發問,便有人回覆了解答…

有兩種做法:

  1. All Feeds by Feedburner
    這個是把blogger裡面所有的feed都連結到feedburner。
  2. Playing with the Feed Links
    這個是把blogger原本的feed連結留著,附加上feedburner的。

這樣就解決我的困擾了,統一點比較好看。 ; )

解決windows update更新時會發生cpu使用率滿載的問題

我偶爾使用電腦會遇到cpu莫名奇妙變成usage 100%的情況,這問題也不是一天兩天的事了,剛好公司最近要更換防毒軟體換成Microsoft Forefront,一堆同事都發生cpu長時間滿載而無法做其他事的問題,公司內的mis人員找來了這個hotfix來試著解決問題。

KB927891:Windows XP 更新

簡述 此為可靠性更新。此更新可解決 Windows Installer (MSI) 影響軟體更新效能的問題。

雖然我沒有裝Forefront,我用小紅傘,但是我也常常會發生svchost.exe滿載的情況,通常都是因為windows update的關係,所以有遇到一樣問題的人,試試這個修補程式吧。

2008年11月12日 星期三

有時email會收件到winmail.dat的原因?

因為之前偶爾會收到winmail.dat的信件,今天心血來潮查了一下winmail.dat的原因,發現以下幾篇文章,轉錄給你們參考。  :)

通常會產生winmail.dat是因為是outlook的使用者,設定信件格式為「Microsoft Outlook Rich Text」。導致利用非Outlook收信的人,看到寄來的信件所夾帶的附檔是「winmail.dat」。....

outlook產生winmail.dat的問題?

如何避免將 Winmail.dat 檔案傳送給網際網路使用者

Outlook Express 附件收到 winmail.dat

主要原因就是因為Outlook(可能只有Microsoft Outlook, 看起來Outlook Express不會)會依信件格式把附件打包成winmail.dat來發送,而造成其他收件者的有時無法正常閱讀附件的問題…。

所以我的結論就是,不要用Microsoft Outlook啦XD 我個人對Outlook Express的使用經驗比Microsoft Outlook好更多,但是我後來還是投向ThunderBird的懷抱了。

如果是已經用很久的Microsoft Outlook用戶,信件已經累積到懶的轉mail client了,那就參考上面的方法吧。

PS. Microsoft Outlook是包含在Microsoft Office裡面的產品,安裝Office裡面會有產品可以勾選;而Outlook Express是裝Windows裡面就會有的比較陽春的收信軟體,個人認為比前者好用多了。

2008年11月11日 星期二

另一款 Javascript Shell : Jash

剛剛突然心血來潮,查查看javascript shell有沒有新版,就發現了另外一個版本的Javascript shell...這款簡稱Jash!
Jash: JavaScript Shell
2008-11-11_150113

網站指出對ie6+, firefox 1.5+, safari 3+有完整支援,chrome也可以用(個人測試),當然也有一些不支援的。

在小弟試用的結果後,有些功能像mouseover DOM算蠻實用的,可惜遇到像gmail用iframe的就沒辦法了。

最主要的script部份,似乎沒有另一個版本的Javascript Shell好用,另如無法shift+enter換行,無法使用語法 function xxx() {}  之類的。但是瑕不掩瑜,它漂亮的介面跟直接顯示在網頁內,自動隨著scrollbar跟著滾動,讓互動變的更即時,這倒是我覺得不錯的優點。

同樣的,要練習或是其他常用的一些javascript語法及測試,可以用這個玩玩看。
推薦用法,firefox跟chromium直接把2008-11-11_151024 拉到書籤工具列上,ie7則把它加到我的最愛裡。

2008.11.13補充:

補充一個,在firefox裡可以把這個書籤的關鍵字設為常用的詞(我用jash),方便直接在網址列快速輸入呼叫,不需去滑鼠點。



在同網頁下直接建立一個(div)視窗,也是jash的優點。因
為原jshell的window.open有時(指沒有用滑鼠點書籤,而是用關鍵字做法的時候)會被firefox擋到,還要手動去開啟。

JavaScript Shell : Web Developer或Hacker實用的好玩具

JavaScript Shell

2008-11-11_151745

特色相當多,請自己去看,反正就是可以開一個javascript的command頁面給你,讓你輸入所有javascript可以做的事,直接動態對指定頁面處理及修改。

用途可多了,看是要拿來測試自己的script,或是測試動態修改頁面以撰寫greasemonkey,用javascript改css來測stylish,測試語法抓廣告來用adblock擋...或是練習jQuery..或是練習最基本的javascript語法,只要跟javascript有關的,全都可以做啦,請自行延伸。

對我來講,它可是一個最實用的Javascript IDE介面。

目前官方版出到1.4(已經很久了~不需更新吧),但只支援Firefox。

如果是ie的用戶,以前只能乾瞪眼,後來有玩家把ie版的也改寫出來,造福大眾。

下載點

Firefox版

IE版

用法就是把bookmarklets直接拉到書籤工具列,ie是存成我的最愛,然後在要使用的頁面,直接點一下這個書籤就會開出這個Shell。

使用Greasemonkey + jQuery

這兩天讀了一些jQuery的使用方法,跟我去年認識的jQuery有點出入,不過它確實是很好用,如同它宣稱的:「write less, do more.」

我除了使用Javascript Shell來練習外,也想讓Greasemonkey可以直接套用自訂的jQuery script,於是找到了這個東西:

在Greasemonkey裡面加入jQuery的方法

Greasemonkey程式碼:

// Add jQuery
   var GM_JQ = document.createElement('script');
   GM_JQ.src = 'http://jquery.com/src/jquery-latest.js';
   GM_JQ.type = 'text/javascript';
   document.getElementsByTagName('head')[0].appendChild(GM_JQ);

// Check if jQuery's loaded
   function GM_wait() {
       if(typeof unsafeWindow.jQuery == 'undefined') { window.setTimeout(GM_wait,100); }
   else { $ = unsafeWindow.jQuery; letsJQuery(); }
   }
   GM_wait();

// All your GM code must be inside this function
   function letsJQuery() {
       alert($); // check if the dollar (jquery) function works
   }

安裝下載點:

Download as a userscript. (需要安裝 greasemonkey )

因為作者允許MIT License,所以我就直接複製貼上了XD

ps. 如果不想要每次載入都出現那個alert(),就自己//掉需要的地方吧XD ;

2008年11月7日 星期五

關於Visual Studio Code Snippets

 2008-11-07_105306

關於vs2008的Code Snippets,在網路上找到一些可用的資源,

Code Snippet Editor: Code Snippet Editor for Visual Basic 2008

可以直接新增編輯修改 .snippet檔,這個有附上程式原始碼,需要的人可以參考。

Visual Studio 2005 Code Snippets (C#):Visual Studio 2005 Code Snippets

雖然是vs2005的,但還是可以直接安裝到vs2008。

有不少沒看過的code snippets,倒也讓自己長了一些小技巧呢!!~

 

延伸閱讀: 關於手動新建Snippet

2008年11月4日 星期二

Windows快速搜尋檔案的好工具

基於Windows內建的搜尋功能實在太過陽春,常常突然想要找個檔案就要花個幾十分鐘下去搜尋(如果不記得路徑的話),於是我一直都想要找一個好用的替代方案。

而常見的Google桌面雖然使用起來不錯,但卻又有一些不合適的地方,例如:

  • 索引檔肥大(通常都是幾G在算的)
  • 有時搜尋結果不夠即時(應該不是無時無刻都在做索引的…)
  • 我可能只需要搜尋檔案名稱,不需要本文搜尋(即使有filetype:可以用,但卻不能取消本文搜尋的功能)

於是,後來這些日子,我找到了下面這些工具…

就我個人了解大概介紹一下:

Search GT

官網: http://www.search-gt.com/

特色: 直接整合檔案總管的工具列上,只能搜尋檔案名稱,不需製作索引檔即可搜尋最新的狀態,軟體為Trial,只有30天試用期,過期就無法搜尋。

心得: 這套拿來賣錢的軟體,號稱搜尋速度是windows內建的100倍以上。雖然我沒有去仔細對照,但搜尋所有磁碟找檔案,不用幾秒就可以找出最新的檔案位置,真的是很犀利,只可惜只能試用30天。

Locate32

官網: http://locate32.net

2008-11-04_194243

特色: 免費軟體,只能搜尋檔案名稱,需製作資料庫(索引檔),支援98/ME/NT4/2000/XP/Vista。

心得: 試用了一陣子,雖然要製作資料庫,但其實建立新資料庫的速度很快,點下去不用幾秒就更新好了,而搜尋出來的結果也是最新的,個人蠻喜歡的。

相關連結: [Tools] 快速搜尋檔案:Locate32

Everything

官網: http://www.voidtools.com/

2008-11-04_200047

特色: 免費軟體,最新狀態的檔案狀態,不需製作索引檔,即時建立索引檔,即超快速搜尋,支援正規表示式搜尋,隨打即查。

心得: 聽說是直接對NTFS檔案系統裡面的USN log作即時索引查詢,的確是超快的搜尋,但這也是它的限制,只能針對NTFS格式的磁碟系統使用。另外,有些舊的檔案(可能已經刪除掉的?)還是會被搜尋出來,像我電腦積年累月存了一堆東西,常常會有一堆開不起來的搜尋結果 XD

補充: 我覺得好像對中文搜尋有問題的樣子,試了一下,大部份的中文搜尋好像都沒法正確找出對的路徑? 而且也無法開啟...

2009/01/19更新: 使用beta版可以解決上面中文的問題(應該是正式版不支援unicode),但是beta使用有時會有一些奇怪的小問題,畢竟是beta。

2009/05/28更新:

目前版本一切都正常,用的很輕鬆愉快 :)  大推這一套!!

現在這套是我的搜尋主力,把熱鍵設為Win + V (因為Win+F好像被系統用走了,搶不過來),讓程式開機啟動,要找檔案時熱鍵呼叫程式,鍵入要找的檔名關鍵字,找完收工! 只有快而已!!

相關連結: 用Everything在電光石火間找到迷失的檔案

Snowbird

官網: http://www.geocities.com/casablanca2000in/msp/snowbird.html

2008-11-04_201953

特色: 免費軟體,不用安裝,不需裝作索引檔,最新的即時查詢,可本文搜尋,有快速的預覽畫面使用。

心得: 相較於上面幾個軟體,此款搜尋速度可能是最慢的,但還是比檔案總管的搜尋快上百倍啦XD 附有一個快速檢視的畫面,搜尋結果用treeview來分類列出,但不能排序其顯示其他資訊(時間、路徑),而且沒有副檔名,顯得有一點不便,但還算是不錯用。

相關連結: Snowbird 6.1- 快速搜尋檔案的小程式

以上這幾套都是體積小,不太佔系統資源的好工具,Windows的使用者可以好好利用。

2008年10月24日 星期五

自簽證jar文件

僅供自己筆記用。

2008-10-24_181008

需要keytool.exe 及jarsigner.exe兩隻程式。

首先,先開一個cmd.exe

創建自簽名證書

keytool -genkey 
這個步驟會建立一個alias為"mykey"的密鑰倉庫項,含有新產生的密鑰對和有效期為90天的證書。

預設為存放在目前使用者的根目錄,如C:\documents and Settings\Administrator\.keystore檔。

自簽名jar文件

jarsigner -signedjar 目的文件名.jar 來源文件名.jar mykey 
或是
jarsigner 文件名.jar mykey 

第一種會簽名並產生名為"目的文件名.jar" 第二種會簽名並覆蓋"原文件名.jar"

延伸閱讀:

keytool - 密鑰和証書管理工具

jarsigner - JAR 簽名和校驗工具

2008年10月23日 星期四

簡單的圖+英文,快速教你常用的網路術語

http://www.commoncraft.com

這個網站製作了很多小影片,用簡單易懂的圖片+英文,快速解說許多的電腦或網路專用名詞。

話說作者會用有興趣的配音(如boo代表"遜",yea表示"讚")及逗趣的手勢,這也成為他們影片的特色。

例如下面這個,就是輕鬆說明這個字詞的意義(我真的覺得RSS真是給常常逛web的使用者相當重要的工具,實在不得不學):

 

,這個詞也常常出現在我們使用電腦的經驗中:

有空的話,可以上去隨便點一些有興趣的字詞來看吧。 ;)

Silverlight 2初入門資源

logo

前兩天因為工作需求的緣故,試著去摸索建立一個新的silverlight專案,雖然剛開始的系統安裝步驟很繁雜,但設定都準備好開始使用後,其實並沒有那麼討厭,而做出來的介面成果也算很不錯。

這邊把這兩天看到覺得比較有用的相關網頁列出來,以茲有興趣或未來回顧silverlight時使用。

Silverlight 2教程中文版

First Look at Silverlight 2

Silverlight官網所展示的入門教學影片

Silverlight Official Forums

至於開發Silverlight 2前所需要安裝的東西可多著呢,至少需要:

Microsoft Visual Studio 2008 (升級至sp1)

Silverlight SDK

但上面這個光一樣就要裝很多東西(很多不同的小安裝),而且要裝很久…0rz

2008年10月22日 星期三

[Firefox]解除無法記憶登入資訊的方法

一些網站如Yahoo, MSN的登入資訊(帳號、密碼),都無法記憶到Firefox的隱私資料中,安全性是顧到了但確很麻煩,常常登入無名都要慢慢keyin。

今天找到了一個方法,可以解除網站對瀏覽器記憶帳密的限制。

一個bookmarklets: remember password

用法是先開啟登入頁面,再點這個bookmarklets,這時就會解除限制,登入時firefox就會問你要不要記憶了。記憶起來,下次同樣頁面,點一下bookmarklets,再點帳號兩下,就可以快速登入了。

2008-10-22_002543

我想這個東西應該也可以寫成script 用greasemonkey來執行…有空再研究。


2008/10/22補充:

馬上就找到相關的script了。

網址: http://userscripts.org/scripts/show/799

針對所有的頁面都解除,有需要的話,也可以自行修改filter。

2008年10月21日 星期二

Adobe Audition 3.0去歌曲人聲方法

這篇是給自己作個筆記,不然一陣子沒用又忘記了。

列出我目前記得的一些方法:

在Multitrack下,

2008-10-21_202547

Effects > Stereo Imagery > Center Channel Extractor,Effect Preset選Vocal Remove。裡面可以選Male Voice或Female Voice。

2008-10-21_202111

或是Effects > Stereo Imagery > Channel Mixer,效果選Vocal Cut。

2008-10-21_202137

單軌可以選Favorites > Vocal Remove。

2008-10-21_203407

以上效果可能都不一樣,有些可能會爆音,有些去聲音可能沒那麼乾淨,要自己試過才知道。

另外,建議先將背景音樂單獨拮取出來,再拿來錄音會比較好,效果比較好,也減少錄音時cpu的負載。

製作7-Zip的自解檔

7-zip可以製作為sfx檔,但能用命令列生成自解檔。其中一種方法是將7z.sfx檔跟.7z檔組合起來:

copy /b 7zS.sfx + config.txt + archive.7z archive.exe

但由於7-zip的gui介面沒有提供產生自解檔的介面,顯得有點麻煩,於是我試著寫了一個批次檔跟登錄檔。

只用於.7z的檔案,另外產生一個"檔名".exe的自解檔在同目錄下。

2008-10-21_091204

下載附件

2008年10月15日 星期三

使用PIL中的ExifTags讀取exif

在網路上逛到的,使用PIL (Python Image Library):

import Image
from ExifTags import TAGS

fn = r'C:\20080803.jpg'
im = Image.open(fn)
rawexif = im._getexif()
exif = dict([(TAGS.get(k,0), rawexif[k]) for k in rawexif.keys()])
for k in sorted(exif):
print str(k).ljust(20) ,exif[k]

速度還不錯,跟EXIF.py比起來…。

來源參考: http://blog.seety.org/everydaywork/2007/7/13/692/

在VIM下執行Python的方法

以python為例,命令如下:
:%w !python
2008-10-15_112247 另外,可以將這個動作設為vim巨集,配合autocmd在~/.vimrc加上以下設定:
autocmd BufRead,BufNewFile *.py map  :% w !python 
不過我倒是沒成功(linux跟windows都是),這就有待vim達人blc幫我解惑了。 來源閱讀: 在VIM內直接執行script language

2008年10月8日 星期三

相機鏡頭這麼貴不是沒有道理的…

剛看到了這篇文章: 變焦鏡頭,拆! ,裡面有一張圖片,是一粒壞掉的鏡頭拆解出來的…

2009-03-06_085640

我知道鏡頭是很精密的東西,裡面動輒7、8片鏡片,多輒12、13片,不過倒也是第一次看到拆解出來的零件…

這張圖倒沒看到鏡片的樣子,該不會是透明到看不到吧,噗。

2008年10月6日 星期一

Python中的List Comprehension(列表綜合?)

剛開始學Python時,遇到下面這類比較複雜的語法,看的一頭霧水。現在看到有簡單的範例,就做個筆記記錄一下,以防之後又忘了。
List Comprehension
listone = [2, 3, 4] 
listtwo = [2*i for i in listone if i > 2] 
print(listtwo)
output:
[6, 8]
話說list物件在Python相當常用,於是有了這種簡單快速的語法產生…。

補上過濾列表語法:
[mapping-expression for element in source-list if filter-expression]
 

Python - Special method names

在Python裡面的Class,不少特殊的方法名稱都具有特別的用途,例如__init__就是物件初始化時會自動被呼叫的方法。

剛剛Python文章讀到相關的,就隨便去把Reference文件查了出來:Special method names

以下列一些我個人認為我常用的:

名稱 用途
__init__(self[, ...]) 物件的建構式。
__del__(self) 物件的解構式。
__str__(self) print 這個物件時,會顯示的字串。
__lt__(self, other)
__le__(self, other)
__eq__(self, other)
__ne__(self, other)
__gt__(self, other)
__ge__(self, other)
物件用來互相比較時會呼叫的方法。
分別為:  <,  <=, ==, != , >, >=
__cmp__(self, other) 使用cmp()來比較物件時會呼叫此方法。
__getattr__(self, name) 使用getattr()時會呼叫此方法。
__len__(self) 使用len()時會呼叫此方法。
__getitem__(self, key) 當物件本身為可列舉時,要取回列舉元素時,要定義此方法。

__add__(self, other)

__sub__(self, other)

__mul__(self, other)

__div__(self, other)

__pow__( self, other[, modulo])

數值運算時使用到。
分別為 +, -, *, /, 平方

2008年10月2日 星期四

薔薇之椿 - 呼巴掌的flash遊戲

在ptt的little-game版翻舊文,其中一個有趣的小遊戲就是這個。

遊戲連結

一代遊戲畫面:
2008-10-02_224035

二代遊戲畫面(要先一代全破後,會直接接二代):
2008-10-02_224055

接下來是呼巴掌的畫面:
2008-10-02_224140

說明一下遊戲玩法好了,蠻有意思的。

  • 全程用滑鼠控制,畫面左上角那條Bar代表自己或敵人進攻。
  • 攻擊回合時,左鍵點住攻擊往敵人臉上劃過去,我是都劃直線,好像有弧線或速度的判定,來造成敵人的傷害跟動作,沒劃到敵人臉會被爽躲甚至反擊。
  • 回避時點住回避,然後直直往右邊劃一直線到底,就可以閃過敵人攻擊,並且有機會可以"反擊"。

2008-10-02_224345 2008-10-02_224635

我是覺得很有意思,有這個創意可以發明這類小遊戲,作者也許能體會人妻那種不滿極度想發洩的心情吧,呵呵。

ptt上面有鄉民分享劇情,我也是看過之後才了解遊戲劇情的,有興趣的人上ptt的小遊戲版瞧瞧吧。