I’ve been relearning Tcl for the past couple of days. I forgot just how beautiful this simple language is. It has arguably the simplest syntax of any programming language ever written, and it is that very simplicity from which Tcl derives so much of its power. Having an extremely powerful and truly cross platform GUI library built in doesn’t hurt things either. Admittedly Tk (Tcl’s GUI library) is a touch outdated looking on *nix systems, but it is fully native on Windows and Mac. However, the next release of Tcl should fix some issues with Tk by including a skinning engine by default. Tcl was write once run anywhere long before Java was even a twinkle in Sun’s eye. It is a very mature programming language dating back to the late 1980s. Anyway, it’s definitely a fun language to work with.
I seriously wonder what the hell I was thinking going back to C++. The C++/SDL combo is only two steps higher than writing DOS games using C code with assembly language sprinkled in to do mode settings. You have to do pointer arithmetic just to put a pixel on the screen. SDL is a great base library to wrap around, but to code directly in it borders on insanity. I’m going to look at PyGame today instead. PyGame is a much higher level Python gaming library which uses SDL. Additionally, since Python is an interpreted language I do not have to worry about all of the hassle that comes with setting up a portable cross platform build system. For simple games, the loss of performance incurred by using Python should in fact be quite minimal. This is definitely a reasonable trade-off for the increased developer productivity that the Python language provides.
I’ve been playing recently with SDL, and I have decided after much thrashing about and trying different up-and-coming programming languages, that going back to C++ will probably be the most enjoyable. (What can I say, I’m sadistic as hell.) It’s going to be fun going back to controlling everything and having to put a little more “craftsmanship” into my software. Also, it doesn’t get much more portable than SDL and C++. For the most part, porting to a new platform should be as simple as modifying a couple of things here and there, running configure and then make. Probably the biggest advantage of compiled languages is that you don’t have to worry about what is already available on the user’s machine. C++ programs are self contained, just ship the binary, any dynamically linked libraries and the support files you need and you’re all set. I just wish I had some artistic talent when it comes to drawing. Oh well, the results should be comically interesting for my first couple of games at least.
I swear I must be schizophrenic or something. I think I’ve finally decided on “the” programming language for right now. I’ve been taking a serious look at Ruby, and I have to say, it does look pretty nice. It looks like I could actually be productive in it. I don’t want to use compiled languages anymore, the whole compile phase just interrupts my work flow far, far too much. I also don’t want to have to worry about memory management anymore, been there, done that, it’s not a picnic. Programming needs to be “fun” again for me. Ruby looks like it could be very fun. It also looks like it could have that “natural” feel that I’m seeking. The feeling that you can’t describe, but you know when you get it. It also looks equally suitable for web and GUI development, as well as for general system scripting. Ruby is also extremely cross platform, even to include the Java and .NET platforms. According to my preliminary research, it is relatively slow, compared to most other programming languages, but they are addressing that problem by moving from being purely interpreted to compiling to byte code and running on a virtual machine. This should bring Ruby’s performance at least into the same neighborhood as Python, which will be more than acceptable for most tasks. Well, hopefully Ruby meets my needs.
This morning I woke up early, and as I was performing my usual early morning rituals, I had an epiphany of sorts. I realized that the traditional desktop is the old guard. It is not dead or dying, but it is gently being complemented by newer more complex, highly networked software with capabilities that were unimaginable just a few short years ago. With the advent of consumer grade multi-core computers and widely available high performance data networks, the power of languages like Erlang will truly be an advantage. This is the future. We are on the edge of a new era in computing, and Erlang is one of the few platforms that is uniquely positioned to take full advantage of it. So anyway, scratch my last post, Erlang is the future, at least it is going to be a big part of my future. When I need a desktop GUI I will most likely write it with C and GTK+, but the back end will almost certainly be coded in Erlang.
Well, after much work with Erlang, and as cool of a language as Erlang is, I don’t think it really fits so well with the types of software I like to program. Don’t get me wrong, Erlang is still one of my all time favorite programming languages, but there’s a lot of areas where it’s just not the appropriate choice. For that, and several other reasons, I have decided that my next undertaking will be learning how to program Gtk+ from plain old vanilla standard C. There’s a couple of great reasons for this. First and foremost, if there’s a library for something, you will be able to interface to it with C. Also, C is still one of the most portable programming languages ever made. With careful attention paid to coding style and your choice of libraries, your code can potentially compile unchanged on platforms as diverse as Linux, Solaris, FreeBSD, Windows, and even Mac OS X. That’s powerful. It is also much easier to distribute C code than the code generated by most other languages. It produces native code, so you simply copy the compiled binary on the destination machine, and things tend to just work. Compiling is a little tricky at times, but there are several excellent build tools available today to correct for this problem. Another major advantage to C is that it is extremely well supported by widely available development tools. My personal favorite development environment is the “traditional” four X terminals, Vim, and make, with a window manager that supports “sloppy focus” for rapid switching between windows. I find this setup to be even more productive than most IDEs. For sheer editing speed, it is really hard to beat something like Vim, or even Emacs (if you swing that way).
I haven’t finished learning Erlang yet, but I have already been looking at what software libraries and frameworks are available to an Erlang programmer. One of the most promising of these frameworks is Erlyweb. It is more than just a port of the venerable Ruby on Rails to Erlang. It actively takes advantage of various strengths of Erlang. It takes the general concept of Rails and gives it that comfortable, simple, elegant, Erlang feel. Anyway, just from looking at the example code on the website, I am extremely impressed. I think that perhaps building web applications with frameworks like Erlyweb may compensate for the overall lack of fully featured and mature traditional GUI toolkit bindings available for Erlang. I continue to be impressed by this “little language that could.”
There is one major area where Erlang suffers, and that is the lack of powerful GUI libraries available to it. It ships with a Tk-based GUI called gs, but Tk has it’s own share of problems, with its limited capabilities and dated look. The best option from a cursory look at things is GtkNode, which is a set of bindings to Gtk. There also seems to be some work toward web based GUIs using things like Yaws. I’m still evaluating things, but I may be adopting GtkNode for any GUI projects I undertake in the near future. Additionally, I have looked in C# and GTK# and although they are very nice projects, I find them to be as tedious to code in as Java, C, and C++, so I highly doubt I will make any use of them in the near future. Additionally, Mono is very much detested by a large contingent of the open source community, which is also a potential source of problems with its usage. Most importantly, Erlang is just “fun” to code in.
Linked from the Army Times :
Troops don’t need bigger pay raises, White House budget officials said Wednesday in a statement of administration policy laying out objections to the House version of the 2008 defense authorization bill.
The Bush administration had asked for a 3 percent military raise for Jan. 1, 2008, enough to match last year’s average pay increase in the private sector. The House Armed Services Committee recommends a 3.5 percent pay increase for 2008, and increases in 2009 through 2012 that also are 0.5 percentage point greater than private-sector pay raises.
The slightly bigger military raises are intended to reduce the gap between military and civilian pay that stands at about 3.9 percent today. Under the bill, HR 1585, the pay gap would be reduced to 1.4 percent after the Jan. 1, 2012, pay increase.
Bush budget officials said the administration “strongly opposes” both the 3.5 percent raise for 2008 and the follow-on increases, calling extra pay increases “unnecessary.”
“When combined with the overall military benefit package, the president’s proposal provides a good quality of life for service members and their families,” the policy statement says. “While we agree military pay must be kept competitive, the 3 percent raise, equal to the increase in the Employment Cost Index, will do that.”
Well, I’m using WordPress.com now for all my blogging needs. I decided that it was somewhat foolish to maintain my own content management system known as TrapperTim, when WordPress handles this so much better than I could ever hope to with my own custom solution. For this reason TrapperTim is hereby discontinued. Not that too many people probably care. It’s open source anyway, so if someone really wants to continue maintaining it, they’ll either fork it, or contact me asking to take over the project themselves. Curse me and my short attention span. I’ll probably look into writing some sort of migration script from TrapperTim to WordPress. Anyhow, my attention has been turning toward the Erlang programming language lately. I’m also planning to rewrite Awesum, my graphical checksum verifier software in C# and GTK# for better integration with Gnome. It is kind of begging for a rewrite anyway. There is also Awesum2 which is the same concept, but written in Java and capable of running from a browser using Java Web Start.