Good Customer Service is Refreshing

May 8th, 2008

I recently moved out of my old house and into my new one, which is much closer to downtown. Of course this meant I had to change my address on all my credit cards, my bank account, bills and of course I had to get my new internet connection setup.

I dread moving my internet because the last time I moved into a new house I was originally planning on getting a Rogers high speed cable, but the guy who was supposed to install it never showed up. It turned out they called me the next week to confirm my appointment — they had scheduled it a week to late. But by that time I had already booked an appointment for another ISP called 3Web to install the almost identical cable high speed internet.

Finally after 21 days, my internet connection was active and I could get back to IRC, MSN and all surfing when I am bored. I lived in that house for two years and I kept 3Web service the entire time. The connection went out for about a day one time, but otherwise I had no problems with it. It was decent, but it wasn’t spectacular or impressive. Nothing to blog about.

Now two weeks before I moved, I called 3Web to let them know. They asked me what day I would like the service at the new house to be working. I said the first of May and they said okay. I thought, “That was too easy”. But on the day I moved, by the time I had a chance to open up the laptop and try it out, it was already working.

Contast this wonderful example of flawless service with my phone line. Bell recommends that you use the moving form on their site. So I did. However I got no response, no call to confirm from them or anything. When I got to my new house, the phone line was dead and I was still paying for the phone at my old house. As punishment I have decided I will no longer have a home phone. Right now I’m doing perfectly fine using Skype for outbound calls, but I still haven’t found a good provider of incoming VoIP lines for a 613 Ottawa number. I would be nice if SkypeIn was available in Canada. Maybe in the future I will get a cellphone, but it won’t be one from Bell.

There are certain companies which have such terrible service you dread dealing with them, and try anything to avoid it. Unfortunetly in Canada many of the monopolies are these kinds of companies, and these monopolies are so pervasive that everyone forgets what good service is like, or at least assumed there was no possible business model that would allow good support and cheap prices at the same company. My experience with 3Web, and flying with WestJet reminded me that is possible, so now I am voting with my wallet.

If you want something fixed soon, you gotta fix it yourself.

September 12th, 2007

I lot of people don’t care about MSN Messenger. Especially those Americans who mostly use AOL Instant Messenger. But here in Canada, everyone uses MSN. I need it to contact all my friends, and maybe even more importantly my coworkers.

At work we have a corporate firewall which only allows outgoing traffic on HTTP port 80. This is okay because MSN has an HTTP method, which allows you to connect from anywhere. Recently the HTTP method stopped working with Pidgin. You could connect and see all your friends that are online, but if you tried to send a message it would report a connection error. A lot of people use Pidgin, but not all of those people use MSN with Pidgin, and out of those people most use the non-HTTP method, so they are fine too. But for the rest of us, this sucks. You can’t talk to anyone, and apparently a lot of people were very affected by this as you can see in the Pidgin bug tracker, and on the Ubuntu Forums.

This morning I was finally fed up. So I spent a few hours researching the MSN protocol, reading the Pidgin source code and capturing packets from the official Microsoft Windows Live Messenger client using Wireshark. After about four hours of insanely fun network reverse engineering, I had a fix.

I thought this as gonna be difficult, I would have to learn all the Pidgin code, and it might take days to figure out the newest changes in the proprietary MSN protocol. But it only took a few hours. Usually I would just sit back and wait for the Pidgin developers to fix it, because it’s their domain. Luckily this time I didn’t. I took a shot and it paid off big time!

I encourage all of you to dive head first into something you know nothing about and see if you can make a difference (especially those people who keep asking me about Jokosher bugs :) ). That’s what free software is all about.

New Website

August 12th, 2007

I now own http://laszlopandy.com, and my old blogspot blog redirects to here. All the old posts and comments have been imported. Everything should be exactly the same with the exception of the much nicer Wordpress theme which I stole from http://jokosher.org/. Hopefully redirecting my old page to this one will not cause my new XML feed to mess up the planet.

It is nice to finally have a server to put my own programs on and have it accessible from anywhere through my domain name. I originally thought that I would be using Python for all my web stuff, but do far I have found PHP to be really simple to use. This is mostly because in Python you have to put all your HTML in doc-strings, which prevents you from having syntax highlighting, and breaking up the string when you need to insert a variable is not elegant. I find PHP method of allowing you to jump in and out of HTML mode to be a much nicer solution.

Right now I’m only playing with Wordpress and few PHP web apps that I wrote myself. Maybe one day I’ll get around to trying out Django and all that jazz, but currently I like 99% of what Wordpress does and I therefore only have to spent time tweaking the remaining 1%.

Speaking of time, because of work and generally being lazy, I haven’t put a lot towards Jokosher lately. Summer is almost over and I will soon be revving everyone to get ready for our unit testing and our beta releases in the fall. Otherwise everything is gonna slip past Christmas. Let us hope it doesn’t come to that.

It’s a small web after all

June 27th, 2007

While watching random videos on YouTube as I often do, I noticed something in the middle of the page.

