Crazy

I'm still sick; all the medicine I'm on has made me sleepy and a little dazed. I've wasted away time either sleeping or watching TV. Don't want that to continue.

I think my desktop machine might be dieing, the mouse and the keyboard are acting really erratic. I can't afford to have problems right now with it. It is getting old -- I built it four and a half years ago. In the process of trying to figure out what was wrong with my keyboard and mouse, I jostled my monitor adapter. In doing so, I bent one of the pins. In attempting to bend the pin back, I broke it. Bleh. Just my luck.

On to the real craziness. Itamar convinced me yesterday to submit a proposal for a tutorial at PyCon on Programming for Gtk and Gnome in Python. I've got to get that written soon. I've started to think of various projects I could write with Gtk, and I have some cool ideas. But I can't forget about my own project that is already started. Focus!

Joel Spolsky and ESR

I read Joel Spolsky's review of The Art of Unix Programming by Eric Raymond with interest. Joel seems at least marginally versed in using Linux and associated tools, and at the same time highly versed in Windows platform development. I've found him to be very level headed and rational about certain subjects, and seemingly dogmatic and irrational about others. Thus, I read his characterization of the two "cultures" of Unix and Windows development with interest.

I feel able to comment on this subject with some credibility. My first three years in employment as a programmer were spent doing Windows development. I maintained wrote GUI applications and also wrote COM servers and ActiveX controls. I became as intimately involved with these things as I care. It wasn't until during my last year of Windows development that I started using Linux and became acquainted with Unix and Open Source development. Since then, I have done all of my personal and professional development on Linux.

I think, on the whole, Joel's characterization of the two cultures to be accurate. Good Unix programmers program for other programmers. I think it has a bit to do with the "scratching your itch" motivation ESR talks of with open source development. I am a programmer, and if I am scratching my own itch, I am targeting programmers. Windows developers, however, target end users. As a programmer I found this to be extremely difficult to deal with. I felt like it made development extra hard for me task as a developer. The tools and libraries available under Windows made some things very easy. Yet, at the same time, some things were very difficult. Yes, because I didn't have the source to the libraries available, it made some things very very difficult. That said, I do find development to be much easier in the *nix world.

Yet, it is here where I depart from Joel's assertions. He seems to think that being programmer-oriented necessitates being non end-user oriented. I don't want to turn this into a "viability of Linux on the desktop" or "Linux will beat Windows on the desktop" argument. But using the development of the two major desktops for Linux (Gnome and KDE) as examples, I think it is clear that valuing code both for programmers and for end-users is entirely possible. The group behind each desktop, within their own philosophy and goals, seem to optimize for both. The developers care very much how their APIs are structured and the tools and frameworks that go behind their respective desktops. At the same time, much effort is going into giving what they feel is the appropriate user experience. As their APIs and frameworks mature, more time is spent focusing on making productive applications and on human interface guidelines and the like.

I would contend, however, that the opposite is much more difficult to achieve. In closer examination, I could anticipate objections to this. Given my separation from the Windows and closed-source programming world for the last few years, I am not as fully qualified to answer. I suppose one could say that Microsoft's introduction of the .NET platform and C# have been developer focused efforts. Windows developers I know say that developing GUIs in C# is much easier and enjoyable than was previously possible in MFC.

Joel complains about Unix developers being "religious" about certain issues. One of these would be the open-source versus closed-source debate. For me, however, this issue is one that stems at the heart of why Unix development is easier for me. I can't look at the issue of Windows development versus Unix development without bringing it up. But I also can look at the issue separate from that, and with my experience, attempt (as I have here poorly) to explain my position.

Pomp and Circumstance and Stuff

Unless my feelings are completely wrong, I finished my requirements for my bachelor's degree today. I don't think the reality of it has sunk in yet. This is going to be a big change in my life. I'm excited for the future and what this new phase of life brings. I have a lot of projects that I want to work on in the next little while. Let's see how distracting school really was.

No more CS homework ever

I finished my last Computer Science assignment tonight for my algorithms class. Hopefully I'll actually use the skills I learned in this class in my coding. It was one of my more enjoyable classes.

I'm trying to get the 2.6.0-test9 kernel running on my desktop, but I'm having problems with the nVidia driver. I loved it when I used Matrox cards -- they were supported beautifully in the kernel without any problems and I didn't have to "taint" my kernel. Oh, well.

I'm not dealing with the stresses of finals, graduation, waiting to find out about my career, and other things as well as I should. My schedule is somewhat free tomorrow, I hope that gives me a chance to take a breath and get my senses about me. Everything is going to be all right. I know that I just have to relax, have faith, and work hard. Everything will work out, right?

Unit Testing

