Archives

gravatar

Firefox with user-specific font fallbacks

Firefox 3.0 的 nightly trunk 使用了 gecko 1.9 新的 layout engine,對於中文方面的 glyphs rendering,還是覺得非常不好看。在 Safari,不論是 zh-TW, UTF-8 裡面的中文似乎都是使用 LiHei Pro 或是 Apple LiGothic Medium。相反的 Firefox 只要是非 zh-TW, Big5 的網頁,似乎都會去用日文字形裡面的中文字,看起來就有很大差異。缺字的話還需要 fallback 找到其他字形去替補,因此各種混雜家錯的字形看起來真是不好看。對於 Firefox 3 的 gecko,給他寫了 default 的 fallback fonts,像是 Apple LiGothic Medium,LiHei Pro,簡體用 STHeiti,看起來畫面像 Safari 產生的文字,感覺好多了。
圖左邊是 Minefield,也就是 Firefox nightly trunk;右邊是 GranParadiso。

Firefox3 trunk with user font fallbacks
Tags: , Firefox

gravatar

Camino nightly trunk with Cairo

Firefox 3.0 的 Gecko 1.9 已經將 text rendering 的工作,統一交由跨平台的 Cairo 處理。另外有一篇 Cairo bets Safari? 的文章,內有 Camino、Safari、以及新的 Camino trunk 的 screenshot,看起來 Cairo 的清晰程度和 Quality 蠻不錯的。另外新的 Camino with Cairo 的 nightly trunk 可以下載來試試看。

gravatar

MSN Messenger 安全性

不管是 Yahoo Messenger 或是 MSN Messenger,已經幾乎是不可或缺、人手一套的傳訊軟體。但是在軟體的背後,傳遞的訊息卻是以明文的內容在彼此和 servers 之間傳送。當然有心人士或是某些有網路控管的公司,很容易就可以窺視訊息的內容。雖然可能沒有什麼危急存亡大事或是商業機密,但是彼此之間的隱私或祕密,在彈指之間不小心就有洩漏出去的可能。大部分 MSN protocol clone 的軟體,都有實作加密的訊息交換機制。以 GAIM 來說,除了在 Linux 平台上外,Mac OS XAdiumX 也是以 libgaim 來作為基礎,同樣 GAIM 也有 Windows 版本。因此如果是同類之間的加密通訊,理論上應該是可以 seamless 地通行無阻。但是最平常的好友其實大都是 Windows MSN Messenger,或公司的 OS 平台也最普遍都是 Windows。反而大家最普遍使用的 IM 版本缺乏加密的功能。
但是還好有一套 SimpLite for MSN 可以實現這個安全的需求(也有其他 IM 版本)。基本上他是當作一個 SOCKS server,並且修改 IM 的 SOCKS proxy 來經過這套軟體,然後在訊息部份以他人的 public key 加密後送出。當然如果對方沒有這套軟體,則本身就無法擁有加密的功用。

gravatar

Copy to Blogger Beta

很久以前就開始用 gslin 的 copyblog.pl 把 wordpress feeds 內容複製到 blogger 去,曾經有一段時間是自己改一部份內容直接用 Blogger Atom API 把文章貼進去。後來似乎 API 有所修改或更動,一段時間經常會失敗造成兩邊不同步。現在 Blogger 的帳戶轉換成 Blogger Beta 之後,更是無法使用舊的方式把文章複製過去了。

所以現在改用 Google Data APIs 把內容貼過去。看來看去比較簡單的方法就是參考裡面的 java 範例,直接改一下,搭配上原本的 copyblog.pl 方式。先把文章標題和內容寫到一個檔案,然後執行 java 來透過 Google Client Data Library 把文章內容新增到 Blogger Beta。程式大致如下,


import com.google.gdata.client.*;
import com.google.gdata.client.calendar.*;
import com.google.gdata.data.*;
import com.google.gdata.data.extensions.*;
import com.google.gdata.util.*;
import java.net.URL;
import java.io.*;

class blogpost
{
  final static String email = "user@gmail.com";
  final static String user = "user";
  final static String passwd = "password";
  final static String filename = "content.txt";
  final static String post_url = "http://www.blogger.com/feeds/{BlogId}/posts/default";
  public static void main(String[] args) throws Exception
  {
    File file = new File( filename );
    BufferedReader br = new BufferedReader( new InputStreamReader(
                          new FileInputStream(file), "utf-8"));
    String title = br.readLine();
    String content = "", line = "";
    while( (line = br.readLine()) != null ) {
      content += line;
    }
    br.close();

    URL postUrl = new URL( post_url );
    Entry myEntry = new Entry();

    myEntry.setTitle(new PlainTextConstruct( title ));
    myEntry.setContent(new PlainTextConstruct( content ));

    Person author = new Person( user, null, email );
    myEntry.getAuthors().add(author);

    GoogleService myService = new GoogleService("blogger", "blog-post-1");
    myService.setUserCredentials(email, passwd);

    Entry insertedEntry = myService.insert(postUrl, myEntry);
  }
}

gravatar

Skype 與 Firewalls

這篇文章說明了Skype 或是類似的 VoIP 軟體,如何在兩邊都是 NAT 網路情況下,讓兩邊的 clients 連線起來建立通話,而不需要透過非 NAT 的電腦當作 relay。就好像對兩邊的防火牆打了洞一樣,讓雙方可以自行建立起連線。另外參考UDP打洞