The first FreeBSD upgrade to ever piss me off

I built world, two kernels: (my custom) VIPER, and GENERIC. I took about 2 hours using make -j6 on my lowly Sempron.

Fetched updates to the ports tree via portsnap while waiting for the install kernel to finish; I noticed that the boot into single user mode for mergemaster’ing was blazingly fast. Everything went well until the first multi user boot.

The blasted wireless card stopped working. Changing in the ath manual and the release notes info about Atheros support made me expect there might be problems. Plugged in a spare (broken) Ethernet cable and did a search on the FreeBSD forums where a thread mentioned cloning the wireless interface to a generic wlan0…. it worked.

ifconfig wlan0 create wlandev ath0

and volia!

So, just how did this creep up on me, and why wasn’t it in the release notes… (that anyone I know seems to have noticed)???

The manual for rc.conf explains this under network_interface:

If a wlans_ variable is set, an wlan(4) interface
will be created for each item in the list with the wlandev
argument set to interface. Further wlan cloning arguments
may be passed to the ifconfig(8) create command by setting
the create_args_ variable. One or more wlan(4)
devices must be created for each wireless devices as of
FreeBSD 8.0. Debugging flags for wlan(4) devices as set by
wlandebug(8) may be specified with an wlandebug_
variable. The contents of this variable will be passed
directly to wlandebug(8).

which makes the fix in rc.conf, adding wlans_interfacename=”wlan0″ into the mixture:

wlans_ath0="wlan0"      
ifconfig_wlan="self censored :-P"

In order to find some backstory in /usr/src/UPDATING, I had to GREP for it:

20080420:
The 802.11 wireless support was redone to enable multi-bss
operation on devices that are capable. The underlying device
is no longer used directly but instead wlanX devices are
cloned with ifconfig. This requires changes to rc.conf files.
For example, change:
ifconfig_ath0=”WPA DHCP”
to
wlans_ath0=wlan0
ifconfig_wlan0=”WPA DHCP”
see rc.conf(5) for more details. In addition, mergemaster of
/etc/rc.d is highly recommended. Simultaneous update of userland
and kernel wouldn’t hurt either.

As part of the multi-bss changes the wlan_scan_ap and wlan_scan_sta
modules were merged into the base wlan module. All references
to these modules (e.g. in kernel config files) must be removed.

If changing from FreeBSDs natural to wlan for that makes one damn lick of sense what so ever (eth0 lovers aside), I will leave it to someone who knows to comment…. because I don’t know, and I don’t really give a fart.

The release notes in provides two helpful sentences: wlan pseudo devices are now used and check out the ifconfig manual.

Other then wasting an two hours of my time over a change that probably isn’t even the bloody handbook yet, everything went smoothly.

Wow, either Internet Malware is getting worse then ever or Firefox 3 just sucks worse then ever >_>. Javascript just took over Firefox, tried to convince me to install an Antivirus program — loaded “Explorer”‘s my computer page (in Firefox), obviouly faked scanning files and finding a few thousand bits of malware, before trying to redirect me back to their “Antivirus program” — and setting a Windows XP like pop up right in the middle of the Explorer-replicating page, that’s so obviously not a pop up window but a web hack. The irony of this? I’m running FreeBSD, and the most damage the account being used can do is write data to /dev/null (a black hole file). Are Windows lusers really stupid enough to fall for that trick? Wait, don’t answer that question.

Operation Triage: Day 1.1 at the RTM

Last night I setup an account on rtm for evaluating it’s usefulness to my todo list problemo. It provides all the features that the gmail/gcal/ig integrated tasks buddy from Google is lacking, and integrates perfectly into their workflows—awesome job RTM!

Remember The Milk (rtm) is a web based application and supporting service, for managing tasks; you could probably keep your grocery list on this thing too, if you had a decent phone. It supports the obvious stuff, due dates, time estimates, repeaters (oy), and combines it with attributes more often found in social systems, like tagging and sharing. The amount of ways to work with rtm alone make it easier to mate with ones workflow on a level, that most web apps on the net could only dream about reaching. Without a doubt, Remember The Milk has been designed to be the supreme queen in web usability, and provides such a nifty set of keyboard shortcuts that give Geeks like me an extra edge on top of it. I almost think my mother could use this website… it’s that easy lol. The power-user features also make it well worth learning how to utilise every ounce out of the system. So far the only negative thing I can say about rtm, is that adding a due date on the rtm website doesn’t magically add it as an event in my gcal, but alas no one is flawless :-P.

