Serendipity

Last sunday I somehow came across Serendipity.

Besides being the only project where hitting Ctrl-V is simpler than actually spelling the name (let alone pronouncing it), this blogging engine shows much promise for me.

It has some obvious advantages over MT for me:

  • It’s OpenSource. Hacking it isn’t a crime.
  • It’s written in PHP, one of the languages I’m really fluent in.
  • It has some great anti-spam-features (though forcing the preview here did help greatly).
  • It uses dynamically generated pages instead of statically generating each an every page.
  • It has many more features than MT does.

My only problem: It does not have an importer for Movable Type. Well, actually, the current CVS HEAD does, but it does not work either. But because of the first two points above, I could do something about that.

Now, this evening, I will be working on the comments importer and tomorrow you will be able to have a look at how well my patches work (at least with this blogs data)

And sometime later this year, I will be using Serendipity as my blogging engine (hopefully with many more patches by myself). That’s for sure!

Delphi 2005

I got my hands on the demo-version of Delphi 2005 (download it here), and I actually have configured the beast already, so I have my usual environement to work on PopScan with it. These are my first impressions (I won’t talk about this File-Download-Window-Popping-Up Problem as all know it’s a nasty problem with a security-patch from Microsoft which will soon be fixed. Read about it here on Steves blog

  • It takes quite some time to start up. After removing the Delphi.NET and c# personalities (don’t need them), it starts about as fast, als my Delphi 7 did. Just a little bit slower
  • The compiler got faster, if you ask me.
  • Besides the great new features Borland is talking about, there are very nice usability-tunings everywhere which make working quite a bit easier.
  • The VCL form designer is extremely slow on my machine. Just displaying the PopScan Main Form within the designer takes nearly 10 Seconds. Delphi 7 does that instantly.
  • The debugger is slower too, which certainly has to do with the many great feature additions. I can live with that.
  • It’s extremely compatible to Delphi 7: I could install every single third party component without any problems. This is quite impressive considering Delphi 2005 is quite a rewrite.
  • While I like the new docked form designer, there’s one usability-problem with it: When you have components that use their own property editors (like Toolbar 2000), those editors are opened in their own window (understandable). Now, if you select a button in the component editor and then click the Project inspector to change a property, the Delphi Main Window will cover the property editor rendring it invisible. An easy fix would be to define the property editor always-on-top – a better fix would be integrating it somewhere in the IDE
  • Even JCLDebug could be compiled and installed (even the IDE Expert did work, though you have to manually install it)

All in all, this release of Delphi is a very great release providing the user with a ton of new features and fixes to long-standing usability problems (so long that you got used to them and now are missing them…). I have not expirienced any crashes so far (besides the one where the expat-parser of a debugged application took all the ram on my system, but I don’t blame Delphi for that), which is very nice.

Now, if only the beast could be made to run a bit faster (which will be done, I’d say, it’s the best Delphi since Delphi 2 which means quite a lot…

Thanks Borland.

PS: I know that it’s currently more in fashion to bash Borland and to whine about everything they do. And for the fourth consecutive year now I read posting about Delphi’s impending doom everywhere on the net. But consider this: Delphi still is the only RAD tool out there producing 100% native windows executables. And it still has one of the most lively communities I know of in the Windows-world. Even if Borland would kill off delphi, I’m quite certain, it will not go so easily. Not with this community.

On and speaking of killing off delphi: Seeing this great release of Delphi 2005, I am quite assured that Borland will continue supporting us.

So: Quit whining around!

AC3-Divx on my PPC

As I’ve written in the review of my hx4700 PDA, the thing really shines when it comes to displaying XViD videos.

The single big problem about Betaplayer is that it lacks support for decoding AC3-streams. This is bad, as most of my movies have an AC3 audio stream (always looking for the optimum quality). So I was on the lookout for a solution.

I quickly found PockedDivxEncode which comes with nice presets for encoding videos for a PocketPC

The problem was that the current version always insists to recoding the video stream when converting the video file, thus reducing the overall quality (it’s no use compressing two times) and needing a long time to do its job (about 50% realtime or slower. Haven’t tried).

Then, on the download-page I found this not-so-visible link to the the current beta test version, which has – under “Advanced Settings” an option to leave the video stream alone and just work on the audio stream.

Using this configuration, recoding just the AC3 stream becomes possible. As it’s leaving the video alone, it’s reasonably fast too – about 4 times realtime on my thinkpad.

This is a usable solution until Betaplayer gets AC3-Support.

SQLite on .NET CF

SQLite just doesn’t stop to amaze me. First, we got it to compile on our small ucLinux based barcode scanner where it not only works flawlessly, but extremely fast too.

Now I thought about using SQLite in a little PocketPC application I intend to write using the .NET compact framework. This after some very bad expirience with SQL Server CE

  • There is no useful frontend to modify the data in the sdf-File: There is no tool for the desktop (besides using SQL-Server and then replicating the data to the device which I actually got to work this march or so, but it was a major pain in the ass to set up and is no solution to me. I mean: Why should I install a whole SQL-Server just to get some test-data to a smart device?) and the little frontend on the PocketPC suffers from the small screen and the lack of a keyboard.
  • Despite everyone claiming it’s fast, it isn’t (though this certainly is relative. I’m sure, the marketing departement of MS is still conviced that it’s fast). Where some operations may be, others are not. Searching for strings is an example of extreme slowness.
  • Starting an application using SQL Server CE takes about a minute on a usual 400 Mhz PocketPC. Way too long to be used in production with customers.

So, using a leightweight local SQL-engine which is fast even on a 66 Mhz CPU without MMU sounded quite appealing to me. Just: How much work would it be? How well would I be able to integrate SQLite into .NET?

Knowing about the lack of features in P/Invoke on the compact framework and knowing that the SQLite API uses callback functions, I feared the worst, but fortunately, I googled before getting to work.

So, I found this project.

They provide you with a full-fledged ADO.NET driver for SQLite, so you can use all the database classes and components you are used to, while still profiting from the advantages of SQLite

Compiling it was easy (while they provide pre-built binaries of sqlite.dll and the P/Invoke-Wrapper sqlite_wrapper.dll, they do so only for ARM and the desktop version of Windows for x86, so if you want to use the emulator for developement, you have to build those two DLLs yourself – using eVC4) and a quick look (it’s already late now – I got up more than 17 hours ago, so I’m quite tired now) using the sample project here was quite successful: The application started (instantly, no wait) and displayed the data inside the SQLite-File.

So, the speed-problem is solved. What about the frontend? While I don’t know any Windows GUI frontends for SQLite (though I know they exist), I have already worked with the SQLite ODBC driver (it’s funny to think of that: Usually ODBC-drivers are just a middleware between the Application and the dtabase, but in case of sqliteodbc, the database engine is linked into the ODBC-driver. Strange) and of course the command line tool and the PHP extension. So for my purposes, I’m going to create the database using a PHP-Script on Linux and copy the .db-File to the PocketPC. As seamless as possible. No replication, no installation of servers, no nothing. Just plain old copy.

Soundblaster Audigy 2 NX Driver

If you are like me, then you certainly throw away or lose CDs containing drivers for your hardware. I mean: Why should you not? These days, every hardware vendor has the most current drivers on it’s webpage, ready to be downloaded.

Actually, using the drivers on the CD often does not even work… You know – little or now quality management.

But then, there is my Audigy 2 NX card. I bought it, so I can hook my AC3-Receiver to my ThinkPad when watching an occasional DivX movie with AC3-Sound. For that matter, I have not used the little silvery box for the last five months or so. As I noted before, I have long lost the driver CD.

You can certianly imagine how annoyed I was when I saw that Creative Labs only provides driver updates requiring the original driver to be already installed.

I don’t even want to think what I would have to do to get back to a CD or a full installer. I can well imagine that the support – if it even answers my calls for help – would really like to see me buy another package – just for a new driver CD (which I will lose again – eventually)

So, I needed another solution.

This is what I did:

  1. Plug in your the Audigy and turn it on
  2. Download and run the driver installer (the older of both versions)
  3. Wait for it to tell you that the software must be installed
  4. Go to [Path_to_profile]Local SettingsTemp (mostly c:Documents and Settings[your username]) and look for a folder just created. If you don’t want to search, use Process Explorer and look what handles the installer has opened.
  5. In this directory, you’ll find a folder named “Drivers”. Copy that to somewhere else
  6. Open the Device Manager (Start – Settings – Control Panel – System – Hardware – Device Manager or much faster Windows-Pause)
  7. Right-Click on your Soundcard (either not recognized or recognized as “USB Audio Device”), select “Update Driver…”
  8. Don’t let the assistant install anything automatically
  9. Provide the path where you copied the Drivers directory to in step 5
  10. Windows will install the driver which creative’s installer would not have let you to
  11. Click “OK” in the installer from Creative. It’ll think that the original software ist installed, re-install your manually installed driver, flash the card’s firmware and exit nicely

This saved me from a lot of stupid asking-arond or even re-buying a piece of hardware I already own.

I can’t understand why Creative Lab’s does not provide un-crippled installers for their drivers. This procedure is far from obvious and many non-geeks are probably not able to do this. If this policy should be a new business-case in selling more products, I don’t really see how this will work in the long run…

Anyway. I could get it to work and I will now please myself watching this DivX-Video using my beamer and my AC3-Receiver. ;-)

RSS Readers for PocketPC

I really like surfing the web on my PDA while taking a bath. Every morning before leaving home for the office, I use my PDA to check my email and read some news-sites like Slashdot or the Heise Newsticker (which is available in a PDA-optimized version, which I have linked here)

Some days ago, I thought that actually reading all the RSS feeds I’m subscribed to could help me prolong my bathing-expirience, so I went looking for a decent RSS-Reader for the PocketPC. Here’s what I found (all products reviewed here understand all the RSS-variants and Atom 0.3 and work without a permanent connection to the net):

Egress

Egress is Shareware and costs $12. Like all the readers I’m reviewing here, I began using it by importing this OPML file. After importing, Egress insits on checking all the feeds for new entries, so don’t do that if you are connected via your cellphone. Of all the readers reviewed here, Egress has the best UI: The whole Channel-List is compacted to just a little menu bar at the top of the screen, leaving lots and lots of space for the entry itself. To the left is a drop-down menu showing all your feeds, to the right are two arrows to navigate within the feeds containing unread items.

While there is a “Manage Channels” function, it’s not possible to move imported channels into subfolders – at least I have not found out, how to do it

The content viewer somewhat supports HTML, though I’m missing support for the <pre>-Tag as I’m reading quite a bit of programming-blogs. Another thing that bothers me is the support for the four-way navigation button of my iPaq: Accitentally hitting left or right insted of down will switch to another unread blog. Paging back will not scroll to the point where you were interrupted reading. Additionally, in contrast to PocketIE, scrolling down using the nav buttons just scrolls a few lines instead a whole screen.

By clicking on an entry you can toggle it’s expanded/colapsed state. The former is used to read the whole entry, the latter just presents it’s title. Unread items are bold-faced

The reader has quite an extensive preferences screen and is the only application tested here where one can set the User-Agent-Header with which it should request the feeds.

A Today-Screen-Plugin provides an alternating view to new entries, but is not really useful.

Unless your are constantly connected, you should turn of Egresses feature to automatically refresh the feeds as it will trigger the Windows CE autodial routine for every feed in your subscription list, not stopping the process when you hit cancel, which is a major pain in the ass

PocketFeed

PocketFeed is the only free software I’m reviewing here. It’s interface is devided in two parts: At the top there is a tree view containing the feeds and the entries. Unfortunately, unread ones are not displayed in boldface or any other way.

The bottom half is the reader which does not support scrolling with the navigation buttons.

There is no today-plugin or a way to automatically check for updated entries.

All in all, PocketFeed is a nice start, but many features are still missing.

PocketRSS

PocketRSS, like Egress is Shareware. It costs $5, so it’s slightly cheaper than Egress. The user interface is similar to the one of PocketRSS (with a tree view taking a lot of precious screen estate), though this time, the viewer is at the top of the screen. Unfortunately, scrolling with the navigation buttons changes from entry to entry and does not scroll the current one.

Like Egress, PocketRSS has a Today-Screen Plugin – the most featureful of all the readers.

Settings-wise, there’s not much the user can change and the settings are devided into a “Preferences” and a “Configuration”-Menu. Not that useful.

Just by looking at the review-length alone, you should be able to see, which reader I prefer: It’s Egress. Egress is the only one that’s really parctical for me (many full-content feeds subscribed). The problem with taking screen estate and the non-working navigation buttons is reason enough for me not to use the other two programs

Granted: You can switch off the panel, but it involves always more tapping than with Egress

Additionally, Egress is the only program properly displaying the unread-state of the feeds – an absolute must for me.

While there are some somewhat annoying buglets, I probably will pay those 12 bucks, but not without directing it’s author to this review here, in the hope that those little problems get fixed eventually.

PS: I’m writing this entry on the just repaired IBM Thinkpad. I will write about the wonderful experience I had with the IBM support in another entry.

Eclipse 3.1 M2

The Eclipse team seem to have stopped announcing Milestone releases on the front page, so it’s a bit tricky to know when a new one is released.

So it may be old news, but Eclipse 3.1 M2 has been released.

It contains some nice new features.

The Milestone builds are extremely stable, so there should be no problems using it.

XAMS (Exim) and SpamAssassin

It just came to me, that with the new custom_query-option for the SQL-preferences, it will finally be prossible to integrate SpamAssassin 3.0.0 into XAMS

For those that do not know: XAMS is a sophisticated configuration for handling multiple virtual email domains, keeping all users in a strictly normalized MySQL database.

In contrast to things like vpopmail, it’s easy to set up, does not require patches to any software component involved and is extremely feature-rich.

XAMS was built by Oliver Siegmar, taking my initial idea (german. written von de.comm.software.mailserver), cleaning it up and adding a web interface

I posted my SpamAssassin configuration to the XAMS Mailinglist, so read it there.

A look at Windows Installer

Before I begin, let me put this disclaimer: I’m biased, so this is maybe not objective, but it’s something I wanted to say. And who knows: Maybe you even think the same.

As you may know, Microsoft would really like to see all software using Windows Installer for its deployment needs. Windows Installer is a complex piece of technology, evaluating some kind of database that’s stored in those .MSI-Files.

Windows 2000 Server and later, namely with its Active Directory, provides the system Administrator with the ability to automatically install and update MSI based applications on the client computers, which definitely is a good thing. Additionally, MSI should provide end users with clean uninstalls, automatical repair and the solutions to COMmon [;-)] problems. Sound’s like a good thing, doesn’t it?

