Archive for the 'Tech' Category
Java Web Start’s silly Self Reference

Dear Reader,

Just coming from having to push a Java Application out to the clients machine via Java Web Start. Everything went pretty well, after signing all the Jar’s. This, so they could sneak outside the “security sandbox” that Java Web Start plugs around downloaded applications.

The (maybe) unusual thing in our setup was, that the jnlp file had to be rendered on the fly. So there was never going to be a “on-disk” version of the file during the whole request, response cycle.

So, following the old “monkey see/monkey do” rule, my generated file looked a bit like this one:

[...]
jnlp spec="1.0+"
codebase="http://192.168.0.1/"
xhref="myapp.jnlp" mce_href="myapp.jnlp" // ignore the mce...
[...]

When trying to run this generated “file” through a link in the browser, silly web start tried to locate the file “http://192.168.0.1/myapp.jnlp”… HELLO? YOU ARE THIS FILE! STOP COMPLAINING YOU CANNOT FIND YOURSELF!

A quick look in the Java Web Start Tutorial hinted me to try to omit the href argument in the jnlp tag. Apparently, it is not needed. It then worked the way as I expected it to. But really, what is it good for anyway?

In the “spec” mentioned above, it says about the href attribute:

“The href specifies the URL of the JNLP file itself.”

Oh, that’s cute :-)

Thank you.

Skype sitting on Port 80

Dear Reader,

Once again I went into the Skype Trap. Today, I decided to try out Elgg. Elgg is an open source version of a social network platform. The nice thing is, you can download it and host it on your own servers. This is particularly useful if you don’t want anybody else to mess with your network data. Some of my friends live in Russia and they told me, the KGB surveillance mentality of the state was still ongoing. Talking freely in a social network is crucial. However, in some countries, this would already mean committing a crime. And by all means, I just like open source software better.

But back to what I was saying about Skype. I downloaded the latest Apache Webserver and installed it on my machine. At the end of the installation process, it told me it could not bind to port 80. Have seen this before, I thought. Yeah, right, last time it took me hours to finally accept, that the Apache installation was probably intact and that there would have to be some other problem. I then did a portscan and what did I find sitting on my port 80? – Skype! That cheeky little bastard !

skype2.gif skype1.gif skype2.gif

I had to uncheck the setting “Use port 80 and 443 as alternatives for incoming connections” in the Connection Tab. Great Philosophy: “Let’s just hijack the http and the https port, then in most of the cases, our software should work”.

Anyway, now I can go back to Elgg and try to make PHP and Apache talk together. This used to be a problem a few years ago. I think this was the reason for the XAMPP Project.

Let me quote them: “Many people know from their own experience that it’s not easy to install an Apache web server and it gets harder if you want to add MySQL, PHP and Perl. XAMPP is an easy to install Apache distribution containing MySQL, PHP and Perl. XAMPP is really very easy to install and to use – just download, extract and start.”

Anyway, I will give it a go “by hand” now. Wish me luck :-)

Thank you.

Fixed intransparent Picture for the Diva: Microsoft Internet Explorer

Dear Reader,

I finally fixed the intransparent picture in the header of this blog. The picture of the “yellow marker”:

marker.jpg

This is a PNG. Only in Internet Explorer it looked like this. I changed it with Photoshop to a GIF:

marker.gif

Now the header looks the same, and good, everywhere.

I did not notice earlier, because I NEVER use IE, unless Microsoft forces me to, through some windows update process, that only IE can handle.

I suggest everybody to add JavaScript to all their pages with this functionality:

If IE is detected, the user is forwarded to some other page, telling it to download Opera, Firefox, Safari or whatever other Browser that conforms with the standards. Thus not allowing any browsing with Internet Explorer at all.

The next step is to add this functionality a step further up, into the webserver software. Then into the routers.

Think about it, otherwise we never get out of the browser hell :-)

Thank you.

Bug Fix for “Contributing to Eclipse”

Dear Reader,

It has been a long time since my last post. I was very busy. Sorry for that.

Here comes another technical article on a book: “Contributing to Eclipse: Principles, Patterns, and Plug-Ins”, published by Addison-Wesley. It is written by Erich Gamma (co-author of the “OO-Bible” Design Patterns, technical director of the IBM Research lab Zurich and developer of the Eclipse Platform) and Kent Beck (creator of Extreme Programming).

