Saturday, February 03, 2007

Back Travelling - Brasil

Day starts at 6.15 am with that stupid alarm. I don't even think it was light out yet. I got a whopping 4 hours of sleep (or so). Oh well, I can always sleep on the plane. The cab ride to the airport was ... um ... interesting. The cabbie grew up in a Quaker family without any joy. They maybe smiled 3 times in 20 years. It was an interesting start to the day. How do I find these people? I really just wanted to sleep. 06.15 is not really a reasonable time to get up, I mean come on. Who really wants to get up early?

I met Jeff at SFO and gave him his passport. Why is it that whenever one travels, crazy things must happen? At least there were no bomb scares (like at BWI) or bombs going off (Paris-CDG) this time. I was able to upgrade to business class for the longer trip to Sao Paulo. That made the trip much nicer. We get to Dulles. It was weird to be back in the DC area. I hadn't been back for over a year. Though, I only saw the airport. We touched down 15 minutes early. That must have taken an act of Congress for United to do that. Of course, they still managed to be over 30 minutes as we sat on the taxiway for over 50 minutes waiting for a gate. We had to rush to scarf down a Wendy's sandwich and get on the plane. That was lunch at 6pm. Then we had dinner a few hours later on the way to Sao Paulo.

Got to see a pretty awesome sunrise at 33000 feet over the Atlantic. Except he who can always sleep on planes, couldn't sleep much. Even though I only had about 4 hours the night before. Great, that means jet lag is gonna suck.

We get in to GRU. Walk a long way, wait in line for passport control for about an hour. Our 2+ hour connection time just got a lot tighter. Then we wait in line for another 15-30 minutes to hand in a little piece of paper that says we've got nothing. Oh joy. Even less time to make a connection. Now we get to wait in another line for 15-30 minutes to check in. By this time they were already boarding the plane. Pretty stupid to tempt Murphy, I know, but I mentioned to Jeff that I had never missed a flight in all my other travels. The boarding pass says go to gate 3, which is also what the attendant said. We get to gait 3. Thankfully the security line was reasonably short. The airplane leaving gate 3 is going somewhere else. The guy was nice and told us to go to gate 5. We did get on the plane around the time it was supposed to leave. There were a bunch of other people that got on behind us, so it wasn't that close.

This is a pretty bad introduction to a country. Get up at 2am, fly for about 24 hours, wait in line for another couple of hours and almost miss the connection. At least I had been to Rio before. I don't remember any issues like that. Maybe Sao Paulo airport just sucks.

Everything else went pretty well. The airport is a long way from the city center. It's a really beautiful ride through the countryside to get downtown. I slept for a little on the plane trips, but probably less than 2 hours. Kinda tired. Travelling sucks, but man is it fun to be travelling again. :-)

Oh, we managed to get a second hotel booked. We didn't find that out until after we had already checked in the first hotel. This is gonna be interesting to see what happens. Got some good news about Testing on the Toilet doing well. But I already knew that. :-) Mail is down, but still have more to catch up on. :-(

We walk around the city for a couple of hours. There's not a ton to see here, but it's nice. Had an awesome burger for lunch! It's been 36 hours since I started, still not tired, but I gotta try to go to sleep. It's 2300 here. Good night!

Thursday, December 22, 2005

Confessions of a Language Bigot

I'm so ashamed. It all started when I was a poor boy and awfully abused...

Ok, well, that's not quite true, at least the second sentence. :-)

Back in 1995, I was exposed to Python for the first time and pretty annoyed by it. Unlike most people significant whitespace was a positive, since it was pointed out curly braces are redundant with whitespace. So I was already specifying my intent once, why would I need to repeat myself. DRY and all that. Ok, I buy that argument.

But really, C had served me quite well for many years, I was quite experienced with it and I could do everything I needed. Sure developing GUIs was kinda painful, but come on, what's really better.

Well, we had to develop over 280 C APIs to implement the highly repetitive, but fairly regular RTCA DO-219. So this guy wrote Python code that generated the C APIs. I had to review the Python code. I wasn't really happy about it.

