Category Archives: Computers and Internet

Posts on computer science and the web, rants about OS:es, Window Managers, Platforms for almost publishing content on the web, and the like.

Naivized by Linux

I’m all for Linux. Really. I love it, even though it’s from time to time a hate-love. However, I just realized one thing Linux has done to me that isn’t so good when you are forced to work and live in Windowsland.

I’ve become totally naive when it comes to certain aspects of the Windows world.

A couple of weeks ago I was looking for a program to help me keep my local hard drive synchronized (or in fact, backed up) to the network drive. A few factors have made this an issue for me, bad network performance but also the ability to just pick up your laptop and not worry about network connection to mention a few.

Anyway, I browsed around, moderately annoyed trying to avoid all the $oftware in favor for something simple that could do the job but wouldn’t cost money… just like home in Linuxland, right?

So I came a cross one really promising piece of software (no need to mention which since they’re not lone sinners :o), downloaded, tried it out and thought… hey this works! It had good integration with the desktop and a clean and simple UI and simple yet powerful features.

Great. Then today I spoke with a colleague who had been on the same mission and told him this was good software. He was rather surprised, since he had long ago figured out the software was not at all free (even though it’s listed as free software on several places, and they say it is free). The surprise will come after 30 days when the software stops working, for all intents and purposes unless you pay them money.

There’s nothing bad with companies asking for money. After all, I ask for money for working for a company, so the company should ask for money for selling my work, right? However, the serious problem is the lying part of the deal, where software companies say they are delivering free software where in fact they aren’t. In my case it ended up wasting several hours setting up the sync for real and would have wasted even more time had I been caught unaware when the 30 day trial was up. This, the lying seems, to me, to be a direct symptom of the software development model used…

There are no such thing as a free lunch, not even in the Linux world, but there you pay with time, and your apps aren’t programmed to stop work after 30 days. They might, because you’ve downloaded beta software, but that’s because some one did not program, or program right, not because someone did.

Anyway, I was baffled, totally unprepared and realized Linux naivized me! Wooh!

Hacking Windows Remote Connection (MSTSC.EXE)

WARNING: The below tip will kick out one of the already logged in users. This behavior may have been added after I came up with this advice, or I’ve always been the evil person on the block 😀

Ever been turned down by a Windows machine over Remote Desktop because it already had too many connections?

Even though there are no way to connect using the standard remote desktop program you can still “hack” a connection. Sure the limitation exists, probably to sell more licenses or to protect the host server from getting too many connections, but to get past it you do the following:

mstsc /v:myhost.com /F /console

Where myhost.com is the name or ipnumber of the server you are trying to remote to. /F means a full screen connection, /console means to connect to the “console session of the server” (whatever that means, it anyhow results in you getting in although the server would otherwise refuse you).

The full format of the MSTSC command call are:

MSTSC [<Connection File>] [/v:<server[:port]>] [/console] [/f[ullscreen]]
[/w:<width> /h:<height>]

<Connection File> refers to an rdp file to be used with the connection (good if you need to make local drivers or other resources available or set up the connection otherwise).

You can also call MSTSC with the “/edit” switch if you wish to edit a connection file:

MSTSC /edit <Connection File>

Finally you may also migrate files by using the “/migrate” switch (not 100% sure how this is done though since I don’t have an older version file to test with).

Office 2007: Microsoft shoots itself in the foot?

I have the somewhat dubious pleasure of working at a place where the migration from Office 2003 to 2007 is halfway done. Now, usually this should be no problem, but a couple of factors have cooperated to make it one.

Office 2007 uses a new (and improved?) format (they added an x to all their file name extensions, read more about them here). This could be all good and well if it had not been for the fact that new versions of Office now uses these formats per default. Okay, a user a bit savvy might sooner or later notice the “x” at the end of all filenames… but only the users that have disabled the setting in Windows to hide these formats…

This leaves us with senders, running Office 2007, unable to tell if they saved the file in docx or doc format, and the recipients with Office 2003, unable to read these files. Even though there is an update, a lot of users aren’t comfortable with doing that… heck, I’m scared of doing unneccessary stuff to my wobbly M$ installation!

The end result becomes pretty predictable: chaos, disillusioned users, and … a great day to start talking about OpenOffice.org? (even though it does not yet support the Office 2007 format).