contributing_eclipse_2.jpg contributing_eclipse_3.gif contributing_eclipse_1.jpg

The book is obviously on how to extend the Eclipse platform with your own “contributions”, aka Plug-Ins. The book is very interesting as it comes from two authors who “come from the inside” of Eclipse. Thus they reveal all kinds of background information that a normal author could easily have missed.

However the book was written in 2003 and builds on a previous Eclipse release, prior version 3.0. When reading through the examples in the book, I eventually got to chapter 7, where Erich and Kent are developing the JUnit Plug-In. I think the one nowadays shipped with the standard Eclipse distribution.

There, page 62, they say: “For now, we can’t imagine how your understanding of Eclipse would be helped by seeing the details of starting a new virtual machine and communicating with it via sockets. See Appendix A for the details.”

Here they talk about how to properly run your test cases. That is “outside” the Eclipse JVM instance. To easily get above that bump, I downloaded their source code from here. In this archive, there are two classes that are senseless for the reader to implement himself, that is TestRunner and SocketTestRunner. So I imported them into my own Eclipse Project (Note: Circle_1!).

First I changed the obvious stuff, like in TestRunner, line 77 and 130:

JUnitPlugin plugin = JUnitPlugin.getPlugin();

to match my slightly different class names:

MyJUnitPlugin plugin = MyJUnitPlugin.getPlugin();

However, when I started my Plug-In Project (“run as Eclipse Application”) and selected an object type in a dummy project (“ADemoProject”) and then tried to start my own JUnit implementation (“Run MyTest”), nothing happened.

The Eclipse View “Error Log” gave the hint that there was a NullPointerException in TestRunner, line 78:

java.lang.NullPointerException
at org.eclipse.core.runtime.Plugin.getDescriptor(Plugin.java:268)
at org.theyellowmarker.gamma.TestRunner.computeClasspath(TestRunner.java:78)

But then looking at my Eclipse source of TestRunner, the deprecation warnings gave me the hint to do a bit of research, have a look at the screenshot below:

contributing_eclipse_4.jpg

Obviously, plugin.getDescriptor() was the reason for the NullPointerException. Used to the standard Java JDK philosophy, where deprecated methods usually still do their job somehow, it took my a bit of Eclipse API reading to figure out how to recode the whole section. Again, see the screenshot below:

contributing_eclipse_5.jpg

To get the plug-in path for our plug-in, we have to get “the Bundle” from the static method of org.eclipse.core.runtime.Platform:

// has to be unique id of activation plugin.
Bundle bundle = Platform.getBundle("org.theyellowmarker.MyJUnit");

Note that the string "org.theyellowmarker.MyJUnit" is the unique id of my plug-in in the MANIFEST.MF file. You have to change it according to your setup. The url of the project is then found by the subsequent lines:

URL url = FileLocator.find(bundle, new Path("/"), null);
classPath[0] = FileLocator.toFileURL(new URL(url, "bin")).getFile();
classPath[1] = FileLocator.toFileURL(new URL(url, "junit.jar")).getFile();

Note: I am not sure about the last line here. Could be useless.

Next, also replace the deprecated SocketUtil.findUnusedLocalPort on line 61 with:

port = SocketUtil.findFreePort();

Last, the SocketTestRunner class is given to the external JVM by name, so you have to change the first line of the class, where MAIN_CLASS is defined, to match your own package structure:

static final String MAIN_CLASS = "org.eclipse.contribution.junit.SocketTestRunner";

to:

static final String MAIN_CLASS = "org.theyellowmarker.gamma.SocketTestRunner";

Now everything works again, as expected. You can download my plug-project here: myjunit.zip

and the dummy project containing the test cases here: ademoproject.zip

Make sure, when running the plug-in “in action” (that is in the second Eclipse workbench) to right click on the ASillyClassTest symbol with the green class dot on its left, otherwise, you don’t get the “Run My Test” menu entry in the context menu:

contributing_eclipse_6.jpg

On test will fail, one will succeed. The console output on the first Eclipse workbench should be something like this:

