Posted by Eitan
Mon, 30 Jan 2006 14:20:00 GMT
- the quicktime player would be available for linux
- ditto for itunes
i believe apple has benefited much from open source. safari
for example is a derivative of konqueror. there are many
other examples.
of course, from a business perspective, apple leverages
these assets to draw people to the mac platform. and
there's nothing wrong with that. it makes perfect business
sense. if its jewel apps were available on linux, there'd
be less of a reason to give apple money..err i mean, to switch.
that's why itunes on windows makes perfect sense: apple had
a large market for ipods to gain in return. i suppose the
size of the linux market is too small to make a difference
in the case of itunes.
i guess my gripe is with this whole wolf in sheep's clothing thing:
saying "we're a friend of open source, we're the good guys" is pure
rubbish of course. the good guys are the people that forge open
source: gnu, linux, the people behind the projects on sourceforge.
anyhow, it'd be nice some day to run quicktime, itunes, and keynote
on gnome or kde. i'd pay $100 for a copy of keynote for linux...
assuming the copy was at par with its apple counterversion.
no comments
Posted by Eitan
Fri, 27 Jan 2006 18:38:00 GMT
For a while now I have been developing a software application framework very close to my heart.
At last, this project is now a product, and will soon be available for licensing. I invite you to take a closer look at JMatter here.
Posted in Announcements, jMatter | no comments
Posted by Eitan
Fri, 27 Jan 2006 18:37:00 GMT
UptoData has a new look. After some consideration, I have decided to go with the typo content management system.
I hope you like it.
Posted in Announcements | no comments
Posted by eitan
Wed, 25 Jan 2006 00:16:03 GMT
..on Linux for doing presentations.
First there's no support for dynamic video mirroring. I can get over that.
But the presentation software landscape is so unbelievably barren..I tried Open Office 2 but to say that it is terrible would be giving it too much credit. KDE usually really is on top of things but KPresenter is much worse than OO2. I mean, I don't think anyone's tried to do a presentation using that software.
What does that say about people who use Linux? Does no one give presentations? Maybe there's a magic distribution. I thought I was taking it pretty safe when I decided to go with Ubuntu, as far as I can tell, is the most popular distribution, according to distrowatch.org.
I guess I'll be giving S5 a whirl next..
Posted in Linux | no comments
Posted by eitan
Fri, 20 Jan 2006 23:05:26 GMT
As I was coding today, I started thinking to myself "I like IntelliJ IDEA."
I've been using this IDE for almost a year now. I recall what forced me to finally seriously use IDEA: I had been using Eclipse on MacOSX (don't!) when it finally died after Apple introduced Tiger. Man that feels like a long time ago. I am sooo at home on Ubuntu these days it's not even funny. Anyhow, Eclipse really rocks on Ubuntu. Netbeans does too. Still, IDEA is my preferred tool. I'm still not using it to the max but I really like the performance of IDEA on Java 5 on Ubuntu on my Medion laptop (Pentium M 730 I believe), the feel of things.
Anyone know of a good way to integrate XDoclet with IDEA? The question may be premature.
I just checked out JetBrains' web site and noticed they received the "Best IDE" award from the JDJ for 2005. Congratulations guys! Keep it up.
Posted in Programming, Java | no comments
Posted by eitan
Fri, 20 Jan 2006 20:17:10 GMT
I was curious to find out what other notebook computer manufacturers (besides apple) currently offer a notebook with the intel core duo chip.
So I go to Toshiba's web site, the notebook section, and there's a product search field where I can type in a search. I try "core duo" and nothing (nothing) comes up. Ok, how about "dual core." The reply I got:
did you mean "dual more"?
That's pretty pathetic. Nevertheless, it made me laugh outloud. I believe toshiba has two dual core processor offerings. But obfuscating access to information about these products is practically begging to lose to the competition.
Posted in Computers | no comments
Posted by eitan
Tue, 17 Jan 2006 23:28:33 GMT
I'm about to check out TestNG for the first time. I have the documentation printed in front of me and hope to take it for a spin shortly. So I read the TestNG web site's front page. I followed the three links from the front page to three blog entries by Cedric Beust that essentially describe issues he has with JUnit. Cedric's arguments are not convincing.
Here's is my understanding, let me know if I'm wrong:
One of the principal ideas in JUnit is to use the Method as as an analog to a generic block of code: in this case, a test. A method is a test. Don't think of a method as a method. Think of it as a test. Cedric is confused, and rightly so: JUnit test classes are not really classes in the way they were meant to be used by the language designers. He is confused that the class constructor is invoked once for every test that is run. That is, once per method. This is contrary to everything we've ever been taught about OO. Why is this so? Well, it's very simple. Imagine having to write a new class for every single test we wanted to run. It's tedious. It's overkill. The 1-1 mapping of method to test is much nicer. Furthermore, related tests can easily be grouped together in a class. JUnit does its magic behind the scenes, it uses reflection to introspect matching test methods and, in a sense, instruments them for testing. It invokes each in a specific context that ensures isolation from other tests, etc..
What I'm interested in though is in a generalization of JUnit. Grasping the essence of the pattern that JUnit employs is most important. The idea that one could, in general write a class with a bunch of methods and, separately, write a harness that does something else with each method, in a similar way, but where one can customize the context in which the block of code is run.
Take for example, the simple desire or need for someone to learn Hibernate. There's a lot of setup and tearndown that goes along with running all kinds of "tests" to learn the Hibernate API: obtaining a session, beginning a transaction, running the "test", commiting the transaction and "closing" the session. With a generalization of JUnit I would write tests that could be run in a slightly different context where each test method is called in a context that repeatedly does the mundane: opens the session, begins the transaction, calls the block of code, commits the transaction, closes the session, and on to the next test.
Then you can use some kind of flexible runner application to pick which tests you'd like to run. Actually, that's one of the features of IntelliJ IDEA that I really love: the ability to run a single test directly from the IDE, without having to fuss with ant or setting anything up.
What I'm wondering at the moment is whether that "Generalization of JUnit" I'm seeking (though it might be actually trivial to write) is not called "The Spring Framework." Spring employs this pattern over and over again in all kinds of circumstances. What I don't know at the moment is whether one can customize it. This pattern actually is native to smalltalk and ruby (and requires no "framework" to enable). That explains why Kent Beck used it when he wrote JUnit.
Posted in Programming, Java | no comments
Posted by eitan
Tue, 17 Jan 2006 22:38:59 GMT
One of the small little but valuable features I used to like on macosx (before switching to Ubuntu last Summer) was the command-line open command. You could just type open index.html and the file would pop up in the a web browser. I used it all the time.
I'm not "guru of the universe" and surely something like this exists for linux but for some reason thirty minutes searching the synaptic package manager did not yield anything.
So one day I finally decided to turn on my brain for a change and in five minutes hacked this:
#!/usr/bin/ruby -w
def suffix(file_name)
file_name.split(".").last()
end
map = {
"pdf" => "kpdf",
"directory" => "nautilus",
"html" => "epiphany",
"htm" => "epiphany",
"xls" => "gnumeric",
"csv" => "gnumeric",
"txt" => "kate",
"gif" => "eog",
"jpg" => "eog",
"png" => "eog",
"xml" => "gedit"
}
file_name = ARGV[0]
key = (File.directory?(file_name)) ? "directory" : suffix(file_name)
app_name = map[key]
fork do
puts "invoking #{app_name}..\n"
exec "#{app_name} #{file_name}"
end
I've been using it daily for a while now and I like it. Over time I've built myself a few other little utilities. A recent one is merge for merging data with an erb template. I use 'show' a lot. It breaks down a path-like structure into multiple line entries so one can actually read the foresaken string. I use it like this:
eitan@ubuntu:~/bin$ show path
PATH:
/usr/local/bin
/usr/local/sbin
/sbin
/usr/sbin
/bin
/usr/bin
...
.. or show classpath etc..
Another one that is a real time saver when the time comes to import a new project into subversion is svnize which will automatically restructure your project in the trunk/tags/branches hierarchy suitable for doing the import.
Posted in Programming, Linux | no comments
Posted by eitan
Tue, 17 Jan 2006 22:14:06 GMT
It seems to me that many issues that come up in Java stem from the
"I don't want to have to recompile my code" argument. All kinds of
design decisions stem from it too. We end up with systems that
are written in two or more languages. What I mean is that we
usually end up with a mix of Java code, properties files, xml files
and other stuff. The properties files and xml files can be viewed
as interpreted mini-languages that bypass the Java compilation hurdle.
Many debates surrounding Java 5 annotations also are related to this
issue: many have argued that they don't want to have to recompile
their code to revise the value for a piece of metadata. Fair enough.
How many times have you heard or read of a selling point for a
software framework or product or solution being "and you can make
changes to the system without having to recompile the code." I
must admit I'm sure I used that line more than once before (in my
early days programming :-)).
So here's what I find interesting: instead of coming up with all
kinds of schemes to get around the problem, why don't we just deal with
the root cause? I think it's staring at us in the face: why don't we
simply program in an interpreted environment?
I think we all must admit that it's much nicer to be able to make
a change to a web page or a template or a piece of code and very
quickly turn around and test the change without having to recompile.
Compare that to the way a jsp works: compile the jsp into a servlet
and compile the servlet into bytecode. It's true that servlet
containers are easily configured to 'autoreload' jsps. So in this
case, it's really no big deal.
But that's not what I'm talking about here. What I'm talking
about is if we need the equivalent of a config file, we don't
have to go out-of-band and step out of the Java environment
and start our new metalanguage in a properties or XML file
like JDJ did with Ant or like we do every day. We would simply
write source code. An entire thick layer of nonsense design
decisions would simply disappear. No more debates about put
this code here or there depending on whether we want to incur
the cost of a recompile.
This essentially is the argument for internal domain specific
languages (DSLs). So Rake files are not written in XML like Ant is
but instead they're interpreted by Ruby, the same interpreter
that you use to write your Rails app.
More and more these days I'm coming to think that a single or unified
underlying model for interpreting stuff would be a good, pleasing thing.
I like this kind of simplification. We end up with a more uniform
system, and spend less time reinventing the wheel.
I find it most interesting that for some reason, discussions around
this basic issue never seem to come up. What comes up are people
talking about or trying to solve the symptoms of the root cause, but
the root cause seems to evade us.
Posted in Java | no comments
Posted by eitan
Thu, 22 Dec 2005 15:11:58 GMT
What I love about smalltalk is that nothing is out of band. The number of concepts is so brilliantly minimal. By simply treating a block of code as an object, you can implement control structures and exception handling in the language. Code such as:
[#(1 2 4) at: 5] ifError: [:msg :obj | nil].
..is pure beauty (taken from pg 202, Squeak, A Quick Trip to ObjectLand).
It also makes me wonder why ruby is getting so much attention when in fact the things that make ruby great are essentially borrowed smalltalk features.
Posted in Programming | no comments