Since mobile phone service providers are keen on bundling service with some new shining pieces of hardware (otherwise some services becomes suddenly unavailable), this was the time I could a new piece of mobile engineering for myself. It was 2 years ago when I’ve got my Windows Mobile 6 HTC Keiser II thingy and as one can imagine there is quite some information piled up in it since then.
I have downsized my field of choice to two options: hyped media-driven video-oriented iPhone (which would have been a nice addition to my range of Apple devices) and a business-oriented true keyboard but small screen BlackBerry Bold. Well, easy to guess from the title – I’ve chosen for Bold. I am not as media-oriented person and I do love typing (even if it is a query for Google); I doubt the hype of iPhone (although BB also has quote some) and… I don’t like T-Mobile which is the only option I have in the piece of land I happen to inhabit. I require good service for the money I normally pay monthly, so sorry, T-Mobile, you have some homework to do. Vodafone is still beating you left and right. So here I go, one hour later than I have expected with a new (flat and wide) piece of Canadian (well, sort of ;)) hardware in my pocket. Some more thorough review to come, but before anything else I miss some vital data on this thing. Namely contacts and calendar. I miss a part of memory in my head which was supposed to keep this data for me for years now, so I need something else (external) to help me out with it.
Well, having a Mac does not give much sync options for non-standard (read non-Apple or old/primitive) devices. Buying software is against my programming nature and since I need it once (for now) why do it anyway. And then I remembered something about Google sync… A short search around revealed that I can do just what I need, although I may get some noise from Google which saved every since e-mail address as a separate contact. Hmm. Better more than less.
Starting with the source. It took me some time to figure out, although it is described at Google sync Win Mobile page. Here are the settings that actually worked for me:
- user: @gmail.com
- password: your_google_account_password
- domain: leave grayed out (whenever @ symbol is entered, done automagically)
Do NOT select synchronizing tasks! This will result in an error and a lot of time in restoring the device as you cannot change the settings (account, domain) for some unthinkable for me reason after you have tried to sync once.
Anyway, after I have figured out that I wanted too much and only put the settings as described above it finally worked. I’ve got my data in Google.
Second step, BB. Well, feel the difference. Just download the app from m.google.com/sync using the BB browser and the only info you type in is your GMail credentials. No place for mistake.
Ok, the first disappointment. No option to sync the COMPLETE calendar. Why? No idea. I could put all events from my Windows Mobile device, but not get them back. Hmmm. Not exactly what I have expected, but better than nothing and it is after all FREE :).
This time I have stumbled (again) a unicode problem using some Python code which was supposed to be perfectly suitable for doing this since it even started with
# -*- coding: UTF-8 -*-
It was quite some time since the last post, but this does not mean I haven’t done anything interesting :). It is just that it was so much interesting that I didn’t have any time to write anything.
Anyway, this time I have stumbled (again) a unicode problem using some Python code which was supposed to be perfectly suitable for doing this since it even started with
# -*- coding: UTF-8 -*-
It went perfectly fine when running in Eclipse, but to my huge surprise I’ve got problems when running the unit tests from the command line in terminal. Whaaat? It just worked!
Well, declaring your source as UTF-8 is not enough of course. There are several things to check when getting the “UnicodeDecodeError: ‘ascii’ codec can’t decode byte … in position …: ordinal not in range(128)”-kind of errors. Googling around didn’t bring me much luck to my surprise, so there is are my findings for the next time :).
First of all make absolutely sure you haven’t forgotten the ‘u’ character before your strings containing the unicode strings. Yep, just like that you screw up the rest of the unicode support. Python (ok, I admit, I use 2.5.4) treats a ‘string’ as a regular string and not as a unicode. So write u’string’ instead!
Second, when doing things file operations don’t forget that you don’t get the unicode by default. Consider the following:
message = u'unicode message'
Well, guess what. You get a problem when writing the string away. It cannot be recognized. So the solution would be to do something like this
encoded_message = message.encode(u"utf-8")
But that’s only a half of the problem. At some point you will be reading this data back. And most probably you would like to get your beloved unicode thingy back. Just doing the following will hardly help:
file_handle = open(full_name, 'r')
line = file_handle.readline()
The following will save your day:
file_handle = open(full_name, 'r')
line = file_handle.readline().decode('utf-8')
Voila. I hope this saves some frustration to somebody, even if it will be me some month later :).
Comments from Andy (thanks!):
Probably there is nothing new for you in what I am saying below, however, from my experience, it covers 99% unicode-related errors.
Unicode string is s sequence of code points in range 0 to 0x10ffff. Encoding is a way of serializing this sequence, so thay can be represented in memory, written to a file, sent over a socket etc.
Encoding unicode string is needed _at least_ because its ‘as is’ byte representation is not portable due to byte order issues.
It is _recommended_ that you work with unicode string internally provided the language/API supports unicode
It is _must_ that you encode the string to be consumed by another program.
Since installing subclipse I’ve got same problem I’ve already had on MacOSX when my subversion command line client (1.5.x) started to complain that the repository was already used with a newer version. Downgrading repository version works, but not a very nice solution, so I have decided to get the latest version. Apparently this is not just an aptitude command, but a little more. This is what have worked for me finally:
Download the source code for 1.6.3 (or later when it becomes available) and the corresponding dependencies from http://subversion.tigris.org. You have to have the following files in the case of 1.6.3:
- tar xvf subversion-deps-1.6.3.tar.gz
Download the OpenSSL from http://openssl.org/source/ if you need https support:
Then perform the following commands:
sudo apt-get install libssl-dev
sudo apt-get install zlib1g-dev
tar xvfz subversion-1.6.3.tar.gz
tar xvfz subversion-deps-1.6.3.tar.gz
tar xvfz openssl-0.9.8k.tar.gz
./configure --with-openssl=/usr/local/ssl --with-ssl --with-zlib=/usr/include --without-berkley-db
sudo make install
Having all this I’ve got working subversion (client) 1.6.3 under Ubuntu 9.02 .
TIP: If you done all above and typing
svn --version still shows the default 1.5.x try another console. The installation of subversion apparently adds a new path which not picked up on the fly.
Yesterday was a nig eye-opener / frustrating night for me. After getting really fed up and even more convinced that my 30/7 kbps download/upload is not a common practice I have started with an investigation on who is doing this to my internet connection. Well, it took my laziness almost two years to get to this point, which also says how much I use my internet connection, but anyway…
First, I assumed it is me. What’s new, a techie that has more devices at home than braincells can definitely screw things up. I am one of those types. Here is the original setup:
- Arris TM502B/220 cable modem provided to me generously by my ISP Chello (The Netherlands);
- Linksys WRT54GL with Tomato formware (upgraded to 1.25 as one of the actions below);
- Numerous devices eventually connecting to the router to get their (drops of) Internet connection.
The last drop was when a friend of mine who had presumably cheaper internet connection claimed higher upload speed than what I had. Let’s nail it down… Well, after hours of googling and changing the settings of my router’s firmware I’ve got zero result. Next step – hardware.
First, I have tried to connect to the modem directly excluding the router (which was my initial suspicion due to QoS settings and who-knows-what-else). This didn’t improve things even a bit. Still the same frustrating numbers (ses below).
Second, the most crusial step. Change the modem itself. Luckily I still have an old Motorola modem (no VoIP phone connection, but I don’t use it anyway). When I’ve got my new modem they didn’t take away the old one, so why not to try. This time luck was definitly on my side, since connecting the old modem worked like a charm, so additional setup was needed. Direct connection didn’t work though, so I had to connect to the router. So be it, it is the desired setup in any case. And then…
I run the speedtest.nl and I gt the numbers which raised my eyebrows in a huge frustration. Ok, first of myself that I have waited so long to get to this point, but second because of my ISP sending me crap. So here it is:
Setup with Arris modem, the results of speedtest.nl, (<laugh>):
- Download 0.25 Mbps
- Upload 0.06 Mpbps
With the old Motorola modem:
- Download 15.57 Mbps
- Upload 1.45 Mpbps
Feel the difference!
I immediately put back QoS to make sure I (or my wife :)) don’t eat up the whole bandwidth with one download and forced myself to put back the Arris modem back on the shelf carefully not breaking it in pieces.
The new modem (Arris) was cutting my connection ridiculously while the only added feature (phone connection) was not used by me at all. I will be cancelling my subscription(s) soon I think and reshaping my package to higher internet only. This costed me too much waiting time and frustrations to keep it like this for the last TWO YEARS!
p.s. Both modems provide basic information on http://192.168.100.1 and the old Motorola with firmware copyrighted in 2002 has even settings like enabling DHCP (which I don’t need and even don’t want) configurable, while Arris’es settings are kept behind the (unknown to me) password.
After hours of searching and hitting the walls with the following error:
File "build/bdist.macosx-10.3-i386/egg/MySQLdb/__init__.py", line 19, in
File "build/bdist.macosx-10.3-i386/egg/_mysql.py", line 7, in
File "build/bdist.macosx-10.3-i386/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/oleksii/.python-eggs/MySQL_python-1.2.2-py2.5-macosx-10.3-i386.egg-tmp/_mysql.so, 2): image not found
I finally decided just to look on what actually was in the .python-eggs folder. Rrrriiight:
-rw------- 1 oleksii oleksii 123024 Sep 20 2008 _mysql.so
Isn’t this just beautiful? I don’t get why it is created under my user anyway while Apache2 is running under different user, but since the created library was only readable by me myself… Well, Apache just couldn’t get to it. Damn. What a loss of time (simply not mentioning all previous frustrations with installs, etc).
I have a habit of reviewing my changes before committing them to the repository. What suprises me is that so far I have only seen home-brewed scripts to perform a ‘batch’ review of all changed files. But ok, how difficult is that? So for my current project I came up with a similar solution. Here are some lines of bash script:
# Find the list of changed files.
FILES=`/usr/local/bin/svn st | grep ^M | /usr/bin/sed ‘s/^M[ ]*\(.*\)/\1/’`
for FILE in $FILES; do
# Invoke favorite diff viewer to see the changes.
svn diff –diff-cmd /Users/oleksii/Scripts/diffwrap.sh $FILE
It could have been beautified a bit, but what a heck… BTW, the ‘magic’ diffwrap.sh’ looks like the following for me (use any other diff tool if you like, I just happen to use DiffMerge because it is available for all the platforms I am using now):
$DIFF $LEFT $RIGHT
It should not be difficult to see which OS I am using here :).
I like XPlanner, but I am also very suspicious on beta’s being frozen for years (ok, GMail being a nice exception :)). Anyway, today I was happily changing XPlanner configuration to get around a known bug in XPlanner, which fortunately didn’t cost too much time to find solution for. XPlanner on Tomcat 5.5 + Java-6 on Ubuntu 8.04 apparently result in an exception during startup. The following explanation (thanks Alex!) gives a quick fix.
- for Find the bean
Arrgggh, I feel I am hacking too much just to get get things working while I already expect them to work out of a box. Is this the way all admins feel?..
It seems that I am out of luck for the last 24 hours. I have tried to set up virtual ftp users for my server and seen the number of posts on this topic it should have been a piece of cake. I wish… Some good posts worth having a look though (and reading CAREFULLY!):
Several lessons on this topic:
- Make sure you have pam_passwd.so. By default it is NOT present on Ubuntu (at least 8.04). Get it by issuing
sudo apt-get install libpam-pwdfile
- Don’t try to be smarter than you are. The following command (without -m switch!) do the trick with the passwd file:
sudo htpasswd -c /etc/vsftpd/passwd user_name
Damn, was it worth sleepless 4 hours of headaches?
Well, this was driving me crazy for several days. My wlan0 interface was not getting ip address from my router, which was pretty bad considering that machine it supposed to be a server. After all I’ve started getting dreadful
WPA: EAPOL-Key Replay Counter did not increase - dropping packet
messages, which I couldn’t get at all.
- Ubuntu 8.04 (server)
- Linksys WMP54G PCI wireless network card (almost stopped trusting Linksys since this one); driver WinXP 64 bit via ndiswrapper
- Linksys WRT54GL w/Tomato firmware (yeah, finally got to it and it is so much better than the original;
- No IP address after restart on the host; the IP address is provided when doing manual
sudo ifdown wlan0
sudo ifup wlan0
Damn… that’s not how I want to run a headless server that I have planned to put somewhere in the house to get rid of the noise (therefore the wireless to make freely movable).
Tips & Tricks
- Check if you’re running multiple wpa_supplicant instances by running
ps ax | grep wpa_supplicant
If so, stop them by issuing
- The following wpa_supplicant.conf worked for me
And here is the reference to it in the /etc/network/interfaces:
auto lo wlan0
iface wlan0 inet dhcp
Finally, there was no luck in obtaining DHCP consistently, I have used the same hack as described in the Ubuntu WIFIDocs, and added the
to the /etc/rc.local :(. This works properly since it will be executed when the rest is properly started.
p.s. This seem to be a known bug #53387, so I am not the only one spending my time for nothing. Welcome to the wonderful world of Linux (you have to set it up and you will be setting it up… forever…).