Sunday 19 January 2014

Rendering Japanese Postscript files under *nix via Ghostscript.

Postscript files are somewhat handy in keeping formats as plain as possible, however when distributed it can be a real pain especially when dealing with Postscript that uses other languages.

Here is a bit of a guide on howto render up for instance proper Japanese postscript files under most OS. Although the guide is written primarily for linux and specifically archlinux. I am sure similarly implemented methods may also work under other platforms so long as one is using Ghostscript to render postscripts for instance.

Before I continue, I like to thank some people from #ghostscript (IRC Channel on Freenode) for giving me help to get this working. In no apparent order whatsoever:
  • Robin_Watts
  • sags
  • ray_laptop
Ghostscript support is also available via stackoverflow.com #ghostscript (http://stackoverflow.com/questions/tagged/ghostscript).
I also like to thank Medowy (of mainly #deskthority) for offering to give a hand in seeing if the same set of postscript files would render properly on his/her machine.

Postscripts with Japanese fonts may seem rare so I will post examples of where I grabbed my postscripts from that featured Japanese fonts. In my case I was intending to work on contributing more stuff to wiki entry. Yes, I am a wiki sort of a guy as well, so sue me. Anyway, my work was focused on writing stuff about HHKB. For those of you whom aren't aware, I actually blogged about the HHKB that I received some few months ago. Due to the lack of information on a specific wiki site I decided to contribute information for the better good. I hindsight, I am also trying to improve my typing speeds and what not in the process...

Now, I grabbed a random .ps file from Eiichi Wada's site. Eiichi Wada is one of the co-developers for the HHKB. In fact what he did was the layout. Here is his homepage: http://member.wide.ad.jp/~wada/index-j.html For postscript files, scroll down to the "archive" area. For those who want to read stuff about HHKB, the first three links from the bottom up are HHKB related. Do be warned they are all Japanese.

When you open up the ps file or tried to convert it to pdf (without even looking at it) you will most likely it will look garbled. Something like this for instance:
This is not Japanese by the way, this is what happens when the renderer fails to find the suitable font required by the ps file and instead used a substitution. The substitution usually ends up being Courier font which is not compliant with Japanese characters.

When running ghostscript through console, more messages appears:
$ gs keyboard.ps
GPL Ghostscript 9.10 (2013-08-30)
Copyright (C) 2013 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Can't find (or can't open) font file /usr/share/ghostscript/9.10/Resource/Font/Ryumin-Light-H.
Can't find (or can't open) font file Ryumin-Light-H.
Querying operating system for font files...
Can't find (or can't open) font file /usr/share/ghostscript/9.10/Resource/Font/Ryumin-Light-H.
Can't find (or can't open) font file Ryumin-Light-H.
Didn't find this font on the system!
Substituting font Courier for Ryumin-Light-H.
Loading NimbusMonL-Regu font from /usr/share/fonts/Type1/n022003l.pfb... 3924092 2505298 10303912 5759890 1 done.
Can't find (or can't open) font file /usr/share/ghostscript/9.10/Resource/Font/GothicBBB-Medium-H.
Can't find (or can't open) font file GothicBBB-Medium-H.
Didn't find this font on the system!
Substituting font Courier for GothicBBB-Medium-H.
Loading StandardSymL font from /usr/share/fonts/Type1/s050000l.pfb... 4097316 2478813 10303912 6786729 3 done.
>>showpage, press <return> to continue<<
quit
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
$

This clearly shows there are missing fonts. So how does one go about locating and installing missing fonts? The people at #ghostscript has the answer. sags pointed out a link which has Japanese fonts for a rather old ghostscript version. The link is: http://www.enel.ucalgary.ca/People/far/howto/gs-ttf.html

What one needs to grab is the 5.6MB file named gs6.0.kanji.tar.gz. Extract it in a directory that ghostscript can have access to. In my case I extracted it into my ghostscript base installation directory which is /usr/share/ghostscript/9.10/.

