Jim Hugunin, the inventor of IronPython (Python for .NET) has got a blog and for his first post gives examples of using IronPython as an interactive scripting environment for .NET. I'd never really thought before about just how useful the interactive aspect of the language could be, but it's excellent. This combined with tools like SnippetCompiler from Jeff Key could be incredibly useful in cutting down the time taken to experiment with code.
I downloaded IronPython recently and used it to briefly prototype a piece of code for experimentation purposes, and it's definitely cool. I love the simplicity of Python code, and being able to import all the really cool .NET framework classes and use those with Python code is sweet. Now what we need is for the base Python libraries to be available alongside the .NET framework in one place.
One thing that seems to be missing at the moment is a pycl tool, an actual compiler. I could only find the interactive run-time with the distribution, but hey - it's only an alpha!
I am writing my MSc thesis at the moment, and am trying to do it in docbook - the same way I'm trying to write the PN documentation (slowly!). Transforming docbook into PDF takes an impressive toolchain, XML & XSL -> XSL:FO -> PDF = XML editor, docbook stylesheets, xsltproc, fop (java + xalan + saxon + apache fop). Just a couple of tools, you might think - but they took me ages to collect and configure into a working setup.
I'm trying to write this explanation to keep a note for myself on how I did things. The various sections are in no particular order, so my apologies if it seems to be a ramble.
You can get xsltproc for windows from the website referenced in the References section. You need to retrieve libxml2 (which contains libxml2.dll, xmlcatalog.exe and xmllint.exe), libxslt (libxslt.dll, libexslt.dll and xsltproc.exe), iconv and zlib. Download all the zips, and extract the .dll and .exe files. These are scattered around the bin and lib directories inside the zip files.
To transform the DocBook XML into XSL:FO XML (for later conversion to PDF), you need to get the DocBook XSL stylesheets. These need to be extracted and stored in a sensible location on your hard-disk.
FOP is the tool from the Apache XML project that converts from an XSL:FO formatted XML file (a file full of layout instructions) into other formats such as PDF. FOP is a java tool so you'll need a Java runtime. I downloaded the binary version, and also needed to download JAI in order to get picture insertion working. You need to install JAI and then the FOP tool will pick it up automatically. The FOP site also references something called JIMI but I couldn't get this working.
If you're not really into the world of XML (I feel like I know a good bit about it, and am barely scratching the surface compared to many others) then you may not really know a lot about DTDs, schemas and catalogs. Simply put, the DTD and Schema things are often used by the tools listed above to validate XML content - they define a contract for the content of XML files. If you just run these tools without a catalog, then they will attempt to retrieve these contract files from the internet. This takes a long time and really slows down the conversion process.
It took me ages to work out how to get catalogs to work properly with xsltproc, there was no windows documentation so I pieced it together from e-mails and snippets found using google.
This shows how to create a simple catalog that points to a local copy of the docbook DTD. First you need to download the DTDs, which there are links to in the references section below. I suggest placing them in a directory structure like:
xml\docbook\4.3\dtd <-- DTDs for docbook 4.3 in here
The DTDs are referenced in the xml files you are working with by a reference name, like for example:
-//OASIS//DTD DocBook XML V4.3//EN. The catalog mechanism works by mapping from this reference to a file on your disk.
Here is a simple catalog file containing a mapping for this DTD:
<?xml version="1.0"?> <!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"> <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"> <public publicId="-//OASIS//DTD DocBook XML V4.3//EN" uri="file:///c:/xml/docbook/4.3/dtd/docbookx.dtd"/> </catalog>
Note that you can also map previous versions of the requested DTD onto the newer version by mapping the old IDs to the new files.
Under Linux, xsltproc looks for a catalog in the default location of /etc/xml/catalog (or something similar). No alternative default is offered on Windows. Therefore, to point xsltproc at your catalog you must set the XML_CATALOG_FILES environment variable. This allows a space-separated list of filenames to be used.
From the command prompt:
you can also set this through the system properties control panel application. Once this is set, xsltproc will load your catalog file and use it to resolve the DTDs.
If you think this isn't working properly, you can view debug information relating to the use of the catalog by defining an environment variable like this:
You will now see lots more information about resolution when running xsltproc.
This post gives a bit of information about how to get the environment set up. I'll hopefully have time to write a bit about using all these tools as well in another pose.
1. Windows ports of xsltproc and required libraries: http://www.zlatkovic.com/libxml.en.html
1. Docbook Xml DTDs: http://www.docbook.org/xml/index.html
1. DocBook XSL Stylesheets: http://docbook.sourceforge.net/projects/xsl/
1. FOP: http://xml.apache.org/fop/
1. JAI: http://java.sun.com/products/java-media/jai/
It's clearly the day for non-software toys.
The SoundBridge from Roku is a network music player that plays from iTunes - it doesn't need any custom software of its own. It can work over wired or wireless networks and has a nice display:
The Roku can also be fed by the open source SlimServer music server. There are two models, one with a six inch display (the M1000, at around $250) and one with a massive twelve inch display that can display four lines of text (the M2000, around $500). Definitely cool toys.
Time for a new category, methinks. Still, we'll go for "cool stuff for the hard-at-work software developer" - it's almost cool software.
The Roomba Robotic Floor Vac from iRobot, another robot vacuum cleaner but at a low price point - and apparently it works! Today is clearly my day for discovering cool things that I wish I owned and can't afford. There's a new model out which can be pre-ordered: Roomba Discovery.
[via SilverOrange Stuff]
OK, so it's not cool software, but it is cool stuff for software developers:
the Lock Cup. This is a cup designed for those (such as my mate john) who find that no matter what cup/mug they bring to work some scoundrel half-inches it (or breaks it - but this cup doesn't fix that problem).
The Lock Cup has a key lock in the side; when the key is out, the cup doesn't hold water any more - genius!
YVG Software Services has a free tool that automatically imports album art for iTunes tracks, it's written in VB.NET and uses the iTunes COM for Windows SDK, talking to the Amazon Web Service - cool stuff! Even better, it seems to work!
At the ACCU conference last week Herb Sutter announced that Microsoft would be releasing their optimising compiler and utilities for free. It's here! This is the same compiler used for compiling Programmers Notepad, although it seems that the toolkit doesn't include ATL so developers without the full Visual C++ still won't be able to compile PN. Still, it's a step closer. The compiler can also compile managed C++ source code - to target the .NET framework from C++ code.
I've also heard that the package doesn't include nmake - which is presumably an oversight. Apparently borland's make or a port of the GNU version will do the job for now.
My particular favourite for today is this one, all about naming classes. I was working on some code today at work that included a class that was called something similar to CMonkeyCollection - only it didn't hold CMonkeys, or Monkeys or anything similar. It also did much more than just "collect". Bit of a disappointment really... If only the author had read this article first.
This Windows API attempts to guess if a buffer contains unicode text or not:
An enormous collection of string matching algorithms, all with explanations and java animations:
From the same guy who wrote Cog, see this useful python snippet:
This code will find all of the pre-processor lines that affect a given line of code. I wish I'd found this about 3 years ago.
Cog from Ned Batchelder is a tool for generating code.
To use cog you insert blocks of simple python into your source code (delimited by special comments) and then run cog over the file. Cog inserts the generated code into the source file (replacing any previous cog-generated code).
I'm using Cog to create large message-type enumerations and message factories in three different code libraries - one in Java, one C++ and one C#.
I'm finally caving in and doing something about my mail server. It's a Linux box running Gentoo and it does the job very admirably. The problem is spammers and virus writers. These people cause my poor mail server to deliver me lots of e-mail that I have no desire to see. I am getting around 100 copies of the MyDoom virus per day to two addresses. That's not a huge amount - I know people deal with more - but it is annoying.
I use qmail on the server which is a good MTA. There are other good MTAs too - Postfix, Exim - I'm not starting a holy war here. I simply decided to try qmail this time and I quite like it. I'm going to install qmail-scanner which is a qmail add-on that harnesses tools like SpamAssassin and F-Prot into my mail delivery path.
I used SpamAssassin on my previous mail server for a while, and had a lot of luck with it until razor failed one day and SpamAssassin just sat waiting for it - no mail was delivered. This was unacceptable and I hope they've fixed this. I guess I'll find out.
The really exciting thing about installing this software isn't the combination of excellent tools working to make my life easier (though that is cool). The exciting thing is how easy it is to get it all installed:
> emerge f-prot
> emerge Mail-SpamAssassin
> emerge qmail-scanner
The Gentoo portage package system resolves all of the dependencies (software, perl-packages, you-name-it), downloads them, patches them (where necessary), builds them and then installs them. Great! Sometimes I really do think that windows developers could learn a lot about distribution from Gentoo's package system.
In another of my surprise discovery moments while writing Java code, I found that there are at least two Java IDEs that don't suck. Gel, from GExperts, is a free Java IDE developed using a non-java language (Delphi, I think). This IDE was an absolute pleasure to work with compared to others I've tried. It doesn't have most of the refactoring cleverness of Eclipse or the enormous number of features but it does what it does well, and in a small memory footprint.
The author of Gel is Gerald Nunn. Gerald originally developed the GExperts plug-ins for Delphi which added lots of incredibly useful functionality to the IDE. Gerald is also the author of the original Programmers Notepad project before I took it over when he lost interest. He is clearly a source of great software!
Highly recommended for windows Java programmers: Gel.
I've been drafted to a different team at work for a couple of weeks to help crank some code for a library due at the end of January. Unfortunately I have to use Java which I'm not the biggest fan of. Previously I've hated any Java IDE I've had to use and have found the whole process less than enjoyable.
Eclipse has come a long way since I last looked at it and is actually really quite usable. I will miss a lot of the coding aids when I go back to C# in VS.NET.
If you're programming Java then eclipse is recommended.
I have also been using the XmlBuddy plug-in which is really quite good too: XmlBuddy. I'd love to implement some of the XML editing features from XmlBuddy in PN some day.
A short while ago I uploaded a tool to my web site called XmlSerializerWorkshop. This is a tool for developers who use the XmlSerializer class in the .NET framework. The tool allows you to attempt to serialize lots of different types in any assembly and to see the errors reported by either exceptions or compiler errors when you try to serialize a type. Anyone who's tried to use XmlSerializer extensively will see the advantage in this.
Find XSW (and C# source) here: http://www.untidy.net/xsw/.
Finally, Apple has released iTunes for Windows. I've been waiting for this for ages. At first glance it seems really quite polished for a first release. It's not the most powerful music program ever, and it won't replace foobar2000 for me yet, but it has a lot of really nice functionality that other players seem to make very difficult. Better, it offers sync with the iPod and seems to support the auto-leveling stuff that nothing else I've tried does. Lovely.
I just wish that you could buy music from the iTunes Music Store outside of the U.S.
I'll post again once I've used it a bit more.
Using a new beta of SharpMT today. It's excellent - easily the MT blog tool of choice at the moment. Thanks Randy!
Free ASP.NET service from Microsoft to allow you to administer MSDE and SQL Server databases. Download from here. It's my useful tool of the day.
I tried two different add-ins for VS.NET that run NUnit test inside of visual studio. The first is NUnit-Addin by Jamie Cansdale. This installed and just worked, the output from the tests was text format and shown in a "Test" part of the output docker. The only thing I really missed from this tool was being able to see a list of the tests and run individual ones.
The other add-in that I tried was called TestRunner and I found it on mailframe.net. This tool claimed to show a nice graphical view of the tests that could be run similar to the NUnit gui. Unfortunately I just couldn't get this add-in to work at all, and it also required a specific reference to its own build of the NUnit assemblies - not something I was happy to do.
NUnit-Addin - Recommended.
This is possibly the coolest feature I've discovered in Word in years. I've been writing a lot of technical specs recently, and most of them have a number of XML snippets in them. It's always really annoying to see red and green wiggly underlines all over the document when I'm trying to read it, and I thought to myself: "wouldn't it be cool if you could disable spell-checking for one style". And low and behold, I found an option to do that. Go into Modify Style for the relevant style, select "Language" from the Format drop-down box, and click "Do not check spelling or grammar". You need to re-load the document for it to take effect. This works in Word 2002, I don't know about previous versions.
I have been chopping and changing between blog posting clients for a while. I started off using w.bloggar which is quite good, but always felt a bit clunky to me and doesn't support the text filters available in Movable Type - I like using Textile to write my entries so w.bloggar didn't provide all I needed.
Then I tried Zempt at about version 0.1 and while it was functional it felt a bit ugly. I admit it, I prefer to use good-looking software. Therefore, I have been using SharpMT (currently version 1.2 Beta 1) - this is a nice modern looking piece of software, developed using C#. It supports offline blog entry writing which is really cool, I've been putting off finishing this post for a week (having posted others in the meantime)!
While avoiding finishing this little entry, I noticed that a new version of Zempt had been released - 0.3. Much prettier, well done guys. The UI (especially in the options) is much cleaner and a bit more of a pleasure to use. I still have the following complaints:
These things aside, the new Zempt is really good - look at these features:
While testing the spell checker I noticed that it was finding the words "fdfs" and "fdgdfg" in my entry - they're definitely not there. Also, I added a number of items to the dictionary (such as Zempt and blog) and at the end of the spell check was asked: "Would you like to save any of your changes to your personal dictionary?" (yes/no). I said yes, and then the next time I spell checked these items were not in the dictionary any more. Bit of a shame, but it's only an early version - give it time.
What would be a great feature would be built-in support for the common text-filters - something that would show you how your Textile written entry will show up. Even better, when using textile mode things like Bullets and Numbered list modes would insert the textile codes rather than HTML.
So to summarise, SharpMT and Zempt look like the two contenders for the MT offline publisher crown. SharpMT has a better, cleaner UI at the moment. Feature-count wise they are similar, but I think Zempt is winning on features for the Spell checker. Zempt doesn't require people to download the .NET framework and might be available on multiple platforms. What am I posting this with? SharpMT. Will that change? Probably. Daily. Of course, if you're not using Movable Type then check out w.bloggar - it's really quite good, I'm just fussy.
I've been working with .NET a lot at work and was interested to note that the mono team have released a new version: Mono 0.25. I downloaded the windows version to see what it was like.
Mono 0.25 for Windows comes as an NSIS installer that dumps a bunch of files in c:\program files\mono-0.25 (by default), with subdirectories like bin, lib etc. The compiler and run-time stub are all in the bin directory (with apologies for those who could have guessed that) and all of the runtime library is in lib. There is some help provided in the man directory, but of course these are man format and pretty useless to the average windows user.
The installer does not create any program icons or provide any useful help, be prepared to work it out using google. Therefore, it took me a minute of googling to work out that I needed to set the MONO_PATH variable to make my software run - the error message given by mono was a less than useful "The assembly corlib.dll was not found or could not be loaded. It should have been installed in the `c:/Mono/install/lib' directory."
The following is a batch file that should set the environment up to allow you to compile and run with mono:
of course, you should probably add these to your windows environment variables if you plan to use mono often.
To compile you just type:
The compiler reports "Compilation succeeded" if everything is OK, and a very scary error message like this if it isn't:
syntax error, expecting ABSTRACT BOOL BYTE CHAR CLASS CONST DECIMAL DELEGATE DOUBLE ENUM EVENT EXPLICIT EXTERN FLOAT IMPLICIT INT INTERFACE INTERNAL LONG NEW OBJECT OVERRIDE PRIVATE PROTECTED PUBLIC READONLY SBYTE SEALED SHORT STATIC STRING STRUCT UINT ULONG UNSAFE USHORT VIRTUAL VOID VOLATILE CLOSE_BRACE OPEN_BRACKET TILDE IDENTIFIER
C:\Projects\monotest\\clhelloworld.cs(13) error CS8025: : Parsing error
Mono.CSharp.yyParser.yyException: irrecoverable syntax error
at Mono.CSharp.CSharpParser.yyparse(yyInput yyLex)
Compilation failed: 1 error(s), 0 warnings
To run the program using mono's runtime environment (CLR equivalent) you have to preclude your command with mono, e.g.
If you don't do this, then the program will run with the standard .NET framework (if you have it installed). I successfully compiled a simple hello world style application using the mono compiler and then ran it on both the .NET framework and the mono version of the framework - clever stuff.
Definitely one to keep an eye on. When I get a chance to try something more interesting than Hello World I'll post another report.
For years I have been using IE as my only browser - I never touched Opera, Mozilla or Netscape unless testing websites. This has changed with Firebird, it's finally a usable alternative to IE that has popup blocking and works with most of the sites I use.
It's not perfect, here is a list of things that are currently irritating me:
These things are enough that I certainly won't be switching from IE completely - I use a hybrid now. Firebird when I want tabs, and IE for quick browsing and CodeProject. It also still feels more natural to reach for IE to go to a website.
IE has also just got a lot better (IMHO) with the release of a new beta Googlebar: http://toolbar.google.com/install-beta. This adds popup blocking and form-field auto-filling to IE. Excellent stuff.
I note that standalone IE development has ceased at Microsoft, this tells me that it may not be long before I permanently switch to Firebird or some mozilla based browser. Ah well, the fun ensues.
Nullsoft have released a secure mesh network client allowing messenger style chat and file sharing:
The protocol uses a public/private key model with RSA for key exchange and encryption. All of the link traffic is encrypted using Blowfish.
The protocol supposedly supports automatic key distribution but I haven't seen that working yet on my network. To initially connect to a network you have to have the public key of one other network member.
The client is really quite accomplished for a first release piece of software - the source is available on the website and is GPL licensed. You can use it to browse the shared folders of other users and then transfer files across the encrypted link. Really quite cool stuff.
Get it while it's hot and AOL haven't pulled it.
I have been using InnoCVS for a while because I find WinCVS unusable for CVS use - far too much program for a simple task, and yet the simplest of tasks in it are over-complicated. I really like the fact that InnoCVS doesn't get in your way.
However, I have just downloaded and installed TortoiseCVS after seeing so many recommendations and I'm gobsmacked - I really do think this is how CVS should be for windows users. TortoiseCVS integrates into Explorer providing CVS in all the useful places - context menus for CVS folders and files, and simple checkout items in the main file menu. The range of functions provided are spectacular and finally I've found a client that makes setting up CVS write access with sourceforge more simple than it previously has been - it comes bundled with PuTTY for SSH.
What's more, I think they prove quite nicely that you can produce quality GUIs using the cross-platform wxWindows framework. They haven't used it for its cross-platform nature, but simply because they don't like MFC - also why I chose WTL for PN2. They have the added advantage that their product can theoretically be built with GCC outside of MS Visual Studio.
My first experience hasn't been flawless - I have seen it hang while updating once but I am using the beta version so it's unfair to use that to comment on the stability of the product. If you use CVS and use Windows, give TortoiseCVS a try.
Patrick of OnlyTheBestFreeware fame recommended IZArc to me:
If you're looking for a Winzip-like archiver that supports many formats and allows you customize the file associations, give IZArc a try. It's listed on
I installed this, and it has stayed. It gave me a big list of file types it could handle and allowed me to choose which it would become associated with - no association theft. More importantly, it does well with .tar.gz and the like files - a great Winzip replacement (it is, of course, free). Recommended.
I don't know about the consequences of using MPL code with PNs open-source license. If anyone has any ideas on that, please comment...
With lots of thanks to Kiriakos Vlahos, I have released an updated version of this wrapper which adds a number of properties that are surfaced in delphi-style and the control now works at design time. Schemes are also now available without coding all of the details for each use. Great work Kiriakos!
I've just upgraded this weblog to use MT 2.62, and have taken a few moments along the way to play with some features, and make the blog better.
Firstly, I changed the comments system to never display a user's email address. This way, they can't be harvested for spam. An email address is still required to post, though - to prevent abuse.
Next, I installed the MT-Textile plugin to do clever text formatting. And if it works, then theoretically:
Textile is a ‘Humane Web Text Generator,’ created by Dean Allen of Textism. After seeing Textile in action, I decided that I must create a Movable Type plugin that does the same thing. - Brad Choate
That should be a block quote. Yes? No?
Also, I've played with trackback a bit to learn what it's about. This post will be the first that I've ever used to send a trackback ping. Quite clever stuff.
although I think my iPod is safe for now, I still like the idea of using it to play music...
I've been playing with C# and began development of some of the tasks for NAnt that I was hankering after. I now have a simple CVS task which can checkout and update, an Inno Setup task, and a clever task for updating VERSIONINFO blocks in resource files. All of these can be found (with source) here:
(which is part of my new web-site:
Soon I hope to move this to a proper host instead of using a nasty frames hack.)
These tasks have enabled me to create a short, simple build file which checks out pn2 from CVS, builds the code and builds an installer. Cool! I plan to get this to do nightly builds soon. I will be updating these tasks as time goes on, and would like to implement all of the necessary functionality in the CVS task.
Templates are the best discovery that I've had in my software development life - or they are at least in the runnings.
In the last year or so I've begun to really get into powerful C++, beyond the basic function of the language. Almost all of the things that have excited me are template related. Today, in one simple action I generalised a string tokenising function to work on any basic_string derivative class, saving quite a bit of work. I did this simply by making the function a template function.
My windows application writing has switched almost entirely to using WTL and I really feel like I am lots more productive using this than when writing using MFC. Also, through using WTL (and more win32 code) I understand the work that I do with MFC a lot more. I can't help but think that abstracting away the underlying operations like MFC does is harmful to the MFC developer.
It upsets me when I think that I'm only beginning to discover the real power of C++ when Microsoft is trying to persuade me to use the wonderful new C#. This language has no templates, and from what I've seen offers me little more than Delphi does - with a slower execution speed.
Seeing as I'm on a roll with this categories malarky, I'll add another link to a cool piece of software - "Photo Studio" by my mate John Hawkins. This excellent piece of software is a free JPEG organiser, manipulator, tool and more. It also does movies and other file types. If you're a digital camera user (I've got a lovely Canon Powershot S30 which I highly recommend) then I seriously recommend you check out Photo Studio.
Incidentally, the version on his website is old. I know because I have a much newer version. I suggest you bug him for a newer version. If enough people bug him, he might get around to releasing the newer version.
The first entry in my "Cool Software" category, great :) I've just discovered Aggie in the last few days. I've been using FeedReader for a while, which is quite cute and got the job done (p.s. the job I'm referring to is RSS aggregation). However, the bugs got too much for me as did its spinning tray icon. I was spending too much of my day bringing up FeedReader and trying to find what was new and/or interesting.
Aggie nicely groups all of the new news together for me when I want to read it. This has actually been a great productivity boost for me. In addition, it has made me feel happier about RSS in general - I don't have to look for new news, it is just presented to me. This is made even better by the fantastic "Pixel" skin for Aggie. I'm now far happier about subscribing to loads of RSS feeds as I don't spend my time looking for ones with new news.
Now, if I was going to suggest improvements for Aggie - these would be mine:
1. Make more of the GUI, allow an internal view of the generated HTML.
2. Then, have a list down the left with "New News" at the top, and each feed down the side. The feeds when selected would show their recent posts. See below for why.
3. A search.
Sometimes, I'll have read an item and the next time I load Aggie it's gone. This is right and good (in some ways) - it is old news. However, I'd like some way of getting back to it.
In other news, the DevLog is now published using MovableType running locally instead of using Blogger.com - this software is fantastic and I'd recommend it to anyone attempting to host a blog.