HP iPAQ hx4700

Finally.

Last July, Lukas and me ordered HPs iPAQ hx4700 and only just today it finally arrived. Nice thing. I’m still looking at everything, so I’m going to post a deeper review sometime in the future.

But now back to my new toy ;-)

Learning by example

After getting through with Head First Servlets & JSP, yesterday I bought Programming Jakarts Struts just outof pure interest. You never know when knowing those things may come in handy.

Currently I’m somewhere in chapter 3 and already know quite a lot of things about struts (that I really like the framework is one of them – I should really try to do something Servlet-ish in the future). Chapter 3, for those that don’t know the book, is an introduction to Struts by example of a very simple online banking application.

And this gets me to the point: I’m a very practical person and I despise of doing lots of theoretical stuff. Usually I come quite soon to a point where I lose my interest because the topic gets to theoretical.

This is why I learn best using examples.

When I have to learn some database structure, I usually don’t even try to learn from the documentation. I just look at how the database is built to learn how to use it. That way, I’m doing something practical while still learning how to do the right thing. Only whhen I’m not sure somewhere, I’m going to look at the documentation.

The same thing with meetings. As soon as it gets redundant, I almose immediately lose interest. My brain hungers for more, clear information. If there is some, it just sticks. I seldom take notes and I seldom forget important stuff – just as long as it’s non redundant and somewhat visual.

So, the chapter three of the Struts-book is the optimal way for me to learn something as it’s expaining things by dissecting a complete application. This way I always know the big picture and a practical goal (the application) which helps me greatly understand and memorize the details.

And all this is the reason I so much like doing what I do at our company. Our philosphy has always been to try something out, never to think of being unable to do something, every time saying yes to some request of a potentional customer.

That way, I can always be on the lookout for practical solutions. I can always learn by example (the project I’m currently working on). In the last five years it seldom happened that I had to do something I did before. It’s learning, trying, erring, trying again all the time.

And as this is how I work best, we never failed so far to actually deliver what we promised to. From my very first CGI-script (“CGI? Never did that… but it can’t be that difficult”) over streaming satellite TV over the internet to Linux powered barcode scanners: It always worked out. And it always will.

Favourite Thunderbird Extensions

last time I talked about my favourite extensions to Firefox and while this list is outdated already (I’ve got some more on the list), I think it’s time for the Thunderbird list:

  • Enigmail is the all-you-need solution for encryption matters. Unfortunately, not many of my common adressees have GPG-keys already, but maybe that’s going to change. Important emails I’m sending out are signed.
  • QuoteColors is a must-have for me as only with this extension Thunderbird complies to point 7 on my list of features I want in a mail client.
  • ClearSearch re-adds the Clear-button to the search toolbar. It’s quite click-intensive to clear the filter without this button and it even serves as another indicator of whether a filter ist active or not (it’s disabled, if not).

So: Not many Extensions, but absolutely important to me. I wonder: What are others using? The same? More? Different?

Fix for comment spam?

Yesterday, asterisk* talks about comment spam and an easy fix to do it.

Reading the article gives quite a good insight on how those spammers work: They don’t seem to really request the page of your entry, but they only submit hardcoded values in some database.

This gets this seemingly simple trick to work. Inststead of reading the weblog page and submitting the real form, spammers still submit the hardcoded value, missing the additional form-element.

Unfortunately, this problem is easy to fix for the spammer: Just update the database with the new information form the forms. And I promise you: As soon as this hack gets more known (which is bound to happen soon as it’s so simple to impelement), they will update their scripts.

The logical next consequence would be to change this additional tag more often, leading to the spammers updating the index more often.

The ultimate consequence would be a script generating some kind of random cookie which is different on every request. This in turn would lead the spammers to actually request the form before sumitting it.

I don’t think, I have to name the consequences of that: The spam will stay, but the bandwidth needed will increase greatly. Instead of just posting, the spammer will also request the whole page.

And the spammer will certainly do that on all weblogs. Regardless of whether they deploy this cookie or not.

So in the end, this “fix” just makes the whole thing worse for all us bloggers.

Sorry. No solution. Or ist it? Convince me otherwise!

Explain This!

Would anyone care to explain me this:

stats.png

I mean: While I can understand that an entry concerning filesharing is very popular and while I really see the sense in the rdf-File being requested often, I can absolutely not understand what’s so interesting about suburban railways!

I for myself certainly find it interesting, but none of the people around me share this interest. Who would have thought that there are more fans of railways out there on the net than there are people having problems with their P800 phone…

Reading logfile analysis can be so interesting at times…

Oh and on another note: I would be really interested to know how many people have actually subscribed to the RDF-Feed and thus are coming back regularly to read what I have to write. So: RSS-Subscribers: Stand up and post a little comment here. A “I do” certianly suffices.

As the traffic really peaks whenever I post an entry, there certainly have to be some subscribers.

Web Programming with CSS

For the first time in a very long time, I’m able to use a completely de-table-ized design in pure XHTML and CSS for creating a little web-application in PHP.

While many people just quote less bandwidth usage and better maintainable HTML-Code as the big advantages of using pure CSS layouts, let me add another one: Extremely increased productivity for programmers bringing interactivity to the layout

It’s a real pleasure: Never was it so easy to just concentrate on the functionality. No layout-information creeping into the business logic because it’s the only way to get some stupid placeholder GIF into the layout. No more error-prone stitching together immense and complicated HTML-snippets. No more debugging what went wrong when building one of those complicated layout tables.

And of course: No more pulling out hears when having a look at the size of the generated HTML-Code

I’ve never been as productive in coding a web application than in this case where the HTML-code is clean and the design is where it belongs to: In the CSS (which I don’t have to touch (anymore – the whole thing happens to be written by myself – Richard isn’t that good in CSS yet))

If only all future projects would be CSS-only. It would make live so much easier…

Delete-Key in zsh

I’m a big fan of zsh. Besides it having an awful amount of features, it was this guide (called “User-friendly user guide”) that brought me up to speed on unix-shell matters back then.

So it’s only logical that my default shell is the one the guide is about ;-)

What annoyed me majorly was that in Gentoo Linux, the delete key did not work in zsh (unless of course you count outputing ~ instead of forward-deleting as “working”).

Finally I got around to fixing that.

Adding

bindkey    "^[[3~"          delete-char
bindkey    "^[3;5~"         delete-char

to your .zshrc enables your delete key on every thinkable keyboard. Finally!

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. ;-)

More programmers fonts

In an older post of Urban Mainfraime, I read about some fonts for programmers. Jonathan recommends Anonymous and Bitstream Vera Sans Mono.

While both fonts are certainly better than the omnipresent Courier, I still think, ProFont, which I’ve already written about is much better than te other two alternatvies.

ProFont is a Bitmap font, optimized for 8px size, which is incredibly small. Because every character is hand-painted, the font is still very readable desite it’s small size, so it’s great if you want to have much text on little space – als always when programming ;-)

Maybe it takes a litte getting-used-to, but every Monospaced font I’ve seen since I switched to ProFont in Putty, Thunderbird, Delphi, jEdit and all other applications, looks clunky and too large for my eyes. Try it!