The next step is to use the following Fontmap file (thanks to sags for this):
/min-21ku (min-21ku.gsf) ;
/min-22ku (min-22ku.gsf) ;
/min-23ku (min-23ku.gsf) ;
/min-24ku (min-24ku.gsf) ;
/min-25ku (min-25ku.gsf) ;
/min-26ku (min-26ku.gsf) ;
/min-27ku (min-27ku.gsf) ;
/min-28ku (min-28ku.gsf) ;
/min-30ku (min-30ku.gsf) ;
/min-31ku (min-31ku.gsf) ;
/min-32ku (min-32ku.gsf) ;
/min-33ku (min-33ku.gsf) ;
/min-34ku (min-34ku.gsf) ;
/min-35ku (min-35ku.gsf) ;
/min-36ku (min-36ku.gsf) ;
/min-37ku (min-37ku.gsf) ;
/min-38ku (min-38ku.gsf) ;
/min-39ku (min-39ku.gsf) ;
/min-3aku (min-3aku.gsf) ;
/min-3bku (min-3bku.gsf) ;
/min-3cku (min-3cku.gsf) ;
/min-3dku (min-3dku.gsf) ;
/min-3eku (min-3eku.gsf) ;
/min-3fku (min-3fku.gsf) ;
/min-40ku (min-40ku.gsf) ;
/min-41ku (min-41ku.gsf) ;
/min-42ku (min-42ku.gsf) ;
/min-43ku (min-43ku.gsf) ;
/min-44ku (min-44ku.gsf) ;
/min-45ku (min-45ku.gsf) ;
/min-46ku (min-46ku.gsf) ;
/min-47ku (min-47ku.gsf) ;
/min-48ku (min-48ku.gsf) ;
/min-49ku (min-49ku.gsf) ;
/min-4aku (min-4aku.gsf) ;
/min-4bku (min-4bku.gsf) ;
/min-4cku (min-4cku.gsf) ;
/min-4dku (min-4dku.gsf) ;
/min-4eku (min-4eku.gsf) ;
/min-4fku (min-4fku.gsf) ;
/min-50ku (min-50ku.gsf) ;
/min-51ku (min-51ku.gsf) ;
/min-52ku (min-52ku.gsf) ;
/min-53ku (min-53ku.gsf) ;
/min-54ku (min-54ku.gsf) ;
/min-55ku (min-55ku.gsf) ;
/min-56ku (min-56ku.gsf) ;
/min-57ku (min-57ku.gsf) ;
/min-58ku (min-58ku.gsf) ;
/min-59ku (min-59ku.gsf) ;
/min-5aku (min-5aku.gsf) ;
/min-5bku (min-5bku.gsf) ;
/min-5cku (min-5cku.gsf) ;
/min-5dku (min-5dku.gsf) ;
/min-5eku (min-5eku.gsf) ;
/min-5fku (min-5fku.gsf) ;
/min-60ku (min-60ku.gsf) ;
/min-61ku (min-61ku.gsf) ;
/min-62ku (min-62ku.gsf) ;
/min-63ku (min-63ku.gsf) ;
/min-64ku (min-64ku.gsf) ;
/min-65ku (min-65ku.gsf) ;
/min-66ku (min-66ku.gsf) ;
/min-67ku (min-67ku.gsf) ;
/min-68ku (min-68ku.gsf) ;
/min-69ku (min-69ku.gsf) ;
/min-6aku (min-6aku.gsf) ;
/min-6bku (min-6bku.gsf) ;
/min-6cku (min-6cku.gsf) ;
/min-6dku (min-6dku.gsf) ;
/min-6eku (min-6eku.gsf) ;
/min-6fku (min-6fku.gsf) ;
/min-70ku (min-70ku.gsf) ;
/min-71ku (min-71ku.gsf) ;
/min-72ku (min-72ku.gsf) ;
/min-73ku (min-73ku.gsf) ;
/min-74ku (min-74ku.gsf) ;
/min.r21 /min-21ku ;
/min.r22 /min-22ku ;
/min.r23 /min-23ku ;
/min.r24 /min-24ku ;
/min.r25 /min-25ku ;
/min.r26 /min-26ku ;
/min.r27 /min-27ku ;
/min.r28 /min-28ku ;
/min.r30 /min-30ku ;
/min.r31 /min-31ku ;
/min.r32 /min-32ku ;
/min.r33 /min-33ku ;
/min.r34 /min-34ku ;
/min.r35 /min-35ku ;
/min.r36 /min-36ku ;
/min.r37 /min-37ku ;
/min.r38 /min-38ku ;
/min.r39 /min-39ku ;
/min.r3a /min-3aku ;
/min.r3b /min-3bku ;
/min.r3c /min-3cku ;
/min.r3d /min-3dku ;
/min.r3e /min-3eku ;
/min.r3f /min-3fku ;
/min.r40 /min-40ku ;
/min.r41 /min-41ku ;
/min.r42 /min-42ku ;
/min.r43 /min-43ku ;
/min.r44 /min-44ku ;
/min.r45 /min-45ku ;
/min.r46 /min-46ku ;
/min.r47 /min-47ku ;
/min.r48 /min-48ku ;
/min.r49 /min-49ku ;
/min.r4a /min-4aku ;
/min.r4b /min-4bku ;
/min.r4c /min-4cku ;
/min.r4d /min-4dku ;
/min.r4e /min-4eku ;
/min.r4f /min-4fku ;
/min.r50 /min-50ku ;
/min.r51 /min-51ku ;
/min.r52 /min-52ku ;
/min.r53 /min-53ku ;
/min.r54 /min-54ku ;
/min.r55 /min-55ku ;
/min.r56 /min-56ku ;
/min.r57 /min-57ku ;
/min.r58 /min-58ku ;
/min.r59 /min-59ku ;
/min.r5a /min-5aku ;
/min.r5b /min-5bku ;
/min.r5c /min-5cku ;
/min.r5d /min-5dku ;
/min.r5e /min-5eku ;
/min.r5f /min-5fku ;
/min.r60 /min-60ku ;
/min.r61 /min-61ku ;
/min.r62 /min-62ku ;
/min.r63 /min-63ku ;
/min.r64 /min-64ku ;
/min.r65 /min-65ku ;
/min.r66 /min-66ku ;
/min.r67 /min-67ku ;
/min.r68 /min-68ku ;
/min.r69 /min-69ku ;
/min.r6a /min-6aku ;
/min.r6b /min-6bku ;
/min.r6c /min-6cku ;
/min.r6d /min-6dku ;
/min.r6e /min-6eku ;
/min.r6f /min-6fku ;
/min.r70 /min-70ku ;
/min.r71 /min-71ku ;
/min.r72 /min-72ku ;
/min.r73 /min-73ku ;
/min.r74 /min-74ku ;
/goth-21ku (goth-21ku.gsf) ;
/goth-22ku (goth-22ku.gsf) ;
/goth-23ku (goth-23ku.gsf) ;
/goth-24ku (goth-24ku.gsf) ;
/goth-25ku (goth-25ku.gsf) ;
/goth-26ku (goth-26ku.gsf) ;
/goth-27ku (goth-27ku.gsf) ;
/goth-28ku (goth-28ku.gsf) ;
/goth-30ku (goth-30ku.gsf) ;
/goth-31ku (goth-31ku.gsf) ;
/goth-32ku (goth-32ku.gsf) ;
/goth-33ku (goth-33ku.gsf) ;
/goth-34ku (goth-34ku.gsf) ;
/goth-35ku (goth-35ku.gsf) ;
/goth-36ku (goth-36ku.gsf) ;
/goth-37ku (goth-37ku.gsf) ;
/goth-38ku (goth-38ku.gsf) ;
/goth-39ku (goth-39ku.gsf) ;
/goth-3aku (goth-3aku.gsf) ;
/goth-3bku (goth-3bku.gsf) ;
/goth-3cku (goth-3cku.gsf) ;
/goth-3dku (goth-3dku.gsf) ;
/goth-3eku (goth-3eku.gsf) ;
/goth-3fku (goth-3fku.gsf) ;
/goth-40ku (goth-40ku.gsf) ;
/goth-41ku (goth-41ku.gsf) ;
/goth-42ku (goth-42ku.gsf) ;
/goth-43ku (goth-43ku.gsf) ;
/goth-44ku (goth-44ku.gsf) ;
/goth-45ku (goth-45ku.gsf) ;
/goth-46ku (goth-46ku.gsf) ;
/goth-47ku (goth-47ku.gsf) ;
/goth-48ku (goth-48ku.gsf) ;
/goth-49ku (goth-49ku.gsf) ;
/goth-4aku (goth-4aku.gsf) ;
/goth-4bku (goth-4bku.gsf) ;
/goth-4cku (goth-4cku.gsf) ;
/goth-4dku (goth-4dku.gsf) ;
/goth-4eku (goth-4eku.gsf) ;
/goth-4fku (goth-4fku.gsf) ;
/goth-50ku (goth-50ku.gsf) ;
/goth-51ku (goth-51ku.gsf) ;
/goth-52ku (goth-52ku.gsf) ;
/goth-53ku (goth-53ku.gsf) ;
/goth-54ku (goth-54ku.gsf) ;
/goth-55ku (goth-55ku.gsf) ;
/goth-56ku (goth-56ku.gsf) ;
/goth-57ku (goth-57ku.gsf) ;
/goth-58ku (goth-58ku.gsf) ;
/goth-59ku (goth-59ku.gsf) ;
/goth-5aku (goth-5aku.gsf) ;
/goth-5bku (goth-5bku.gsf) ;
/goth-5cku (goth-5cku.gsf) ;
/goth-5dku (goth-5dku.gsf) ;
/goth-5eku (goth-5eku.gsf) ;
/goth-5fku (goth-5fku.gsf) ;
/goth-60ku (goth-60ku.gsf) ;
/goth-61ku (goth-61ku.gsf) ;
/goth-62ku (goth-62ku.gsf) ;
/goth-63ku (goth-63ku.gsf) ;
/goth-64ku (goth-64ku.gsf) ;
/goth-65ku (goth-65ku.gsf) ;
/goth-66ku (goth-66ku.gsf) ;
/goth-67ku (goth-67ku.gsf) ;
/goth-68ku (goth-68ku.gsf) ;
/goth-69ku (goth-69ku.gsf) ;
/goth-6aku (goth-6aku.gsf) ;
/goth-6bku (goth-6bku.gsf) ;
/goth-6cku (goth-6cku.gsf) ;
/goth-6dku (goth-6dku.gsf) ;
/goth-6eku (goth-6eku.gsf) ;
/goth-6fku (goth-6fku.gsf) ;
/goth-70ku (goth-70ku.gsf) ;
/goth-71ku (goth-71ku.gsf) ;
/goth-72ku (goth-72ku.gsf) ;
/goth-73ku (goth-73ku.gsf) ;
/goth-74ku (goth-74ku.gsf) ;
/goth.r21 /goth-21ku ;
/goth.r22 /goth-22ku ;
/goth.r23 /goth-23ku ;
/goth.r24 /goth-24ku ;
/goth.r25 /goth-25ku ;
/goth.r26 /goth-26ku ;
/goth.r27 /goth-27ku ;
/goth.r28 /goth-28ku ;
/goth.r30 /goth-30ku ;
/goth.r31 /goth-31ku ;
/goth.r32 /goth-32ku ;
/goth.r33 /goth-33ku ;
/goth.r34 /goth-34ku ;
/goth.r35 /goth-35ku ;
/goth.r36 /goth-36ku ;
/goth.r37 /goth-37ku ;
/goth.r38 /goth-38ku ;
/goth.r39 /goth-39ku ;
/goth.r3a /goth-3aku ;
/goth.r3b /goth-3bku ;
/goth.r3c /goth-3cku ;
/goth.r3d /goth-3dku ;
/goth.r3e /goth-3eku ;
/goth.r3f /goth-3fku ;
/goth.r40 /goth-40ku ;
/goth.r41 /goth-41ku ;
/goth.r42 /goth-42ku ;
/goth.r43 /goth-43ku ;
/goth.r44 /goth-44ku ;
/goth.r45 /goth-45ku ;
/goth.r46 /goth-46ku ;
/goth.r47 /goth-47ku ;
/goth.r48 /goth-48ku ;
/goth.r49 /goth-49ku ;
/goth.r4a /goth-4aku ;
/goth.r4b /goth-4bku ;
/goth.r4c /goth-4cku ;
/goth.r4d /goth-4dku ;
/goth.r4e /goth-4eku ;
/goth.r4f /goth-4fku ;
/goth.r50 /goth-50ku ;
/goth.r51 /goth-51ku ;
/goth.r52 /goth-52ku ;
/goth.r53 /goth-53ku ;
/goth.r54 /goth-54ku ;
/goth.r55 /goth-55ku ;
/goth.r56 /goth-56ku ;
/goth.r57 /goth-57ku ;
/goth.r58 /goth-58ku ;
/goth.r59 /goth-59ku ;
/goth.r5a /goth-5aku ;
/goth.r5b /goth-5bku ;
/goth.r5c /goth-5cku ;
/goth.r5d /goth-5dku ;
/goth.r5e /goth-5eku ;
/goth.r5f /goth-5fku ;
/goth.r60 /goth-60ku ;
/goth.r61 /goth-61ku ;
/goth.r62 /goth-62ku ;
/goth.r63 /goth-63ku ;
/goth.r64 /goth-64ku ;
/goth.r65 /goth-65ku ;
/goth.r66 /goth-66ku ;
/goth.r67 /goth-67ku ;
/goth.r68 /goth-68ku ;
/goth.r69 /goth-69ku ;
/goth.r6a /goth-6aku ;
/goth.r6b /goth-6bku ;
/goth.r6c /goth-6cku ;
/goth.r6d /goth-6dku ;
/goth.r6e /goth-6eku ;
/goth.r6f /goth-6fku ;
/goth.r70 /goth-70ku ;
/goth.r71 /goth-71ku ;
/goth.r72 /goth-72ku ;
/goth.r73 /goth-73ku ;
/goth.r74 /goth-74ku ;
/min (min.gsf) ;
/min-RKSJ (min.gsf) ;
/min-EUC (min.gsf) ;
/min-V (min.gsf) ;
/Ryumin-Light /min ;
/Ryumin-Light-H /min ;
/Ryumin-Light-RKSJ /min-RKSJ ;
/Ryumin-Light-RKSJ-H /min-RKSJ ;
/Ryumin-Light-EUC /min-EUC ;
/Ryumin-Light-EUC-H /min-EUC ;
/Ryumin-Light-V /min-V ;
/goth (goth.gsf) ;
/goth-RKSJ (goth.gsf) ;
/goth-EUC (goth.gsf) ;
/goth-V (goth.gsf) ;
/GothicBBB-Medium /goth ;
/GothicBBB-Medium-H /goth ;
/GothicBBB-Medium-RKSJ /goth-RKSJ ;
/GothicBBB-Medium-RKSJ-H /goth-RKSJ ;
/GothicBBB-Medium-EUC /goth-EUC ;
/GothicBBB-Medium-EUC-H /goth-EUC ;
/GothicBBB-Medium-V /goth-V ;
/GothicBBB-Medium-90ms-RKSJ-H /goth-RKSJ ;
/Ryumin-Light-90ms-RKSJ-H /min-RKSJ ;
Once that is done, save the filename as "Fontmap" (without quotes) and then invoke ghostscript to load the Fontmap. Ghostscript will not do so automatically when the fonts are not in it's own search path so there are two ways to do this:
1) Start ghostscript with the -I switch followed by the path/to/fonts. For instance in my case with ungzipped tar under /usr/share/ghostscript/9.10 with an extra directory as /usr/share/ghostscript/9.10/gs6.0.kanji and with fonts directory that also contains Fontmap file. I would invoke ghostscript via "gs -I /usr/share/ghostscript/9.10/gs6.0.kanji/fonts".
2) Set an environment variable for ghostscript. "export GS_LIB=/path/to/kanji/fonts". Then run ghostscript.
What these does is it adds extra directories to ghostscript search path. So the next time when you lauch ghostscript with the Japanese postscript file, it will load up the Japanese fonts that setup prior to invoking ghostscript to open the file.
The output should be like this when the setup has been successful:
For those that are keen, the screenshots are from the file named keyboard.ps (和田英一. 個人用小型キーボード. 1995年度WIDEプロジェクト研究報告書. (Japanese)). Also, it seems like ghostscript got the update whereas other postscript viewers did not get the update. In either cases I believe ps2pdf would be included as part of ghostscript and one can easily convert postscript files to pdf once they can successfully render the output of the ps file.
Remember, if you see ghostscript showing garbled output of a postscript file, converting it to pdf will still leave you the same garbled output except it is now a pdf file and not a ps file. 

