星期五, 4月 25, 2008

為你的Linux網路加速

昨天在網路上意外看到一篇文章(忘記出處了),主要是說明如何以簡單的幾個步驟改善Linux的網路存取效能的方法。不知道是不是心理作用,試過之後真的也覺得速度好像變快了一些,至少用Firefox看網頁時網頁內容抓取好像是有比較快一點,不會像之前打完網址之後就等了一會兒網頁內容才會出來。好啦!現在就來說一下如何做囉!

其實動作很簡單,根據看到的那篇文章的說明,造成網路速度不快的主要原因是ipv6。所以只要把Linux kernel中有關ipv6的模組以及Firefox的ipv6支援關掉就可以了。

  • 關掉Linux kernel的ipv6模組
如果你在command line下/sbin/lsmod | grep ipv6 有輸出結果的話,代表系統已經載入了ipv6相關的Linux kernel。你可以編輯/etc/modprobe.d/blacklist這個檔案,在檔案中加入blacklist ipv6後存檔,然後中心開機後就可以關掉Linux kernel對ipv6的支援了。
  • 關掉Firefox的ipv6支援
在網址列輸入about:config,然後搜尋ipv6。將搜尋到的network.dns.disableIPv6改成true就可以關掉Firefox對ipv6的支援了。

星期二, 4月 22, 2008

安裝wireshark出現npf.sys無法寫入的解決辦法

今天聽同事說他要安裝wireshark可是會出現npf.sys無法寫入的問題,覺得很奇怪,自己電腦上就有裝wireshark阿。所以就把之前安裝的給移除掉再重裝一次。嘿嘿,還真的會出現無法寫入npf.sys的錯誤訊息。
可是npf.sys是用來捉取網路封包必要的驅動程式,不安裝是絕對不行的。習慣當黑手的我本著不服輸的精神,在網路上google了十幾分鐘,就是找不到解決方法。
竟然google不到,那就自己想辦法解決了囉。試了一些方法之後,突然靈機一動,想說如果遇到無法移除檔案時都會進保護模式去移除檔案,那是不是可以如法炮製,進保護模式去安裝winpcap試試看。
嘿嘿!果然,這個方法是行的通的。只要開機時按F8進保護模式後,經過漫長的開機過程後,在進行winpcap的安裝,果然就解決了無法寫入npf.sys的問題了。
這個問題應該是趨勢科技出的office scan覺得這個安裝動作是病毒的行為擋掉的,因為我自己的電腦安裝wireshark沒有出現這樣的問題,雖然也有安裝防毒軟體avast antivirus。

星期一, 4月 21, 2008

編譯程式碼出現的錯誤

今天抓了beagle的source code並且試著要在ubuntu上進行編譯,結果竟然在下./configure時出現了

configure: error: C compiler cannot create executables

後來在網路上稍微找了一下,發現竟然是因為ubuntu預設的安裝是用來作為一般使用,所以很多用來開發程式所需要的套件就都沒有安裝,就如在寫c程式時需要include一些header file就都沒有安裝,所以造成configure在檢查系統時發現gcc並無法成功編譯出我們要的執行檔。所以只要將該安裝的套件安裝一下就可以解決這個問題了。

之前已經有安裝gcc了,現在只缺header file,所以執行

apt-get install libc6-dev

就可以解決了

星期四, 4月 17, 2008

讓Office 2003可以讀取Office 2007的檔案

如果要讓Office 2003讀取Office 2007所編輯的Word、Excelc或是Powerpoint檔案,你只要安裝微軟所出的Microsoft Office Word、Excel 及 PowerPoint 2007 檔案格式相容性套件就可以輕鬆解決這個問題了。安裝步驟很簡單:

首先你可以直接以Office 2003開啟該檔案,此時會出現如下的畫面



你只要按下確定按鈕就會連到該套件所在的網頁了,如下圖所示。



如過出現的是英文畫面不需要緊張,只要在紅色圈圈所標示的地方,改選成Chinese(Traditional)就可以切換到中文畫面了,如下圖所示。



按下下載按鈕就可以下載安裝套件了。下載完畢後,執行該檔案安裝成功後就大功告成了。

當然你可以直接到Microsoft Office Word、Excel 及 PowerPoint 2007 檔案格式相容性套件的網頁下載安裝檔回來直接安裝就可以了。

