When the Java programming language first became publicised, it was heralded as
the dawn of a new age of writing cross-platform programs. “Write once, run
everywhere” they said. Now, 16 years after 1996, which was roughly when the
Java hype started, I’d like to check if it delivered on this promise, by
seeing if one can easily write a cross-platform GUI (= Graphical User-Interace)
application using it. What I’m looking for is a Java GUI library that:
1. Compiles. 2. Is cross-platform. 3. Does not suck.
Teaser: I was not able to find one.

The standard Java
SWING toolkitis out-of-the-question due to its weird look and feel and crappy behaviour
everywhere. Joel on Software has this to say about SWING:

If you still think that something as small as how long you hold down the Alt
key when you activate a menu command doesn't matter, well, your software is
going to make people unhappy. These tiny inconsistencies are what makes Swing
applications so unbearably annoying to use, and in my opinion it's why there
are virtually no commercially successful Java GUI applications.

The Eclipse people implemented something called
SWT, but
according to the wikipedia, it has several limitations, and require writing
a lot of platform-dependent code.

Next are the Qt bindings to Java -
Qt Jambi. These require
customising the build.properties (whereas the error and documentation
says one should edit the buildpath.properties file), and after
that fails compiling with this error:

Next I looked into java-gnome, but apparently it does not work on Windows, so
it's not cross-platform.

And the Java bindings for wxWidgets offer
wxJava, which
is Windows-only and unmaintained, and
wx4j
and jwx!, which are unmaintained
and no longer build.

So I think that leaves us with nothing. How sad. Compare that to
the comprehensive coverage
of Mono’s GUI toolkits, many of which are cross-platform, and to the
situation in other languages such as Perl or Python, and you'll see that
Java sucks the most in this respect.

Here are three tech tips, that I felt did not necessitate their own
entry.

In the Vim text editor(homepage),
one can use the keybinding Ctrl+W ; O to close all windows except
the current one, which will be the only one left open (hence
the "O").

In Facebook (Wikipedia
page) one can use Shift+Enter to start newlines in the messages you compose
in the site’s composer. Press it twice to start a new paragraph.