Further reading (thanks to ray_laptop):
  • Ghostscript for newbie is available via Ghostscript GIT repository: http://git.ghostscript.com/?p=ghostpdl.git;a=blob_plain;f=gs/doc/Use.htm;hb=HEAD
  •  "How Ghostscript finds font files": http://git.ghostscript.com/?p=ghostpdl.git;a=blob_plain;f=gs/doc/Use.htm;hb=HEAD#Finding_files in http://git.ghostscript.com/?p=ghostpdl.git;a=blob_plain;f=gs/doc/Use.htm;hb=HEAD#Font_lookup

Monday 2 December 2013

Revisiting some old school keyboards.

Most people tend to love hoarding things, especially males. In my case the case is not so much different as I collect things of interest. 

My interest with old school keyboards have begun when I was a kid. Although I missed my chances to collect the very first keyboard that I touched or so. I managed to get a hold of one quite old keyboard. 

When I started living in shared accomodation I managed to "snatch" another old keyboard. Though I was not always just simply collecting old keyboards mind you I was collecting things of interest. I also have other normal keyboards as well however as of late my interest has now been looking at mechanical keyboards.

Aside from my HHKB purchase, the two other keyboards that I have had issues of either one sort or another. The two keyboards in question are: Northgate Omnikey 101 and APC/Clicker F-21 respectively.

