Friday, March 31, 2006

SOA and B. Meyer

While rereading parts of "Object Oriented Software Construction" from B. Meyer, I still find valuable information I overlooked. In the part about functional decomposition where he argues pro and cons of top-down / bottom-up approaches, he has the intuition of the current SOA hype. By showing that

Real systems have no top.

He suggests that the only way to build complex software is through a service oriented architecture. Of course SOA is a very old concept. Meyer example of Operating Systems is a fine one.

Another interesting remark is his object motto to design an object oriented system:

Ask not first what the system does:
Ask what it does it to!



SOA and B. Meyer

While rereading parts of "Object Oriented Software Construction" from B. Meyer, I still find valuable information I overlooked. In the part about functional decomposition where he argues pro and cons of top-down / bottom-up approaches, he has the intuition of the current SOA hype. By showing that

Real systems have no top.

He suggests that the only way to build complex software is through a service oriented architecture. Of course SOA is a very old concept. Meyer example of Operating Systems is a fine one.

Another interesting remark is his object motto to design an object oriented system:

Ask not first what the system does:
Ask what it does it to!



Thursday, March 30, 2006

Tired Of "My 10 Best XXX" Blog Posts

It's incredible how many posts on popular aggregators are just about a list of stuff, and how except one word they sound the same.
Only today on Javaworld, I can read:
" Ten Things Every Java Developer Should Know About Unix"
"My 10 Favorite Scripting Languages "
"
7 Must-Have Programs for Windows"

They all seem to have read the
"10 best ways to have your post popular on delicious"

It's a bit boring.

Tired Of "My 10 Best XXX" Blog Posts

It's incredible how many posts on popular aggregators are just about a list of stuff, and how except one word they sound the same.
Only today on Javaworld, I can read:
" Ten Things Every Java Developer Should Know About Unix"
"My 10 Favorite Scripting Languages "
"
7 Must-Have Programs for Windows"

They all seem to have read the
"10 best ways to have your post popular on delicious"

It's a bit boring.

Friday, March 17, 2006

Bilinear Gaussian Lanczos? Downsampling!

Not easy to choose a downsampling algorithm. Some links:
  • mplayer: advises bilinear for quality and describes artifacts for each algo
  • a blogger: advises lanczos. This links shows pictures produced by each algo.
  • digital image interpolation: seems to have a preference for bicubic, what photoshop uses.
  • videohelp: tested various algorithms and think Bicubic spline is the best.
People don't seem to agree. If you want to check the theory:


Bilinear Gaussian Lanczos? Downsampling!

Not easy to choose a downsampling algorithm. Some links:
  • mplayer: advises bilinear for quality and describes artifacts for each algo
  • a blogger: advises lanczos. This links shows pictures produced by each algo.
  • digital image interpolation: seems to have a preference for bicubic, what photoshop uses.
  • videohelp: tested various algorithms and think Bicubic spline is the best.
People don't seem to agree. If you want to check the theory:


Getting Started With DOM, XOM, DOM4J by Parsing an RSS Feed - An Experience Review

Recently, I looked for a way to get info from some particular blog entries of mine on blogger.com. Blogger used to offer an XML-RPC API . They even designed a version 2 of the XML-RPC API that does not seem to have ever been put in production. Or maybe I did not manage to make it work. I had no problem to make v1 work, however. I used apache XMLRPC v2, it was very simple to use. Unfortunately information accessible through XML-RPC Blogger API was incomplete for me. Furthermore, it is very likely that this API will disappear soon as it is deprecated since 2002.

Blogger wants you to use their Atom API. It is not XML RPC anymore, you have to do the parsing by hand.

The DOM Experience

I thought "no big deal, I will use DOM for it". I don't need performance and wanted a quick way to solve my problem, plus DOM does not require X number of libraries. It was easy to use regular DOM until I was frustrated by not being able to get the <content> element full text easily as it is sometimes XML. I did not want to hand code a method to do that as I thought it should be done by the XML library.

The XOM Experience

