12/29/05
Now, I am not a designer, not even a web designer but I am a web developer. Therefore, I can not ignore the CSS revolution. It is, definitely, no breaking news that designing with HTML tables and 1 pixel "clear" gifs is a thing of far past. Alas, too many websites still hold to bad old way. I decided not to be one of those old-timers about a year ago and that's when my search for enlightement began.
Now, it was not an easy path. First, as I mentioned, I am not a designer so it was not high on my priority list, second - I had real hard time finding a good book that would make the learning curve less steep. I think I tried all the CSS books available. Most of them ended up beeing language references of some kind. None of them too useful. There was more on the Net than in these books. Not much on the net, either, though. At least - not easily available.
And then, today, while looking for something entirely different at Borders, I ran into Zen of CSS Design book. I loved it. Well structured, well written, written by a person who clearly knows what he is talking about. The information is very concise and to the point. And, last but not least - the book quality is awesome.
If you want to learn more about semantic, CSS-based page design, you should check this book out.
Two thumbs up.
posted by irakli, 18:12 | link | comments
12/28/05
If you are as picky with keyboards as I am, then there is something you may like and the name of it is Logitech diNovo Media Keyboard. Now, it's not just the awesomely cool numeric pad (with termomether, clock and Smart Calculator mode) or the innovative design or the insanely cool look.
You see, I am (and you should be, too) very picky about how a keyboard feels. I guess I was spoiled by the high quality of Apple keyboards. I really need that the keys be soft, stable and comfortable. Quite honestly very few keyboards meet these criterias. Most of the keyboards are clamsy and cheap (not by price, by quality). diNovo is a lucky exception. It feels great, it drives great.
Two thumbs up. Great job, Logitech! Highly recommended. A must have.
posted by irakli, 22:29 | link | comments
I have purchased Ajax In Action from Manning a while ago and tried to read it, several times. In vain. And not due to the lack of interest, I must say. A brief look was very disappointing and I could not make myself to spend precious time on it.
Anyway, I finally managed to get to it. After all, bad or worse, I could not ignore it, or so I thought.
For the love of God and yourself - do not waste your money and time on this piece of crap!
God! I have never seen worse book from Manning. Absolutely useless, terirble writing, stupid narratives and huge. Costs a lot, too. I would give it away but I can not remember anybody who I hate so much to give this horror to.
Very dissappointed.
posted by irakli, 14:30 | link | comments
Useful code snippet for your start.sh scripts:
for f in `ls $BASE_DIR/lib/*.jar`
do
CLASSPATH=$CLASSPATH:$f
done
export $CLASSPATH
posted by irakli, 13:03 | link | comments
12/27/05
...is when somebody does something so f..in mean, you want to cut his (or her) throat right there, right then but instead you smile warmly and say through your teeth "thank you. I really appreciate you doing this" ............ and they actually believe it!!!
There is no limit to human stupidity, indeed.
posted by irakli, 18:32 | link | comments
12/21/05
Everybody knows about 192.168.* but it is not the only one. Actually, there is an RFC: #1918 that controls this, and the winning "combinations" are:
10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
posted by irakli, 11:50 | link | comments
12/20/05
Sometimes you really want to track which other methods are calling/invoking a particular method, at runtime. There is a quick and dirty way of doing it that I find pretty nifty and decided to share, in case you are not already familiar with it. In this method, you can track the caller by analyzing the stack trace.
Let's look at an example. Today I wanted to track who is opening connections to a database in a particular scenario/flow. I created a "proxy" class, intentionally named DriverManager (but not java.sql.DriverManager by my.package.DriverManager) to obscure the "REAL" one and do some monitoring.
Here is the class, and I hope the code is self-explanatory:
public class DriverManager {
public static Connection getConnection( String uri ) {
try {
throw new Exception("GettingStackTrace");
} catch ( Exception ex ) {
StackTraceElement[] elements = ex.getStackTrace();
StackTraceElement element = null;
element = elements[1];
System.out.println ( "Connection requested from method:"
+ element.getClassName() +
"." + element.getMethodName() );
}
Connection con = null;
try {
con = java.sql.DriverManager.getConnection(uri);
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
}
posted by irakli, 09:04 | link | comments
12/17/05
I ran into this problem more than enough times, during the last year and I am tired remembering the solution, each and every time. So, I am going to post it here, for my own sake and for the sake of those who may find it here and bless me for being so kind (heh).
Anyway, here it is:
MySQL has changed password hashing mechanism starting from version 4.1 and if you are trying to use any "older client" (including PHP 4 or the pre-last MySQL driver) you will get an error of the type: #1251: Client does not support authentication protocol requested by server; consider upgrading MySQL client.
You thought you were screwed, did not you? :) Not entirely. Those folks @ MySQL are definitely nuts, for changing password hashing, but they are not THAT crazy, after all. They did leave a way out and here it is.
When you add a user, in MySQL 4.11 and newer, with a command like:
GRANT ALL PRIVILEGES ON dbname.* TO user@localhost IDENTIFIED BY 'secretPassword';
It will create password entry with new hashing and your "old" client will not be able to authenticate. But, if you run a command like the following afterwards:
set password for 'user'@'localhost' = OLD_PASSWORD('secretPassword');
it will update the appropriate entry with the old hashing and everything will just work, even with your poor, old, "stupid" client.
enjoy
posted by irakli, 23:45 | link | comments
12/12/05
Please, take a look at this and then this.
How many similiarities were you able to find?
It's such a shame! Especially, coming from a prominent Jakarta project. At least, they could have written a decent tutorial, instead of this abracadabra bullshit.
So much for the "general-purpose tool-building factory factory factory "
/me *SIGHS*
posted by irakli, 09:36 | link | comments
12/10/05
There are several books about Subversion, some small some huge. Yet, none of them gives a 5 minute get-going guide. Most of the developers are seasoned CVS users, so we do not really need a tirade about version control - just get us going!
And (I can hardly stress this enough) we'd really like Subversion to authenticate over SSH. Leave that "pasword db" (in essence - open text file) or Apache Module bullcrap, to somebody else. Neither do we need the WebDav for version control - thank you very much, but no.
The last time I set up a SVN repository (accidentally - my first time, too) it took me looking through 4 different books and a week's work on and off. Today I needed to do it, again and I found out that I did not remember much of the last experience. Well, it did not take me a week, but still more than I would want to spend on it. Anyway, to save myself time, in the future and in hopes of this being useful for folks who don't want to read 4 books, here is how it is done, on Unix (Windows can get lost, as far as I care):
1) Get the source or a binary from http://subversion.tigris.org
2) If you got a binary - you know what to do. If you have a source tar, either read the INSTALL doc that came with it or just do the usual
"./configure", "make", "make install"
that's what I did - I was too lazy to read and it worked, so - it may work for you, too.
3) Check that it installed by running:
svn --version (client)
and
svnadmin --version (admin)
4) Create a repository by typing:
svnadmin create /home/svn
(the path of your repository will be /home/svn)
5) Let's import a module, now:
go to the source tree of whatever you want imported and type:
svn import -m "Importing my module" . file:///home/svn/mymodule
the dot after the comment is what you are importing (current folder, in this case)
and the next parameter is the svn URL of where to import your module.
6) Go to /home/svn/conf/svnserve.conf, enable (remove comment) the General section and under it set:
anon-access = none unless you want your repositories to be viewable (not editable) by anonymous users.
7) Grant read/write rights to the developer team:
Put your developer accounts under some group with a command like:
usermod -G devgroup steve
and then issue a self-explanatory series of commands:
chgrp -R devgroup /home/svn
chmod -R 770 /home/svn
chmod g+s /home/svn/db (or g+t for BSD)
after that any unix user that is in the group devgroup, on the server,
can checkout the code by:
svn co svn+ssh://steve@antiadmin.com/home/svn/mymodule
That's it. If this short guide is not clear enough for you, feel free to read 4 or 5 books about Sunversion. I'd recommend to start with the Pragmatic Version Control with Subversion, from the Agile guys. It's the shortest and makes more sense than the other, larget books. Maybe you will need just one book, if you start with this one.
cheers.
P.S. The free book on the Tigris site is a piece of crap. Don't waste your time. It's a classic case of "you get what you pay for". Sorry - just being honest.
posted by irakli, 22:18 | link | comments
12/09/05
If you think about it, it is pretty pathetic that as people get increasingly estranged to each-other, in the real life, they show more interest in Social Web (or whatever other fancy name the "celebrity" jerk bloggers come up with to satisfy their unhealthy egos.)
Logical, yet very pathetic and sad.
posted by irakli, 23:36 | link | comments
12/07/05
iTunes Store launched TV Shows service several months ago. Initially it was just four shows but today the number drastically increased. It seems like it is becoming real thing, which is very exciting. TV has to go online. It's a shame how much behind TV industry is compared to everything else.
posted by irakli, 01:23 | link | comments
12/05/05
Have you seen the
Dirty Little Secret video from
The All-American Rejects band? I can't help thinking that it may well be greatly inspired by the
Ning Confess
posted by irakli, 21:50 | link | comments
12/02/05
Sun features an interview with Victoria Livschitz about the next-generation language: Metaphors.
To tell you the truth, IMHO, it is not going to make it. I am not an expert of architecting new programming languages, but it looks to me as just another artificially born, intellectually struggled, idea. It does not feel natural. Maybe it's just me.
Anyway, I am going to give Victoria this much, if this new language ever makes to mainstream, at least she is much cuter than our much respected James Gosling :)
posted by irakli, 16:38 | link | comments