星期六, 4月 12, 2008

解決當compiz開啟時tsclient無法從全螢幕切換回來的問題

在Linux上有許多與Windows具有相同功能的軟體, 其中tsclient就是其中一個. tsclient的功能就等於Windows上的遠端桌面連線軟體, 不過在Linux中一般稱為終端伺服器用戶端. 其不止功能相似, 從下圖你會發現連畫面都很相似, 相信使用起來應該很簡單才是.




可是這個軟體如果在你啟動Compiz這個桌面特效軟體之後, 在全螢幕執行下將會出現無法以Ctrl-Alt-Enter切換回Linux桌面的問題, 變得只能一直待在遠端桌面的全螢幕畫面中. 當然我們可以使用kill process的方式來將tsclient砍掉就可以再度回到Linux桌面了, 可是這樣畢竟比較麻煩. 所以根本的解決辦法就是改一下Compiz這套軟體的設定.

首先, 先打開Advanced Desktop Effects Settings視窗 (如果沒有安裝的, 就先用Synpaics安裝compizconfig-setting-manager套件),
點選Advanced Search, 然後尋找legacy. 應該會找到Workarounds這個項目.
然後選取Wordarounds, 這時會出現Legacy Fullscreen support選項.
將Legacy Fullscreen support選項取消掉就大功告成了.



下一次再使用tsclient時, 就可以用Ctrl-Alt-Enter在全螢幕以及視窗模式之間做切換的動作了.

星期二, 4月 01, 2008

Windows Device Driver學習筆記1

咦!? 才剛剛才寫完開疆計, 怎麼馬上就有學習筆記可以寫了!! 根本是在裝肖維!!

呵呵! 其實就趁自己對這個題目還很熱(台語), 趕緊寫下我的第一篇學習筆記囉. 這樣萬一以後又半途而廢了, 總不會什麼成果都沒有留下來. (叩! 不準在半途而廢了!)

好啦! 不多說廢話了, 趕緊開始Windows驅動程式學習的第一步了.

要學習驅動程式設計, 除了找些文件或是相關書籍來看之外, 最重要的就是建立一個可以讓你撰寫驅動程式的環境了. 而要撰寫Windows驅動程式, 當然是直接拿微軟官方所出的驅動程式開發套件 (Driver Development Kit)來用囉. 一般來說, 要進行驅動程式的開發需要用到兩台電腦, 一台是用來進行開發驅動程式以及除錯用的, 另外一台則是用來安裝以及執行所開發的驅動程式. 需要兩台的原因很簡單, 因為新開發的驅動程式還不是很穩定 (應該不會有這麼神的人寫完程式都不會有bug的吧), 再加上驅動程式是與作業系統緊密結合, 所以只要一出錯很容易就會造成系統當機, 如果嚴重一點還有可能會使得整台電腦都無法在開機, 必須重新安裝作業系統. 因此為了避免資料因為開發驅動程式而損毀, 一般還是建議使用兩台電腦來開發比較好.

接下來就是要進行DDK的安裝程序

  1. 在要開發驅動程式的電腦上執行DDK的setup.exe, 相信這個步驟對大部分的Windows使用者應該很簡單吧. 這裡唯一要注意的是, 安裝的目錄名稱不要出現有空白, 不然會有些問題.
  2. 安裝debugger. 在Windows DDK中有一個debuggers的目錄, 在裡面你可以找到debugger的安裝檔案, 裡面有32-bit以及64-bit的版本, 根據你所要開發的作業系統版本來選擇你所要安裝的debugger.
  3. 安裝完畢後, 再進行DDK安裝的驗證, 看看有沒有正確安裝好DDK. 步驟很簡單, 選擇一個build environment, 在所選擇的build environment的命列環境執行build -cZ, 這時候會將步驟一已經安裝的範例驅動程式進行編譯的動作. 如果可以正確編譯, 代表DDK已經有安裝成功了.

好了, 看完以上的介紹, 趕快行動吧!!

Windows Device Driver學習開疆計

一直以來, 都很想學習撰寫Windows驅動程式. 雖然對C語言應該還算熟悉, 但是卻一直都是侷限在Linux上面寫一些程式, 在Winodws上頂多就是唸研究所時寫些Console程式, 跑跑自己的論文數據, 所以Windows programming能力幾乎等於零. 這期間曾經有過幾次想要開始學習在Windows上學習程式設計, 可是總會被其他因素打斷(大部分的原因是因為懶惰啦)! 所以也就一直一事無成.

