Cygwin: No Output from Rsync

July 5th, 2010

I experienced a very strange situation where rsync simply stopped working. It wouldn’t even output anything for rsync --help or even plain rsync. which showed it to be in /usr/bin/rsync as expected. A closer look revealed something odd:

$ ls -lah /usr/bin/rs*
-rwxr-xr-x 1 fitzsimj None    0 2010-01-11 13:40 /usr/bin/rsync
-rwxr-xr-x 1 fitzsimj root 349K 2010-02-19 11:20 /usr/bin/rsync.exe

I had a mysterious, empty rsync file next to rsync.exe in my /usr/bin folder. Deleting the rsync file fixed my problem. I have no idea where this came from.

Steam Connection Error (“you must first connect to the Internet”)

July 5th, 2010

I was able to download and install Valve’s Steam client on my Windows 7 64-bit machine, but when I tried to run the client I would instantly receive this error:

Steam.exe (main exception): To run Steam, you must first connect to the Internet

I tried changing port-forwarding rules in my router, and disabling the Windows firewall entirely. In the end, the problem turned out to be PeerBlock, which is used in P2P networking. PeerGuardian would cause the same problem, as would any software which performs network blocking functionality.

Rather than disable PeerBlock, I added Steam’s servers to PeerBlock’s allowed list. To do this, open PeerBlock and, as Valve servers appear on the list, right click them and select “Allow x.x.x.x permanently”:

Adding a server to PeerBlock's list

Connections to Valve’s servers should appear in the TCP range of 27014 – 27050 and UDP 4380, and 27000 – 27030. It appears that their servers are identified as “VALVE CORPORATION” or “Limelight Networks”.

Flents Econo-Mate Contact Lens Case

June 30th, 2010

I can never find these when I need them: compact, low-volume, contact lens cases. The cases sold by contact solution companies are positively cavernous, sucking up a relatively tremendous quantity of solution every time you use them!

I had an assortment of these Flents Econo-Mates years ago, but managed to misplace them one at a time. By the time I wanted more, I’d long forgotten who made them, and no stores carried them, so I was quite pleased to finally come across a pair. According to the manufacturer’s online catalog, they’re available in white and a rather bothersome shade of flesh tone, with a suggested retail price of $2.79 for a blister pack of two. Part number K1010.

Word of the Day: Fremdschämen

February 28th, 2010

Fremdschämen is a German word which means vicarious embarrassment on behalf of others.

For examples, refer to almost anything that Ricky Gervais has made.

Photo Journal: Dempster Highway to the Arctic

February 26th, 2010

Dempster Highway to the Arctic, Vancouver to Inuvik is an interesting photo journal by David Cambon.

MicroSD Card Sleuthing

February 17th, 2010

I just read a fascinating story about investigating a bad batch of Kingston MicroSD cards. Some of the things I learned:

  • Toshiba and Sandisk co-own the same fabrication facility.
  • Samsung does not sell their own cards retail, only through resellers who re-brand them.
  • Kingston does not appear to manufacture their own memory chips, but repackage Sandisk/Toshiba chips.
  • A complete SD card’s cost is nearly identical to the raw Flash chip itself, meaning that the controller and package is provided essentially for free. This is presumably because the cost of testing a free-standing Flash chip is dramatically higher than testing a complete SD card.
  • Chinese fake SD cards are impressively made and packaged.
  • How to spot a knock-off SD card (appearance irregularities and card ID data).
  • Z-A-Recovery is useful for recovering strange data from that re-sold, fake SD card you bought at a Chinese market stall.

I’m certainly wouldn’t say that Kingston SD cards are bad, but I will point out that I don’t see any reason to move away from my quite affordable Sandisk, Lexar, and A-DATA cards.

IME Functions Fail From Separate Process

February 13th, 2010

I wanted to change the behavior of the Microsoft IME bar using AutoHotkeys, a utility which can be used to create macros, remap keys, or do any of a variety of other related tasks.

This led me to ime_func.ahk, which appears to be an AutoHotkeys script which uses DllCall to access Imm32.dll, the Input Method Manager library. I believe that this script was intended to manipulate the state of the IME language bar.

As near as I can tell, this AutoHotkeys script targets an older implementation of the IMM library. Some of the methods used are now only listed for Windows Mobile platforms.

I began experimenting with ImmGetContext and ImmGetConversionStatus. ImmGetContext always returned a hIMC value of NULL.

On the Developing IME-Aware Multiple-thread Applications MSDN page, the following is stated (bold highlight added):

The IMM includes thread identification checking that determines if a calling thread is the creator of a specified input method context handle (HIMC type) or window handle (HWND type). If the thread is not the creator of the handle, the called IMM function fails and a subsequent call to GetLastError returns ERROR_INVALID_ACCESS.

Additionally:

  • A thread should not access the input context created by another thread.

  • A thread should not associate an input context with a window created by another thread, and vice versa.