Ok, there were a few things which I reluctantly had to admit were half decent. I still managed to avoid actually using Python for the duration of my stint at ARINC which lasted until 2000. In the meantime, I learned C++ and used it increasingly. It was fine, better than C in some ways, worse in others. But since it was mostly C-ish, it was okay, I didn't really have let go of the basic syntax. No matter how bad something is, most people prefer a known bad versus an unknown.

In 2000, I wasn't able to achieve the things I wanted at ARINC, so I followed that guy above to a dot bomb in DC. There was this new-fangled technology I'd heard so much about called Java. It was gonna fix all the worlds problems and there would never need to be any other programming language. It would be perfect. It would do everything but give me a blowjob if I believed the hype. (Or maybe I just missed something.)

I was quite eager to learn Java. I wanted to believe the hype. I really wanted to learn just one more language and be done with it. I had already learned BASIC, machine code, Pascal, assembly, C, shell scripting, make, C++ and others I forgot (like Prolog). I can be pretty lazy, but that's the ideal programmer, right? I even have some, um "colorful," constructive lazy solutions lurking in my closet. So if I learned just one more language, I could stop wasting my time learning a language and actually solve problems.

I already mentioned I was working at a dot bomb, so you can imagine what the business was like. OTOH, I had a lot of fun. The first week was great, I had to learn Java and Javascript and create a working web page to submit auction data. Oh, did I mention I didn't know HTML at this point either. It was great to be overwhelmed. The second week slowed down and I jumped into some awful code. It happened to be written in Java, but I can't really blame Java, ugly is ugly straight through. I've since seen even worse Java code that was Pascal, ported to C++ and then ported again to Java.

I learned a lot about Java in the next 9 months--completely lived Java. At the end of the 9 months, I was completely disgusted. The "company" was a joke and the Java hype was about as accurate as saying the Earth is flat. It had a few marginal improvements over C++, but in the hands of well qualified people it seemed to do more harm than good. We mostly used Java 1.1, with a little 1.2 at the end.

I quit the dot bomb and decided to take some time off. I figured that since I had already taken the plunge to learn a new language, I better learn one that could teach me more than Java had. Actually, I learned to ignore the hype, so it wasn't a complete waste. I figured I might as well learn Python finally. It had a few things that really made it much easier than C. Like when I needed to do something like:

    for x in range(100):
        print x,
        for y in range(100):
            print y,

I don't remember the exact code. There was more formatting, but this sort of stuff is much easier in Python (or any scripting language) than in Java or C++.

I wasn't about to work for someone else again after the dot bomb experience. Eric and me had already decided to start our own business. We were both contractors for ARINC, so it was easy to go back to being contractors/consultants. This time we were going to work together rather than as individual hired guns. He was already consulting on a short term gig and I was going to take a break.

The stock market was still doing well and I decided it was fun to watch it. I started a project to pull down stock quotes and track portfolios. I had already decided I was going to really give Python a shot (5 years of hostility was long enough). It seemed like a good match to do the portfolio app in Python.

I think I got about 2 weeks of Python programming and learned some nice features of Python. It wasn't great, but it was usable. And GUI programming in any scripting language beats Motif. Hell, what doesn't beat Motif programming?

Stupid ARINC decides they have a lot of money to spend and we needed to hurry up and get the business up and running. Dammit, I didn't even get a real month of vacation between jobs before I gotta start again! Well, what are you gonna do when they are practically throwing money at you. It's a good problem to have.

So after about 4 weeks of moderate Python use, I decide to write the new product we were contracted to write in Python. This wasn't quite as risky as it sounds. Eric had a bunch of Python experience, so he was my backup. It was only a 3-4 month contract. How much could possibly go wrong?

Heh, don't answer that question!

Actually, the project went very smooth. We hit all the deadlines which was really good since it was a fixed price, fixed schedule contract. There weren't any big gotchas. I learned a lot about Python and really learned its strengths. I was quite impressed.

Towards the end of the contract, I was demoing the system to the customer. I did some simple action like dragging a plane being deiced at one gate to another gate and the whole app crashed! !@#$% (blush). Sorry about that... It really wasn't that big of a deal, just major embarrassment and my own disappointment that I had screwed up. It still wasn't final delivery and everything else went very well.