I heard previously of a simple XML parser, efficient, with an API that had been well designed, XOM. I looked at the API, there was a toXML () method to return the node content as XML (children included), sounded good. I saw there was even XPath support, and thought, great, it will simplify my code a bit. I will get the blog entries by just querying for " /feed/entry". No luck, it did not work, it returned 0 results. So I looked for mistakes in my code, did not find obvious ones. I tried other queries like " //feed/entry" or "//entry", same thing, not the right results. There must have been something wrong in my code, or maybe the XPath engine in XOM has particular settings to deal with RSS feeds (they contain various xmlns declarations). The point is that I got frustrated, it was supposed to be very simple, and in reality, not so!

The DOM4J Experience

I had experience with Dom4j before, just once, to build XML, not to parse it. I had relatively good memories of my Dom4j experience for that so I decided to try it out on my problem. At first I found Dom4j API a bit confusing as there are so many methods on most used classes. This is because Dom4j is DOM compatible. But I quickly understand the logic of it and found some very useful methods, namely Element.elements(name) to get all children elements by name. Of course, they have an asXML() method like XOM. There is also XPath support.
I tried the XPath on Blogger RSS without success again. There really must be a trick to get it to recognize RSS. But with the elements("entry") method, I very quickly got the same with not much more code, and it worked.

so DOM vs. XOM vs. DOM4J = 0 - 0 - 1

Example Code:

SAXReader reader = new SAXReader();
Document doc = reader.read(response);
Collection posts = new ArrayList();
List entries = doc.getRootElement().elements("entry");
if (LOG.isDebugEnabled())
{
LOG.debug("found "+entries.size()+" entries");
}
for (int i = 0; i <entries.size();i++)
{
Element entry = (Element) entries.get(i);
Map m = new HashMap();
for (Iterator it = entry.elementIterator();it.hasNext();)
{
Element detail = (Element) it.next();
String name = detail.getName();
if (name.equals("link"))
{
m.put("link",detail.attribute("href").getValue());
}
else if (name.equals("content"))
{
m.put("content",detail.asXML());
}
else
{
m.put(name,detail.getTextTrim());
}
}

posts.add(m);
if (LOG.isDebugEnabled())
{
LOG.debug("found="+m.get("title")+", url="+m.get("link"));
}
}

Getting Started With DOM, XOM, DOM4J by Parsing an RSS Feed - An Experience Review

Recently, I looked for a way to get info from some particular blog entries of mine on blogger.com. Blogger used to offer an XML-RPC API . They even designed a version 2 of the XML-RPC API that does not seem to have ever been put in production. Or maybe I did not manage to make it work. I had no problem to make v1 work, however. I used apache XMLRPC v2, it was very simple to use. Unfortunately information accessible through XML-RPC Blogger API was incomplete for me. Furthermore, it is very likely that this API will disappear soon as it is deprecated since 2002.

Blogger wants you to use their Atom API. It is not XML RPC anymore, you have to do the parsing by hand.

The DOM Experience

I thought "no big deal, I will use DOM for it". I don't need performance and wanted a quick way to solve my problem, plus DOM does not require X number of libraries. It was easy to use regular DOM until I was frustrated by not being able to get the <content> element full text easily as it is sometimes XML. I did not want to hand code a method to do that as I thought it should be done by the XML library.

The XOM Experience

I heard previously of a simple XML parser, efficient, with an API that had been well designed, XOM. I looked at the API, there was a toXML () method to return the node content as XML (children included), sounded good. I saw there was even XPath support, and thought, great, it will simplify my code a bit. I will get the blog entries by just querying for " /feed/entry". No luck, it did not work, it returned 0 results. So I looked for mistakes in my code, did not find obvious ones. I tried other queries like " //feed/entry" or "//entry", same thing, not the right results. There must have been something wrong in my code, or maybe the XPath engine in XOM has particular settings to deal with RSS feeds (they contain various xmlns declarations). The point is that I got frustrated, it was supposed to be very simple, and in reality, not so!

The DOM4J Experience

