Is switching proxies on Mac OS 10.5 scriptable?

I often need to change the network proxies settings frequently due to the need to bypass the GFW when accessing websites that are considered “bad”, and have to set the settings back to not using any proxies when accessing “good” websites.

Doing so in Firefox is easy thanks to the little yet handy plugin called SwitchProxy, but for Safari or other applications which use the global system settings of Mac OS, one has to go through many steps in System Preferences to set them, and then go through the exact steps again to unset them. Too repetitive. I wish there is a way to set and unset proxies easily, but I cannot find one. I bit the bullet and use AppleScript (yuck) to do that, here’s the complete script (beware, this is my first AppleScript program):

set proxyServer to "localhost"
set proxyPort to "30000"

tell application "System Preferences"
  activate
  set the current pane to pane id "com.apple.preference.network"
  get the name of every anchor of pane id "com.apple.preference.network"
  reveal anchor "Proxies" of pane id "com.apple.preference.network"
end tell

tell application "System Events"
  tell process "System Preferences"
    tell window "Network"
      tell sheet 1
        tell tab group 1
          tell group 1
            repeat with n from 1 to 3
              tell scroll area 1
                tell table 1
                  select row n
                  tell row n
                    click checkbox 1
                    set turnOnProxy to value of checkbox 1
                  end tell
                end tell
              end tell
              if turnOnProxy is 1 then
                tell group 1
                  set focused of text field 1 to true
                  set value of text field 1 to proxyPort
                  set focused of text field 2 to true
                  set value of text field 2 to proxyServer
                end tell
              end if
            end repeat
          end tell
        end tell
        click button "OK"
      end tell
      click button "Apply"
    end tell
  end tell
end tell

ignoring application responses
  tell application "System Preferences" to quit
end ignoring

if turnOnProxy is 1 then
  say "Proxies are set"
else
  say "Proxies are unset"
end if

I hate to use AppleScript as it simply plays back what a human does, and so the speed is slow, which takes about 5 seconds to finish. I tried to do that by shell script but I couldn’t find the right way to do so, having looked at the defaults command but seems it is not capable at what I want. Anybody knows?

Using Kai font for MacTeX on OS X

Typesetting LaTeX with CJK on Mac OS X is provided out-of-box by MacTeX, so working with LaTeX should be a breeze on Mac OS X. However, MacTeX ships with only two Chinese fonts, Arphic Ming Big5 (bsmi) and Arphic Sung GB2312 (gbsn). As I want to use Kai I have to look around for solutions.

I found this great website that explains how to use LaTeX and the CJK package on OS X. The good news is that the author of the page provides a shell script for installing any Unicode truetype fonts for TexLive so that you can use the truetype fonts in your LaTeX documents. The bad news is… it doesn’t work on my system. I tried it on both Arphic Big5 and GB2312 Kai fonts, and when I ran my LaTeX document through the latex command (or in TeXShop, for that matters), I came to this error:

! Package inputenc Error: Keyboard character used is undefined
(inputenc)                in inputencoding `utf8'.

See the inputenc package documentation for explanation.
Type  H   for immediate help.
 ...                                              
                                                  
l.194 ^^[
         ndinput

Trying the shell script on the STKaiti font (/Library/Fonts/华文楷体.ttf) shipped with OS X, is even worse, because ttf2tfm gives a “Bus error” (or segfault on Linux) when parsing the truetype font, looks like a bug in ttf2tfm:

$ ttf2tfm stkaiti.ttf -P 0 -E 3 -w "stkaitiu@Unicode@"
This is ttf2tfm version 1.5


stkaitiu00:

Glyph  Code   Glyph Name                Width  llx    lly      urx    ury
------------------------------------------------------------------------
Bus error

At the end, I resort to extracting the necessary files from Debian packages (hurray Debian) and put them into ~/Library/texmf, and that works!

The Debian packages I use are latex-cjk-chinese-arphic-bkai00mp and latex-cjk-chinese-arphic-gkai00mp. Since Debian packages are just ar archives, they can be extracted by the ar x command. After the deb package has been extracted, extract the data.tar.gz file, and then look for the folders called fonts and tex, move them to ~/Library/texmf, which you have to create. Now you should have a directory structure like this:

MacTex font installation

After the font files have been put in place, run these two commands (for the Big5 Kai truetype font):

[shell]
$ sudo texhash
$ sudo updmap –enable Map bkaiu.map
[/shell]

For the GB2312 one, use:

[shell]
$ sudo texhash
$ sudo updmap –enable Map gkaiu.map
[/shell]

It’s that easy!