Previously having briefly discussed about mechanical keyboards I am not going to go through the same discussion here. These two keyboards are Alps based switches. Northgate Omnikey 101 using a true Alps branded switch whilst the APC Clicker F-21 using a cloned variant and they don't exactly label it as Alps but APC membrane switch with the slider that looks like it was based off Alps.

There are already some information floating on the web for the Northgate Omnikey 101 so I also rehash on such information. However APC Clicker 101 is quite an interesting story. 

APC/Clicker brand is a Taiwanese brand and the actual name of the manufacturer is Tai Hao. What makes it interesting is that on the front of the keyboard shows the brand name/logo as Clicker. On the reverse side of the keyboard tells one that it is APC brand. Why would a keyboard feature two different brand names? The real answer is a bit of a mystery.

From my understanding, APC brand name is most likely a registered/trademark for the US company that deals with UPS (Uninterrrupted Power Supply). Most likely the APC brand in US for instance has been around longer than Tai Hao or APC. So in a bid to prevent confusion and/or any legal preceedings (if any) over the use of the said brand name APC may have traded their name as Clicker. However the Clicker name is only what it is bearing at the front of the keyboard but not on the back of it. It could also have been that the Clicker name is just a model name. If you look at Northgate Omnikey 101 for instance, you have the brand name, the model name and the model number for instance. So another possible explanation is that the full name of the said keyboard for APC/Clicker F-21 would most likely be APC Clicker F-21 respectively.

