<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3467635766862346474</id><updated>2011-11-28T01:03:36.868+01:00</updated><category term='jboss'/><category term='xml'/><category term='jee'/><title type='text'>Obiecte</title><subtitle type='html'>Petru Dimulescu's objections on software</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>53</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-2235360914108779807</id><published>2011-11-14T20:09:00.001+01:00</published><updated>2011-11-14T20:23:01.077+01:00</updated><title type='text'>about oneiric ocelot</title><content type='html'>No... Ubuntu is becoming less and less usable.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Where is my clock, I don't have a clock applet anymore. I used to be able to copy/paste the current date, no longer possible -- I am actually having an instance of xclock open all the time, can you believe that? I mean, damn, you really need to have the clock somewhere on that computer, you can't really say, I didn't need that anyway, at least I have the applet that says that I'm connected to ethernet, that's so cool.&amp;nbsp;&lt;/li&gt;&lt;li&gt;You can't edit the menu that backs that freaking unity taskbar. I just installed argouml by downloading and unzipping. I used to launch the gnome menu editor, alacarte, and create a new app, stick an nice icon to it, and, there!&amp;nbsp;&lt;/li&gt;&lt;li&gt;You can't change the background colors of windows, you used to be able to do that, what happened? There used to be software for doing that what on the earth changed so badly that they couldn't adapt the old gui for editing.&amp;nbsp;&lt;/li&gt;&lt;li&gt;I really don't like the unity dashboard. I do like the fact that its design is cooler than the old gnome panel, kind of transparent, but that's all. But if that's the price to try to look like apple, sure, why not. It would be so cooler if it integrated functionality of gnome-do, it does sport a search area which is kind of dumbed-down version of gnome-do.&lt;/li&gt;&lt;/ul&gt;Otherwise, the machine is stable, doesn't crash, thanks Linux.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-2235360914108779807?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/2235360914108779807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=2235360914108779807' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2235360914108779807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2235360914108779807'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2011/11/about-oneiric-ocelot.html' title='about oneiric ocelot'/><author><name>didymos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-4512865531374447981</id><published>2011-10-13T16:02:00.000+02:00</published><updated>2011-10-13T16:02:14.864+02:00</updated><title type='text'>Good bye Ubuntu 11.04, hello Onyric Ocelot</title><content type='html'>So glad a popup just invited me to upgrade my Ubuntu to 11.10. The 11.04 version was one of the worst ever; I still have to do alt-f2 and write metacity --replace in order to have windows borders because I don't want the new unity thing, I like my gnome as it was with a menu, terminals and stuff and I have my desktop setup for some time now, configurations are there.&lt;br /&gt;&lt;br /&gt;I don't have borders to windows, I have to write that line by hand every time my desktop starts. Yes there should be a workaround for this but should these things happen? You really need to be a Linux unconditional to not really care about this. And I am.&lt;br /&gt;&lt;br /&gt;It does pay off: I am currently playing with Hadoop and neeed to start, stop, follow logs, ssh in and out, I would kill myself on a windows. I am so glad I have my Linux box.&lt;br /&gt;&lt;br /&gt;So currently upgrading... hope this new version is stable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-4512865531374447981?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/4512865531374447981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=4512865531374447981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4512865531374447981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4512865531374447981'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2011/10/good-bye-ubuntu-1104-hello-onyric.html' title='Good bye Ubuntu 11.04, hello Onyric Ocelot'/><author><name>didymos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-2210823700103998219</id><published>2011-09-16T22:58:00.000+02:00</published><updated>2011-09-16T23:26:40.690+02:00</updated><title type='text'>Kindle annoyances</title><content type='html'>Let me just start with this, I love my Kindle. In fact I love the more generic fact that I can read electronic text on a device that does not blow my eyes off with brilliance and which has great autonomy (you cannot really exhaust the battery of the Kindle even if you go on a two-week holiday and do only reading -- though I suspect that if you insist of browsing large image-filled pdf's back and forth you might eventually get to the limit of it. Anyway, great autonomy, no relation whatsoever to the few hours you get with tablets, laptops and such.&lt;br /&gt;&lt;br /&gt;Still I was born into this world to show off that it is basically flawed and doesn't work and whine about it. So here I go.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Fonts!&lt;/h3&gt;On the Kindle DX model you only have one font. Could it get any sadder? Sure, let's stick to basics! One font for reading Mobi books, that means those books which are actually text. Of course if you upload your PDF, you read whatever that book happened to be typed in.&lt;br /&gt;&lt;br /&gt;Only one font, with 3 possible sizes, but only one font? Given that we're living the epoch of invasion of barbarian and civilized fonts are overtaken by open source versions that everybody uses even on webpages, custom fonts, beautiful fonts, old and new, modern and renaissance-looking fonts. I remember the first time I opened WordPerfect (not Microsoft Word, Corel's Wordperfect on a Windows 3.1, which was so much better) and resized a letter to a really large dimension and was so amazed by the fact the the letter was actually drawn, with circles, straight lines and the like, as opposed to bitmap. But those are memories. The newest gadget doesn't allow you to change fonts.&lt;br /&gt;&lt;br /&gt;And to be honest, I'm not a great fan of the one and only font availble on Kindle. It's readable yes but not that great. Fortunately it's not some variant of Times which this planet is truly sick of and should be definitively erased from the list of fonts that you could legally use in a book or a web page. Same goes for Helveticas and Arials of all kinds, of course. The Kindle font features pretty wide-lettered types, and single quotes of books are straight lines, not rounded. Reading a Kindle book is not that much a pleasant typographical experience. It is useful, nonetheless, I've said it too many times already, but that page is certainly not beautiful by any standard.&lt;br /&gt;&lt;br /&gt;When I say beautiful it means a lot of small, sometimes difficult to notice features, like the ones Tex uses for typesetting its text, slightly increasing spaces between letters or rows in order to better fill the page while the text still seems to have the same overall look, things like that.&lt;br /&gt;&lt;br /&gt;No, you really feel the need to change that font, and you can't. Actually I saw some hacks of smart people out there on the web but haven't had the courage to try it.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Impersonal books&lt;/h3&gt;A true book is a beautiful object. Correction: a book &lt;i&gt;may&lt;/i&gt; be a beautiful object. It is manoeuvrable, you put it next to your lamp when you go to sleep, show it to friends, lend and borrow. A Kindle book is just a text item in a list of text items. Even if the book has graphical cover, you rarely get to see it. It is true that the particulars of the eink technologies make it more difficult to create the visual impression of having a colored cover that looks like a book in a shelf, and that you open by putting your finger on it (like you can see on Aldiko or other readers for mobiles).&lt;br /&gt;&lt;br /&gt;Still, a book is a deeply personal object, books are extremely different and have very distinct personalities, despite the fact that they all come down pretty much to black text on light background. All books are text on paper still there are particularities, often related to some special layout and, yes, font!, that an editor might have chosen for a book, which could as well be in some form of adequacy with the actual content of a book. &lt;br /&gt;&lt;br /&gt;The point is that there should be some way of an editor of an ebook to specify some peculiarities for the book. If you just display the same text on the same background, people no longer have the special feeling of ownership and of appreciation that a proper book stirs from them. &lt;br /&gt;&lt;br /&gt;That is not to say that electronic books are doomed. I really don't believe that, especially with the enormous amount of choice you get today in display technologies. Still, ebook readers should be able to display the particularities of a book layout, and ebook editors should pay attention to having nice layouts, interesting font and graphical information which distinguished books from each other so that you can still have that warm feeling of a relationship to a book, which is actually an object, a beautiful and maybe decorative object that you own.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Navigation&lt;/h3&gt;Let me just start by one remark: I don't have any problem with Kindle not having a touchscreen. Reading, actually reading a book must be done on a clean screen. You can't have a clean screen if you walk your fingers you just kept your sandwich with all over the screen. That being said, those buttons kind of click unpleasantly, I would like them to be softer and require less pressing effort but whatever. I also have the feeling that they are not that resistant, it feels like they will anytime eventually so I press them with a mix of fear and gentleness, but that's subjective, they may last until the end of the universe, as the plastic it's made of is not recyclable and will not reintegrate into nature even after a nuclear war. As of the keyboard, I never saw a less useful input device, which takes quite some space from the overall Kindle. I must have pressed 10 keys ever since I have my Kindle, and that is in order to go to page x. And in order to type those numbers, you must press the key "alt" (how cognitively dissonant is that, given that "shift", the upward arrow, is just left to it). So you kind of have to awkwardly keep the Kindle in your palm and press alt with your left hand's thumb while with your right you try to find the digits -- I personally always press 9 instead of 0, because I am used to keyboards having a backspace key at the rightmost row of digits. That will teach you to want to just go to random positions in your book, next time you'll want to just go to some page you'll think twice. You have to press hard, you need to change the reading position you can't budge those keys just by touching them. But you know, life &lt;i&gt;is&lt;/i&gt; a struggle, basically.&lt;br /&gt;&lt;br /&gt;Ok, now back to the point of navigation: If you have three paperback books you can simply switch between them by just having all three of them on your desk and looking at the right one and then switching to the other. Nothing could be simpler.&lt;br /&gt;&lt;br /&gt;How do you switch between three books on your Kindle? Because you know, you may need to read text for reference, not only novels on the beach. For reference that means that you look here, then in an encyclopaedia, then back to your article then to another book. To say nothing of the fact that in France, I can't have access to internet to consult Wikipedia on the 3g connection of my DX, for I'm not sure what reasons. Internect connection works, as I am able to get books from Amazon by whispersync, still if I just want to open a web page in the embedded browser, well, it doesn't work: Internet connection is not available in your country. I get that iron curtain feeling, like I am in some place forgotten by history which cannot connect to where everybody connects. And I don't think there is really any reason for that, except not really caring about non-american clients, from Amazon.&lt;br /&gt;&lt;br /&gt;And back again to book navigation: try to switch between three books on the Kindle. You go the the "welcome screen", that is the list of books, you select on one. You read what you need, and in order to go to the other work, you go back to the book list, you select your next one. There is no feature which remebers the last two or three items you opened so that you can switch easily between them. Not a problem, that's called ergonomy, it's optional, so you press and click on those side-buttons like there's no tomorrow.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Typesetting&lt;/h3&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-w5QDfq-5rBk/TnO4MaUf0eI/AAAAAAAAA_A/SMQXfFl-mMc/s1600/DSC00268.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-w5QDfq-5rBk/TnO4MaUf0eI/AAAAAAAAA_A/SMQXfFl-mMc/s320/DSC00268.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Thou shalt not allow the question mark to hang alone in utter solitude on its own line, at the leftmost part of it, with all preceding text filling the line above. Even if the space that precedes it is not a "unbreakable space" which has a special code in html, you just put two lines of code in your reader software, you verify that the damn marks ends a paragraph and you will not allow it to break from it. That shouldn't be hard to do. And that is kind of &lt;i&gt;essential&lt;/i&gt; for a book reader which is meant to read books, not a device which just allows you to inspect some text if you're feeling bored but a thing which is marketed as a reader, that means that thing you read with. Not a tablet, not a phone -- a reader! You need to do what you're supposed to do right, and after you finish that stuff, you implement web browsing that doesn't work in foreign countries and mp3 reading that nobodoy uses because we already have so many sources of music. Basically what I mean is that when you design a reader, make sure it, well, reads properly.  &lt;br /&gt;&lt;br /&gt;And I really think you need to do the cool stuff, the proper typesetting, having a sense of type excellence, her royal majesty's layoutting engine, that kind of stuff. The feeling that this is elite reading not just adapting a html renderer to the eink display. How hard can it be, ebooks are often plain text, it's not like you need to display embedded tables, javascript and CSS 3. You hardly get any italics every now and then. It should not be that hard to do. Elegance, you don't have elegance on the Kindle. Nope, sorry.&lt;br /&gt;&lt;br /&gt;I am currently reading my book who has a total of 6355... what? Pages? No, this book, in its paper incarnation could not have more than about 200 pages. It's more like 63555... locations, I guess. The current page is not a page as you might expect, it is called "Locations 1059-78". So I have 9 locations on this current page of mine. So, unless you are a walking CPU, you cannot know at what true page you are, how many pages your book has, except by taking a look at the progress bar which is just at the bottom of the page and which fortunately gives you a rough idea of where you are in the book. Great. There is a fix for small newers Kindles, but not for DX which I bought several months ago, yet I kind of get the feeling it is no longer supported. There is no update for the os, whereas other models, newer models, have 3.0 updates. Well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-2210823700103998219?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/2210823700103998219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=2210823700103998219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2210823700103998219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2210823700103998219'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2011/09/kindle-annoyances.html' title='Kindle annoyances'/><author><name>didymos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-w5QDfq-5rBk/TnO4MaUf0eI/AAAAAAAAA_A/SMQXfFl-mMc/s72-c/DSC00268.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-6972898841865863502</id><published>2011-04-06T23:35:00.000+02:00</published><updated>2011-09-16T23:36:21.943+02:00</updated><title type='text'>I'm being spammed by Le Monde</title><content type='html'>Strange as may seem, I am currently being spammed by Le Monde. The grand journal is sending me mails I hate, about wine and cd offerings which are typical of spam and I cannot unsubscribe from. I haven't consciently subscribed to them, although I did subscribe at some point to receiving daily headlines. I stopped my headlines subscriptions some days ago, but the offerings still come.&lt;br /&gt;&lt;br /&gt;There is a link on the bottom of the mail "Si vous souhaitez ne plus recevoir d'email de notre part: cliquez ici". If you click ici, you just get to a page where I cannot for the life of me find some unsubscribe button. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-6972898841865863502?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/6972898841865863502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=6972898841865863502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/6972898841865863502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/6972898841865863502'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2011/09/im-being-spammed-by-le-monde.html' title='I&apos;m being spammed by Le Monde'/><author><name>didymos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-1363655920362623410</id><published>2011-01-27T22:29:00.000+01:00</published><updated>2011-01-29T12:11:00.617+01:00</updated><title type='text'>Kindle doesn't read epub</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://static.pcinpact.com/images/bd/news/87251-kindle-dx-graphite.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://static.pcinpact.com/images/bd/news/87251-kindle-dx-graphite.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;My new Kindle doesn't read epub. Can you believe that? I haven't even thought about checking the supported file formats. I haven't thought one second that an ebook reader that costs 400 dollars cannot read the open standard of ebooks which is epub.&lt;br /&gt;&lt;br /&gt;Amazon, Kindle's creator, have a proprietary ebook format, called mobi, by buying a French company that created this format. I'm sure it has digital right management done right, encryption and the like.&lt;br /&gt;&lt;br /&gt;But let me tell you, how a random reader will use their Kindle. They will unpack it, look with pride at their new shiny asset, like the plastic reading experience, enjoy the fact that their eyes will no longer explode with LCD luminescence. And, they will go get some FREE ebooks to read them. &lt;br /&gt;&lt;br /&gt;Not buy. No. Not like in the "buying your first book" chapter of the Kindle user manual. That is not what a Kindle user does, no no. Because this Kindle thing is just a machine targetted at making you buy books. I rarely saw a device where you basically couldn't find free material. I used the store which comes installed on the Kindle in order to find some free books, surprise, couldn't find them. There is no "free" category, there is no mention if a book in the listing is free or not, you just have to click on it to see. And, as yet, I haven't found a free ebook on their damn site. Must admit, after a few minutes, I gave up the idea of using their commercial interface to get books, and settled to finding them on my pc and transferring books by usb to the kindle.&lt;br /&gt;&lt;br /&gt;Because I bought that kindle because I want to be able to read scientific articles (mostly pdfs) without going LCD-blind. That's why I bought that device. And I thought I must read some ebooks too, on the way. &lt;br /&gt;&lt;br /&gt;But maybe it is hard to implement, epub reading? Not at all, an epub is basically a zip with some html inside and a few xml's that act as table of contents. There is free software out there, compilable on linux, the kindle is a linux. They just don't want to read epubs.&lt;br /&gt;&lt;br /&gt;Amazon don't want you to read the open standard of ebooks on their device, preferring to lock you on their proprietary mobi format.&lt;br /&gt;&lt;br /&gt;That is a bad thing. Bad for me, for you, and, most importantly, for Amazon. Because Amazon just lost, with this, the most important thing a company can hope to acquire from a client: fidelity. What is fidelity? Fidelity is not buying the best ebook reader (which Kindle probably is) because it is the best ebook reader. That's just normality: they produce it, it's the best, I'll buy it. That's the kind of market mechanics you get when everything's going right for you, as a company, when you're on top of it, your products are best, everybody's buying them because of their quality. That's great, you don't have to win the client's hears, you have their reasonable minds: they will buy your product, because of their features.&lt;br /&gt;&lt;br /&gt;But comes a time, with every individual or organization when they are no long so far on top of it, that any competition is irrelevant, that your product is so great that it will blind users by its sheer magnificence. Comes a time, where you launch a product which is kind of even with others, existing, and your company's survival relies on having bona fide client, aka believers. &lt;br /&gt;&lt;br /&gt;Or, I cannot believe that a company who knowingly excludes an open ebook format from its device can have me as a believer. And if Amazon wants to exchange believers to an illusory momentum for yet another irrelevant proprietary ebook format, well, that's their choice.&lt;br /&gt;&lt;br /&gt;As for me, for just an instant, I looked with less defference to my newly bought Kindle. I thought that, you know, finally, it's just a tool, I will read my pdfs with less eye strain. It's just a tool. That's what it is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-1363655920362623410?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/1363655920362623410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=1363655920362623410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/1363655920362623410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/1363655920362623410'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2011/01/my-new-kindle-doesnt-read-epub.html' title='Kindle doesn&apos;t read epub'/><author><name>didymos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-667592721327152260</id><published>2011-01-16T22:19:00.001+01:00</published><updated>2011-01-16T22:20:37.953+01:00</updated><title type='text'>sony ericsson update service</title><content type='html'>Enormous frustration with Sony Ericsson's Update Service. I have an Xperia Mini X10, came with Android 1.6, I'd like to update to latest Android. I use Linux.&lt;br /&gt;&lt;br /&gt;Update Service is written in Java, on the Equinox OSGI platform which is used by Eclipse too. Isn't that wonderful, that means the application is multiplatform. No. You can only download an exe from their site.&lt;br /&gt;&lt;br /&gt;I really think this kind of release is a shame for any company that's involved in technology in any way. It's really a shame to release a Java application in an exe format that targets windows only. How much would have taken a developer to put it in a zip and have it released so that Linux people can use that application? Several hours, at most. For me, it's the kind of move that really makes me question the respectability of a company.&lt;br /&gt;&lt;br /&gt;Anyway, not being an expert on OSGI and on how to launch the damn application without the exe, I tried to execute it on wine. Didn't work, I installed a virtual box with an xp and spent hours fighting with network card drivers, usb availability issues, only in order to see that the damn application doesn't work anyway, it asks you to press the back button for ever, and insert the usb cable at the same time, after having stopped the phone for "at least" 30 seconds. Some people reported on forums that 30 seconds is not enough somebody took a shower, for 10 minutes or something.&lt;br /&gt;&lt;br /&gt;Anyway, I've pressing that back button for some time, it really doesn't work, argh, I'll just stick to 1.6. Or maybe I'll install a windows partition, what wouldn't I do for that phone with that crap update software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-667592721327152260?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/667592721327152260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=667592721327152260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/667592721327152260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/667592721327152260'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2011/01/sony-ericsson-update-service.html' title='sony ericsson update service'/><author><name>didymos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-7764972628119443524</id><published>2011-01-12T00:53:00.000+01:00</published><updated>2011-01-12T12:01:56.174+01:00</updated><title type='text'>how to tell a fake mail</title><content type='html'>I received three mails, quite serious-looking mails that announce me that I was accepted for a green card application. I have to pay 440 dollars, though.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Subject: U.S. Department of State - Visa Processing Fee Instructions&lt;br /&gt;From: "U.S. Department of State" &amp;lt;us.a.states@usa.com&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you look at usa.com you see it's a bizarre site. Because of the from header, what you see in your graphical email (like gmail) is the prestigious "U.S. Department of State". Never trust that, you can totally make that up. &lt;br /&gt;&lt;br /&gt;Another mail supposedly comes form usafis.org, a true site dedicate to this green card thing. Not really, though, look at the headers:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Subject: USAFIS Organization - Diversity Visa (DV) Program winner&lt;br /&gt;From: "usafis.org" &amp;lt;usafis.org@post.com&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So I see usafig.org graphically in gmail, but the mail address is registered to post.com which is yet another dummy site.&lt;br /&gt;&lt;br /&gt;In gmail, you click on the little arrow right of "reply" and you get some more options, among which "show original", where you can see all the headers in detail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-7764972628119443524?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/7764972628119443524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=7764972628119443524' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/7764972628119443524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/7764972628119443524'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2011/01/how-to-tell-hoax.html' title='how to tell a fake mail'/><author><name>didymos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-5540047710351248530</id><published>2011-01-10T08:46:00.000+01:00</published><updated>2011-01-12T11:48:43.867+01:00</updated><title type='text'>scala fsc failure : could not connect to compilation daemon</title><content type='html'>On several different Ubuntu versions I tried the Scala 2.8.1-final script interpretor, I get the following exception:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;dadi@bufon:~/work/invat_scala$ scala ScalaApp.scala &lt;br /&gt;Could not connect to compilation daemon.&lt;br /&gt;&lt;br /&gt;Exception in thread "main" java.lang.Exception: fsc failure&lt;br /&gt; at scala.tools.nsc.CompileSocket.fatal(CompileSocket.scala:50)&lt;br /&gt; at scala.tools.nsc.CompileSocket.getPort(CompileSocket.scala:122)&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It's a bug, obviously. There are several strange proposed solutions on the web, make a wrapper script, change /tmp/scala directory permission... I got around that by starting fsc compiler manually (fsc, the fast scala compiler, is a compiler server for faster compilation):&lt;br /&gt;&lt;pre&gt;dadi@bufon:~/work/invat_scala$ fsc&lt;br /&gt;Could not connect to compilation daemon.&lt;br /&gt;&lt;/pre&gt;Still, it launched, despite the error message:&lt;br /&gt;&lt;pre&gt;dadi@bufon:~/work/invat_scala$ jps&lt;br /&gt;16617 Jps&lt;br /&gt;16589 MainGenericRunner&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and now you invocation of the scala with a script should work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-5540047710351248530?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/5540047710351248530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=5540047710351248530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5540047710351248530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5540047710351248530'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2011/01/scala-fsc-failure-could-not-connect-to.html' title='scala fsc failure : could not connect to compilation daemon'/><author><name>didymos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-5019648847651749731</id><published>2011-01-03T22:41:00.000+01:00</published><updated>2011-01-04T11:48:28.025+01:00</updated><title type='text'>open office: hide headers on the first chapter page</title><content type='html'>You don't want the page number and other things you may have in your page header to show on the first page of a book or on the first page of a new chapter, right? Right. In Word, there's an option to check somewhere, in OpenOffice, there isn't -- didn't they think you may need something like that?&lt;br /&gt;&lt;br /&gt;In fact there is, it's just different. Edit the style of your heading style, the heading that jumps to a separate page (called Heading x normally), that starts the new chapter. And in the style properties, at the text flow tab, do something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_V1YKoacmuGM/TSJCVHwyvWI/AAAAAAAAAT8/erd8-9uokds/s1600/Screenshot-Paragraph%2BStyle%253A%2BHeading%2B1.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="230" width="320" src="http://3.bp.blogspot.com/_V1YKoacmuGM/TSJCVHwyvWI/AAAAAAAAAT8/erd8-9uokds/s320/Screenshot-Paragraph%2BStyle%253A%2BHeading%2B1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The thing is that in OpenOffice you have page styles to (complementary to character and paragraph styles that you had in Word). So that's a way of saying that the heading should come with a specific page style. Don't worry the page style that automatically follows the 'First Page' is the regular page. It's more generic and more elegant, when you come to think of it, than in Word.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-5019648847651749731?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/5019648847651749731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=5019648847651749731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5019648847651749731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5019648847651749731'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2011/01/open-office-hide-headers-on-first-page.html' title='open office: hide headers on the first chapter page'/><author><name>didymos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_V1YKoacmuGM/TSJCVHwyvWI/AAAAAAAAAT8/erd8-9uokds/s72-c/Screenshot-Paragraph%2BStyle%253A%2BHeading%2B1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-3695199651112344418</id><published>2010-12-01T13:23:00.000+01:00</published><updated>2010-12-01T14:21:06.889+01:00</updated><title type='text'>the best possible world</title><content type='html'>Doing Java, really doing Java is like being a mature, responsible person. You have the choice, Lord knows you do have the choice between uncountable frameworks and stacks and servers and languages. You hesitate between the sweet temptation of the hottest sexiest web scaffolder and the austere and grave commendments of the JEE standard that thou shalt worship as a true jvm bytecode producer.&lt;br /&gt;&lt;br /&gt;None of the two extremes are perenial. Once the lust is gone, what remains of that new and shiny framework is a taste of immaturity and a lived experience, which, while good to have lived, you wouldn't necessarily repeat it on hopefully stable production serious project.&lt;br /&gt;&lt;br /&gt;The austerity, on the other hand, only too often proves itself empty exercice of authority. Just count the enormous amount of architectures and standards, EJB2, everything starting with WS-* just too see that all people finally use is Spring and Hibernate and Rest. And that the gray paternal figure that would have you restart the EJB container for the rest of your life only turns around and says, yes, hibernate is what I really meant by entity beans. But there must be something and irrevocably good in all those standards, right? All this culture we bought and learned to adhere to. JSP? Latest JEE spec (6) lets JSP go and uses Facelets instead. Maybe the servlet spec, yes, that one everybody uses, that one cannot be wrong, that one is the truth. Unless you use the Play framework which doesn't care about the servlet api. Where is the truth, then?&lt;br /&gt;&lt;br /&gt;Maybe the Java language itself which about everybody agrees to say that it could be improved in so many ways, just look at Scala, Groovy and the like. Maybe the jvm which, portability aside, is at odds with the CLR. Maybe, what?&lt;br /&gt;&lt;br /&gt;No, there is nothing sparkling true and divine in the Java ecosystem. It's only a life-like system where you have to live by correctly discerning, where there is choice, where a wrong decision may prove dangerous. And where the only truly sparkling standard may be just you. It's only the best possible software world for now, and good luck making your way through it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-3695199651112344418?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/3695199651112344418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=3695199651112344418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/3695199651112344418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/3695199651112344418'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2010/12/doing-java-really-doing-java-is-like.html' title='the best possible world'/><author><name>didymos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-5718928644566961267</id><published>2010-11-12T14:54:00.000+01:00</published><updated>2010-11-12T15:18:45.405+01:00</updated><title type='text'>Gallica reader</title><content type='html'>Reading a book from Gallica has recently become a nicer experience. The new flash reader, made for embedding a book widget into blogs and similar, is a lot more pleasant than the standard HTML-based reader. &lt;br /&gt;&lt;br /&gt;Although not used as default on the gallica site, the flash reader can allow you actually to enjoy browsing a book. The bright white of pages still makes long reading sessions quite hard on your eyes, but the idea is there. The good thing is that you can maximize the widget on your entire screen and forget about scrolling horizontally and vertically, just browse, and, if that brilliant black on white allows you to, read.&lt;br /&gt;&lt;br /&gt;&lt;div style="padding-top: 8px;"&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="LecteurExportable" width="600" height="390" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab"&gt;&lt;param name="movie" value="http://gallica.bnf.fr/flash/LecteurExportable.swf"&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="wmode" value="window"/&gt;&lt;param name="FlashVars" value="ark=bpt6k114280w&amp;lang=fr&amp;mode=dp&amp;showArrows=1&amp;bgColor=0&amp;autoFlip=0&amp;startPage=5&amp;widthWidget=600&amp;heightWidget=390" /&gt;&lt;embed src="http://gallica.bnf.fr/flash/LecteurExportable.swf" name="LecteurExportable" width="600" height="390" allowScriptAccess="always" wmode="window" FlashVars="ark=bpt6k114280w&amp;lang=fr&amp;mode=dp&amp;showArrows=1&amp;bgColor=0&amp;autoFlip=0&amp;startPage=5&amp;widthWidget=600&amp;heightWidget=390" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-5718928644566961267?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/5718928644566961267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=5718928644566961267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5718928644566961267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5718928644566961267'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2010/11/reading-book-from-gallica.html' title='Gallica reader'/><author><name>didymos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-8142780100765130309</id><published>2010-11-12T11:24:00.000+01:00</published><updated>2010-11-12T11:57:12.627+01:00</updated><title type='text'>give buzzwords a rest</title><content type='html'>I used to hate it when a Kant professor explained Kant to the philosophy newcomer that I was using Kant jargon. I never understood why people that are expert in a domain don’t have the courage to explain their domain of expertise leaving the security of their established vocabulary and adopting a more day-to-day accessible wording. I am always sceptic about people that explain REST using words like “resource”. The world abounds with people that have learnt object-orientation, have maybe worked on entity beans. I know what a thing, an object and an entity are, what is a resource then, what is this new marvelous thing?&lt;br /&gt;&lt;br /&gt;Resource-oriented architecture: &lt;i&gt;“A resource is anything that’s important enough to be referenced as a thing in itself”&lt;/i&gt; (Richardson&amp;amp;Ruby, Restful web services); a resource is a thing, then, an object, an entity. Apparently you can’t win the everlasting game of redefining simple concepts and transforming them into buzzwords.&lt;br /&gt;&lt;br /&gt;If a resource is an object, than ROA, resource-oriented architecture is mere object-oriented architecture, which is pretty known and established technology. The notable difference would be that remote access to those resources is done by HTTP jargon. That means that HTTP methods are used for the four basic CRUD operations: create, retrieve, update, delete. You’ll use HTTP GET to get, PUT to create a new object (ahem, sorry, I meant “resource”), POST to update and DELETE to, hum, delete.&lt;br /&gt;&lt;br /&gt;So export your domain logic using a HTTP URL-based web services. That’s it. It wasn’t hard. It’s not all honey, the method has disadvantages. A facade exposing RPC-style wrapping your application resists refactoring. When application needs to evolve, your business logic may have to evolve with it, your object/resources/entities may need to be refined, aggregated or otherwise refactored. All clients of your webservices need to rewrite their access. A less object-oriented RPC facade exposed as a web-service may be more stable in that case.&lt;br /&gt;&lt;br /&gt;The WSDL specification has a &lt;b&gt;types&lt;/b&gt; section where you explain what data comes into and gets out of your SOAP web services. Which makes it possible for automated client generation, given a WSDL. I haven’t understood how you make that on REST, given that there is no way to specify types. Or publish the restful webservices to some registry. I guess you just make that GET in your browser, you look for yourself  into the resulting markup, and infer that &lt;id&gt; &lt;id&gt;is an identifier, &lt;name&gt; &lt;name&gt;is a string name and &lt;age&gt;, &lt;age&gt; is well, the age, of course. What about something less trivial and more domain-specific data?&lt;br /&gt;&lt;br /&gt;&lt;/age&gt;&lt;/age&gt;&lt;/name&gt;&lt;/name&gt;&lt;/id&gt;&lt;div&gt;&lt;id&gt;&lt;name&gt;&lt;age&gt;&lt;br /&gt;I am hereby initiating a buzzword exposer:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. SOA (service-oriented architecture):&lt;/b&gt; turn the software into your enterprise into exposed web services and script them.&lt;br /&gt;&lt;br /&gt;The software in your house may be : a java-based swing program that talks to a database; a perl application that checks some files and sends stuff by ftp; they are not “services”, that means, remotely callable software, using an established RPC interace; once you have that, you have a registry of remotely callable functionality that is valuable in your enterprise; that means that you can script them. One complicated way of doin that is by using complicated xml-based pipeplines of calls. I forgot the name of the xml standard -- was it BPMN or something ? -- that could call SOAP webservices and organize it into a workflow.  I don’t think it’s even worth the effort of googling it up – for god’s sake, a program is a worflow, why use XML to write programs? The simpler preferred way is making a mere groovy script in which you just call webservices around your enterprise, mash up results into reports maybe, and creatively use all those deployed services, by simply calling them as if they were a local api.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. ROA (resource oriented architecture):&lt;/b&gt; don’t use facades (services with methods), rather expose the business objects (and while you’re at it, rebaptize them as “resources”) using established HTTP methods.&lt;/age&gt;&lt;/name&gt;&lt;/id&gt;&lt;/div&gt;&lt;div&gt;&lt;id&gt;&lt;name&gt;&lt;age&gt;&lt;br /&gt;&lt;/age&gt;&lt;/name&gt;&lt;/id&gt;&lt;/div&gt;&lt;div&gt;&lt;id&gt;&lt;name&gt;&lt;age&gt;3. &lt;b&gt;OOP (object-oriented programming)&lt;/b&gt;: what is the essence of object orientation. Polymorphism? I don't think so. As strange as it may seem, I don't think inheritance, useful as it may be, is essential to object orientation. I am not going to list all the known OOP features, I will just come out and say it: OO essence is grouping data with the code that processes that data. In the topology of your software application, the distance between the data and the processing code should be minimal. This overall minimality constraint imposes the emergence of entities, or classes. &lt;/age&gt;&lt;/name&gt;&lt;/id&gt;&lt;/div&gt;&lt;/id&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-8142780100765130309?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/8142780100765130309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=8142780100765130309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/8142780100765130309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/8142780100765130309'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2010/11/rest.html' title='give buzzwords a rest'/><author><name>didymos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-2429245582048856975</id><published>2010-05-25T14:06:00.001+02:00</published><updated>2010-05-25T14:35:19.884+02:00</updated><title type='text'>gedit</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_tANlrL3PmF8/S_vDGQi90mI/AAAAAAAAAuc/KwIUfUS6wUg/s1600/gedit-snapshot-fulscreen.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 256px;" src="http://4.bp.blogspot.com/_tANlrL3PmF8/S_vDGQi90mI/AAAAAAAAAuc/KwIUfUS6wUg/s320/gedit-snapshot-fulscreen.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5475184284287226466" /&gt;&lt;/a&gt;&lt;br /&gt;I love &lt;a href="http://projects.gnome.org/gedit/"&gt;gedit&lt;/a&gt;. Never really could make up my mind to join the elitist groups of emacs or vi users that spend half their programming time customizing their editor. And maybe the other half looking up on people that haven't customized it in the exact same way. Heavens know I am not a windows fan, but I do think at this point a time, an editor should use Ctrl-C for copying, Ctrl-V for pasting and Ctrl-X for cutting. No exception. Any editor should do that. You should be able to take your cursor wherever you want on the screen, without this being called "real-time editing" or some other super-technology or sci-fi feat. No, that's normal, your cursor blinks on the screen, that's not magic, that's normality. You press the up arrow, it goes up, you press the down arrow it goes down. Not 'L', 'K', or other strange key.&lt;br /&gt;&lt;br /&gt;So yes, editors should allow people to edit text. And some other nice features. Syntax highlighting is nice. Autocompletion, bare or language-aware. Compiling the current file. That kind of stuff.&lt;br /&gt;&lt;br /&gt;AND. An editor should be good-looking. Good-looking is good. Good-looking is desirable. Anything should be good-looking, and an editor should be good-looking too. If you have a good font (like &lt;a href="http://www.levien.com/type/myfonts/inconsolata.html"&gt;Inconsolata&lt;/a&gt;) and a graphic windowing system that does antialiasing, there is no reason whatsover, for which you should have rugged fonts, bitmap fonts or what not.&lt;br /&gt;&lt;br /&gt;AND. An editor should show light text on dark background. Not the other way around, not until e-ink technology becomes pervasive on our screens. Light text. Dark background. Good for eyes. Eye health is good.&lt;br /&gt;&lt;br /&gt;and. With one keystroke, you should be able to maximize the current text subwindow to the whole screen. I really like that, in Eclipse I press Ctrl-M, in Firefox/Chrome/gedit F11.&lt;br /&gt;&lt;br /&gt;Gedit does these. I use it in order to edit latex, and I prefer it to kile, which is made for latex editing only, and arguably having more functionalities. But kile is so much more cluttered, doesn't come with nice dark-background color schemes; yes you can compose your own, take a few hours off.&lt;br /&gt;&lt;br /&gt;It's not easy to make a nice editor but the gnome guys are doing it. I remember early days with all the KDE vs Gnome fights. I think what makes me prefer Gnome these days is that it is less cluttered, features are essential, and there is a concern for ergonomy. That's important, we are humans interacting with computers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-2429245582048856975?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/2429245582048856975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=2429245582048856975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2429245582048856975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2429245582048856975'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2010/05/gedit.html' title='gedit'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_tANlrL3PmF8/S_vDGQi90mI/AAAAAAAAAuc/KwIUfUS6wUg/s72-c/gedit-snapshot-fulscreen.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-884124635628558228</id><published>2010-03-09T13:56:00.000+01:00</published><updated>2010-03-09T14:16:41.113+01:00</updated><title type='text'></title><content type='html'>Oh yes, stop using whatever you use to edit ruby code and download Netbeans. It takes a half an hour to start but after that you have everything, debugging, dynamic hyperlinking/navigation, auto-completion, type guessing. Incredible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-884124635628558228?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/884124635628558228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=884124635628558228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/884124635628558228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/884124635628558228'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2010/03/oh-yes-stop-using-whatever-you-use-to.html' title=''/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-3248122763994479933</id><published>2010-03-08T19:13:00.001+01:00</published><updated>2010-03-08T19:17:01.141+01:00</updated><title type='text'></title><content type='html'>It's such a pain to use log4r in ruby. require 'log4r'; include Log4R; Logger.new('my').error('ouch') doesn't work. I would have liked a simple way to get it going; I'll stick to some STDERR.puts for now.&lt;br /&gt;&lt;br /&gt;Ruby being a visually appealing language, it would have been nice to use it as a DSL for configuring log4r in two lines of code, maybe without a configuration file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-3248122763994479933?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/3248122763994479933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=3248122763994479933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/3248122763994479933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/3248122763994479933'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2010/03/its-such-pain-to-use-log4r-in-ruby.html' title=''/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-2626088263816867834</id><published>2010-03-04T16:49:00.000+01:00</published><updated>2010-03-04T16:51:34.448+01:00</updated><title type='text'></title><content type='html'>Let me interrupt this succession of high level intellectual posts by a cry of distress: you do not have multiple constructors in Ruby, you have to use hashes or default values... I am so sad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-2626088263816867834?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/2626088263816867834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=2626088263816867834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2626088263816867834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2626088263816867834'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2010/03/let-me-interrupt-this-succession-of.html' title=''/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-1364167313196012630</id><published>2010-02-19T13:31:00.001+01:00</published><updated>2010-02-19T15:40:26.837+01:00</updated><title type='text'>love and randomness</title><content type='html'>Humans, and maybe any device with cognitive abilities, have deep hate for randomness. It has been shown that when people are asked to produce random sequences they display systematic biases which basically show that the randomness produced by humans is the outcome of a regular process which tries to be overly complex. So much so, that features that are attributed to randomness, like alternation, are overdone and humanly "random" sequences display statistics which makes them less random then we might expect from a truly random process.&lt;br /&gt;&lt;br /&gt;We cannot stand randomness. We try to make sense of everything, and God knows to what great lengths we go for that, for everything, for every little thing. &lt;br /&gt;&lt;br /&gt;One thing which seems to be related to our radical roots in regularity is, on a deeper, more emotional level, the inability of a human being to _understand_ the state of not being loved. I think that any person that has ever been romantically rejected has felt the utter incapacity of comprehension followed by the refusal to accept the reality of not being loved. Moreover, the universe gets patched, insignificant gestures of the loved person become significant, the model of the universe gets destroyed in order to accommodate that lovely girl's gestures, her signs, ambiguous or clear, rejection or hesitation, to transform them into possibilities, into hope. Telepathy becomes possible, even necessary; universal, interplanetary, astrological interventions must be arranged in order to account for her call or message or what not. If love is a fragile position in the harmony of the world, if love is the medicine that mends our imperfections and gathers them into a coherent participation to the flow of things, in an embracing manner, then the lack of love is, at the opposite side, destructuration and, finally, randomness. Which by our nature, we cannot comprehend.&lt;br /&gt;&lt;br /&gt;Hope is then a deep form of regularity detection. It is an orientation of ourselves towards the harmonic essence of the world, which, in blunter terms, may be seen as an evolved social code of behaviour and being. &lt;br /&gt;&lt;br /&gt;It is a refreshing thought that, if given the choice between love and indifference, the only one we can actually understand is love.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-1364167313196012630?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/1364167313196012630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=1364167313196012630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/1364167313196012630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/1364167313196012630'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2010/02/love-and-randomness.html' title='love and randomness'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-6593827082407279137</id><published>2010-01-25T10:54:00.000+01:00</published><updated>2010-01-25T10:57:33.276+01:00</updated><title type='text'></title><content type='html'>Any work on semantics should be related to the kernel of meaning that dreams present to us. When we cannot even put words on something, the meaning is there, in the form of a fabulous story. I don't think any theory of meaning can surpass a theory of dreams. Which should be intimately connected to a theory of the self. Which may not be even expressable in words.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-6593827082407279137?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/6593827082407279137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=6593827082407279137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/6593827082407279137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/6593827082407279137'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2010/01/any-work-on-semantics-should-be-related.html' title=''/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-4083037344128245446</id><published>2009-12-15T12:47:00.000+01:00</published><updated>2009-12-15T12:48:00.947+01:00</updated><title type='text'></title><content type='html'>&lt;a href="http://books.google.com/books?id=UiYlAAAAMAAJ&amp;dq=hamlet&amp;pg=RA1-PA17&amp;ci=19%2C877%2C519%2C85&amp;source=bookclip"&gt;&lt;img src="http://books.google.com/books?id=UiYlAAAAMAAJ&amp;pg=RA1-PA17&amp;img=1&amp;zoom=3&amp;hl=en&amp;sig=ACfU3U1k9no8yjBsucTDRekjhrUQiw6GxQ&amp;ci=19%2C877%2C519%2C85&amp;edge=0"/&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-4083037344128245446?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/4083037344128245446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=4083037344128245446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4083037344128245446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4083037344128245446'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2009/12/blog-post.html' title=''/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-4074702709636191443</id><published>2009-12-13T19:30:00.000+01:00</published><updated>2009-12-13T19:33:14.569+01:00</updated><title type='text'></title><content type='html'>From the apochryphal gospel of Thomas, as 2009 is a year when Darwin's work is celebrated:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Jesus said, "If the flesh came into being because of spirit, that is a marvel, but if spirit came into being because of the body, that is a marvel of marvels.&lt;br /&gt;&lt;br /&gt;Yet I marvel at how this great wealth has come to dwell in this poverty." &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-4074702709636191443?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/4074702709636191443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=4074702709636191443' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4074702709636191443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4074702709636191443'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2009/12/from-apochryphal-gospel-of-thomas-as.html' title=''/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-6392754314580116617</id><published>2009-12-06T13:46:00.000+01:00</published><updated>2009-12-06T17:28:45.106+01:00</updated><title type='text'>narratives</title><content type='html'>I recently read an interesting question: why do people watch movies, enjoy hearing stories, why are they fond of narratives? And the question followed me.&lt;br /&gt;&lt;br /&gt;I suspect it has to do with the narrative structure of dreams. Dreams are not theories of the world, although they do express some of the more faithful instincts that we use in our daily behavior. If the unconscious coding of behavior manifests itself during night in the form of fantastic narratives, that might imply that deep theories of the world are encoded in form of narratives. Hence myths, cultural or personal, are narrative and theories of the world in non-verbal forms must be stories.&lt;br /&gt;&lt;br /&gt;It would follow that we are built on stories.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-6392754314580116617?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/6392754314580116617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=6392754314580116617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/6392754314580116617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/6392754314580116617'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2009/12/narratives.html' title='narratives'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-8445155105883601491</id><published>2009-11-23T18:57:00.001+01:00</published><updated>2009-11-23T19:03:52.874+01:00</updated><title type='text'></title><content type='html'>Ok so bayesian networks contain a node for each attribute of the problem. The idea is that the graph is made of these attributes. If the decomposition in attributes is done well a priori, then a good model will be found.&lt;br /&gt;&lt;br /&gt;Maybe attribute nodes may be seen as concepts in Solomonoff induction.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-8445155105883601491?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/8445155105883601491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=8445155105883601491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/8445155105883601491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/8445155105883601491'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2009/11/ok-so-bayesian-networks-contain-node.html' title=''/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-7346531495693593059</id><published>2009-11-15T20:24:00.000+01:00</published><updated>2009-11-15T20:35:27.225+01:00</updated><title type='text'></title><content type='html'>Ok, so what's the idea? Relevance explained using algorithmic probability.&lt;br /&gt;&lt;br /&gt;Ray Solomonoff proposes a system of artificial intelligence which solves the inversion problem using Levin search. That practically means finding, for a stimulus &lt;span style="font-style:italic;"&gt;x&lt;/span&gt; a program &lt;span style="font-style:italic;"&gt;p&lt;/span&gt; that run on a machine &lt;span style="font-style:italic;"&gt;M&lt;/span&gt; represents the stimulus, that is, M(p) = x. The machine is a box of concepts, that is, elementary programs that updates itself while learning. &lt;br /&gt;&lt;br /&gt;This is a very plausible model of our brains. The equation concepts = programs is one of the most fundamental one. I think Solomonoff's work is really targetted at simulating human brains. &lt;br /&gt;&lt;br /&gt;The notion of relevance then of a stimulus might be related to focusing attention on a stimulus that would improve the organization of the internal concepts of the cognitive device. These are the "contextual effects" of Sperber and Wilson's Relevance theory.&lt;br /&gt;&lt;br /&gt;The algorithmic probability is a plausible formalization of the notion of assumption strength in S&amp;W. The more programs in the cognitive box generate a description x, which can be a category, an objectual instance or a program itself (a hypothesis), the more that object is strongly confirmed, or true.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-7346531495693593059?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/7346531495693593059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=7346531495693593059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/7346531495693593059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/7346531495693593059'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2009/11/ok-so-whats-idea-relevance-explained.html' title=''/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-3599532336569494676</id><published>2009-11-11T19:09:00.001+01:00</published><updated>2009-11-15T21:13:49.082+01:00</updated><title type='text'>I will try to transform this blog int...</title><content type='html'>I will try to transform this blog into a more cognitive science-related one. I don't have a lot of people to talk cognitive science even though I am pursuing a cognitive science Phd. I feel like I don't formulate my readings and my ideas, I just keep them in some vague form which makes me feel I have a theory of everything when in fact there is very little I can actually put on paper. So here it goes, the declaration of intention of transforming this obscure blog into a cognitive science obscure blog.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-3599532336569494676?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/3599532336569494676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=3599532336569494676' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/3599532336569494676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/3599532336569494676'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2009/11/i-will-try-to-transform-this-blog-int.html' title='I will try to transform this blog int...'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-466655004384683981</id><published>2009-05-15T15:07:00.000+02:00</published><updated>2009-05-15T15:19:37.072+02:00</updated><title type='text'>simple map cache in groovy</title><content type='html'>I have this call in Groovy, and I want to cache it in a simple map :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;service.slowMethod(arg)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Do it in two lines:&lt;br /&gt;&lt;br /&gt;cache = [:]&lt;br /&gt;int res = cache[arg] ?: { res = re.slowMethod(arg) ; cache[arg] = res; res }.call();&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-466655004384683981?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/466655004384683981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=466655004384683981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/466655004384683981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/466655004384683981'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2009/05/simple-map-cache-in-groovy.html' title='simple map cache in groovy'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-858969681290784151</id><published>2009-02-23T15:17:00.000+01:00</published><updated>2009-02-23T15:21:39.727+01:00</updated><title type='text'>beagle : same format as lucene's</title><content type='html'>Do you know &lt;a href="http://beagle-project.org/Main_Page"&gt;Beagle&lt;/a&gt;, the indexing software that you can use with the darling &lt;a href="http://projects.gnome.org/deskbar-applet/"&gt;Deskbar&lt;/a&gt; applet so that you can search all your disk in an instant? Well, I just discovered that it uses the same index format as Lucene which means that you can use tools like &lt;a href="http://www.getopt.org/luke/"&gt;Luke&lt;/a&gt; in order to open on of the indexes in ~/.beagle/Indexes and look inside.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-858969681290784151?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/858969681290784151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=858969681290784151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/858969681290784151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/858969681290784151'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2009/02/beagle-same-format-as-lucenes.html' title='beagle : same format as lucene&apos;s'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-2334486336013720901</id><published>2009-02-06T10:37:00.000+01:00</published><updated>2009-02-06T10:57:12.098+01:00</updated><title type='text'>use acrobat reader, which is a free download</title><content type='html'>Incredible is the power of imitation. We don't learn, infer, cogitate, abstract -- we imitate. That's what we do.&lt;br /&gt;&lt;br /&gt;Ever noticed the impressing number of remarks that you have, beside a PDF link : "in order to view this PDF document, you will need Acrobat Reader, which is a free download".&lt;br /&gt;&lt;br /&gt;I don't think there is at least one person in this world who ever touched a computer who does not know that. Leave alone that the Reader comes now with just about every installation. Still, if ever you put a pdf on your website do not forget to specify the following extremely useful information :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;this is a PDF file&lt;/li&gt;&lt;li&gt;it opens up with Acrobat Reader (put the link too)&lt;/li&gt;&lt;li&gt;Acrobat Reader is free (that is, I don't make you buy expensive stuff just to see my file)&lt;/li&gt;&lt;/ul&gt;As if it were a Martian's radioactive poo, and in order to handle it you need special NASA equipment -- but!, which, fortunately, is free.&lt;br /&gt;&lt;br /&gt;I laugh now, but I will laugh less when the day comes when I post a PDF file on own my site. I will put the damn disclaimer, like everybody else. The temptation is just too strong.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-2334486336013720901?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/2334486336013720901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=2334486336013720901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2334486336013720901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2334486336013720901'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2009/02/use-acrobat-reader-which-is-free.html' title='use acrobat reader, which is a free download'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-5569177997400767775</id><published>2009-01-19T08:18:00.000+01:00</published><updated>2009-01-19T14:20:28.313+01:00</updated><title type='text'>emacs snapshot</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_tANlrL3PmF8/SXQx_6tJlrI/AAAAAAAAAZg/8Whbdh6oMqE/s1600-h/emacsnicefonts.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 141px; height: 187px;" src="http://3.bp.blogspot.com/_tANlrL3PmF8/SXQx_6tJlrI/AAAAAAAAAZg/8Whbdh6oMqE/s320/emacsnicefonts.png" alt="" id="BLOGGER_PHOTO_ID_5292910436227323570" border="0" /&gt;&lt;/a&gt;If you're on Ubuntu like me, throw away your Emacs 21, Emacs 22 or whatever is called your rugged-fonted excuse for an editor and take the emacs-snapshot package. It contains the development version 23 of Emacs and sports decent fonts. On Ubuntu Intrepid, the packages are in the repository, on other distributions I see that people compile the thing from the CVS (thanks Ubuntu).&lt;br /&gt;&lt;br /&gt;No you no longer have to run xfontsel just to see that the font you want doesn't appear there; no you don't have to edit the damned .Xresources file AND run xrdb -merge ~/.Xresources afterwards -- what was it again ?; no, no, event the (set-default-font) elisp excerpt with a emacs-only font name is not needed; you just click "Options"/"Set default font"and you have as expected the font choosing dialog you get in all other decent applications. Which is of course, unexpected, given that Emacs is not a decent application. It is a dinosaur which should be extinct as all unadapted species are in evolution, but which just got nice fonts -- which is a good adaptation actually which means we might see the dinosaur for some more years to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-5569177997400767775?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/5569177997400767775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=5569177997400767775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5569177997400767775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5569177997400767775'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2009/01/emacs-snapshot.html' title='emacs snapshot'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_tANlrL3PmF8/SXQx_6tJlrI/AAAAAAAAAZg/8Whbdh6oMqE/s72-c/emacsnicefonts.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-9155208159039948687</id><published>2009-01-15T11:50:00.000+01:00</published><updated>2009-01-15T12:29:00.924+01:00</updated><title type='text'>Java is verbose beucause not used as originally intended</title><content type='html'>People forgot but you dont't have to have only public classes in Java. All IDE's create public classes nowadays, so we use them. Another idea which is taken for granted is that you should have one class per file except of course those rare cases where you need a non-public, kind of private use class, often private DTO-kind of stuff for the one public class.&lt;br /&gt;&lt;br /&gt;In fact, you may even break the sacred rule of filename-should-be-the-same-as-the-classname if you give up making all classes public by default. You might have a filename which is not identical to any of the "package"-protected  -- which is the default protection level -- classes written inside.  And it kind of makes sense too, even if "public class" is so pervasive now that you automatically skip the declaration when reading source. A public class should only be the one that gets seen from the outside like some kind of an interface.&lt;br /&gt;&lt;br /&gt;The public/package distinction is one feature of Java that is not (or rarely) used. Instead, we use a Spring configuration file in order to see which are the "beans" (read, important) classes. Today, almost all classes are public. What would you think of a Python-like java code with 5 classes per file of which none has the same name as the file. It is possible in Java, moreover Java does encourage encapsulation and keeping thinks private so it would even fit OOP ideology -- but nobody does that.&lt;br /&gt;&lt;br /&gt;So Java is used now in a way that it was not exactly conceived for. In part, this  alien usage, as it has been repeatedly noticed, makes Java sources contain lots of repeated strings. Take accessors, for instance. It is obvious that first versions of Java did not care about accessors and java beans properties which so standard nowadays. String.length() -- and not getLength() --, List.size() etc. are living proof of this. Accessors are added as design patterns afterwords. Singletons too. Dependecy injection too, a design pattern not imposed by the language, but verbosely hooked in by years of developer experience. I will say nothing of having to declare a class in order to describe a simple code block, aka a callback.&lt;br /&gt;&lt;br /&gt;I bet modern enterprise Java compresses better than other newer languages (which means that on average there is more duplicated code inside). If I get the time, I'll make some statistics against Ruby or Scala sources in order to see just what the difference is, you may make this experiment yourself if you can.&lt;br /&gt;&lt;br /&gt;Why say that ? Having repeated information in source files is of course not a good situation. People are good learners so when you read a java source file as a developer, you skip "public class" you skip accessors, you skip a lot of things.  An extraterrestrial visitor reading java source files might read "public class" as one word and think accessors are just a funny lengthy way they use on Earth to write properties. That's what we do when we compress in our head lines and lines of java code in this manner. The problem appears when the actual uncompressible information contained by a Java file is far smaller than the plethora of automatically generated accessors &amp;amp; co. When you need to skip two screens in order to read the only code that matters in a class, you have a problem. When there is more automatically generated code in a source base than written code, you have a problem too. And given the look of the average Java code, indeed I think we do have a problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-9155208159039948687?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/9155208159039948687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=9155208159039948687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/9155208159039948687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/9155208159039948687'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2009/01/java-is-not-used-as-it-was-originally.html' title='Java is verbose beucause not used as originally intended'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-4855980366378943999</id><published>2009-01-14T09:40:00.000+01:00</published><updated>2009-01-14T13:25:15.197+01:00</updated><title type='text'>latex not as smart as i thought</title><content type='html'>In Latex, inside a &lt;span style="font-weight: bold;"&gt;\float&lt;/span&gt;, if you write the \&lt;span style="font-weight: bold;"&gt;label&lt;/span&gt; tag before the \&lt;span style="font-weight: bold;"&gt;caption&lt;/span&gt; tag, it will not appear when making a reference to the float, you have to put it &lt;span style="font-style: italic;"&gt;after&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;I frankly used to think Latex was the forgotten king of typesetting that Word and company superceded only because of sexy GUIs. I think Latex is still an unequalled equation layouter but, if you thought that Latex wraps too long texts in tables you're wrong. Even HTML browsers do that, still in Latex you have to do something like :&lt;br /&gt;&lt;br /&gt;\begin{tabular}[ht]{l p{6cm} c}&lt;br /&gt;&lt;br /&gt;The "p{6cm}" tells Latex that it can wrap text in that column and that the column must be exactly 6 cm wide. Of course you cannot just not mention the 6cm hoping that it will figure out the correct value given external box constraints. You have to try several times to get it right. Otherwise, you'll get a loooong line that just goes off the page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-4855980366378943999?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/4855980366378943999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=4855980366378943999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4855980366378943999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4855980366378943999'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2009/01/in-latex-inside-float-if-you-write.html' title='latex not as smart as i thought'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-1814132324408538914</id><published>2008-12-17T11:04:00.000+01:00</published><updated>2008-12-17T11:08:50.330+01:00</updated><title type='text'>narrative relevance test</title><content type='html'>I'm studying narrative relevance these days so I'll post less on bugs and more on cognitive science issues.&lt;br /&gt;&lt;br /&gt;I've put together a web test that tries to identify to what extent some parameters make stories interesting. You'll only have to click 20 times, the whole test takes about 10 minutes. And, important, it is in French so please only take it if you're francophone.&lt;br /&gt;&lt;br /&gt;Here it is :&lt;a href="http://www.infres.enst.fr/stories/"&gt; http://www.infres.enst.fr/stories/&lt;/a&gt; .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-1814132324408538914?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/1814132324408538914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=1814132324408538914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/1814132324408538914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/1814132324408538914'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2008/12/cognitive-test.html' title='narrative relevance test'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-7422720068754091217</id><published>2008-11-06T13:51:00.000+01:00</published><updated>2008-11-06T13:59:31.094+01:00</updated><title type='text'>change default background window color in gnome</title><content type='html'>Your eyes hurt with the bright white that you get on your desktop. Somebody at some point decided that graphical desktops should be white despite the combined arguments that white hurts eyes, screens are not particularly good at making good white (you need a lot of hertz and resolution)  and that white as a screen color is stupid and ugly and bright.&lt;br /&gt;&lt;br /&gt;We do not like white. White should be replaced. By a nice eye-friendly shade of gray or something.&lt;br /&gt;&lt;br /&gt;Here's how to do it on ubuntu gnome, the possibility of change is there but a bit hidden. Open  System/Preferences/Appearance, select the theme that is closest to your taste, and then hit the "Customize" button which you might not have remarked yet (as I haven't for ages).&lt;br /&gt;&lt;br /&gt;On the "Colors" tab, replace the "Input boxes" color with some gray shade (I use #EAE6E2) and there you are. No more white.&lt;br /&gt;&lt;br /&gt;I hate white.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-7422720068754091217?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/7422720068754091217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=7422720068754091217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/7422720068754091217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/7422720068754091217'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2008/11/change-default-background-window-color.html' title='change default background window color in gnome'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-2298334231942840308</id><published>2008-09-24T14:40:00.000+02:00</published><updated>2009-01-20T10:23:44.295+01:00</updated><title type='text'>OOP sucks</title><content type='html'>Ok I finally got it. It took me some time but I did it. OOP sucks. Far from being an elegant engineering technique, object-oriented programming is a hack in the worst sense, a paradigm which was intended for a kind of use which never happened and which is nowadays used in a totally different manner. Which is not object-oriented.&lt;br /&gt;&lt;br /&gt;What are the basics of OOP ? 1. Inheritance and 2. encapsulation. Polymorphism goes under the inheritance chapter in this dichotomy. Those two aspects are what makes OOP distinguishable from other programming techniques.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Inheritance&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It is funny to make this clear because OOP was created and marketed in order to "facilitate reuse" by using 1. inheritance while today, the only added-value that you might get with OOP code is really 2. encapsulation. The initial idea was that library makers would write code and you would reuse it by subclassing it. It's really the early marketing noise on OOP: you'll "just" need to sublcass the code, in order to "adapt" it to your needs. The idea was that subclassing would allow you to take a component that provided some general behavior and fit it with a minimum of effort in your application.&lt;br /&gt;&lt;br /&gt;So much so that the Gang of Four book feels it important to make it explicit that, if given a choice, one should reuse code by&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;i&gt;encapsulation&lt;/i&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;or reference and not by inheriting it. I haven't understood this insistence for a long time until I saw some really bad application code that I had to maintain in which inheritance was the basis of code reuse.&lt;br /&gt;&lt;br /&gt;So what can we say today of inheritance ? We could not really say it is nocive. It's just kind of the seventeenth most helpful feature of Java, well after encapsulation, interfaces, Spring, log4j and perhaps the nearest coffee shop.  Yes sometimes you can class stuff around, categorize data, say that A "is a" B which "is a" C. But that happens so rarely and using inheritance often couples your code so badly that if you're not absolutely sure that A really&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;i&gt;is&lt;/i&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;a B, you had better make A reference B and call it. In real life applications you rarely have hierarchical categorizable classes. And if you happen to have them, they most probably are dynamic and subject to change (new categories appear and old categories disappear) so that closing the behaviour in hardwired fixed classes might not be a good solution (changing the code just to add a new "class" or "category" just because data changed).&lt;br /&gt;&lt;br /&gt;Inheritance is then a second-hand idea. I'm not saying it's bad and you should not use it, I'm just saying I really would not care fi tomorrow classes get extinct. I would be in turn very affected if&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;i&gt;interfaces&lt;/i&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;in Java disappeared, but about classes, in the original sense of the word "class" -- synonym of "category" really -- I really don't care. I rarely use inheritance and if I do, I could do without. Note, I am not talking about the encapsulation aspect of classes (the "struct" really part of the problem) which I will talk about in a moment.&lt;br /&gt;&lt;br /&gt;There is a paradox that we developers got so accustomed to that seems normal. We often talk about how the class X does this and how the class Y does that and at some point we may take a step back and ask ourselves: why do we have a class for the code that starts our program in the command line? Which grows up into the now classic debate, why do we need a class in order to put a callback into a button? Why our code, verbs, services etc. are organized into classes even when in most of the cases we're not even trying to categorize substance in the virtual world we're modelling?&lt;br /&gt;&lt;br /&gt;So&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;i&gt;class&lt;/i&gt;, the single most important keyword of Java, is obsolete. We don't need categorizing or classing and if we do, it's the data that gets categorized, not the code because, once again, hardwiring your typing as classes means you have a fixed eternal category system for the rest of your release life which is not a luxury you can afford in real-life applications.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Encapsulation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;What about encapsulation? Now that is the real added value of OOP. The real value of object-orientation is the "struct" nature of "class" and it is a value at all only because the data is changeable by default. Let me explain that.&lt;br /&gt;&lt;br /&gt;The simplest way to see my point is get some bad Java code and reorganize it. I don't know how to define "bad" code. It is really code that cries out loud that its author does not understand computing, programming or whatever. Also known as WTF code.  I recently had the unwanted privilege to reorganize a lot of such Java code in order to make it multithreaded and multi-machine distributed. Developers often prefer rewriting horrible code but you don't always get to choose. Sometimes you simply have to get your hands dirty and really understand what the guys that wrote the code didn't understand.&lt;br /&gt;&lt;br /&gt;Bad code has data organized as a soup of variables. Its developer typically writes code which he then organizes into functions that process that soup of variables. Functions read, modify and write to variables. Locally-scoped variables are rare, obviously the author doesn't understand why he should limit the power of his variable to just one small scope when it could be visible everywhere. Even if by mistake a variable is locally scoped, the first need to access the value from outside, makes it global. There is a universal tendency in bad code to have global variables.&lt;br /&gt;&lt;br /&gt;If our apprentice programmer writes in Java, he will use classes. Not because he or she understands really why he should use a class but because, of course, Java requires classes. Methods will be stuck to some arbitrary class, they are often static and public and access static global variables of the soup. An amateur will understand at some point the classes can categorize and that you can reuse some code by inheritance. An amateur will like this abstraction which will give him some sense of an architectural achievement. He will feel he has modeled the physical world into reusable software.&lt;br /&gt;&lt;br /&gt;So what may finally give -- is some kind of&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;i&gt;universal variable soup&lt;/i&gt;, plus some&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;i&gt;scattered methods&lt;/i&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;plus some&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;i&gt;inheritance&lt;/i&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;based code reuse. Reformulated: we have mutable data and functions that change this data. The functions are all extremely coupled because the data is all common.&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When the developer grows up and sees the light, he understand that the point of OOP is to encapsulate data and methods in such a manner that data always has nearby the exact methods that process it, formulate otherwise, you knowingly&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;i&gt;restrict&lt;/i&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;yourself. You just put functions near the data they process. As every piece of data has all the processing methods nearby, it is not necessary for all the data to be public and global.&lt;br /&gt;&lt;br /&gt;Enterprise distributed systems are typical in this sense. Even if they bother with internal modelling of some concepts and relations as objects -- and&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;i&gt;rich&lt;/i&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;domain models are rare in EJB applications,  they will export their functionalities as services (EJBs, WS) which are really stateless remotely accessible functions. From the outside, they are just a bunch of stateless, and maybe load-balanced and failovering, functions. SOA and web-services only really work with the stateless model.&lt;br /&gt;&lt;br /&gt;So what encapsulation permits is to make variables local and private so that only accessing methods can process them. Thing kind of start to resemble with functions, with local data, package together in a namespace system improperly called "class".&lt;br /&gt;&lt;br /&gt;As encapsulation is a way for keeping data from being changed, it is only needed because, in the variable soup, any beginner can modify data and transform the code into a plat of spaghetti. Encapsulation is thus only needed because all data is by default mutable.&lt;br /&gt;&lt;br /&gt;So we don't need encapsulation. Or, we only need it as a remedy only in the broken model of all-changeble data.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;I should put a conclusion here&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;So what should the conclusion be? Ditch OOP, start functional programming? Good luck with convincing management. No. I think you should what I will certainly do, that is gradually, learn some functional language of your choice and try to apply what you learn to your existing OOP code.&lt;br /&gt;&lt;br /&gt;I think one conclusion is truly visible : if you need concurrency (and you do need on server-side appserver-based java, or in the new world of multi-cores all over the place) - do learn functional programming. The one real advantage I see of a pure functional language is that it will not &lt;span style="font-style: italic;"&gt;let&lt;/span&gt; beginners develop their beloved  variable soup. You won't have that.&lt;br /&gt;&lt;br /&gt;Secondly, look at all the expensive solution of replicating cache over distributed environments; things get so simpler with immutable data. I think functional languages may bring to enterprise computing the same kind of simplicity that Spring pojo solutions brought to EJB2 applications.&lt;br /&gt;&lt;br /&gt;And that's it, no more conclusions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-2298334231942840308?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/2298334231942840308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=2298334231942840308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2298334231942840308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2298334231942840308'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2008/09/oop-sucks.html' title='OOP sucks'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-1814680578754443636</id><published>2008-09-11T17:18:00.000+02:00</published><updated>2008-09-12T22:09:24.414+02:00</updated><title type='text'>we would all be speaking German</title><content type='html'>You may hear occasionally some sort of variation of the adage: if the Allies hadn't done this or that we'd be all speaking German today (that is Hitler would have won the war and conquered the world).&lt;br /&gt;&lt;br /&gt;On the contrary, I kind of get the feeling that if Hitler simply did not exist, we would all be speaking German today. Not by force of course but pretty much in the same way that we all, more or less, speak English today.&lt;br /&gt;&lt;br /&gt;There was an enormous migration of qualified people from Germany to the US in the WW2 and post-war period. Much of psychology, cognitive science, computer related, physics, anything modern related to science at that time has important German contributions. You can still hear thing on "Gestalt psychology". I found a refernce to an Alan Turing's paper, &lt;span style="font-style: italic;"&gt;On Computable Numbers with Applications to the Entscheidung-Problem&lt;/span&gt;. Seems &lt;span style="font-style: italic;"&gt;Entscheidung&lt;/span&gt; is german for "decision", these days computer science is so much populated with English jargon in all the world's languages that it seems implausible to find German at its origins.&lt;br /&gt;&lt;br /&gt;It is hard to gather the bits and pieces of references that made me think about this abundance of German lexicon in the science of the 50s, but you might just think of atom-physicists like Einstein, Heisenberg, Schrödinger.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-1814680578754443636?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/1814680578754443636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=1814680578754443636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/1814680578754443636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/1814680578754443636'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2008/09/we-would-all-be-speaking-german.html' title='we would all be speaking German'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-5468137662757163319</id><published>2008-07-24T12:12:00.000+02:00</published><updated>2008-07-24T14:29:17.871+02:00</updated><title type='text'>configurable configuration</title><content type='html'>Every program needs some parameters. It's a part of your earliest programmer pride that you pulled out parameters which are configurable in a text file. You no longer have to edit the source files and recompile, you only need to change a text file and your program works as the new parameter intends. That's great, the program is &lt;i id="x151"&gt;configurable&lt;/i&gt;. You can show that to your mother or to your girl-friend. It will bore them to death, so you can only do that if the girl-friend is new and you don't mean to keep her long. Anyway, display doesn't really matter, art is done for art's sake and just knowing the right thing has been done fills us with pride and a nice fulfillment sensation.&lt;br /&gt;&lt;br /&gt;The second step in a programmer's configuration-related life is surprisingly not having a decent configurable program but pulling out anything that even remotely resembles a configurable thing. You pull out parameters that could never ever change, XML attribute and tag names, parameters of all sorts along with actual changeable URLs; you even pull out things that, if ever changed, break your program. Your program won't even work if some file is on a password secured active-mode FTP server and no longer on the local file system, still you use a URL to point to your file, just in case. Errors of all kinds will arise if ever the XML you parse changes yet it is important to foresee the possibility of a &lt;record&gt; or &lt;name&gt; or &lt;id&gt; suddenly changing so make that configurable too.&lt;br /&gt;&lt;br /&gt;And yes, do pull out the &lt;span style="font-style: italic;"&gt;head&lt;/span&gt; and  &lt;span style="font-style: italic;"&gt;body &lt;/span&gt;HTML tag names; if ever the HTML spec changes and the  tag becomes &lt;span style="font-style: italic;"&gt;header&lt;/span&gt; &lt;header&gt; or &lt;introduction&gt; &lt;span style="font-style: italic;"&gt;introduction &lt;/span&gt;or &lt;beginning&gt;&lt;span style="font-style: italic;"&gt;beginning&lt;/span&gt;, you'll only need to change one line in a .properties files. If ever the HTML deciders realize the mistake of their naming of the &lt;i id="pcw-"&gt;body&lt;/i&gt; tag and they decide to change it to &lt;&lt;i id="bk6b"&gt;trunk&lt;/i&gt;&gt; or &lt;&lt;i id="oa5_"&gt;corpus&lt;/i&gt;&gt; or &lt;i id="yq6."&gt;&lt;main-stuff-here&gt;&lt;/main-stuff-here&gt;&lt;/i&gt; , your program will survive the universal change like a breeze. You'll only have to change one line. In your properties file. And make the name of the properties file configurable too while you're at it and maybe the file format also. Of course, your actual code will only know how to parse a key-value configuration file, &lt;i id="pz.3"&gt;for now&lt;/i&gt;, but you have options for the future. The program is &lt;i id="ziap"&gt;flexible&lt;/i&gt; and &lt;i id="g1hc"&gt;configurable&lt;/i&gt;. And your configuration file will be a hell where you won't be able tell what's important of what's not.&lt;br /&gt;&lt;br /&gt;Most of the configurable things will get forgotten, gradually or right from the start, naturally as users don't care that the things that don't change can be changed.  Developers inheriting your code won't know why a property is there so they will preserve them and cherish them with the exact indistinct respect and indifference that divine rituals are conducted. You will forget yourself  what those hundred configuration properties where all about, at best you'll know that "server.url" property at the very end of the file which points to the only thing that ever changed in the life of that program. Oblivion will install itself over the IT department, on your program and on your configuration.&lt;br /&gt;&lt;br /&gt;But, suppose the absurd happens, and that the impossible has occured. Suppose.&lt;br /&gt;&lt;br /&gt;The day comes when W3C changes their &lt;span style="font-style: italic;"&gt;head&lt;/span&gt; tag. They realize that their naming made the world a bad place to live. They decide to rectify this unfortunate error by naming the tag &lt;header&gt; or whatever and the Internet instanteneously updates itself to this planetary refactoring. Note that, in reality, a tag rarely changes by itself without a structural change in data structure which requires code update -- but for the sake of the argument. You were right all the way, you foresaw all this! You put elegance and thorough parameterization before all things and how right were you !&lt;br /&gt;&lt;br /&gt;Sadly, nobody even remembers that the thing &lt;i id="g1hc0"&gt;was &lt;/i&gt;configurable in the first place. The program will be or was  already re-written by one of the new guys that inherited your legacy code; he will have the time to understand the complexity of your code that became, like any code, legacy -- written in a legacy language for a legacy platform in a legacy state of mind.&lt;br /&gt;&lt;record&gt;&lt;name&gt;&lt;id&gt;&lt;header&gt;&lt;introduction&gt;&lt;beginning&gt;&lt;header&gt;&lt;/header&gt;&lt;/beginning&gt;&lt;/introduction&gt;&lt;/header&gt;&lt;/id&gt;&lt;/name&gt;&lt;/record&gt;&lt;/header&gt;&lt;/beginning&gt;&lt;/introduction&gt;&lt;/header&gt;&lt;/id&gt;&lt;/name&gt;&lt;/record&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-5468137662757163319?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/5468137662757163319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=5468137662757163319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5468137662757163319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5468137662757163319'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2008/07/configurable-configuration.html' title='configurable configuration'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-5863786135481948836</id><published>2008-02-20T17:35:00.000+01:00</published><updated>2008-02-20T17:40:19.803+01:00</updated><title type='text'>inspect remote jvms by jmx</title><content type='html'>If you have at least java 5, add this sequence&lt;br /&gt;&lt;br /&gt;-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1111-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false&lt;br /&gt;&lt;br /&gt;to any java application you have; you'll be able to connect to it later with jconsole (which comes with the standard jdk) and see lots of interesting vm statistics. Among the most intersting is perhaps a list of threads and the stacktraces of those threads (the GUI almost-real-time equivalent of a thread dump) -- which means you can see exactly what those threads are doing.&lt;br /&gt;&lt;br /&gt;Of course, if you need security, put some passwords.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-5863786135481948836?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/5863786135481948836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=5863786135481948836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5863786135481948836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5863786135481948836'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2008/02/inspect-remote-jvms-by-jmx.html' title='inspect remote jvms by jmx'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-5361808057984978790</id><published>2008-02-08T21:35:00.000+01:00</published><updated>2008-02-08T22:16:09.473+01:00</updated><title type='text'>best blog i ever read</title><content type='html'>... is &lt;a href="http://steve-yegge.blogspot.com/"&gt;this.&lt;/a&gt; Extremely enthusiastic about it too.&lt;br /&gt;&lt;br /&gt;Explanation : it is a common experience I think that reading blogs in an Google's RSS aggregator, or in any aggregator for that matter, makes posts  impersonal; the reading is special in that it's a "filtering" reading, the kind of reading which involves detecting interesting patterns in the text; the imperative is that you exhaust the posts accumulated (243 new posts, oh God, when will I get the time to read them all?). You open two or three new tabs in the browser in order to go deeper on the posts that captured your attention. To sum it up, reading blogs becomes in fact a filtering technique.&lt;br /&gt;&lt;br /&gt;The difference is that I spent my afternoon reading Steve's blog. I only stopped in order to download a Firefox add-on that would allow me to customize the background color as I was beginning to have eye-aches. You don't need a plugin, by the way, the built-in option dialog is enough, but back to the point. I suspect it is pretty common : I haven't actually systematically read a blog's posts in sequence for a very long time, if ever. The difference is that not only are Steve's posts technically insightful, if questionable -- he doesn't like Groovy, for example! -- but they are actually good literature. Which is rare in the technical world.&lt;br /&gt;&lt;br /&gt;I wonder if it's a good to have started this blog in English. I originally thought I could make it a part of geek blogosphere which, of course, must be in English. The problem is I only read technical documentation in English. I read one Shakespeare piece last year, saw a couple of American movies, and that's about it. No, I read tones of technical documentation and blogs, too, but does it matter. It is not simple to actually make up a convincing, charming expression out of such poor practicing habits. The good part is we're not all obliged to be genial bloggers -- but blogs like Steves certainly stimulate one's writing appetite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-5361808057984978790?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/5361808057984978790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=5361808057984978790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5361808057984978790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5361808057984978790'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2008/02/best-blog-i-ever-read.html' title='best blog i ever read'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-5123362506496997835</id><published>2008-02-07T12:41:00.001+01:00</published><updated>2008-02-08T10:58:33.408+01:00</updated><title type='text'>stateles session bean publishes jms message for mdb</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Ok so up to this day I firmly believed that if you have a stateless EJB method which executed in a transactional context, and publishes a JMS message at the end of its work, this message would not be consumed (by an MDB, say) before transaction commits.&lt;br /&gt;&lt;br /&gt;I've just done the experiment on JBoss 4.0.5. It took 40 minutes, to build from scratch a small SLSB and an MDB (EJB 2.1 with deployment descriptors and everything). Transactionally, the SLSB method is &lt;i&gt;RequiresNew&lt;/i&gt; and my MDB is &lt;i&gt;Required&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;I supposed that my JMS message would only reach the physical queue at transaction commit. It doesn't. Still digging...&lt;br /&gt;&lt;br /&gt;*&lt;br /&gt;&lt;br /&gt;Yeap. I was using "/ConnectionFactory"  in order to lookup the JMS connection factory.  You have to use "java:/JmsXA" as this wonderful &lt;a href="http://www.odi.ch/prog/jms-tx.php"&gt;page &lt;/a&gt;instructs us. For what it's worth, if you list the default JNDI of JBoss4.0.5 you can see yet another connection factory that's called "XAConnectionFactory". Don't use it, it doesn't work either. I can't believe all this time I used non-transaction JMS in my app. I wonder how many people are in this case.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-5123362506496997835?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/5123362506496997835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=5123362506496997835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5123362506496997835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5123362506496997835'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2008/02/stateles-session-bean-publishes-jms.html' title='stateles session bean publishes jms message for mdb'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-3903592356999802896</id><published>2007-10-08T18:33:00.001+02:00</published><updated>2007-10-08T18:39:59.488+02:00</updated><title type='text'>test mocking with aspectj</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;As far as testing is concerned, &lt;a href="http://www.ibm.com/developerworks/java/library/j-aspectj2/"&gt;you don't need AspectJ&lt;/a&gt; if you completely control your application and use dependency injection. That is not always the case unfortunately and more often than not, especially with EJB applications that look up lots of things with ServiceLocators or similar, you find yourself unable to inject mockups into your code. EJB applications are not the only one, in fact, that are not DI-compliant. Any managed application which looks up its resources in a central registry may be an example.&lt;br /&gt;&lt;br /&gt;You have AspectJ then. It seems to me that aspectj is the kind of wonderful technology that makes you really want to use, time and again. But everytime you try to use it on non-trivial examples, you get enormous headaches which make you say to yourself "Not this time". Only to find yourself two months later trying to use it again and giving up again and so on.&lt;br /&gt;&lt;br /&gt;And it's not only me. Here is a quote from the foreword to the &lt;i&gt;AspectJ in action&lt;/i&gt; from Manning, by its author, Ramnivas Laddad:&lt;br /&gt;&lt;blockquote&gt;I came across AspectJ version 0.3 in 1998 [...] The struggle to keep up with all the new advances in the Java and XML world... prevented me from pursuing it further. Still, exploring AspectJ was always on my to-do list, and I started looking at it again when it was in version 0.8.&lt;/blockquote&gt;As for me, I can too pride myself that I finally found a usecase for AspectJ that works. I have a jBPM process which is twice deployed: jBPM itself is deployed as an EJB application under JBoss, and, secondly, my process is deployed inside jBPM. I haven't found a way to inject dependencies into jBPM Actions so dependencies are looked up using a Service Locator. Finding a way to run the process quickly from JUnit test was essential.&lt;br /&gt;&lt;br /&gt;As a sidenote, deployment is the mother of all headaches. Managed code (deployed code) is code that does not run in the environment where it was written. You  unit-tested it, and it will still crash because inside the container, conditions are not exactly the same. You can of course run integration tests on it -- when you have infrastructure with integration and test environments -- and that is usually the solution, you only bear to mind that maintaining a continuous integration platform with deployed applications on test platforms is difficult. It is worth doing for projects that have a long life, that are extended and maintained continuously. I am not sure this kind of investment, while desireable, is realistic for an application that gets put into production and which gets two fixes a year.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To get to the point. I have applied some aspects that intercept a call to a ServiceLocator.getService static method. The advice is applyed to a test case, and it uses cflow pointcuts in order to provide specific mockups for different test methods. The ServiceLocator is found in another package, another maven jar artifact. You have to add that jar to the aspectj inpath; aspectj will weave the classes that need weaving and you'll get woven copies of those classes in your target/test-classes directory.&lt;br /&gt;&lt;br /&gt;And when it works, it's wonderful.&lt;br /&gt;&lt;br /&gt;Except that &lt;i&gt;if&lt;/i&gt; it does not work, &lt;i&gt;making &lt;/i&gt;it work in both eclipse and maven is infernal. &lt;i&gt;Static &lt;/i&gt;pointcuts can still be manageable but you can't easily tell why a &lt;i&gt;dynamic &lt;/i&gt;pointcut doesn't work how you want it to. It may be that it works in Eclipse AJDT but not under Maven. Or the other way around. In my specific case, I found myself having to disable the maven test plugin flag forkmode="always" and set it to forkmode="never" in order for the aspects to be applied. I have no idea why, I'll probably discover one day. The &lt;a href="http://maven.apache.org/plugins/maven-surefire-plugin/examples/forking.html"&gt;petty documentation for Maven forkmode&lt;/a&gt; doesn't help either.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I may pass from one thing to another but reading all this, one must notice the essential underlying schizofrenia of JEE : code is not &lt;i&gt;built &lt;/i&gt;in the environment it was written; code is not &lt;i&gt;deployed &lt;/i&gt;in the environment it was written. You use an IDE like Eclipse to build your development code; in order to build it automatically, you're probably using a second build system like Ant or more probably Maven. You have to maintain your code so that it is buildable by the two. As if building schizofrenia were not enogh, there comes deployment troubles too : you'll deploy it into some app server where the environment is again different. What's the remedy for all that ?&lt;br /&gt;&lt;br /&gt;NetBeans, if I remember correctly, uses Ant to build the code. I am not sure if it can use heavily customized Ant (or Ivy for that matter) -- correct me if I am wrong. Eclipse uses its own building system, impossible to call from the command line, you &lt;i&gt;have &lt;/i&gt;to second it with an automatable build system.&lt;br /&gt;&lt;br /&gt;As to the second problem, deployment : with lightweight containers, code can run in unit tests in pretty much the same environment as inside your IDE. This is probably the saner direction where your junit runs and your production execution are no longer that far apart...&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-3903592356999802896?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/3903592356999802896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=3903592356999802896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/3903592356999802896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/3903592356999802896'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/10/test-mocking-with-aspectj.html' title='test mocking with aspectj'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-6066097388300387923</id><published>2007-10-03T14:48:00.001+02:00</published><updated>2008-02-07T13:19:03.061+01:00</updated><title type='text'>how to touch in windows</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;You love the touch utility under Linux, you'd like to use it under windows. If you type "free touch windows" in Google you'll only get a horrible windowzey-shareware-freeware pages with popups and animated gifs of pay tools that supposedly add to your Explorer right click "Touch this".  Disgusting.&lt;br /&gt;&lt;br /&gt;You can always install cygwin but there's a quicker workaround. Right click the file you need to touch, go to the last "Summary"  tab, and input anything into the "Title" box. Click ok, and you've just touched your file.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-6066097388300387923?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/6066097388300387923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=6066097388300387923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/6066097388300387923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/6066097388300387923'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/10/how-to-touch-in-windows.html' title='how to touch in windows'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-7995989046822407899</id><published>2007-08-27T16:15:00.001+02:00</published><updated>2007-09-22T13:20:59.848+02:00</updated><title type='text'>how to develop a maven webapp</title><content type='html'>Maven has this war plugin that allows people to package wars. The only&lt;br /&gt;problem is that often wars are deployed in production as part of ears,&lt;br /&gt;but are developed as separate wars. In production your war runs inside&lt;br /&gt;your weblogic's or your jboss' web server but in developmenet your run&lt;br /&gt;your webapp in a small separate jetty or tomcat instance.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;The business logic is hidden behind remote EJBs so the webapp gets an&lt;br /&gt;EJB remote reference. In development, the EJB remote is got to a&lt;br /&gt;development JBoss running on localhost.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Ok, so the problem is : in production, your ear contains all your&lt;br /&gt;third-party or common jars. So you don't put them in your war too, that&lt;br /&gt;would generate class not found exceptions. So typically, your war's&lt;br /&gt;pom.xml should be something like :&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;small style="font-weight: bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;groupId&amp;gt;jboss&amp;lt;/groupId&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jbossall-client&amp;lt;/artifactId&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;/small&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;... and lots of other&amp;nbsp;&lt;span style="font-style: italic;"&gt;provided&lt;/span&gt;&lt;br /&gt;dependencies.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;But when you develop your webapp of course you're not gonna manufacture&lt;br /&gt;your EAR iteratively, thousands of times. So you'll deploy your war in&lt;br /&gt;some separate jetty instance so that you can easily develop your&lt;br /&gt;webapp. The maven war plugin proposes the war:inplace + jetty:run&lt;br /&gt;solution which actually copied alls jar into src/webapp/WEB-INF/lib and&lt;br /&gt;starts jetty on this configuration.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;All this is cool but all your dependencies are markes as&lt;br /&gt;&amp;lt;i&amp;gt;provided &amp;lt;/i&amp;gt;so that you can keep your&lt;br /&gt;war thin. No problem, you will just add a small profile section to your&lt;br /&gt;war's pom :&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;small style="font-weight: bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;profiles&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;profile&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;id&amp;gt;warinplace&amp;lt;/id&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- when developing with&lt;br /&gt;war:inplace, provided dependencies must appear clearly --&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependencies&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;groupId&amp;gt;commons-logging&amp;lt;/groupId&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;artifactId&amp;gt;commons-logging&amp;lt;/artifactId&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;version&amp;gt;1.0.4&amp;lt;/version&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br&gt;&lt;br /&gt;...&lt;br&gt;&lt;br /&gt;&lt;/small&gt;&lt;br&gt;&lt;br /&gt;You specify again all your dependencies as compile-scoped and launch&lt;br /&gt;your jetty like this :&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;mvn install war:inplace&lt;br /&gt;jetty:run -Pmy-dev-properites,warinplace&lt;/span&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;And you'll temporary get all your dependences back. Do not forget to&lt;br /&gt;manually remove src/webapp/WEB-INF/lib and classes/ directories&lt;br /&gt;manually otherwise you'll get those jars into your ear-packaged war and&lt;br /&gt;you'll get lots of class cast exceptions.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-7995989046822407899?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/7995989046822407899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=7995989046822407899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/7995989046822407899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/7995989046822407899'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/08/how-to-develop-maven-webapp.html' title='how to develop a maven webapp'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-742117799526348164</id><published>2007-07-16T12:28:00.000+02:00</published><updated>2007-07-16T12:30:45.755+02:00</updated><title type='text'>touche parent introuvable</title><content type='html'>Automatic "resource bundle" humour in the Oracle JDBC driver =&gt;&lt;br /&gt;&lt;br /&gt;ORA-02291: violation de contrainte (ADRIAN.FK_JBPM_PROCINST) d'intégrité - &lt;span style="font-weight: bold;"&gt;touche &lt;/span&gt;parent introuvable&lt;br /&gt;&lt;br /&gt;Where &lt;span style="font-style: italic;"&gt;touche&lt;/span&gt; is of course &lt;span style="font-style: italic;"&gt;key&lt;/span&gt;, but only in the context of a keyboard, not when talking about a database &lt;span style="font-style: italic;"&gt;foreign key&lt;/span&gt; ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-742117799526348164?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/742117799526348164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=742117799526348164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/742117799526348164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/742117799526348164'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/07/touche-parent-introuvable.html' title='touche parent introuvable'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-4431240369852867420</id><published>2007-06-25T14:28:00.000+02:00</published><updated>2007-06-25T14:30:40.748+02:00</updated><title type='text'>jBPM 3.2.1</title><content type='html'>... is out, on sourceforge :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=70542"&gt;http://sourceforge.net/project/showfiles.php?group_id=70542&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-4431240369852867420?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/4431240369852867420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=4431240369852867420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4431240369852867420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4431240369852867420'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/06/jbpm-321.html' title='jBPM 3.2.1'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-4036992601829214380</id><published>2007-04-11T20:00:00.001+02:00</published><updated>2007-04-19T11:05:18.842+02:00</updated><title type='text'>jboss : per MDB pool size ?</title><content type='html'>&lt;p&gt;I am trying to find a way to set a per-MDB pool-size, like a setting in the jboss.xml descriptor. It is possible to do that in Weblogic by with an &lt;a href="http://e-docs.bea.com/wls/docs81/ejb/DDreference-ejb-jar.html#1114893"&gt;setting&lt;/a&gt; in the weblogic-ejb.xml. For now I see there is only a way to set the maximum size of the MDB pooling mechanisms &lt;a href="http://wiki.jboss.org/wiki/Wiki.jsp?page=ConfigJBossMDB"&gt;for all existing MDBs&lt;/a&gt;.&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;3 days later &lt;/span&gt;:  here's how it's done, you only need to modify your MDB's deployment descriptors. This is the jboss.xml descriptor of an MDB with a max of 4 beans per pool.&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&amp;lt;!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;jboss&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;enterprise-beans&gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;message-driven&gt;&lt;br /&gt;        &amp;lt;ejb-name&gt;OnNewDocumentMDB&amp;lt;/ejb-name&gt;                     &lt;br /&gt;        &amp;lt;destination-jndi-name&gt;queue/A&amp;lt;/destination-jndi-name&gt;&lt;br /&gt;        &amp;lt;configuration-name&gt;OnNewDocumentMDB-Config&amp;lt;/configuration-name&gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;/message-driven&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/enterprise-beans&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;container-configurations&gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;!-- this is the "Standard Message Driven Bean" config with strictMaximumSize set to 4 --&gt;&lt;br /&gt;   &amp;lt;container-configuration&gt;&lt;br /&gt;     &amp;lt;container-name&gt;OnNewDocumentMDB-Config&amp;lt;/container-name&gt;&lt;br /&gt;     &amp;lt;call-logging&gt;false&amp;lt;/call-logging&gt;&lt;br /&gt;     &amp;lt;invoker-proxy-binding-name&gt;message-driven-bean&amp;lt;/invoker-proxy-binding-name&gt;&lt;br /&gt;     &amp;lt;container-interceptors&gt;&lt;br /&gt;       &amp;lt;interceptor&gt;org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor&amp;lt;/interceptor&gt;&lt;br /&gt;       &amp;lt;interceptor&gt;org.jboss.ejb.plugins.LogInterceptor&amp;lt;/interceptor&gt;&lt;br /&gt;       &amp;lt;interceptor&gt;org.jboss.ejb.plugins.RunAsSecurityInterceptor&amp;lt;/interceptor&gt;&lt;br /&gt;       &amp;lt;!-- CMT --&gt;&lt;br /&gt;       &amp;lt;interceptor transaction="Container"&gt;org.jboss.ejb.plugins.TxInterceptorCMT&amp;lt;/interceptor&gt;&lt;br /&gt;       &amp;lt;interceptor transaction="Container"&gt;org.jboss.ejb.plugins.CallValidationInterceptor&amp;lt;/interceptor&gt;&lt;br /&gt;       &amp;lt;interceptor transaction="Container"&gt;org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor&amp;lt;/interceptor&gt;&lt;br /&gt;       &amp;lt;!-- BMT --&gt;&lt;br /&gt;       &amp;lt;interceptor transaction="Bean"&gt;org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor&amp;lt;/interceptor&gt;&lt;br /&gt;       &amp;lt;interceptor transaction="Bean"&gt;org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMT&amp;lt;/interceptor&gt;&lt;br /&gt;       &amp;lt;interceptor transaction="Bean"&gt;org.jboss.ejb.plugins.CallValidationInterceptor&amp;lt;/interceptor&gt;&lt;br /&gt;       &amp;lt;interceptor&gt;org.jboss.resource.connectionmanager.CachedConnectionInterceptor&amp;lt;/interceptor&gt;&lt;br /&gt;     &amp;lt;/container-interceptors&gt;&lt;br /&gt;     &amp;lt;instance-pool&gt;org.jboss.ejb.plugins.MessageDrivenInstancePool&amp;lt;/instance-pool&gt;&lt;br /&gt;     &amp;lt;instance-cache&gt;&amp;lt;/instance-cache&gt;&lt;br /&gt;     &amp;lt;persistence-manager&gt;&amp;lt;/persistence-manager&gt;&lt;br /&gt;     &amp;lt;container-pool-conf&gt;&lt;br /&gt;       &amp;lt;MaximumSize&gt;4&amp;lt;/MaximumSize&gt;&lt;br /&gt;       &amp;lt;strictMaximumSize&gt;true&amp;lt;/strictMaximumSize&gt;&lt;br /&gt;     &amp;lt;/container-pool-conf&gt;&lt;br /&gt;   &amp;lt;/container-configuration&gt;&lt;br /&gt;&amp;lt;/container-configurations&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/jboss&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-4036992601829214380?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/4036992601829214380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=4036992601829214380' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4036992601829214380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4036992601829214380'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/04/jboss-per-mdb-pool-size.html' title='jboss : per MDB pool size ?'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-6159282582394186634</id><published>2007-04-11T12:38:00.001+02:00</published><updated>2007-04-11T14:37:02.591+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='jee'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><title type='text'>JBoss XML hell</title><content type='html'>&lt;p&gt;I was a bit surprised when the anti-XML movement started. That's because I was just starting my career when the actual XML hype occured. I was more than happy to discover how easily you can store documents (text documents, like writers' works) in XML and how nicely you can transform them with XSLT. I even started an XML-based &lt;a href="http://www.scriptorium.ro/"&gt;digital library&lt;/a&gt; project.&lt;/p&gt; &lt;p&gt;I was a "freshman", I didn't really mind diving for several days into the XSLT's verbose syntax in order to master it. I never really mastered it, I still have to lookup into the documentation even for current constructs -- but that's another story.&lt;/p&gt; &lt;p&gt;So I loved XML when it occured. I am less enthusiastic right now but still far from hating it. I don't mind having to mind an XML appserver configuration file, an application XML spring configuration file, some Hibernate mappings and possibly some Ejb descriptors, all in XML.&lt;/p&gt; &lt;p&gt;But Jboss is really too much. Here are JBoss's configuration files:&lt;/p&gt; &lt;pre&gt;D:\jboss-4.0.5.GA\server\node-template&amp;gt;find . -iname *.xml&lt;br /&gt;./conf/jboss-service.xml&lt;br /&gt;./conf/log4j.xml&lt;br /&gt;./conf/login-config.xml&lt;br /&gt;./conf/standardjaws.xml&lt;br /&gt;./conf/standardjboss.xml&lt;br /&gt;./conf/standardjbosscmp-jdbc.xml&lt;br /&gt;./conf/xmdesc/AttributePersistenceService-xmbean.xml&lt;br /&gt;./conf/xmdesc/ClientUserTransaction-xmbean.xml&lt;br /&gt;./conf/xmdesc/JNDIView-xmbean.xml&lt;br /&gt;./conf/xmdesc/Log4jService-xmbean.xml&lt;br /&gt;./conf/xmdesc/NamingService-xmbean.xml&lt;br /&gt;./conf/xmdesc/org.jboss.deployment.JARDeployer-xmbean.xml&lt;br /&gt;./conf/xmdesc/org.jboss.deployment.MainDeployer-xmbean.xml&lt;br /&gt;./conf/xmdesc/org.jboss.deployment.SARDeployer-xmbean.xml&lt;br /&gt;./conf/xmdesc/TransactionManagerService-xmbean.xml&lt;br /&gt;./deploy/bsh-deployer.xml&lt;br /&gt;./deploy/cache-invalidation-service.xml&lt;br /&gt;./deploy/client-deployer-service.xml&lt;br /&gt;./deploy/cluster-service.xml&lt;br /&gt;./deploy/deploy-hasingleton-service.xml&lt;br /&gt;./deploy/deploy.last/farm-service.xml&lt;br /&gt;./deploy/ear-deployer.xml&lt;br /&gt;./deploy/ejb-deployer.xml&lt;br /&gt;./deploy/hsqldb-ds.xml&lt;br /&gt;./deploy/http-invoker.sar/invoker.war/WEB-INF/jboss-web.xml&lt;br /&gt;./deploy/http-invoker.sar/invoker.war/WEB-INF/web.xml&lt;br /&gt;./deploy/http-invoker.sar/META-INF/jboss-service.xml&lt;br /&gt;./deploy/iiop-service.xml&lt;br /&gt;./deploy/jboss-aop.deployer/base-aop.xml&lt;br /&gt;./deploy/jboss-aop.deployer/META-INF/jboss-service.xml&lt;br /&gt;./deploy/jboss-bean.deployer/META-INF/jboss-service.xml&lt;br /&gt;./deploy/jbossjca-service.xml&lt;br /&gt;./deploy/jbossweb-tomcat55.sar/conf/web.xml&lt;br /&gt;./deploy/jbossweb-tomcat55.sar/context.xml&lt;br /&gt;./deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml&lt;br /&gt;./deploy/jbossweb-tomcat55.sar/META-INF/webserver-xmbean.xml&lt;br /&gt;./deploy/jbossweb-tomcat55.sar/ROOT.war/WEB-INF/web.xml&lt;br /&gt;./deploy/jbossweb-tomcat55.sar/server.xml&lt;br /&gt;./deploy/jbossws14.sar/META-INF/jboss-service.xml&lt;br /&gt;./deploy/jbossws14.sar/META-INF/standard-jbossws-client-config.xml&lt;br /&gt;./deploy/jbossws14.sar/META-INF/standard-jbossws-endpoint-config.xml&lt;br /&gt;./deploy/jms/hsqldb-jdbc-state-service.xml&lt;br /&gt;./deploy/jms/hsqldb-jdbc2-service.xml&lt;br /&gt;./deploy/jms/jbossmq-destinations-service.xml&lt;br /&gt;./deploy/jms/jbossmq-httpil.sar/jbossmq-httpil.war/WEB-INF/jboss-web.xml&lt;br /&gt;./deploy/jms/jbossmq-httpil.sar/jbossmq-httpil.war/WEB-INF/web.xml&lt;br /&gt;./deploy/jms/jbossmq-httpil.sar/META-INF/jboss-service.xml&lt;br /&gt;./deploy/jms/jbossmq-service.xml&lt;br /&gt;./deploy/jms/jms-ds.xml&lt;br /&gt;./deploy/jms/jvm-il-service.xml&lt;br /&gt;./deploy/jms/uil2-service.xml&lt;br /&gt;./deploy/jmx-console.war/WEB-INF/jboss-web.xml&lt;br /&gt;./deploy/jmx-console.war/WEB-INF/web.xml&lt;br /&gt;./deploy/jmx-invoker-service.xml&lt;br /&gt;./deploy/jsr88-service.xml&lt;br /&gt;./deploy/mail-service.xml&lt;br /&gt;./deploy/management/console-mgr.sar/META-INF/jboss-service.xml&lt;br /&gt;./deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml&lt;br /&gt;./deploy/management/console-mgr.sar/web-console.war/WEB-INF/web.xml&lt;br /&gt;./deploy/monitoring-service.xml&lt;br /&gt;./deploy/properties-service.xml&lt;br /&gt;./deploy/schedule-manager-service.xml&lt;br /&gt;./deploy/scheduler-service.xml&lt;br /&gt;./deploy/snmp-adaptor.sar/attributes.xml&lt;br /&gt;./deploy/snmp-adaptor.sar/managers.xml&lt;br /&gt;./deploy/snmp-adaptor.sar/META-INF/jboss-service.xml&lt;br /&gt;./deploy/snmp-adaptor.sar/notifications.xml&lt;br /&gt;./deploy/sqlexception-service.xml&lt;br /&gt;./deploy/tc5-cluster.sar/META-INF/jboss-service.xml&lt;br /&gt;./deploy/uuid-key-generator.sar/META-INF/jboss-service.xml&lt;br /&gt;./deploy/xmlresolver-service.xml&lt;br /&gt;./farm/cluster-examples-service.xml &lt;/pre&gt;I am beginning to understand why people hate XML. This is not XML configuration this is an XML overdose. For your application, you'd normally want to change a datasource to a real database, perhaps to point some jms destination to it, deploy some EJBs and that should be it. It seems like with JBoss, you have to mix up your customized settings with the existing plethora of files. &lt;p&gt;I'll probably get better at this as I master JBoss but for starting it is really not encouraging. It is of course a nice thing to have everything configurable in JBoss, I mean really &lt;strong style="font-weight: normal; font-style: italic;"&gt;everything&lt;/strong&gt;, but that should be a second option for advanced users, not the first feeling you get when you start playing with it. &lt;/p&gt;&lt;p&gt;"Sensible defaults" is pretty common wisdom these days but it seems JBoss isn't there yet. It's like having a great sports cars with access to all the aspects and buttons of the engine when all you need is a wheel and some pedals. You can move all the control levers, but you know you shouldn't really.&lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Correction &lt;/span&gt;: No, JBoss does have &lt;span style="font-style: italic;"&gt;sensible defaults&lt;/span&gt;. You &lt;span style="font-style: italic;"&gt;can&lt;/span&gt; start it out of the box, everything works ok. Also, its service bindings feature makes multi-node clusters demos on the same machine easy, by easily changing sets of ports. What JBoss doesn't have, or manages to keep it very well hidden, is a clean separation of what is server's and what is application's.&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;For now, as I understand it, my EJBs are deployed in the same place (the&lt;span style="font-family:courier new;"&gt; &lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;deploy/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; directory) as the server's basic functionalities, like the servlet container or the web service facilities. Is it imaginable that the production guy, instead of deleting my ejb or ear in order to upgrade it, deletes the servlet container, which is just next to it on the filesystem ? I think it is.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-6159282582394186634?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/6159282582394186634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=6159282582394186634' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/6159282582394186634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/6159282582394186634'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/04/jboss-xml-hell.html' title='JBoss XML hell'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-3397294036794261511</id><published>2007-03-30T11:05:00.001+02:00</published><updated>2007-03-30T11:32:26.103+02:00</updated><title type='text'>Some impressions on Synergy CM</title><content type='html'>&lt;p&gt;I am using Synergy CM as a source control management system these days. &lt;/p&gt; &lt;p&gt;Not very familiar. I used a lot CVS with Jira, seen some Subversion + Trac at work. Right now, I am in the "i don't really like it but I may be able to live with it" spot. The second part may change, depending on whether it be possible or not to do continuous integration with a Cruise Control server and Synergy CM. The fact that branching is so current and that there is no "main" HEAD line makes life somewhat difficult.&lt;/p&gt; &lt;p&gt;There is no continuous integration faciliy at the moment in my institution. That will probably change soon.&lt;/p&gt; &lt;p&gt;One feature that I liked, still : say you refactored some code pretty radically, you want rapidly to use the previous version to see how the software functioned before -- because of some bug you introduced with the refactoring. With Synergy, you can click on the file's history and select "use version x", and Synergy will take care for you to save the current working version, replace it with the previous version -- no file manipulation required. After you check how the program worked with the previous functionality, you can go back to the current version. Don't know about Subversion, but with CVS you had to manually replace files and be careful not to lose your changes.&lt;br /&gt;&lt;/p&gt;Telelogic, the makers of Synergy are the kind of company that only let people download product documentation after they are logged in as valid buyers. So you have to ask around people to give you passwords, lost ever since the product was bought and so on. I can't help getting a pre-internet feeling in situations like this. &lt;p&gt;I was curious about what people would have to say on the Internet about Synergy. Not much, and that should be no surprise as Synergy is pretty much as closed as you can get these inherently networked days.&lt;/p&gt; &lt;p&gt;Still, on Wikipedia, there is some interesting material, not on the actual Synergy page -- which is completely boring and marketing-like by the way -- but on its "&lt;a href="http://en.wikipedia.org/wiki/Talk:Telelogic_SYNERGY"&gt;discussion&lt;/a&gt;" tab. An interesting read for people coming from open source version systems to Synergy. The well-deserved conclusion :&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote style="font-style: italic;"&gt;Over all, on the cognitive dissonance scale Synergy gets one polar bear and one flashlight out of a possible five stars.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-3397294036794261511?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/3397294036794261511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=3397294036794261511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/3397294036794261511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/3397294036794261511'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/03/impression-on-synergy-cm.html' title='Some impressions on Synergy CM'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-7012947565706624671</id><published>2007-03-14T22:35:00.000+01:00</published><updated>2008-12-11T21:32:13.787+01:00</updated><title type='text'>linux as a desktop failure</title><content type='html'>I am a fan of Linux. I have been a Linux user for 10 years. I am using Ubuntu linux to post this very message. Still, I must say that Linux is  a major desktop failure. I will illustrate this as follows :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_tANlrL3PmF8/RfhrOt1CKnI/AAAAAAAAABc/hTdHNcZT-W8/s1600-h/still-no-play-cd-option.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_tANlrL3PmF8/RfhrOt1CKnI/AAAAAAAAABc/hTdHNcZT-W8/s400/still-no-play-cd-option.png" alt="" id="BLOGGER_PHOTO_ID_5041897683405646450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As you can see, I right clicked on the audio CD icon that appears on the desktop when an audio CD is inserted into the player. Still, after &lt;span style="font-style: italic;"&gt;all these years&lt;/span&gt;, you right click on an audio CD -- note that it is even correctly recognized as an audio CD -- and you get no "play this cd" option. You  have to guess that the improperly iconed option "Open" actually is the option you want.  Or you have to manually launch your player, kscd or whatever you use, that is you &lt;span style="font-style: italic;"&gt;must already know  &lt;/span&gt;the name of the executable corresponding to the cd-playing application.&lt;br /&gt;&lt;br /&gt;In 2007.&lt;br /&gt;&lt;br /&gt;On the planet's supposedly most user-friendly Linux distribution.&lt;br /&gt;&lt;br /&gt;And that is not all. While not illustrated by the picture above, if you insert an audio CD into an Ubuntu box, you'll &lt;span style="font-style: italic;"&gt;automatically  &lt;/span&gt;get an application popping up that plays your CD. Why, that IS wonderful, isn't it ? That is called automation and user friendliness.&lt;br /&gt;&lt;br /&gt;Except -- that the darn application that get launched is actually called &lt;span style="font-weight: bold;"&gt;Sound Juicer&lt;/span&gt; -- and is an application which is really meant to&lt;span style="font-style: italic;"&gt; rip&lt;/span&gt; CD tracks and, marginally, has a feature to also play them. You get this &lt;span style="font-style: italic;"&gt;by default&lt;/span&gt; on your Linux desktop, a ripping application for playing a CD.&lt;br /&gt;&lt;br /&gt;Linux is awful on desktop.&lt;br /&gt;&lt;br /&gt;The best applications for Linux have been ported on Windows. You have all the command line tools, the servers, the language interpreters. You install Cygwin on your windows desktop and much of the frustration that comes with the "windowsness" goes away. Instead you have a polished, working, good looking desktop.&lt;br /&gt;&lt;br /&gt;And Linux can't even offer you an option to play a CD. I hate to admit it, Linux is awful on desktop.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-7012947565706624671?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/7012947565706624671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=7012947565706624671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/7012947565706624671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/7012947565706624671'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/03/linux-is-desktop-failure.html' title='linux as a desktop failure'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_tANlrL3PmF8/RfhrOt1CKnI/AAAAAAAAABc/hTdHNcZT-W8/s72-c/still-no-play-cd-option.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-4400265209878017834</id><published>2007-03-08T16:43:00.001+01:00</published><updated>2007-03-08T17:34:22.555+01:00</updated><title type='text'>nothing works in eclipse JEE</title><content type='html'>&lt;p&gt;... argh... &lt;/p&gt; &lt;p&gt;Lots of frustration today : just wanted to quickly create an EJB with Eclipse 3.2.2 and deploy it under a local JBoss 4.x. It turns out that nothing works. I have an Eclipse with J2EE standard tools v. 1.5.3 support and the JBoss IDE 1.6.0 installed as a plus.&lt;/p&gt; &lt;h3&gt;EJB 2 &lt;/h3&gt; &lt;p&gt;Suppose you want to create a stateless 2.x ejb. Eclipse JST uses xdoclet-based annotations in order to generate EJB infrastructure. That's ok. I created with JBossIDE a stateless bean, but when I want to configure the xdoclet plugin as &lt;a href="http://docs.jboss.com/jbosside/tutorial/build/en/html/ejb.file.generation.html"&gt;documented&lt;/a&gt; I get :&lt;/p&gt;&lt;pre&gt;!ENTRY org.eclipse.jface 4 2 2007-03-08 11:06:38.713&lt;br /&gt;!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jface".&lt;br /&gt;!STACK 0&lt;br /&gt;java.lang.NoClassDefFoundError: org/eclipse/jdt/internal/ui/viewsupport/ListContentProvider&lt;br /&gt;  at org.jboss.ide.eclipse.xdoclet.run.ui.ConfigurationListViewer.&lt;init&gt;(ConfigurationListViewer.java:115)&lt;br /&gt;  at org.jboss.ide.eclipse.xdoclet.run.ui.properties.ConfigurationPropertyPage.createContents(ConfigurationPropertyPage.java:329)&lt;br /&gt;  at org.eclipse.jface.preference.PreferencePage.createControl(PreferencePage.java:233)&lt;/init&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;A Google search takes me &lt;a href="http://www.mail-archive.com/xdoclet-devel@lists.sourceforge.net/msg19289.html" rel="i hate eclipse's jee support !"&gt;here&lt;/a&gt;. It looks like an incompatibility between Eclipse and its own JST-included xdoclet plugin. &lt;/p&gt;&lt;p&gt;And then the Internet ends.&lt;/p&gt;&lt;h3&gt;Ejb 3 &lt;/h3&gt;Ok, 2.x EJB are history anyway, let's try 3.0. You have to add  the JBoss 3.0 EJB libraries&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;img src="http://farm1.static.flickr.com/156/414663860_a24c7a6291.jpg?v=0" alt="" border="0" /&gt;&lt;br /&gt;&lt;/p&gt;Clicking Next on "JBoss EJB3 Libraries" gets you an invitation to create a new JBoss configuration. Clicking on the "New" button, you get this in your &lt;span style="font-family:cour;"&gt;$workspace/.metadata/.log&lt;/span&gt; :&lt;pre&gt;java.lang.NoClassDefFoundError: org/eclipse/jdt/internal/debug/ui/launcher/JavaLaunchConfigurationTab&lt;br /&gt;  at java.lang.ClassLoader.defineClass1(Native Method)&lt;br /&gt;  at java.lang.ClassLoader.defineClass(Unknown Source)&lt;br /&gt;  at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:161)&lt;br /&gt;  at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:501)&lt;br /&gt;  at&lt;br /&gt;&lt;/pre&gt;Again, Google takes me &lt;a title="it's planned for 2.0" href="http://jira.jboss.com/jira/browse/JBIDE-295"&gt;here&lt;/a&gt;. This time somebody says that it's fixed in the alpha 2.0 code.&lt;br /&gt;&lt;p&gt; &lt;/p&gt;So I'm thinking to myself : I get this bunch of exceptions with already production-ready Eclipse plugins. Should I install the &lt;em&gt;alpha&lt;/em&gt; 2.0 thing to get the fix ?&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;I'm still thinking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-4400265209878017834?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/4400265209878017834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=4400265209878017834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4400265209878017834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/4400265209878017834'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/03/nothing-works-in-eclipse-jee.html' title='nothing works in eclipse JEE'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-3919732280015644076</id><published>2007-03-02T16:06:00.000+01:00</published><updated>2007-03-02T16:36:49.606+01:00</updated><title type='text'>cygwin xterm options</title><content type='html'>I will immortalize the xterm options I need in order for me to like my cygwin xterm (I have to lookup options in the man page every time I change my working place) :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;xterm -display 127.0.0.1:0.0 -ls -fn -misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*  -bg black -fg gray +bdc -fb blue +t  -geometry 160x50&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(by default, cygwin xterm is black on white which is... brilliant)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-3919732280015644076?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/3919732280015644076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=3919732280015644076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/3919732280015644076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/3919732280015644076'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/03/cygwin-xterm-options.html' title='cygwin xterm options'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-6771185260751939814</id><published>2007-02-09T19:23:00.000+01:00</published><updated>2007-02-19T11:28:02.701+01:00</updated><title type='text'>why two forms ?</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I always wondered why on every single site I visited in my life, there were two &lt;span style='font-style: italic;'&gt;different&lt;/span&gt; HTML forms: one for registered users, that were supposed to input the &lt;span style='font-style: italic;'&gt;existing&lt;/span&gt; login and password, and another one for new users, that are supposed to register in a totally different form. On the worst sites, you actually have to look a lot for the link "register new user".&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;So. For the first time in my life I see a site that does not do that: &lt;a href='http://www.librarything.com/'&gt; http://www.librarything.com/&lt;/a&gt; and it sure deserves a link for that. Even if you are a new user, you simply input your login and password, and, not surprisingly, it gets created and a little message informs you about your account that has &lt;span style='font-style: italic;'&gt;just&lt;/span&gt; been created.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;div id='OAK_VOC_DIV_ID' style='border: 1px solid rgb(0, 0, 0); margin: 0px; padding: 0px; overflow: visible; position: absolute; left: 32px; top: 102px; width: 444px; height: 352px; display: none; z-index: 1000; font-size: 12px; cursor: default;'&gt;&lt;div id='oakvoc-tip-title-div' style='border: medium none ; margin: 0px; overflow: hidden; width: 100%; height: 24px;'&gt;&lt;iframe id='oakvoc_iframe_title' style='border: 0px none ; margin: 0px; padding: 0px; overflow: hidden; width: 100%; height: 24px;'&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div id='oakvoc-tip-content-div' style='border: medium none ; margin: 0px; padding: 0px; overflow: visible; width: 100%; height: 328px;'&gt;&lt;iframe id='oakvoc_iframe' style='border: 0px none ; margin: 0px; padding: 0px; overflow: hidden; width: 100%; height: 328px;'&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-6771185260751939814?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/6771185260751939814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=6771185260751939814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/6771185260751939814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/6771185260751939814'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/02/why-two-forms.html' title='why two forms ?'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-2116423863554302045</id><published>2007-01-30T11:56:00.000+01:00</published><updated>2007-01-30T12:23:49.813+01:00</updated><title type='text'>osgi spring tech talk</title><content type='html'>&lt;a href="http://www.bejug.org/confluenceBeJUG/display/PARLEYS/Spring+OSGi"&gt;http://www.bejug.org/confluenceBeJUG/display/PARLEYS/Spring+OSGi&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Very instructive tech talk on OSGi (i love the lowercase thing by the way). Also on Spring, enterpresey usage scenarios which are of course very interesting if you work in, well, an enterprise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-2116423863554302045?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/2116423863554302045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=2116423863554302045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2116423863554302045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/2116423863554302045'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/01/osgi-spring-tech-talk.html' title='osgi spring tech talk'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-8143709487544311717</id><published>2007-01-22T09:45:00.001+01:00</published><updated>2007-01-22T09:53:24.151+01:00</updated><title type='text'>How do I want to play an MP3</title><content type='html'>&lt;p&gt;Having read a bit on what OSGi is, I would like to correct my first guess. The specificity of OSGi seems to lie in the fact that it is supposed to connect services that are supposed to appear and disappear dynamically. Like when you're walking around with your bluetooth-enabled PDA in a building. New services offered by appliances that lie around in the building appear and disappear -- and your own PDA offers services that appear and disappear seen from the other appliances.&lt;/p&gt; &lt;p&gt;So the correction would be: OSGi is&amp;nbsp;a sort of dynamic maven (as in dependency manager) for &lt;em&gt;unstable&lt;/em&gt; services.&lt;/p&gt; &lt;p&gt;So&amp;nbsp;OSGi looks more intended for "pervasive computing" (that is computing-enabled home appliances) than for enterprise computing.&lt;/p&gt; &lt;p&gt;Since I talked about pervasive computing :&lt;/p&gt; &lt;p&gt;I personally find it outraging that you still can't&amp;nbsp;play an MP3 from your PDA on your CD player, or a DivX on your TV set. It should be just a matter of respecting some well-known interfaces in published services on each appliance, offering and consuming this service by, say, bluetooth. How hard can it be ?&lt;/p&gt; &lt;p&gt;Scenarios of playing an MP3 : you have a PDA with an MP3 inside. You'll "right-click" on your mp3, you'll choose "Play on..."; a small dialog box will appear with a small display "Searching matching services..."; after 5 seconds or so, you'll see a list sporting your CD-player, your computer, your wife's computer, your TV and the small radio-set that you use for waking up every morning that you even forgot it could play mp3s. You say&amp;nbsp;to yourself :&lt;/p&gt; &lt;p&gt;-- Aha, I didn't know it could do that. So that's why is was so expensive, not because of the stupid rabbit-like appearance. &lt;/p&gt; &lt;p&gt;And you choose your CD-player as playing target.&lt;/p&gt; &lt;p&gt;What happened behind the scenes ? The PDA asked every bluetooth-enabled appliance in reach : who has a service with a method &lt;font face="Courier New"&gt;playMp3(Mp3Stream)&lt;/font&gt; ? And appliances that could do that answered. As to the refrigerator, it&amp;nbsp;stood silent, sort of ashamed of not being able to do such a simple thing that seemingly every other appliance in the house was able to do.&lt;/p&gt; &lt;p&gt;It should be that simple, really.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-8143709487544311717?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/8143709487544311717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=8143709487544311717' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/8143709487544311717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/8143709487544311717'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/01/how-do-i-want-to-play-mp3.html' title='How do I want to play an MP3'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3467635766862346474.post-5816977613607249754</id><published>2007-01-18T17:12:00.001+01:00</published><updated>2007-01-18T17:33:31.797+01:00</updated><title type='text'>OSGI -- to Java desktop integration ?</title><content type='html'>&lt;p&gt;Trying these days to figure out just what &lt;a href="http://www.osgi.org/"&gt;OSGI&lt;/a&gt; is, and just where its added value is located, compared to other component systems, like EJB, COM or Webservices.&lt;/p&gt; &lt;p&gt;I have just installed &lt;a href="http://www.knopflerfish.org"&gt;Knoplerfish&lt;/a&gt; and it does sport a nice GUI of bundles which all of a sudden&amp;nbsp;makes things a lot more intuitive, understanding a lot simpler. Ah, and a&amp;nbsp;&lt;em&gt;bundle&lt;/em&gt; is simply&amp;nbsp;the OSGI jargon for a component.&lt;/p&gt; &lt;h3&gt;A runtime Maven&lt;/h3&gt; &lt;p&gt;If I understand correctly, the advantage is that if you need a dependency jar, like, say, logging, you won't need to put it in your classpath&amp;nbsp;in order to&amp;nbsp;use it. In an OSGi environment, you kind of ask it to the framework and the framework gently gives it to you if there is any. The service may disappear at any moment, it can be started, stopped, deployed, undeployed, everything at runtime.&lt;/p&gt; &lt;p&gt;So in this respect, I see OSGI as a runtime Maven, that is, a system that manages dependencies at runtime.&lt;/p&gt; &lt;p&gt;But this is not everything there is to it. You won't have access to&amp;nbsp;the bundle's&amp;nbsp;classpath space as the service bundle lives in a separate classloader. Which is good, but I can't help noticing that you can do that with EJB too. Except that with EJB, you don't really have the possibility to look up services you need. You do have JNDI -- but that's only a way of putting labels on services, it is far from being able to find an adequate implementation for a service you might require.&lt;/p&gt; &lt;h3&gt;Java for desktop&lt;/h3&gt; &lt;p&gt;I wonder if OSGI kind of frameworks might eventually solve the chronical problem of java desktop integration. The latter is sublime, but completely inexistant as some playwright might put it.&lt;/p&gt; &lt;p&gt;Unless you provide a usually non-java installer with your java app, a non-technical -- and more often than not even technical -- user is helpless when faced to the task of running a java application. He normally must download the JRE, have an idea about classpath, write shell scripts or use existing. This is not integration. The fact that every single java package must come with a couple of shell scripts in order to be able to run them on different platforms, means that java is not integrated with any desktop, as far as I'm aware.&lt;/p&gt; &lt;p&gt;There is the "installing the JRE" problem. I don't&amp;nbsp;have a clear idea on&amp;nbsp;how this one might be solved. &amp;nbsp;The ideal&amp;nbsp; one should have in mind is, of course, Flash. Flash is easily installable, and installed everywhere. The JRE is a big monster, and, not to forget, pretty ugly in its genre -- not until Java 5 could we escape the default mauve "frankenstein" theme.&lt;/p&gt; &lt;p&gt;But &lt;em&gt;the &lt;/em&gt;main problem, besides the non-obiquity of JRE, is the classpath mess. In order to run a non-trivial app you need lots of jar dependencies so you need to set the classpath. So you need shell scripts. Then you may have several version of&amp;nbsp;the same&amp;nbsp;libraries for different apps. So you need &lt;em&gt;smart&lt;/em&gt; non-trivial, detecting scripts that would not load the bad version.&lt;/p&gt; &lt;p&gt;Things may change if downloading and running a Java application would boil down to downloading its own single app-specific jar. A previously installed OSGI platform might provide the Java app with basic services and classpath load-time dependencies would be replaced with runtime SOA-like dependency. If a standard (think logging, think db, think xml) dependency was not already installed, it would be automatically downloaded and installed. If some non-standard dependency were needed, some user bugging would occur, asking him to acknowledge that he is sure to install this or that bizarre dependency.&lt;/p&gt; &lt;p&gt;This kind of service-based dependency reminds me ActiveX (COM). I am not sure ActiveX is able to manage several component versions but you have the idea.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3467635766862346474-5816977613607249754?l=obiecte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://obiecte.blogspot.com/feeds/5816977613607249754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3467635766862346474&amp;postID=5816977613607249754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5816977613607249754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3467635766862346474/posts/default/5816977613607249754'/><link rel='alternate' type='text/html' href='http://obiecte.blogspot.com/2007/01/osgi-desktop-integration.html' title='OSGI -- to Java desktop integration ?'/><author><name>Adrian Dimulescu</name><uri>http://www.blogger.com/profile/03116923796167328828</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