2 test[s] started...
Test org.theyellowmarker.test.ASillyClassTest->testDemoTrue() started.
Test org.theyellowmarker.test.ASillyClassTest->testDemoFalse() started.
Test org.theyellowmarker.test.ASillyClassTest->testDemoFalse() failed.
junit.framework.AssertionFailedError: null
at junit.framework.Assert.fail(Assert.java:47)
at junit.framework.Assert.assertTrue(Assert.java:20)
at junit.framework.Assert.assertFalse(Assert.java:34)
at junit.framework.Assert.assertFalse(Assert.java:41)
at org.theyellowmarker.test.ASillyClassTest.testDemoFalse(ASillyClassTest.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.theyellowmarker.gamma.SocketTestRunner.runTests(SocketTestRunner.java:39)
at org.theyellowmarker.gamma.SocketTestRunner.main(SocketTestRunner.java:26)

All tests finished

As I move forward in the Book, I will publish eventual updates on this topic.

Thank you.

P.S: Here is the full set of files after “Circle 1″: first-circle.zip

The “best password ever” is cracked!

Dear Reader,

A few years ago, when I started to work at a new company, I asked for a certain password I needed to access some systems I had to work with. One of my new colleagues told me it was "enirstuda4711" and that it apparently was the best password ever! The reason why it was so incredibly good was that the containing letters were statistically distributed in some kind of perfect way.

“So we have a very hard to crack password here”, I said, “why not put in online and suggest for everyone to use it?” :-)

Yesterday I decided to setup a user on my windows machine and see if I could crack this password. I called the user Jabberwocky. From my laptop, my second computer in the local network, I first looked up the standard gatway to find out which subnet I was using:

ipconfig

password1.gif

My subnet mask is 192.168.1.*, as can be seen on the picture. The next step is to find out what machines live on the internal network. I ran the NMap port scanner with the ping scan option to search all IP’s between 192.168.1.1 and 192.168.1.255:

nmap -sP 192.168.1.1-255

password2.gif

So there are three machines on my network: one on port 1, this is my router and one on port 101, the laptop I was working from and a third on port 102, this is the machine I needed to grab the password file from.

On linux machines there is the passwd file in the /etc directory. It contains the information about all the users that have an account on the machine. Usually it also contains the hashed passwords. These password hashes are computed out of the plain text passwords by a one way function. Each time a user logs in, the provided password is put through the hash function and the result is then compared to the stored hash. If they match, the original passwords must match as well.

The hashed password could look like this:

02196B74B249B1C7B3CA94183F9EEE53

On linux systems, the password hashes are sometimes not stored in the passwd file itself, but in a file called shadow. This file has limited reading permissions, 640 instead of 644 which is the permission on the passwd file.

On Windows NT, 2000 and XP systems, these hashes are stored in the Registry and/or the SAM file. The SAM file is located under C:\WINDOWS\system32\config. If rdisk has ever been run, an old version will also be located under C:\WINDOWS\repair. The problem is, that you cannot access the SAM file on a running system. Some process has it under strict control and it would not let you access it.

So how can you access the hashes from Windows? There is no neat way.

  • Boot the system with Knoppix and just copy paste the SAM file away. This however requires you to have physical access to the machine. Quite often not an option.
  • Run PwDump. This handy little programm does a DLL injection and copies the hashes to a file. The first problem is, it will not suceed if a program like ProcessGuard is installed on the system. Second, and more of a problem, you have to have administrators access to the machine you want to get the SAM file of.
  • Sniff the hashes from the network as they fly by. Probably the best choice.

Because all these methods are a bit akward, the normal hacker would probably try to find out more about the system. For example by running another NMap command, like this one:

nmap -sS -sV 192.168.1.102

password3.gif

This command does a port scan on the specified machine. We can see that some ports are open along with what programs are running on those ports and a “best guess” version information. From this information, the attacker can try to find vulnerabilities of a certain program that is connected to a port and eventually get root access to the system and retrieve the password hashes. This however is the “art” that makes a good hacker and I am not one of them.

Therefore I used PwDump to log in to the machine and get the SAM file out:

PwDump.exe 192.168.1.102 encryptedpasswords.txt raoul

password4.gif

This did the trick and, after removing accounts of no interest, the retrieved SAM file looked like this:

Jabberwocky:1011:02196B74B249B1C7B3CA94183F9EEE53:
1BE5C84F89A07C0F6BF47E37127ABDDC:::

No I am finally ready to decrypt the “best password ever” with John the Ripper or L0phtcrack (L0phtcrack has been bought from @stake by Symantec and it looks as if the product is not anymore available on the usual channels. Another way to do “security by obscurity“).