I finished reading "Extreme Programming Explained" today. It's part of my thinking of the best practices and things I want to learn as I move onto professional development and working on my own open source projects. In my current situation, I can't adopt all of the Extreme Programming practices, such as pair programming. But one that I can adopt is the use of Unit Tests. I have watched Twisted progress over these last couple of years. It now has nearly 1200 unit tests (taking a quick glance at the buildbot to find this out). I don't doubt that the existence of these tests helps ensure the integrity of a system as large as Twisted. Just this observation alone has converted me to the practice.

This is something that I believe is useful. Unfortunately, I have found it difficult to write unit tests for my own code. I look at the code I have for Informant and wonder how unit tests can fit in it. Even after looking at the tests for Twisted, I still have a difficulty in writing tests for my own code. I don't know why I am having this block. It is a practice I want to adopt...

School, winding down

Wow. I went to my last college class ever today. I'm not sure how I feel about that. I turned in my paper about my internship. Now I have to finish my last Algorithms assignment, implementing a couple NP problem solutions. I also have a final project for my Computational Physics class to finish. I really hate Mathcad. Then my algorithms final next Friday and my college career is officially over.

Weird.

Memory glasses, anyone?

Found this cool link tonight about these "memory glasses" that a guy at MIT is developing. The idea of a non-intrusive reminder and cue to certain things fits with the ideas I have for informant, though this is obviously of a different scope. If these actually work, I might be motivated to switch back to glasses if there was a way I could use them without looking like a nerd. Maybe.

3 kernel compiles later....

My roommate picked up a 256 MB USB flash drive for me this weekend at one of the big after-Thanksgiving sales. I finally got it working with Linux on my Powerbook. First I had to compile the kernel to have the usb storage module. That was kernel compile one (I had updated the kernel from the benh tree in the process.) Then, I didn't have the modules for the vfat filesystem. Compile number two. (Rather make-kpkg. Debian's tools are great!) I couldn't figure out why my system was having a hard time reading the partition informant off the drive. I could mount the drive just fine on my roommate's x86 laptop. Then I realized I didn't have support in the kernel for MS-DOS partition types. After that recompile and necessary reboot, everything works great! Now to figure out what exactly to put on this cool new thing...

Debuggers a timesink?

I just read this blog entry from Robert C. Martin asserting that debuggers are a time sink. I really only am skilled in the use of one debugger, and it is one I doubt I will be touching much at all again. I really don't know how to use the debugger for my primary development language, Python. Most of my "debugging" has consisted of reading code and placing print statements and so forth, and using python -i and utilizing the interactive interpreter to see things.

Opinions? (Anyone have time to respond along with Moshe -- thanks for the responses Moshe!) Are debuggers of worth? I still haven't gotten the hang of writing unit tests, which are something Robert Martin advocates and I see the philosophical reasoning behind. I feel a need to start practices that will lead me to better development. Thinking about this is a start.

Update

Snow Crash

I've been involved in the world that is Snow Crash again the last few days. I love reading and I forget how involved I get in fiction. I am very intrigued by the ideas presented, not only by the Metaverse but also by the ideas and mythology presented about language. I'm sure I could read this book many many times

Informant

I didn't get anything done on Informant today. Since Monday will be busy with class and trying to finish my last project for my Physics class, I don't think I will reach my goal of a December 1 release. I will be ready for a release soon, as I feel I have done enough to warrant one. To date, I have:

  • Moved Informant to sit in the notification area
  • Refactored it to separate the "informers" and the "listeners" I only have one of each at the moment, but before the release I will make an e-mail informer and an informer proxy. The proxy will be so I can have notifications displayed on multiple machines.
  • Made the sources attempt to connect with a delay in between until a successful connect
  • Added regular expression search support to the email source
  • Added the ability to search the body of email in the email source

What's left to do? I think I know pretty much what code I need to write for all of this:

  • Add command line parameters to the sources to specific non-default parameters for host and port to connect to
  • Factor out the configuration stuff used in the sources to remove code duplication
  • Move all configuration files under the ~/.informant directory
  • Factor out the commonality in filter sources (like the email and log file source).
  • Listen on a Unix socket by default, but allow for easy listening on TCP for cross-machine communication
  • Use standard Gnome icons in the notification area instead of the ugly custom ones I made (Maybe)

All of that should take a couple of hours and then update of the documentation. Maybe I'll have that done on Tuesday.

I think I'll target another release for at the very latest Christmas. If I get a lot more done, I'll shoot for December 15. Probably not because the coming week is going to busy with end of the semester stuff and then the following week is preparation for my final. Targets for my next release:

  • Actually get the RSS source to work. Probably means just using the internals of TouRSSt myself unless Tv fixes the bug I reported.
  • Fix up the alerts window. Add support for clearing only specific items. Get help to make this HIG compliant
  • Add support for display and use of alert priority
  • Improved log file / irc watcher source

That's all I can think of for now. Probably a lot more time will be spent on the Alerts Window. I really want to get it solid and the rest of the code working cleanly so I can focus on improving the sources, making them easier to use, making them easier to write, and making them more powerful. They are, after all, the reason I started writing Informant.

Page 1 of 4  >>