I’ve imported all my todo list, after filtering the 5 month out of date file through my brain log along the way, plus put in everything everything on the immediate plate; took me about an hour. Everything of major importance has been marked accordingly with reminders scheduled to be sent to one of my Instant Messengering accounts. Three things that attracted me to rtm: the ability for using tags (as fellow delicious & gnolia fans will enjoy) in addition to regular task lists; reminders by most forms of contact like email, sms, and virtually every IM method short of an automated phone call; not to mention integration with Google Mail & Calendar.

Currently I’ve created Cleaning, Contact, Projects, Reading, SAS, and Writing lists to go along side the standard issue Inbox, Personal, Study, Work, and Sent lists. Tags are being used so I can quickly study what’s on the list according to subject matter; this way when any of the various hats needs a quick servicing within a group of tasks, I can dip into those open loops and screen out the others. Smart lists also make it possible to quickly study tasks by meta-criteria; my first smart list is one to show me all open tasks, that have a priority marker set.

As I told a friend earlier, I essentially don’t have to do nothin’ but stay white and die, the huge ass list of todo’s is mostly projects I’m involved with, and usually get clobbered by the fact that I get interrupted 200+++ times a day by the surviving parental unit, until they fade off the days agenda. Fortunately most of my tasks are in the format of, to do before hell freezes over—but most I would like to get done within the much shorter term! That’s where Operation Triage comes into play.

Everything is being trimmed back in accordance with what I have time and energy to deal with at this point in life, and to get as much of the stuff that I want gotten done organised so it doesn’t “Fall off” the water fall. Continently the only urgent loops being to get my learners permit, tend to SAS business, and my most important projects. Other tasks are growing closer to completion, and RTM will help me keep them in line with reality.