I had experience with Dom4j before, just once, to build XML, not to parse it. I had relatively good memories of my Dom4j experience for that so I decided to try it out on my problem. At first I found Dom4j API a bit confusing as there are so many methods on most used classes. This is because Dom4j is DOM compatible. But I quickly understand the logic of it and found some very useful methods, namely Element.elements(name) to get all children elements by name. Of course, they have an asXML() method like XOM. There is also XPath support.
I tried the XPath on Blogger RSS without success again. There really must be a trick to get it to recognize RSS. But with the elements("entry") method, I very quickly got the same with not much more code, and it worked.

so DOM vs. XOM vs. DOM4J = 0 - 0 - 1

Example Code:

SAXReader reader = new SAXReader();
Document doc = reader.read(response);
Collection posts = new ArrayList();
List entries = doc.getRootElement().elements("entry");
if (LOG.isDebugEnabled())
{
LOG.debug("found "+entries.size()+" entries");
}
for (int i = 0; i <entries.size();i++)
{
Element entry = (Element) entries.get(i);
Map m = new HashMap();
for (Iterator it = entry.elementIterator();it.hasNext();)
{
Element detail = (Element) it.next();
String name = detail.getName();
if (name.equals("link"))
{
m.put("link",detail.attribute("href").getValue());
}
else if (name.equals("content"))
{
m.put("content",detail.asXML());
}
else
{
m.put(name,detail.getTextTrim());
}
}

posts.add(m);
if (LOG.isDebugEnabled())
{
LOG.debug("found="+m.get("title")+", url="+m.get("link"));
}
}

Thursday, March 16, 2006

Bad JDK Design Example

Have you ever used the Authenticator class? It is standard since JDK 1.2. This allows you to establish authenticated HTTP requests. OnJava has an in-depth article presenting it. Now here is my story about it.

The other day I just wanted to do that a simple authenticated HTTP request. You would expect it to be very simple to do in the modern internet world.

It is actually not very difficult to do, by hand, a JavaWorld article presents this way. Unfortunately it uses internal JDK sun classes for Digest and I am uncomfortable to use that since it is not guaranteed to work on any JVM. So I have to download jakarta commons-codec to just do a simple authenticated HTTP request. I really wonder why some of those codecs are not in the JDK (not as sun.* classes but as java.* classes).

When I read that it was possible to do it a standard way in JDK 1.2, I was excited. I was wrong. Not only you have to extend a class (ok, implementation is faily simple) that adds in my mind unnecessary clutter, but you are forced to have only 1 Authenticator at a given time (and this Authenticator scope seems much wider than just securing HTTP connection). What about server programs dealing with different credentials?

So I am left downloading jarkata httpclient library that is more powerful and easier to use than hand coded digest authentication (that anyway needs common codecs) just to have HTTP authentication the way it should be done.

Bad JDK Design Example

Have you ever used the Authenticator class? It is standard since JDK 1.2. This allows you to establish authenticated HTTP requests. OnJava has an in-depth article presenting it. Now here is my story about it.

The other day I just wanted to do that a simple authenticated HTTP request. You would expect it to be very simple to do in the modern internet world.

It is actually not very difficult to do, by hand, a JavaWorld article presents this way. Unfortunately it uses internal JDK sun classes for Digest and I am uncomfortable to use that since it is not guaranteed to work on any JVM. So I have to download jakarta commons-codec to just do a simple authenticated HTTP request. I really wonder why some of those codecs are not in the JDK (not as sun.* classes but as java.* classes).

When I read that it was possible to do it a standard way in JDK 1.2, I was excited. I was wrong. Not only you have to extend a class (ok, implementation is faily simple) that adds in my mind unnecessary clutter, but you are forced to have only 1 Authenticator at a given time (and this Authenticator scope seems much wider than just securing HTTP connection). What about server programs dealing with different credentials?

So I am left downloading jarkata httpclient library that is more powerful and easier to use than hand coded digest authentication (that anyway needs common codecs) just to have HTTP authentication the way it should be done.

Wednesday, March 15, 2006

Current Popular Subjects In Java Blogs

Based on my blogs entries and success of other blog entries, I present the current trendy subjects and the not trendy ones:

