Making Gaming

Developer.com has a nice high level overview post on available gaming libraries for cross platform C++ development. If you are in the mood to create the next version of Half-Life go check it out. Libraries covered include SDML, ALLEGRO, ClanLib, and the Irrlicht Engine. Each of these libraries supports Linux, Win32, and MacOS.

Start-ups, technology, and youth

I have quoted or linked to Paul Graham a few times previously in this blog. But his recent speech at OSCON struck a code with me recently. Checking out his web site I found this little gem on start-ups and the place they hold in the future of technology innovation. If you get the chance read some of this other posts. Paul consistently presents a clarity with technology that is all to uncommon in writers today. As an example let me give you a couple of his quotes from OSCON:

“Blogs and open source software are made by people working at home. The average office is a miserable place to get work done. What makes them done are the very qualities we equate with professionalism. The average office environment is to productivity what flames painted on the side of a car are to speed. Start-up environments are more like home work environments. This is probably the most productive the company is ever going to be.”

“The bigger problem is that the people pretending to work interrupt the people who are actually working. With so much time on their hands, they have to take up the slack with meetings. Meetings count for work, just like programming, but they’re so much easier.”

“Open source (and blogging) has a Darwinian approach to enforcing quality. The audience can communicate with each other and the bad stuff gets ignored.”

“Business can learn about open source in the same way that the gene pool learns about new conditions: the dumb ones will die.

“The reasons companies have fixed hours is that they can’t measure productivity. The idea is that if you can’t make people work, you can at least prevent them from having fun. If they’re not having fun, they must be working! If you could measure what people really did, you wouldn’t care when people worked.”

And my all-time favorite:

“Someone who proposes to run Windows on servers ought to be prepared to explain what they know about servers that Google and Yahoo don’t know.”

IPTables Tools

I am constantly trying to get a better handle on my iptables configuration. Particularly when setting up NAT and IP forwarding. This article lists three tools for configuring and maintaining iptables firewalls. I had previously heard of GuardDog; but FireHOL and “Easy Firewall Generator for iptables” were both new to me.

Suse RPM

Got a couple links on building RPMs for Suse.

  • Maximum RPM – A 2000 article on making RPMs, kind of dated but still accurate.
  • Suse Package Conventions – Suse specific RPM information.
  • Migrating Red Hat applications to SUSE – A Novell “Cool Solutions” article on moving getting Redhat packages working on Suse. Contains only general information and most of that is concerning platform independent development; not strictly Redhat to Suse migration. The article is interesting because it talks about using Perl and the Yast API to make Yast configuration modules for ANYTHING on Suse. hmmm… I can think of a couple uses for that!

Quick Reference: CVS Automation

CVS Auto-updating is a blog post on how to get CVS to manage auto updating when working with a web server or a local repository. Nothing fancy, but it works. Here is another option (releated to KDE management) for auto updating:

Simply subscribe the user owning the cvs/svn checkout to the mailing-list where
commit mails are sent, and in that user, set up .procmailrc like:0:kdecvs.lck
| $HOME/bin/kdecvslogwhere kdecvslog is a script like:========================
#!/usr/bin/perl -wmy $subj;

umask 022;

$ENV{“CVS_RSH”} = “ssh”;

# read the message to make procmail happy
while()
{
chop;
$subj = $1 if(/^Subject: (.*)/i and !defined($subj));
}