I later determined the problem was I had moved some code between modules and forgot to copy the import. Based on my enormous embarrassment, I pretty much vowed at that point to fix the problem. If there wasn't a solution, I would create one. Well, there wasn't a solution. I had read what Guido wrote about compiling Python, etc. I didn't care if I could only find the one bug that made the app crash, I was going to write a program to find that problem. Did I mention, not only am I lazy, but I'm also stubborn. I really didn't think you could find many bugs in Python programs. Boy was I wrong.

There have been many other less embarrassing moments that most people don't know about. I suppose it's time for me to come clean about those moments too. People made various requests for adding warnings to pychecker. I often commented to myself or privately to others how stupid that mistake was and it will only find problems in one persons code. I mean, really, who forgets to add the parenthesis when calling a method as in file.close (as opposed to file.close()). And damn if there weren't too many times to count I saw that message come out from my own code!

I spent the next 4 years or so (2001-2005) annoyed at the Java letdown. But I had my Python, I was very happy with it. I still did a lot of work in C and C++. They annoyed me from time to time, but they were still my old friends. I really liked Python and became a developer at the end of 2001 (I think). I got really involved with Python and the Python Software Foundation.

My 5 year cycle hit and it was time for me to move on again. Somehow I wound up at Google. Sometimes I still try to figure out how I got there, but mostly I'm just having a good time and learning tons. Google uses many languages, but primarily they are C++, Java, and Python. There's lot of code in all those languages. There's lots of experts in all those languages. There's lots of bigots emphatically declaring the One True Language. (I'm not implying the experts are the bigots.)

I used to say I don't like Java. I find that isn't even accurate anymore. Java has it's strengths and weaknesses. No different than Python, C, C++, Ruby or any other language that's ever been created. Different strengths and different weaknesses, but every one of them is flawed. Some flaws run deep, others are shallow. There's no shortage of people spouting how some idiosyncrasy is hugely important in the language they don't approve of, while the idiosyncrasies in their own pet language are of no importance.

Languages are just tools. Like all tools, have various intended purposes. Use the best tool for the job. In order to determine which tool to use, it's up to you to base your opinion on prejudice and innuendo. Or to base your opinion on how well a language solves a specific problem.

IMO, the hype that surrounds Ruby (particularly) Rails is overblown. So what? It helps Python in many ways. The more attention one P language gets, helps promote all the P languages. Puby is definitely a P language as long as you read it in Cyrillic. ;-)

All languages annoy me at this point. I wish they were all perfect, but none of them are. I just recently realized one reason I like Python better than Java and C++. I can change Python, I can't change the proprietary/closed languages. This obviously applies to all open source languages.

I've looked at Ruby a couple of times. I've never found it to be much better than Python. I find it to be different in many small ways. That doesn't make it better or worse, just different. People are different, some people will prefer one vs. another. That's ok.

We (the language developers) need to learn more from each other. We could all benefit by working together. I wish we had community run conferences like PyCon that catered only to the language developers. Wouldn't it be great if Perl, PHP, Python, and Ruby (and any other language) developers got together to share war stories, learn about things that worked and things that didn't. I'm not talking about a love-fest. I want to learn from other smart people doing similar things. I don't want to make their mistakes. I want to learn vicariously. I'm sure I won't agree with all their decisions, but if I could understand why they made the trade-offs they did, I can make a better decision.

I fully intend to learn Rails. I have a little experiment I hope to continue. I have been documenting what it takes to setup the same web app up and running and how long it takes. I only went through setting up the databases (Postgres and MySQL) and Rails so far. Hopefully there will be more later in 2006.

One final, unrelated thought. Maybe we should really work to get the syntax for dropping explicit self. I think Guido wants to keep it explicity in the signature. Though I recall either a do statement that allowed not specifying the object (self generally). There's also the seemingly general agreement that .attr (ie, leading dot) should reference self. Maybe we should push for these in 2.5. There is now a critical mass of Python developers with enough time to make this happen.

It's late I wrote way too much. If you read this far, I'm sure it says a lot about you. I'm not sure what, but it must say something! Now I need to do more listening, since that's what this world needs more.

Sunday, August 28, 2005

Blog is all caught up