In:
  • Design Patterns
  • Ruby on Rails
  • EJB (bashing)
  • RSS
  • Spring
  • Hibernate
  • Javascript and AJAX
  • Java Virtual Machine
Out:
  • RMI
  • Portal
  • Jini
Neutral:
  • JDK 5 features
As you can see most of the popular stuff is fairly common, not that new. I will do a finer, less common, analysis later if I have time.

Current Popular Subjects In Java Blogs

Based on my blogs entries and success of other blog entries, I present the current trendy subjects and the not trendy ones:

In:
  • Design Patterns
  • Ruby on Rails
  • EJB (bashing)
  • RSS
  • Spring
  • Hibernate
  • Javascript and AJAX
  • Java Virtual Machine
Out:
  • RMI
  • Portal
  • Jini
Neutral:
  • JDK 5 features
As you can see most of the popular stuff is fairly common, not that new. I will do a finer, less common, analysis later if I have time.

Non Fiction Books (Mostly Software Programming) Before 2003

A page with useful reference for me as I don't own each one of these books. It can provides you a very short review non-commercial biased.

2003

  • Programming Jakarta Struts (O'Reilly - Chuck Cavaness) much better than Manning book. Explains struts very clearly with a more interesting example. Not enough on how to design your application for use with the evil ActionForm. Almost nothing on Struts 1.1 features. Nothing on common problems encountered while building web applications, or even about on how to design them using struts.
  • Struts In Action (Manning) not much more about struts than what's available on struts website. Their example throughout the book is the same login example. Struts 1.1 features, esp DynaForm are mentioned but not really presented. On the positive side, there is a very useful Validator reference at the end and a too short mention of different strategies for the ActionForm.
  • Contributing to Eclipse (Kent Beck - Erich Gamma) funny little drawings inside to make some good points.
  • The Design Patterns Java Companion(Adison Wesley - James W. Cooper) A must read for clean swing development. Essencial design patterns inside. Nice tip about doing deep cloning in java.
  • Java Threads (O'Reilly - Scott Oaks and Henry Wong) very clear presentation of multithreading programming in Java. Explain how to write your own thread scheduler.
  • J2EE expert one on one (Wrox) pragmatic view of J2EE. Many interesting comments like why avoiding stateful session bean if you are a little bit concerned with performance. Some strange benchmarks at the end of the book showing velocity templates being 10x faster than JSPs.
  • Java Distributed Computing(O'Reilly - Jim Farley) very good to learn more about RMI because it starts with a custom distributed object system.
  • Java Enterprise in a Nutshell (O' Reilly - David Flanagan, Jim Farley, William Crawford, and Kris Magnusson) good complementary book, provides a good basis. I liked how RMI use in EJBs was detailed, Servlet chapter is also excellent (but don't look for design tips/help in it - it is a book on the BASICS).
  • Enterprise Javabeans, second edition (O'Reilly - Richard Monson-Haefel) second lecture made me better appreciate that book, contains a lot of fundamental concepts to know. Very detailed on transaction management. However there is nothing I remember in it about EJB restrictions. In short incomplete but not bad.
  • Structure And Interpretation Of Computer Programs (MIT Press)

2002

  • A New Kind Of Science (S. Wolfram)
  • Programming C# (O'Reilly) contains good and detailed information, is a nice lookup book when we want some information on a particular C# subject, and contains a nice example about programming Windows Forms without Visual Studio.
  • C# Language Reference (Microsoft, june 2000) ok to lookup information but O'Reilly is usually better.
  • C# .NET Web Developer's Guide (Syngress) useful, good data on the CLI and on the C# compiled format. It is a nice book to learn C#.
  • C#, Your visual blueprint for building .NET application ( ) not good, very Visual Studio centric.Filling up pages with obvious data.
  • Thinking in Pattern (Bruce Eickel) essencial oo design patterns
  • The Zope Book ( ) good book to familiarize yourself with Zope
  • Fractal Geometry of Nature (B. Mandelbrot) the spirit of Fractals, maybe good for people that already know a lot about fractals, otherwise kind of difficult to read sometimes because it does not detail ideas that much focusing more on the spirit.
  • Complete Java 2 Certification (SYBEX) do you know that a byte is signed and a char is 16 bits?
  • Chaos and Fractals (German authors) makes fractals accessible to everyone including non graduates, while still being ambitious (Fractal dimension details, Julia set details...). It is based on relatively classic mathematical approachs.

2001

  • Java Security (O'Reilly) repetitive but very good overview of overall Java Security. In September 2001, it was the only book with a chapter on JAAS.
  • Learning Python (O'Reilly) ok to learn python.
  • Bluetooth demystified (N.J. Muller) first chapters are interesting to get an overview of bluetooth and its market potential. Then it describes the telecom technology behind bluetooth from scratch. A must read for people who have to program embedded bluetooth devices. It reminded me a little bit the GSM book. I would have liked a detailed technology comparison with its competitors (not only the spec comparison).
  • J2EE ( ) just another rewriting of Sun specs...
  • Programming Ruby, the pragmatic programmer's guide ( ) Excellent overview of Ruby but a little bit too much pro-Ruby. The first book on Ruby. In 2002, Ruby is now a bad choice of programming language because Python does everything as simply as Ruby does and has a much larger community.
  • Python Essencial Reference (New Riders) good because the python hypertext documentation has a really bad index and is not well organized.
  • Programming Python (O'Reilly) that book sucks.
  • Genetic Programming III, Darwinian Invention and problem solving (Koza) very good approach, nice comparison with evolutionnary theory + good introduction to LISP. First chapters must be read, then repetitive.
  • How to solve it: Modern Heuristics (Springer) AI techniques overview. Not very useful because it describes the obvious with a lot of details and the difficult in a few words. Furthermore some very stupid comments like p358 "some have suggested (e.g. Walter Freeman) that digital implementation of neural network may fail to emulate the biological reality because real brain are chaotic analog devices. Digital computers can only approximate the behaviour of analog devices to a given degree of precision. This precision may not be sufficient to capture the chaotic dynamics that exist in the real brain". 3 sentences to express a not-so-interesting remark, none of them add any details. Koza is much more interesting.
  • Professional JMS (Wrox) good overview of JMS, everything I needed to know about it.
  • Professional J2EE (Wrox) really good on custom JSP tags. Some interesting design issues. Explicitely mention the restrictions of J2EE (even if he does not explicitely tell you how to avoid them). Unfortunaly their examples are not always very good and sometimes just too long (especially the XML/JSP part is crap).
  • Applied Cryptography (B. Schneier) The basis of cryptography, very detailed. Could be used as a reference manual.
  • Fast Food Nation (E. Schlosser) 1000 reasons not to eat cheap food. A social part and a chemical part, but mainly social. I found interesting to read "Americans with German ancestors far outnumber those with English ancestors", (of course Schlosser is from German origin). A shame he did not specify any reference probing this fact.
  • The Codebook ( ) history of cryptography describing the diverse techniques to encrypt or crack.

2000

  • Web security ( ) some interesting parts but a lot of nothing.
  • Database Nation ( ) why worry about your private data? Authentification problems on social life.
  • CCTV( ) first chapters interesting on the history of prisons and criminals. Then a lot of repetitive data on CCTV in England. CCTV means Closed Circuit TV i.e. surveillance systems for public areas.
  • In Code(S. Flannery) nice introduction to cryptography and mathematics. At 16, she proposed a new authentification scheme quicker than RSA. My first slightly technical purchased book for my pleasure.
  • Java Server Pages, chapter 8 a must read for clean servlet/jsp programming: a nice presentation of MVC adapted to a web client through the command pattern. The rest of the book is much less interesting and much more entry-level. Professional JSP from Wrox is probably a much better book now.

1999

  • GSM (don't remember the title but it's red and from the ENST) everything about GSM technology, very well described and explained.
  • Lamps ( ) a lot of books on light/optics/lamp technology.

1998

  • Thinking in Java (Bruce Eickel) free and good to learn Java. Good chapters on Swing programmation. Swing was new at this time.

1997

  • Java in a Nutshell (O'Reilly) my first Java book. Was ok to learn java but not that great. JDK API documentation should be removed from the book and replaced by a chapter on the Javadoc system.

Tags: ,

Non Fiction Books (Mostly Software Programming) Before 2003

A page with useful reference for me as I don't own each one of these books. It can provides you a very short review non-commercial biased.

2003

  • Programming Jakarta Struts (O'Reilly - Chuck Cavaness) much better than Manning book. Explains struts very clearly with a more interesting example. Not enough on how to design your application for use with the evil ActionForm. Almost nothing on Struts 1.1 features. Nothing on common problems encountered while building web applications, or even about on how to design them using struts.
  • Struts In Action (Manning) not much more about struts than what's available on struts website. Their example throughout the book is the same login example. Struts 1.1 features, esp DynaForm are mentioned but not really presented. On the positive side, there is a very useful Validator reference at the end and a too short mention of different strategies for the ActionForm.
  • Contributing to Eclipse (Kent Beck - Erich Gamma) funny little drawings inside to make some good points.
  • The Design Patterns Java Companion(Adison Wesley - James W. Cooper) A must read for clean swing development. Essencial design patterns inside. Nice tip about doing deep cloning in java.
  • Java Threads (O'Reilly - Scott Oaks and Henry Wong) very clear presentation of multithreading programming in Java. Explain how to write your own thread scheduler.
  • J2EE expert one on one (Wrox) pragmatic view of J2EE. Many interesting comments like why avoiding stateful session bean if you are a little bit concerned with performance. Some strange benchmarks at the end of the book showing velocity templates being 10x faster than JSPs.
  • Java Distributed Computing(O'Reilly - Jim Farley) very good to learn more about RMI because it starts with a custom distributed object system.
  • Java Enterprise in a Nutshell (O' Reilly - David Flanagan, Jim Farley, William Crawford, and Kris Magnusson) good complementary book, provides a good basis. I liked how RMI use in EJBs was detailed, Servlet chapter is also excellent (but don't look for design tips/help in it - it is a book on the BASICS).
  • Enterprise Javabeans, second edition (O'Reilly - Richard Monson-Haefel) second lecture made me better appreciate that book, contains a lot of fundamental concepts to know. Very detailed on transaction management. However there is nothing I remember in it about EJB restrictions. In short incomplete but not bad.
  • Structure And Interpretation Of Computer Programs (MIT Press)

2002

  • A New Kind Of Science (S. Wolfram)
  • Programming C# (O'Reilly) contains good and detailed information, is a nice lookup book when we want some information on a particular C# subject, and contains a nice example about programming Windows Forms without Visual Studio.
  • C# Language Reference (Microsoft, june 2000) ok to lookup information but O'Reilly is usually better.
  • C# .NET Web Developer's Guide (Syngress) useful, good data on the CLI and on the C# compiled format. It is a nice book to learn C#.
  • C#, Your visual blueprint for building .NET application ( ) not good, very Visual Studio centric.Filling up pages with obvious data.
  • Thinking in Pattern (Bruce Eickel) essencial oo design patterns
  • The Zope Book ( ) good book to familiarize yourself with Zope
  • Fractal Geometry of Nature (B. Mandelbrot) the spirit of Fractals, maybe good for people that already know a lot about fractals, otherwise kind of difficult to read sometimes because it does not detail ideas that much focusing more on the spirit.
  • Complete Java 2 Certification (SYBEX) do you know that a byte is signed and a char is 16 bits?
  • Chaos and Fractals (German authors) makes fractals accessible to everyone including non graduates, while still being ambitious (Fractal dimension details, Julia set details...). It is based on relatively classic mathematical approachs.

2001

  • Java Security (O'Reilly) repetitive but very good overview of overall Java Security. In September 2001, it was the only book with a chapter on JAAS.
  • Learning Python (O'Reilly) ok to learn python.
  • Bluetooth demystified (N.J. Muller) first chapters are interesting to get an overview of bluetooth and its market potential. Then it describes the telecom technology behind bluetooth from scratch. A must read for people who have to program embedded bluetooth devices. It reminded me a little bit the GSM book. I would have liked a detailed technology comparison with its competitors (not only the spec comparison).
  • J2EE ( ) just another rewriting of Sun specs...
  • Programming Ruby, the pragmatic programmer's guide ( ) Excellent overview of Ruby but a little bit too much pro-Ruby. The first book on Ruby. In 2002, Ruby is now a bad choice of programming language because Python does everything as simply as Ruby does and has a much larger community.
  • Python Essencial Reference (New Riders) good because the python hypertext documentation has a really bad index and is not well organized.
  • Programming Python (O'Reilly) that book sucks.
  • Genetic Programming III, Darwinian Invention and problem solving (Koza) very good approach, nice comparison with evolutionnary theory + good introduction to LISP. First chapters must be read, then repetitive.
  • How to solve it: Modern Heuristics (Springer) AI techniques overview. Not very useful because it describes the obvious with a lot of details and the difficult in a few words. Furthermore some very stupid comments like p358 "some have suggested (e.g. Walter Freeman) that digital implementation of neural network may fail to emulate the biological reality because real brain are chaotic analog devices. Digital computers can only approximate the behaviour of analog devices to a given degree of precision. This precision may not be sufficient to capture the chaotic dynamics that exist in the real brain". 3 sentences to express a not-so-interesting remark, none of them add any details. Koza is much more interesting.
  • Professional JMS (Wrox) good overview of JMS, everything I needed to know about it.
  • Professional J2EE (Wrox) really good on custom JSP tags. Some interesting design issues. Explicitely mention the restrictions of J2EE (even if he does not explicitely tell you how to avoid them). Unfortunaly their examples are not always very good and sometimes just too long (especially the XML/JSP part is crap).
  • Applied Cryptography (B. Schneier) The basis of cryptography, very detailed. Could be used as a reference manual.
  • Fast Food Nation (E. Schlosser) 1000 reasons not to eat cheap food. A social part and a chemical part, but mainly social. I found interesting to read "Americans with German ancestors far outnumber those with English ancestors", (of course Schlosser is from German origin). A shame he did not specify any reference probing this fact.
  • The Codebook ( ) history of cryptography describing the diverse techniques to encrypt or crack.

2000

  • Web security ( ) some interesting parts but a lot of nothing.
  • Database Nation ( ) why worry about your private data? Authentification problems on social life.
  • CCTV( ) first chapters interesting on the history of prisons and criminals. Then a lot of repetitive data on CCTV in England. CCTV means Closed Circuit TV i.e. surveillance systems for public areas.
  • In Code(S. Flannery) nice introduction to cryptography and mathematics. At 16, she proposed a new authentification scheme quicker than RSA. My first slightly technical purchased book for my pleasure.
  • Java Server Pages, chapter 8 a must read for clean servlet/jsp programming: a nice presentation of MVC adapted to a web client through the command pattern. The rest of the book is much less interesting and much more entry-level. Professional JSP from Wrox is probably a much better book now.

1999

  • GSM (don't remember the title but it's red and from the ENST) everything about GSM technology, very well described and explained.
  • Lamps ( ) a lot of books on light/optics/lamp technology.

1998

  • Thinking in Java (Bruce Eickel) free and good to learn Java. Good chapters on Swing programmation. Swing was new at this time.

1997

  • Java in a Nutshell (O'Reilly) my first Java book. Was ok to learn java but not that great. JDK API documentation should be removed from the book and replaced by a chapter on the Javadoc system.

Tags: ,

Tuesday, March 14, 2006

How Mac Os X Made Me Discover a Bug in my Java Prog

benham disc screenshot
Yesterday I had some free time to finally find out why MacOs X would not display my little applet properly. I checked various JDKs for MacOs, no difference. I checked if it was due to antialiasing use, no luck. I actually found out there was an error in the way I displayed images. I did not call repaint() between each image change. Strangely, it worked fine on Windows with many JDKs. Anyway now my Benham Disc Applet is working on Apple computers as well.

How Mac Os X Made Me Discover a Bug in my Java Prog

benham disc screenshot
Yesterday I had some free time to finally find out why MacOs X would not display my little applet properly. I checked various JDKs for MacOs, no difference. I checked if it was due to antialiasing use, no luck. I actually found out there was an error in the way I displayed images. I did not call repaint() between each image change. Strangely, it worked fine on Windows with many JDKs. Anyway now my Benham Disc Applet is working on Apple computers as well.

Monday, March 13, 2006

Del.icio.us Firefox Toolbar Update

I updated my little delicious toolbar that provides autosave feature for me. I did not bother reworking the new delicious extension as I don't use its new functionalities. However people are free to do so if they want with the code from this toolbar.

deltoolbar screenshot

With Firefox 1.5, display of saved documents was not working properly anymore due to a change in Firefox handling of security permissions to view local files. It is fixed now.
Tags: , , ,

Del.icio.us Firefox Toolbar Update

I updated my little delicious toolbar that provides autosave feature for me. I did not bother reworking the new delicious extension as I don't use its new functionalities. However people are free to do so if they want with the code from this toolbar.

deltoolbar screenshot

With Firefox 1.5, display of saved documents was not working properly anymore due to a change in Firefox handling of security permissions to view local files. It is fixed now.
Tags: , , ,

Thursday, March 09, 2006

Why did Netscape choose Javascript?!?

Last year, I have helped building an AJAX web application, where the web client was composed of only one web page and tons of javascript. The 1 web page for a site approach is similar to Gmail and many full AJAX sites. This approach looks quite elegant. Using JSON (and JSON templates) we were able to separated fully presentation logic and business logic and componentization seemed to occur naturally.

But I remember how often I complained on how bad Javascript was to code. I find it does not encourage good practices at all. The object orientation of Javascript is really a pain to use. If I had not a small experience with Python before, I would have thought scripting languages were really bad at building applications, even not so big ones. I find that even for good programmers, Javascript is a challenge, as it seems to always be a struggle to organize properly your code with it.

I was recently relieved to see that around me, almost nobody likes Javascript either. It is very sad that Netscape chosed such a bad language in 1995. Firefox appears like a miraculous program to me as a lot of the UI is done in Javascript.

Ah! If ever it had been Python all the way.

Why did Netscape choose Javascript?!?

Last year, I have helped building an AJAX web application, where the web client was composed of only one web page and tons of javascript. The 1 web page for a site approach is similar to Gmail and many full AJAX sites. This approach looks quite elegant. Using JSON (and JSON templates) we were able to separated fully presentation logic and business logic and componentization seemed to occur naturally.

But I remember how often I complained on how bad Javascript was to code. I find it does not encourage good practices at all. The object orientation of Javascript is really a pain to use. If I had not a small experience with Python before, I would have thought scripting languages were really bad at building applications, even not so big ones. I find that even for good programmers, Javascript is a challenge, as it seems to always be a struggle to organize properly your code with it.

I was recently relieved to see that around me, almost nobody likes Javascript either. It is very sad that Netscape chosed such a bad language in 1995. Firefox appears like a miraculous program to me as a lot of the UI is done in Javascript.

Ah! If ever it had been Python all the way.

Tuesday, March 07, 2006

New Mac Mini


Here is my new Mac Mini Core Solo. I am quite happy with it since it is very quiet. It makes a good jukebox/movie/server machine. Apple was very quick in shipping it (2 days)

However I was a bit disappointed by iPhoto 6, it is not as nice as Picasa to sort out pictures (no IPTC support). I did not try Java on it yet. I just found out my little Benham circle applet was not working properly on it. Posted by Picasa

New Mac Mini


Here is my new Mac Mini Core Solo. I am quite happy with it since it is very quiet. It makes a good jukebox/movie/server machine. Apple was very quick in shipping it (2 days)

However I was a bit disappointed by iPhoto 6, it is not as nice as Picasa to sort out pictures (no IPTC support). I did not try Java on it yet. I just found out my little Benham circle applet was not working properly on it. Posted by Picasa