Saturday, October 23, 2010

Java Concurrency in Practice, another book for the winter



http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601/ref=sr_1_1?s=books&ie=UTF8&qid=1287837814&sr=1-1

I have always dealt with concurrency having a sense of uncertainty and improvisation - "just make it work with some hack" kind of thing. I really don't like this feeling. I prefer to have some good overall understanding of the most common situations one has to face, and common practice solutions.

Friday, October 22, 2010

Coders at work

I am reading this book http://www.codersatwork.com/ , it's really a great book, one of the best IT books I have ever read... probably because it's not so much about Computers, but about Computer People...

It shows how all these great coders, excellent at what they have done, have really very different personalities, educational backgrounds and lifestyles.

So far a common denominator of all these great minds is:
- learn to write clean, readable, well documented code
- learn to read other people code


Coding seems to be more a matter of literacy and communication than a matter of purely technical skills.

Here a great video on the Netscape developers, including Jamie Zawinsky



Sunday, October 17, 2010

Python!

As a Python IDE I am using Oepe Eclipse 3.6

An excellent tutorial

The entire Python Standard Library

and the language specs

It looks like I will do a lot of WLST/Python... I used to do all my WebLogic monitoring using Java/JMX but it's way too heavy. I love Java but you must be pragmatic.

Play, Scalatra and their friends

I have asked Luciano:
"if you had to start a Web project from scratch, what would you use? Appfuse?"

Answer:
" Play (a Java-Groovy based Web framework)
or Lift (scala) o Scalatra (scala) "

Scala should be considered a valid alternative to Java, it's a lot less verbose...

Friday, October 15, 2010

Google Apps redirect

From today, javamonamour.org can be found also with javamylove.org

I have bought the domain from google apps, logged in the control panel

https://www.google.com/a/javamylove.org

go to Domain Settings /Domain Names / Advanced DNS settings

note your password

click on "sign in to DNS console" which brings you to

https://access.enom.com/?domain=javamylove.org&user=

on "Host records" the first entry marked @
enter the domain name you want to redirect to (javamonamour.org) and in "record type" choose "URL redirect".

Do the same on the www line, otherwise the system will only redirect when you type www.javamylove.org but not when you type javamylove.org


Easy ! :o)

Wednesday, October 13, 2010

IIS, introductory tour

An excellent tutorial on Installation : http://www.youtube.com/watch?v=vBNoTK31zPo

An article on the Wikipedia


Administrating IIS with scripts


The "official" IIS site: http://www.iis.net/

And the Microsoft Documentation

Some useful terminology:

Active Directory Service Interfaces (ADSI)

Windows Management Instrumentation (WMI)

Admin Base Object (ABO) interfaces



Good to know:

Application Pools


IIS Plug-In for WebLogic

Monday, October 11, 2010

NodeManager: domain salt file not found

See here the full story.

startNodeManager.cmd is in C:\bea11\wlserver_10.3\server\bin
in the same dir is also nodemanager.properties WHICH IS NOT BEING USED!

This file is configured to have:
DomainsFile=C\:\\bea11\\wlserver_10.3\\server\\bin\\nodemanager.domains


for some reason the nodemanager.domains is missing and this other is loaded:
C:\bea11\wlserver_10.3\common\nodemanager\nodemanager.domains


because NODEMGR_HOME=%WL_HOME%\common\nodemanager
where WL_HOME=C:\bea11\wlserver_10.3\

Verify the Domain name mappings:

if you are pointing to the wrong directory, where no valid domain exists, you will get this error emssage:

java.io.FileNotFoundException: Domain directory 'C:\bea11\wlserver_10.3\common\nodemanager' invalid (domain salt file not found)

Friday, October 8, 2010

Maven 3.0, welcome polyglot Maven!

at last support for Groovy POMs!

I can't believe my eyes: at last a Maven POM which is not the usual unreadable pile of XML garbage:

http://polyglot.sonatype.org/groovy.html

Here is the whole excellent InfoQ article
http://www.infoq.com/news/2010/10/maven-30-released

I am looking forward to some book on the topic...
I don't want to see a single pom.xml for the rest of my life.

Monday, October 4, 2010

The Gotha of Computing

For a history of the term "Gotha":
http://en.wikipedia.org/wiki/Almanach_de_Gotha

"The Almanach de Gotha was a respected directory of Europe's highest nobility and royalty"

James Gosling "Inventor" of Java

Grady Booch "Inventor" of UML

Edsger Dijkstra "inventor" of the Operating Systems theory

Donald Knuth researcher and author of The Art of Computer Programming

Christopher Alexander building architect often quoted for his seminal A Pattern Language