Hey!!! This is the first entry that isn't back dated.

I made it through my first week of work. I am totally and utterly overwhelmed. I love it! I haven't found anything bad about work. Ok, I suppose there is one thing, but it's probably best not to say and every other company has similar problems. Google seems to be doing a very good job from what I've seen so far. I have no doubt I will find things I don't like or could be improved. Hopefully I will have the opportunity to make changes. Being an employee hasn't been as weird as I thought it would be. After over 10 years of kinda being my own boss, I thought it might be a bit uncomfortable. So far, it's been the opposite. I've been more comfortable doing things when they tell you to. Since there are always customers, you're never really the boss of yourself anyways.

Damn Comcast. They are making me drive into work Tuesday. How? It took less than two weeks for them to screw up my internet connection. Bad signal levels. Sometimes it works, like right now. I only lost one post due to the bad connection. I need to get back home quick when they come out to fix the problem, so it's best if I use the car. They also made me turn on the TV for the second time I was here. The first time was to verify they installed cable properly. Since I wasn't planning on watching anything, I unplugged the TV. When the internet went out, I figured it best to verify at least the TV was working. Of course it was, just internet was out.

The rest of these notes are my feelings towards my new home. I walk too fast for a Californian, but I ride my bike too slow. They should balance each other out. I'm in no hurry when I ride my bike (ok, I'm pretty lazy), so there's no need to go faster. OTOH, I jaywalk all the time. I'm guessing it will take less than a year to get a ticket. What a useless law to enforce. Which brings up something I've found to be quite odd here. California is known as being this liberal haven. I find it peculiar that they seem to be so into Law and Order. Not the television show (maybe that too, I don't know), but everything. There are so many signs, it's dizzying. Do this, don't do that. This is how much it will cost if you do this.

So many people water their lawns. I realize I'm in NorCal (Northern California) where there aren't as severe water shortages. However, they complain about not having enough water, then they waste it. I know at least some of the water is reclaimed which doesn't seem as bad, but I'm sure a lot of it is also clean drinking water. I have to say it is kinda funny to see a sign that the sprinklers use reclaimed drinking water, don't drink it. There are a lot of homeless people around. I was surprised at how many are here. There seem to be as many as in DC.

One other annoying thing is that as much as California is tolerant, there seems to be a huge gap between Latinos and everyone else. It's worse than the gap between black and white in the east. I was talking to a guy from Peru about it. His opinion was that it was primarily a workforce issue. The Latinos have a particular set of jobs they typically perform and so there isn't much intermixing. That does seem to be true. I don't know if that's the cause or effect.

It's still a very nice place, just some observations I've noticed so far.

I like that there is a fair amount of ethnic diversity. Lots of Asians from all over. The restaurants reflect that, which is good for me since I love Asian food. I've seen mostly Indian, Thai, Chinese, and Japanese.

Friday, August 26, 2005

Almost through the first week

I keep forgetting to mention. I've never worked at a place with so many conference rooms! I guess I kinda had the expectation that there weren't many (I forgot about when I interviewed apparently). It's not that communication isn't important, it's just that I was thinking that it was different. Well what's different is that there aren't that many big conference rooms like other places. There's a bunch of very small conference rooms. It works out pretty well actually.

Thursday, August 25, 2005

Nothing much to mention today. Today's word of the day is the same as yesterday, ontology again. I magically got approval to work on pychecker. It was really difficult. I sent an email yesterday and got approval. Seems we are still working out how to announce this stuff though.

I think I can say this. I was reading the style guides. I finished the C++ guide and opened the Python guide just before heading off to dinner. I didn't really read it, but I did see that at the very top was a summary and happened to notice that the #1 entry was "PyChecker: required." I thought that was humorous (in case anyone doesn't know, I wrote pychecker). Now I really got fix all those bugs that have been in there for quite some time. I did add my key to SF and was able to cvs co pychecker.

I did the weekly walk and tried to get someone interested in documenting pychecker. I'm sure many people would appreciate it. In case that was too boring, I tried to sucker^h^h^h^h^h^h offer the Python docs up for enhancements. I read the rules on blogging, hence the verbiage at the bottom of the page.