Adding more twist to the story is that the said same keyboard (Clicker, that is what I will refer to from now on) does not print any model numbers on the back of the keyboard. The question then leads onto how does one find out which model of APC Clicker do they have if it is not labelled on the back of the keyboard or the front? The answer lies on the controller board within the keyboard. At least this is true in my case. There was simply no other ways to tell the APC Clicker boards apart from just staring at the keyboard without taking it apart.

These clicker boards so far I have noticed (one from an online forum/wiki deskthority) and the other being the keyboard that I own is completely different case and logo design.

They also say that you can never be able to judge a book by simply looking at the front cover. The same said case is quite true for the clicker that I own. When I decided to pull mine apart and to see what sort of switches, etc did it have. I noticed something particularly odd apart from being an Alps sort of clone. The only "hard" PCB component was the controller whilst the rest of the board are all sitting on membrane sort of structure (which is both light and flexible). This would now make the Clicker in question a more of a hybrid rather than a true mechanical considering that it has a spring underneath each spring but the board that would then pick up the signals from the key presses are just a mere membrane base (apart from the controller PCB of course).

One particular thing I have noticed when taking my Clicker board apart was that the little metal plates comes (from each key) out with little to no effort. If one was not cautious in taking their Clicker or Clicker like boards apart they would notice those little plates would either fly out or gets misplaced. If the key caps were removed before the back of the keyboard case was opened and again if not cautious as well, both the springs as well as the slider would also come out fairly easily. You could say when dealing with hybrid keyboards like this one needs to exercise appropriate caution rather than being brash when the keyboard case does not easily budge (when opening for instance). 