So, it appears that cross-process IME manipulation is forbidden.

Publishing GPG Public Key in DNS Records

February 9th, 2010

Publishing GPG/PGP keys to public keyservers has one glaring fault: once you commit something, you can never remove it. I made the mistake of adding my email address at an employer’s domain. Now it is permanently tied to my public key and email address.

Assuming that you own a domain, publishing keys in your DNS record gives you complete control over their content. Of course, there is nothing stopping someone from retrieving your public key from your DNS record and uploading it to a public keyserver!

Dan Mahoney wrote an excellent guide on publishing PGP keys in DNS TXT records.

This guide to GoDaddy DNS record configuration made it relatively easy to modify my TXT record.

GnuPG Not Working Under Cygwin

February 9th, 2010

I was having trouble using the GnuPG plugin for vim under Cygwin. The GnuPG plugin allows seamlessly integrated decryption, editing, and re-encryption of GPG-encrypted content within vim. However, on my Windows 7 box, it just showed gibberish. Attempting to edit my encrypted password file resulted in a rather vague error message:

$ vim Documents/passwords.gpg

"Documents/passwords.gpg" [Incomplete last line][converted] 7 lines,
2547 characters
Press ENTER or type command to continue

Pressing enter simply resulted in gibberish, likely the raw data of the encrypted file.

The solution was to turn on vim’s filetype plugin processing:

:filetype plugin on

To make this setting persistent, add it to your ~/.vimrc file.

Converting MP3 to AAC

February 5th, 2010

Here is a script I wrote to convert MP3 files to AAC for my Softbank 821SC phone. The script uses FFmpeg, which I downloaded from here.

@echo off

REM ---------------------------------------------------------------------------
REM  Set the following variable to the ffmpeg.exe path on your system.
REM ---------------------------------------------------------------------------
set FFMPEG_PATH="c:\tools\FFmpeg\ffmpeg.exe"

REM make sure the user provided an argument.
if NOT "%~1" == "" goto ARGS_OK

REM bad arguments, print error and exit.
echo.
echo    Usage examples:
echo       mp3toaac.bat file_to_convert.mp3
echo       mp3toaac.bat *.mp3
echo       mp3toaac.bat some_directory\*.mp3
exit /b 1

:ARGS_OK

REM use for/in so that we can accept individual files or wildcards.
for %%i in ("%~1") do %FFMPEG_PATH% -i "%%~i" "%%~ni.aac"

echo.
echo Done.

exit /b 0

Interesting elements of this batch file:

  • Use of for/in in order to accept both filenames and wildcards.
  • Use of %~X to strip parentheses from a filename variable.
  • Use of %~nX to strip the extension from a filename variable (i.e. retrieve the basename).

Are Transcend And A-DATA The Same Company?

January 31st, 2010

I have an A-DATA 8GB MicroSDHC card from NewEgg.com. On the back appears:

9A0275
MMAGR08GUDCA-DB
S FLH3E6X3 941

If you search for MMAGR08GUDCA-DB, you’ll find posts listing this same product identification number for Transcend cards.

Corporate profiles list different CEOs (Peter Shu for Transcend, Simon Chen for A-DATA). The product details, however, seem to indicate that they’re the same company, or at least share suppliers.

This is relevant only because A-DATA cards sell for slightly less than Transcend cards ($17.49 vs. $20.99). Additionally, if you don’t need the SD adapter, you can get the bare A-DATA MicroSDHC 8GB card for a few cents less ($16.99).

Horrible Stack Overflow at Coding Horror

December 11th, 2009

At sometime around 10:40am on December 11th, 2009, both Coding Horror and the Stack Overflow Blog disappeared when their host, CrystalTech, lost the VM on which they run. Coding Horror was immediately replaced with this:

Coding Horror experienced 100% data loss at our hosting provider, CrystalTech.

I have some backups and I’ll try to get it up and running ASAP!

CodingHorror_BrokenSite

According to his Tweets, however, Atwood soon discovered that all backups were on the very virtual machine which was lost.

CodingHorror_Tweet_BackupVM

This is all rather ironic, since Jeff himself blogged about how important backups are. The record of this is currently only available via Google Cache. Within the blog post, he did mention the potential of Google Cache as a backup system, so perhaps this is just his admission that second-rate backups are good enough for him:

while Google may be a great service, it’s only a so-so backup mechanism.

CodingHorror_BackupStrategy

This, of course, has the Internet falling over in alternating fits of schadenfreude and irony.

Rock Climbing Gyms in Japan

October 13th, 2009

I’ve begun to gather information on rock climbing gyms in Japan and put them into Google Maps. This map is centered on Tokyo, but I’ll add gyms anywhere in Japan as I come across them.