It would – if there was not quite a heap of problems associated with Windows Installer

  • First, the thing is intransparent and messy.
  • I have migrated my user profile to another machine, where not all the software I had on the previous machine has been installed. So the control panel was full of software that was not installed on the machine. Hitting “Remove” caused MSI to request the original installation MSI file (why the heck?) and with me failing to provide it (why should I redownload something just to remove traces of it from my machine if I don’t want it in the first place) and hitting “Cancel” removed the entry, but it reappeared when reloading the control panel applet. Cleaning the registry did help, but tell me of an end user capable of doing that.
  • Whenever I drop an URL from my Browser to the desktop, MSI pops up and wants to repair some software I’ve already removed. For this it asks me to provide the path to the original media. Why?
  • Creating Update-Packages is a pain in the ass: You have three possibiliteis:
    1. Create a “full update” which will first uninstall the existing version. That way you have to go great lengths to preserve the user’s data because it’s not that easy detecting whether the uninstall happens because of the upgrade or just is a normal uninstall. This, I want to add, is the recommended way of updating an application deployed by MSI
    2. Create some update-package. This often needs quite a bit of hacking to the MSI-File, leading to problems like MSI-Dialogs popping up asking for some files.
    3. Create a patch-File (.MSP). In MSI pre 3.0 this is a pain in the ass if you want to prevent the user from having the original MSI-File ready. Too bad, MSI 3.0 runs only on Win2k and later