John the Ripper is a dictionary tool, trying out different words and their combination whereas L0phtcrack does a brute force attack, basically trying out every possiblity.

Both cracking tools eventually cracked the password enirstuda4711. However it took a few hours. Here are the results:

John:

password5.gif

L0phtcrack:

password6.gif

(Note: Both programs were actually run from the local machine, not the laptop, for performance reasons)

The only way to prevent L0phtcrack to eventually, in the far future, crack your super-duper password, is by using non-printable characters (as part of your password). They can be entered by using such non-printable ASCII characters on the numeric keypad. NUMLOCK has to be on and then you hit ALT-a-b-c. Where a, b and c each stand for a digit from the ASCII table, as in ALT-2-5-5.

So this is it. And by the way, the “best password ever”, enirstuda4711, is not in use anymore :-)

Thank you.

“Ask Desktop Search” trouble

Dear Reader,

After some sucessful searching the web with the Ask Search Engine I thought about trying the “Ask Desktop Search” Software. I needed to index my pdfs, so I could do a full text search on them.

Apparently, this little program does not send my data out onto the web, like googles desktop search does. A big plus. Also, you can configure which directories should be indexed. So far, so good.

The whole experiment was a big mess:

The first annoying thing was, that when I downloaded it through Firefox and started it directly out of the firefox download manager, the installation programm complained I had to close all running instances of firefox.

The installation programm obviously wants to mess with my Firefox browser. Something I did not want. I want to index my local filesystem. That’s all.

askdesktop2.jpg

When I actually gave in and closed my firefox instances, it still would not proceed with the installation. Well, of course not, firefox could not be properly closed, because the setup process itself was spawned by firefox. So I restarted the installer. This time directly from the download directory.

Again no sucess, same problem. When looking at the processes running, there was still an instance of firefox.exe alive. The windows were gone however. Obviously firefox was not terminated even after its child process, the installer was dead. The only way is to manually kill the firefox.exe process from the task manager. A killer feature! (The same happens, when you try to uninstall :-))

askdesktop1.jpg

So i had finally installed my little program.

I did not want to index my whole disk, just the pdfs. The program did not care much and started indexing happily. Everything! After doing some changes on the settings to restrict this behaviour, the indexing paused. There was neither a way to wipe the already started index nor to unpause indexing. By restarting my machine, indexing seemed to work.

Two days later, when I sat at my machine, all programs were crying and bleeding: No more disk space on drive C! I ran TreeSize to find out who caused the trouble. Guess what happend? Ask Desktop Search build up its index in C:\Documents and Settings\remote\Application Data\AskDS. Over 2 Gigabytes of space were already used up by it and there were 0 bytes left on the disk.

askdesktop3.jpg

Great! The developers assumed I wanted their program to index onto drive C. Furthermore they assumed, there is indefinite space to use up. Beginners usually don’t consider these real world constraints.

Before sending the whole thing to nirvana, I did some test searches. It found file names propertly. Full text, in-document search did not work!

This product has been realased a bit too prematurely. My advice: do not use it.

I will right now download the google desktop search program and try to block its “phone back home” behaviour with the firewall…

Google desktop: I could not even finish the install without internet access

askdesktop4.jpg

It stayed hanging like on the picture… I need the “spotlight” application that the mac users have… where is it?

Thank you.

The man who almost owed me the 243 Million Lottery Jackpot

Dear Reader,

Here in Europe, we have the weekly EuroMillions Lottery. As of today, 10th of November 2006, there were 243 Million Euros to win (That is USD 310’588’020, aka 310 Mio $). Of course everybody tried thier luck…

My lucky numbers for today were these:

14 22 35 38 44 - 3 7
01 13 21 37 40 - 7 8
21 25 36 47 50 - 2 3
18 23 43 46 47 - 4 8
03 21 25 43 50 - 5 7

lotto4.jpg

My little EuroMillion Random Number Suggestion Program (see below) got these numbers for me and I was very exited. I filled out the lottery ticket already on wednesday and was eager to get my ticket down to the lottery counter and check it in…

However, things went terribly wrong, as I relied on this man:

lotto2.jpg

This man was trying to get lucky too and also wanted to play the EuroMillion Lottery. But I should have been warned. That man is not quite a Michael Schumacher, nor does he own a Ferrari. In fact he is an “EL’ie”, a learning driver! He has one of these “L”‘s on the back of his car and is only allowed to drive with experienced drivers in his passengers seat:

lotto6.jpglotto5.jpglotto3.jpg

We drove up to the lottery counter and tried to find a parking lot. Because my unexperienced driver had not yet learned to drive backwards, we had to circle around a spot, like a roundabout, that had a traffic light in it.

My driving apprentice managed to stop in from of the traffic light in such a way, that the metal detection, built into the street never detected anybody that was waiting for a green light… And because driving backwards was out of question for the reason just mentioned, we had to wait for some other car to stop behind us and eventually make the traffic light realize that we in fact needed to get out of that situation immediately.

It was three minutes after half past six when we rushed up to the lottery counter to try our luck. – Three minutes too late – Three minutes away of my 243 million Euros!

lotto7.jpg

Good bye my many Euros…

The guy who almost owed me the lottery jackpot did not get beaten up by me, just in case you think that that is why he looks so smashed up on the picture above. No, that happend three years ago, when he had an accident on his snakeboard. (Where he is professional at, I have to say here, just to stay fair).

lotto8.jpg

But how high was the risk of my “only-forward-gears-please” driver to actually “owe” me my 243 million Euros really? – Let’s have a look:

The folks among you who still remember their combinatorics lessons will quickly find out, that chances to win are terribly low.

For those who skived school at the time, here is how we can figure it out:

In the EuroMillions Lottery you have to choose 5 out of 50 plus 2 out of 9, called numbers and stars. For the first cross we put on the lottery ticket, we can choose out of 50 numbers. For the second cross, only 49 possible free numbers are left. This goes on down to the last cross, where 46 unchosen numbers are left to choose from. Same story for the stars: here we choose out of 9 on the first draw and 8 out of the second.

lottery10.gif lotto12.jpglotto9.jpg

Multiplying all those possibibilities gives us the total possible combinations of a fully defined lottery stake:

50 * 49 * 48 * 47 * 46 * 9 * 8 = 18'306'086'400

Now this is when the order of the draws matters, when 11 31 22 46 03 is different from 03 22 11 46 31 and so on. So there are some pairs that don’t have the same order, but the same numbers. How many?

1 * 2 * 3 * 4 * 5 = 120

for the first 5 numbers, and

1 * 2 = 2

for the stars and therefore 240 for all. By dividing we get

18'306'086'400 / 240 = 76'275'360

This number is represents all possible outcomes of the EuroMillion Lottery. Of course there is only one right answer. This gives the probability:

1 / 76'275'360

In a different notation this is equal to

1.311 * 10^(-8)

or

0.0000001311

or

NOTHING

We now know: the one and only correct answer tonight to win the lottery jackpot was: 14 21 27 30 36 - 2 3. But again, nobody won!

Well of course not, the probability to win this insane game is 0.0000001311 as we just found out. So why bother in the first place? How can anybody semi-intelligent throw his or her money away in such a game?

lottery13.gif lotto14.jpglottery11.gif

“Well – sometimes, somebody wins, right? So why not me?” you could argue…

Exactly! That’s just what my “almost debtor” and I thought as well. For professionals working with addicted people, this attitude is probably just about all it takes to be certain they are dealing with some serious cases… And in fact, if the lotteries jackpots were that high and were on every night, I truely think we would be bankrupt, stealing form ant Jenny, robbing kindergardeners and in jail by now…

lotto16.jpg lotto15.jpglotto17.jpg

Did I mention that in Germany, EuroMillions is illegal and the poor guys are not allowed to play in their country? Every German Hartz-IV receiver (that is almost everybody, cause you are better off that way than with actual work), who could somehow make it, took a trip into the coutries abroad where EuroMillions is allowed and spend all they had to play and hopefully win.

lotto1.jpglotto18.jpglotto19.jpg

More on german invasions and politics that give the wrong incentives in another blog…

Because filling out the lottery ticket is so difficult for standard human brains, I quickly wrote a little Java program to take the burden of me to choose “pseudo good” numbers.

When a human fills out the tickets, evenly distributed patterns emerge, very often prime numbers are chosen. Therefore, the more prime numbers a win contains, the more people will have to share it.

Even when an individual knows these facts and tries to do exactly the opposite or some “random” way, it still is almost impossible. – That is, when a possible win is involved…

Test question: Someone puts down the following numbers on a lottery ticket. Do you think he or she is insane?