Open source v.s. Closed source

Working with closed source products (Microsoft Visual Studio, .NET, ASP.NET, SQL Server, and Oracle) while at the same time experimenting with open source products (Eclipse, Java, MySql, and Spring) I am constantly baffled by the persistence of closed source developers and business people in their handling of second grade support, bad information, and lacking products.

Continue reading Open source v.s. Closed source

Badblocks

It took me some time to find out the equivalent of Window’s checkdisk/scandisk/chkdisk on Linux, but trust me, there are several.

For starters I am going to take a look at badblocks, a command that as the name implies, looks for bad blocks.

The basic format of badblocks are:

badblocks [options] device

If you have a fresh drive with no data or data that can be deleted on it you can do:

badblocks -s -w /dev/sdb

Note however, the -w command will erase all existing data on the drive so do not use it for drives with existing file systems on them. You cannot use -w on a mounted drive, unmount it first. The -s flag makes the command show a progress bar. This could come in handy when you are testing larger drives since even the fastest systems will take at least an hour to test an average sized drive (my 400GB took about 2 hours on a SATAII system).

If you want to test the drive without deleting data you can use the -n switch which will use non-destructive write-read mode, however, this switch can, for obvious reasons, not be combined with the -w switch.

badblocks -s -n /dev/sdb

Links:

The mystery of the magic file (or how i invented the .rte and .rtg file formats)

I’m just back from a head spinning experience of extreme Windowsism.  A file that refused to be renamed, or deleted… until ten minutes later…

What happened was that I wanted to rename a file.  Like I usually do, I clicked the file, then pressed F2, got the “editable” view of the file name and started typing.

Nothing happened.

I clicked around, trying to see if the computer was just slow or something like that.  Well… the file explorer did not respond at all…

It was frozen.  So I waited for it to unfreeze.  Which it didn’t.  It apparently had crashed.

I force-quitted.  Restarted and retried.  After all, perhaps it was just a fluke?  Right?

Nope.  Same exact problem.

I scratched my head, thought for a bit and rejected a number of alternative ways to go.  I guessed it was time for the daily reboot… again today.  And rebooted the system.

Once back in the catalogue (five minutes later) I found the same problem persisted.  No rename, no file explorer, nothing but kill the program.

I was able to “solve” the problem however, by copying the file.  Once I had it was in fact possible to rename the copy.  All I had to do now was to remove the old file and, although kind of axy (as in trying to carve an inch high wooden statuette with an axe), the problem would be solved.

The file did not want to be deleted.  However, the file explorer did not freeze this time so chalk one up for windows?  Or not.  Shutting down the file explorer and restarting it did not help either.  It was time to harvest the vast experience of the firm.

I asked around in the office landscape trying to find someone that could help, and I got a number of helpful advice like “have you restarted the file explorer?” or “have you rebooted the machine?”  All of which was rather not what I hadn’t already tried.

Finally someone suggested: “put two files in the same folder where the problematic file is placed, name them so they appear just above and just below the file with the problem, put something like ‘erase me’ at the end of them, wait a week and delete the file then.”

After having hyperventilated for a while to get the whole concept into my head and make it stick long enough to do what the guy had suggested I went ahead.

My magic file was named something like “My document 2.rtf” so after some experimenting with names that would place the file exactly where I wanted them I came up with:

My document 2.rte.delete.me.txt
My document 2.rtf
My document 2.rtg.delete.me.txt

Now for the mind blowing finale.

Once I had the files in place my folder looked like:

My document 2.rte.delete.me.txt
My document 2.rtg.delete.me.txt

The magic file had disappeared!  Finally deleted!!  Only about ten minutes after the button was pressed!!!

That was when I noticed the dialogue boxes saying “The file cannot be renamed, it has disappeared.”  They were, in true windows style hidden under the file explorer window…

Aha, was my first thought, problem solved…  Then I felt a chill going down my spine.  Didn’t I try to rename before I deleted?  Or did I try to delete first and rename later?

No! my mind screamed.  I had a file, whose content was important but whose name was wrong.  So deleting before renaming would be stupid.  And renaming after I’d copied the file and renamed the copy would be equally stupid (not to mention impossible… there was already a file with that name…)