Here’s a close up of the part of the page that caught my eye (emphasis added):

Wow! Miguel de Icaza watching the same video as me, at the exact same time! What are the odds?

Xubuntu is fast

June 14th, 2007

My hard drive at work got corrupted, and I needed to do a quick reinstall. Luckily everything was backed up on the network, so I asked around the office if anyone had an Ubuntu disk. The only thing I could find was a copy of Xubuntu Feisty Fawn, so I thought I would just apt-get install ubuntu-desktop afterwards.

The installation took a total of 10 minutes including partitioning, etc. But even more impressive is that fact that it takes less then 4 seconds from login to full loaded desktop. I haven’t put GNOME back on here yet, but that might change because I’m missing my deskbar. Anyway kudos to those Xfce and Xubuntu guys.

Speaking At LugRadio Live 2007

June 11th, 2007

Despite the fact that I live approximately six thousand kilometers away from the venue, I will once again be making the trek to Wolverhampton, UK for LugRadio Live. I was lucky enough to be able to attend LugRadio Live last year and host the Jokosher BOF session, but this year I have been invited to give a lightning talk about Jokosher.

What the organizers refer to as a “lightning talk” is actually a 25 minute presentation in a decent sized room. It isn’t as big as being on a real stage but its big enough for me. This will be the first time I’ve done public speaking outside of my high school. Let alone that it is in a foreign country and in the presence of people who are much smarter than myself.

My talk will be entitled “Inside Jokosher” which doesn’t really give you an idea of what it is about, because to be honest when I made up the title I didn’t know what it was going to be about either. Now that I have the details of my presentation ready to go, an appropriate subtitle would be “A power user’s guide to the most open and flexible audio editor available.” Now I an making the assumption that Jokosher is more open than much of the competition and that using Python and Gstreamer makes it much more flexible. But to know for sure if I am right you’ll have to come to my talk and find out for yourself.

For those of you who can’t justify flying across the entire ocean for just one weekend, or can’t make it for some other reason, I believe there will be a video recording of most of the presentations, and I will probably end up turning my talk into an official power user’s guide for Jokosher.

Of course LugRadio Live will be on the 7th and 8th of July in Wolverhampton, UK. You can find out all about it at the official site.

Bill Hilf takes misunderstanding to a whole new level

May 15th, 2007

I saw this article on slashdot. Here is a quote of Microsoft platform strategy manager Bill Hilf:

“They are full-time employees, with 401K stock options. Some work for IBM or Oracle. What does that mean? It means that Linux doesn’t exist any more in 2007. There is no free software movement. If someone says Linux is about Love, Peace and Harmony, I would tell them to do their research. There is no free software movement any more. There is big commercial [firms] like IBM and there is small commercial [firms] like Ubuntu,” he said.

Wow. I though this guy did a pretty good job when he came on LugRadio a year and a half ago, but he obviously doesn’t get it. Free software has nothing to do with money — it’s about liberty. Since the software I run and create still retains liberty then obviously the free software movement still exists. Geez maybe we need to get RMS to pay him a visit and explain this concept.

Presenting Adventure Money

May 13th, 2007

Since I am the person who manages the money for our house, I need an efficient way to keep track of our expenses and an easy way to calculate who owes what to whom at the end of the month. There are lots of good free software utilities for managing money like GnuCash, KMyMoney and the wonderful Gnumeric spreadsheet. I had been using Gnumeric to manage the money for the last 8 months, but now that we have some people staying at the house for just the summer, and other leaving and coming back in September, the spreadsheet was not able to adjust to these irregular circumstances.

The reason I decided to write my own application from scratch instead of using an already existing money management application was because my problem is multi-person orientation and most (if not all) of the money management programs I have tried are single-person oriented. For example GnuCash will let you setup accounts that show you all the money moving to and from a single person. But in my house things like food are paid by any person and shared by every other person. Thus to efficiently and easily calculate who owes how much, it must take into account the fact that one pizza may be paid for by one person, but it was eaten by 4 people. Also I don’t want to have to divide up the amounts myself and put it into GnuCash with multiple accounts, because then I might as well be doing it on paper.

I could have spent my time learning to make an already existing application do exactly what I want; and I probably would have found something pretty close. But I decided that it would be faster to just program it from scratch and then I would be sure I would get exactly what I wanted. I think I was right; it took less then 2 weeks to finished writing this program.

The program is currently called ‘Adventure Money’, but if anyone can think of a better name for it let me know and I’ll gladly change it.

When you first launch the program you will see it has five views, all of which can be seen in the screenshots below.

  • The ‘Money Owed’ view which shows you a list of all the people and how much money they owe this month.
  • The ‘Summary’ view which shows you a break down of the values in the ‘Money Owed’ view by each category and each item.
  • The ‘Payments’ view which shows you all the payments or bills in the account and lets you search them quickly.
  • The ‘Categories’ view which shows you all the categories of payments and lets you create new ones and edit older ones.
  • The ‘People’ view which lets you create, delete and change the name of people as well as set the manager of the account. The manager is the one that everyone will give money to (or take money away from) at the end of the month.