For the most part, these tasks in the rtm system amount to crap I need to read (lower priorities :'() and things that I need to write: which is easily sorted by priority. The hard part is Just Getting It Done without having to threaten anyone along the way with bodily harm :-/. Actually that would be a productivity boost I’m sure, but it is most strongly against my gentle nature 8=). I need to do further study on how best to collate the development tasks, since they don’t quite fit into a box, so much as a creative juice meets free time equation.

To do list, I shall conquer you!

Well that’s another day blown

Slept in, since there was no need to get up before noon, I got out of bed around 1100—having originally woken up around 0800. I’ve yet to solve the sleep problem, but at least I am getting up earlier with much greater consistency, the down side is I don’t think I can sleep much longer then four or five hours at a time without waking up… beats the alternatives I guess.

I toyed around with my to do list program for the morning, as a way of passing time until it was time to leave; ma had to see a doctor to sort out some of the post-hospital stuff. So I spent most of my day sitting in a health clinics lobby, in the next county lol. After three or so hours of that was hiking around the supermarket while her perscriptions were being filled—so much for coding today.

Experiments in an SQLite3 based tasks manager are postponed, in favour of using Googles `Tasks` system that is mated to gmail and gcal. Until further notice, it looks like `gtasks` is m new todo management system; I’ll also take a look at RTM later tonight, and try to evaluate if it’s worth while.

While I don’t particularly care for it, I think it’s time to re-evaluate iGoogle as a way of integrating a few more things into my work flow.

Personally, I don’t care much for  being reliant on any company for my resource needs, I do however like good web applications, and Google Mail is exceptional! Docs, Cal, Groups, and Chat also makes things much easier. In point of fact, my preferred contact method is XMPP—which is the backend provider for Google Talk. Life would be so much cooler if the various major instant messenger systems (AIM, MSN, Yahoo!, ICQ) could integrate half as nicely as XMPP based solutions do.

I don’t need to use an Live mail account to email my friends, why should I need a Live ID to chat with them? Maybe Wave might change that someday.

What I would desire in a todo/task management system

Obviously it would need to offer a CRUD interface to some form of persistent storage, namely one that I can easily access anywhere; that makes the most idea solution a file in my home directory, or something accessible over the network.

It would have to support some notion of “Tagging“, every entry should be able to be tagged under multiple names and queried accordingly.

A list view comparable to the collapsible “Groups” in most instant messengering softwares buddy list, would be a perfect way to view tags, particular when combined with the ability to search todo’s by tag and other criteria: like date, title, and all other data.

While software oriented towards managing the software life cycle might be useful, I need something of a more general nature. The only real short coming of Google Tasks is that while it integrates into Mail and Calendar quite nicely, it unfortunately has no real concept of tagging. It’s more of a gimmick then a useful feature.

In all probability I could munge together some AWK scripts and an SQLite database to get exactly what I want, hahahahahahah! And maybe someday write a graphical front end. Hmm…

A look at a *good* PBI install script from 2007.

In looking around my ~/Projects folder, I found an old PBI install script I wrote a couple years back. When I was working on a TexLive PBI (only me and Oko were interested), I wrote a very robust script. Most PBI that use install scripts should be nearly like this but normally, they only handle the GUI case and screw you if you use text mode or have special need.

This script was written to the published API at the time, which basically amounted to $INSTALLMODE being set to tell you if you were in a GUI or not; a variable to tell you what name your PBI would have inside /Programs. This was an improvement over using “$1” everywhere, as was required in previous versions of the PBI API.

Here is my old script:

#!/bin/sh

# the year of this release, e.g. 2007, 2008 e.t.c. -> This should be equal to
# the Program Version we set in PBC.
YEAR="2007"

# the size of all our installed files in $PBI_BASE/texlive/$YEAR/
TEXSIZE="1.1GB" # as a string

# compat check.. should be unecessary but I don't trust PC-BSD. Since users can
# now override our install location and documentation does not talk to us about
# coping with it not being /Programs/$PROGDIR/, abort install rather then risk
# performing undefined/undocumented behavior should /Programs/$PROGDIR be
# overrided.

if [ -d "/usr/Programs" ]; then
PBI_BASE="/usr/Programs"
elif [ -d "/Programs" ]; then
PBI_BASE="/Programs"
elif [ -d "/usr/local/MyPrograms" ]; then
PBI_BASE="/usr/local/MyPrograms"
else
if [ $INSTALLMODE = "GUI" ]; then
kdialog --sorry "Can't find PBI Installation Directory... aborting"
else
echo "Can't find PBI Installation Directory... aborting"
fi
exit 255
fi

# set the path
MY_TEX_PATH="$PBI_BASE/texlive/$YEAR/bin/i386-freebsd/"


# XXX check if we are already installed or improperly installed

if [ -d "$PBI_BASE/texlive/$YEAR" ]; then
if [ $INSTALLMODE = "GUI" ]; then
kdialog --sorry "$PROGDIR appears to be already installed, aborting"
else
echo "$PROGDIR appears to be already installed, aborting"
fi
exit 255
fi

# give the user a chance to abort the installation
if [ $INSTALLMODE = "GUI" ]; then
kdialog --warningyesno
"The installation requires approximatly $TEXSIZE of disk space Continue?"
if [ $? -gt 0 ]; then
exit 1
fi
else
echo "The installation requires approximatly $TEXSIZE of disk space"
echo -n "Continue?[yes/no]"; read GO
echo $GO | grep -i "no"
if [ $? = 0 ]; then
exit 1
fi
fi


# Do installation
echo 'MSG: Setting up TeX Live directory'
mkdir -p $PBI_BASE/texlive/$YEAR
ln -s $PBI_BASE/texlive/$YEAR $PBI_BASE/$PROGDIR/TEXLIVE_$YEAR

echo "MSG: Installing TeX Live files..."

# extract our texlive installation
cd /$PBI_BASE/texlive/$YEAR/ &&
lzma d texlive${YEAR}.tar.lzma -so | tar -xpf -

# prompt for a default paper size
if [ $INSTALLMODE = "GUI" ]; then
PAPER=`kdialog --combobox "Select default paper size"
"A4 Paper" "US Letter"`
else
echo -n "default paper size [A4 Paper, US Letter]: "; read PAPER
fi

echo $PAPER | grep -i "Letter"
if [ $? -eq 0 ]; then
texconfig-sys paper letter
fi

echo $PAPER | grep -i "A4"
if [ $? -eq 0 ]; then
texconfig-sys paper a4
fi


echo "MSG: Updating TeX filename databases"
texconfig-sys rehash


if [ $INSTALLMODE = "GUI" ]; then
kdialog --yesno
"Congratulations! Installation complete -- test installation?"
if [ $? = 0 ];then
cd /tmp/
$MY_TEX_PATH/pdflatex sample2e.tex && kpdf /tmp/sample2e.pdf
if [ $? -gt 0 ]; then
kdialog --error
"The test may have failed to load, please report any errors: $?"
fi
fi
echo "MSG: Displaying readme file"
kwrite $PBI_BASE/$PROGDIR/PBI_README.txt
else
# I don't know a programa off hand to use for console output.
more $PBI_BASE/$PROGDIR/PBI_README.txt
fi

What is wrong with that script? Nothing compared to what is wrong with the PBI script API.

$PROGDIR should expand to /Programs/ProgNameVer instead of ProgNameVer.

The maintainer shouldn’t have to treat GUI and TEXT mode differently – the API should do it. In fact, that was the main impetus for the EPI spec creating platform independence. In an EPI, people would have said ask the user a question. Not have to understand shell script and massive toggles for GUI/TEXT mode install.

I believe PBI now also do similiar idiocy in regards to fonts handling that should be done at a higher level. However, according to the officially published documentation, my old script is still the correct way to go with a PBI.

One of the reasons I gave up on Kris Moores PBI, was the brain damaged design, the other reasons were the total miss management of PBI…

Under the draft spec’s I wrote for EPI, the above script would have become something like this:

# optional EPIL script for EPI

define question dialog with
title = "TextLive EPI"
message = "Please set a default paper size"
default = "A4 Paper"
options = ['A4 Paper', 'US Letter']
launch as paper_size

if paper_size == "A4 Paper" then do
execute "texconfig-sys paper a4"
else
execute "texconfig-sys paper letter

Now I ask you, if you were not a programmer, which one do you understand? Then let me ask you, if you just want to get on with your life, which would you rather write?

Both the PBI sh and EPI EPIL scripts would result in a simple dialog asking you to choose from one of two options. If you know how to use TexLive, the EPIL script would be totally unnecessary because you already know how to change paper sizes. That means you don’t even have to write a script at all in a normal case.

End result? Oh so simpler.

Manually refreshing Windows desktop wall paper

Every now and then, the windows box ends up with “No” wall paper; typically due to issues with certain poorly created Unreal Engine 2 / DirectX games >_>. Earlier today, someone asked me a rather stupid question that brought me to thinking, is rundll32 even documented?

In poking my nose around, i found out that (as expected) Windows XP stores the name of the wall paper as a path to the BMP file in the registry; more specifically a REG_SZ in the form of: HKCU/Control Panel/Desktop/Wallpaper. In theory I could write a program to manipulate that value: then hook it up to my wall paper changer in place of utilities like hsetroot, mauhuahaua! The problemo is that Winsucks only seems to read that value on log in/out. The solution?#—Google. Third party programs can change the wall paper in real time, so obviously there has to be a way of doing it (hey, Windows does…), and As far as I know, most such routines would be tucked away in the shell32 and user32 libraries some where; enter rundll32.

rundll32 user32.dll,UpdatePerUserSystemParameters

problem solved 😉

Dancing over the Windows, Night I / Day III / Day II-C / oh fsck it

I setup RvS in between bites of dinner, luckily most of the procedure is just waiting on files to extract/copy, so I was free to sit and eat xD. I already have a collection of patches in various languages, so it was a simple matter of fishing out the v1.0-1.60 US patch.

Play testing and a quick spin around dxdiag showed that everything was good to go. All that I will need to do is setup my settings again (hoorah for archived ini files 😉 and install maps. I have a CD-ROM here which is so full of map files, that I barely fit them all on it back in the day lol. I’ve also got access to the SAS map packs and such, so shouldn’t be to much hassle.

Next up was setting up SWAT 4 with The Stetchkov Syndicate expansion pack; a quick job. Since I’m aware that SWAT 4 disks may be beyond a simple dd operation to clone, I chose to take ‘steps’ to archiving my copy of SWAT 4—I paid $80 in two installments with much waiting for a still unfinished and already abandoned product, so I have no interest in buying another copy if something happens to my disks! Before running the installer, I did a quick dump of the entire registry; after setting up SWAT4+TSS+Gez, I then took another dump of the registry. In theory, doing a simple diff of those registry dumps should allow me to create an import file, that can be used to recreate them (with needed local adjustments), then mate it with No-CD fixed EXE files, plus a lovely archive of all the latest game files; that means I should be able to backup/restore SWAT 4 at will, without having to dance through installers and patches, muahuahauha! At least, that is the _theory_ but it should work.

I’m sorry I didn’t think to do the same registry trick with RvS lol.

Since the games are poorly designed, there is probably little use in installing the game without administrative prives. Running them under a regular user isn’t to hard, in SWAT 4 all that needs to be editable at run time, is basically INI files, and that is easily adjusted with Access Control Lists. I haven’t tested RvS yet as my normal user, but it should work as well as SWAT does. I backed up the important things, but sadly I forgot to backup my in-progress SWAT 4 map files… so only Chester has a working copy of SAS Killhouse Redux, and I’ve lost all my work on the SAS Dept. of Agriculture :-(. Small loss though, since the former wouldn’t be tooo hard to recreate.

Since Windows XP by default only exposes a useless level of DOS-style permissions, I doubt most users have any concept of access controls or file permissions. I always kick Winsucks into showing my the “Security” tab in a files properties dialog. Although it is occasionally a whacky inconsistent mumbo jumbo to work with Microsofts various tools, Windows XP does actually have a very nice ACL and Policy implementation. Most Free Open-Source Unix like systems (e.g. GNU/Linux, FreeBSD, OpenBSD, etc) have support for Access Control Lists, and I believe the POSIX standards mandate them but don’t quote me. Most systems however, rely on the simple unix permission model; which is basically the most simple ACL system you could invent like 40 years ago lol. Until you get into the Policy related stuff in the MMC, there’s no serious differences. My one complaint is that working with the cacls command in XP, means putting up with DOS invocation style :-/.

I have used Microsoft operating systems since MS-DOS, and have used Windows since cica 2000, when we got our first Pentium PC with Windows 98 pre-installed on it. Since then, there are only 3 things that I have ever found, and actually like about Microsofts premier product: 0.) the start menu is a very nice file-system driven implementation, well the parts that are adjustable anyway (think All Programs); 1.) Windows NT has nice support for ACLs, and 3.) NTFS is a heck of a lot better then FAT12, FAT16, and FAT32 ever were. Beyond that, it all can go suck an egg :-P.