Windows Installer is very tightly integrated into the system. Even small problems here and there (non-clean uninstallation or whatever) can cause major problems that are not really fixable. This is not what I call an end-user friendly technology.

And it does not end there: Have you ever tried engineering a MSI-File? You may begin by reading the SDK documentation I linked to above, but you will soon be overwhelmed – the beast is incredibly complex. But with complexity does not come feature-richness. For example, it’s impossible to install the .NET framework from an MSI based installation as only one of them may be running at the same time.

Because of this and many other problems, it’s the general oppinion to create a self extracting .EXE installing the prerequisities and then passing the control over to the MSI-File which still isn’t capable enough to do many things, setup authors today are used to do.

Big tool Vendors like WISE Solutions or InstallShield go great lengths to hide the comlexity of MSI and to add features not there in the basic version, while sometimes breaking validity of the generated packages or even the one big advantage of MSI’s: Transactional functionality. Thus, taking away the last benefits, MSI may have.

Conventional Installer Tools are availbable for free (InnoSetup, NSIS) and have a much more pleasant user experience: No silly questions for source packages, no confusing breakage and more.

Of course: Some things those conventional tools will never be able to provide:

  • Advertized Features (and Shortcuts)
  • Automatical Self-Repair
  • Advertized Installations (which allow restricted users to install certain packages)

    But to be honest: Which one of those features provides real value to the end user? I know many people that have installed MS Office, for example and no one of them – absolutely no one has instructed setup to install features on demand – nobody wants to insert the office CD at random events.

    In contrast: Everyone I know simply hates those Windows Installer dialogs popping up, requesting the source image. Lukas for example is unable to remove PGP Deskop becuase the uninstaller requires the installer package which can’t be provided as it’s packaged in a self extracting .EXE using a proprietary format. Simply reinstalling from this .EXE isn’t possible either because the extracted MSI detects the existing installation and want’s to uninstall but still does not recognize the extracted original MSI. Bad luck.

    So in the end MSI looks to me like an administrators thing, but not like a tool making the live easier for the end user. With tools like InnoSetup, I can create an user expirience that even non-tech-savy users understand and that even has no further problems popping up later. Granted: More advanced tasks are better integrated into MSI (Installations per User/Per System), but can be done with the conventional tools, if some thought is put into the installation.

    For now, I will definitely stay with InnoSetup and keep my supporting work focused on real application issues, not wierd MSI problems. For Administrators, installing PopScan for their users, we provide a detailed documentation describing, which file goes where and what the installer does, thus providing the administrator with the means of either create an MSI (which can be done automatically these days. The result is not optimized, but it does it’s job. Combined with our documentation, this can be a real alternative) or use other technologies to deploy the software.