As with most of my other blog entries with including links as well as photos I will do so here. However my photos will not only cover my Clicker keyboard alone, it will cover photos of my Northgate Omnikey 101 where I will.. *ahem* proudly show off my poor attempts at trying to pull the key caps off my Northgate Omnikey 101 with my bare hands as well as minimal experience.

Some interesting information for those interested about Northgate Omnikey 101 or Northgate keyboards:
Here are some interesting information for those interested about APC Clicker F-21:

Undoubtably there are a few people that I want to give thanks to for giving me information on this particular case.
  • Daniel Beardsmore (of both Deskthority and Geekhack) - For constant information on Alps switches as well as potentially posting information on Deskthority wiki about the Alps switches, keyboards, etc.
  • "mbodrov" of Deskthority - For post on the Clicker keyboard that he/she has. 
  • A few other sites that I have posted links to, thanks for hosting these!
  • "laffindude" via Geekhack IRC for telling me that the "Enter" key found on the Clicker boards are not ISO "Enter" key but just a big "Enter" key which was made at one stage but was discontinued.
  • daemonraccoon for pointing out certain deprecated terms along with redundant use of incorrect labelling for a specific type of switch technology. 
  • ZeDestructor via Reddit Mechboard IRC for betting that my Clicker board was not suffering from "yellowing" but it is just dirty/stained. He was pretty right on the money there.