01 02 03 04 05 - 01 02
06 07 08 09 10 - 03 04
11 12 13 14 15 - 05 06
16 17 18 19 20 - 07 09
21 22 23 24 25 - 01 02

…get the point? – It doesn’t matter. Anybody playing is insane… These numbers are just as probable as any other.

So here is my little program that has no brain of its own and will just give you random numbers. (Caution: If you are superstitious and believe in lucky numbers, this program is not for you. After the test question above, probably no one is in his heart).

package org.theyellowmarker;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;

/** from http://www.theyellowmarker.org - raoul */
public class EuroMillionGuesser {

private int[] computeLuckNumbers(final int howMany, final int max) {
if(howMany >= max || howMany < 0 || max < 0) {
throw new IllegalArgumentException("Get out of here, you jerk");
}
int[] numbers = new int[howMany];
for(int i = 0; i < howMany; i++) {
numbers[i] = getNextLuckyNumber(0, numbers, max);
}
inSituBBSort(numbers);
return numbers;
}

private int getNextLuckyNumber(final int offset, final int[] numbers, final int max) {
final int luckyNumber = new Random().nextInt(max) + 1;
for (int i = offset; i < numbers.length; i++) {
if(numbers[i] == luckyNumber) {
numbers[i] = getNextLuckyNumber(offset, numbers, max);
}
}
return luckyNumber;
}

private int[] inSituBBSort(int[] numbers) {
for (int i = numbers.length; --i >= 0;)
for (int j = 0; j < i; j++) {
if (numbers[j] > numbers[j+1]) {
int tmp = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = tmp;
}
}
return numbers;
}

private String results(int[] numbers) {
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < numbers.length; i++) {
if(numbers[i] < 10) {
sb.append("0" + numbers[i] + " ");
} else {
sb.append(numbers[i] + " ");
}
}
return sb.toString();
}

public static void main(String[] args) throws IOException {
EuroMillionGuesser emg = new EuroMillionGuesser();
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String str = "";
System.out.print("hit enter for next draw..., control-c for quitting");
while (str != null) {
str = in.readLine();
int[] mainNumbers = emg.computeLuckNumbers(5, 50);
int[] starNumbers = emg.computeLuckNumbers(2, 9);
System.out.print("You win! - Well, if and only if (aka iff): ");
System.out.print(emg.results(mainNumbers));
System.out.print("/ ");
System.out.print(emg.results(starNumbers));
}
}
}

Download: euromillionguesser.zip
You can use this little code snipped for other lotteries with different number schemes as well. Just change the arguments in the computeLuckyNumbers methods inside the main method and recompile. To run it, unzip the file and hit the start.bat file. Hitting enter will give you a new draw each time:

lotto211.jpg

If you win with numbers from this little program, let me know and send some money over.

Nobody won this week. - Next week, 288 Million Euro will be in the jackpot. I will hand in my lottery ticket earlier this time. When blog entries about luxury goods and clever investment strategies start to appear here, you will know who has won it :-).

Thank you.

“Ask” Search Engine

Dear Reader,

A friend of mine told my yesterday about the search engine Ask. I remembered today when starting to get my hands dirty with the Apache Axis Webservice Framework. I was reading through the User Guide and tried to run their TestClient application. However the URL for the Echo Webservice did not seem to be working. I got a connection error. So I tried googling the URL http://ws.apache.org:5049/axis/services/echo.

Zero Results!

I tried Goolge Code Search as well, – with the same result. That was when I remembered about the conversation yesterday about Ask.

ask3.gifask1.gifask2.gif

Ask gave me three result pages. I found out that there is an alternative link: http://nagoya.apache.org:5049/axis/services/echo. However, this one also doesn’t work. But at least I found out, other people had the same problem before.

I don’t know yet how well Ask performs on non technical searches. For technical searches however, it looks like a promising alternative.

Thank you.

RSS Client Tutorial

Dear Reader,

Quite a number of (not-so-tech) friends of mine asked me to put a quick RSS Client Tutorial with a few examples on this blog. So I am happy to do so.

Note: This article is targeted at end users who whish to subscribe to RSS feeds, not users who want to learn how to produce RSS themselves. Those should maybe check out pages like this one.

So, let’s start: RSS is an abbreviation for whatever. It doesn’t matter. What you have to understand is what it is and how to use it. If you are interested in the content of a particular website, you usally have to go there from time to time in order to see if any updates happened. When the number of those pages rises, you would have to remember all those pages. “That’s just too much for the brain”, some people thought.