Oh there's something I keep forgetting to mention. I feel like I'm back in DC. I've heard so many languages being spoken and even more accents, it's really quite nice.

Wednesday, August 24, 2005


It's 4 o'clock?!? What the hell have I been doing all day? I got in before 8 am and the next thing I know it's 4 pm. Things are moving so fast I kinda lose track of time.

Still getting access to more systems, etc. Got my tetanus shot today. Signed up for the weekly walk reminder and the gym. Of course, the doctor said no strenuous exercising for the next few days. I'm assuming riding my bike isn't strenuous. Although on the ride in I remember the problem with not riding one's bike very often. Let's just say it will be much nicer when I develop some callouses. At least my hands are fine.

Word of the day: ontology

Yesterday's word of the day: cacophony

These are words that you don't typically hear engineer's use in their everyday language. I'm going to keep a list of all the interesting words that are not particularly common. It was funny to hear these words used in a presentation.

One really nice thing I haven't mentioned so far is that people are encouraged to bring pets (really dogs) to work. At least dogs that are nice and quiet.

I find it funny that my desktop computer has a Microsoft sticker on it. So Google paid for an OS that was probably immediately wiped from the disk and will never be used. How much is Google subsidizing MS because of its (MS's) monopoly?

This is really stupid (like the rest of what I wrote isn't?). At any rate, I really like the bathrooms. They are kept very neat and clean, but that's not what I'm talking about. All the bathrooms have shelves that you can put books, etc. Lots of big shelves right when you walk in. It's very convenient not to have to hold something while you're peeing. There's even little shelves over the urinals. (I think one of the bathrooms in a lobby didn't, but I noticed it after I wrote this.)

No, I still haven't learned how to use the toilet yet. Today the seat was heated. If it takes me this long to learn to use the toilets, I don't even wanna guess how long the phone system will take.

Tuesday, August 23, 2005

Day 2

For the first time in my life, I rode my bike to work. For the last time in my life, I rode my bike to work. Just kidding. :-) It took me less than 20 minutes door to door and the drive takes over 10 minutes, so there really isn't much difference, except that I enjoy riding my bike tons more than I enjoy sitting in the car.

First thing in the morning, I got annoyed at the idiot that was calling me at 8 am. I had only been at work for 15 minutes and it was bad timing. I wanted to get busy reading/learning. Who was it? It was the damn alarm clock I set and forgot to turn off. Oops.

I'm still not sure which group I'm in and who my real manager is. But there seem to be several of us that are confused. I guess possession is 9/10ths of the law, so I'm going with those who claim me regardless of what the computer says.

Lots more learning today. Get mail setup and add myself to a few groups. Read various things about culture etc. Orientation classes are now fairly short, not the full day thankfully. The full day was really helpful. It's just really painful to be in meetings/classes all day.

The comment of the day was: "Since this is a place of business, by law we aren't really allowed to provide beds, otherwise we would. As long as you can go without sleep, you are welcome to live here." That's a slight paraphrase, but the idea is the same.

No free dinner for me tonight, I didn't feel like waiting the extra 10 minutes. Besides, I just bought a bunch of food for home. I gotta use it or lose it.

I was really planning on leaving at around 17.30, but I started talking to another noogler and his buddy. That lasted for almost an hour. So far, it's been pretty easy to have interesting conversations there (or here, whatever you get the idea).

I might have lined up 2 projects to work on and the balloons haven't even dropped yet. Oh, I didn't tell you the balloon story. When I get to my desk I get lots of kisses. No, no Hawaiian beauties waiting with leis unfortunately (I guess they gotta draw the line somewhere). These were the boring Hershey's type. The kisses are weighing down several mylar balloons to announce to the office that a newbie works here, use caution. My mentor told me that I had until the balloons lose all their helium and drop to the ground to decide what project(s) to work on. If I hadn't made a decision, I'd be fired. Ok, not really fired, they'd just work to find me something.

The first project doesn't really count, since it's pychecker. I know something about that. At least I used to know something, I'll have to check if there are still any marbles rolling around upstairs though. The second project seemed pretty cool. It dealt with improving hardware defect management. Man, it sounded much cooler before I sanitized it.