這一次, 我希望可以把Windows device driver程式設計真正地學好, 不管中途愈到任何因素, 不管learning curve也多險峻, 再加上辦公室我的座位旁便坐著一位具有這個能力的好學弟, 一定要趁換工作之前的這段時間, 好好地偷師, 把自己的這個能力給培養起來囉.

星期二, 3月 25, 2008

利用valgrind對用fuse所出的檔案系統進行memory leak除錯

如之前的文章說過,valgrind可以幫助程式設計者快速找出程式中會造成memory leak的部分。但是,如果你用fuse來進行user-level的檔案系統開發,並想利用valgrind來找出程式中memory leak的部分,馬上你就會發現一個問題,就是程式跑一下子後就會自動結束了。這時候你應該會看到螢幕上出現以下的錯誤訊息:

fuse: bad mount point `/mnt/storage': Transport endpoint is not connected

其實這不算是個錯誤,造成這個現象的主要原因是fuse的runtime librry會呼叫mount,進行檔案系統掛載的動作。但是因為mount這支程式本身是privileged program,必須要有root權限才可以執行此程式進行檔案系統掛載的動作,因此才會出現上面錯誤。

解決此問題最簡單的方式,就是將mount程式的setuid bit取消掉,也就是執行

chmod -s /bin/mount

如此一來,就可以使用valgrind來對用fuse所寫的檔案系統進行memory leak除錯的工作了。

當然,將mount的setuid bit取消掉會造成系統安全有疑慮。不過,也沒關係啦,只要記得在進行完debug的動作後,恢復mount程式的權限就可以了。

FUSE (Filesystem in Userspace)

這裡所指的FUSE是Filesystem in Userspace,可不是保險絲。
一般來說,檔案系統的開發是需要寫kernel-level module的,但是kernel-level programming比較困難,不容易debug,而且只要一不小心很可能會造成整個系統當機。FUSE則是用來解決這個問題的一個Linux kernel標準module。
FUSE是一套允許使用者自行建立在Linux上執行的檔案系統的開發套件,這個套件包含了kernel module以及系統相關的library。其中kernel module是用來與Linux kernel的VFS的介面銜接,VFS使得應用程式可以不需要理會所使用的檔案系統為何,就可以在各式各樣的檔案系統上進行檔案存取的動作,因為VFS會根據mount point資訊以及應用程式所要存取的路徑來決定應該將request轉到那個檔案系統模組進行處理。換句話說,有了FUSE的幫忙,我們就可以輕鬆的在user level進行檔案系統功能的開發,可以應用以往在user level 所學的工具以及programming資源來進行檔案系統的開發,實在是一個不錯的開發工具。

星期一, 3月 10, 2008

第一次覺得Sony的維修客服還不錯

自己的Sony VAIO SZ38電池一直怪怪的,問題超多的。
電池充滿後,放著不用一兩天後開機,發現電量只剩下一點點,用不到一個小時就沒電了。
每次充電電源都會顯示從0%一直慢慢增加至50%,然後神奇的事情就會發生。電池的容量就會在到達50%之後開始往下掉,漸漸地減少至0%。第一次發現這個狀況時還被嚇了一跳,以為是自己電源線沒接好差點就將自己辛辛苦苦寫的東西就這麼泡湯了。後來經過幾次的測試,發現雖然電池的電量往下掉,但是只要減少至0%,接下來就會顯示充電完成了,簡直舊式莫名其妙。

因為之前送修Sony的經驗不是很好,覺得不止服務態度不好,連問題都沒解決,還得跑好幾趟覺得很煩,所以這個現象拖延了很久一直都沒有去處理。後來在Mobile01的網站上面看到有網友在討論VAIO SZ系列的電池的問題,都是有關Sony SZ系列的電池設計不良導致電腦會找不到電池或是類似的問題,很多人說他們送修後運氣不錯,再加上還在保固期內,Sony都換一顆新的電池給他們。因此我也就抱著姑且一試的心裡將我的電池送修。
想不到,這次送修的感覺還不錯,不知道是不是被投訴多了,服務人員的態度比以前好多了,呵呵!
更想不到的是,經過幾天的等待,Sony竟然也換了一顆新的電池給我耶,或許是因為我還在保固期內,不過就是覺得很爽。再加上服務態度還不錯,總算是讓我對Sony恢復了一些好印象。

星期五, 3月 07, 2008

我復活了

我又復活了!!

已經好久沒有更新blog了,想想真是有點不好意思。
本來寫blog是希望透過書寫的方式,紀錄一下自己的一些讀書心得,順便可以幫助自己回覆記憶(呵呵,人老了總是會忘東忘西的)。可是,去年年中開始趕計畫進度之後就越來越懶了,懶到連email也都很少看了,怎麼可能會有功夫寫blog!

雖然這段時間曾經有想過要再開始寫寫blog,不管多寡,總是有寫比沒寫好。可是日子久了,就越來越覺得不好意思了,甚至曾經有個念頭想說乾脆放棄這個blog,再另起爐灶好了,反正我寫也沒幾個人看過我的blog,而且網路上孤兒blog到處都是,畢竟很多人對寫blog這玩意都只是跟流行,退燒了就再也不會造碰了。但是,又覺得自己不是一個會退縮的人,怎麼可以就這樣把辛苦經營的blog給放棄掉(呵!好像也沒寫幾篇阿!)。所以囉,還是決定繼續在原來的blog繼續努力,希望有一天可以像Mr. 6一樣,成為網路上人氣超旺的部落客。

嗯!為了慶祝這個重要的日子,就把今天訂為復活節吧!!哈哈!!

星期四, 9月 06, 2007

好用又免費的燒錄軟體 - InfraRecorder

CD或是DVD已經成為我們日常生活中不可或缺的資料備份媒體, 大部分的人也大概都有燒錄器. 一搬來說, 現在買燒錄器時都會附上一套燒錄程式, 而且幾乎都是鼎鼎大名的Nero, 可是我的Sony VAIO SZ 38就是沒有給我隨機附贈Nero, 而我很不想安裝沒有版權的軟體, 所以只好又得google一下, 看看網路上有哪些不錯的免費軟體可以使用囉.

還好, 皇天不負苦心人(當然再加上google的大力幫忙), 終於讓我找到了一個還不錯的燒錄軟體可以用, 那就是InfraRecorder.

這套軟體的使用介面相當簡單好用, 而且又同時支援燒錄CD與DVD, 更讚的是, 還是open source. 真是俗又大碗! 推薦大家可以多多使用.

相關連結:
InfraRecorder
Nero
Sony VAIO SZ 38

星期日, 8月 26, 2007

推薦好用又免費的錄音以及編輯軟體Audicity

曾經使用過許多錄音軟體, 雖然用起來都還不錯, 可是很多錄音軟體
(例如: Windows內建的錄音程式)的錄音格式無法儲存成mp3格式, 所以通常都會佔用很大的硬碟空間. 雖然現在硬碟很便宜, 空間又大, 可是檔案大畢竟就是不容易備份, 而且有些錄音軟體還都有錄音時間限制, 用起來實在是非常不方便. 在這裡跟大家推薦一個好用, 免費又open source的錄音軟體, Audacity.

推薦這套軟體有一個很重要的原因, 因為Audicity是可以同時在Windows以及Linux上執行的軟體, 甚至是MAC OS X(我沒有MAC, 所以沒試過). 這一直是我找尋軟體一個很重要的因素之一, 畢竟大部分都的user是很懶的, 都希望學會一招後就"行騙"天下.

另外, Audicity還可以直接以mp3格式儲存錄音內容, 減少錄音檔案所佔用的硬碟空間. 不過, Audicity預設是沒有這個功能, 要再安裝MP3 encoder才可以有這個功能. 還好這個步驟非常簡單, 只要下載MP3 encoder外掛即可:

  1. 首先先至http://lame.buanzo.com.ar/下載libmp3lame-win-3.97.zip這個檔案.
  2. 將下載的libmp3lame-win-3.97.zip解開
  3. 接著就可以使用Audicity進行錄音的動作
  4. 錄音完畢後, 選擇檔案->匯出為MP3, 將檔案轉存成MP3
  5. 這時候會出現視窗請你告訴Audicity所要使用的LAME MP3 Encorder檔案在哪裡
  6. 選擇Yes, 並找出在步驟2所解開的lame_enc.dll即可

最後, 除了前面所介紹的錄音功能之外, Audicity還可以對錄音檔案進行編輯的動作, 不過這部分小弟不太需要用到, 所以沒有用過, 無法為各位介紹囉, 真是不好意思.
相關連結:

好用又免費的虛擬桌面工具

你是不是常常因為開啟了一大堆程式, 而必須在一大堆視窗中找尋某個你要用的程式呢? 當你的"事業"越作越大, 視窗越開越多時, 這時候虛擬桌面就可以幫助你將你所開啟的視窗分類, 每次只顯示出相關的視窗, 其他與目前工作無關的視窗就可以暫時隱藏起來.

在Linux上虛擬桌面幾乎是每個desktop manager都一定會提供的功能, 可是在Windows上則沒有了. 其實再Windows上也是有一堆好用又免費的虛擬桌面軟體可以用的, 在這裡我跟大家推薦一個我自己覺得用起來還不錯的虛擬桌面軟體dexpot.

dexpot這套虛擬桌面軟體允許你最多有20個虛擬桌面, 相信這對大部分的使用者來說都已經夠用了. 而且每個虛擬桌面可以設定個別的密碼保護, 避免別人偷偷切換你的虛擬桌面, 偷看你在做什麼. 每個虛擬桌面也可以各自設立桌布, 讓你可以在處理不同事情, 根據事情的特性使用不同的桌布. 還有, 還可以設定hot key, 快速切換桌面, 以免做壞事被抓包喔.


相關連結:
dexpot

星期五, 8月 24, 2007

利用gdb進行shared library的除錯

寫程式時, 遇到bug最常使用的除錯工具就是gdb了. gdb會利用ld.so這個dynamic linker/loader, 自動將我們的程式載入記憶體, 並且在執行過程中將程式所使用到的shared library載入. 然而, 如果我們要debug的是已經compile成shared library的function時, 這種on-demand loading的運作方式則會造成我們的不便, 因為我們無法預先設定breakpoint以便在程式呼叫到shared library中的function時, 將程式執行暫停.

因此, 如果要以gdb對已經compile成shared library的function進行除錯時, 可以採用下列方式來進行在shared library中的function的除錯工作:

  1. 首先, 當然是在編譯shared library時, 必須有debug information, 也就是compile時要加上-g的option
  2. 再來就是告訴ld.so, 在載入程式時,一併載入我們所要debug的shared library, 只要利用LD_PRELOAD環境變數即可. LD_PRELOAD是告訴ld.so, 在程式一開始載入時, 就順便一起載入LD_PRELOAD環境變數所指定的shared library.
  3. export LD_PRELOAD=要debug的shared library路徑
  4. 執行gdb進行程式除錯, 並且先隨便設定一個中斷點
  5. break main
  6. 輸入run讓gdb開始執行程式, 此時gdb應該會一下子就暫停程式的執行. 這時候就可以確定一下我們要debug的shared library是否已經載入
  7. info share

此時應該就可以找到我們在shell中利用LD_PRELOAD環境變數要求ld.so載入的shared library了. 接下來就可以設定shared library中的function為中斷點並且進行debug了.

星期三, 8月 22, 2007

好用又免費的電子字典

在閱讀英文文件時,我們常常需要電子字典來協助我們。想到電子字典軟體,相信大部分的人應該就會直接聯想到Dr. Eye譯點通這套軟體吧。這套軟體的功能非常強大,可以進行多國語言的翻譯、真人發音、整篇文章翻譯等等,實在是一套不可多得的軟體。而且,重點是,Dr. Eye每個月都會有新增的字庫可以加入,真是讓人有物超所值的感覺呢!
可是,De. Eye畢竟是一套商業軟體,是要花錢購買的。對於沒有此預算,可是又有此需求的人,那該怎麼辦?其實,有一套功能很接近Dr. Eye的免費軟體可以供大家使用,就是StarDict

StarDict是一套open source的軟體,而且又同時支援Windows與Linux作業系統,還可以自行新增字典字庫,實在是一套不錯的軟體。當然,除了基本字典查功能之外,StarDict也跟Dr. Eye一樣,支援即時翻譯,也就是滑鼠到哪就自動翻譯滑鼠所指的字。而且,從3.0版開始,更支援了全文翻譯的功能,強力推薦這套軟體。

相關連結:

星期二, 8月 21, 2007

免費產生pdf的工具

在日常生活中,pdf檔案格式出現的機率越來越多,不管在Windows或是Linux上,都已經有不錯的pdf reader讓我們閱讀pdf文件,例如:在Linux上的evince、xpdf以及Linux版的Acorbat reader,在Windows上有Adobe Acrobat reader、Foxit reader等。

可是,如果是要產生出pdf格式的文件,在Linux當然也有許多免費好用的工具可以使用。但是,在Windows上,以往大家可能都是使用Adobe Acrobat。可是這是一套商業軟體,要錢的,如果沒錢買的話,其實可以使用一些免費的軟體,也都不錯喔。

在這裡推薦一下CutePDF Writer。這是一套商業軟體,不過重點是,它是免費的,所以大家可以安心使用。而且不會在所產生的pdf檔案上,留下任何的watermark,是一套相當不錯的pdf產生工具。

相關連結:

檔案比較工具

當我們需要比對兩個檔案的內容時,在Linux上,常常第一個想到的就是diff這個文字模式的工具。這個雖然牌子老、信用好,但是缺乏了圖形化介面總是比較不那麼方便。其實,我們可以有許多其他的選擇,例如:tkdiff、fldiff。


tkdiff是diff的圖形化front-end,其本質上仍然是使用diff進行檔案比比對的動作,只是幫diff包了一個漂亮的圖形外觀。除此之外,tkdiff還可以進行檔案merge的動作。還有一點值得特別強調一下,就是tkdiff不只可以對一般檔案進行比比對,也可以對source control system中的檔案進行比對動作。
tkdiff的使用方法很簡單,可以只輸入tkdif進入interactive模式,直接選取要比對的檔案,或是在命令列直接輸入要比較即可。

fldiff也是一個圖形化的檔案比對工具,其基本功能跟tkdiff差不多,都是可以比較一般的檔案以及source control system中的檔案。不過fldiff比tkdiff多了一個目錄內容比對功能,就是可以指定兩個目錄,然後針對目錄中相同名稱的檔案進行內容比對的功能。

tkdiff有已經編譯好的Windows版本,fldiff需要自己編譯。


相關連結:

星期日, 8月 19, 2007

在Ubuntu中安裝Adobe Reader

Linux中雖然有許多pdf viewer,例如:evince、xpdf等,可是對於Windows的慣用者,應該還是習慣使用Adobe Reader。所以,接下來就稍微介紹一下如何在Ubuntu上安裝Adobe Reader:

1. 先加入金鑰
wget -q http://medibuntu.sos-sts.com/repo/medibuntu-key.gpg -O- | sudo apt-key add -

2. 在/etc/apt/sources.list中加入repository
## Medibuntu - Ubuntu 7.04 "feisty fawn"
## Please report any bug on https://launchpad.net/products/medibuntu/+bugs
deb http://medibuntu.sos-sts.com/repo/ feisty free non-free
deb-src http://medibuntu.sos-sts.com/repo/ feisty free non-free

3. 安裝套件acroread

參考連結:

在Ubuntu中安裝Microsoft字型

使用Linux作為使用環境,第一的遇到的問題即是中文字型問題。我們在使用Linux作為工作環境時,常常覺得Firefox的中文字型不夠漂亮,甚至有一點點模糊的感覺,用起來就是不像在Windows中那麼的舒服。雖然最近大量使用Ubuntu,覺得Ubuntu已經做的很好了,也讓我漸漸地減少使用Windows的時間了,但是總覺得還是不夠,字型看起來就是不夠清楚好看。

其實,我們可以有很多方法可以美化Ubuntu的桌面環境。以下我介紹一個最簡單的方法。

1. 先在/etc/apt/sources.list中,啟用multiverse repository
2. 利用Synaptic套件管理程式,安裝msttcorefonts以及ttf-xfree86-nonfree兩個套件
3. 重新開啟應用程式或是重新開啟X Windows

你就可以發現,你的桌面環境的字型變得比較好看了喔。

ps. Windows和Linux都是我喜愛的作業系統,也都覺得很不錯,各有優缺點。只是覺得微軟的產品如果可以再便宜一點,那就更好了。

相關連結:
RestrictedFormat/Microsoft Fonts