Now I will create an example account:

Here you can see that I have created an account with 3 people, and I am the manager. You can rename a person inline by clicking on the row.

In this screenshot we are creating a category. The category is rent, and is paid by me. Obviously everyone shares the rent, because they all live in the house. But this program does not have to be used by people who live together, only by people who shared money.

I have also created another category ‘Food’ which is paid by anyone. Since I have not specified here who will pay for it, it must be specified when a payment is created. Categories do not have to have a payee, but they do have to have a list of people that shared it.

Here you can see I am entering the rent as a new payment. The value is $900, the date is the 1st of the month, and the category is ‘Rent’. Since I have specified the category, I cannot change the ‘Paid By’ and ‘Shared By’ fields. If I select no category then I can specify the payee and the sharers.

Here is a little popup of the GTK+ Calendar widget to let you select the date. Unfortunately making the popup disappear if you click outside it is only possible with C code and not python. This means that you have to click the close button below to make it disappear.

Now you can see the payment in the list. If I had lots of payments here I could use the widgets above to narrow down my list or search for a specific payment.

Here in summary view you can see everything that a specific person paid for and shared in each month. Currently we have all years and all months selected, and we can see that Eric shared $300 of the rent ($900 split three ways).

Here we can see that I have also shared $300 of the rent and I have paid $900 for rent.

In the money owed view for May 2007 we can see that since we all shared the $900 rent, and there are three of us, we each pay $300. Since I paid for the rent out of my own pocket and $300 of it is my share, I am owed $600. Since I am the manager I so not get displayed in the list but you can see how much I am owed in the text at the bottom.

To show you how the program can handle any expense by any person lets create a payment that wouldn’t normally factor into the monthly costs of a house. Rody bought some pizza one day for $30 and Eric ate some too. Normally it would be easier for Eric to just give Rody $15 in cash, but if we just create a new payment of $30 that is paid by Rody and shared by Eric and Rody it will all get consolidated into their end of the month payments.

Now we go back to ‘Money Owed’ view and we can see that under ‘Paid This Month’ for Rody is says $30. Also notice that since I was not involved with the pizza transaction I am still owed a total of $600. The only difference is that $15 has been added to how much Eric owes and $15 has been subtracted from how much Rody owes. This is effectively a $15 payment from Eric to Rody. In a similar way this program works really well even for people who don’t live together but who visit a restaurant as a group and only one person picks up the bill.

You may also notice the error value in the bottom right corner. All math is performed using the Python decimal module so that there are no binary representation errors when storing the values as floats, but there will still be some error when you divide a $20 payment by 3 people. However the error should never be more than a cent.

The program is written in Python its dependencies are:

  • PyGObject (for event notification)
  • PyGTK (for the GUI)
  • Python Glade2 (for loading the GUI)
  • XML Minidom for Python (for loading and saving files)
  • Python decimal (for base-10 math)
  • Python datetime module (for date calculation)

That’s it for now folks. If you want to use this program or even improve it, just drop me a line, or leave a comment on this page. I would love to hear from you if anyone finds this as useful as I do. You can download the Python source to run or to change the program (please send me patches). As always the code is licensed under the GPL.

I just finished writing my money managing applicat…

May 9th, 2007

I just finished writing my money managing application which I will post on my blog soon. This application has five separate views that can be switched in the main window like the “workspaces” in Jokosher. However I didn’t want to restrict myself to only looking at one of these views at a time, so I put in the option to create a new window that does not have any toolbars or menus, just the view switcher. This means that there could be any number of GUI instances looking at my program’s model at the same time. There could be two copies of the same view and when one is updated and other one has to reflect the changes.

I have implemented my listener code using Python’s GObject bindings so that all the views can know when a signal is emitted on the model. However if there are many views all running at the same time, sending a GObject signal takes a long time. If a signal is sent in response to a button being clicked, the button will stay pushed down for a few seconds while it waits for the signal emission to return. This makes the application look slow and unpolished. I decided that it doesn’t matter if not all the views are updated immediately; I’d rather have the button come back up and then have everything update. So I made this little class to do exactly that:

import gobjectclass AsyncGObject(gobject.GObject):       def __init__(self):               gobject.GObject.__init__(self)

       def emit(self, *args):               gobject.idle_add(gobject.GObject.emit, self, *args)

Just subclass this class instead of gobject.GObject and all your signals will be asynchronous.

Thanks Steve

April 2nd, 2007

Many of us doubted him back when he said he truly wanted to get rid of DRM. I was especially harsh when I told people his essay was just a load of crap designed to make the Apple customers feel like they are not doing harm to this world by supporting DRM. Another criticism was that he didn’t let independent labels put DRM-free MP3s on the iTunes Music Store. But now he has put his money where his mouth is. Thank you Steve, and congratulations to everyone who has been fighting for this.