All that is left for me to do, is complete a few minor tweaks, like giving the File open/save dialogs a makeover and organizing files. Oh yeah, I still need to go and install KDE4 so I can get a decent Solitaire program running again ^_^_^_^_^.

Dancing over the Windows, Day II-B

After getting the backups taken care of, I took a few moments to clean up after the more intrusive installations. That involved turning off the MSSQL related services, telling Javas jusched updater to take a hike—instead making a scheduled task for it, which is what the installer should have done! After that, I sanitized the %Path% environment variable back to the default, and used my documented list of where I installed everything, to write out the desired environment variables.

In order to keep the systems path clean, yet make it easy to make regular changes as part of batch scripts (like compiler specific ones) or per-user profile variables. Here is a list of my creations:

%DEF_PATHEXT% and %Def_Path%
These are just references to the systems default values for %PATHEXT% and %Path%, so they can be referenced later without concern for the actual system values.
Userprofile overrides for %PATHEXT% and %Path%
I’ve set PATHEXT to %DEF_PATHEXT%;%Extra_PathExt% and Path to %Def_Path%;%GoogleChrome_Path%;%RemoteUtils_Path%;%Utilities_Path%;%WWW_Path%;%MediaPlayers_Path%;%Graphics_Path%;%OfficeApps_Path%;%Games_Path%;%JavaRuntime_Path%;%Gtk2Runtime_Path%;%Perl5_Path%;%PHP5_Path%;%Python2_Path%. Which provides my user with virtually everything I could want, short of access to compilers and what not.
%Extra_PathExt%
Extra extensions that I would like to *not* have to type, namely making Perl/Python/Ruby use and coexistence much easier.
%RemoteUtils_Path%
Various remote utilities that I use often, things like PuTTY.
%Utilities_Path%
Slips several frequently used programs into my path: like SysInternals and Archivers. Yes, I do use a command prompt to unzip crap often enough to warrant this :-P.
%WWW_Path%
The paths to world-wide-web related programs, that are only meaningful with an internet connection. Instant messengers, VoIP, web browsers, blah blah. This also means I can have a lot of fun without reaching for the mouse ^_^.
%MediaPlayers_Path%
Quick access to MPlayer / MEncoder and anything else that comes in handy.
%Graphics_Path%
Software for manipulating images, GIMP, Dia, Wings 3D, Blender, et alii.
%OfficeApps_Path%
Paths to the kind of software often found in office suites, most importantly a snappy PDF reader. There’s not much else that I use regularly, since word processors are often brain damaged from a productivity standpoint.
%Games_Path%
Various games, of the kind that can actually be run without changing directories; that is no unreal engine garbage.
%JavaRuntime_Path%
The systems standard Java Runtime Environment, suitable for responding to Java applications that need to make me wait an hour for them to startup ^_^
%Gtk2Runtime_Path%
The systems
%Perl5_Path%
Reference to all that Perlicous goodness, can’t have a box put to work without a copy of perl setup, now can we?
%PHP5_Path%
In case I need to test some code, I always keep an interpretor within arms reach; for things that require a server, I just SCP it over to another box, that happens to be running Apache.
%Python2_Path%
I decided that this time I would run both versions of Python, this chooses the 2.x branch. For better or worse, not all valuable libraries have made the transition Python 3.x yet :-/
%Python3_Path%
Same as the above, for for Python 3. It should be most useful to me, for testing scripts for compatibility with 3.x
%Ruby_Path%
A language that I rarely use these days, but always keep available for a rainy day 😉
%Devel_Path%
Pointer to various development tools that are not very implementation specific and should be optionally available to all user accounts. It’s made up of other environment variables, just like the %Path% override.
%Devel_Utils%
Assorted utilities like tags generators and build tools
%ScmTools_Path%
Qucik access to source code management: Subversion, CVS, blah blah. The only thing I actually give a flying flub about, is Git.
%JavaDevel_Path%
One huge Java development kit with more bells and whistles then I could care to look at. This variable basically exists to provide access to javac and relations
%Qt4Devel_Path%
Paths to the Qt SDK, the best toolkit for doing graphical software that I’ve ever found. API wise, I reckon WxWidgets would be more natural to Windows developers fingers (wxNames::LikeThis instead of QNames::likeThis) but I’m perfectly happy with Qt.
%Gtk2Devel_Path%
Basically a software development kit for GTK+ apps in C/C++, kept independent of the systems Runtime—so build time will never break Pidgin, Gimp, & friends
%MinGW_Path%
For setting up quick access to the GNU Compiler Collection.