Now... time for photos!
NOKIA|N900|Not defined|1/30sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 07:35:28
Here is the Northgate Omnikey 101. Apart from two accidentally broke key cap stems the keyboard looks fine otherwise. Though the switch for button "B" I believe is broken. In other case it will probably need to be sent off for repairs.
NOKIA|N900|Not defined|1/20sec|F2.8|5.2mm|ISO-264|No flash|2013:12:02 07:36:08
A close up of the underneath for one of the keys with the broken stem. YOu can see the rectangular mark in the (sort of) middle seems to be very short in fact it has been trimmed.
NOKIA|N900|Not defined|1/30sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 07:39:28
The reverse side of the Northgate Omnikey 101. Nothing really fancy here apart from few wear and tear marks for the keyboard of its age.
NOKIA|N900|Not defined|1/33sec|F2.8|5.2mm|ISO-123|No flash|2013:12:02 07:39:58
I believe this might be a regular PS/2 lookalike socket. Though the actual cable tells a different story. On one end the cable has a 270 degree bend on one end which plugs into the keyboard whilst the other side shows a 5 pin DIN connector. Fortunately the keyboard does not need any firmware programming for it to work with modern computers.
NOKIA|N900|Not defined|1/33sec|F2.8|5.2mm|ISO-114|No flash|2013:12:02 07:40:18
An overview of the rear side of the Northgate Omnikey 101. There is only one socket as it is clearly evident. There are some versions of the Northgate Omnikey series that has more than one of those sockets on the back.
NOKIA|N900|Not defined|1/22sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 07:41:02
Underneath the logo on the front of the keyboard is actually a small door allowing one to adjust various settings for the keyboard functionality.
NOKIA|N900|Not defined|1/24sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 07:46:16
The outer case being taken off reveals nothing all that fancy. The only class it has is that the switches seems stay on the metal plate. Modern keyboards forgos such metal plates probably because of the weight and expense.
NOKIA|N900|Not defined|1/26sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 07:46:48
Close up photo of what I believe is the actual controller for the keyboard. There is at least one chip on the PCB within virtually every normal keyboard which basically interfaces between the computer as well as the user whom is pressing all the keys.
NOKIA|N900|Not defined|1/20sec|F2.8|5.2mm|ISO-325|No flash|2013:12:02 07:52:26
Clearly a nice way to see broken keycap stem sitting intact with the Alps switch. Unfortunately it is not easy to see the markings of the switch housing due to the various lighting and camera angle settings needed. Though a more clearer one is shown later on.
NOKIA|N900|Not defined|1/20sec|F2.8|5.2mm|ISO-303|No flash|2013:12:02 07:54:05
A close up of the Alps complicated switch. Clearly it is attached to the metal plate/cover. Also it seems to be housed in a much different way than Clicker board. Cherry MX boards are somewhat similar to the setup shown here. This photo is actually off the right Alt key which was pulled off "cleanly" unlike the shots shown above.
NOKIA|N900|Not defined|1/250sec|F2.8|5.2mm|ISO-100|Fired|2013:12:02 07:54:34
With this one can see some of the inscriptions on the Alsp switch housing. Not all of them again due to the lighting angles as well as camera settings needs to be well defined.
NOKIA|N900|Not defined|1/27sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 08:03:24
APC Clicker F-21 keyboard. This photo shows how dirty the keyboard has become in around a decade or two worth of usage. The "Enter" key is not ISO Enter key, the red characters on the most of the key legends are Chinese bopomofo whilst the blue characters are actual Chinese words (Changjie). This basically signifies that the main purpose of this keyboard was to allow input of Chinese characters. Obviously.
NOKIA|N900|Not defined|1/250sec|F2.8|5.2mm|ISO-100|Fired|2013:12:02 08:03:44
Previous photo showed a missing key cap but that was intentional. Here you can see the undersides of one sample key cap being pulled off and placed in between the keys of "Esc" and "F1" respectively. Notice how the switch housing is white and it appears to not have any inscriptions on it. Even at that the "socket"/slider still closely resembles to that of the Alps switch.
NOKIA|N900|Not defined|1/33sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 08:04:11
The reverse sides of the keyboard. Again, you can see how on the obverse side the logo printed on the top left hand side of the keyboard is named as "Clicker" whereas the reverse side bears the label "APC". Even worse, there are no model numbers making it hard to identify which exact model this is.
NOKIA|N900|Not defined|1/24sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 08:07:23
The back of the Clicker keyboard taken off, here it bears the membrane lookalike board for the keys yet the controller board is actually a proper PCB.
NOKIA|N900|Not defined|1/24sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 08:09:21
Taken off two screws that held the keyboard controller along with the membrane base in place. Here one can see all the various diodes, chip, LED, etc.
NOKIA|N900|Not defined|1/20sec|F2.8|5.2mm|ISO-229|No flash|2013:12:02 08:09:42
A close up photo of the actual controller chip itself. Notice how the membrane board connects with a proper PCB. It looks similar to how smartphones at one stage used for instance to connect a "soft" board with a "hard" board.
NOKIA|N900|Not defined|1/29sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 08:16:52
Photo of the APC membrane switch. I had to reposition a few metal plates as they were misplaced. It does not take all that much effort to really misplace the metal plates.
NOKIA|N900|Not defined|1/20sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 08:20:04
Again just a closer photo of the APC membrane switch. Notice the "hole" in where it was supposed to lie for the !/1 key.
NOKIA|N900|Not defined|1/29sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 08:19:06
The main elements of what a APC membrane switch, notice that there is no housing, the switch housing is part of the kebyoard case much like how PFU HHKB Pro's design with Topre's housing as part of the case. Here the photo just shows the slider, the spring as well as the metal plate. Only one metal plate per key.
NOKIA|N900|Not defined|1/24sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 08:22:03
This is roughly what it would look like if it were sitting inside the keyboard. The metal plate might be a bit too far behind but meh. 
NOKIA|N900|Not defined|1/33sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 08:23:24