SSH daemon on installation CD

First, my apologies for not posting for quite some time now, but I have a hell of a lot of things to do. One of those was setting up yet another IBM xSeries 345 Server. And yet again, I deceided to install Gentoo Linux on it and yet again this distribution does not stop to amaze me:

On their current livecd (used for installing the distribution), they have actually installed an OpenSSH-Server ready to be started, allowing you to do the whole installation procedure remotely. This is incredibly nice.

So I could put the server in our basement where its noise did not annoy anyone and still do the installation from my comfortable chair in my office. This is great!

But then I widened my thoughts: Imagine, you modify the CD just a little bit: Preconfigure the network with the IP of your server somewhere in a remote location, set a non-random root password and configure the SSH-daemon to automatically start on boot.

Then configure the server to boot from CD, if one is there.

Now, if your server (somewhere in a remote location where getting into is difficult or at least time-consuming) should crash and fail to come up properly after a reboot, just ask someone at the housing center to insert the CD and reboot. The rescue system from the CD will boot and the SSH daemon will start. Now you can try to fix your system remotely.

When you are finished, your customized reboot-script will eject the CD after unmounting it, allowing the server to reboot normally from it’s (hopefully) fixed installation. This would even allow to completely fresh-install a compromised system remotely, without forcing you to do that on-location.

This is extremely nice and just another reason why I prefer the seemingly simple and anachronistic installation procedure of Gentoo. I mean: Just try doing this with either Fedora or SuSE…