I’ll likely write a set of development environment scripts, that will handle tailoring my cmd environment to a specific task. Exempli gratia: MinGW, Watcom, MSVC, JDK, Py2, and Py3.

Because I know from first-hand experience, many games built around Unreal Engine 2 among others, still treat the Operating System like MS-DOS, I’ve also taken the liberty of setting up a “Gamers” group. That should make playing RvS/SWAT without elevated privileges as possible as it ever is going to get… lol. Considering how crappy they are on the inside, and being UE2, I don’t expect it to actually be possible without further abuse. Really, I wonder how some companies get this crap on the market…

Anyways, time to setup the games 🙂

To be continued…

Dancing over the Windows, Day II

Installed XFire, and very interestingly only the administrator can change where it downloads files to, which should be in %AppData%Xfire along with the users chat logs. I suspect the intention behind this “Odd” design choice was to force all downloads to occur in a shared folder, which can be automated for a routine virus scan – or because many games are so crapply made that they need to run under Administrators lol.

Xming, TeamSpeak2 were quickly smashed. The most important utilities to get installed were 7-Zip and InfoZip, for dealing with the archive files involved. After that I setup Python 2.6 and 3.1, Ruby, and Perl 5.10.0. The file associations can wait until later, but quite seriously I ain’t going anywhere without Perl installed ;-).