Membrane photo shots, nothing all that much interesting to see here as it is usually multi layered.
NOKIA|N900|Not defined|1/33sec|F2.8|5.2mm|ISO-200|No flash|2013:12:02 08:23:56
Apparently this makes the membrane layer to be three instead of two. You can see the previous photo how the last layer is more blue than the photo shown here.
NOKIA|N900|Not defined|1/20sec|F2.8|5.2mm|ISO-214|Fired|2013:12:02 15:14:11
After taking all the photos I got sick of how unkempt the keyboard looked so I decided to give it a good clean with metholated spirits, cloth, worn toothbrush along with the tools needed to take the keyboard apart. It was a very long process to clean it considering how each of the switches needs to be taken out of their housings, placed accordingly, the stabilisers under some long keys such as as Ctrl, Alt, Numpad enter, Spacebar as well as the big Enter key. The enter key was a real pain, two stabilisers instead of one.
NOKIA|N900|Not defined|1/20sec|F2.8|5.2mm|ISO-200|Fired|2013:12:02 15:14:27
The finished refurbishment of the undersides for the Clicker keyboard.

Inevitably the Clicker keyboard still had issues with the big Enter key for instance still sticking down for some weird reason. I have tried swapping the metal plate from the Enter key to one of the lesser used keys such as right Ctrl and Alt. I have already swapped the metal plate for the spacebar which seems to work so far without much of a hitch but at times the Enter key can still stick. 

**update** Since then, I bought a can of lube (WD-40 3-in-1 professional Dry lube with PTFE). There weren't much documentation on how to best lube these APC Clicker keyboards so I decided to lube the sides where the leaf springs sit. This meant that I need to open the keyboard up, take the leaf springs out and spray the lube before placing the leaf springs and all back in.

Initially I though I killed the keyboard when I plugged the keyboard back in I saw the LED lights were either flickering on all three Lock LED or showing Caps and Scroll Lock LED on. The keyboard seems to have a key or two stuck down even though physically they are not. That was then I thought the keyboard was really dead.

I unplugged the keyboard and decided to sort of momentarily drop my interest on preserving this old school part mechanical keyboard. It wasn't until when I was talking about the same keyboard that one day I decided to try and plug the keyboard back in to see if there are any signs of life.

The keyboard seems to slowly start showing signs of life. Some of the Lock keys seem to function but intermittently. I decided to try and see if there is anything I can do to make the keyboard work again. It turns out that the membrane board was somewhat partly covered in excess lube that I did last time round. With each succession (of testing) I decided to wipe off excess lube and see if the keyboard can be brought back to life. Ultimately after all these rinse-and-repeat process the keyboard is back alive again! I was really happy that it seems like all my efforts has not really gone to waste and that the keyboard was not about to give up on itself yet.

Despite all the efforts in refurbishing and lubing again on the switches, very little has improved on the feel of the keyboard. Some of the keys that seemed to be stuck I found out later on was mainly due to the fact that the leaf springs were bent. It was not easy to fix them and I decided to swap those faulty leaf springs with the leaf springs from other keys that I hardly use. The end result was only marginally better. The feel of typing away on the keyboard feels inconsistent. Some of the keys required more actuation (pressing hard to input a signal to the computer) whilst others required little effort for the same desired effect. I guess despite all this, I would agree with some of the people from deskthority have mentioned. The feel of these APC membrane keys are really not all that great. Sure it is clicky (on some parts) but the feel is really not all that great and because it is inconsistent it is hard to type properly on the keyboard itself.

What can be said ultimately about these APC keyboards? they are somewhat an interesting keyboard in it's own right however they aren't really worth all that effort to be restored to it's former glory. For a partly mechanical keyboard it did seem to achieve one goal which was to make the feel almost like as if one is on a mechanical keyboard (with that spring and all noise) however on another front the feel is totally inconsistent. There are some keyboard aficionado whom would love to type faster without "bottoming out" when typing (as bottoming out may make loud noise on mechanical keyboards and thus besides maybe spent more time overall on making sure the keys are properly actuated) would find APC Clicker keyboards uninteresting. Certainly it would make the typing experience very hard to master on a keyboard with certain keys that requires less force than others and that they were not arranged in some formation that makes the feel more even across all the fingers (like what Realforce for instance did with variable weights on groups of keys).