Martin Fowler writer and influencial thinker

Doug Lea father of Concurrent Java

Linus Torvalds initiator of the Linux operating system

Erich Gamma co-author of the seminal Design Patterns book

Kent Beck father of Extreme Programming and JUnit


Alan Turing, pioneer in many, many fields, not only computers - a modern times Leonardo


Tanenbaum inventor of Minix and author of a great book on Operating Systems.

Von Neumann major mathematical brain

Edgar F. Codd inventor of SQL

Dennis Ritchie, inventor of C and Unix, and his colleague Kernighan
https://en.wikipedia.org/wiki/Ada_Lovelace great mathematician who worked with https://en.wikipedia.org/wiki/Charles_Babbage on the Analytical Engine.
.... more to come ....




 (courtesy of the Dutch National Library)

Data Serialization standards.... beyond XML

I am reading a series of EXCELLENT pages on the Wikipedia:

XML

JSON

YAML


I am not saying one is better than the other. Each has pros and cons.

XML disturbs me for his prolixity, the entities like < and > and &, and the close tags . I like it because it's fairly robust and unambiguous - barred Namespaces.

JSON disturbs me for his quotes. I like its simplicity.

YAML disturbs for the reliance on indentation and special notations. I like the rigorous representation of complex data structures.


But the huge question mark raising in my head is: why on Earth do we need a format that is directly readable/editable by humans?
So that one can use Notepad or vi to edit them?

Ok, then I will give you a YAMLNotepad and a YAMLvi and we move away from a (necessarily inefficient) human readable format and use a more rigorous binary representation, mutuated for instance from Java .ser format or Coherence POF format or TIBCO or whatever other high-speed serialization standard.
We will gain in performance, validation, readibility (you can customize the program to display in whatever format you want, attaching the stylesheets of your choice)...

Why on Earth the actual data on the wire must be in the same format that we display to the user? To me it's only because it's difficult to have a standard be supported across multiple products / platform, and an ASCII editor is the most universal too available. Too bad though.... so much is lost.

Great sources of Java code

these are endless supplies of working examples:

http://www.java2s.com

http://www.koders.com/

.... more to come ....

Clean Code - a handbook of agile software craftsmanship

http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

The PDF is also available here for free:

http://knowfree.net/2010/10/clean-code-a-handbook-of-agile-software-craftsmanship