Because I have both Python 2.6 and 3.1 installed, and the MSI installers override one anothers file associations, I had to manually setup the mappings that I want; which includes mapping .py2 and .py3 to their respective interpreters.

C:2install>ftype | findstr /r /i "Python"
Python.CompiledFile="C:DevFilesLanguagesPython31python.exe" "%1" %*
Python.File="C:DevFilesLanguagesPython31python.exe" "%1" %*
Python.NoConFile="C:DevFilesLanguagesPython31pythonw.exe" "%1" %*

C:2install> assoc .py2=Python2.File
C:2install> assoc .py3=Python3.File

C:2install> ftype Python2.File="C:DevFilesLanguagesPython26python.exe" "%1" %*
C:2install> ftype Python3.File="C:DevFilesLanguagesPython31python.exe" "%1" %*
C:2install> ftype Python.File="C:DevFilesLanguagesPython26python.exe" "%1" %*

C:2install> ftype Python.File="C:DevFilesLanguagesPython26python.exe" "%1" %*
C:2install> ftype Python.CompiledFile="C:DevFilesLanguagesPython26python.exe" "%1" %*
C:2install> ftype Python.NoConFile="C:DevFilesLanguagesPython26pythonw.exe" "%1" %*


C:2install>assoc | findstr /r ".py"
.py=Python.File
.py2=Python2.File
.py3=Python3.File
.pyc=Python.CompiledFile
.pyo=Python.CompiledFile
.pyw=Python.NoConFile