If you are using Firefox’s Personas Rotator Extension (
Addons.mozilla.org page), then you can switch the currently shown persona (
in case you don't want it at the moment) using Ctrl+Alt+P or an alternate
configurable keybinding. I discovered this latest tip by accident and can no
longer imagine my life without it.

The book Catch-22
by Joseph Heller has a reputation as one of the greatest books of
the 20th century. One of my family members bought it, and I recently finished
reading it, and would like to state my opinion.

While the book is well-written, I didn't really find it enjoyable. On the
other hand, there wasn't any particular obstacle to stop me from finishing
to read it (unlike some books I recently tried to read by Tom Wolfe), so
I guess it could have been worse. The humour in the book is sarcastic and
dry, and I usually did not find it funny.

At least now I can boast that I have read Catch-22, and other people may
find it more enjoyable. Bye for now.

A lot of computer programs, and especially many open-source applications
like to boast that they are “simple”. But what does it mean? Given the various
applications and misapplications of this word, I can think of several
meanings:

Easy to use.

Lacks complexity (whatever that means and implies).

Simplistic.

Minimalistic.

Lacks extraneous features.

Very often, these meanings are at conflict with one another. For example,
the GNOME developers have been
keen on making the feature set as minimalistic (in accordance to meaning
#4) as possible, which has taken the project to spiraling depths of
unusability (opposing meaning #1). Furthermore,
Arch Linux taglines itself as
“a lightweight and flexible Linux® distribution that tries to Keep It
Simple”. However, during one day, I spent three incredibly vexing
hours in trying to install it on a Virtual Box virtual machine, due to the
installer's lack of usability, and if I had to do it on live hardware, it
would have taken me much longer. You call that simple? I joked that it would
take an engineering degree from a prestigious university to figure it out. I
have that, but it did not help me much.

As a result, I have become incredibly suspicious and weary of any software
that prides itself on its “simplicity”, even though “simplicity” should
be a good thing.

Bjarne Stroustrup (the creator of C++) has this to say about Java on
his FAQ:

Much of the relative simplicity of Java is - like for most new languages -
partly an illusion and partly a function of its incompleteness. As time passes,
Java will grow significantly in size and complexity. It will double or triple
in size and grow implementation-dependent extensions or libraries. That is the
way every commercially successful language has developed. Just look at any
language you consider successful on a large scale. I know of no exceptions, and
there are good reasons for this phenomenon. [I wrote this before 2000; now
(2012), the language part of the Java 7 specification is slightly longer in
terms of number of pages than the ISO C++11 language specification.]

So simplicity is often a function of immaturity and incompleteness.

Of course, some things that call themselves “simple” are not simple in any
of the meanings, for example
SOAP, the so-called “Simple
Object Access Protocol” (see the
S stands for Simple), is not simple in any of the meanings I have
given, but it is still called like that.

I feel that like
the word “Zionism” no one is no longer sure what “simplicity” means,
and as a result, some people no longer consider it a good quality to have.
It’s a shame, but that’s life.

The YouTube original
is no longer available due to a copyright claim by YG Entertainment Inc.
(whoever they may be). I wish all copyright cartels will be banished to the
tenth level of hell (which was created especially for them because the
first nine levels were too mild).

Here are the recent updates for Shlomi Fish’s Homepage. The first item of
note is that I implemented an automated test suite for the site, with a
test for lack of trailing whitespace, and a spell checking test
(powered by
Text::Hunspell and
Hunspell). The many problems
pointed by these checkers were fixed, resulting in a very large patch to
review this time.

This Yom Kippur, I again went over my blogs from the last year,
and tried to draw some conclusions. Most of my
blog posts were in my technical blogs:
shlomif-tech, and
my blogs.perl.org
blog. Nevertheless, I did not blog too much. Instead, I worked a lot
on code, wrote E-mails, chatted on IRC, and helped maintain such projects as
the Mageia Linux distribution. So I guess
it's not so bad, because writing and publishing essays has a tendency to
make me nervous.

I was employed for about 7 months this year in a part-time job, which
I expected to be more permanent and turned out to be more temporary. I also
did not have substantial
hypomanias,
though I had some periods of stress or anger, and annoyingly, I got into
a short period of hypomania yesterday, but luckily was quickly able to recover
from it.

As someone who has been chatting on programming-related IRC (Internet
Relay Chat) for a while, I have witnessed my share of people coming up
with unreasonable needs due to homework. However, some days ago, someone
on Freenode's #perl
came and ask for help in parsing a semicolon that does not occur inside
shell quotes (e.g: echo "Semicolon in string - ; foobar" ; ls -l ; )
using regular expressions. I suggested him to use a parser generator, and
then said that his teacher has forbidden him from using it or any other
external CPAN module and that he could only use regular expressions, in order
to, get this: write some Perl code that will convert Bash to Python.
Yes! His teacher expects them to learn those three languages at once.
And apparently without making a judicious use of the proper APIs.

Teaching three languages at the same time (in what may be a introductory course)
is wrong and should be avoided, as learning one language is hard enough,
and with three the students may become extremely confused. In
response to my Thoughts about the Best Introductory
[Programming] Language, a friend suggested that one should teach three
introductory languages, and if I were remember correctly, they were something
like C, a convenient dynamic language such as Perl or Python, and a very "mind
expanding" language like Lisp or Haskell. I noted the same thing back then,
that it would confuse the heck out of the students, and here the motivation
is even more flimsy.

I wonder if we ever top this homework assignment that we are being asked
for help with. Will a professor ask his students to implement a
Strong AI in a weekend?

In a press conference for the publishing of
Accelerated C++,
one of the authors, Andrew Koenig, was asked “Is it true that there are
only three people in the world who truly understand C++?”. To which he
replied “Really? Who’s the third?”.

With some help from some people on the fc-solve-discuss list and off the list (namely
Amadiro from the University of
Oslo and someone else that I met on IRC
, I ran my solvers on the first 400,000 Windows Freecell deals
with only two available freecells to see how many of them can be solved.

Here is the report:

Start Index

End Index

Solved

Impossible

Intractable

1

32,000

25,381

6,619

0

32,001

50,000

14,302

3,698

0

50,001

100,000

39,775

10,225

0

100,001

400,000

238,415

61,584

1 (No. 384243)

Total

317,873

82,126

1

So about 79.47% of the deals can be solved and the rest are impossible. The
only intractable deal that none of my solvers could yield a verdict for is
No. 384,243, and it spans a very large number of states:

The dbm_fc_solver got into Reached 12,821,000,000 ;
States-in-collection: 13,620,999,440
before it failed to produce more results due to a limitation of the
hardware where it was deployed on.