rss-symbol2.jpg rss_symbol.gif

So they went out and defined what is called RSS. It is a certain “XML grammar”, nothing more. But the way it is used helps managing all the webpage updates of interest, without any pain on the brain. Think of RSS like a newspaper subscription. Without your interference, the newspaper just keeps coming and coming. As long as you pay the invoice that is.

Some webpages decide to offer RSS subscriptions to their visitors. All that they have to do for it, is to publish a link where some nerdy xml file lives. Whenever a change is done to their webpage, that file changes a bit too. Have a look at the RSS file for this page:

http://www.theyellowmarker.org/blog/feed/

Pretty, isn’t it? Now of course nobody wants to read this. After all it is just another webpage that people would have to check from time to time. So this alone doesn’t solve the problem. What is needed on the other hand is a client program. A program that is installed on the end users computer. This program then does periodic checks of that page and notices any changes. (The reason the format is so ugly for humans is the exact reason why machines find it easy to read).

There are many programs out there. Standalone programs like RssReader, online readers, such as the Google-Reader that comes along with your google account and such readers that are integrated into the programs you use everyday, like email clients and browsers.

For example, if Firefox detects an RSS link on a page, it will display the “orange RSS Icon” on the right side of the adress, like in the picture below:

rss1.png


By clicking that symbol (the upper one), you add a “dynamic bookmark” to your bookmarks. It will then appear like the symbol in the lower circle. By clicking on it, you will always see the latest topics, like on the picture below:

rss2.png

So whenever the editors of the page put a new topic online, your list in your browser will grow accordingly.

I personaly prefer to use my mail client, which happens to be Thunderbird. I think this is most convinient, because the “news” pop in as if they were new mail. Let me show you how to setup “RSS Accounts” in Thunderbird.

For example, to subscribe to new entries (or comments) on this page, you would have to find out where the RSS-XML file lives on this website. You do this by “finding” some indication of RSS, in this case on the top-right side:

rss3.png

By clicking on “Entries”, you will get the URL, the adress of the RSS-XML: http://www.theyellowmarker.org/blog/feed/ This you have to copy, the adress not the page content, and tell it Thunderbird like this: Go to the menu Tools -> Account Settings… Then say “Add Account…”. Choose “RSS News & Blogs”

rss4.png

Then click “next” a few times. You will get a new top level folder on the right side panel inside thunderbird that will look a little bit like this:

rss5.png

Right click “News & Blogs” or whatever you chose to call it and select “Manage Subscriptions”.

rss6.png

Choose “Add”.

rss7.png

And paste the RSS-XML URL in that you found previously. – That’s it. From now on, whenever the authors of your chosen RSS supported webpage change their content, you will almost instantly notice it…

So next time I startup Thunderbird, I will get this message

rss8.png

[to recurse is fun :-)]

So you understand RSS now. To summarize, it is a webpage that machines can easily read. The machines who do the reading work like email programms that check that webpage form time to time and let you know if change happened. That’s all.

Also notice that there is an extension to “frozen” RSS, called Atom (RFC 4287)

Thank you.

EDV

Dear Reader,

Ok. EDV is out. It is the german short for “Elektronische Daten Verarbeitung”. Thats like “Electronic Data Processing” in English. Almost as old school as “the EVA principle”. First time I heard it was once when I took a walk with my dad, back in the 80ies. He told me about DOS, Norton Commander, POKE and REM…

Old School Computingmainframe3.jpgmainframe2.jpg

Please don’t try to find a job with these abbreviations. It won’t work.
Just saw it on austrian TV. The guy, age 52, does EDV… no fucking way!!!

P.S: Indian friends, please don’t worry, you were well secured by the cold war at the time. So please don’t bother to read/learn about it. It is VERY MUCH OKAY, if you don’t know about the C64 and the pre-win3.11. Not to worry…

P.P.S: The chat I watched was on christian “free” (aka mostly exremist) chruches who’s members don’t want to make around before the lord doesn’t agree. More on this topic later.

P.P.P.S: “EVA” is even better than EDV, funwise: It means “Eingabe-Verarbeitung-Ausgabe”, in English: “Input-Processing-Output”. Imagine, that is just about the most old school machine one can imagine. A very easy view that doesn’t help your understanding any more. Monkeys trying to use typewriters…

Thank you.