C:2install>ftype | findstr /r /i "Python"
Python.CompiledFile="C:DevFilesLanguagesPython26python.exe" "%1" %*
Python.File="C:DevFilesLanguagesPython26python.exe" "%1" %*
Python.NoConFile="C:DevFilesLanguagesPython26pythonw.exe" "%1" %*
Python2.File="C:DevFilesLanguagesPython26python.exe" "%1" %*
Python3.File="C:DevFilesLanguagesPython31python.exe" "%1" %*

I wonder how many people never knew you could change file associations from the Command Prompt? It is oh so much faster then screwing with Windows Explorer!!! Later on I’ll add .pl;.py;.py2;.py;.rb to an environment variable that users can append to their %PATHEXT% at will.

Tools for getting work taken care of next: GIMP, Dia, and Pidgin+GFire plugin. Vim is the only one that I actually care about, but since getting the newest version with all the right features that I want, means compiling my own from a CVS/SVN checkout: it might help if I installed MSVC and CVS first; will get to that later.

Misc office/unproductivity apps: GnuCash, Abiword, Gnumeric, OpenOffice.org, and AutoHotKey. Then remaining non-dev utilities: WinMD5Sum, Qlipboard, Unlocker, GNU PG.

A couple small games: prboom, OpenArena, Battle for Wesnoth, and Chromium BSU; I’ll get UrbanTerror, Raven Shield, and SWAT 4 setup later.

And now time for the huge hulking development stuff…. since it’ll take at least 15 minutes to download the remaining Microsoft development packages, I started on MinGW, MSYS /w DTK and WATCOM. I usually use Visual C++ for compiling under Win32 whenever possible, but out of respect and potentional handy’ness, I usually keep a copy of Open Watcom around; it also has one of the most polite installers ever created on Windows! Setting up the MSys kits is painless, upgrading them is not always so. MinGW, well just boring to setup 8=). After that came making sure that there is a full Java development kit and Ant available. PHP, PhpDoc, GDB, and Exuberant CTags followed.

Time for the build and scm tools: Ant, CMake, SVN, Git, and CVS.

Next up a few game development related tools: q3map2, QuArk, Wings3D, and Blender.

Wrapping up with an installation of MPlayer & Mencoder binaries (the Git ones) with codecs. Most of the development-related libraries, I don’t want installed until Visual C++ is installed, so time to get that done now. Rather then bugger with Daemon Tools Lite, I chose to try out ImDisk, something that appears less intrusive on ones computer experience ;-). After mounting the Visual Studio Express editions DVD ISO, it was a fairly quick bombing run to get C:DevFilesVisual Studio setup and running; it’s still ashame that it forcefully crams a few things into %ProgramFiles%, but I reckon that is the price of an automagic installer 8=).

Ok, time to get the rest of the development stuff setup. First off, Debugging Tools for Windows, followed by the DirectX SDK. The Qt SDK & PyQt4 bindings fell into place, GTK was a simple unzip followed by installing the appropriate Py* packages. WxWidgets is a quick installer, but still needs to be compiled later (per compiler); that can wait until I have need of compiling anything against WxWidgets, which is pretty rare.

As much as I love XML and hate XML parsers, LibXML2 / LibXSLT are just to valuable not to have installed. OpenSSL and ZLib are also kind of useful ^_^. Xerces-C++ and SDL will take a while to compile, so I will save those for later.

I would like to take a few minutes break to get some of the backups restored, while Cygwin goes and fetches a couple things (e.g. rsync).

To be continued…