Somehow windows had confused the order of the operations?!  BRRRRR!!!

You might think, hey he was working with a networked drive and the net was having some kind of problem or the order of the packages got confused.  It’s a good idea, it could really happen, even though I think the Samba protocol (or whatever windows have chosen to call it) should be able to handle packages coming in haphazardly without getting confused like this, and the most probable result of Samba not managing that should be some kind of failure, even total failure demanding the drive to be remounted (or a blue screen or whatever XP uses when the OS-programmers run out of money, time or happiness).

Enough about networked drives… the drive in question was local!  No network, no delays, not even cables (USB/FIREWIRE/eSATA or what have you)… unless you count the system bus.  Does windows use TCP/IP on the system bus?

Well… thank God I have my important files on another OS altogether!  Not to mention on RAID and USB backup…

Computers are scary… Windows computers are terrifying!

Iterating a list, and deleting from it, Java vs .NET

Or how I came to realize I could live a life time without .NET and be just as happy.

I’m just fresh from having tried to iterate a list… and delete items from it while iterating.  In .NET with C#.

It turns out a statement like:

void deleteFromList(IList<X> list) {
     foreach (X x in list) {
        if (x.DeleteMe) {
            list.Remove(x);
        }
    }
}

Will throw an InvalidOperationException stating you cannot perform a foreach and delete at the same time.  This is actually not that big of a surprise, or it shouldn’t be…  the same happens in Java if you delete and iterate at the same time.

This is how I would have done this in Java:

void deleteFromList(List<X> list) {
     Iterator<X> itr = list.iterator();
     while (itr.hasNext()) {
	X x = itr.next();
        if (x.DeleteMe) {
            itr.remove();
        }
    }
}

It’s simple, clean and it does not throw exceptions. If you believe the code may be run asynchronously, slap on a “synchronized” and you’re home safe.

So, how to do this with .NET?  Well, you can’t use Enumerators (which are the .NET “equivalent” of iterators), they don’t have a remove method.  Further worse, if you are unlucky enough to run version 1.1 your only option seems to be some unholy concoction like:

void deleteFromList(IList<X> list) {
    IList<X> toBeDeleted = new List<X>();

    foreach (X x in list) {
        if (x.DeleteMe) {
            toBeDeleted.Add(x);
        }
    }

    foreach (X x in toBeDeleted) {
        list.Remove(x);
    }
}

Don’t even start a conversation on synchronization with this mixup.  Anyway, those who are “lucky” enough to code .NET 2.0 can do something like:

myList.RemoveAll(delegate(X x) { return x.DeleteMe; });

Now, if you’d like to base the “DeleteMe” calculation on some external paramter like input to the deleteFromList method or if you’d like to do more than just delete x you’ll have to experiment, it’s probably possible… with a solution like the double lists above perhaps?

Regardless.  Someone said it was old news to be a Java programmer, I can only guess because of the lower hour wastage when you program Java systems, which in turn means lower bills to the clients and finally lower wages to the programmers.

It costs to be on top…

Moblock traffic blocker

Moblock (moblock-deb) is a so called traffic blocker. It prevents connections from certain IP numbers (defined in block lists) to gain access to your computer. The whole purpose is that the blocked IP numbers usually belongs to this or that organization that wishes to find out more about your Internet habits and other information they have no reason to get their noses into.

Moblock has a big brother called Peerguardian by Phoenixlabs but development on this program seems to have been discontinued, and unfortunately at a stage where the program doesn’t work (at least for me it doesn’t). I am also sure there are some Windows variants of an IP-blocker (I’m guessing Bluetack is the right place to go).

Installing Moblock on Ubuntu turns out to be a very simple affair. Mainly do two things: Add moblock’s repository to your repository list, and run an apt-get command. (Here’s an even better instruction for installing Moblock on Ubuntu).

The installation takes care of setting up cron-jobs to update your block lists every day, installs moblock as a service started every time the machine is started, and makes the first download, after which the program (or in fact, demon) is started and you are safe.

The above link is a very good instruction on installing moblock, and it even have instructions on how to perform some simple troubleshooting.

If you run linux I suggest you take a look at moblock’s home page, or you can check out it’s project page on sourceforge.