My goal is to provide, for each gym:

  • Exact location, including standardized Japanese address, as well as a Western-readable address.
  • Hours of operation.
  • Prices.
  • Whether the gym provides roped climbing, bouldering, or both.
  • Images of the exterior and interior climbing walls.


View Indoor Climbing Gyms/Walls in Japan in a larger map

The map currently includes the following gyms:

Central Fitness Club Nishidai
3-7-10 Hasune Itabashi-ku, Tōkyō

Fukagawa Sport Center
1-2-18 Etchūjima Kōtō-ku, Tōkyō

Nippin Main Branch
3-11-1 Soto-kanda Chiyoda-ku, Tōkyō

Rondo Fitness Club
1-28, Sakae-chō Higashi-murayama-shi

T-Wall Kinshi-chō Branch
2-10-12 Mouri Kōtō-ku, Tōkyō

T-Wall Edogawabashi Tokyo
2-5-23 Suidō Bunkyō-ku, Tōkyō

Tama Sport Hall
5 Azuma-chō Akishima-shi, Tōkyō

Climbing Gym Runout
Tokyo Building, 2-10-19 Nishi-koigakubo Kokubunji-shi, Tōkyō

B-Pump 2 Kanagawa, Yokohama
1-8-2 Hiranuma Nishi Yokohama Kanagawa

B-Pump Tokyo
1-24-10 Kamiogi Sugunami-Ku Tōkyō

Pump 2 Kawasaki
Tama Ward, Kawasaki City, Kanagawa Prefecture

Pump Ōsaka
Nishiyodogawa Ward, Ōsaka City, Ōsaka Prefecture

7a
NS Building B1, 3-17-11 Sanda-machi Hachioji-shi, Tōkyō

J-Wall in Kanagawa
Kanagawa

Central Fitness Club Mizunokuchi
2-10-22 Mizonokuchi, Takatsu, Kawasaki, Kanagawa

SSH Tunneling Windows RDC

July 5th, 2009

This article explains how to securely port-forward Windows Remote Desktop (Terminal Services) over SSH, using standard SSH command line syntax. If you prefer to use GUI SSH tools, such as PuTTY, there are other guides for that.

Terminology Notes

My terminology assumes that you are connecting to a machine on your home network, which is protected by a firewall. However, the diagrams and commands are valid regardless of whether the remote network is at home or not.

Additionally, I use RDCHOST to represent the local name or IP of your RDC server within the home network, and my_home_ip to represent your home IP address as visible from the Internet.

Prerequisites

  • Depending on network configuration, port-forwarding may have to be configured on the firewall.
  • An SSH client (e.g. Cygwin’s OpenSSH for Windows) must be installed on the local machine.
  • An SSH server (e.g. Cygwin’s OpenSSHD for Windows) must be present on some machine within the home network.
  • SSH keys must be generated and deployed appropriately.

SSH Command Syntax

ssh -C -N -L localPort:destinationHost:3389 proxyHost

  • localPort is the port on localhost through which you wish to connect.
  • destinationHost is the Remote Desktop host, as it appears on the home network.
  • proxyHost is the host running SSHD, through which you will tunnel.

Configuration 1: Discrete Servers

This configuration has the firewall port-forward SSH to a server on the home network, which proxies the connection to the RDC server:

                       +-----------[ Home Network ]---------------+
                       |                                          |
localhost <----> Home Firewall <---> SSH Server <---> RDC Server  |
                       |                                          |
                       +------------------------------------------+

Command line:

ssh -C -N -L 6009:RDCHOST:3389 my_home_ip

Configuration 2: Combined RDC & SSH Servers

In this configuration, the RDC server also has an SSH server, and the firewall port-forwards directly to it:

                       +------[ Home Network ]-----+
                       |                           |
localhost <----> Home Firewall <-----> RDC & SSH   |
                       |                Server     |
                       +---------------------------+

Command line:

ssh -C -N -L 6009:localhost:3389 my_home_ip

Configuration 3: Firewall as SSH Server

In this configuration, the firewall acts as the SSH server, proxying the connection directly to the RDC server on the home network:

                       +----[ Home Network ]----+
                       |                        |
localhost <----> Home Firewall <---> RDC Server |
                  & SSH Server                  |
                       |                        |
                       +------------------------+

Command line:

ssh -C -N -L 6009:RDCHOST:3389 my_home_ip

Additional Suggestions

Rather than specifying the IP address of your home firewall, I suggest using DynDNS to get a dynamic DNS entry.

Rikaichan: Perfect Tool for Japanese Learners

July 5th, 2009

The Rikaichan Project is a Firefox plugin which pops up translations information for Japanese characters.

Rikaichan-Example

Usage:

  1. Install the Rikaichan plugin.
  2. Restart your browser.
  3. Navigate to a page with Japanese characters.
  4. Right-click on the page and select Rikaichan (see image below).
  5. Hover the mouse over characters to see a pop-up translation.

Rikaichan-Enable