exit 0 if (!defined($subj));
exit 0 if ($subj =~ /\/\.\.\//);

$subj = $1 if ($subj =~ /^\S+: (.*)$/); # remove branches
$subj = $1 if ($subj =~ /^(\S+).*$/);

# Choose here which subjects to filter upon. Another solution is to filter
# in .procmailrc of course
if ( $subj =~ m#www/areas/koffice# || $subj =~ m#www/media# )
{
my $home = $ENV{“HOME”};
my $cvsroot = “$home/koffice.org”;

open LOG, “>>$home/cvslog”;
my $date = `date`; chop($date);

my $path = “$subj”;
if ( $subj =~ m#www/media# ) {
$path = “$cvsroot”;
} else {
$path = $subj;
$path =~ s#www/areas/koffice##;
$path = “$cvsroot/$path”;
}
print LOG “$date: subj is $subj\n”;
print LOG “$date: testing path $path\n”;
#print LOG “$date: mod is $mod\n”;
$path = “$cvsroot” if (! -d $path);

if (-d $path) {
print LOG “$date: updating $path\n”;
$SIG{ALRM} = sub { $SIG{TERM} = sub{}; kill TERM, 0; exit 0; };
alarm 600;
my $out = `cd $path; svn up 2>&1`;  ## use cvs up here instead of svn up if you use CVS
print LOG “$date: output–\n” . $out . “\n”;
}
close(LOG);
}

Thanks to David Faure for the script.

Speedy Linux

Here is a quick (and light) article on getting more speed out of your linux distrobution. The information is useful but here are a couple more tips that can help:

  • Although its generally not necessary to have multiple virtual terminals running in init 5; they are VERY useful on other (i.e. non-GUI) run levels. So instead of commenting them out we can simply disabled them for a given run level like this:

    1:2345:respawn:/sbin/mingetty tty1
    2:2345:respawn:/sbin/mingetty tty2
    3:23:respawn:/sbin/mingetty tty3
    4:23:respawn:/sbin/mingetty tty4
    5:23:respawn:/sbin/mingetty tty5
    6:23:respawn:/sbin/mingetty tty6

    This would give you 2 virtual terminals on run levels 4 & 5 but still retain all 6 when on 2 & 3.

  • Use Open Office a bunch? You can add this command to your .bashrc to keep an instance of Open Office in memory: “ooffice -quickstart &”.
  • Many people will see a noticeable speed improvement by building a kernel targeted to their particular processor. This may sound hard but its really just a simple as getting the src rpm of your current kernel and typing: “rpm –rebuild –target athlon kernel-verison.src.rpm”. You will then need to install the new kernel. The nice part about this is that it is registered as the same kernel and uses the same sources as the default distribution kernel.

The death of a desktop…

There has been a heated debate going on in the Gnome world over which development environment to integrate on a native level with the desktop layer of Gnome; Java or Mono. The dark secret that every Gnome developer subconsciously understands in their rigid little pre-OOP based minds is that C is killing Gnome’s ability to compete effectively in the F/OSS desktop world. All the core Gnome developers understand this, as do most anyone who has had to develop on Gnome. To make C a truly useful language for desktop application development it needs a couple things; like encapsulation, inheritance, and polymorphism. If these qualities sound familiar its because they are quite literally the defining characteristics of object oriented programming. A cursory look at GTK shows many a half-assed attempt to implement said qualities in Gnome libraries even though their primary language of choice doesn’t support them natively. Suffice to say that Open Office, Mozilla, KDE, and almost all sane desktop software application are developed in C++ (or similar OOP languages) these days. Fundamentally Gnome HAS to make a switch; and this switch will decide the future of the Gnome Desktop.

Now this is where things get interesting. Redhat has decided to back Java (or more specifically Classpath and gcj, an open source Java implementation.) Why? No one is really sure but it should be noted that Havoc Pennington (head of Redhat Gnome development and probably the second most famous talking head in the Gnome pantheon) has gone so far as to say that Redhat will not and CANNOT include Mono in its version of Linux. Rehat is the single largest Gnome contributor, the largest corporate Linux distribution, and employees more Gnome developers than any other single employer. Not including Mono (and not supporting it) would be a huge blow to the success of Gnome on the Linux desktop. So how far is Redhat willing to go to keep Mono out of Gnome? Evidently they would be willing to actually FORK (yes you heard me right) Gnome.

Now, easily the most public face of Gnome development is Miguel de Icaza. Miguel is most famous for a little project he works on called Mono. Yes, that would be the same Mono that Redhat will not ship. And easily some of the most interesting technology to come out of Gnome in the past couple years has come from Miguel’s platform of choice (things like Beagle.) Mono is the obvious favorite for the future direction of Gnome. So much so, that Java doesn’t even register on the radar of most Gnome developers.

So here is the rundown. 1) Gnome needs to move from C if it ever want to bring modern applications to its desktop environment. 2) Mono is the logical direction for Gnome to head. 3) Gnome’s most influential developer is ONLY willing to go towards Mono. 4) Gnome’s most significant corporate contributor is not willing to use/ship/support Mono. 5) That same contributor is pushing Java. 6) Very few in the Gnome world actually want to use Java (minus Sun and Redhat) on the Gnome desktop. 7) Redhat is actually willing to fork Gnome (the thought of switching to a superior desktop never even crossed their minds) rather than use Mono. And finally, 8) Many of the Gnome core developers would rather stay with C than bother with the whole mess.

Man, does this sound like a desktop with a bright future! Oh, ya. By the way. Because of the flexability, and power of the Qt environment. You can already make native Java applications in KDE. And they are a whole lot easier than making them in GTK#, AWT, or Swing.

NetWare on Linux

I had never heard of this project before, so I figured I would post a link. MARSNWE is a NetWare emulation tool for Linux. MARSNWE can easily replace the file and print services of a Novell NetWare 2.2 or 3.11 server. It can also be be used in this manner as an IPX router. It does not offer all the features of newer version of NetWare (like Directory Services) but works as a nice tool for legacy support on Linux. The link is to the Novell Suse information sheet.

Subversion and Apache SSl

Ben Meyer (aka icefox) pointed out this quick tutorial on getting Subversion (SVN) up and running with Apache & SSL. The tutorial covers install with Debain, but is fairly relivant for any other distro.

SVN is a replacement for the venerable Current Versioning System (CVS) use to manage very large, very distributed, digital information. While it is most commonly used to manage software projects, it can also be used to manage documents, websites, or even personal home directories.

The tutorial is particularly interesting to me because I am changeing over from CVS to SVN for source control on KDE.