I have started reading it and it's really enjoyable and witty - which doesn't happen very often in IT books :o(

I am reproducing on of its images, hoping  that OSNews http://www.osnews.com/ will not mind...



For a definition of Craftmanship : "emphasizes the coding skills of the software developers themselves"

Here is their manifesto, I like it http://manifesto.softwarecraftsmanship.org/

I myself believe that the main criterias to evaluate code are:
- is it readable and easily modifiable?
- are build, test and deployment fully automated with a CI tool?
- is it fully covered by multithreaded automated tests?

One more thing I have to say: I am appalled that 90% of the times automated tests are executed with a single client thread... I have seen too many times multithreading issues surface during the first phases of a live application.

Java Collections, some important facts

Here the main entry point, with an excellent tutorial by Joshua Bloch.

Collections can be: Set (TreeSet, HashSet), List (Vector, LinkedList), Queue (LinkedList), Map (HashMap, TreeMap, LinkedHashMap)

Some implementations are Synchronized (Vector), other no (ArrayList)

Collections provide Enumeration or Iterator to scan them.
Use Iterator when you might want to make changes to the collection, use Enumeration when R/O. You have also ListIterator

java.util.concurrent package provide thread-safe optimized implementation of most collections.


ArrayList and Vector use a dynamic array as an implementation,
LinkedList uses a doubly linked list, and it's faster for insert/delete

Queue: FIFO
Stack: LIFO



Interview questions here:
http://www.interview-questions-java.com/java-collections.htm

Sunday, October 3, 2010

Europass CV, how to write your CV in a standardized way

I have been thinking of making a "live, searchable CV" using some a data representation format (NOT XML that I hate) and some Groovy report thingie...

I am just tired of having to answer all those questions "how may years of WebLogic or EJB do you have?" ... just annotate each project with the technologies used an run a report like:

select sum(p.duration), p.technology_used from myprojects p group by technology_used;

My sister told me that in EU this is the Europass CV standard (funny that nobody seems to enforce it in the IT recruiting world, and each agency comes up with its own model, so that they are completely non-interchangeable and you have to keep duplicating your effort... thanks god we are the IT specialists! )

https://europass.cedefop.europa.eu/europass/home/hornav/Downloads/TechnicalResources/XML.csp

I am planning to investigate it and eventually extend it for my purposes.

Also, to produce a standardized report of you languages (I mean English, French...) knowledge, use this standard:

http://europass.cedefop.europa.eu/europass/home/vernav/Europass+Documents/Europass+Language+Passport.csp

How to produce your own video with CC (closed captioning)

Just investigating the options...

A free Screen Capture tool is http://camstudio.org/ , very nice.
He sells this http://www.podcastautocue.com/ tool to annotate your videos...

This are instructions on how to closed captioning (CC) a video on youtube:
http://www.youtube.com/watch?v=kfPW9uXPQPA&feature=related

the online tool looks a bit cumbersome to me, too many manual hacks.

This solution http://captiontube.appspot.com is also available, and seems to me simple and cool.

A paid solution is Sony Vegas Movie Studio, it's only a few bucks:

http://www.sonycreativesoftware.com/moviestudiohd


There are 2 formats: SubRip and SubViewer... SubViewer 2.0 seems better because it supports line breaks.

I have seen people using "BB flashback", they seem happy. It's a paying product though.

Saturday, October 2, 2010

Video killed the Email star

Yesterday I have seen a demo of http://screenr.com/ , you create a video and email or tweet it, the video stays archived.

The person who has shown this to me is a Pakistani IT entrepreneur, http://www.rehan.com/ , he says he does all his communication on videos, instructions to his collaborators and especially training.

His employees are asked to use videos for everything, so when one leaves another can watch the videos he left behind and catch up.

No communication is private, everything is public and archived.

Not everybody like this, in fact this diminishes the power of the individual and make people more replaceable - which is sad from the individual perspective but good for the company.

In fact, I believe that at least 30% of IT projects problems stem from Information Retention from people who keep things as less documented as possible to increase their personal influence. But if you say so out loud you will not be very popular.

He also showed me Khan Academy, these people are great, BTW they need help so if you have spare time you can assist them:



I love the idea of creating YouTube tutorials for Java, WebLogic and WebServices.
I see that even Oracle has started putting videos on YouTube.

And now, enjoy this wonderful song:



we can't rewind we've gone too far!

Friday, October 1, 2010

The Beauty of JOIN(T)S

I don't think that the majority of Java Developers know that
( see http://en.wikipedia.org/wiki/Join_%28SQL%29 )
in nature there is an incredible number of JOINs :

INNER JOIN
IMPLICIT JOIN
EQUI JOIN
NATURAL JOIN
CROSS JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN
SELF JOIN

Of course if you think of a JOIN in terms of SEX, there are a lot of Kamasutra positions here to try (I am curious about the EQUI: does it refer to a horse? Jeez! Anyway I am an expert in SELF JOIN).


Most likely you will never use ALL of them, but when you struggle with a wrong result set it's good to know that you have many options to try - and then give up and start using a ORM tool.

And here is a NORMAL JOIN

and instructions on how to use it: http://www.seedsfromamsterdam.com/joint.html
(long live Amsterdam, one of the most beautiful cities on Mother Earth)

SOA stuff to keep you warm in winter

especially if you shove them in the stove :o)

A general overview here:
http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29


Plenty of patterns available here:
http://www.soapatterns.org/


Plenty of podcasts here:
http://itunes.apple.com/podcast/onsoa/id278745478

And the usual book to read before you go to bed:

http://www.amazon.com/Design-Patterns-Prentice-Service-Oriented-Computing/dp/0136135161


I am reading the Thomas Erl book, I am not overly impressed, I think the same things could be said in much less and simpler words.

Buy that hardware

As a consultant, I am often faced with starting a new project and being assigned insufficient hardware.

And spending anything between 10 and 30% of your time watching an hourglass.

And having painful context switches when trying to do something else while waiting.

And accumulating neurosis.

My experience is that, most of the time, your complaints will not be heard. Or they will be taken care of 2 month later, when the damage will already be humongous.

I never understood why managers don't realize how vital it is that developers have top notch equipment. I assume that this is because all they do is IE, Word and Excel and they are never faced with running Eclipse, XMLSpy, Word, Firefox, OracleXE and a WebLogic Cluster on the same desktop.

Some of them come up with funny recommendations like "why do you code in Eclipse, you can use Notepad instead". Or "why can't you deploy your code to the integration box". Getting mad will lead you nowhere. Stay cool.
This is the way things work in IT. Nobody would ever recommend a surgeon to use a kitchen knife instead of a scalpel, but in IT everything can happen.

So, my only recommendation is: buy your own hardware and develop on it. You can buy a top box with the money you make in 2 days. Or your extra 4 GB RAM with half a day salary. You can still sell it at the end of the project.

No point in fighting windmills. Find your way around.