<?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-30278691</id><updated>2012-01-30T09:23:45.341+02:00</updated><category term='netbeans platform'/><category term='browser ide'/><category term='fun'/><title type='text'>Emilian Bold's blog</title><subtitle type='html'>Broadcasting from the Romanian trenches</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default?start-index=101&amp;max-results=100'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>107</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-30278691.post-3617131139626000846</id><published>2011-12-16T17:45:00.000+02:00</published><updated>2011-12-16T17:45:04.194+02:00</updated><title type='text'>Capitalism, dignity and the health care system</title><content type='html'>A relative of mine underwent surgery and it allowed me to revisit the horror that is the Romanian medical system and in particular the Romanian medical Man.&lt;br /&gt;&lt;br /&gt;The hospital is not as dirty as I remembered it, so things must be getting better, but the kind of person you see employed there is about the same.&lt;br /&gt;&lt;br /&gt;To me, Capitalism is an Arena. It's the Great Arena. It's the place where the strong show their strength. It's wonderful!&lt;br /&gt;&lt;br /&gt;But wounded or sick people don't fight into an arena. Nor old people, nor children. There are rules and there must be some Esthetic to the fight. We need a safety net for these people because if you are sick and society fixes you up, you might return into the Arena and bring value into the world.&lt;br /&gt;&lt;br /&gt;There is a lot of bribing going on in the Romanian National health care system and bribing means a severe lack of Dignity.&lt;br /&gt;&lt;br /&gt;It's not just patients that lose their dignity, it's everyone involved.&lt;br /&gt;&lt;br /&gt;The patient is an insured person that shouldn't have to pay a thing: the State takes a percentage from every salary for healthcare. It's with great hypocrisy that people are expected to bribe the doctors too as well as buy their own medical supplies. Yes, the patient is sent next door to the pharmacy to buy what's needed for the surgery!&lt;br /&gt;&lt;br /&gt;Bribing is by definition a very hush-hush thing even if it happens at such a large scale: patients don't even know how much to give to whom, when and how many times. It is a great demeaning ambiguity.&lt;br /&gt;&lt;br /&gt;But doctors don't have it any better. The same ambiguity makes them lose dignity too. I've seen the same doctor visit the patient about 4 times for nothing, just because he hadn't received his bribe yet. When the money entered his pocket, he was finally able to do something else. This is the life of a beggar.&lt;br /&gt;&lt;br /&gt;Doctors must not be thinking about financial gains. A good salary combined with the general respect doctors have should provide a nice life for them.&lt;br /&gt;&lt;br /&gt;Capitalism seems mostly incompatible with the medical profession. You cannot have a homo homini lupus situation where a weaker person which is not in the best shape will have to just trust somebody that's actually thinking about financial gains. People should be able to stand tall and look in each-other's eyes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-3617131139626000846?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/3617131139626000846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=3617131139626000846&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3617131139626000846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3617131139626000846'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2011/12/capitalism-dignity-and-health-care.html' title='Capitalism, dignity and the health care system'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-1092974535921852388</id><published>2011-05-05T17:19:00.001+03:00</published><updated>2011-05-05T17:22:26.980+03:00</updated><title type='text'>I will release an OSX-focused IDE distribution</title><content type='html'>I plan on releasing a NetBeans-based IDE distribution. Just as there are a whole bunch of Linux distributions, I believe there should be more IDE distributions.&lt;br /&gt;&lt;br /&gt;What I intend to focus on is OSX support since, although a lot of people use NetBeans on OSX, it always looked to me like it needs more polish.&lt;br /&gt;&lt;br /&gt;Native OSX integration is one of the reasons I wrote the &lt;a href="http://www.nbnotify.com"&gt;NBnotify.com&lt;/a&gt; plugin, which shows IDE notifications via Growl. And there are other areas where NetBeans needs to pay more attention to the way it does things in order to be in tune with OSX.&lt;br /&gt;&lt;br /&gt;I have many features in mind, but I'll leave you with just two low-level ones:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Drag and drop installer&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The IDE should be available as a simple &lt;code&gt;dmg&lt;/code&gt; which users just open and then drag and drop the application wherever they feel like it. You shouldn't need administrator rights just to install the application.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Using proper OSX folders&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The &lt;code&gt;~/.netbeans&lt;/code&gt; folder will go away entirely. There are some standard places to store caches, preferences and everything else on OSX, usually in the &lt;code&gt;Library&lt;/code&gt; folder. The IDE should be a proper citizen and store data there so that users and helper tools know what it represents, which is important and which may be discarded if disk space is becoming an issue.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Of course, one of the high-level features would be Growl notifications for IDE events.&lt;br /&gt;&lt;br /&gt;So much for the first post talking about my IDE distribution. As I get closer to a release I might mention some of the other features.&lt;br /&gt;&lt;br /&gt;When is it going to be released? Well, sometime this year, but in order to be certain let's say you should expect it in your Christmas stockings.&lt;br /&gt;&lt;br /&gt;Why am I announcing it so early? Because I want to get some initial feedback about what people feel it's missing in their NetBeans IDE, either overall or specifically on OSX.&lt;br /&gt;&lt;br /&gt;Also, this is as a way to commit myself to a release. So, feel free to bother me as we approach the release date.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-1092974535921852388?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/1092974535921852388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=1092974535921852388&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1092974535921852388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1092974535921852388'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2011/05/i-will-release-osx-focused-ide.html' title='I will release an OSX-focused IDE distribution'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-8668122402431144222</id><published>2011-03-28T14:18:00.001+03:00</published><updated>2011-03-28T14:38:48.138+03:00</updated><title type='text'>The startup company hierarchy of needs</title><content type='html'>I've been focusing on different themes than usual with regard to &lt;a href="http://www.josekibold.ro/"&gt;my company&lt;/a&gt; and I've come to realize it might just be a mental shift on the Maslow pyramid.&lt;br /&gt;&lt;br /&gt;We are still a tiny company (just 4 people) and our business isn't large in terms of income, but I think it's probably enough for me to trigger a shift into my thoughts.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Maslow's_hierarchy_of_needs"&gt;Maslow's hierarchy of needs&lt;/a&gt; describes the stages in human growth and it seems to apply just as well to a company:&lt;br /&gt;&lt;br /&gt;&lt;img src='http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Maslow%27s_Hierarchy_of_Needs.svg/500px-Maslow%27s_Hierarchy_of_Needs.svg.png'/&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Physiological needs&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The lowest level in the Maslow pyramid are the physiological needs. These are the basic survival needs: air, water, food, shelter and sex.&lt;br /&gt;&lt;br /&gt;There is nothing fancy here. A company at this stage is basically aiming for that ramen profitability. Everything else are mostly nice thoughts, because the immediate future is all about corporate survival.&lt;br /&gt;&lt;br /&gt;When I first started my company, this was the most important thing. I didn't care about anything else, except knowing that I had customers and I was profitable. Of course, personally I've been lucky to have some nice and decent customers where I worked on some interesting stuff, but from a corporate standpoint it was all about being profitable and having projects to keep me, and later my team, busy and liquid.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Safety needs&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Wikipedia has a nice explanation:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;These needs have to do with people's yearning for a predictable orderly world in which perceived unfairness and inconsistency are under control, the familiar frequent and the unfamiliar rare.&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;This is where I find myself to be since about last summer...&lt;br /&gt;&lt;br /&gt;Ever since the financial crisis came in Romania too, the government has made a lot of unexpected and rash changes: laws changed over night, tax legislation changed, corporate expenses limited by law in weird ways.&lt;br /&gt;&lt;br /&gt;Also, corruption was left basically unchecked, while the government still found enough time to waste money.&lt;br /&gt;&lt;br /&gt;So, I've started yearning for some &lt;b&gt;predictable&lt;/b&gt; legislation (fiscal, labour, etc) as well as a reduced threat of corruption.&lt;br /&gt;&lt;br /&gt;I still haven't found a solution to this. Since changing Romania first is impractical, I've been reading a lot about incorporating into other countries.&lt;br /&gt;&lt;br /&gt;This is a complicated equation involving corporate specific variables such as taxation, accounting expenses, rent as well as personal variables: I'd probably need to relocate or travel a whole lot more and that's hard.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Love and belonging&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Love and belonging has two levels in a company: internal and external.&lt;br /&gt;&lt;br /&gt;Internally I don't think we have a particularly strong belonging feeling since we were very focused on just getting the job done. We are distributed in 3 cities quite far away so there is no physical closeness which I think hinders us a bit.&lt;br /&gt;&lt;br /&gt;This is something we should work at, but I guess it's not on the list yet. One of my future plans is maybe get an actual corporate office but that's a problem in itself and it would split us: 2 guys would work in an office and 2 guys 500km away.&lt;br /&gt;&lt;br /&gt;Externally, the company sends upstream bugfixes for the open-source code we work on, we support the localization effort into Romanian of an open-source product and this year I want to get a junior researcher / student into a part-time position doing open research (it's basically a sponsorship disguised as a job since legally it's way simpler).&lt;br /&gt;&lt;br /&gt;But, sadly, the company isn't involved at all in the local community.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Esteem&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Esteem means wanting respect, status, fame and attention as well as self-respect, competence, mastery, self-confidence, independence and freedom.&lt;br /&gt;&lt;br /&gt;So far the company is very low level and mostly "behind the scenes". We basically do contract work so the end users never know anything about our involvement.&lt;br /&gt;&lt;br /&gt;It would be nice to be known by our users and even nicer to be independent and actually sell products to end users directly. But we are not there yet.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Self-actualization&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;"What a man can be, he must be." Realizing the full potential.&lt;br /&gt;&lt;br /&gt;I'm not even sure what to speculate here. I believe we have something interesting and I'm rather proud of my team but I couldn't say exactly what the full potential is. Still searching this one.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusions&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Maslaw's pyramid seems to be a quite nice simplification. Of course, the layers intertwine and evolution isn't linear like that but it seems to apply quite nicely for a startup too (which isn't entirely surprising since a company is a social construct.)&lt;br /&gt;&lt;br /&gt;It might be an interesting exercise to analyze your own startup through this hierarchy and see where do you stand as well as what you should be focusing on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-8668122402431144222?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/8668122402431144222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=8668122402431144222&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8668122402431144222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8668122402431144222'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2011/03/startup-company-hierarchy-of-needs.html' title='The startup company hierarchy of needs'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-805051048805469212</id><published>2011-03-14T03:07:00.001+02:00</published><updated>2011-03-14T03:14:23.608+02:00</updated><title type='text'>The IDE must move onto the server</title><content type='html'>Here is a video of my prototype online IDE (watch it in 720p if possible):&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="750" src="http://www.youtube.com/embed/1d55OmpiQ2U?rel=0&amp;amp;hd=1" title="YouTube video player" width="960"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;It's basically a subset of how I think a browser-based IDE should look like and where we should get, pretty soon.&lt;br /&gt;&lt;br /&gt;I've just focused on some essential parts in my prototype:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The IDE must be accessed via a standard browser and should be installable (ie. your own startup should be able put it on a dedicated server).&lt;/li&gt;&lt;li&gt;Project/user timeline with commits, bug reports, code reviews, etc.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Good&lt;/b&gt; editor: syntactic and semantic highlighting, project-based code completion, code folding.&lt;/li&gt;&lt;li&gt;Running tests locally (a signed applet gets disk access if needed) or remote. I guess the local part is just for reassurance and, perhaps, offline fallback. &lt;/li&gt;&lt;li&gt;Some form of chat for internal communications.&lt;/li&gt;&lt;li&gt;Integrated metrics and reports from various sources (FindBugs, build server, project planning tools, etc).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The most important thing is the editor: I still don't see a good Javascript-based editor and certainly not one for Java, which is what I would need.&lt;br /&gt;&lt;br /&gt;The next thing is the proper integration of the various external tools. You could hook the build server test results and findbugs warnings straight into editor hints or error stripe, for example.&lt;br /&gt;&lt;br /&gt;I also think nobody is focusing on the kind of automated learning we could apply to projects once everything is in one place. Nothing says progress like a browser Clippy saying &lt;i&gt;Hey, it looks like you're solving almost the same threading problem as John did on this other bug 3 months ago&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;All in all, my work is just a prototype. But I do hope that in the near future I wouldn't need a workstation to do my job -- just a humble device with a decent network connection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-805051048805469212?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/805051048805469212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=805051048805469212&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/805051048805469212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/805051048805469212'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2011/03/ide-must-move-onto-server.html' title='The IDE must move onto the server'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/1d55OmpiQ2U/default.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-6706116387353338679</id><published>2011-01-25T10:42:00.001+02:00</published><updated>2011-01-25T10:48:21.292+02:00</updated><title type='text'>About the Hudson debacle</title><content type='html'>There are some big discussions about forking Hudson. Oracle's &lt;a href='http://hudson-ci.org/docs/process_summary.html'&gt;latest response&lt;/a&gt; seems to have triggered &lt;a href='http://kohsuke.org/2011/01/24/on-oracle-proposal-about-hudson'&gt;this reply&lt;/a&gt; from Hudson's main developer Kohsuke, now hired by CloudBees.&lt;br /&gt;&lt;br /&gt;Personally, I don't see all that much negativity in the Oracle message. Actually, it seems very well balanced.&lt;br /&gt;&lt;br /&gt;One thing I agree entirely: there is no such thing as a project "renaming". We are talking about a fork. Even if the Jenkins fork becomes the one with the biggest market share, it's still a fork.&lt;br /&gt;&lt;br /&gt;This reminds me of the &lt;a href='http://en.wikipedia.org/wiki/GNU_Compiler_Collection#EGCS_fork'&gt;EGCS fork&lt;/a&gt; of the GCC which became so good it actually became the next 'official' GCC release. There is still a chance this might happen for Hudson/Jenkins so I don't see why Kohsuke seems so eager to burn all the bridges with Oracle.&lt;br /&gt;&lt;br /&gt;I am also part of the "community", using Hudson since before it was so fashionable, and I don't see why should I be so enraged about all this? I guess I am too cynical not to notice that there are two companies involved: CloudBees and Oracle and only one of these two makes money almost exclusively from Hudson-based services. I think there's a natural conflict when for-profit companies make money from open-source software -- they'll always want to keep some proprietary "added value".&lt;br /&gt;&lt;br /&gt;What I did understand is that Oracle has some fear of using non-Oracle infrastructure (github, etc) which seems to annoy some of the developers. But, other than that, I don't understand the need to fork the project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-6706116387353338679?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/6706116387353338679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=6706116387353338679&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/6706116387353338679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/6706116387353338679'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2011/01/about-hudson-debacle.html' title='About the Hudson debacle'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-7471641279861868914</id><published>2011-01-21T15:43:00.000+02:00</published><updated>2011-01-21T15:43:05.844+02:00</updated><title type='text'>Slow hardware means lost opportunities and developer frustration</title><content type='html'>At my first job, after a steady pace of desktop applications, I was asked to make a web application.&lt;br /&gt;&lt;br /&gt;It was 2006 and JSP was the big game in town (ah, taglets), Struts had just become a toplevel Apache project, JSF was just starting and Spring Framework was the only same-looking thing, at some 1.x version.&lt;br /&gt;&lt;br /&gt;Having worked with Java on the desktop, the options were Java on the server side too or learning something new (I ruled out PHP quite early).&lt;br /&gt;&lt;br /&gt;Thus it came to choose between something that seemed very flashy, called &lt;a href='http://www.openlaszlo.org/showcase'&gt;OpenLaszlo&lt;/a&gt; or a servlet-based Java solution, with PostgreSQL as the database (I didn't like MySQL either).&lt;br /&gt;&lt;br /&gt;OpenLaszlo was quite interesting because it compiled to Flash so you could create quite beautiful pages. It would have also mapped quite nicely with the application as we required some rather custom stuff. Also, the site was used by management so charts and other flashy, interactive content would have been welcome.&lt;br /&gt;&lt;br /&gt;In the end I picked a Java servlet solution, using Spring framework and a whole lot of the solution was custom-made.&lt;br /&gt;&lt;br /&gt;The reason ? &lt;i&gt;The laptop I had back then could barely run OpenLaszlo locally!&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;It was some clunky Compaq with 1GB of RAM (I got 2GB at some point) so it could barely keep up with a normal XP/Eclipse/Browser/email configuration, let alone run my local database and local OpenLaszlo server.&lt;br /&gt;&lt;br /&gt;Of course, that might also have been a blessing in disguise, because who knows how easy it would have been to actually implement everything with OpenLaszlo? But, the problem is, we'll never know.&lt;br /&gt;&lt;br /&gt;Ever since, I consider that developers need to have access to good machines. Software development is a hard job as it is, you don't need to fight your machine too.&lt;br /&gt;&lt;br /&gt;Sure, some low-level computer might be used for testing purposes, but expecting the programmer to use a slow machine just because that's what the users have (or because there is no budget) is the seed to a lot of lost opportunities and developer frustration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-7471641279861868914?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/7471641279861868914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=7471641279861868914&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7471641279861868914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7471641279861868914'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2011/01/slow-hardware-means-lost-opportunities.html' title='Slow hardware means lost opportunities and developer frustration'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-3310917127149347838</id><published>2011-01-20T14:51:00.000+02:00</published><updated>2011-01-20T14:51:25.506+02:00</updated><title type='text'>The 'miserable programmer paradox' isn't about technology</title><content type='html'>I've read &lt;a href='http://blog.garlicsim.org/post/2840398276/the-miserable-programmer-paradox'&gt;a blog&lt;/a&gt; today which states that there is a &lt;i&gt;miserable programmer paradox&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;A good programmer will spend most of his time doing work that he hates, using tools and technologies that he also hates.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;And the conclusion seems to be that it's all about the technologies that the programmer is using:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The bad technologies take big chunks of time and concentration. The good technologies take little time and concentration. The programmer has a fixed amount of time and concentration that he can give every day. He must give a bigger piece of the pie to the bad technologies, simply because they require more. In other words, he ends up spending most of his days working with tools and technologies that he hates. Therefore, the good programmer is made miserable.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;This conclusion seems flawed because it assumes the programmers have no desires and preferences.&lt;br /&gt;&lt;br /&gt;The conclusion reminded me of &lt;a href='http://video.google.com/videoplay?docid=-6873628658308030363#'&gt;this interview&lt;/a&gt; called &lt;i&gt;Edsger Dijkstra -- Discipline in Thought&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;In this video, at 11:48 we have a very interesting quote:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;And the programmers weren't interested [in faultless programs] because they derived their intellectual excitement from the fact that they didn't quite know what they were doing. They felt that if you knew precisely what you were doing and didn't run risks, it was a boring job.&lt;/blockquote&gt;&lt;br /&gt;I think this is a much better explanation for the &lt;i&gt;miserable "good" programmer paradox&lt;/i&gt; (as defined above).&lt;br /&gt;&lt;br /&gt;The good programmer is &lt;i&gt;miserable&lt;/i&gt; because he doesn't get to use the shiny tools and technologies and because he feels bored by the fact there is nothing new.&lt;br /&gt;&lt;br /&gt;But he is also &lt;i&gt;good&lt;/i&gt; because he knows exactly what he is supposed to do.&lt;br /&gt;&lt;br /&gt;Technologies and tools might have a part, but I think the humans in the equation are much more important to look at when searching for answers.&lt;br /&gt;&lt;br /&gt;&lt;embed id=VideoPlayback src=http://video.google.com/googleplayer.swf?docid=-6873628658308030363&amp;hl=en&amp;fs=true style=width:400px;height:326px allowFullScreen=true allowScriptAccess=always type=application/x-shockwave-flash&gt; &lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-3310917127149347838?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/3310917127149347838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=3310917127149347838&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3310917127149347838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3310917127149347838'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2011/01/miserable-programmer-paradox-isnt-about.html' title='The &apos;miserable programmer paradox&apos; isn&apos;t about technology'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-1280587212535630420</id><published>2011-01-18T11:49:00.001+02:00</published><updated>2011-01-18T17:16:34.201+02:00</updated><title type='text'>iPhone app which automatically rejects hidden or blocked callers</title><content type='html'>&lt;a href="https://bitbucket.org/emilianbold/noblocked/wiki/Home"&gt;noblocked&lt;/a&gt; is an iPhone 3.1.3 app which automatically rejects incoming calls from callers that are hidden (or shown as blocked by the iPhone).&lt;br /&gt;&lt;br /&gt;All the other calls aren't affected.&lt;br /&gt;&lt;br /&gt;This app is not a generic whitelist / blacklist caller app, although it could be easily extended to do that too.&lt;br /&gt;&lt;br /&gt;I wrote the app for personal use but I'm releasing its source code so that other people may learn from it -- I know it took me a while to get used to notions like private frameworks, etc. since I've always used only the official, documented, APIs.&lt;br /&gt;&lt;br /&gt;Obviously, I'm not going to submit this app to the AppStore.&lt;br /&gt;&lt;br /&gt;A precompiled binary is available in the &lt;a href='https://bitbucket.org/emilianbold/noblocked/downloads/nocrazies.app.zip'&gt;downloads section&lt;/a&gt; but I haven't actually tested it, it's just an unsigned build I've uploaded. Clarifications or some testing would be nice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-1280587212535630420?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/1280587212535630420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=1280587212535630420&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1280587212535630420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1280587212535630420'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2011/01/iphone-app-which-automatically-rejects.html' title='iPhone app which automatically rejects hidden or blocked callers'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-44268335232876634</id><published>2011-01-15T22:58:00.000+02:00</published><updated>2011-01-15T22:58:17.209+02:00</updated><title type='text'>Go read org.openide.modules.PatchedPublic for some binary backwards compatibility magic</title><content type='html'>The @&lt;a href="http://hg.netbeans.org/main-golden/file/c07de089d8b2/openide.modules/src/org/openide/modules/PatchedPublic.java"&gt;PatchedPublic&lt;/a&gt; annotation was a nice surprise. Let's see:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;* Marks a method or constructor as being intended to be public.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;* Even though it is private in source code, when the class is loaded&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;* through the NetBeans module system the access modifier will be set&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;* to public instead. Useful for retaining binary compatibility while&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;* forcing recompilations to upgrade and keeping Javadoc clean.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@Retention(RetentionPolicy.CLASS)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;public @interface PatchedPublic {}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This is a really brilliant way to force your codebase migrate to the latest APIs while maintaining binary backwards compatibility.&lt;br /&gt;&lt;br /&gt;The idea is that you have an old method that you want to deprecate and eventually remove:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@Deprecated&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;public void doSomething();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The nice thing about @Deprecated is that it's a flag that signals to the API users they really shouldn't use it, but it doesn't do much else: new code might still be written against the method and your existing codebase might still use it.&lt;br /&gt;&lt;br /&gt;So you replace it with&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@PatchedPublic&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;private&lt;/b&gt; void doSomething();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Since the method is now private, all your local code that uses the old public method will fail at compile-time and will be forced to migrate to the proper APIs. That takes care of one thing.&lt;br /&gt;&lt;br /&gt;New API users will also be unable to use it since it's private: &lt;i&gt;they'll never learn about it&lt;/i&gt;! The bad thing about @Deprecated is that while it gives a signal to previous users that they should migrate to something else (which is nice), it also gives a signal to &lt;b&gt;new&lt;/b&gt;&amp;nbsp;users that they might do their task using some other method -- which is really&amp;nbsp;&lt;b&gt;bad&lt;/b&gt;, as they might just disregard the deprecated warning and still use it.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;So the only issue now is how do you keep running the previous binary code?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The reasoning here is that if you still have humans compiling code, they will kinda be forced to migrate to the new APIs due to the compile-time errors. So source-code compatibility might not be as important for this given method.&lt;br /&gt;&lt;br /&gt;But a big problem is when you have binary code executing -- that code will fail at runtime!&lt;br /&gt;&lt;br /&gt;The trick is to leverage the fact that NetBeans has its own module system that does class loading and patch that class at runtime. (This is probably something they couldn't have implemented if they depended on some external OSGi container).&lt;br /&gt;&lt;br /&gt;Since @PatchedPublic has a CLASS retention policy, it will be part of the bytecode and thus accessible by the module system. Thus, using probably some bytecode engineering, the method will be patched at runtime to become public and the old binary code will execute just nicely.&lt;br /&gt;&lt;br /&gt;I'm usually not a big fan of annotations (I find most of the new NetBeans annotations that replace the layer.xml as more confusing instead of simplifying) but this annotation was a nice find.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;But how did I find this annotation?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Well, I'm one of those guys that still has source code compiling against methods that used to be public and I'm now trying to figure out how to update my code :-) A bitter-sweet finding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-44268335232876634?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/44268335232876634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=44268335232876634&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/44268335232876634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/44268335232876634'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2011/01/go-read-orgopenidemodulespatchedpublic.html' title='Go read org.openide.modules.PatchedPublic for some binary backwards compatibility magic'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-3564183380992104290</id><published>2011-01-06T18:03:00.000+02:00</published><updated>2011-01-06T18:03:38.780+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='browser ide'/><title type='text'>Browser based IDE</title><content type='html'>I'm spending a lot of time using the web browser, either to read my emails, check my build status on &lt;a href="http://www.hudson-ci.org/"&gt;Hudson&lt;/a&gt; or see the latest changes on &lt;a href="https://bitbucket.org/"&gt;BitBucket&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Most of the stuff I produce is destined to live on some server: emails, blog posts, wiki pages, issue tracker comments, source code changesets, build tags and even the builds themselves. This means that, most of the time, the local data is just a temporary cache until I do my task.&lt;br /&gt;&lt;br /&gt;But modern day web applications should provide just this: a way to do you task using a local cache and then publish it to some remote server.&lt;br /&gt;&lt;br /&gt;The IDE is a prime candidate for a serious web application:&amp;nbsp;&lt;i&gt;your projects are always in some version control system,&amp;nbsp;&lt;/i&gt;&lt;i&gt;developers really care about their IDE configuration and the server could really help with the workflow and build times.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;Your projects are always in some version control system&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The local cache is just a matter of convenience, what you really care about are your local source code changes which become your changeset.&lt;br /&gt;&lt;br /&gt;Losing the local cache shouldn't be a problem other than the inconvenience of waiting for a re-download.&amp;nbsp;Treating the local source code tree as something transient will encourage better practices like simpler workspace configurations.&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;Developers really care about their IDE configuration&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;Installing the IDE on a new machine means spending time re-adding your preferred tab-size, formatting options and so on. A web app will just store that in your user preferences.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The server is very good with caching and indexing&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;There's nothing more annoying than noticing how much time the IDE spends indexing or processing very popular libraries like &lt;a href="http://commons.apache.org/"&gt;Apache Commons&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Imagine how much CPU has been used world-wide indexing the same library over and over just so you could see some methods in a code completion popup!&lt;br /&gt;&lt;br /&gt;All that wasted developer time might have been replaced by having the server index and cache a given library version and then just download (part of) that index when needed in the browser.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The server is very good with large builds&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;If the backend server if powerful, you could offload large builds to the server too. An artifact might take a lot of time to compile on your local machine, but it might run a whole lot faster on a powerful server or distributed on some build cluster.&lt;br /&gt;&lt;br /&gt;If the time it takes to build on the server plus download the artifacts on your machine is much slower than just compiling locally, why not do it ?&lt;br /&gt;&lt;br /&gt;Plus, you could even share the build artifacts with your team! Using some server-side approach, you could just ask the IDE post the build on the server and share the artifacts among the team (yes, I know about &lt;a href="http://maven.apache.org/guides/introduction/introduction-to-repositories.html"&gt;Maven repositories&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Web developers' dream&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;But I'm writing this from the perspective of somebody that does desktop applications (NetBeans Platform based, actually). What if you are writing a web app ?&lt;br /&gt;&lt;br /&gt;Well, after you press "deploy" you just let the IDE upload your app to the test server and just open another browser tab.&lt;br /&gt;&lt;br /&gt;Or, you press "deploy" which commits your changeset to the IDE backend server that saves it into your local history then uploads the new app to the test server. Pretty soon all the hard work happens behind the scenes and you are free to work on huge builds using really low powered netbooks.&lt;br /&gt;&lt;br /&gt;And if you only upload / download changesets, you just might be able to work over dial-up!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Thin, Thick, Remote client ?&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Of course, there are a few moments when developers are offline or when the bandwidth isn't&amp;nbsp;abundant, so I don't view this &lt;i&gt;browser based IDE&lt;/i&gt;&amp;nbsp;as a remote client or a thin client that sends everything to the server.&lt;br /&gt;&lt;br /&gt;I see it more of a thick client -- it's just as usable offline but much faster and convenient online when offloading work to the server too.&lt;br /&gt;&lt;br /&gt;Some of the features listed above would only work if the server does your builds and has access to your source code. So they wouldn't work if you are just using the IDE to work on private projects, that remain on the local machine and never touch the IDE's backend servers.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;To be continued...&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;This is just a first blurb about how I imagine a browser based IDE and I'm looking forward on seing it happen either as some &lt;a href="http://mozillalabs.com/skywriter/"&gt;Javascript thing&lt;/a&gt; or as some &lt;a href="http://netbeans.org/"&gt;NetBeans&lt;/a&gt; fork running as a super-applet with &lt;a href="http://download.oracle.com/javase/6/docs/technotes/guides/security/permissions.html"&gt;local permissions&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Google might be serious about &lt;a href="http://www.google.com/chromeos/index.html"&gt;Chrome OS&lt;/a&gt; and their &lt;a href="http://www.google.com/chromeos/pilot-program-cr48.html"&gt;Cr48&lt;/a&gt; laptop, but they don't mean business until I'm able to develop on one too.&lt;br /&gt;&lt;br /&gt;This might also be the end of the IDE acronym because I'm not talking about an&amp;nbsp;&lt;i&gt;integrated development environment&lt;/i&gt; but a &lt;b&gt;distributed development environment&lt;/b&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-3564183380992104290?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/3564183380992104290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=3564183380992104290&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3564183380992104290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3564183380992104290'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2011/01/browser-based-ide.html' title='Browser based IDE'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-2391839839260372791</id><published>2010-12-22T16:55:00.000+02:00</published><updated>2010-12-22T16:55:54.043+02:00</updated><title type='text'>NBnotify: NetBeans Growl notifications, now with its own website</title><content type='html'>&lt;a href="http://nbnotify.com/"&gt;http://nbnotify.com/&lt;/a&gt;&amp;nbsp;is live with the latest version of the NetBeans plugin which displays Growl notifications for builds (as well as everything else the IDE might need to notify you about).&lt;br /&gt;&lt;br /&gt;It took about a week to get this up and running, but mostly because we had a weekend in between.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://soroaga.com/"&gt;Andrei&lt;/a&gt; was paid to take care of the WordPress magic, I just provided the budget (yeap, open-source still costs money besides time), text, screenshots and the video.&lt;br /&gt;&lt;br /&gt;Speaking of the video, it's surprisingly hard to find a tool that records plain .avi on OSX. Hard because Google is oblivious to the changes in Snow Leopard where I could just use QuickTime to do &lt;i&gt;File | New Screen Recording&lt;/i&gt;. Of course, I've only seen this now, and fiddled with Camtasia, Snapz Pro X (which worked) and Jing.&lt;br /&gt;&lt;br /&gt;Have fun with the plugin and let me know about it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-2391839839260372791?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/2391839839260372791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=2391839839260372791&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2391839839260372791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2391839839260372791'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/12/nbnotify-netbeans-growl-notifications.html' title='NBnotify: NetBeans Growl notifications, now with its own website'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-3003675294467687084</id><published>2010-12-11T23:42:00.002+02:00</published><updated>2010-12-11T23:46:52.929+02:00</updated><title type='text'>Linguistic musings</title><content type='html'>There are two notions that to me seem have been injected out of the blue into the mainstream.&lt;br /&gt;&lt;br /&gt;First: &lt;b&gt;systems programming (language)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;This came for me out of nowhere. The first Wikipedia articles are from 2004 (and late 2003) but I've never heard it until Google Go was described as something good for &lt;b&gt;systems programming&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;If you &lt;a href="http://www.google.com/trends?q=system+programming+language,+systems+programmer,+google+go+language&amp;amp;ctab=0&amp;amp;geo=all&amp;amp;date=all&amp;amp;sort=1"&gt;look at the Google Trend&lt;/a&gt;&amp;nbsp;for "system programming language, systems programmer, google go language" you should see something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_7kuGo66xDMI/TQPnzSeht6I/AAAAAAAAU4s/lLTSZYLSiHE/s1600/systems+programming.png" /&gt;&lt;/div&gt;&lt;br /&gt;So basically all variations start showing up the same time as Google Go is introduced and even those that show up are basically job adds that just happen to have 'systems' and 'programmer' in them.&lt;br /&gt;&lt;br /&gt;It's safe to say that Google Go brought the word&amp;nbsp;&lt;b&gt;systems programming&lt;/b&gt;&amp;nbsp;into the mainstream.&lt;br /&gt;&lt;br /&gt;If you are looking at Wikipedia, even &lt;a href="http://en.wikipedia.org/w/index.php?title=C_(programming_language)&amp;amp;oldid=400795459"&gt;the description of the C programming language&lt;/a&gt;&amp;nbsp;is filled now with "system software" and "system programming" but go as far as &lt;a href="http://en.wikipedia.org/w/index.php?title=C_(programming_language)&amp;amp;oldid=3273786"&gt;the 2004 version&lt;/a&gt; and "system programming" is gone. &amp;nbsp;In the &lt;a href="http://en.wikipedia.org/w/index.php?title=C_(programming_language)&amp;amp;oldid=557944"&gt;late 2002 Wikipedia version&lt;/a&gt; it doesn't even mention 'system software'.&lt;br /&gt;&lt;br /&gt;Second: &lt;b&gt;curated computing&lt;/b&gt;, &lt;b&gt;curated platform&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I think Apple thought long on hard about how to put a positive spin on the whole closed ecosystem they are selling with iPhone and AppStore and figured out the &lt;b&gt;curated&lt;/b&gt;&amp;nbsp;word. It's actually quite brilliant -- the experience is locked down, but it's &lt;b&gt;curated&lt;/b&gt;, so we have someone there (the curator) that cares deeply about your experience.&lt;br /&gt;&lt;br /&gt;Enough with my linguistics musing for tonight. Let me know about other words and phrases I might have missed!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-3003675294467687084?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/3003675294467687084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=3003675294467687084&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3003675294467687084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3003675294467687084'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/12/injected-terminology.html' title='Linguistic musings'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7kuGo66xDMI/TQPnzSeht6I/AAAAAAAAU4s/lLTSZYLSiHE/s72-c/systems+programming.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-305954682782869056</id><published>2010-11-29T01:10:00.000+02:00</published><updated>2010-11-29T01:10:59.040+02:00</updated><title type='text'>Building an iOS project with Hudson</title><content type='html'>I'm mostly writing this here for archival purposes. This is how I used to build iOS projects via Hudson (I don't have any iOS projects ongoing).&lt;br /&gt;&lt;br /&gt;First, since Hudson runs on a Linux machine, I need to add a new node then start the agent on an OSX machine from an account where I have all the digital keys set up properly.&lt;br /&gt;&lt;br /&gt;Next, supposing I have an iOS app called &lt;b&gt;Example&lt;/b&gt;,&lt;b&gt;&amp;nbsp;&lt;/b&gt;I just tell Hudson to poll the SCM then execute the script:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;TIME=`date "+%Y-%m-%d_%H-%M-%S"`;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rm -r build || true;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;xcodebuild -target &lt;b&gt;Example &lt;/b&gt;-configuration Distribution -sdk iphoneos3.1.2 clean build&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;(mkdir build/Distribution-iphoneos/Payload;&amp;nbsp;mv build/Distribution-iphoneos/&lt;b&gt;Example&lt;/b&gt;.app&amp;nbsp;build/Distribution-iphoneos/Payload)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;(cd build/Distribution-iphoneos&amp;nbsp;&amp;amp;&amp;amp; zip -9 "&lt;b&gt;example&lt;/b&gt;-$TIME.ipa" -r Payload)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Afterwards Hudson just needs to "Archive the artifacts" from&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;build/Distribution-iphoneos/*.ipa&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Obviously you need to tweak the sdk version a bit as this script is for an older 3.1 app but this is the gist of it.&lt;br /&gt;&lt;br /&gt;Now you just have Hudson doing builds as soon as a commit comes up and you can send updates to customers by just grabbing the &lt;b&gt;.ipa&lt;/b&gt;&amp;nbsp;file from the Hudson site (or even give customers direct access to Hudson and have them download a build as soon as available).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-305954682782869056?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/305954682782869056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=305954682782869056&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/305954682782869056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/305954682782869056'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/11/building-ios-project-with-hudson.html' title='Building an iOS project with Hudson'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-1527780805454009894</id><published>2010-11-26T16:17:00.000+02:00</published><updated>2010-11-26T16:17:14.801+02:00</updated><title type='text'>NetBeans Slowness detector with Growl</title><content type='html'>Got surprised today when I saw the slowness notification on Growl:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_7kuGo66xDMI/TO-50V0GpuI/AAAAAAAAU34/orXuiutPoNQ/s1600/slowness.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_7kuGo66xDMI/TO-50V0GpuI/AAAAAAAAU34/orXuiutPoNQ/s1600/slowness.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I rarely get this message but it's nice to see it published via Growl, using my &lt;a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=34354"&gt;OSX Notifications&lt;/a&gt;&amp;nbsp;module which is a Growl bridge for NetBeans Platform notifications.&lt;/div&gt;&lt;br /&gt;Clicking on the notification&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_7kuGo66xDMI/TO-6H6gis5I/AAAAAAAAU38/OhK08n6JCZg/s1600/slowness-detected.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_7kuGo66xDMI/TO-6H6gis5I/AAAAAAAAU38/OhK08n6JCZg/s1600/slowness-detected.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;gets you this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_7kuGo66xDMI/TO--NnH0GyI/AAAAAAAAU4E/9jbmk9-cm3g/s1600/slowness-window.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_7kuGo66xDMI/TO--NnH0GyI/AAAAAAAAU4E/9jbmk9-cm3g/s1600/slowness-window.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I'm not entirely satisfied with the way this message is presented because I would need a "Close" button, not an "OK" button. Also -- clicking on that hyperlink seems to open a new window behind this dialog.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Anyhow, there isn't much I can control since we have a lot of native components due to the broken&amp;nbsp;OpenIDE AWT &lt;a href="http://bits.netbeans.org/6.7/javadoc/org-openide-awt/org/openide/awt/NotificationDisplayer.html"&gt;NotificationDisplayer&lt;/a&gt;&amp;nbsp;API which encourages custom JComponents.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This particular notification for example should use no custom component. It should just say: "Slowness detected: Not responsive for 5 s" and then clicking on the (Growl) notification should open the "Report Problem" dialog.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-1527780805454009894?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/1527780805454009894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=1527780805454009894&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1527780805454009894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1527780805454009894'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/11/netbeans-slowness-detector-with-growl.html' title='NetBeans Slowness detector with Growl'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7kuGo66xDMI/TO-50V0GpuI/AAAAAAAAU34/orXuiutPoNQ/s72-c/slowness.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-7168703702100969808</id><published>2010-11-24T18:24:00.000+02:00</published><updated>2010-11-24T18:24:36.441+02:00</updated><title type='text'>Java (NetBeans) antialias issues</title><content type='html'>I ran into some antialias issues with NetBeans on Windows.&lt;br /&gt;&lt;br /&gt;Here is the list of pages opened in my browser in case you don't want to Google as much:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://netbeans.org/bugzilla/show_bug.cgi?id=137845"&gt;http://netbeans.org/bugzilla/show_bug.cgi?id=137845&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.javakb.com/Uwe/Forum.aspx/java-setup/11041/Java-6-Swing-bold-font-problem-on-Windows"&gt;http://www.javakb.com/Uwe/Forum.aspx/java-setup/11041/Java-6-Swing-bold-font-problem-on-Windows&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://download.oracle.com/javase/6/docs/technotes/guides/2d/flags.html#aaFonts"&gt;http://download.oracle.com/javase/6/docs/technotes/guides/2d/flags.html#aaFonts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forums.java.net/node/683260"&gt;http://forums.java.net/node/683260&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://download.oracle.com/javase/6/docs/api/java/awt/RenderingHints.html"&gt;http://download.oracle.com/javase/6/docs/api/java/awt/RenderingHints.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://download.oracle.com/javase/6/docs/api/java/awt/doc-files/DesktopProperties.html"&gt;http://download.oracle.com/javase/6/docs/api/java/awt/doc-files/DesktopProperties.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://hedayatvk.wordpress.com/2010/02/26/antialiasing-and-java/"&gt;http://hedayatvk.wordpress.com/2010/02/26/antialiasing-and-java/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://download.oracle.com/javase/1.5.0/docs/guide/2d/flags.html"&gt;http://download.oracle.com/javase/1.5.0/docs/guide/2d/flags.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Graphics2D.html#getRenderingHints()"&gt;http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Graphics2D.html#getRenderingHints()&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.docjar.com/html/api/sun/awt/SunHints.java.html"&gt;http://www.docjar.com/html/api/sun/awt/SunHints.java.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.docjar.com/html/api/sun/java2d/SunGraphics2D.java.html"&gt;http://www.docjar.com/html/api/sun/java2d/SunGraphics2D.java.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.javalobby.org/java/forums/t98492.html"&gt;http://www.javalobby.org/java/forums/t98492.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6263951"&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6263951&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-7168703702100969808?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/7168703702100969808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=7168703702100969808&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7168703702100969808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7168703702100969808'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/11/java-netbeans-antialias-issues.html' title='Java (NetBeans) antialias issues'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-9141005947495421105</id><published>2010-11-17T20:27:00.004+02:00</published><updated>2010-11-18T00:13:44.651+02:00</updated><title type='text'>NetBeans Growl notifications</title><content type='html'>&lt;b&gt;Demo time&lt;/b&gt;&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/_7kuGo66xDMI/TOQfbp3qRSI/AAAAAAAAU3Q/pGhEFcnIcmI/s1600/nb-growl-action.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_7kuGo66xDMI/TOQfbp3qRSI/AAAAAAAAU3Q/pGhEFcnIcmI/s1600/nb-growl-action.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This plugin provides Growl integration with NetBeans. If you are using NetBeans on OSX and you have Growl, &lt;a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=34354"&gt;download my plugin&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As a proof of concept builds are shown but all other notifications that usually would have appeared using the default implementation are now posted via Growl.&lt;br /&gt;&lt;br /&gt;Complex UIs trigger just a simple notification and then display a dialog when clicked with the actual custom components (obviously one can't publish custom Swing components in a Growl popup).&lt;br /&gt;&lt;br /&gt;&lt;embed height="450" src="http://netbeans-growl.s3.amazonaws.com/netbeans-growl-demo.swf" width="450"&gt;&lt;/embed&gt; &lt;br /&gt;&lt;br /&gt;Speaking of complex UIs, some custom components are just JLabels that simulate hyperlinks so I would say those might be migrated to a normal text and ActionListener.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Background&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;One thing that NetBeans needs is OS-aware notifications and my two focused OSes are Ubuntu and OSX.&lt;br /&gt;&lt;br /&gt;On Linux we have the &lt;a href="http://www.galago-project.org/specs/notification/0.9/"&gt;Desktop Notifications Specification&lt;/a&gt;, which is a very clean, D-BUS based specification for desktop-wide notifications.&lt;br /&gt;&lt;br /&gt;Ubuntu extends and modified the specification &lt;a href="https://wiki.ubuntu.com/NotificationDevelopmentGuidelines"&gt;a bit&lt;/a&gt; as well as define a quite nice &lt;a href="https://wiki.ubuntu.com/NotificationDesignGuidelines"&gt;design guideline document&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Growl defines the OSX notification standard which is generally similar to the Ubuntu version. Their &lt;a href="http://growl.info/documentation.php"&gt;documentation&lt;/a&gt; provides a nice overview of their API.&lt;br /&gt;&lt;br /&gt;NetBeans on the other hand has its own notification API in the via the OpenIDE AWT &lt;a href="http://bits.netbeans.org/6.7/javadoc/org-openide-awt/org/openide/awt/NotificationDisplayer.html"&gt;NotificationDisplayer&lt;/a&gt; API.&lt;br /&gt;&lt;br /&gt;The problem is that all these are disconnected, but rather similar given the nature of the problem they are trying to solve.&lt;br /&gt;&lt;br /&gt;What I think NetBeans is missing on OSX is a proper Growl bridge. Also, the NetBeans API should be modified to discourage custom components as those aren't easy to bridge to something else.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Implementations&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It's rather hard to find Java bindings for Growl as the &lt;a href="http://growl.info/documentation/developer/java-support.php"&gt;official implementation&lt;/a&gt; is deprecated.&lt;br /&gt;&lt;br /&gt;Next, I was able to find &lt;a href="https://github.com/jdillon/grrrowl"&gt;Grrrowl&lt;/a&gt; by Sonatype, which uses native code (via &lt;a href="http://fusesource.com/forge/sites/hawtjni/"&gt;HawtJNI&lt;/a&gt;) and seems to be originally part of &lt;a href="http://www.jetbrains.org/display/IJOS/Home"&gt;IntelliJ&lt;/a&gt;. There's also a fallback implementation to AppleScript which is nicely provided as pure Java scripting engine on an Apple JVM.&lt;br /&gt;&lt;br /&gt;The problem with Grrrowl is that while it does display notifications quite nicely, it doesn't support any click handlers, so we won't be able to respond to user interaction.&lt;br /&gt;&lt;br /&gt;The best implementation seems to be a very low-profile implementation by Michael Stringer, &lt;a href="http://www.cocoaforge.com/viewtopic.php?f=6&amp;amp;t=17320"&gt;posted as stringbean on CocoaForge&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Michael Stringer's version uses actual JNI and provides a click handler. This is what my implementation uses.&lt;br /&gt;&lt;br /&gt;Obviously, it only works on OSX, specifically, Intel-based OSX (because that's what I used to build the native code).&lt;br /&gt;&lt;br /&gt;Let me know what do you think about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-9141005947495421105?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/9141005947495421105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=9141005947495421105&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/9141005947495421105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/9141005947495421105'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/11/netbeans-growl-notifications.html' title='NetBeans Growl notifications'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7kuGo66xDMI/TOQfbp3qRSI/AAAAAAAAU3Q/pGhEFcnIcmI/s72-c/nb-growl-action.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-7824593088418896583</id><published>2010-11-01T09:45:00.001+02:00</published><updated>2010-11-01T09:47:01.287+02:00</updated><title type='text'>MySQL as the first NoSQL database</title><content type='html'>I was watching yesterday a presentation at &lt;a href='http://geekmeet.ro/timisoara/2010/10/26/geekmeet-14-timisoara/'&gt;GeekMeet Timisoara&lt;/a&gt; about how to scale your websites and all the MySQL-related advices were as expected, but upon thinking about it, entirely agains normal database mantras:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You should de-normalize the database (copies are easier to access and cheap)&lt;/li&gt;&lt;li&gt;You should disable transactions (ie. use a MySQL storage engine that &lt;i&gt;isn't&lt;/i&gt; transactional).&lt;/li&gt;&lt;li&gt;MySQL Master-Slave replication (which is asynchronous!)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;This made me realize that MySQL is successful precisely &lt;b&gt;because&lt;/b&gt; of all the things I discredited it for.&lt;br /&gt;&lt;br /&gt;You see, in my book MySQL was never a real database because, initially, it wasn't transactional. For the project where I could choose the database, I picked &lt;a href='http://www.postgresql.org'&gt;PostgreSQL&lt;/a&gt; and I always used MySQL knowing in the back of my head that, in fact, it was a bit of a sham.&lt;br /&gt;&lt;br /&gt;But this might just be MySQL's good fortune: by providing a simple storage engine with some SQL front-end, they proved that most people &lt;b&gt;don't need&lt;/b&gt; ACID compliance.&lt;br /&gt;&lt;br /&gt;Furthermore, as more and more people need to scale their applications horizontally (since it's cheaper and because... Google does it), they need even less of an actual &lt;i&gt;database&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;NoSQL was a movement that started after people got tired of the constraints of SQL databases and started thinking about what do they &lt;b&gt;really&lt;/b&gt; need when storing data. It was liberating to see that one must not assume from the start that "external data==database" and actually put some though into the specific needs of their application.&lt;br /&gt;&lt;br /&gt;And by being such a &lt;i&gt;lightweight&lt;/i&gt; and unconstrained implementation, MySQL is right here, still serving the needs of people that want to scale out.&lt;br /&gt;&lt;br /&gt;MySQL was basically the first NoSQL database. By relaxing what a database &lt;i&gt;must&lt;/i&gt; provide, they proved in the long run that this is what people actually &lt;i&gt;need&lt;/i&gt;. So besides the &lt;i&gt;pure&lt;/i&gt; NoSQL tools like the various key-value stores they are building nowadays, MySQL could very well remain the most used place to store your data precisely because it allows you to pick which of the database-specific features you actually need.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-7824593088418896583?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/7824593088418896583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=7824593088418896583&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7824593088418896583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7824593088418896583'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/11/mysql-as-first-nosql-database.html' title='MySQL as the first NoSQL database'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-4821624772904347750</id><published>2010-10-28T18:53:00.001+03:00</published><updated>2010-10-28T19:13:32.716+03:00</updated><title type='text'>NetBeans Ideas</title><content type='html'>&lt;b&gt;Auto update must become OS-aware&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This means that on Linux auto update is entirely apt-get based (or whatever mechanism the distro has).&lt;br /&gt;&lt;br /&gt;On OSX we might use something like Sparkle.&lt;br /&gt;&lt;br /&gt;The NetBeans specific auto update implementation should be just a fallback plan. Having it use BitTorrent too would be nice (see &lt;a href='http://emilian-bold.blogspot.com/2008/01/netbeans-platform-autoupdate-via.html'&gt;my experiment&lt;/a&gt; regarding this).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;OS-aware notifications&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The custom notification mechanism and popup should be replaced by the OS notification, if available. This means using &lt;a href='http://growl.info/'&gt;Growl&lt;/a&gt; on OSX and whatever Ubuntu has nowadays.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Versioning&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href='http://git-scm.com/'&gt;Git&lt;/a&gt; support should be part of the official release: &lt;a href='http://blogs.sun.com/netbeansphp/entry/netbeans_git_support_help_with'&gt;help these guys&lt;/a&gt; make it happen!&lt;br /&gt;&lt;br /&gt;Mercurial Queues and 3 way diff would also be a nice thing.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;BTrace&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Btrace should be bundled with NetBeans and integrated with the existing debugger and profiler. I want to either use the manual debugger/profiler, run normal BTrace scripts or &lt;i&gt;control the debugger or profiler&lt;/i&gt; via BTrace scripts! This means a Debugger/Profiler dedicated BTrace API.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Out of process indexing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Indexing takes way too much CPU/memory and should be moved outside the main process (think &lt;a href='http://blog.chromium.org/2008/09/multi-process-architecture.html'&gt;Google Chrome Multi-process Architecture&lt;/a&gt;) since it triggers ugly memory spikes. The design is also kinda broken: preindexing needs almost a full IDE launch during build.&lt;br /&gt;&lt;br /&gt;I'll try to expand some of these ideas into dedicated posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-4821624772904347750?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/4821624772904347750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=4821624772904347750&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4821624772904347750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4821624772904347750'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/10/netbeans-ideas.html' title='NetBeans Ideas'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-4757453429962115854</id><published>2010-10-26T11:48:00.002+03:00</published><updated>2010-10-26T11:57:49.755+03:00</updated><title type='text'>Of Romania</title><content type='html'>This post is about a facet of the Romanian society so if that doesn't interest you, feel free to ignore it or just skip to the conclusions.&lt;br /&gt;&lt;h1&gt;Something in the air&lt;/h1&gt;There is a strange attitude I'm noticing in my day to day interactions with some institutions and the State. &lt;b&gt;The relationship between authority and individual seems entirely broken&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Perhaps I should start with some examples and then I'll let this cristalize a bit.&lt;br /&gt;&lt;h1&gt;Avoid the rules&lt;/h1&gt;First, imagine you live in a building of flats and you want to fix the roof. Well, since it's a historical building, you need some approval from the City Hall and some Culture departments.&lt;br /&gt;&lt;br /&gt;And this is where the red tape gets to you: besides the whole paperwork you need a formal architectural plan of your &lt;i&gt;change&lt;/i&gt;. Although you technically aren't changing anything and you're just investing $300, you need to go to a 3&lt;sup&gt;rd&lt;/sup&gt; party architect to pay him draw you some plans.&lt;br /&gt;&lt;br /&gt;So, what did a City Hall official say when I tried to explain this is crazy, because I'm wasting more time and money on the formalities than I am actually investing in fixing the roof itself? Her answer was: try to do this over a weekend and be done with it.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The rules are so convoluted and stupid that the officials are recommending you to skip them.&lt;/b&gt;&lt;br /&gt;&lt;h1&gt;Be fearful&lt;/h1&gt;I went the other day to buy a parking subscription as it's cheaper to pay for a full month instead of paying each day. There was an employee there that started doing small talk and then he said: &lt;i&gt;you know, they apparently mounted traffic cameras outside the city -- make sure to also pay the road tax&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;From the outside this looks like an advice from a caring person. But actually the context and tonality was another: he was trying to justify why am I paying for parking inside the city (his company is basically a parasite, they don't actually &lt;i&gt;build&lt;/i&gt; parking places) by making me &lt;b&gt;fear the fines&lt;/b&gt;. And of course, there are other things I should pay, such as the road tax.&lt;br /&gt;&lt;br /&gt;Because you see, people that are decent and pay their share are just the kind of people that need some &lt;i&gt;fear mongering&lt;/i&gt; to pay for everything else too. The rest of the people will slip though the cracks somehow.&lt;br /&gt;&lt;br /&gt;The parking company isn't selling you a service. It's selling you a protection racket so you don't get fined.&lt;br /&gt;&lt;br /&gt;At the beginning of the year the "economical crisis" was just in full swing so there was the idea that people won't pay their property tax. What did the politicians do? They started spreading rumors that they'll double the tax and people rushed to pay the lower amount. Funny thing -- by the end of the year the increased the property tax anyhow for a subset of the population.&lt;br /&gt;&lt;h1&gt;I know you avoided the rules&lt;/h1&gt;I called the guys providing our building natural gas because there was a smell of gas next to the building entrance and that's usually not a good sign. As expected, some pipe wasn't sealed properly and they fixed it.&lt;br /&gt;&lt;br /&gt;But the discussion I had with one of the two employees that came was, again, interesting. We discussed about the cause and the fact that natural gaz doesn't actually have odor so they add something to it (which is common knowledge).&lt;br /&gt;&lt;br /&gt;Then he started saying that there seems to be something wrong with some of our pipes, specifically the exhaust pipes for the heating devices people use.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Because, you see, you are always breaking some rules (imaginary or not) so you shouldn't bother anyone in a power position as they will find something to bother you with.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;You know you avoided the rules&lt;/h1&gt;Historical buildings are property tax-exempt but I've had my neighbors say &lt;b&gt;they don't actually want to&lt;/b&gt; do the paperwork for use this right: they fear the City Hall will starting paying close attention to them and find something else to tax or fine them.&lt;br /&gt;&lt;h1&gt;Grey&lt;/h1&gt;What results is Romania: a system so broken you have to ignore the rules to get something done. &lt;br /&gt;&lt;br /&gt;Since authority assumes that you broke some rules -- you better keep your head low. People assume they either broke some rules or there are rules that may be &lt;i&gt;interpreted&lt;/i&gt; easily to frame them so they &lt;i&gt;do keep&lt;/i&gt; their head low as not to anger someone higher-up.&lt;br /&gt;&lt;br /&gt;Taxes are mostly extracted through fear, there is no concept of honest person or the civilized attitude that you might want to pay your share just like everyone else.&lt;br /&gt;&lt;br /&gt;People in power don't care about anything as they make the rules.&lt;br /&gt;&lt;br /&gt;Normal people are like an exotic creature that they don't know how to classify.&lt;br /&gt;&lt;h1&gt;Silver lining&lt;/h1&gt;This blog was a bit too grim but I wanted to describe this for quite some time since it's something that looks fundamentally broken and unsustainable. It's also bothering me a lot!&lt;br /&gt;&lt;br /&gt;The silver lining might be that people are free and a big chunk of them are visiting or working in European countries: it gives them a reference point, a system that works. I believe that at some point we'll converge to a more sane society as everybody will have an idea about how things are abroad.&lt;br /&gt;&lt;br /&gt;Of course, there are also a lot of genuine nice Romanian people, but this blog wasn't about the young generation or the rest of the nice folks.&lt;br /&gt;&lt;br /&gt;It's about the people that seem to have &lt;b&gt;any form of power&lt;/b&gt; onto others and how they distort everything. It might just be that power corrupts in it's smallest quantities and these small doses of poison alter &lt;b&gt;nations&lt;/b&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-4757453429962115854?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/4757453429962115854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=4757453429962115854&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4757453429962115854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4757453429962115854'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/10/of-romania.html' title='Of Romania'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-5869706586548972257</id><published>2010-10-11T12:34:00.000+03:00</published><updated>2010-10-11T12:34:37.595+03:00</updated><title type='text'>Why don't you have personal projects ?</title><content type='html'>I've been reading a lot of CVs and did some interviews with young folks that are either about to finish University or just did (and some are already preparing for their Masters' degree) as I'm trying to fill a position at &lt;a href="http://www.josekibold.ro/jobs"&gt;Joseki Bold SRL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What strikes me as unusual is how few personal projects do most of them have. And I'm not talking here about A students that barely have enough time to learn for school and do the teacher's projects. I'm talking about normal students that don't seem to have very high grades, nor work to earn a living and yet they also don't have any personal projects to talk about.&lt;br /&gt;&lt;br /&gt;Computer programmers are lucky. Unlike other professions, we can easily afford to buy the top-level tools and have free access to a lot of information to learn about our trade. A physics student can't really buy his own particle accelerator but by all means any student already has everything the best computer programmer in the world has: a PC and access to internet. That's all there is!&lt;br /&gt;&lt;br /&gt;And if you care about computers there's also the University resources. For example, if you want to play with a cluster -- the University has one. Or, Amazon's EC2 machines are cheap enough you can experiment a bit if you are really passionate about.&lt;br /&gt;&lt;br /&gt;This might be the gist of it: you need to be passionate about it.&lt;br /&gt;&lt;br /&gt;I remember an old Eddie Murphy from the 1980s called &lt;a href="http://www.youtube.com/watch?v=pKYl6y8qGqw"&gt;Coming to America&lt;/a&gt; where Eddie is a prince that has everything, including a gorgeous groups of half-naked women as his personal "bathers". His father has &lt;a href="http://www.imdb.com/title/tt0094898/quotes?qt0370992"&gt;a nice line&lt;/a&gt; somewhere in the movie:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Son, I know we never talked about this. I always assumed you had sex with your bathers. I know I do.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-5869706586548972257?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/5869706586548972257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=5869706586548972257&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5869706586548972257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5869706586548972257'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/10/why-dont-you-have-personal-projects.html' title='Why don&apos;t you have personal projects ?'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-6496012705058477101</id><published>2010-08-17T14:34:00.002+03:00</published><updated>2010-08-17T14:39:28.692+03:00</updated><title type='text'>Magical moments</title><content type='html'>Noticing after I've read Douglas Adams' &lt;i&gt;The Hitchhiker's Guide to the Galaxy&lt;/i&gt; that on a furniture in the kitchen lies the answer to the ultimate question:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_7kuGo66xDMI/TGpxRxc1-eI/AAAAAAAATZg/vCqsSsrNKXo/s1600/42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/_7kuGo66xDMI/TGpxRxc1-eI/AAAAAAAATZg/vCqsSsrNKXo/s400/42.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Sitting one day in the almost empty &lt;a href="http://www.700coffee-lounge.ro/"&gt;700 Coffee &amp;amp; Lounge&lt;/a&gt; and hearing the eerie Twin Peaks Theme by Angelo Badalamenti:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/7oDuGN6K3VQ?fs=1&amp;amp;hl=en_US&amp;amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/7oDuGN6K3VQ?fs=1&amp;amp;hl=en_US&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Cleaning up yesterday the same old closet with 42 and finding a bottle of Suntory Gold whisky. &lt;i&gt;Lost in Translation&lt;/i&gt; is my favorite movie and Suntory is the brand of whisky Bill Murray was endorsing in it:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_7kuGo66xDMI/TGpzbpB--3I/AAAAAAAATZo/_6Y9C9ZYb70/s1600/suntory.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/_7kuGo66xDMI/TGpzbpB--3I/AAAAAAAATZo/_6Y9C9ZYb70/s400/suntory.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-6496012705058477101?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/6496012705058477101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=6496012705058477101&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/6496012705058477101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/6496012705058477101'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/08/magical-moments.html' title='Magical moments'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7kuGo66xDMI/TGpxRxc1-eI/AAAAAAAATZg/vCqsSsrNKXo/s72-c/42.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-5478463794502565507</id><published>2010-06-30T01:26:00.002+03:00</published><updated>2010-06-30T02:18:14.715+03:00</updated><title type='text'>Source code hosting sets pricing all wrong</title><content type='html'>&lt;h1&gt;Where's the love?&lt;/h1&gt;&lt;br /&gt;The way GitHub structured their pricing plan looks like a way to punish long-term customers.&lt;br /&gt;&lt;br /&gt;They don't charge based on how much value they are providing: they just charge based on how much you must be willing to pay after your data starts gathering there. And they are not alone -- most other do the same wrong customer segmentation tricks.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Many small projects&lt;/h1&gt;&lt;br /&gt;It's good form to have separate repositories for separate projects, so with each new project hosted on GitHub you would create a new private repository.&lt;br /&gt;&lt;br /&gt;Well -- pretty soon you will run out of private repositories so you'll need to upgrade to a new plan.&lt;br /&gt;&lt;br /&gt;If you look at &lt;a href="http://github.com/plans"&gt;their pricing plans&lt;/a&gt; they are for 5, 10 and 20 private repositories, and then you get into the over $100/month business plans.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Am I silver business or micro ?&lt;/h1&gt;&lt;br /&gt;If I look at my own server, I have 34 mercurial repositories dating 2 years back alone. Of course, some are big, some are small, some represent my own ideas while other are repositories for client projects.&lt;br /&gt;&lt;br /&gt;But do you know how many am I actually using nowadays? The answer is &lt;b&gt;4&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;So according to this I would need to be on a silver business plan with $100/month. But what is the value they are providing? It's the equivalent of $7/month of the micro plan, plus the value of having your old projects archived and available. Now, I wouldn't say the value of archiving old projects is $93/month.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Metered please&lt;/h1&gt;&lt;br /&gt;My solution is &lt;b&gt;metered code hosting&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Amazon's EC2 might have spoiled me but I like to know that I'm paying for what I am actually using.&lt;br /&gt;&lt;br /&gt;So, how do I see a &lt;b&gt;sane&lt;/b&gt; pricing plan ? Well, there are 3 axes to look at: it's the disk I'm using, the bandwidth I'm using and then the actual hosting extras I'm accessing like online source code visualizer, wiki, merge tool, code review or whatever. If you think about it, the "extras" I am talking about might be seen like the CPU-time of running their software.&lt;br /&gt;&lt;br /&gt;Now, all the trick is setting a right storage/bandwidth/CPU price.&lt;br /&gt;&lt;br /&gt;Storage can't be more than 130% of the S3 price, meaning about &lt;b&gt;20 cents/GB&lt;/b&gt; ($0.20)&lt;br /&gt;&lt;br /&gt;Bandwidth can't be more than 130% of the EC2 data transfer, meaning again about &lt;b&gt;20 cents/GB&lt;/b&gt; ($0.20)&lt;br /&gt;&lt;br /&gt;Setting a price on the CPU time is interesting as this basically tells you how they value their product. It's impossible to guess but they would have to set the number pretty high to make normal usage exceed their current pricing plan.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;... or the simpler change&lt;/h1&gt;&lt;br /&gt;The other notion they could introduce is that of &lt;b&gt;active&lt;/b&gt; repository.&lt;br /&gt;&lt;br /&gt;If I am pushing changesets to a repository, editing the wiki it's pretty safe to say I should pay for that repository.&lt;br /&gt;&lt;br /&gt;But if I haven't touched the repository in any way for the whole month it would sure be nice to charge me only for the storage (or nothing at all if we see storage as "unlimited").&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-5478463794502565507?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/5478463794502565507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=5478463794502565507&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5478463794502565507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5478463794502565507'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/06/source-code-hosting-sets-pricing-all.html' title='Source code hosting sets pricing all wrong'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-8332416309959322911</id><published>2010-06-24T13:53:00.000+03:00</published><updated>2010-06-24T13:53:59.976+03:00</updated><title type='text'>Compiling is such a chore</title><content type='html'>I'm using Hudson as my build server and I would love to patch some things about it, especially the JUnit reports and charts.&lt;br /&gt;&lt;br /&gt;Well, one of the reasons I dislike getting to this small change is that I would first:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;need to checkout Hudson,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;then figure out how to build it,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;then do the patch,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;then compile it and finally&lt;br /&gt;&lt;/li&gt;&lt;li&gt;start using the changed Hudson.&lt;/li&gt;&lt;/ul&gt;Thus, there are quite a few things that stop you from doing the smallest changes, and I would say the biggest culprit is that you have to compile the code.  In a scripting language:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I would &lt;b&gt;not&lt;/b&gt; need to checkout anything as the installed sources are everything I need.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There would be &lt;b&gt;no&lt;/b&gt; "build" rules.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The patch would be done in-place.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There would be &lt;b&gt;no&lt;/b&gt; "compilation" step and&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There would be &lt;b&gt;no&lt;/b&gt; "deploy" step so I can start using the new Hudson right away.&lt;/li&gt;&lt;/ul&gt;So while I dislike PHP, for example, as it seems too easy to break anything, having a strong typed, compiled language does hinder the desire to do small changes.&lt;br /&gt;&lt;br /&gt;Imagine how easy would be to keep your changes in a separate branch (or Mercurial queues) and just rebase once in a while with the upstream codebase, tweak your patch a bit and have the latest running version as well as your changes.&lt;br /&gt;&lt;br /&gt;Having everything pluggable is nice, but sometimes it would just be faster to edit the source.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-8332416309959322911?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/8332416309959322911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=8332416309959322911&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8332416309959322911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8332416309959322911'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/06/compiling-is-such-chore.html' title='Compiling is such a chore'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-988524263195488083</id><published>2010-06-01T10:20:00.004+03:00</published><updated>2010-06-01T10:23:14.728+03:00</updated><title type='text'>Forget the removable battery, what about the easily removable hard drive? (Get well soon, trusty mac!)</title><content type='html'>&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: #333333; font-family: 'trebuchet ms', verdana, arial, sans-serif; line-height: 18px;"&gt;&lt;b&gt;Get well soon, trusty Mac&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: #333333; font-family: 'trebuchet ms', verdana, arial, sans-serif; line-height: 18px;"&gt;&lt;br /&gt;Last Wednesday my MacBook Pro's display stopped working. Actually, it might be the logic board since the fans do seem to start but nothing else happens: it needs to be sent to an Apple Service. (It could also be that wide-spread NVidia problem MacBook Pros had, who knows).&lt;br /&gt;&lt;br /&gt;Anyhow, I had to migrate some data to a new machine I received this morning.&lt;br /&gt;&lt;br /&gt;I have bought about a month ago an Intel SSD hard drive so I already knew how to dismantle the laptop. This time I just had to swap the hard drive of the replacement machine with my own SSD drive and I was back to work. Well, one hour later anyhow.  &lt;br /&gt;&lt;br /&gt;&lt;b&gt;User serviceable&lt;/b&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;This whole experience made me think how convenient it really is to have user-serviceable components. As laptops basically replace desktops, it's important to be able to access hardware in your laptop.&lt;br /&gt;&lt;br /&gt;Actually, not everything is important, there are 2 big things that matter: RAM and hard drive. RAM access is just a nice to have feature since adding more RAM is  &lt;i&gt;the best&lt;/i&gt; upgrade one could make. CPU and GPU would be nice to have, but not high on my list.&lt;br /&gt;&lt;br /&gt;Hard drive access is crucial though, because your work isn't actually on the machine itself.&amp;nbsp; &lt;i&gt;Your work is just the hard drive.&lt;/i&gt;&amp;nbsp;Having swapped the drive into this new laptop I'm back to work just like it's the same machine (if you ignore the annoying German keyboard).&lt;br /&gt;&lt;br /&gt;So, it's a bit weird to think about these new MacBooks that are unibody and seem to be harder to dismantle. Taking your machine to a service for a battery or hard drive replacement is odd: in Timisoara this means I have to send it via post 600km to Bucharest, and it's not cheap either.&lt;br /&gt;&lt;br /&gt;Plus that all this doesn't take into account the importance of data: I wouldn't want to send my laptop with the work data on it. Even if I were to use FileVault, there is something unsettling about knowing your data is exposed like that.  &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: #333333; font-family: 'trebuchet ms', verdana, arial, sans-serif; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: #333333; font-family: 'trebuchet ms', verdana, arial, sans-serif; line-height: 18px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;The right to private data&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The right to private data should be as important as the right to privacy. Just because people buy a laptop they shouldn't give away the right to private data. I don't really need a replaceable battery, I don't mind Apple keeping the old battery if they need to replace it. But I need a replaceable hard drive.&lt;br /&gt;&lt;br /&gt;So, instead of a removable battery, laptop manufacturers should actually make a removable hard drive. In a few easy steps any user should be able to pop-out his hard drive and then send the empty laptop shell to service worry free. &lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-988524263195488083?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/988524263195488083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=988524263195488083&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/988524263195488083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/988524263195488083'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/06/forget-removable-battery-what-about.html' title='Forget the removable battery, what about the easily removable hard drive? (Get well soon, trusty mac!)'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-7877996720560506362</id><published>2010-05-23T01:00:00.000+03:00</published><updated>2010-05-23T01:00:47.471+03:00</updated><title type='text'>Re: How Could the NetBeans Team Make Money from the NetBeans Platform?</title><content type='html'>This is a reply to Geertjan's blog which wonders how could Oracle monetize the Platform: &lt;a href="http://blogs.sun.com/geertjan/entry/how_could_the_netbeans_team"&gt;How Could the NetBeans Team Make Money from the NetBeans Platform?&lt;/a&gt;&amp;nbsp; .&lt;br /&gt;&lt;br /&gt;The first thing I would like to see is the NetBeans Foundation which would be a central authority that cares about the future of the NetBeans Platform (and IDE, actually -- it makes no sense to have the Foundation just for the Platform).&lt;br /&gt;&lt;br /&gt;Because when NetBeans was under Sun, the Platform wasn't seen as something worth monetizing. Under Oracle, we worried weather they will pull the plug or not (given Oracle has their own IDE and supports Eclipse too).&lt;br /&gt;&lt;br /&gt;So, the first thing would be to have an actual entity in charge of this -- something legal, not some website or imaginary construct. This entity would &lt;b&gt;want&lt;/b&gt; to get our money and will support itself in various forms: donations, support, stakeholder fees or various subscriptions.&lt;br /&gt;&lt;br /&gt;Of course, we need some actual backing so we would still need actual companies on board: stakeholders.&lt;br /&gt;&lt;br /&gt;Some of these stakeholders might need to pay, but I imagine it will be indirect: they will pay for developer time. Just as lots of companies employ developers to work on the Linux kernel, tools companies will employ developers to work on parts of the NetBeans Platform or NetBeans IDE.&lt;br /&gt;&lt;br /&gt;Having a simpler and more modest entity in charge will also allow an ecosystem to form around the Platform and the IDE. I'm not sure Oracle will list my small company as a source to get official support for the Platform, but I'm pretty sure the NetBeans Foundation would (just as there are many companies offering various services &lt;a href="http://www.postgresql.org/support/professional_support"&gt;around Postgresql&lt;/a&gt;, for example).&lt;br /&gt;&lt;br /&gt;Now, the big question isn't how should NetBeans make some money. There are surely many ways: I'm working full-time just doing NetBeans Platform-related projects. Many other people are doing a living doing trainings or programming. My questions are:&lt;br /&gt;&lt;br /&gt;How much does NetBeans actually cost and would we get enough stakeholders ? Except Oracle, who would get on board to pay either cash or developer time to keep NetBeans going? Because if only Oracle pays, they will be reluctant to allow the Foundation happen (actually they still might, for tax purposes). If NetBeans is a loss leader, can Oracle really afford losing total control ?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Any other solution that doesn't include the Foundation doesn't really interest me as I don't think NetBeans is making Oracle poor. They can always try to get as much money via training, support and other ways and just cover the difference out of the pocket to have their own IDE which may be seen a loss leader for other Oracle products (for example JavaFX).&lt;br /&gt;&lt;br /&gt;Plus that now that Oracle owns Java and leads the JCP so they will always need some IDE to provide the reference implementations on: might as well be the OSGi-fied NetBeans.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-7877996720560506362?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/7877996720560506362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=7877996720560506362&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7877996720560506362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7877996720560506362'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/05/re-how-could-netbeans-team-make-money.html' title='Re: How Could the NetBeans Team Make Money from the NetBeans Platform?'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-5668534034756972601</id><published>2010-04-19T02:25:00.000+03:00</published><updated>2010-04-19T02:25:39.813+03:00</updated><title type='text'>EC2 as a build server</title><content type='html'>I've been using for the past year or so a Slicehost virtual private server running Ubuntu Linux to run a build server.&lt;br /&gt;&lt;br /&gt;Due to the inherent IO-bound nature of some of my builds and the RAM starved nature of the servers sold, I've been forced to upgrade from the 256MB to the 512MB and then to the 768MB slice. Not sure if it's a marketing ploy but you cannot use the server otherwise.&lt;br /&gt;&lt;br /&gt;Starting last week, I'm running experiments on migrating the builds on top of EC2 (and S3 for storage). Using EC2 for a build server, especially for a small company is a perfect fit:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;EC2 machines are way more powerful&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;The smallest EC2 machine has 1.7GB of RAM and the next one 7GB. These are serios machines.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Builds are finite&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This might not apply for your projects or your company, but I generally do a few operations per day that would trigger a build.&lt;br /&gt;&lt;br /&gt;This means that I actually only need the server for, let's say, 5 builds per day or less. Over 20 work days, I would actually use the build server for 100 builds per month.&lt;br /&gt;&lt;br /&gt;So I am actually paying for a server to be live all the time when I only need it for 100 builds. Assuming a build takes about 1 hour (which is does for the longest project I have), I only need the server for 100 hours per month.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;It's cheaper&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Considering the previous paragraph where I noticed I only need the server for 100 hours, it's cheaper to pay for the EC2 hourly usage. Of course, running the EC2 server full-time would be a lot more expensive compared to Slicehost, but I don't need it full-time.&lt;br /&gt;&lt;br /&gt;Thus, it's cheaper either to give up Slicehost altogether or to have some mixed scenario perhaps, with a much cheaper Slicehost server combined to an EC2 slave running on demand when needed. I'm slowly migrating to the mixed scenario first.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But there are also some clear advantages to using EC2:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;You really do a clean build&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;While with a normal build server that's configured properly this problem doesn't show up, it is possible to be there: tainted builds. A tainted build is one that's using some form of unexpected binaries for various reasons.&lt;br /&gt;&lt;br /&gt;When you build on a fresh machine there is nothing there to influence your build. Just the operating system, your tools and your code.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;It forces you to take out to magic out of the build&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When you start with a bare-bone machine you cannot make any assumptions you would unknowingly do on the build server.&lt;br /&gt;&lt;br /&gt;On an always-live build server you can easily ssh and do some manual tweak which will remain there forever but &lt;i&gt;never be actually documented&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;This style of &lt;i&gt;whole world&lt;/i&gt; building will force you to document and produce all the build dependencies.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Some first results for my most IO bound build&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;It finishes:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;After 30 minutes with the 512MB slice, (but that started slipping for some reason, hence the upgrade)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;After 20 minutes with the 768MB slice.&lt;br /&gt;After 25 minutes of uptime with the EC2 m1.small&lt;br /&gt;After 11 minutes of uptime with the EC2 m1.large&lt;br /&gt;After 15 minutes of uptime with the EC2 m1.large, building everything over a RAM-disk.&lt;br /&gt;&lt;br /&gt;The surprising thing here is that on EC2 m1.large, where I have over 7GB of RAM, &lt;b&gt;a RAM-disk&lt;/b&gt; &lt;b&gt;is slower&lt;/b&gt;. I assume the reason is that Linux uses the RAM for disk-cache anyhow and it's smarter about that (ie. by only caching the JARs not the whole source and build folder like I did).&lt;br /&gt;&lt;br /&gt;The build over EC2 m1.small seems to be a bit slower but this total time is &lt;i&gt;uptime&lt;/i&gt;. Meaning in the 25 minutes I install all the tools and download and unzip more than 1GB of dependencies &lt;i&gt;and&lt;/i&gt;&amp;nbsp;do the build.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-5668534034756972601?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/5668534034756972601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=5668534034756972601&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5668534034756972601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5668534034756972601'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/04/ec2-as-build-server.html' title='EC2 as a build server'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-245525064595852853</id><published>2010-04-16T14:57:00.001+03:00</published><updated>2010-04-16T14:57:58.665+03:00</updated><title type='text'>Fremen gear</title><content type='html'>Ever since I've been working for my own company, I've discovered that working from a single place gets pretty boring after a while. Actually, there are a few phases you go through, but suffice to say at some point you'll want to also work in coffee shops at least for the change of scenery.&lt;br /&gt;&lt;br /&gt;Let's talk now about the gear I happen to use:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A &lt;a href="http://www.swissgear.eu/ecProduct_detail.asp?OID=9937&amp;amp;ID=3237&amp;amp;catID=&amp;amp;sCatID=1146685&amp;amp;ssCatID=1146998"&gt;Swissgear notebook backpack&lt;/a&gt;&amp;nbsp;&lt;img src="http://www.swissgear.eu/objects/00009936.jpg" /&gt;&amp;nbsp;(Thanks Tora!)&lt;/li&gt;&lt;li&gt;My &lt;a href="http://www.everymac.com/systems/apple/macbook_pro/stats/macbook-pro-core-2-duo-2.4-15-early-2008-penryn-specs.html"&gt;15" MacBook Pro&lt;/a&gt;&amp;nbsp;(it has 4GB of RAM compared to the base model). I also happen to be selling it after I've seen the specs of the new ones. &lt;img src="http://www.everymac.com/images/cpu_pictures/apple_macbook_pro_15_08.jpg" /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Then, a whole lot of other items I was a bit surprised to find when I unloaded the backpack yesterday to wash it:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_7kuGo66xDMI/S8hH2kwwkJI/AAAAAAAAQOo/mTjY8QLvH3I/s1600/15042010451.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/_7kuGo66xDMI/S8hH2kwwkJI/AAAAAAAAQOo/mTjY8QLvH3I/s400/15042010451.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Let's see (right to left):&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;My &lt;a href="http://www.orange.ro/abonamente-date/index.html"&gt;Orange 3G&lt;/a&gt; modem. I rarely need it while in Timisoara. While visiting my parent though it's almost useless since it goes over EDGE, meaning it's slower than dialup. &amp;nbsp;Handy as a last resort but I won't renew the subscription with Orange when it expires.&lt;/li&gt;&lt;li&gt;My &lt;a href="http://store.apple.com/us/browse/home/shop_ipod/family/ipod_touch"&gt;8G iPod Touch&lt;/a&gt;, USB cable and iPhone headset (I use this headset since it also has the microphone, unlike the original iPod headset). I almost never listen to music though, it's just for testing if we have an iPhone project to develop.&lt;/li&gt;&lt;li&gt;Nokia E71 USB charger (you can barely see it since it's black -- right next to the iPod cables)&lt;/li&gt;&lt;li&gt;My 2010 diary&lt;/li&gt;&lt;li&gt;A fountain pen -- I like writing with a fountain pen, a ballpoint pen ruins your handwriting.&lt;/li&gt;&lt;li&gt;A ballpoint pen&lt;/li&gt;&lt;li&gt;Lots of wet tissues (including one from KFC apparently).&lt;/li&gt;&lt;li&gt;Matches&lt;/li&gt;&lt;li&gt;Some pills&lt;/li&gt;&lt;li&gt;A key I forgot about&lt;/li&gt;&lt;li&gt;A &lt;a href="http://www.wenger.ch/classic"&gt;Wenger Swiss Army knife&lt;/a&gt; (thanks dad)&lt;/li&gt;&lt;li&gt;Company stamp. I don't carry this always, but you need it for almost everything company-related here.&lt;/li&gt;&lt;li&gt;Bureaucratic papers.&lt;/li&gt;&lt;li&gt;A small yellow note book for quick note-taking&lt;/li&gt;&lt;li&gt;Some leftover sugar from some coffee I bought probably. Forgot about these -- it's very easy to lose stuff in the backpack.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Besides these items, sometimes I have in the external pockets a small umbrella, tissues and perhaps a 500ml bottle of water.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There you are: the gear of a modern day fremen.&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Stillsuit"&gt;Stillsuit&lt;/a&gt; not included.&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/30278691-245525064595852853?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/245525064595852853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=245525064595852853&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/245525064595852853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/245525064595852853'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/04/fremen-gear.html' title='Fremen gear'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7kuGo66xDMI/S8hH2kwwkJI/AAAAAAAAQOo/mTjY8QLvH3I/s72-c/15042010451.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-277126292165902159</id><published>2010-04-12T13:17:00.000+03:00</published><updated>2010-04-12T13:17:39.857+03:00</updated><title type='text'>iPhone OS notes</title><content type='html'>Apple news flooded the Internet during Easter. After having watched the iPhone OS 4 keynote I have a few remarks and questions. Feel free to comment if you have anything to clear up for me.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;iAd&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Jobs &lt;i&gt;sells&lt;/i&gt; the penalty of clicking ads since that closes the app and launches Safari. But since he just introduced multitasking, this penalty is greatly reduced or non-existent. After all, if the user doesn't know how to return to the app after clicking an ad there is something really wrong with the multitasking user interface.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Push services&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Things that make you go hmm: apparently Apple has a &lt;i&gt;direct link&lt;/i&gt; to each iPhone via push services. I never used this API but I can't but wonder how does this thing really work (expecially via 3G-only).&lt;br /&gt;&lt;br /&gt;Also, I assume that notifications aren't encrypted. That should be another data-mining opportunity for&amp;nbsp; Apple for iAd.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Wireless sync ?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;iBooks bookmarks sync &lt;i&gt;wirelessly&lt;/i&gt;. What does that mean ? Is there some Apple server that gets this data no matter what ?&lt;br /&gt;&lt;br /&gt;That's about it. I won't comment on the new programming language restriction they apparently introduced since it's been said enough already.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-277126292165902159?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/277126292165902159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=277126292165902159&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/277126292165902159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/277126292165902159'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/04/iphone-os-notes.html' title='iPhone OS notes'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-8891637678804276503</id><published>2010-03-18T10:39:00.001+02:00</published><updated>2010-03-18T10:53:14.085+02:00</updated><title type='text'>Almost saw Freddy Mercury in concert</title><content type='html'>I regret not seeing Freddy Mercury from Queen in concert but I was too young when they were touring and not yet born during most of their prime years.&lt;br /&gt;&lt;br /&gt;Last night I witnessed &lt;a href="http://timisoara.inoras.ro/eveniment_dancing-queen-balet-rock-in-doua-acte-miercuri-17-martie-2010-la-opera-nationala-romana.htm"&gt;a ballet show&lt;/a&gt; on Queen music and it was as close to a Freddy Mercury show as I could ever get.&amp;nbsp; A truly exceptional experience !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-8891637678804276503?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/8891637678804276503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=8891637678804276503&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8891637678804276503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8891637678804276503'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/03/almost-saw-freddy-mercury-in-concert.html' title='Almost saw Freddy Mercury in concert'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-255384130245503550</id><published>2010-03-11T11:47:00.000+02:00</published><updated>2010-03-11T11:47:47.933+02:00</updated><title type='text'>Bread and circuses</title><content type='html'>Yesterday while zapping the TV shows I've observed what the true purpose of all the political talk shows and talk show hosts is: they are the modern day circus presided by a modern day jester.&lt;br /&gt;&lt;br /&gt;For you see, the jester has a very important role: it diffuses the public negativity.&lt;br /&gt;&lt;br /&gt;As a ruler or ruling party that also does questionable social or economical decisions you don't really want people on the streets. You don't want resentment to grow within people. So - the jester is actually something you need. Of course, they may sting a little but remember: sticks and stones...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-255384130245503550?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/255384130245503550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=255384130245503550&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/255384130245503550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/255384130245503550'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/03/bread-and-circuses.html' title='Bread and circuses'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-5363343405698373320</id><published>2010-03-03T09:52:00.000+02:00</published><updated>2010-03-03T09:52:09.673+02:00</updated><title type='text'>The default NetBeans IDE java source template is polluting the web</title><content type='html'>People will never bother to do anything manual unless absolutely necessary. This is why I believe the current NetBeans "empty" java file template is fundamentally broken.&lt;br /&gt;&lt;br /&gt;It tries to "teach" people how to change the template by inserting in the file header something like:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" id="thepaste"&gt;&lt;span class="com"&gt;/*&lt;br /&gt;&amp;nbsp;* To change this template, choose Tools | Templates&lt;br /&gt;&amp;nbsp;* and open the template in the editor.&lt;br /&gt;&amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;This might sound like a great idea in practice but it's broken since most people won't change it. So it just becomes line-noise that will get published, committed to VCS, etc.&lt;br /&gt;&lt;br /&gt;A good UI would display that message differently, like a floating non-modal dialog, or some notification in the New File Wizard, but it shouldn't produce actual text that is part of the source code file.&lt;br /&gt;&lt;br /&gt;Google seems to &lt;a href="http://www.google.ro/search?q=%22To+change+this+template,+choose+Tools+%7C+Templates+*%22"&gt;say about the same&lt;/a&gt;: there are 321.000 instances of files indexed by the search engine containing that header. And this is only on the public web, I bet there are many more closed-source code repositories filled with these lines...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-5363343405698373320?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/5363343405698373320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=5363343405698373320&amp;isPopup=true' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5363343405698373320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5363343405698373320'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/03/default-netbeans-ide-java-source.html' title='The default NetBeans IDE java source template is polluting the web'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-3995494069033803470</id><published>2010-03-02T11:51:00.000+02:00</published><updated>2010-03-02T11:51:20.833+02:00</updated><title type='text'>Reading poetry is hard</title><content type='html'>I have this book with all the poems of a great Romanian poet, &lt;a href="http://en.wikipedia.org/wiki/Nichita_St%C4%83nescu"&gt;Nichita Stanescu&lt;/a&gt; and I've started reading about a poem every day.&lt;br /&gt;&lt;br /&gt;I like his poems because they are very imaginative and visual in an unexpected way. I see them as surrealist descriptions, as if someone would put a Dali painting in words and add some more emotions to the mix. Of course, this is just how I see them, I never bothered to read the actual critics review of the poet.&lt;br /&gt;&lt;br /&gt;The other day I was reading a nice poem called "Rain in the month of March"&amp;nbsp; ("Ploaie in luna lui Marte" in original). I can't find a proper translation but &lt;a href="http://crestin.eu/?p=714"&gt;this is the first one&lt;/a&gt; a search returns.&lt;br /&gt;&lt;br /&gt;Well, this poem also became the lyrics of a famous Romanian song by Paula Seling: &lt;a href="http://www.youtube.com/watch?v=pQXFPFsEitw"&gt;listen it&lt;/a&gt;, it's quite nice.&lt;br /&gt;&lt;br /&gt;Now, reading this poem made me realize two things.&lt;br /&gt;&lt;br /&gt;First, I couldn't separate the song in my head from the poem. I couldn't &lt;i&gt;read&lt;/i&gt; the poem, I was always hearing the tune of the song. The song taught me the only way I could ever read that poem.&lt;br /&gt;&lt;br /&gt;Second, I'm probably not good at reading poems. Because&lt;i&gt; the song&lt;/i&gt; made me see how beautiful the poem is -- I would have just read it, imagined an interesting visual imagine and be done with it. Reading it would have never shown me how good the poem is, it would have just been another specific Nichita Stanescu poem. But the song showed me it's an excellent poem.&lt;br /&gt;&lt;br /&gt;I wonder how many other great poems I've already missed because I couldn't read them the way they are supposed to, with the right state of mind and the right visuals.&lt;br /&gt;&lt;br /&gt;Reading poetry is hard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-3995494069033803470?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/3995494069033803470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=3995494069033803470&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3995494069033803470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3995494069033803470'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/03/reading-poetry-is-hard.html' title='Reading poetry is hard'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-5190354915442590243</id><published>2010-02-23T10:04:00.000+02:00</published><updated>2010-02-23T10:04:33.860+02:00</updated><title type='text'>Nobody reads the fine print (for mobile widgets anyhow)</title><content type='html'>I've gotten used to skim the legalese things that you agree to upon any account creation, etc. You know, those things that have a textbox next to them and the submit button is disables until you check them.&lt;br /&gt;&lt;br /&gt;Anyhow -- here is a nice piece from &lt;a href="http://www.jil.org/#REGISTRATION"&gt;jil.org&lt;/a&gt;, a developer portal for mobile widgets. I used to do Konfabulator (now Yahoo) widgets long ago and I though I should see what's with these new "mobile" widgets. (The terms PDF is &lt;a href="http://www.jil.org/Listener/Terms_Conditions/28/jil_terms_en.pdf"&gt;here&lt;/a&gt; ).&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp;&amp;nbsp; 7.&amp;nbsp; JIL’s right to use User Content&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. With the exception of personal information, you hereby grant JIL a perpetual, unlimited, royalty-free, worldwide, non-exclusive, irrevocable, transferable license to run, display, copy, reproduce, publish, bundle, distribute, market, &lt;b&gt;create derivative works of&lt;/b&gt;, &lt;b&gt;adapt&lt;/b&gt;, &lt;b&gt;translate&lt;/b&gt;, transmit, &lt;b&gt;arrange&lt;/b&gt;, &lt;b&gt;modify&lt;/b&gt;, &lt;b&gt;sub-license&lt;/b&gt;, export, &lt;b&gt;merge&lt;/b&gt;, transfer, loan, rent, lease, assign, share, outsource, host, make available to any person or otherwise use, any widgets or other content you provide on or through the Developer Site or which you send to JIL by e-mail or other correspondence including, without limitation, any ideas, concepts, inventions, know-how, techniques or intellectual property contained therein, for any purpose whatsoever and in any manner (“User Content”). JIL shall not be subject to any obligations of confidentiality regarding any such information unless specifically agreed by JIL in writing or required by law. You represent and warrant that you have the right to (a) grant the license set out above and to (b) upload the User Content on the Developer Site. You acknowledge that the license set out above includes the right for JIL to make the User Content available to a Sponsor and other entities with which JIL has contractual arrangements for further distribution of the User Content.&lt;/blockquote&gt;Now, this paragraph starts like a standard paragraph on many sites where they basically say the want to be legally allowed to display your product. So they need to be able to host, distribute and market the widget. Sounds nice. Obviously their partners need to be able to do that too. Ok, pretty standard so far...&lt;br /&gt;&lt;br /&gt;But here is the interesting part: they want to be able to modify your widget and create derivative works! So this is not the standard "hosting" agreement -- you are actually granting them a license on your source code to do as they please. If you combine this with the fact that every agreement of this kind (and obviously JILs too) has some indemnification clause, you get an interesting situation.&lt;br /&gt;&lt;br /&gt;An interesting software would be one to track all these agreements. I think that by the end of your lifetime, it would be pretty scary to look at the dependency graph all these agreements have created between you and sites/companies, partner companies, merged companies, owners of bought companies.&lt;br /&gt;&lt;br /&gt;In other words, if we define this "agreement distance" in the spirit of the &lt;a href="http://en.wikipedia.org/wiki/Erd%C5%91s_number"&gt;Erdos number&lt;/a&gt; , I'd say that over a 30 years span the agreement distance becomes 1 for any reasonably active individual with any other major company or website.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-5190354915442590243?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/5190354915442590243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=5190354915442590243&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5190354915442590243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5190354915442590243'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/02/nobody-reads-fine-print-for-mobile.html' title='Nobody reads the fine print (for mobile widgets anyhow)'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-722124694849304051</id><published>2010-02-19T11:53:00.000+02:00</published><updated>2010-02-19T11:53:53.749+02:00</updated><title type='text'>OSGi has won</title><content type='html'>Although NetBeans' module system was on-par with OSGi, greater industrial support meant OSGi always looked like a better pick to outsiders.&lt;br /&gt;&lt;br /&gt;Starting a while back I saw OSGi as the clear winner. Especially when Glassfish 3, an major Sun project picked OSGi instead of the NetBeans Module system, it was obvious OSGi was winning even inside Sun (although they were reluctant towards giving OSGi a too big stake in the upcoming Java 7 module system).&lt;br /&gt;&lt;br /&gt;In the meantime NetBeans is getting native support to&lt;a href="http://wiki.netbeans.org/OSGiAndNetBeans"&gt; run OSGi bundles&lt;/a&gt; as well as getting ready to run &lt;a href="http://wiki.netbeans.org/NetBeansInOSGi"&gt;inside an OSGi&lt;/a&gt; container.&lt;br /&gt;&lt;br /&gt;Oracle wanted a common IDE extension API starting at least 2002 when they sumitted &lt;a href="http://jcp.org/en/jsr/detail?id=198"&gt;JSR 198&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now, owning Java and NetBeans itself, they have it really easy to define the roadmap for both. &lt;br /&gt;&lt;br /&gt;I estimate that NetBeans will be able to run inside an OSGi container by the end of 2010. We'll also see official NetBeans plugins distributed as OSGi bundles instead of NetBeans modules. In the end the NetBeans module system might become a deprecated subsystem.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;Note: This is just my take at technology analysis. I have no inside information obtained via my NetBeans Dream Team membership or from Oracle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-722124694849304051?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/722124694849304051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=722124694849304051&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/722124694849304051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/722124694849304051'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/02/osgi-has-won.html' title='OSGi has won'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-2412189453587294156</id><published>2010-02-17T10:47:00.003+02:00</published><updated>2010-02-17T10:55:46.745+02:00</updated><title type='text'>Interesting banking factoid from Romania</title><content type='html'>Like anywhere in Europe, all bank deposits are guaranteed if the bank goes under, within a limit.&lt;br /&gt;&lt;br /&gt;For a company account, that limit was until not too long ago 20.000 euro. Now, the limit has been raised to 50.000 eur.&lt;br /&gt;&lt;br /&gt;See the chart bellow for an idea on how the limit has been raised. It kinda shows the evolution of the Romanian economy as well as the panic at the beginning of the finance crisis.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://spreadsheets.google.com/gpub?url=http%3A%2F%2Ff62ed6fg3rppptjtj5ia5idjichr25gm.spreadsheets.gmodules.com%2Fgadgets%2Fifr%3Fup__table_query_url%3Dhttps%253A%252F%252Fspreadsheets.google.com%252Ftq%253Frange%253DA1%25253AC8%2526headers%253D1%2526key%253D0AqaCytYBJkSRdGIxRE1ZMS1CbVdWMVZIdHJvVHg1eVE%2526gid%253D0%2526pub%253D1%26up_title%3DGuaranteed%2520deposits%26up_chartTitle%3DGuaranteed%2520deposits%26up_labelx%3DTime%26up_labely%3DAmount%2520in%2520euro%26up_legend%3D0%26up_stacked%3D0%26up_showpoints%3D1%26up_min%3D%26up_max%3D%26up__table_query_refresh_interval%3D300%26url%3Dhttp%253A%252F%252Fwww.google.com%252Fig%252Fmodules%252Farea-chart.xml&amp;height=451&amp;width=450"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;What seems surprising to me is that if you have a company with, let's say, 1 million eur in deposits, you would need to open accounts to 20 banks and spread your money.&lt;br /&gt;&lt;br /&gt;If you have 2 million euro you are out of luck in this regard, because you would need 40 banks and Romania only has about 30 officially registered banks. (Of course, with 2 million euro in cash you would be one really happy camper.)&lt;br /&gt;&lt;br /&gt;I wonder how a big company like Apple is handling this, given they had a few billion dollars in cash reserves last I checked.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-2412189453587294156?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/2412189453587294156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=2412189453587294156&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2412189453587294156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2412189453587294156'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/02/interesting-banking-factoid-from.html' title='Interesting banking factoid from Romania'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-1632012192997266833</id><published>2010-02-08T15:20:00.002+02:00</published><updated>2010-04-19T16:01:54.426+03:00</updated><title type='text'>Slicehost as a build server</title><content type='html'>I'm using a Slicehost server for over an year now to host my build server and my slice seems to be getting slower.&lt;br /&gt;&lt;br /&gt;Here is the graph for one of the projects: &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_7kuGo66xDMI/S28THmYEkuI/AAAAAAAAQDk/NocrOFzehkI/s1600-h/png-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_7kuGo66xDMI/S28THmYEkuI/AAAAAAAAQDk/NocrOFzehkI/s400/png-1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The build initially took about 30 minutes, then I had a period where I jumped to about 70 minutes. This lag was entirely my unit-test and after some refactorings I took is down again to about 30 minutes, which is decent.&lt;br /&gt;&lt;br /&gt;Now take a look at another project:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_7kuGo66xDMI/S28SoF-Y2FI/AAAAAAAAQDc/kvAZrFclxRo/s1600-h/png-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_7kuGo66xDMI/S28SoF-Y2FI/AAAAAAAAQDc/kvAZrFclxRo/s400/png-2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The difference is that the project took all long about 40 minutes, and now I have spikes of 3-4 hours !&lt;br /&gt;&lt;br /&gt;What's the catch: well, the first project is taking so long during unit tests since I have a lot of GUI tests, where the code has to sleep and give the interface time to repaint, etc. So, although the time is 30 minutes, it's mostly waiting for the GUI (inside an Xvnc instance) to paint.&lt;br /&gt;&lt;br /&gt;The second project though does a massive build where I just produce JARs and don't run any unit tests. It's massively IO-bound.&lt;br /&gt;&lt;br /&gt;So, the way I see it, in the past 2 months or so the machine I'm running my VPS on, has been getting slower doing IO request.&lt;br /&gt;&lt;br /&gt;IO has always been a problem with my limited VPS experience. First, I got rid of this by moving from the 256mb slice to the 512mb slice since apparently I was just trashing the swap file.&lt;br /&gt;&lt;br /&gt;But now, I'm not so certain it's a RAM issue anymore. The 2nd compilation just needs to touch the disk so it doesn't matter how much RAM do I add, after the minimal amount needed for ant and javac.&lt;br /&gt;&lt;br /&gt;I'm starting to think I should move the build server onto an EC2 instance. This way I could use a smaller slice just to run Hudson, but do the actual building onto a bigger EC2 instance. I'm not certain it will be cheaper though.&lt;br /&gt;&lt;br /&gt;Later edit: The discussion here is continued with my post about using&amp;nbsp;&lt;a href="http://emilian-bold.blogspot.com/2010/04/ec2-as-build-server.html"&gt;EC2 instances as build servers&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-1632012192997266833?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/1632012192997266833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=1632012192997266833&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1632012192997266833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1632012192997266833'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/02/slicehost-as-build-server.html' title='Slicehost as a build server'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7kuGo66xDMI/S28THmYEkuI/AAAAAAAAQDk/NocrOFzehkI/s72-c/png-1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-1479361391701407590</id><published>2010-01-28T14:21:00.000+02:00</published><updated>2010-01-28T14:21:33.414+02:00</updated><title type='text'>Oracle and Java</title><content type='html'>Since using Google is faster compared to loading the saved Javadoc, I always read the JDK Javadoc online. There was something odd today - the favicon (&lt;a href="http://en.wikipedia.org/wiki/Favicon"&gt;what's a favicon?&lt;/a&gt;) looked a bit off: it's a red square with a white O in the middle.&lt;br /&gt;&lt;br /&gt;Heading off to &lt;a href="http://java.sun.com/"&gt;http://java.sun.com/&lt;/a&gt; I see that the header is different. It says "&lt;i&gt;ORACLE: Sun Developer Network (SDN)&lt;/i&gt;". So that's where the red favicon comes from !&lt;br /&gt;&lt;br /&gt;Well, I guess it will take some getting used to. I don't really know anything about Oracle, but I really liked Sun's logo much more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-1479361391701407590?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/1479361391701407590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=1479361391701407590&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1479361391701407590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1479361391701407590'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/01/oracle-and-java.html' title='Oracle and Java'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-5433719994542481984</id><published>2010-01-18T00:09:00.000+02:00</published><updated>2010-01-18T00:09:19.312+02:00</updated><title type='text'>Linux: The last 10% will take another 10 years</title><content type='html'>&lt;b&gt;Note&lt;/b&gt;: The blog post bellow was written on the 6&lt;sup&gt;th&lt;/sup&gt; of December 2007, but I never published it. It seems to still be valid today and given that the laptop I'm talking about went dead and was sent for repairs last week (but most likely they won't be able to fix such an old model), I'm finally publishing it now as a remainder of what that little machine had to endure :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Everybody in the Linux world will tell you that Linux has GoodEnough&lt;sup&gt;TM&lt;/sup&gt; hardware support. Meaning of course that all the good stuff is missing but that your system is fairly functional.&lt;br /&gt;&lt;br /&gt;Which is fine ! I mean, as a programmer why would I want to squeeze 100% of my machine ? We can always buy another one which will be even faster but, due to the "LackOfLinuxDriver compensating factor", will fell just like the old machine &lt;span style="font-style: italic;"&gt;would have felt&lt;/span&gt; with proper drivers.&lt;br /&gt;&lt;br /&gt;That is, bad hardware support makes you feel on today's hardware as if you are using a refurbished machine.&lt;br /&gt;&lt;br /&gt;Ok, enough ranting. The reason I'm evil in this post is because &lt;span style="font-style: italic;"&gt;Linux killed my laptop's battery&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I have an old Dell C840 which had a battery that only lasted about 30 minutes. So I spent about a quarter of the laptop's current value on a new battery (the Dell has two battery bays which is kinda cool).&lt;br /&gt;&lt;br /&gt;So now, with the new battery I had about 4 hours off the grid, which was acceptable.&lt;br /&gt;&lt;br /&gt;That is, until one night when I just let my laptop with the lid closed but, somehow, it didn't suspend/hibernate as it normally did. Instead it kept on going and going and going upto &lt;span style="font-style: italic;"&gt;total&lt;/span&gt;  and 100% battery drain.&lt;br /&gt;&lt;br /&gt;Strangely, the old battery (Li-Ion), after being at 0% and about 16 hours of charge recovered and it's now back to the regular 30 minutes.&lt;br /&gt;&lt;br /&gt;But the new battery, after &lt;span style="font-style: italic;"&gt;days&lt;/span&gt; of charging is dead. Hello LI-Ion &lt;a href="http://en.wikipedia.org/wiki/Deep_discharge"&gt;deep discharge&lt;/a&gt; ! Now, why in the world didn't Linux shutdown my machine when it was clear the power was running out ? Or course, some weird hardware support-related fluke. Do I care ? No: my new battery was killed.&lt;br /&gt;&lt;br /&gt;This is sadly a losing position for Linux as they can't write those drivers in some situations (due to so called evil corporations) but it sure makes me mad to use less then what my hardware has to offer...&lt;br /&gt;&lt;br /&gt;Another example: Linux (Ubuntu) on a MacBook Pro. It's like the ugly duckling ! The scenario is like this: I use OSX with the nice fonts, Expose, I reboot, I select Linux and then I see the horror. It's as if the machine was reduced to a cheap NoName laptop: the image doesn't "look" good, you see pixelated things, then you see ugly fonts, then you see windows that barely drag/refresh due to lack of a proper driver, then you install the binary-blob-driver from nVidia and notice that the "effects" don't hold a candle to OSX' experience (and some more pixelated stuff).&lt;br /&gt;&lt;br /&gt;It's this last 10% threshold that I'm talking about here. Sure, hardware works 90% of the cases, but I sure would like to know I'm using the full power of my machine. Gnome does give you some GUI but I sure would like to see fonts I can stare at for 10 hours a day or some decent effects that aren't there just to show what OpenGL does.&lt;br /&gt;&lt;br /&gt;In conclusion: I really like Linux and the reason I bought a Mac was because I needed an "unix" with proper hardware support. Because Linux still doesn't have a place as the main machine.&lt;br /&gt;&lt;br /&gt;Linux on a headless server ? Sure ! Linux on my main machine I have to stare at the whole day: not if I have a choice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-5433719994542481984?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/5433719994542481984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=5433719994542481984&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5433719994542481984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5433719994542481984'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/01/linux-last-10-will-take-another-10.html' title='Linux: The last 10% will take another 10 years'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-241350019037887236</id><published>2010-01-14T13:51:00.000+02:00</published><updated>2010-01-14T13:51:23.209+02:00</updated><title type='text'>I wonder how much does AllegroGraph cost</title><content type='html'>Although I'm not a big &lt;a href="http://en.wikipedia.org/wiki/Resource_Description_Framework"&gt;RDF&lt;/a&gt; user, I did notice that some SPARQL queries take some time on my machine so I cannot but ask myself how much faster would it run using &lt;a href="http://www.franz.com/agraph/allegrograph/"&gt;AllegroGraph&lt;/a&gt; ?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.franz.com/"&gt;Franz Inc&lt;/a&gt; does provide a free edition that's limited on how many triples you may store so at some point it should be easy to run some benchmarks.&lt;br /&gt;&lt;br /&gt;But -- how much would the AllegroGraph enterprise license really cost to get rid of the triples limitation ?&lt;br /&gt;&lt;br /&gt;Like any company that is (or thinks it is) selling an expensive item, the price is&lt;i&gt; not listed&lt;/i&gt;, all you are given is a phone number.&lt;br /&gt;&lt;br /&gt;I wonder how many customers are they losing this way because people assume the product is way more expensive then it actually is. Because I won't pay 0.5 million dollars to get the enterprise license. Then again, what do I know, it might be 5 mil plus&amp;nbsp; :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-241350019037887236?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/241350019037887236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=241350019037887236&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/241350019037887236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/241350019037887236'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/01/i-wonder-how-much-does-allegrograph.html' title='I wonder how much does AllegroGraph cost'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-8121373026891060415</id><published>2010-01-11T09:46:00.023+02:00</published><updated>2010-01-19T23:36:28.846+02:00</updated><title type='text'>Personal growth a purpose in itself ?</title><content type='html'>2 or 3 years ago I used to read some of an internet-famous person's blog posts. They were mostly economical and entrepreneurship related and I liked the way they were written.&lt;br /&gt;&lt;br /&gt;Ever since, I stopped reading his blog since his personal growth "road" has taken him into some strange areas I don't really care to follow.&lt;br /&gt;&lt;br /&gt;For example, there were some traces of some kind of mysticism, and then he decided he should separate from his wife, then try polyamory and this year he's going into BDSM !&lt;br /&gt;&lt;br /&gt;I know the last part since I re-open once in a while his link to see if something interesting might pop-up. Imagine my surprise when I read his latest blog post...&lt;br /&gt;&lt;br /&gt;Of course, it could also be some cultural blocks that deny me to see the "value" in what he's is trying to achieve, but I think at some point personal growth might be able to turn malign.&lt;br /&gt;&lt;br /&gt;Humans aren't really built for infinite growth given the simple limitation that people die. So, it might be that trying too much to "grow as a person" leads to desensitizing towards normal life. Which means that it's possible to start using more extreme "personal growth" experiences to make up for it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-8121373026891060415?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/8121373026891060415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=8121373026891060415&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8121373026891060415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8121373026891060415'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/01/when-does-personal-growth-become-malign.html' title='Personal growth a purpose in itself ?'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-2472524345673875739</id><published>2010-01-11T09:44:00.000+02:00</published><updated>2010-01-11T09:44:34.237+02:00</updated><title type='text'>Go see Avatar</title><content type='html'>Yesterday I watched Avatar in a proper cinema with 3D glasses. The experience was almost surreal and while I had already read the book long ago, the adaptation was decent.&lt;br /&gt;&lt;br /&gt;But really -- the 3D part of the movie is where all the magic is. Well worth the ticket price !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-2472524345673875739?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/2472524345673875739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=2472524345673875739&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2472524345673875739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2472524345673875739'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/01/go-see-avatar.html' title='Go see Avatar'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-4345391740146608220</id><published>2010-01-04T17:07:00.002+02:00</published><updated>2010-01-04T17:11:27.648+02:00</updated><title type='text'>No such thing as a bad technology</title><content type='html'>The human race will adapt to the tools and technologies it has developed. That's why the cell phone companies for example just have to play a long term game and wait: in time fewer people will be sensitive to their cell phone radiation.&lt;br /&gt;&lt;br /&gt;It's just another level in the "adapting to the environment" game. Even if this time the environment is man-made.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-4345391740146608220?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/4345391740146608220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=4345391740146608220&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4345391740146608220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4345391740146608220'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2010/01/no-such-thing-as-bad-technology.html' title='No such thing as a bad technology'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-2203072977672948562</id><published>2009-12-09T11:29:00.002+02:00</published><updated>2009-12-09T11:52:02.703+02:00</updated><title type='text'>Logging needs some lazy evaluation</title><content type='html'>If it's one situation where lazy evaluation is needed in Java, it's logging. Until something better comes up and we'll have logging injected via &lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming"&gt;AOP&lt;/a&gt; or something similar, a log message will be just the result of an extra line in our Java files, and this is a problem.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A normal log message is something like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;log.fine("Some parameter is:" + someVariable);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This looks quite harmless especially since we know that depending on the log level, our message might be saved or not.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But say we have an expensive function:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;log.fine("The extra informations starts at" + reallyLongLastingFunction());&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The problem above is obvious: the log string will be built no matter what and our &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;reallyLongLastingFunction()&lt;/span&gt; will be called each time, including when the log won't actually be saved.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The solution to this is to pollute your code with something like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;if(log.isLoggable(Level.FINE)){&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  log.fine("The extra informations starts at" + reallyLongLastingFunction());&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This way our string creation and expensive function call is done only if the log really is needed. But this adds extra boilerplate in the code as well as makes you maintain the log level (for example what if I change the line to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;log.finer&lt;/span&gt; -- I have to update the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;if&lt;/span&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If all the log methods would have lazy evaluation this problem would go away -- the code won't be executed until actually needed and there will be only one line in the code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The AOP style is to inject the logging using bytecode engineering. Perhaps it would be nice to do a post-processing of the resulted JAR artifacts and replace all log calls with something that injects that &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;if&lt;/span&gt; check, etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And speaking of memory and CPU wasted on logging, there's nothing like seeing that your biggest CPU user is caused by the increased log level while debugging. Debuggers should know how to filter log calls, including time spent in the string building itself otherwise they don't really help.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-2203072977672948562?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/2203072977672948562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=2203072977672948562&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2203072977672948562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2203072977672948562'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/12/logging-needs-some-lazy-evaluation.html' title='Logging needs some lazy evaluation'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-1100849800734368919</id><published>2009-11-22T22:03:00.007+02:00</published><updated>2009-11-23T09:13:24.447+02:00</updated><title type='text'>In Romania, voting is still not an important right</title><content type='html'>I couldn't believe it tonight when they closed the voting booths with people waiting at the door and afterwords shouting that they want to vote.&lt;br /&gt;&lt;br /&gt;It's just surreal! On one side every politician tells people to please go vote, but here you have people willing to vote, but the voting booths are being closed because it 21:00 sharp.&lt;br /&gt;&lt;br /&gt;Mind you, it doesn't matter I had been standing in line since at least 20:30, I had no right to vote because I didn't physically get far enough in the line of people to get to vote by 21:00.&lt;br /&gt;&lt;br /&gt;I was totally certain they will allow all of us to vote. How wrong I was !&lt;br /&gt;&lt;br /&gt;I have never been particularly proud of being Romanian, but tonight I felt like a non-citizen. It's sad how low we are as a country on &lt;a href="http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs"&gt;Maslow's hierarchy of needs&lt;/a&gt;: still just a hungry and tired bunch of people that just wanted to be done with this "voting" thing by closing the booths as soon as possible.&lt;br /&gt;&lt;br /&gt;Just Sad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-1100849800734368919?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/1100849800734368919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=1100849800734368919&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1100849800734368919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1100849800734368919'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/11/in-romania-voting-is-still-not.html' title='In Romania, voting is still not an important right'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-754273523030704399</id><published>2009-10-23T14:21:00.004+03:00</published><updated>2009-10-23T14:29:02.348+03:00</updated><title type='text'>Official NetBeans build with Romanian localization</title><content type='html'>Head over to the &lt;a href="http://bits.netbeans.org/netbeans/6.8/community/beta/"&gt;NetBeans download website&lt;/a&gt; and notice the language popup also has Romanian now.&lt;br /&gt;&lt;br /&gt;More info about the localization on the Joseki Bold &lt;a href="http://www.josekibold.ro/romanian-netbeans"&gt;dedicated page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/8pEexVfNff92iWs-H2tQWA?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_7kuGo66xDMI/SuGS7Vh4pSI/AAAAAAAAP7U/T9zK9K6Le8k/s800/netbeans-6.8-romanian-page.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-754273523030704399?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/754273523030704399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=754273523030704399&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/754273523030704399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/754273523030704399'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/10/official-netbeans-build-with-romanian.html' title='Official NetBeans build with Romanian localization'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7kuGo66xDMI/SuGS7Vh4pSI/AAAAAAAAP7U/T9zK9K6Le8k/s72-c/netbeans-6.8-romanian-page.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-8175710134869047946</id><published>2009-10-11T11:31:00.002+03:00</published><updated>2009-10-11T11:50:36.068+03:00</updated><title type='text'>Aversion towards localization a sign of technological barbarism</title><content type='html'>English is obviously the lingua-franca of everything computer and computer-science related. Having a single language does help everybody since it easily allows people to communicate and exchange ideas.&lt;br /&gt;&lt;br /&gt;The side-effect of using English for everything computer related is that it decreases the focus on using the local language for computer-related discussions. Or, if the local language is used, it is filled with English words ! The more complex the discussion becomes, the more English is used until it becomes almost easier to use English full-time and just revert to the local language when some explaining is required using examples. I think this is the reason some multinationals revert to English as the official language -- for computer related workers, it doesn't affect the productivity, especially since people of different nationalities might end up working together.&lt;br /&gt;&lt;br /&gt;Well, this means that while English has evolved to be a technology-centric language, most of the other languages either try to play catch-up or, most likely, don't run into the race at all and just import all the English words.&lt;br /&gt;&lt;br /&gt;In my country developers, for example, dislike applications localized into the native language. The more technical the application is (like a developer tool), the more &lt;span style="font-style: italic;"&gt;foreign&lt;/span&gt; it seems to them to see the text in the local language instead of English. Native words disturb them and metaphors seem weird when they make the cognitive connection: a mouse is actually a rodent ! I'm pretty sure English people also thought of rodents the first time they heard "&lt;span style="font-style: italic;"&gt;mouse&lt;/span&gt;" in a phrase -- but this has been changed nowadays. Computers have become so ubiquitous that "&lt;span style="font-style: italic;"&gt;mouse&lt;/span&gt;" usually means that computer peripheral. "&lt;span style="font-style: italic;"&gt;Firewall&lt;/span&gt;" is not some fireman expression or a burning wall, but something computer related, etc.&lt;br /&gt;&lt;br /&gt;By focusing so much on the English language and not allowing themselves to jump-start the native language metaphors related to computer science, developers are the main culprit of keeping the native language into a phase of &lt;span style="font-weight: bold;"&gt;technological barbarism&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;An then, they act surprised when the local market almost doesn't exist and their parents can't understand a thing from computers and need help with the simplest things (usually they can't understand the language on screen, which is English).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-8175710134869047946?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/8175710134869047946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=8175710134869047946&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8175710134869047946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8175710134869047946'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/10/aversion-towards-localization-sign-of.html' title='Aversion towards localization a sign of technological barbarism'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-1764430848978376032</id><published>2009-09-24T11:17:00.004+03:00</published><updated>2009-09-24T11:57:01.869+03:00</updated><title type='text'>Green software</title><content type='html'>Long ago I wrote a blogpost where I was mentioning that for an always-on (wall-plugged) workstation, the latest (then) fad of lowering power consumption is not that essential since, as a developer, all you care about is overall machine speed to get the job done and the cost of power is negligible compared to the cost of on developer hour (and then rent, administrative overhead, etc.)&lt;br /&gt;&lt;br /&gt;Well, that is one aspect. The other aspect is when power consumption &lt;b&gt;is&lt;/b&gt; important. This is clearly a major factor for large datacenters where a big chunk of their cost is power (for the machines and cooling) so they keep a keen eye on &lt;a href='http://en.wikipedia.org/wiki/Performance_per_watt'&gt;performance per watt&lt;/a&gt;. The specifics of the business are different there: you don't have developers on top of each machine, but you have hundreds / thousands of machines providing some service to remote users. The cost of maintaining that datacenter determines the cost you sell your services to users and your overall competitiveness.&lt;br /&gt;&lt;br /&gt;Another scenario I've personally noticed as of late (see &lt;a href='http://netbeans.dzone.com/articles/debugging-netbeans-with-visualvm-and-btrace'&gt;my other article&lt;/a&gt; somehow related to this) is the importance of performance per watt when working on your laptop's battery !&lt;br /&gt;&lt;br /&gt;Now, the overall &lt;b&gt;system&lt;/b&gt; performance per watt is a given of the machine you happen to own. You can't actually tweak that very much, except some hardware upgrade here and there and operating system optimization.&lt;br /&gt;&lt;br /&gt;So what you are left is the actual software you use everyday and &lt;b&gt;its&lt;/b&gt; performance per watt. Let's call that &lt;b&gt;productivity per watt&lt;/b&gt;. Lower performing sofware might exhibit different issues:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Consuming too much CPU&lt;br /&gt;&lt;li&gt;Hitting the disk too often. IDEs are notoriously culprits here when a normal clean build deletes and recreates hundreds of files on disk. Even some feature like &lt;i&gt;compile on save&lt;/i&gt; doesn't save much since developers save often and all this disk writing might actually stop the disk from going to sleep (and thus consume less power).&lt;br /&gt;&lt;li&gt;Hitting the network too often or too much. No point in checking for software updates when the user is on battery. No point downloading that 200MB "update" file -- updates should consist of binary diffs and be as small as possible (Google is &lt;a href='http://blog.chromium.org/2009/07/smaller-is-faster-and-safer-too.html'&gt;looking into this&lt;/a&gt; as it becomes very important the more users you have). Also, laptops generally use WiFi is they are not plugged in and (I think) that consumes even more power than ethernet.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;These are all optimization issues but the main culprit is &lt;i&gt;not scaling down when on battery&lt;/i&gt;: this includes being smart about redundant tasks like re-indexing the Maven repository or checking of non-essential upgrades that could be deferred to a time when you're not on laptop battery .&lt;br /&gt;&lt;br /&gt;What we seem to be missing is a new metric to evaluate applications: productivity per watt and teaching users to pick applications the same way they pick an A+ energy rating fridge.&lt;br /&gt;&lt;br /&gt;Looking forward to see which IDE uses less power to refactor a class or just to stay idle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-1764430848978376032?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/1764430848978376032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=1764430848978376032&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1764430848978376032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1764430848978376032'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/09/green-software.html' title='Green software'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-4423225118859550710</id><published>2009-09-22T19:20:00.001+03:00</published><updated>2009-09-22T19:21:43.906+03:00</updated><title type='text'>Just released Romanian translation of the NetBeans Platform</title><content type='html'>Just released Romanian translation of the NetBeans Platform. See more on &lt;a href='http://www.josekibold.ro/romanian-netbeans'&gt;my company's website&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-4423225118859550710?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/4423225118859550710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=4423225118859550710&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4423225118859550710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4423225118859550710'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/09/just-released-romanian-translation-of.html' title='Just released Romanian translation of the NetBeans Platform'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-971306347384154240</id><published>2009-08-20T14:46:00.002+03:00</published><updated>2009-08-20T14:57:41.431+03:00</updated><title type='text'>Article on dzone</title><content type='html'>See &lt;a href="http://netbeans.dzone.com/articles/debugging-netbeans-with-visualvm-and-btrace"&gt;my article on dzone&lt;/a&gt; about VisualVM and btrace.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-971306347384154240?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/971306347384154240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=971306347384154240&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/971306347384154240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/971306347384154240'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/08/article-on-dzone.html' title='Article on dzone'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-4224614240228270383</id><published>2009-08-17T15:09:00.001+03:00</published><updated>2009-08-17T15:12:44.483+03:00</updated><title type='text'>Busy bee</title><content type='html'>&lt;img src="http://lh6.ggpht.com/_7kuGo66xDMI/SolH1Xov_UI/AAAAAAAAPrs/lhf1h4dxg1o/s800/lots-of-messages.png"/&gt;&lt;br /&gt;&lt;br /&gt;(Mail.app makes one smile once in a while..)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-4224614240228270383?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/4224614240228270383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=4224614240228270383&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4224614240228270383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4224614240228270383'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/08/busy-bee.html' title='Busy bee'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_7kuGo66xDMI/SolH1Xov_UI/AAAAAAAAPrs/lhf1h4dxg1o/s72-c/lots-of-messages.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-6748649910150814672</id><published>2009-07-15T01:59:00.002+03:00</published><updated>2009-07-15T02:24:34.997+03:00</updated><title type='text'>The most complex simple GUI: VirtualBox snapshot handling</title><content type='html'>It's amazing how the guys doing Virtual Box (purchased by Sun and now by Oracle) have managed to screw up so badly their snapshot mechanism and specifically their GUI allowing the user to handle it:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;1. Let's start with the easy pickings: they support linear snapshots only. What did they select to display this? Obviously not a list, but a tree !&lt;br /&gt;&lt;br /&gt;2. Their snapshot documentation is less than 1 page in the PDF help file. Out of this, half is spent explaining how to "take" a snapshot which is probably the easiest thing they support. A quarter of the page includes a scary note about possible data loss which references some VBoxManage interface which is some script that has nothing to do with the GUI.&lt;br /&gt;&lt;br /&gt;Also, their documentation doesn't have a single screenshot or at least pictures of the buttons users are supposed to press.&lt;br /&gt;&lt;br /&gt;In the remaining quarter of the documentation they briefly mention revert and discard snapshot.&lt;br /&gt;&lt;br /&gt;At no point do they bother explaining how their mechanism works, you kinda have to read between the lines what the philosophy is.&lt;br /&gt;&lt;br /&gt;3. When you press "Discard snapshot" it actually &lt;span style="font-weight: bold;"&gt;merges&lt;/span&gt; changes. So you're not losing data actually, you're just losing the little timestamp that the snapshot gave you. They couldn't have picked a more confusing wording and it's not what you would expect.&lt;br /&gt;&lt;br /&gt;4. Next to the notion of "snapshot" they have a separate notion of "current state" or "state" which is somehow related but kinda different.  I'm not entirely certain if "state" is something like a placeholder that I can fill with different snapshots or just the tip of the snapshots list. Their wording makes it sound one or the other.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Also, not only did they pick such a wrong wording and show such lack in clearly explaining what their application is supposed to do, but they don't even seem to find this important. A bug report on their website complaining &lt;a href="http://www.virtualbox.org/ticket/1040"&gt;about this very thing&lt;/a&gt; is marked as &lt;span style="font-weight: bold;"&gt;minor&lt;/span&gt; !&lt;br /&gt;&lt;br /&gt;I guess this is a sign of some geek mentality. They assume that people must train using the uber-software and actually read and memorize the 250 page PDF (probably at some point it all makes sense). The sad thing is that the GUI is really simple and this minimalism should allow them to focus on the details, but &lt;span style="font-weight: bold;"&gt;a third of it is broken&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Obviously I'm not talking about their "Settings" GUI where you configure the machine, that's very complex.&lt;br /&gt;&lt;br /&gt;I'm talking about the normal GUI the users gets to see &lt;span style="font-weight: bold;"&gt;every other time after the creation&lt;/span&gt; of the virtual machine which has 3 tabs: "Details", "Snapshots" and "Description". The only one the user will interact for the rest of the virtual machine's lifetime is "Snapshots"  and this is the one they thought it's minor. Go figure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-6748649910150814672?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/6748649910150814672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=6748649910150814672&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/6748649910150814672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/6748649910150814672'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/07/most-complex-simple-gui-virtualbox.html' title='The most complex simple GUI: VirtualBox snapshot handling'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-1641131043355710670</id><published>2009-03-03T12:07:00.003+02:00</published><updated>2009-03-03T12:11:48.910+02:00</updated><title type='text'>Matrix thoughts</title><content type='html'>AI lemma (anti-Matrix): &lt;blockquote&gt;We do not live in a simulation of a similar universe as a simulation will consume more energy than a real existence.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;A &lt;span style="font-weight: bold;"&gt;corollary&lt;/span&gt; would be: &lt;blockquote&gt;The universe simulating our existence might be so different that the above lemma doesn't apply.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-1641131043355710670?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/1641131043355710670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=1641131043355710670&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1641131043355710670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1641131043355710670'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/03/matrix-thoughts.html' title='Matrix thoughts'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-1707191933201805700</id><published>2009-02-02T11:43:00.003+02:00</published><updated>2009-02-02T11:53:08.930+02:00</updated><title type='text'>iPhone Location Manager taking forever</title><content type='html'>On the iPhone, the Location manager that provides the GPS location is a nice API to use.&lt;br /&gt;&lt;br /&gt;It does have some issues though: &lt;span style="font-weight: bold;"&gt;CLLocationManger doesn't work if it's called from another thread&lt;/span&gt; !&lt;br /&gt;&lt;br /&gt;I first noticed something was really funny when my delegate wasn't being called at all.&lt;br /&gt;&lt;br /&gt;Neither &lt;span style="font-family:courier new;"&gt;– locationManager:didUpdateToLocation:fromLocation:&lt;/span&gt;  nor  &lt;span style="font-family:courier new;"&gt;– locationManager:didFailWithError:&lt;/span&gt;  was called and my application was just waiting there forever for some GPS information.&lt;br /&gt;&lt;br /&gt;My first thought was that it was some issue with my memory management as I wasn't holding a reference to the location manager in any class, just in the method where it was created. But still, it didn't work.&lt;br /&gt;&lt;br /&gt;Then, I though it was a problem about the threading model being used (I waited for the GPS location in another thread in order not to block the GUI). Sure enough, that seemed to be the problem, and at least &lt;a href="http://discussions.apple.com/thread.jspa?messageID=8377874"&gt;another person&lt;/a&gt; complained about it. Not sure it is a matter of threading or a matter of memory pool being used.&lt;br /&gt;&lt;br /&gt;But more to the point, &lt;span style="font-weight: bold;"&gt;always create your CLLocationManager instance in the main thread&lt;/span&gt;, and not in another thread. Having a singleton method there which is called from the main thread somewhere assures you that the location manager is created in the proper thread/pool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-1707191933201805700?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/1707191933201805700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=1707191933201805700&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1707191933201805700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1707191933201805700'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/02/iphone-location-manager-taking-forever.html' title='iPhone Location Manager taking forever'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-2235027877386685195</id><published>2009-01-30T00:09:00.002+02:00</published><updated>2009-01-30T00:23:11.922+02:00</updated><title type='text'>Developer surprise on OSX</title><content type='html'>I had a strange bug in the OSX &lt;a href="http://www.apple.com/support/leopard/addressbook/"&gt;Address Book&lt;/a&gt; application: I had a rule that included all the address cards not present in any other rule.&lt;br /&gt;&lt;br /&gt;This worked initially, but after an update, Address Book got confused and entered into an infinite cycle (it was probably trying to ignore the cards in the rule itself and then went on to resolve that recursively).&lt;br /&gt;&lt;br /&gt;Anyhow, the good thing was the application crashed only if I scrolled on top of that particular rule. And since I had quite a lot, I was safe to &lt;span style="font-weight: bold;"&gt;open&lt;/span&gt; the application at least.&lt;br /&gt;&lt;br /&gt;But, still, having a semi-buggy application isn't fun to use. So I went and looked at the Address Book file format which seemed to be some &lt;a href="http://www.sqlite.org/"&gt;sqlite3&lt;/a&gt; database, but I couldn't fix the problem from there.&lt;br /&gt;&lt;br /&gt;To my surprise Apple has a &lt;a href="http://developer.apple.com/documentation/UserExperience/Conceptual/AddressBook/AddressBook.html"&gt;public API for the Address Book&lt;/a&gt; !&lt;br /&gt;&lt;br /&gt;So I wrote these short lines of code:&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family:courier new;"&gt;    ABAddressBook *AB = [ABAddressBook sharedAddressBook];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    NSArray * groups = [AB groups];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    for(int i=0;i&lt;[groups count];i++){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        ABGroup * group = [groups objectAtIndex:i];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        NSString * name = [group valueForProperty: kABGroupNameProperty];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        if([@"BadBadRule" compare:name]==NSOrderedSame){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            [AB removeRecord:group];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            [AB save];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;and that was it ! No more Address Book crashes ! Turns out OSX is really nice to tweak if you are  willing to code a bit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-2235027877386685195?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/2235027877386685195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=2235027877386685195&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2235027877386685195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2235027877386685195'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/01/developer-surprise-on-osx.html' title='Developer surprise on OSX'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-5181478044255415852</id><published>2009-01-14T11:02:00.011+02:00</published><updated>2009-01-14T23:27:46.239+02:00</updated><title type='text'>My Slicehost / VPS analysis</title><content type='html'>&lt;b&gt;Fist time &lt;abbr title="Virtual Private Server"&gt;VPS&lt;/abbr&gt; user&lt;/b&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;br /&gt;Starting a few months back, I have a &lt;abbr title="Virtual Private Server"&gt;VPS&lt;/abbr&gt; from &lt;a href="http://www.slicehost.com/"&gt;Slicehost&lt;/a&gt;. It's the cheapes one they've got, with only 256MB RAM.&lt;br /&gt;&lt;br /&gt;I never worked on a VPS, I only had either dedicated physical servers in the company datacenter (at the previous job) or CPanel-based hosted accounts (for some other clients).&lt;br /&gt;&lt;br /&gt;All in all, a VPS is just as one might expect: almost like a normal server only &lt;b&gt;slower&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;And the slowness is starting to bug me a bit, specifically the problem that I don't know &lt;i&gt;how&lt;/i&gt; slow is it supposed to be.&lt;br /&gt;&lt;br /&gt;The fixed technical details from Slicehost is that you'll have 256MB RAM, 10GB or disk storage and 100GB bandwidth.&lt;br /&gt;&lt;br /&gt;Now there are 2 issues here. One which seems quite obvious and another one I'll introduce later.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CPU&lt;/b&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;br /&gt;OK, the 1st problem is that you don't know how much CPU cycles you are going to get. Being a VPS means it runs on some beefy server (Slicehost says it's a Quad core server with 16GB of RAM).&lt;br /&gt;&lt;br /&gt;According to &lt;a href="http://www.slicehost.com/questions/"&gt;Slicehost's FAQ&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Each Slice is assigned a fixed weight based on the memory size (256, 512 and 1024 megabytes). So a 1024 has 4x the cycles as a 256 under load. However, if there are free cycles on a machine, all Slices can consume CPU time.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This basically means that under load, each slices gets CPU cycles depending on the RAM it has (ie. price you pay). A 256MB slice gets 1 cycle, the 512MB slice gets 2 cycles, 1GB slice gets 4 cycles and so on.&lt;br /&gt;&lt;br /&gt;The problem here is of course, that one is not certain that they only have on the server a maximum amount of slices, but Slicehost is clearly overselling as &lt;i&gt;top&lt;/i&gt; usually displays a "Steal time" of around &lt;b&gt;20%&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;So, assuming a machine is filled 100% with slices and there is no multiplexing, it means that a 256MB slice gets &lt;b&gt;6.25% of a single CPU&lt;/b&gt; under load.&lt;br /&gt;&lt;br /&gt;6.25 isn't much at all, but considering that the machine isn't always under load, the slice seems to get a decent amount of CPU nonetheless.&lt;br /&gt;&lt;br /&gt;If we consider the overselling issue and that &lt;b&gt;20%&lt;/b&gt; is stolen by Xen to give to other VPS, we get to an even &lt;b&gt;5 %&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Now, this might not be as bad as it sounds CPU-wise as I've noticed Xen stealing time when my CPU-share is basically idle anyhow so maybe it doesn't affect my overall performance.&lt;br /&gt;&lt;br /&gt;For example: ./pi_css5 1048576 takes about &lt;b&gt;10 seconds&lt;/b&gt; which is more than decent.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;abbrev title="Input / Output"&gt;IO&lt;/abbrev&gt;&lt;/b&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;br /&gt;The bigger problem with VPS seems the be the fact that hard drives aren't nearly as fast as RAM. And when you have a lot of processes competing for the same disk, it's bound to be slow.&lt;br /&gt;&lt;br /&gt;What Slicehost doesn't mention is if the "fixed weight" sharing rule they use for CPU cycles applies to disk access too. &lt;b&gt;My impression is that it is.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;After trying to use my VPS as a build server I've noticed it grind to a halt.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;top&lt;/i&gt; shows something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 62.2%id, 20.9%wa,  0.0%hi,  0.0%si, 16.9%st&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;but the load average for a small build is something like&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;load average: 1.73, 2.06, 1.93&lt;br /&gt;&lt;/pre&gt;and it easily goes to 3, 4 and even 9! when I also try to do something else there.&lt;br /&gt;&lt;br /&gt;So, looking at the information above, we can note that 62.2%, the CPU is just idle, while the actualy "working" tasks, ie. 20.9% are &lt;b&gt;waiting for IO&lt;/b&gt;. The rest of 16.9% CPU time is stolen by Xen and given to other virtual machines, and I don't think it really matters given that the load is clearly &lt;b&gt;IO-bound&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;And here lies the problem: just how fast might Slicehosts' hard drives be ? And how many per slice ? Actually more like: &lt;b&gt;how many slices per drive&lt;/b&gt; ?&lt;br /&gt;&lt;br /&gt;From a simple test I made, a simple build that takes 30 seconds on my MacBook Pro (2.4Ghz/2GB ram/laptop hard drive-5400rpm) takes about 20 minutes on the slice. This means the VPS is &lt;b&gt;40 times slower&lt;/b&gt; when doing IO-bound tasks.&lt;br /&gt;&lt;br /&gt;Another &lt;i&gt;large&lt;/i&gt; build that takes around 40 minutes on my laptop took 28 hours on the server. Which respects the about 40 times slower rule.&lt;br /&gt;&lt;br /&gt;Now considering the above number and a 20% steal time, I'd expect to have a 20% overselling of slices on a physical machine. Meaning, at 16GB per machine, roughly &lt;b&gt;76 slices&lt;/b&gt; of 256MB on one machines. Taking into account the &lt;b&gt;1:40&lt;/b&gt; rule above for IO speed, this means that they have about &lt;b&gt;2 hard drives in a server&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusions&lt;/b&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;br /&gt;It's certainly liberating to have complete control over a server. CPanel solution just don't cut it when you need to run various applications on strange ports. Of course, the downsize is that you also have to do all the administration tasks, secure it, etc.&lt;br /&gt;&lt;br /&gt;The Slice host services are very decent price-wise, the "administrator" panel they have provides you with everything you need, even a &lt;b&gt;virtual terminal&lt;/b&gt; that goes to &lt;b&gt;tty1&lt;/b&gt; of the machine (very handy if for some reason SSH doesn't work for example).&lt;br /&gt;&lt;br /&gt;Even the smallest slice I'm using right now has enough space, RAM and bandwidth for small tasks. If you just use it sparingly during business hours, the "fixed weight" sharing rule gives you enough CPU / IO for most tasks.&lt;br /&gt;&lt;br /&gt;But for heavy usage, I think the solution is either to get a more expensive slice or start building your own machine.&lt;br /&gt;&lt;br /&gt;IO-bound tasks are almost impossible to run due to the 1:40 slowness noticed. This means that you need to get at least the 4GB slice to have it run decently. Of course, that's $250 compared to the $20 slice I have right now.&lt;br /&gt;&lt;br /&gt;CPU doesn't seem to be a problem, at least for my kind of usage. It seems responsive enough during normal load and mostly idle under heavy load (so idle that Xen gives my CPU cycles to other virtual machines). Initially I was expecting this to be a major problem while moving my build server there, but boy, was I wrong. IO-limitations don't even compare with the CPU limitations.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Getting 5% or more of a fast CPU doesn't even compare to getting 2.5% of an even slower resource like that hard drive if you are compiling.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Further experiments&lt;/b&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;During the time I was considering the CPU to be my future bottleneck, I was thinking which option would be better: 2 x 256MB slices or a bigger 512MB slice.&lt;br /&gt;&lt;br /&gt;According to their rules and offering, the two configurations are totally comparable. Even more, using their sharing rule, 2 x 256MB slices should get at least the same CPU cycles under load as the 512MB one. (Further emails from Slicehost's support led me to believe the rule might be oversimplified, but they didn't tell me in what way -- I think the weight of the smallest slices might be even smaller with the bigger slices getting even more of their share).&lt;br /&gt;&lt;br /&gt;So, if under load they get the same CPU cycles, it means that when the machine has CPU cycles to spare, I have 2 candidate slices to get those spares.&lt;br /&gt;&lt;br /&gt;So the question was: for a 5% price increase I would pay for 2 x 256 slices compared to 1 x 512 slice, will I get at least 5% more CPU cycles ?&lt;br /&gt;&lt;br /&gt;I'm still not certain with the data I've computed that it might happen. Also, the new question now would be: will I get at least 5% more IO operations ?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Non-agression&lt;/b&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;br /&gt;The above post isn't a rant against Slicehost. I think they are providing a decent service for their price. It is interesting though to see which kind of usage can one put on a VPS and which are better to be run on the server in the basement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;512MB update&lt;/b&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;br /&gt;Well, isn't this interesting. A vertical upgrade to 512MB of RAM is another world entirely. Maybe the new VPS is on a less-loaded machine, but at first sight, it's looking way better: the previous 28 hours build (fresh) takes now only 40 minutes for a small update. I'll try a clean build later this week and see how fast it is.&lt;br /&gt;&lt;br /&gt;So it seems it wasn't only a problem of slow IO, it was also a &lt;b&gt;big&lt;/b&gt; problem of not enough RAM leading to swap file trashing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-5181478044255415852?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/5181478044255415852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=5181478044255415852&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5181478044255415852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5181478044255415852'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2009/01/my-slicehost-vps-analysis.html' title='My Slicehost / VPS analysis'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-6535772631590179400</id><published>2008-11-07T17:03:00.003+02:00</published><updated>2008-11-07T17:19:57.809+02:00</updated><title type='text'>I guess it has begun: the environment is at fault for everything</title><content type='html'>I'm always amazed at the amount of bullshit people are able to come up with, especially when explaining some corporate move.&lt;br /&gt;&lt;br /&gt;Take for example my main bank &lt;a href="http://www.brd.ro/"&gt;BRD - Groupe Société Générale&lt;/a&gt;. Yes, it's the same Groupe Société Générale which showed at the end of 2007 a € 4.9 billion fraud. But it's OK since the Romanian branch is &lt;b&gt;really&lt;/b&gt; profitable for them due to limited consumer education here and powerless consumer protection institutions.&lt;br /&gt;&lt;br /&gt;I just noticed a new message from them on the Internet Banking site: due to increased &lt;span style="font-weight: bold;"&gt;environmental &lt;/span&gt;awareness from the Bank, they are encouraging people to get alternative bank account statements via online banking or by post. Otherwise you are entitled to &lt;span style="font-weight: bold;"&gt;one&lt;/span&gt; printed account statement per month from their offices.&lt;br /&gt;&lt;br /&gt;The reason is, of course, &lt;span style="font-weight: bold;"&gt;to save the trees&lt;/span&gt; by printing less. Of course they are willing to print tons of the stuff if you are willing to pay -- which will go directly into their profit but that's another problem, no ?&lt;br /&gt;&lt;br /&gt;Also add here that they also increased the tax for &lt;span style="font-weight: bold;"&gt;having&lt;/span&gt; an account by 20% for individuals and 50% for companies. That probably also had some environmental reasoning that's escaping me.&lt;br /&gt;&lt;br /&gt;Anyhow, I'm looking forward to more price increases and consumer ripoffs that's going to be done in the name of the trees.&lt;br /&gt;&lt;br /&gt;Too bad us people can't buy our own &lt;a href="http://en.wikipedia.org/wiki/Carbon_credit"&gt;carbon credit&lt;/a&gt; so that companies won't be able to offset that extra cost in the name of the environment on us. But you know what ? I'm pretty sure some one will introduce carbon credit for the masses. After all, why not ? It's a nice way to bring some more money to the state budget.&lt;br /&gt;&lt;br /&gt;And only then that old saying will come true: they'll tax you for the air you breath !&lt;br /&gt;&lt;br /&gt;Well, technically for the air you exhale but we're close enough.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-6535772631590179400?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/6535772631590179400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=6535772631590179400&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/6535772631590179400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/6535772631590179400'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2008/11/i-guess-it-has-begun-environment-is-at.html' title='I guess it has begun: the environment is at fault for everything'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-4344340832344410429</id><published>2008-08-07T09:56:00.003+03:00</published><updated>2008-08-07T10:10:35.516+03:00</updated><title type='text'>No new mail! Want to read updates from your favorite sites?</title><content type='html'>For a while now I've started using GMail's "Archive" button aggressively on my inbox. The end result has been that from thousands of emails, I now have 0 (zero) ! Everything is archived.&lt;br /&gt;&lt;br /&gt;When I get a new email, it sits in the Inbox until it is resolved (ie. I reply or read it). Then it's instantly archived. &lt;span style="font-weight:bold;"&gt;Out of sight, out of mind.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've found that this technique greatly reduces the information overload coming from emails. With a full inbox that was also showing snippets of the message (ie. small previews), every time I looked at my inbox I had some information to process. Like: &lt;span style="font-style:italic;"&gt;oh, look, that one is starred, I wonder when they'll reply&lt;/span&gt; or &lt;span style="font-style:italic;"&gt; hm, it's been quite some time since I've got an email from X as the name is on the bottom on the inbox&lt;/span&gt;, etc. etc.&lt;br /&gt;&lt;br /&gt;Basically a full inbox sends you some information even when no unread emails exist. It's also quite a bad way to "search" for email. I used to manually look for some subject and/or sender in order to hit reply. Now I just use GMail's search.&lt;br /&gt;&lt;br /&gt;I remember about some TED video where the host said something like &lt;span style="font-style:italic;"&gt;our brain likes new information, we have an addiction for new stuff&lt;/span&gt;. Which is exactly what email feeds. It feeds our addiction for new things, even by just having a full list of previously received emails. I also assume that's why sites like Slashdot, Digg and Reddit are quite popular: they feed us new, easy to process, information. Imagine brain junk-food if you will or the Internet-equivalent of &lt;span style="font-style:italic;"&gt;too much TV will rot your brain&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Related to this need to always get new stuff, I find it interesting the way Google handles this. When your inbox is empty, you get this message: &lt;span style="font-weight:bold;"&gt;No new mail! Want to read updates from your favorite sites? Try Google Reader&lt;/span&gt; (with a link to google reader).&lt;br /&gt;&lt;br /&gt;So what Google is doing here is proving us what we have become used to. Not enough interruptions, not enough new &lt;span style="font-style:italic;"&gt;stuff&lt;/span&gt; from email? Why gee, why don't you try this other source of new things: Google Reader. Come on, get a quick fix !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-4344340832344410429?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/4344340832344410429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=4344340832344410429&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4344340832344410429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4344340832344410429'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2008/08/no-new-mail-want-to-read-updates-from.html' title='No new mail! Want to read updates from your favorite sites?'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-2704026287932348413</id><published>2008-07-17T16:57:00.002+03:00</published><updated>2008-07-17T17:09:09.635+03:00</updated><title type='text'>Oh, my, how the NetBeans community has grown !</title><content type='html'>For quite some time now I've noticed an interesting trend: I don't have the time to read the email in the NetBeans mailing lists. A lot of emails where I could have given some help just fly by me as they are just too many.&lt;br /&gt;&lt;br /&gt;Just now openide@ has 2000 unread messages, the oldest unread being from 26 November &lt;b&gt;2006&lt;/b&gt; about the Manifest File Syntax tutorial (boy, a lot have changed in the Editor APIs). nbdev@ also has about 1700 unread but that's ok as I rarely post / answer there.&lt;br /&gt;&lt;br /&gt;Now, this trend seems to be caused by two reasons: me being busy (and lately I'm working &lt;b&gt;full-time&lt;/b&gt; on getting the Editor APIs usable in a standalone way) and the community growing.&lt;br /&gt;&lt;br /&gt;I do remember the time when I had zero! unread messages. Now I hardly notice when another hundred adds-up.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;So, how do you guys handle the workload ?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Of course, the solution might be to be a little more methodical about it and dedicate some exact time (like 30 minutes / day) but it just doesn't seem to work with me. Must be the 100 Editor modules I have open right now in the IDE -- sigh...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-2704026287932348413?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/2704026287932348413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=2704026287932348413&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2704026287932348413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2704026287932348413'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2008/07/oh-my-how-netbeans-community-has-grown.html' title='Oh, my, how the NetBeans community has grown !'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-4725532704327117743</id><published>2008-07-06T02:04:00.002+03:00</published><updated>2008-07-06T02:27:52.204+03:00</updated><title type='text'>I'm not sure I like Web 2.0</title><content type='html'>Remember when an URL linked to something static on the net ?&lt;br /&gt;&lt;br /&gt;Sure, an URL could be actually a script behind that allows for a more dynamic page.&lt;br /&gt;&lt;br /&gt;But when the script is used to &lt;span style="font-style:italic;"&gt;discriminate&lt;/span&gt; users for a supposedly free site like YouTube, I'm getting kinda annoyed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;This video is not available in your country&lt;/span&gt; ?&lt;br /&gt;&lt;br /&gt;Un-believable.&lt;br /&gt;&lt;br /&gt;So Web 2.0, besides all the AJAX thingy, also brings a wide-spread encouragement to use a proxy to hide your identity ? Is this a social construct to teach us about security and privacy ? Or just a degeneration of what the Internet was supposed to be ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-4725532704327117743?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/4725532704327117743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=4725532704327117743&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4725532704327117743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4725532704327117743'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2008/07/im-not-sure-i-like-web-20.html' title='I&apos;m not sure I like Web 2.0'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-116708173205912087</id><published>2008-05-22T16:11:00.003+03:00</published><updated>2008-05-22T16:17:30.502+03:00</updated><title type='text'>I forgot what Alt + F4 does</title><content type='html'>I saw today an avatar on a forum which said &lt;span style="font-weight:bold;"&gt;"To view my display picture hold down Alt + F4".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, it was clearly some funny-man trick but then it occurred to me that I'm not certain &lt;span style="font-weight:bold;"&gt;what Alt+F4 does&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I've been using OSX for so long I had forgotten about Alt+F4 on Windows. I guess this is enough Microsoft-independence.&lt;br /&gt;&lt;br /&gt;I never wanted to program on Windows or using anything Microsoft specific. This lead me to Java initially then Java on Linux and soon to Java on OSX...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-116708173205912087?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/116708173205912087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=116708173205912087&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/116708173205912087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/116708173205912087'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2008/05/i-forgot-what-alt-f4-does.html' title='I forgot what Alt + F4 does'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-4329031976959989555</id><published>2008-04-21T01:58:00.007+03:00</published><updated>2008-04-21T03:15:10.683+03:00</updated><title type='text'>Should the language shape the mind ?</title><content type='html'>I've read an interesting blurb from Lera Boroditsky (Cognitive                         Psychology &amp;amp; Cognitive Neuroscience, Stanford University) in &lt;a href='http://edge.org/q2008/q08_16.html#boroditsky'&gt;Do our languages shape the nuts and bolts of perception, the very way we see the world?&lt;/a&gt;, where the basic answer is: &lt;i&gt;yes&lt;/i&gt;, languages not only influence our way to interpret information, but also they way we &lt;i&gt;perceive&lt;/i&gt; it.&lt;br /&gt;&lt;br /&gt;There is an often quoted phrase in the programmers circles: &lt;blockquote&gt;When the only tool you have is a hammer, everything looks like a nail&lt;/blockquote&gt; ,which basically states the same thing: the languages we programmers know and use influence the way we perceive reality.&lt;br /&gt;&lt;br /&gt;That's a dangerous thing, because languages (&lt;i&gt;programming&lt;/i&gt; languages) were only supposed to help up &lt;i&gt;interpret&lt;/i&gt; information. Skewing our perception means we obviously don't even notice the wrong path we've taken.&lt;br /&gt;&lt;br /&gt;Being multi-cultural -- that is, knowing multiple languages -- helps, as these may overlap and give you various perspectives on the information and thus make a better representation of the information. The end solution is also most likely to be better.&lt;br /&gt;&lt;br /&gt;But I often wondered: shouldn't we at some point just stop trying to force our thoughts into some language and just start expression into another language altogether ? Into &lt;i&gt;our&lt;/i&gt; language ?&lt;br /&gt;&lt;br /&gt;Sure, learning a language might bring some "discipline" into minds; using it might help up programmers get along with each-other. But in the end a language should just give a programmer some new perspectives. The output should still be in &lt;i&gt;our&lt;/i&gt; language.&lt;br /&gt;&lt;br /&gt;I assume this is the reason most people think everybody else's code is shit: their internal interpretation doesn't map with the mapping inside the other programmer's brain. A younger you produced a lot of bad code by your &lt;i&gt;current&lt;/i&gt; mapping.&lt;br /&gt;&lt;br /&gt;Which basically means we are utterly unable to find a way to fully express our thoughts in a way other people would understand, agree and &lt;i&gt;like&lt;/i&gt;. And by &lt;i&gt;like&lt;/i&gt; I mean having a close mapping with the other (or just bring something totally fresh).&lt;br /&gt;&lt;br /&gt;And this limitation doesn't just apply in relation with others but to ourselves.&lt;br /&gt;&lt;br /&gt;Then, how should we function ? Each new problems brings into us a current solution with our present interpretation. Should we express this into something like a Domain Specific Language (DSL) ? Should each new problem be represented into a new Problem Specific Language ? (And sure, maybe PSLs at a given time might have something in common as they also represent us).&lt;br /&gt;&lt;br /&gt;So what means that some code looks like shit then ? It means the chosen PSL is incomplete, somehow flawed or just not elegant enough compared with our current PSL. Rarely does code look like shit if we like the PSL and the solution is somewhat broken -- then it just has bugs or is incomplete, but we fix it while following the given PSL.&lt;br /&gt;&lt;br /&gt;Won't this make cooperation really hard ? Well, not really as cooperation might change the PSL for the better. It will also force programmers to slow down a bit and try to first understand the PSL before understanding the solution. We do this anyway as even while using a common language there is always a meta-layer programmer-specific; only that this layer is sometimes obfuscated by the language used instead of being very prominent like in a PSL.&lt;br /&gt;&lt;br /&gt;Maybe general purpose programming languages should stop existing and be replaced only by programming paradigms and concepts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-4329031976959989555?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/4329031976959989555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=4329031976959989555&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4329031976959989555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4329031976959989555'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2008/04/should-language-shape-mind.html' title='Should the language shape the mind ?'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-630586430660974121</id><published>2008-01-22T15:12:00.000+02:00</published><updated>2008-01-22T15:46:15.250+02:00</updated><title type='text'>NetBeans Platform autoupdate via BitTorrent</title><content type='html'>Something I'm pursing nowadays is having my platform applications as decentralized as possible.&lt;br /&gt;&lt;br /&gt;And the fist pet peewee I had is that fact that the Update Centers are such, big, centralized, monolithic blocks.&lt;br /&gt;&lt;br /&gt;I always assumed that I would need to hack the AutoUpdate module from the NetBeans Platform quite hard in order to get what I wanted all along: &lt;b&gt;BitTorrent downloads for new or updated modules&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;So, the first thing we have to notice is that the AutoUpdate Catalog (see &lt;a href="http://www.netbeans.org/dtds/autoupdate-catalog-2_3.dtd"&gt;DTD&lt;/a&gt;) provides for each module in the Update Center a location called &lt;span style="font-weight: bold;"&gt;distribution&lt;/span&gt;. The distribution may be a relative path to the catalog location. That is usually something like ./com-example-mymodule.nbm or it can be a totally new URL.&lt;br /&gt;&lt;br /&gt;Now we have a first step towards splitting traffic: we can put the actual NBM file on another URL altogether. Or, if we have the AutoUpdate Catalog location sit behind a servlet we could even try a bit of balancing  and return a different distribution link depending on how loaded are the servers. That's a plus...&lt;br /&gt;&lt;br /&gt;Ok, that's something but it isn't BitTorrent, you still download the whole file from a single place.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;It's alive !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But what the Platform does offer is the possibility to register in the Lookup your own &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/net/URLStreamHandlerFactory.html"&gt;URLStreamHandlerFactory&lt;/a&gt; . So, I can register a new handler for the &lt;span style="font-weight: bold;"&gt;torent://&lt;/span&gt; protocol and the AutoUpdate module will just use my stream handler.&lt;br /&gt;&lt;br /&gt;And thus, a few hours later I have a working AutoUpdate infrastructure via BitTorrent. My StramHandler downloads behind the scenes with BitTorrent using Snark and provides a nice InputStream to the AutoUpdate module. It's still not polished but already useable. Install the module from this update center: &lt;span style="font-weight: bold;"&gt;http://emilianbold.ro/modules-updates.xml&lt;/span&gt; or just &lt;a href="http://emilianbold.ro/modules/ro-emilianbold-torrentupdater.nbm"&gt;grab the NBM&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Something else: the destination of the module is no longer pointing now to the NBM, but to a torrent file actually which has the NBM file.&lt;br /&gt;&lt;br /&gt;The steps are: place the torrent file on http://example.com/module1.torrent.nbm, edit the catalog to have destination="torrent://example.com/module1.torrent.nbm" and you're good to go. Behind the scenes I'll actually download the http file and then download the torrent.&lt;br /&gt;&lt;pre&gt;&amp;lt;!DOCTYPE module_updates PUBLIC "-//NetBeans//DTD Autoupdate Catalog 2.3//EN"&lt;br /&gt;"http://www.netbeans.org/dtds/autoupdate-catalog-2_3.dtd"&amp;gt;&lt;br /&gt;&amp;lt;module_updates timestamp="35/26/18/21/01/2008"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;module codenamebase="org.yourorghere.emptymodule"&lt;br /&gt;&lt;b&gt;distribution="torrent://&lt;/b&gt;example.com:6881/cc032d0c003b12568c91a0339f88301fa6ca67f5.torrent.nbm"  &lt;br /&gt;... &amp;gt;&lt;br /&gt;...&lt;span style="font-family: Georgia,serif;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;A small remark: note the .nbm extension. It's something the AutoUpdate module needs otherwise it won't be able to install the file as NBM (could be a bug, I'll report it at some point).&lt;br /&gt;&lt;br /&gt;The module still needs some extensive testing and different BitTorrent libraries (I'm using &lt;a href="http://www.klomp.org/snark/"&gt;Snark&lt;/a&gt;, but I would like to have the Azureus core as a different provider in the Lookup maybe) but it does show it is possible.&lt;br /&gt;&lt;br /&gt;Using the same technique one could write multiple backend/"protocols" for the AutoUpdate. Drop me a message if you want to know more or want to help me (source code will be online soon).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-630586430660974121?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/630586430660974121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=630586430660974121&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/630586430660974121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/630586430660974121'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2008/01/netbeans-platform-autoupdate-via.html' title='NetBeans Platform autoupdate via BitTorrent'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-16843312298209295</id><published>2007-12-20T17:24:00.000+02:00</published><updated>2007-12-20T22:31:35.032+02:00</updated><title type='text'>The opensource bureaucracy</title><content type='html'>I always thought that only post-communist countries like mine can be bureaucratic and not capitalist, civilized countries or the meritocratic internet.&lt;br /&gt;&lt;br /&gt;But one may be shocked to notice the kind of bureaucracy open source brings. In a normal "distributed" project where you don't have a sugar-daddy to pay for all the project hosting and other expenses, you need to get some free hosting.&lt;br /&gt;&lt;br /&gt;This is the first place where you need to get an approval for your hosting, depending on what you do (you can't expect to have any project approved) or what license you use (you get the free hosting if you give your work under &lt;i&gt;their&lt;/i&gt; preferred terms).&lt;br /&gt;&lt;br /&gt;And the more "free" stuff you need (like build servers, wikis, email lists) the more you have to wait, accept rules and abide by them. But generally, wait and read a lot of strange disclaimers and terms and conditions.&lt;br /&gt;&lt;br /&gt;Don't get me started when you get to the licensing part. Do you want your code into some high-profile codebase ? You need to sign the agreement, which needs to be scanned and emailed or even better &lt;i&gt;faxed&lt;/i&gt;. Then you need to wait for the acknowledgment that the fax did arrive and someone is going to give you commit access, in &lt;i&gt;a few days&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Basically the more people you involve the more it takes to do anything, especially since you depend on their goodwill. The more "steps" you have to follow, the more agreements you have to approve of, the more &lt;i&gt;time you have to wait&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;I'm waiting for a month now for some approval on a high-rated open-source nexus. I'm not being denied, I'm just waiting for someone to finally get to my item in the todo list.&lt;br /&gt;&lt;br /&gt;It almost makes renting my own server seem like a good expense.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-16843312298209295?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/16843312298209295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=16843312298209295&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/16843312298209295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/16843312298209295'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/12/opensource-bureaucracy.html' title='The opensource bureaucracy'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-9040386663919241559</id><published>2007-12-05T14:28:00.000+02:00</published><updated>2007-12-19T17:00:09.469+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>Not another bubble</title><content type='html'>Funny stuff:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="373"&gt;&lt;param name="movie" value="http://www.youtube.com/v/I6IQ_FOCE6I&amp;rel=1&amp;border=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/I6IQ_FOCE6I&amp;rel=1&amp;border=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="373"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-9040386663919241559?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/9040386663919241559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=9040386663919241559&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/9040386663919241559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/9040386663919241559'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/12/not-another-bubble.html' title='Not another bubble'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-5960472516299396670</id><published>2007-11-15T18:20:00.000+02:00</published><updated>2007-11-15T18:37:48.049+02:00</updated><title type='text'>I really like Java's tooling</title><content type='html'>There, I've said it.&lt;br /&gt;&lt;br /&gt;Really, Java has &lt;b&gt;great&lt;/b&gt; developer tools.&lt;br /&gt;&lt;br /&gt;Long ago I liked to experiment with a lot of different programming languages (I own &lt;a href='http://lisp.ro/'&gt;lisp.ro&lt;/a&gt;). Many languages got things right from the beginning while Java with the C++ inheritance is really, really verbose. Nowadays I mostly play with Python, &lt;a href='http://widgets.yahoo.com/'&gt;Javascript&lt;/a&gt; (and studying &lt;a href='http://www.pragprog.com/titles/jaerlang'&gt;Erlang&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;But what Java lacks in succinctness compensates in &lt;b&gt;tools&lt;/b&gt;. Big, juicy, gooey tools.&lt;br /&gt;&lt;br /&gt;First, a bow to the JVM. It's such a nice feeling to develop on OSX and only test &lt;i&gt;rarely&lt;/i&gt; on Windows and have everything work !&lt;br /&gt;&lt;br /&gt;Second, I really like my &lt;a href='http://www.netbeans.org'&gt;NetBeans IDE&lt;/a&gt; with my debugger and trusty profiler. Problem with the EJB: &lt;b&gt;bam!&lt;/b&gt; add &lt;i&gt;--debug&lt;/i&gt; to Glassfish and connect from the IDE. Possible performance problems? &lt;i&gt;kpow!&lt;/i&gt; attach the &lt;a href='http://www.netbeans.org/products/profiler/'&gt;profiler&lt;/a&gt; to the application and see what's the problem.&lt;br /&gt;&lt;br /&gt;Wanna see the health of your code: put a whole bunch of reports in maven and build your site (&lt;a href='http://mojo.codehaus.org/findbugs-maven-plugin/'&gt;findbugs&lt;/a&gt;, &lt;a href='http://maven.apache.org/plugins/maven-pmd-plugin/'&gt;pmd&lt;/a&gt;, &lt;a href='http://mojo.codehaus.org/taglist-maven-plugin/'&gt;taglist&lt;/a&gt;, &lt;a href='http://maven.apache.org/plugins/maven-checkstyle-plugin/'&gt;checkstyle&lt;/a&gt;, all good stuff).&lt;br /&gt;&lt;br /&gt;And if you feel in a coding mood, why don't you add a &lt;a href='http://java.sun.com/j2se/1.5.0/docs/guide/jmx/tutorial/tutorialTOC.html'&gt;MBean&lt;/a&gt; to get quick info from &lt;i&gt;jconsole&lt;/i&gt;, even remotely? Or even better, make a custom JMX client using &lt;a href='http://www.jfree.org/jfreechart/'&gt;JFreeChart&lt;/a&gt; to get a nice display of the health of the application.&lt;br /&gt;&lt;br /&gt;It just feels like software &lt;i&gt;engineering&lt;/i&gt;. And it's nice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-5960472516299396670?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/5960472516299396670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=5960472516299396670&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5960472516299396670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/5960472516299396670'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/11/i-really-like-javas-tooling.html' title='I really like Java&apos;s tooling'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-9080848769772926096</id><published>2007-10-30T00:09:00.000+02:00</published><updated>2007-10-30T00:22:01.883+02:00</updated><title type='text'>Java 6 meet Linux on MacBook Pro</title><content type='html'>It seems there's no Java 6 in the new OSX Leopard from Apple.&lt;br /&gt;&lt;br /&gt;I mean, it's not like it's been almost 11 months since SUN released Java 6 on Linux, Solaris and Windows. And I bet it's more than an year since Apple started getting code for Java 6 from SUN in order to customize it in due time.&lt;br /&gt;&lt;br /&gt;But I guess the iPhone and transparent menu is far too important to actually put some developers work on Java.&lt;br /&gt;&lt;br /&gt;It's bad enough that they are supposed to force down on my throat a new OS release for a new JDK version -- I just want Java 6 on Tiger thank you very much. But now, they are delaying even that !&lt;br /&gt;&lt;br /&gt;So, I'm thinking that in the future I'll probably go back to Linux and stay there. I thought proprietary Microsoft software is bad; well, I'm starting to believe maybe proprietary Apple software is just as bad (only prettier).&lt;br /&gt;&lt;br /&gt;Hence, the first step is to get Linux working and see the hardware support. Because if it's not good enough I might just go for a Thinkpad.&lt;br /&gt;&lt;br /&gt;What about that Apple ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-9080848769772926096?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/9080848769772926096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=9080848769772926096&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/9080848769772926096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/9080848769772926096'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/10/java-6-meet-linux-on-macbook-pro.html' title='Java 6 meet Linux on MacBook Pro'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-6139121318429092614</id><published>2007-10-22T01:04:00.000+03:00</published><updated>2007-10-22T01:28:43.537+03:00</updated><title type='text'>Coupon or negative numbers' marketing</title><content type='html'>I've noticed a little trend in TV commercials nowadays in Romania and it also applies to computing: new commercials or new advertisements always underline the negative number, the "user gain". Stay with me...&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;So, you want a new car ? &lt;span style="font-style: italic;"&gt;Well, our car is the best: it's 1000 euro "buyer (bar)gain".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Want to be subscribed to our useless service ? &lt;span style="font-style: italic;"&gt;How could you refuse: the first month is free!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Why don't you migrate to the new version: &lt;span style="font-style: italic;"&gt;it's 10% faster !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Want to take a 20 year long mortgage for 100K euro ? We are the best: &lt;span style="font-style: italic;"&gt;we give you 4K euro for free.&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;As you noticed, all these advertisements &lt;span style="font-weight: bold;"&gt;avoid&lt;/span&gt; the real issue. They avoid, the actual &lt;span style="font-weight: bold;"&gt;price&lt;/span&gt; (or actual &lt;span style="font-weight: bold;"&gt;speed&lt;/span&gt;, actual &lt;span style="font-weight: bold;"&gt;time to completion&lt;/span&gt;, etc).&lt;br /&gt;&lt;br /&gt;All they brag about is that you get this discount or that super-offer. But they don't even bother to tell you the actual cost anymore.&lt;br /&gt;&lt;br /&gt;I mean, in their mind, getting anything for free should be reason enough for people to buy their product. Makes sense to me... &lt;span style="font-weight: bold;"&gt;NOT&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;My opinion is that this &lt;span style="font-style: italic;"&gt;coupon&lt;/span&gt; advertisement is trying very hard to &lt;span style="font-style: italic;"&gt;confuse&lt;/span&gt; the buyer. Because if anyone uses the same unit for their product like &lt;span style="font-weight: bold;"&gt;price&lt;/span&gt;, it's easy to compare products.&lt;br /&gt;&lt;br /&gt;But how hard is it to compare an offer where I get 2 free months with one that gives me a free (cheap) cell-phone or another one where I may have already won an all-expense paid trip to the Bahamas. See ? It's almost impossible.&lt;br /&gt;&lt;br /&gt;So, please, marketing gurus, stop telling me things I don't care. Tell me things I can quantify: if I get a discount, how much will it still cost ?; if your product is faster than the old one, how fast is it actually (maybe the old product ran on Cyrix processors).&lt;br /&gt;&lt;br /&gt;The exception is when I already am a customer so I do care what I have to gain. 10% speed: sure ! Half memory usage: excellent ! Less CPU usage: even better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-6139121318429092614?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/6139121318429092614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=6139121318429092614&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/6139121318429092614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/6139121318429092614'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/10/coupon-or-negative-numbers-marketing.html' title='Coupon or negative numbers&apos; marketing'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-9073331558494083047</id><published>2007-10-18T13:22:00.000+03:00</published><updated>2007-10-18T13:30:07.750+03:00</updated><title type='text'>New NetBeans Platform-based tool</title><content type='html'>I just noticed on my RSS feeds some talk about &lt;a href="https://visualvm.dev.java.net/"&gt;VisualVM&lt;/a&gt; so I went and downloaded it.&lt;br /&gt;&lt;br /&gt;First, by the screenshots alone it was clear to me it's a NetBeans Platform application. Also, the charts look awfully like the NetBeans Profiler ones. Well, lo an behold, it &lt;b&gt;is&lt;/b&gt; a simple Platform application holding the profiler cluster.&lt;br /&gt;&lt;br /&gt;What's annoying me is that the profiling part only works with Java 6 (not available on OSX). But the NetBeans Profiler &lt;i&gt;does&lt;/i&gt; work with Java 5 if we just configure the proper agent. I would have been nice for VisualVM to also use the agent as not everyone is using Java 6.&lt;br /&gt;&lt;br /&gt;Second, the OSX integration is less than stellar (it's the 1st release so I'll excuse them). The menu doesn't show up on the apple menubar the 1st time you run the tool (but on subsequent runs it does, strangely). Also, no launcher like in the IDE.&lt;br /&gt;&lt;br /&gt;Oh, forgot to mention it uses the NetBeans Platform from NetBeans 6. Looking good guys.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-9073331558494083047?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/9073331558494083047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=9073331558494083047&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/9073331558494083047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/9073331558494083047'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/10/new-netbeans-platform-based-tool.html' title='New NetBeans Platform-based tool'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-3402931233455043954</id><published>2007-10-04T16:15:00.000+03:00</published><updated>2007-10-04T16:50:12.991+03:00</updated><title type='text'>(Maven) Building to a ramdrive</title><content type='html'>I own a MacBook Pro and I have a few projects with Maven (and MevenIDE on NetBeans).&lt;br /&gt;&lt;br /&gt;What's annoying me with the build system is that it usually writes a lot to the disk. Not only is that quite unnecessary (as the files will be overridden in no time) but the laptop hard-disk is also quite slow and all this writing is trashing it.&lt;br /&gt;&lt;br /&gt;The solution: write to a ramdrive ! As you all know, a ramdrive is a  "virtual" hard-disk that sits in your RAM and goes away when you shutdown the machine (not that I care, the build files are temporary).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;First step: create the ramdisk&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;There are some utilities that do this, but it's quite doable from the terminal (eventually with a shellscript).&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;First, get your disksize in MB and multiply it by 2048. So 256MB means &lt;span style="font-weight: bold;"&gt;524288&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Next, create the device: &lt;span style="font-weight: bold;"&gt;hdik -nomount ram://524288 &lt;/span&gt;&lt;span&gt;The command will also display the name of the new device file.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Create a HFS filesystem in there: &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;newfs_hfs -v "disk name"/dev/diskXXX&lt;/span&gt; , where diskXXX is whatever the previous command printed&lt;/li&gt;&lt;li&gt;Mount the filesystem: &lt;span style="font-weight: bold;"&gt;mkdir /Volumes/diskXXX &amp;amp;&amp;amp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;diskutil mount /dev/diskXXX&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;You'll probably need to run some of these commands as root (su admin-user, sudo sh). I also set my non-admin user as owner with &lt;span style="font-weight: bold;"&gt;chown -R myUser:myUser /Volumes/diskXXX&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At this point you should have a new 256MB drive mounted.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Second step: link maven folders&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, I have to set the "target" folders on the ramdisk. Normally the orthodox way is to change the pom but I just didn't get it working. So my old-school solution is to use symbolic links.&lt;br /&gt;&lt;br /&gt;This could be smarter as a "mvn clean" will remove the links we just create (but just keep a script in place that recreates this).&lt;br /&gt;&lt;br /&gt;My script is:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;for i in *; do&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        echo $i;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        mkdir -p "$1/$i/target";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        ln -s "$1/$i/target" "$i/target";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;done&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and I run it in the folder that keeps all my Maven projects (a flat hierarchy). Note the $1 which is the argument to the script. I use it like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$./linkramdisk.sh /Volumes/diskXXX &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Building&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;All the links are in place so you can try a &lt;span style="font-weight: bold;"&gt;mvn install&lt;/span&gt; and see how fast it works. I my case, I reduced the build time (with no unit-tests) from 27 seconds to 17 seconds.&lt;br /&gt;&lt;br /&gt;That doesn't seem much, but it does add up for larger projects and most importantly, it keeps the hard-drive out of the loop.&lt;br /&gt;&lt;br /&gt;Oh, did I mention I also use FileVault on my account ? That's another reason one would like to avoid writing to disk: no need to encrypt something useless like a build artifact...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-3402931233455043954?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/3402931233455043954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=3402931233455043954&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3402931233455043954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3402931233455043954'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/10/maven-building-to-ramdrive.html' title='(Maven) Building to a ramdrive'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-91168500049248329</id><published>2007-09-08T09:19:00.000+03:00</published><updated>2007-09-08T09:35:44.975+03:00</updated><title type='text'>Power-efficient CPU a non-issue ?</title><content type='html'>I find it interesting nowadays that CPU builders, and Intel in particular keep bragging about their power-efficient CPUs. It's like, this is getting more important than speed or number of cores.&lt;br /&gt;&lt;br /&gt;My point is: who cares about that ? I want my CPU to be fast first, eventually have multiple cores and some fast way to talk with my memory. It would be &lt;span style="font-style: italic;"&gt;nice&lt;/span&gt; to also consume little power, but that's a nice touch so to speak.&lt;br /&gt;&lt;br /&gt;I assume 90% of the CPU buyers don't have server farms to worry about their electrical bill so why induce this trend ?&lt;br /&gt;&lt;br /&gt;I think the solutions is clear: Intel / AMD cannot increase speed easily anymore. Therefore they are convincing consumers that this is what's important about a CPU: power consumption. The result: you see all kinds of uninformed users wondering how much the CPU consumes as if they would see the difference.&lt;br /&gt;&lt;br /&gt;I don't want my CPU to consume less than my graphics card or my hard-drive. I'm buying it to work so I expect it to take some power. I would gladly take the power-hungry &lt;span style="font-style: italic;"&gt;fast&lt;/span&gt; CPU than the low-consuming &lt;span style="font-style: italic;"&gt;slow&lt;/span&gt; CPU.&lt;br /&gt;&lt;br /&gt;As far as I know the operating system or any other software in this world isn't influenced by how much power the CPU takes, but it sure matters if the CPU is &lt;span style="font-style: italic;"&gt;faster&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;has more cores &lt;/span&gt;(or some multi-threading per CPU).&lt;br /&gt;&lt;br /&gt;So, congratulations to the marketing departments of Intel for convincing people that it's not speed or threads that matter (you know, the stuff people need) but power consumption.&lt;br /&gt;&lt;br /&gt;Probably the PC already consumes less than my fridge, old TV or hair drier, but God-forbid it consumes more and gains some speed. No way, we have to be power efficient :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-91168500049248329?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/91168500049248329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=91168500049248329&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/91168500049248329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/91168500049248329'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/09/power-efficient-cpu-non-issue.html' title='Power-efficient CPU a non-issue ?'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-7772479848393864983</id><published>2007-09-04T10:12:00.000+03:00</published><updated>2007-09-04T11:12:11.954+03:00</updated><title type='text'>I saw Vista for the first time yesterday</title><content type='html'>Yesterday a neighbour of mine bought a new computer. It was a decent-ish desktop (3.0Ghz with HT, 1G Ram, 300G HDD, 19" LCD, 5.1 speaker system) but way overpriced. Could have bought an iMac probably with those money.&lt;br /&gt;&lt;br /&gt;Anyhow, since I'm the computer guy in the building, they came to me to get it started. First, because they had no sound. Also, because they have a speaker system with 5 or so satellites and only a 2 way sound card.&lt;br /&gt;&lt;br /&gt;And this is how I saw Windows Vista for the 1st time. I was really weird as I haven't used any Windows in a while but Vista made me even more uneasy as I just couldn't find the settings I was used to in the XP-using days.&lt;br /&gt;&lt;br /&gt;So, fast-forward 1 hours or so after I've installed the sound drivers. The strange thing was that the system was rather slow and unresponsive, especially while installing stuff. I mean, this is better than any machine I own so I expected it to fly. But no, it was just about as slow as my iBook G4.&lt;br /&gt;&lt;br /&gt;About those accept/deny dialogs I've read about on the internet, I have to say I only noticed them a few times. I guess if you let Vista be, it doesn't bother you with messages :-)&lt;br /&gt;&lt;br /&gt;But the thing this experience showed me is just how foreign Windows looked to me. Mostly due to Vista but the point was that Windows in general is something I don't know much about anymore.&lt;br /&gt;&lt;br /&gt;I've used so much other operating systems that I've become more or less a Windows beginner.&lt;br /&gt;&lt;br /&gt;I think that generally there isn't a need for Microsoft anymore. Windows is redundant with OSX / Ubuntu, MS Office easily replaced by OpenOffice, Explorer by Firefox.&lt;br /&gt;&lt;br /&gt;They don't actually seem to have any product anymore I would need. And this is a nice feeling.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-7772479848393864983?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/7772479848393864983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=7772479848393864983&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7772479848393864983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7772479848393864983'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/09/i-saw-vista-for-first-time-yesterday.html' title='I saw Vista for the first time yesterday'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-7651339818757179270</id><published>2007-07-13T18:14:00.000+03:00</published><updated>2007-07-13T18:20:20.209+03:00</updated><title type='text'>Maven projects with NetBeans IDE (Part 1)</title><content type='html'>&lt;p&gt;&lt;span style="font-style: italic;"&gt;(This article is on &lt;a href="http://docs.google.com/Doc?id=dhf9t9k_2d2dj6w"&gt;google docs&lt;/a&gt; too).&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;Introduction&lt;/h2&gt; &lt;p style="margin-bottom: 0in;"&gt;I'll present here how to use Maven projects with NetBeans IDE via the MevenIDE project. Since the emphasis is on Maven and Maven-support, I'll just play the devil's advocate and try to focus on most of Maven's features while also underlining ant's &lt;i&gt;flaws&lt;/i&gt;.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;As always, the answer is somewhere in the middle. There are cases where ant is preferred to Maven and some when it's the other way around.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;The build system&lt;/h2&gt; &lt;p style="margin-bottom: 0in;"&gt;All NetBeans projects are ant-based. Ant is a very useful tool due to the cross-platform and usually easy to write build-scripts. But these scripts to compile, generate, build and deploy the projects usually endup being quite complex.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;They are so complex sometimes that they represent basically &lt;i&gt;another part of the project&lt;/i&gt;. They are also non-standard for each project (especially legacy free-form projects).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Now, using the IDE, we have some pre-cooked scripts and special ant-tasks. But your build-system is rather tied now to the IDE (not actually to the IDE, but to those ant-tasks). Everything is open-source, true, but you can't actually just take the official ant distribution and build your system... You need to tweak it a little. (In NetBeans' defense, at least you have a ready-made ant build system. With other IDEs, you just have some metadata but nothing usable outside the IDE.)&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;Is it a bird, is it a plane ? It's Maven&lt;/h2&gt; &lt;p style="margin-bottom: 0in;"&gt;Maven isn't an ant replacement. It includes a build-system component, but it's something else. It provides a consistent view on any project with a standardized project definition and plugins for reports and website generation. Think of it as a general project management tool that includes a build tool.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Basically with Maven you don't write any scripts ! Maven provides you a standardized way to structure your project and you just configure various build / reports / site plugins. Therefore you don't have any build scripts anymore -- you have a &lt;i&gt;declarative&lt;/i&gt; description of your project, called POM (Project Object Model).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Maven also introduces the concept of &lt;i&gt;repository&lt;/i&gt;. That is, a place where all the build artifacts (the resulting JARs or WAR/EAR files) are saved and retrieved from. For example it's easy to imagine a setup where the whole team uses a read-only repository with the 3rd party artifacts. Thus, they don't need to sit in the VCS !&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;I really can't sum it up better than that so I recommend using the &lt;a href="http://maven.apache.org/"&gt;Maven website&lt;/a&gt; to learn some more.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;MevenIDE&lt;/h2&gt; &lt;p style="margin-bottom: 0in;"&gt;The Maven-NetBeans IDE integration is provided by (part of) the MevenIDE project (install it from &lt;a href="http://mevenide.codehaus.org/m2-site/mevenide2-netbeans/installation.html"&gt;here&lt;/a&gt;).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;All my examples are based on NetBeans 5.5. Sadly, with the NetBeans 6.0 release approaching, most of the Maven-integration work is being put there. That is, for the NetBeans 5.5 version MevenIDE is somewhat &lt;span style=""&gt;&lt;i&gt;beta quality&lt;/i&gt;&lt;span style="font-style: normal;"&gt; and you're supposed to have more luck with NetBeans 6.0 (now at milestone 10)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: normal;"&gt;.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in; font-style: normal;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;You might stumble onto some bugs for the 5.5 integration but it's a very dynamic project with people still working on it and it's quite easy to find workarounds or help in the mailing lists (Milos Kleint is usually there to help).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;So, if you don't actually like living on the bleeding-edge by either using the current Maven integration for NetBeans 5.5 or by switching to NetBeans 6.0 M10, you're out of luck. But my advice it to take a chance ! It will be worth it.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;Java Application Project&lt;/h2&gt; &lt;p style="margin-bottom: 0in;"&gt;Let's see how you could use a Maven project instead of a normal Java Application Project.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;After you created a new Java Application project with the NetBeans wizard, you should have in the  &lt;i&gt;Files&lt;/i&gt;&lt;span style="font-style: normal;"&gt; view&lt;/span&gt; something like:&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;/src&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;/test&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;/nbproject&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;build.xml&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;manifest.mf&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;(The Files tab should be next to the Projects tab).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Now we select &lt;i&gt;File-&amp;gt;New Project&lt;/i&gt; and then &lt;i&gt;Maven2-&amp;gt;Archetypes &lt;/i&gt;project with the &lt;i&gt;Quickstart Project&lt;/i&gt; template. Artifact Id is a public name for your project (for example: maven-javaapp) while Group Id is usually your company (com.example). Please note the “version” parameter. You'll find this useful with dependencies:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt; &lt;/p&gt;    &lt;p style="margin-bottom: 0in;"&gt;&lt;/p&gt;&lt;div style="padding: 1em 0pt; text-align: center;"&gt;&lt;img style="width: 731px; height: 508px;" src="http://docs.google.com/File?id=dhf9t9k_3hcvbqfgg" name="graphics1" border="0" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Both wizards create some files and some example classes. The NetBeans-default Java Application creates a Main.java file but no test. There are also a lot of semi-exotic files in nbproject/ .&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;The Maven wizard creates a pom.xml file and a src/ folder. The pom.xml file is the project-metadata for Maven. It basically replaces the build.xml and nbproject/ . It is &lt;i&gt;not&lt;/i&gt; the only metadata file Maven uses, but it's the only one that's mandatory (and the one you usually see).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;The project name&lt;/h2&gt; &lt;p style="margin-bottom: 0in;"&gt;After you've created the Maven project, you'll see that the name is something like "Maven Quick Start Archetype (jar)". Of course we need to change that to match the default IDE style (which I'm trying to duplicate so far). So, we open the Project POM file in "Project files" and look for the &amp;lt;name&amp;gt; element. Just editing that to "Java Application" and saving the POM should be enough, the Maven Project from the "Projects" tab will refresh and you'll see the new name. Pretty nice, no ?&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;/p&gt;&lt;div style="padding: 1em 0pt; text-align: center;"&gt;&lt;img style="width: 310px; height: 188px;" src="http://docs.google.com/File?id=dhf9t9k_4f452kcfv" name="graphics2" border="0" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Please note the extra "Project profiles" file in there. As I told you, there may be some other metadata files, but for most actions, the POM is king.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;That was a forced introduction in hand-editing the pom.xml file. You might as well have used the &lt;i&gt;Project properties&lt;/i&gt; window to edit the project name. This will automatically change the POM file.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;/p&gt;&lt;div style="padding: 1em 0pt; text-align: center;"&gt;&lt;img style="width: 760px; height: 535px;" src="http://docs.google.com/File?id=dhf9t9k_5ckt5bj5j" name="graphics6" border="0" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;You will notice that the MevenIDE plugin has some pretty nice support for the metadata files. You have auto-completion in the POM file not only for the XML schema but also for plugins from the local repository. There's also hyperlink support (just hold the Control key pressed) that not only opens a browser for real URLs but is able to jump into modules and parent projects (this is a feature of Maven we're not going to talk in this article, but it's good to keep in mind).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;Running&lt;/h2&gt; &lt;p style="margin-bottom: 0in;"&gt;Since we already have the Source and Test folder, the main action we'll be doing is running a main-class.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;First, if you select Run via Run-&amp;gt;Run Main Project menu or the F6 key you'll see this warning message:&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;/p&gt;&lt;div style="padding: 1em 0pt; text-align: center;"&gt;&lt;img style="width: 707px; height: 144px;" src="http://docs.google.com/File?id=dhf9t9k_6g4r6ptjs" name="graphics3" border="0" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;It basically tells us the the NetBeans-Maven bridge isn't configured yet, so it doesn't know what to run. As the message says, right-click the project and go to Properties.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;We configure the Run-&amp;gt;Main Class to something like "com.example.App" (or whatever your package is).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Now, if you open the POM again you'll see that a whole lot of data was automatically added under some &amp;lt;profiles&amp;gt; element.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Again, you select to Run this project (right-click on the Project -&amp;gt; Run or just press F6 if it's the main project). After some messages in the output window, you'll see something like this:&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;BUILD ERROR (Badly configured, need existing jar at ...)&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Huh? What was that ??&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Well, as I've said, bugs do exist and you've just stumbled upon &lt;a href="http://jira.codehaus.org/browse/MEVENIDE-485"&gt;MEVENIDE bug 485&lt;/a&gt; . Luckily, there is a workaround: just open the POM and look for&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&amp;lt;plugin&amp;gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&amp;lt;artifactid&amp;gt;maven-assembly-plugin&amp;lt;/artifactid&amp;gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;then add&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;b&gt;&amp;lt;version&amp;gt;2.1&amp;lt;/version&amp;gt;&lt;/b&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;What does this do ? Well, Maven uses various plugins to run everything from building to creating the JARs, to generating reports. Each plugin has a version so we can still have old projects working. Now, where do you expect all these plugins to sit ? Of course -- in the Maven repository.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Whenever a plugin isn't found, Maven tries each repository in order to download it (by default there's only one repository, the official Maven repository).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;So, in our case, MevenIDE was using the latest maven-assembly-plugin from the repository which is in beta and has some issues. By forcing the version on 2.1, everything works.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Take note that I've said "download it" above. You should expect something like "Downloading maven-assembly-plugin" with a progress bar in the lower-right corner.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;Testing&lt;/h2&gt; &lt;p style="margin-bottom: 0in;"&gt;If you like writing tests (don't you ?), just use right-click on the Project -&amp;gt; Test . You'll see the details in the output window. If everything is ok you should see a BUILD SUCCESSFUL. If some tests fail, you have a BUILD FAILURE and you may click on the failed tests in the output window to see the stacktrace:&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;/p&gt;&lt;div style="padding: 1em 0pt; text-align: center;"&gt;&lt;img style="width: 714px; height: 168px;" src="http://docs.google.com/File?id=dhf9t9k_7fsnffhdz" name="graphics4" border="0" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;MevenIDE also has nice support for the output with marked stacktraces just like the standard projects.&lt;/p&gt; &lt;h2 class="western"&gt;Debugging&lt;/h2&gt; &lt;p style="margin-bottom: 0in;"&gt;In order to debug a project, right-click it in the “Projects” tab and click Debug or just select Run-&amp;gt;Debug Main Project (the F5 key). It should look the same as the IDE-project.&lt;/p&gt; &lt;h2 class="western"&gt;Are your tests failing ?&lt;/h2&gt; &lt;p style="margin-bottom: 0in;"&gt;Maven is really in love with tests and these are so important that they break the whole build. That is, you cannot run or debug a project if one of your test fails. This does make sense in theory, but in practice you always have some tests that fail (at least I do ;-) ).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;The workaround is to skip tests. From the IDE, you just go to the project properties -&amp;gt; Action Mappings and tick “Skip tests” for the action you want (&lt;i&gt;Run project&lt;/i&gt;, &lt;i&gt;Debug project&lt;/i&gt; or both).&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;/p&gt;&lt;div style="padding: 1em 0pt; text-align: center;"&gt;&lt;img style="width: 760px; height: 533px;" src="http://docs.google.com/File?id=dhf9t9k_8cp9zj3dt" name="graphics5" border="0" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;If you run Maven from the terminal, you must add “&lt;b&gt;-Dmaven.test.skip=true&lt;/b&gt;”.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;If you feel really in shape, you can configure in your POM the plugin that's in charge for tests and just exclude the tests you are still working on. Just add something like this and you're done:&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;pre&gt;&amp;lt;project&amp;gt;&lt;br /&gt;&amp;lt;!-- .... --&amp;gt;&lt;br /&gt;&amp;lt;build&amp;gt;&lt;br /&gt;&amp;lt;plugins&amp;gt;&lt;br /&gt;  &amp;lt;plugin&amp;gt;&lt;br /&gt;    &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;    &amp;lt;artifactId&amp;gt;maven-surefire-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;    &amp;lt;configuration&amp;gt;&lt;br /&gt;      &amp;lt;excludes&amp;gt;&lt;br /&gt;        &amp;lt;exclude&amp;gt;**/TestBroken1.java&amp;lt;/exclude&amp;gt;&lt;br /&gt;        &amp;lt;exclude&amp;gt;**/TestStillFailing2.java&amp;lt;/exclude&amp;gt;&lt;br /&gt;      &amp;lt;/excludes&amp;gt;&lt;br /&gt;    &amp;lt;/configuration&amp;gt;&lt;br /&gt;  &amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;lt;/build&amp;gt;&lt;br /&gt;&amp;lt;!-- ... --&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/pre&gt;&lt;p style="margin-bottom: 0in;"&gt; Note the already familiar artifactId and groupId for the plugin configuration.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;i&gt;This is the end of part 1. Stay tuned for the next articles about how to use dependencies, how to configure your own repository, how to make EJB/EAR artifacts and even NetBeans Platform modules. &lt;/i&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-7651339818757179270?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/7651339818757179270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=7651339818757179270&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7651339818757179270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7651339818757179270'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/07/maven-projects-with-netbeans-ide-part-1.html' title='Maven projects with NetBeans IDE (Part 1)'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-2846825114891234547</id><published>2007-07-13T10:52:00.000+03:00</published><updated>2007-07-13T11:05:24.882+03:00</updated><title type='text'>I feel like Windows98 again</title><content type='html'>I've been having some Windows98 flashbacks ever since I'm using Ubuntu 6.06 on a Dell C840.&lt;br /&gt;&lt;br /&gt;There are various reasons: resume kills the sound system, sometimes the ethernet and once in a while corrupts the video (easily fixed by ctrl+alt+F1 ctr+alt+F7). The expected hardware support problems under Linux.&lt;br /&gt;&lt;br /&gt;Since I've installed Google Desktop Linux I also had for a while sudden Firefox crashes (fixed by disabling their extension). Boy was that fun ! Not to mention Firefox 1.5 doesn't save the session (make sure to install the SessionSaver extension).&lt;br /&gt;&lt;br /&gt;The latest culprit is OpenOffice.org. Usually it works ok, but then you have the random crash. It's nice to have a &lt;span style="font-style: italic;"&gt;Crash Recovery&lt;/span&gt; dialog and all, but I would rather not see that as often. It also has the tendency (usually after some crash recovery) to not start at all. You just click on and &lt;span style="font-weight: bold;"&gt;odt&lt;/span&gt; file and wait... and wait.. and nothing. You click again: and wait ...&lt;br /&gt;&lt;br /&gt;The solution is usually a restart (&lt;span style="font-style: italic;"&gt;so un-linuxy&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;But, all in all, it's a usable desktop that kind-of forces you to do something productive since it's&lt;span style="font-style: italic;"&gt; so simple&lt;/span&gt;. With no fancy GUI to drool at, you're forced to think and work. Or, post in your blog about how productive you &lt;span style="font-style: italic;"&gt;could&lt;/span&gt; be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-2846825114891234547?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/2846825114891234547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=2846825114891234547&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2846825114891234547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2846825114891234547'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/07/i-feel-like-windows98-again.html' title='I feel like Windows98 again'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-2688270905905858534</id><published>2007-07-05T09:25:00.000+03:00</published><updated>2007-07-05T09:45:35.974+03:00</updated><title type='text'>Google Desktop for Linux crashes Firefox 1.5 on Ubuntu 6.06 (Dapper Drake)</title><content type='html'>I've installed Google Desktop Linux on my Ubuntu 6.06 system and found that Firefox crashes a lot ! And by &lt;span style="font-style: italic;"&gt;a lot&lt;/span&gt; I mean I couldn't even google for advice ;)&lt;br /&gt;&lt;br /&gt;Basically after some log hunting I found out the cause is quite simple: the &lt;span style="font-weight: bold;"&gt;Google Desktop for Firefox &lt;span style="font-style: italic;"&gt;extension&lt;/span&gt;&lt;/span&gt; is broken.&lt;br /&gt;&lt;br /&gt;Just go to &lt;span style="font-style: italic;"&gt;Tools-&gt;Extensions&lt;/span&gt;,right-click &lt;span style="font-style: italic;"&gt;Google Desktop Firefox&lt;/span&gt; and select &lt;span style="font-weight: bold;"&gt;Disable&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;That seems to be it ! Happy google indexing.&lt;br /&gt;&lt;br /&gt;I recommend you also comment on the bug-report &lt;a href="https://bugs.launchpad.net/ubuntu/+source/mozilla-firefox/+bug/124140"&gt;here&lt;/a&gt; (posted on Ubuntu's Launchpad.net).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-2688270905905858534?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/2688270905905858534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=2688270905905858534&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2688270905905858534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2688270905905858534'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/07/google-desktop-for-linux-crashes.html' title='Google Desktop for Linux crashes Firefox 1.5 on Ubuntu 6.06 (Dapper Drake)'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-8558373071858384141</id><published>2007-06-27T10:32:00.000+03:00</published><updated>2007-06-27T10:54:46.533+03:00</updated><title type='text'>Maven and NetBeans (Platform)</title><content type='html'>As most of you know, the build system in the NetBeans IDE is entirely ANT-centric. That is, every project has a generated build.xml behind the scenes and every action (compile, run) is an ant target actually.&lt;br /&gt;&lt;br /&gt;But, of course, you can't please everyone. Using ANT as a backend means that, of course, you need some custom ant targets to make the IDE-integration better. Thus, you're not 100% independent of NetBeans, you still need those custom tasks (some JARs basically) and the core ant scripts.&lt;br /&gt;&lt;br /&gt;Using ANT also means some overhead for each action.&lt;br /&gt;&lt;br /&gt;But the most nasty stuff in my projects are the 3rd party JARs. Most projects use some outside blobs. Normally, you can have the JARs in SVN and NetBeans will take care of this quite nicely (using relative paths).&lt;br /&gt;&lt;br /&gt;But what happens if you decide &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; to include those JARs in the SVN ? Well, you enter a world of tweaking of .properties files and custom ant tasks to re-populate those properties files. It's not pretty and error-prone in a distributed project.&lt;br /&gt;&lt;br /&gt;Maven on the other side has this &lt;span style="font-style: italic;"&gt;repository&lt;/span&gt; concept. That is, a place where some 3rd party JARs sit. Your POM file (project metadata basically) just declares the dependencies and the repository list.&lt;br /&gt;&lt;br /&gt;Imagine that: you have a local intranet repository and everyone in the team is using it. No more relative paths, no more custom ant tasks !&lt;br /&gt;&lt;br /&gt;I've been migrating my SVN for about 3 weeks over to maven. I have normal Java projects, Enterprise projects (EJB/WAR) and NetBeans Platform modules (NBM). It's a bumpy road (I haven't used maven until now) but it does seem to simplify thigs.&lt;br /&gt;&lt;br /&gt;But what you win on the dependency side you lose on the integration part. With &lt;a href="http://mevenide.codehaus.org/"&gt;MevenIDE&lt;/a&gt; you have normal NetBeans IDE projects, but not that kind of IDE-integration you have to module-projects for example. No more easy configuration for public-packages -- back to editing manifest files like in the old NetBeans 3.x times ;-)&lt;br /&gt;&lt;br /&gt;Overall, Maven2 seems a better choice for the build backend then Ant. You can't customize it that much but once you have all the plugins properly configured, it works better. Plus that you are totally decoupled from the IDE and IDE tasks, but you depend now on the extra plugins.&lt;br /&gt;&lt;br /&gt;Most of the continuous integration servers offer support for Maven2 projects so you can drop the new projects immediately.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-8558373071858384141?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/8558373071858384141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=8558373071858384141&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8558373071858384141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8558373071858384141'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/06/maven-and-netbeans-platform.html' title='Maven and NetBeans (Platform)'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-9153231855763591063</id><published>2007-06-18T15:12:00.000+03:00</published><updated>2007-06-18T15:37:02.746+03:00</updated><title type='text'>Gnome Typing Break</title><content type='html'>As I've said in an older post, I wasn't that impressed with the latest Ubuntu but I also couldn't install OpenSolaris on a laptop. So I installed Ubuntu 6.06 LTS, which seems to work quite nicely. I even has suspend to RAM working (though it breaks the sound afterwards).&lt;br /&gt;&lt;br /&gt;One nice feature Gnome has that I didn't know of it is Typing Break, found in System -&gt; Preferences -&gt; Keyboard.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7kuGo66xDMI/RnZ5hsVuTWI/AAAAAAAAArA/r6A7gsG33Jc/s1600-h/gnome-typing-break.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7kuGo66xDMI/RnZ5hsVuTWI/AAAAAAAAArA/r6A7gsG33Jc/s400/gnome-typing-break.png" alt="" id="BLOGGER_PHOTO_ID_5077379249651731810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It basically forces you to take a break after a period of time. Gets useful after you start getting some hand-aches. During the break you see something like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7kuGo66xDMI/RnZ7sMVuTXI/AAAAAAAAArI/B3RMec2LaJw/s1600-h/gnome-break.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_7kuGo66xDMI/RnZ7sMVuTXI/AAAAAAAAArI/B3RMec2LaJw/s400/gnome-break.png" alt="" id="BLOGGER_PHOTO_ID_5077381629063613810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It takes a bit of discipline to actually respect the breaks (especially when something is urgent and you have the "Postpone" button -- which should be renamed to Snooze). Then again, even if I disable the postpone button I might be tempted to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Ctrl&lt;/span&gt;+Alt+Backspace or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Ctrl&lt;/span&gt;+Alt+F1, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;login&lt;/span&gt; then kill process.&lt;br /&gt;&lt;br /&gt;I'm also looking at some &lt;span style="font-style: italic;"&gt;exotic and ergo- keyboards&lt;/span&gt; lately. &lt;span style="font-weight: bold;"&gt;Anyone has something to recommend ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I would really like something like 2 half-keyboards. One for each hand, then going into the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;USB&lt;/span&gt; port. This way I can place them to the right and left side of the laptop and use them quite nicely -- it's almost impossible to use an external keyboard with a laptop without also adding an external display.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;OK&lt;/span&gt;, no flying cars. But 2007 and no mind-reading input devices ? Someone is slacking off...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-9153231855763591063?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/9153231855763591063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=9153231855763591063&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/9153231855763591063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/9153231855763591063'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/06/gnome-typing-break.html' title='Gnome Typing Break'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7kuGo66xDMI/RnZ5hsVuTWI/AAAAAAAAArA/r6A7gsG33Jc/s72-c/gnome-typing-break.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-1299964002017724135</id><published>2007-06-07T19:35:00.000+03:00</published><updated>2007-06-07T20:03:03.859+03:00</updated><title type='text'>Pro NetBeans IDE 5.5 Enterprise Edition Review</title><content type='html'>Adam Myatt's "Pro NetBeans IDE 5.5 Enterprise Edition" could be quite well an introductory course to Enterprise programming in general and especially a good book for NetBeans IDE (future) users in particular.&lt;br /&gt;&lt;br /&gt;It's quite decent for a novice programmer because it consists of small tutorials and introductions in all the different technologies that the NetBeans IDE supports. It gives you the starting point in your endeavor. It's most needed for an introductory course in any Enterprise since it touches a lot of important points like unit-test, good javadoc, version control, build system (ant-centric, like the IDE) and more.&lt;br /&gt;&lt;br /&gt;Since it covers that many topics there isn't actually enough space to go too deep into any of the subjects. The spotlight is after all on the NetBeans IDE and the features it has. This is quite a shame since there were some unique things that could have been discussed more upon: Jackpot refactorings made me really curious...&lt;br /&gt;&lt;br /&gt;It's also nice to see some features I've discovered myself in the IDE after a while - like the database support and SQL command window - which turned out to be quite useful. Readers get a chance to find out about them from the start.&lt;br /&gt;&lt;br /&gt;All in all, a good book that covers a lot of ground. It doesn't touch at all making NetBeans Platform modules, but that's not expected for a NetBeans IDE user. Although, after a while of living in your own IDE, you can't help it but customize it a little -- enter module development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-1299964002017724135?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/1299964002017724135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=1299964002017724135&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1299964002017724135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1299964002017724135'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/06/pro-netbeans-ide-55-enterprise-edition.html' title='Pro NetBeans IDE 5.5 Enterprise Edition Review'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-1782925424888382077</id><published>2007-06-06T12:22:00.000+03:00</published><updated>2007-06-06T12:28:11.205+03:00</updated><title type='text'>There is truth</title><content type='html'>&lt;blockquote&gt;There is truth, my boy. But the doctrine you desire, absolute, perfect dogma that &lt;i&gt;alone&lt;/i&gt; provides wisdom, does not exist. Nor should you long for a perfect doctrine, my friend. Rather, you should long for the perfection of yourself. The deity is within &lt;i&gt;you&lt;/i&gt;, not in ideas and books. Truth is lived, not taught.&lt;br/&gt;Herman Hesse, &lt;i&gt;The Glass Bead Game&lt;/i&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-1782925424888382077?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/1782925424888382077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=1782925424888382077&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1782925424888382077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1782925424888382077'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/06/there-is-truth.html' title='There is truth'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-654485556212491679</id><published>2007-06-05T10:42:00.000+03:00</published><updated>2007-06-05T10:50:11.694+03:00</updated><title type='text'>OpenOffice and Java take 2</title><content type='html'>Hm, I just got this morning the weekly NetBeans newsletter and it had this part:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;     &lt;blockquote style="font-style: italic;"&gt;&lt;h2&gt;&lt;a href="http://www.netbeans.info/newsletter/story.php?id=1203"&gt;Netbeans Plugin for OpenOffice.org Development&lt;/a&gt;&lt;/h2&gt;       &lt;p style="margin-left: 8px;"&gt; Sun's OpenOffice.org engineering team has developed a plug-in for building OpenOffice.org extensions. It is an easy to use set of wizards to create OpenOffice.org extensions that can be used to integrate new functionality, adopt existing functionality, and create Java applications that can remotely control &lt;a href="http://www.openoffice.org/"&gt;OpenOffice.org&lt;/a&gt;. Everything is ready for you to start implementing OpenOffice.org extensions, including a Java code skeleton.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="margin-left: 8px;"&gt;&lt;/p&gt;      &lt;/div&gt;So, SUN is still supporting this. Maybe I'll take a look at this &lt;a href="http://plugins.netbeans.org/PluginPortal/faces/MainPage.jsp?pluginid=2320"&gt;new plugin&lt;/a&gt; and see how it feels.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-654485556212491679?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/654485556212491679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=654485556212491679&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/654485556212491679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/654485556212491679'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/06/openoffice-and-java-take-2.html' title='OpenOffice and Java take 2'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-7808126148019993474</id><published>2007-06-04T16:34:00.000+03:00</published><updated>2007-06-04T17:11:08.389+03:00</updated><title type='text'>Is OpenOffice too late with the Java-bindings ?</title><content type='html'>I remember my first "important" job at my &lt;a href="http://www.alcatel-lucent.ro/"&gt;previous employer&lt;/a&gt; was to maintain some in-house Office-based application. Nothing like Excel and &lt;a href="http://msdn.microsoft.com/vba/"&gt;VBA&lt;/a&gt; to ruin your day ! Well, I was a rookie so I couldn't refuse but it was a depressing experience.&lt;br /&gt;&lt;br /&gt;For some time now (I remember I was running some samples last year), OpenOffice has some nice Java bindings (or &lt;a href="http://http//api.openoffice.org/"&gt;API&lt;/a&gt;). Now, this is all great, but the actual code looks quite arcane.&lt;br /&gt;&lt;br /&gt;What troubles me is this: why was OpenOffice so late with this move ? I mean, most programmers don't want to live inside Excel and Visual Basic so if you have a choice, you move a simple dedicated "application" from Excel + VBA to OpenOffice + Java.&lt;br /&gt;&lt;br /&gt;I guess it's obvious Java is a better choice (than VB) for most programmers (it would have been for me) and the final product would have been better in so many ways:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;More happy programmers that they &lt;span style="font-style: italic;"&gt;don't&lt;/span&gt; have to use VB or (&lt;span style="font-style: italic;"&gt;oh, the horror&lt;/span&gt;), maintain VBA.&lt;/li&gt;&lt;li&gt;A decent codebase for  your initial small application in Java, that could, potentially be migrated to a full Swing application (if we just treat OpenOffice Calc or Write as the GUI toolkit). I mean, most code will get thrown away anyhow, but it's quite a waste of time reimplementing the same business logic (with the VB code as a reference). This would be a perfect change to actually &lt;span style="font-style: italic;"&gt;use&lt;/span&gt; the IDE's refactoring.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Possible introduction of OpenOffice in the corporate ! Sure, people would still copy-paste from your "application" into Microsoft Excel but that should be quite pain-less. But the developer won't have to worry about a new Office version or some other Microsoft-specific (DLL) nightmares.&lt;/li&gt;&lt;/ul&gt;But, today, making desktop applications with OpenOffice (in the same style like Excel + VBA + VB DLLs) seems &lt;span style="font-style: italic;"&gt;less of an option&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;it's really hard (look at the API) and the practice isn't actually encouraged. The 100% Java purity had probably done more wrong than right here and most people will just suggest using some Swing Application or framework like NetBeans Platform. But why shouldn't people do this kind of applications ? Most internal apps have some sort of tabular data and lists and then fancy reports. Why should we struggle with JasperReports and such when you have the nice OpenOffice Writer codebase ? Export to PDF: check, export to tons of other formats : sure!&lt;/li&gt;&lt;li&gt;OpenOffice doesn't provide a nice "platform". Something to put in a folder with all the jars and DLLs and work flawlessly. I don't need to "install" OpenOffice: I just want to distribute my application as a simple ZIP file. No DLL hell, no nothing. Make that with (Consumer) JRE included and a simpler API ! (this is linked to the previous point).&lt;/li&gt;&lt;li&gt;We have reached the point where tiny web-apps seem good enough and are developed fast enough to give existing Excel-based tools a short lifespan. This is a good way because we get rid of Excel but people still need to reinvent the same things over and over: charts and nice (PDF) reports that OO Calc should have facilitated (do I hear OpenOffice-based rich-client ?).&lt;/li&gt;&lt;/ul&gt;I think OpenOffice missed the boat by a lot for standalone (tabular) applications and it would have been a really nice thing for everyone ! Maybe even for Microsoft since it would have put to death the abomination known as VB 6.&lt;br /&gt;&lt;br /&gt;Sure, this would have destroyed the purity of your application, mixing it with the  OpenOffice native code and maybe even with some other COMs but I think it would have been better overall.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-7808126148019993474?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/7808126148019993474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=7808126148019993474&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7808126148019993474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7808126148019993474'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/06/is-openoffice-too-late-with-java.html' title='Is OpenOffice too late with the Java-bindings ?'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-8413934635960942112</id><published>2007-05-23T11:46:00.000+03:00</published><updated>2007-05-23T12:07:49.051+03:00</updated><title type='text'>Euro ripoff (aka The gold you have to pay for pretty glass in Romania / Timisoara)</title><content type='html'>Ever since the dollar took a nose dive against the Euro I always drooled at the nice prices the US seems to have. Why ? Because most sellers in the EU (and Romania) make a really 1:1 conversion. This means that if something is about 1000 USD in the US it will be about 1000 EUR in EU (although this means about 1300 USD - 30% increase! ).&lt;br /&gt;&lt;br /&gt;Now, on the other side of the spectrum sits Romania. Since we basically have no market-culture and we are still in some sort of Wild-wild-west kind of economy, the prices here are &lt;span style="font-weight: bold;"&gt;even higher&lt;/span&gt; than in the EU. So, there you are: probably in the poorest country among the EU ones, and you have the biggest prices for computers.&lt;br /&gt;&lt;br /&gt;That would be one thing but there's more: you basically can't find decent brand workstations (powerfull desktops) and if you do, your best chance is if you live in Bucharest, the capital. And Bucharest is way in the east compared to Timisoara, and quite-ugly as a city might I add ;-)&lt;br /&gt;&lt;br /&gt;So, outside Bucharest you only have the major retailers (which means that you get &lt;span style="font-style: italic;"&gt;no service on-site&lt;/span&gt; and all your hardware is sent to Bucharest for service; scary thought for a laptop) or some medium-sized companies. As in Economy 101, when you sell something that's in short supply, what do you do ? Well, of course, you increase prices.&lt;br /&gt;&lt;br /&gt;Thus the local companies that &lt;span style="font-style: italic;"&gt;do have&lt;/span&gt; service on-site have even higher prices than the retailers.&lt;br /&gt;&lt;br /&gt;In summary: Price(Timisoara) &gt; Price(Bucharest) &gt; Price(EU) &gt;&gt;&gt;&gt;&gt; Price(US).&lt;br /&gt;&lt;br /&gt;To everyone that complains in the US about high Apple/HP prices or some other nonsense like this I have an advice: come to Romania for a while and live the experience :-)&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;End of trolling / &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;muble&lt;/span&gt;-grumble session.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-8413934635960942112?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/8413934635960942112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=8413934635960942112&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8413934635960942112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8413934635960942112'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/05/euro-ripoff-aka-gold-you-have-to-pay.html' title='Euro ripoff (aka The gold you have to pay for pretty glass in Romania / Timisoara)'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-2297251270908299564</id><published>2007-05-19T23:06:00.000+03:00</published><updated>2007-05-19T23:25:25.967+03:00</updated><title type='text'>Migrating to Derby (JavaDB) with schema</title><content type='html'>I went to a lot of trouble lately trying to migrate a database from MS SQL Server to &lt;a href="http://db.apache.org/derby/"&gt;Derby&lt;/a&gt; (aka &lt;a href="http://developers.sun.com/javadb/"&gt;JavaDB&lt;/a&gt;) [1]. I've used the &lt;a href="http://db.apache.org/ddlutils/"&gt;DDLUtils&lt;/a&gt; ant tasks to export-import the database.&lt;br /&gt;&lt;br /&gt;The major issue was that in my previous database we used a given schema and that schema wasn't recreated now by DDLUtils. I've tried tweaking the ant task parameters but still nothing. I even done some quick &lt;a href="http://www.gnu.org/software/sed/"&gt;sed scripts&lt;/a&gt; [2] to add the schema myself (rename tables from "oldname" to "schema.oldname" basically). But all this meant nothing. Plus that the database was 100MB+ and import time was well over an hour so I couldn't actually try a lot of times.&lt;br /&gt;&lt;br /&gt;The solution resided in the &lt;a href="http://db.apache.org/derby/faq.html#schema_exist"&gt;Derby FAQ&lt;/a&gt; but it wasn't until someone from the mailing list pointed it to me that it struck me:&lt;br /&gt;&lt;blockquote&gt;      The current schema for any connection&lt;span style="font-weight: bold;"&gt; defaults to&lt;/span&gt; a schema corresponding       to &lt;span style="font-weight: bold;"&gt;the user name&lt;/span&gt;.&lt;/blockquote&gt;You see, I was creating the database beforehand with some random user like "admin". I didn't notice this was the default schema. Also, while reading &lt;span style="font-style: italic;"&gt;the same&lt;/span&gt; FAQ, I just skipped to the part with SQL.&lt;br /&gt;&lt;br /&gt;So: if you migrate to Derby, always create an username with the same name as your schema (the one you import).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;1. I wouldn't actually put Derby on a production server but I feel better during development having the data in a more cross-platform DBMS . Plus, I'm spared of all the security issues MS SQL has (or at least my fear of having those ports open).&lt;br /&gt;&lt;br /&gt;2. Yep, sed. I know some XSLT might have been smarter but I'm quite rusty at that and there is no easy xslt shell/script I could use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-2297251270908299564?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/2297251270908299564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=2297251270908299564&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2297251270908299564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/2297251270908299564'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/05/migrating-to-derby-javadb-with-schema.html' title='Migrating to Derby (JavaDB) with schema'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-6745667922449638942</id><published>2007-05-11T16:53:00.000+03:00</published><updated>2007-05-11T17:15:09.474+03:00</updated><title type='text'>Building is fun with Hudson</title><content type='html'>I've used last year &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;Cruise Control&lt;/a&gt; and really liked the feeling a continuous integration and build system gives you. There you have a central place to see the health of the project (unit tests), linked to the VCS and a build server.&lt;br /&gt;&lt;br /&gt;This year, I've re-evaluated &lt;a href="http://maven.apache.org/continuum/"&gt;Continuum&lt;/a&gt; and Cruise Control and found out that I still had to work with some XML files to make it work. Plus, notification is exceptionally hard to get right.&lt;br /&gt;&lt;br /&gt;So, everything was paused until I found &lt;a href="https://hudson.dev.java.net/"&gt;Hudson&lt;/a&gt;. It's a web-application (like the other two), quite new and active (unlike the other two).&lt;br /&gt;&lt;br /&gt;It has the best out-of-the-box experience. Just deploy the WAR and configure your project. Continuum comes close here with Cruise Control third.&lt;br /&gt;&lt;br /&gt;Since NetBeans already generates proper ant targets for everything including tests, I just need to configure what ant task to run, which are the build artifacts and where to get the junit results from.&lt;br /&gt;&lt;br /&gt;Of course, I did stumble on some problems:&lt;br /&gt;- Running multiple ant targets it's impossible (ie. multiple build files) so you have to make another script that calls the others.&lt;br /&gt;- make sure junit.jar is in ant's classpath.&lt;br /&gt;&lt;br /&gt;But Hudson is impressive. Help messages at each step, SVN integration (with authentication), nice charts.&lt;br /&gt;&lt;br /&gt;It could still use some more reports and plugins but I think it has a bright future. I might even write some plugins myself if it gets selected for the build-server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-6745667922449638942?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/6745667922449638942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=6745667922449638942&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/6745667922449638942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/6745667922449638942'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/05/building-is-fun-with-hudson.html' title='Building is fun with Hudson'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-8923780843142881845</id><published>2007-05-07T00:51:00.000+03:00</published><updated>2007-05-07T01:29:39.336+03:00</updated><title type='text'>Still in OS land: OpenSolaris</title><content type='html'>After Ubuntu, I said I could give a chance to &lt;a href="http://www.opensolaris.org/"&gt;(Open)Solaris&lt;/a&gt;. I do remember Solaris from the Sparc stations we had at the University and I keep on reading about &lt;a href="http://www.opensolaris.org/os/community/zfs/"&gt;ZFS&lt;/a&gt; and &lt;a href="http://www.sun.com/bigadmin/content/dtrace/"&gt;dtrace&lt;/a&gt;, but I never actually used it much.&lt;br /&gt;&lt;br /&gt;So I just went and downloaded the DVD, burned it then installed Solaris with no fuss on top of the previous Ubuntu partition. Rebooted the system and it all worked! Even had an option to switch between Gnome and &lt;a href="http://en.wikipedia.org/wiki/Common_Desktop_Environment"&gt;CDE&lt;/a&gt; -- well that brings back memories...&lt;br /&gt;&lt;br /&gt;First, OpenSolaris (Developer version) really seems a Java programmer's kit: I get NetBeans 5.5 with Sun Java Application Server. Even the installer seems Java. Plus, I have Firefox, Thunderbird and a Terminal: that about covers most of the stuff you actually need while working. Sadly, no movie player like Xine or VLC.&lt;br /&gt;&lt;br /&gt;Of course, there was some strangeness:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;it also installs Sun One Studio which seems redundant with NetBeans but I didn't actually try it.&lt;/li&gt;&lt;li&gt;even if we do have &lt;acronym title="Sun Java Application Server"&gt;SJAS&lt;/acronym&gt; installed, it doesn't show up in NetBeans. Using the Server Manager is quite easy to add it and it took me about 3 minutes but it was strange. I guess it has something to do with the multi-user settings.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;So, wish me luck. I kept wanting to try out &lt;acronym title="Sun Java Application Server"&gt;SJAS&lt;/acronym&gt; clustering and doing this under Solaris seems the best solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-8923780843142881845?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/8923780843142881845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=8923780843142881845&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8923780843142881845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/8923780843142881845'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/05/still-in-os-land-opensolaris.html' title='Still in OS land: OpenSolaris'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-115859941088150043</id><published>2007-04-20T12:00:00.000+03:00</published><updated>2007-04-20T12:19:46.372+03:00</updated><title type='text'>Ubuntu 7.04 over-hyped</title><content type='html'>I've used Linux under some form or another for some time (I think 7 years or so). Started with some &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;SUSE&lt;/span&gt; then found out &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;RedHat&lt;/span&gt; and switched to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Ubuntu&lt;/span&gt; when Fedora turned out to be a mess.&lt;br /&gt;&lt;br /&gt;Since I'm a little stuck on Windows for the programming part I use nowadays mostly Windows (2000/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;XP&lt;/span&gt;) and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;OSX&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Ok&lt;/span&gt;, so I saw all the hype about &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Ubuntu&lt;/span&gt; 7.04 and downloaded the torrent. Let's say I wasn't impressed.&lt;br /&gt;&lt;br /&gt;I used a lot at my previous job &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Ubuntu&lt;/span&gt; on a T60 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Thinkpad&lt;/span&gt; so I knew how it should feel. This new release was about the same plus a fancy-er splash screen.&lt;br /&gt;&lt;br /&gt;Even more, the Live-CD detected my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;NVidia&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Quadro&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;NVS&lt;/span&gt; graphics card and installed the driver for it. Thus I could enable "Desktop Effects" and look at the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;wobbly&lt;/span&gt; window (then disable it immediately).&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Ok&lt;/span&gt;, so I've installed 7.04. The first surprise: &lt;span style="font-weight: bold;"&gt;it didn't boot-up&lt;/span&gt; ! I mean, it did, but in text mode.&lt;br /&gt;&lt;br /&gt;You know why ? The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;XOrg&lt;/span&gt; configuration still had the reference to the &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;nvidia&lt;/span&gt;&lt;/span&gt; driver but the installer didn't actually install the driver on the hard-drive. Since this is something common (to me), I just went to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;xorg&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;conf&lt;/span&gt;, and replaced the driver with the default &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;nv&lt;/span&gt;&lt;/span&gt;. I only assume a normal user would have given up at this point with no GUI.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Ok&lt;/span&gt;, with &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;nv&lt;/span&gt;&lt;/span&gt; I'm able to &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;startx&lt;/span&gt; &lt;/span&gt;and install the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;nvidia&lt;/span&gt; driver (plus some update manager ... update). I need to restart the system (why ?) because of the new driver.&lt;br /&gt;&lt;br /&gt;Again, it doesn't boot ! Why ? I have some &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;wacom&lt;/span&gt;&lt;/span&gt; input devices in my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;xorg&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;conf&lt;/span&gt; and it fails while looking for the device (/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;dev&lt;/span&gt;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;wacom&lt;/span&gt; or something).&lt;br /&gt;&lt;br /&gt;Again, I edit &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;xorg&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;conf&lt;/span&gt;, comment those things and -- finally ! -- I'm able to boot normally.&lt;br /&gt;&lt;br /&gt;The nice thing is that I'm able to install Sun's &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;JDK&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_31"&gt;immediately&lt;/span&gt;. When I get to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;Netbeans&lt;/span&gt; in Synaptic I notice a warning that that package doesn't actually &lt;span style="font-style: italic;"&gt;contain&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;Netbeans&lt;/span&gt;, I have to manually download the tar. The package &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;Netbeans&lt;/span&gt; from Synaptic just provides "integration" with Gnome. Huh ?&lt;br /&gt;&lt;br /&gt;So, this is the first &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;Ubuntu&lt;/span&gt; that crashes on me at install time and basically forces me to go inside &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;config&lt;/span&gt; files. If anything, I would say it's a regression and not an evolution.&lt;br /&gt;&lt;br /&gt;One could say that it's my graphics's card fault, but since &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;Ubuntu&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;does&lt;/span&gt; provide the users nice point-n-click ways to install those drivers, anyone would expect for those things to &lt;span style="font-style: italic;"&gt;work&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Thus, I'm still waiting on my Windows/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;OSX&lt;/span&gt; setup with the intention of buying another Mac as soon as Leopard comes out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-115859941088150043?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/115859941088150043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=115859941088150043&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115859941088150043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115859941088150043'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/04/ubuntu-704-over-hyped.html' title='Ubuntu 7.04 over-hyped'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-1553387441252476366</id><published>2007-01-12T13:15:00.000+02:00</published><updated>2007-01-12T13:33:43.162+02:00</updated><title type='text'>NetBeans Platform: CallbackSystemAction sync madness</title><content type='html'>An annoying problem I had this week involved the &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-util/org/openide/util/actions/CallbackSystemAction.html"&gt;CallbackSystemAction &lt;/a&gt;class.&lt;br /&gt;&lt;br /&gt;Basically the general ideea of this type of action is this: you have the Action implementation, but the "#actionPerformed code" is deferred.&lt;br /&gt;&lt;br /&gt;What was my problem: depending on the user selection in an explorer, my action was supposed to become enabled or not (plus some othe conditions).&lt;br /&gt;&lt;br /&gt;So, the javadoc says that way to do it is by setting an action in the ActionMap of the TopComponent.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt; TopComponent tc = ...;&lt;br /&gt;javax.swing.Action yourCopyAction = ...; // the action to invoke instead of Copy&lt;br /&gt;&lt;br /&gt;CopyAction globalCopyAction = SystemAction.get (CopyAction.class);&lt;br /&gt;Object key = globalCopyAction.getActionMapKey(); // key is a special value defined by all CallbackSystemActions&lt;br /&gt;&lt;br /&gt;// and finally:&lt;br /&gt;tc.getActionMap ().put (key, yourCopyAction);&lt;/blockquote&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The problem is that&lt;span style="font-style: italic;"&gt; there is no listener on the action map.&lt;/span&gt; So if I want later to disable my action and I do a tc.getActionMap().remove(key) -- it &lt;span style="font-weight: bold;"&gt;won't&lt;/span&gt; work ! I mean, it will work if you change the current TopComponent and come back to the original (I guess there are some event thrown there that CallbackSystemAction catches and does a refresh).&lt;br /&gt;&lt;br /&gt;So, using the ActionMap.put and #remove doesn't work !&lt;br /&gt;&lt;br /&gt;Ok, I said to myself, I'll just use the deprecated &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-util/org/openide/util/actions/CallbackSystemAction.html#setActionPerformer%28org.openide.util.actions.ActionPerformer%29"&gt;#setActionPerformer&lt;/a&gt; , which seems to work better. Only it is deprecated, which is not good.&lt;br /&gt;&lt;br /&gt;I went and complained on the dev@openide mailing list and I got a tip that I should change my TopComponent's lookup in order to fire the events that CallbackSystemAction might catch to refresh itself.&lt;br /&gt;&lt;br /&gt;But you can't call #associateLookup twice ! Arr.&lt;br /&gt;&lt;br /&gt;So I just started reading carefully the CallbackSystemAction source code and I've noticed that it does put a listener on the enabled/disable state of the TopComponent's action (ie. yourCopyAction in the example above).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;So -- what's the solution ? &lt;/span&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;Dead simple&lt;/span&gt;&lt;span style="font-size:130%;"&gt;: call getActionMap().put(...) &lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;once &lt;/span&gt;&lt;span style="font-size:130%;"&gt;and then &lt;/span&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;just do a #setEnabled on  &lt;span style="font-weight: bold;"&gt;your &lt;/span&gt;Action&lt;/span&gt;&lt;span style="font-size:130%;"&gt;. Simple -- but very non-intuitive.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Actually in this situation I would say that the Javadoc was more confusing than useful because it says&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The action will be automatically disabled  when it has no performer.&lt;/blockquote&gt;&lt;br /&gt;and removing your action from the ActionMap means exactly that: no performer...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-1553387441252476366?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/1553387441252476366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=1553387441252476366&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1553387441252476366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/1553387441252476366'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/01/netbeans-platform-callbacksystemaction.html' title='NetBeans Platform: CallbackSystemAction sync madness'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-3640925503695382813</id><published>2007-01-06T13:45:00.000+02:00</published><updated>2007-01-06T15:24:34.279+02:00</updated><title type='text'>NetBeans Platform: Combobox in property editor</title><content type='html'>Happy new year everyone !&lt;br /&gt;&lt;br /&gt;I'm going to talk today about something simple GUI-wise but quite a lot asked on the mailing lists: how does one display a combobox in the property editor ? Actually, how does one use an editor that displays a combobox.&lt;br /&gt;&lt;br /&gt;What should get you started with this task (and other editor customizing) is &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-explorer/org/openide/explorer/doc-files/propertyViewCustomization.html"&gt;a little file&lt;/a&gt; from the Platform javadoc.&lt;br /&gt;&lt;br /&gt;This is what we plan to get:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7kuGo66xDMI/RZ-f8uP3EKI/AAAAAAAAAAM/euxH7ujjDjw/s1600-h/combobox-editor.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_7kuGo66xDMI/RZ-f8uP3EKI/AAAAAAAAAAM/euxH7ujjDjw/s400/combobox-editor.JPG" alt="" id="BLOGGER_PHOTO_ID_5016904375469543586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In order to do this note the &lt;i&gt;Custom parameters in core editors&lt;/i&gt; paragraph from the &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-explorer/org/openide/explorer/doc-files/propertyViewCustomization.html"&gt;above link&lt;/a&gt; and the fact that for java.lang.Integer properties there are some custom keys we can use:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;stringKeys - an array of strings to be present in the combobox&lt;/li&gt;&lt;li&gt;intValues - an array of integers representing the values of the selection in the combobox.&lt;/li&gt;&lt;/ul&gt;So something like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-nodes/org/openide/nodes/Node.Property.html"&gt;Node.Property&lt;/a&gt; p=new YourProperty(Integer.class);&lt;br /&gt;p.&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/beans/FeatureDescriptor.html#setValue%28java.lang.String,%20java.lang.Object%29"&gt;setValue&lt;/a&gt;("intValues",new int[]{1,2,3,4});&lt;br /&gt;p.&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/beans/FeatureDescriptor.html#setValue%28java.lang.String,%20java.lang.Object%29"&gt;setValue&lt;/a&gt;("stringKeys",new String[]{"One","Two","Three","Four"});&lt;br /&gt;&lt;br /&gt;is all you need.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7kuGo66xDMI/RZ-imOP3ELI/AAAAAAAAAAU/5RyiU95034k/s1600-h/combobox-editor-expanded.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_7kuGo66xDMI/RZ-imOP3ELI/AAAAAAAAAAU/5RyiU95034k/s400/combobox-editor-expanded.JPG" alt="" id="BLOGGER_PHOTO_ID_5016907287457370290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note&lt;/span&gt;: Please take care that for the current property&lt;br /&gt;&lt;ul&gt;&lt;li&gt;#getValue is the &lt;span style="font-style: italic;"&gt;index&lt;/span&gt; in the intValues array. So if you want to see "Three" in the combobox, you return the number 2 in #getValue.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;#setValue is called with the actual number from intValues (&lt;span style="font-style: italic;"&gt;not&lt;/span&gt; the index). So if the user selects "Four" from the combobox, #setValue(4) will be called.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-3640925503695382813?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/3640925503695382813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=3640925503695382813&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3640925503695382813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3640925503695382813'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2007/01/netbeans-platform-combobox-in-property.html' title='NetBeans Platform: Combobox in property editor'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7kuGo66xDMI/RZ-f8uP3EKI/AAAAAAAAAAM/euxH7ujjDjw/s72-c/combobox-editor.JPG' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-4351970795218281780</id><published>2006-12-15T22:42:00.000+02:00</published><updated>2006-12-15T22:59:07.146+02:00</updated><title type='text'>NetBeans Platform: Carefull with Matisse and FocusTraversalPolicy  (aka Focus subsystem)</title><content type='html'>Matisse is a really nice GUI editor. But it doesn't seem to be quite up-to-date with the Java Focus Subsystem.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JComponent.html#setNextFocusableComponent%28java.awt.Component%29"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;JComponent&lt;/span&gt;.&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;setNextFocusableComponent&lt;/span&gt;()&lt;/a&gt; is deprecated since  &lt;span style="font-weight: bold;"&gt;1.4&lt;/span&gt; ! And yet, this is all Matisse has to offer.&lt;br /&gt;&lt;br /&gt;The right way to specify focus cycles since 1.4 is via &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/FocusTraversalPolicy.html"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;FocusTraversalPolicy&lt;/span&gt;&lt;/a&gt;. You just set &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Container.html#setFocusCycleRoot%28boolean%29"&gt;Container.&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;setFocusCycleRoot&lt;/span&gt;(true)&lt;/a&gt; and then &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Container.html#setFocusTraversalPolicy%28java.awt.FocusTraversalPolicy%29"&gt;install&lt;/a&gt; your &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;FocusTraversalPolicy&lt;/span&gt; subclass.&lt;br /&gt;&lt;br /&gt;The problem is that &lt;span style="font-style: italic;"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;setNextFocusableComponent&lt;/span&gt; &lt;/span&gt;has priority over the focus policy:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;  &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;Overrides &lt;/span&gt;the default &lt;code style="font-style: italic;"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;FocusTraversalPolicy&lt;/span&gt;&lt;/code&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;for this  &lt;code&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;JComponent&lt;/span&gt;&lt;/code&gt;'s focus traversal cycle by &lt;span style="font-weight: bold;"&gt;unconditionally  setting the specified &lt;/span&gt;&lt;code style="font-weight: bold;"&gt;Component&lt;/code&gt;&lt;span style="font-weight: bold;"&gt; as the next  &lt;/span&gt;&lt;code style="font-weight: bold;"&gt;Component&lt;/code&gt; in the cycle, and this &lt;code&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;JComponent&lt;/span&gt;&lt;/code&gt;  as the specified &lt;code&gt;Component&lt;/code&gt;'s previous  &lt;code&gt;Component&lt;/code&gt; in the cycle. (quote from &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JComponent.html#setNextFocusableComponent%28java.awt.Component%29"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Javadoc&lt;/span&gt;&lt;/a&gt;, &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;emphasys&lt;/span&gt; mine).&lt;/blockquote&gt;&lt;br /&gt;So, if you try to define in Matisse some focus cycle the old fashion way (the only way possible right now) but then you want to use a &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;FocusTraversalPolicy&lt;/span&gt; &lt;span style="font-style: italic;"&gt;you &lt;span style="font-weight: bold;"&gt;have to&lt;/span&gt; go back and remove all the &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;nextComponents&lt;/span&gt; otherwise it will break everything !&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;My advice: &lt;span style="font-weight: bold;"&gt;don't&lt;/span&gt; use &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;nextFocusable&lt;/span&gt; on Matisse ! Do it by hand with &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;FocusTraversalPolicy&lt;/span&gt; and wait for the 6.0 release when this should be fixed.&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-4351970795218281780?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/4351970795218281780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=4351970795218281780&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4351970795218281780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/4351970795218281780'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/12/netbeans-platform-carefull-with-matisse.html' title='NetBeans Platform: Carefull with Matisse and FocusTraversalPolicy  (aka Focus subsystem)'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-7087293647908101531</id><published>2006-12-14T15:03:00.000+02:00</published><updated>2006-12-14T15:24:43.589+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans platform'/><title type='text'>NetBeans Platform: Watch out for the Platform security !</title><content type='html'>I always had the impression that the Platform is quite lax security-wise. Since you have in the &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-util/org/openide/util/Lookup.html"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Lookup&lt;/span&gt; &lt;/a&gt;the system &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ClassLoader.html"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;ClassLoader&lt;/span&gt; &lt;/a&gt;it's not like they can restrict your module that much.&lt;br /&gt;&lt;br /&gt;Well, I was a little mistaken. &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;Apparently&lt;/span&gt; they do add some  security checks.&lt;br /&gt;&lt;br /&gt;And a particularly strange one is a security check on &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#exit%28int%29"&gt;System.exit()&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Actually, it makes sense to restrict calls to System.exit() but the way I've discovered it is surprising: I just moved a &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;JFrame&lt;/span&gt; (made with Matisse) from the Java app to the platform. And by default, &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;JFrames&lt;/span&gt;, have &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29"&gt;EXIT_ON_CLOSE&lt;/a&gt; set.&lt;br /&gt;&lt;br /&gt;Well, on the Platform, the &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;JFrame&lt;/span&gt; won't even show up ! Why ? Because of the EXIT_ON_CLOSE property. It eventually boils down to something like:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/SecurityManager.html"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;SecurityManager&lt;/span&gt;&lt;/a&gt; security = System.&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;getSecurityManager&lt;/span&gt;();&lt;br /&gt;         if (security != null) {&lt;br /&gt;             security.&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;checkExit&lt;/span&gt;(0);&lt;br /&gt;         }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;which &lt;span style="font-weight: bold;"&gt;fails&lt;/span&gt; inside the platform with an org.netbeans.ExitSecurityException .&lt;br /&gt;&lt;br /&gt;So the problem is that &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;initComponents&lt;/span&gt;() throws this unchecked exception so the entire new Frame().&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;setVisible&lt;/span&gt;(true) call fails. Even more: &lt;span style="font-style: italic;"&gt;this doesn't show up in the logs&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Btw&lt;/span&gt;, System.exit() works just fine during &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-modules/org/openide/modules/ModuleInstall.html"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;ModuleInstall&lt;/span&gt;&lt;/a&gt;. It's &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-util/org/openide/LifecycleManager.html"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;LifecycleManager&lt;/span&gt; &lt;/a&gt;that breaks down at that (early) point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-7087293647908101531?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/7087293647908101531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=7087293647908101531&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7087293647908101531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7087293647908101531'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/12/netbeans-platform-watch-out-for.html' title='NetBeans Platform: Watch out for the Platform security !'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-7918896243441378418</id><published>2006-12-11T11:04:00.000+02:00</published><updated>2006-12-11T11:33:29.010+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans platform'/><title type='text'>NetBeans Platform: Node.Property custom editor</title><content type='html'>The property window is a nice quick way to let the user view and edit some values. It's not recommended as a valid approach (one should make its own windows) but it is &lt;span style="font-style: italic;"&gt;quick&lt;/span&gt;. Just provide some activated nodes, open the Properties windows and all the declared &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-nodes/org/openide/nodes/Node.PropertySet.html"&gt;PropertySets &lt;/a&gt;will be visible.&lt;br /&gt;&lt;br /&gt;The nice part is that we already have a lot of predefined PropertyEditors for boolean/integer/string/font/color/date values.&lt;br /&gt;&lt;br /&gt;But if one of the editors doesn't please us, just use &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-nodes/org/openide/nodes/Node.Property.html#getPropertyEditor%28%29"&gt;Node.Property.getPropertyEditor()&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;For example if we need a different date format, it would boil down to a new class:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  class DatePropertyEditor extends &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/beans/PropertyEditorSupport.html"&gt;PropertyEditorSupport&lt;/a&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   private &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/text/SimpleDateFormat.html"&gt;SimpleDateFormat &lt;/a&gt;sdf=new &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/text/SimpleDateFormat.html"&gt;SimpleDateFormat&lt;/a&gt;("yyyy/mm/dd");&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;   public String &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/beans/PropertyEditorSupport.html#getAsText%28%29"&gt;getAsText&lt;/a&gt;(){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    if(&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/beans/PropertyEditorSupport.html#getValue%28%29"&gt;getValue&lt;/a&gt;()==null){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     return "";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }else{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     return sdf.format((Date)&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/beans/PropertyEditorSupport.html#getValue%28%29"&gt;getValue&lt;/a&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We just return a new instance of this class in getPropertyEditor() and that's it.&lt;br /&gt;&lt;br /&gt;This gets a little more complicated if you actually need to &lt;span style="font-style: italic;"&gt;edit &lt;/span&gt;the value as you have to provide a&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/beans/PropertyEditorSupport.html#getCustomEditor%28%29"&gt; custom editor component&lt;/a&gt; but for simple read-only properties, this is all there is !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-7918896243441378418?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/7918896243441378418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=7918896243441378418&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7918896243441378418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/7918896243441378418'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/12/netbeans-platform-nodeproperty-custom.html' title='NetBeans Platform: Node.Property custom editor'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-3985622322648063562</id><published>2006-12-06T14:46:00.000+02:00</published><updated>2006-12-11T18:30:41.733+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans platform'/><title type='text'>NetBeans Platform: 1st NetBeans Platform workshop in Timisoara. Make that in Romania</title><content type='html'>Today was the &lt;span style="font-weight: bold;"&gt;first &lt;/span&gt;NetBeans Platform workshop and presentation in Timisoara, held by your's truly. I'm also about certain it's the first in Romania too.&lt;br /&gt;&lt;br /&gt;My ex-employer had this Java-workshop about various subjects (Struts, MVC, Hibernate, Design Patterns, Swing &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; NetBeans (Platform) ).&lt;br /&gt;&lt;br /&gt;The presentation was quite nice. There were few people but with many questions (yeah, I'm looking at you Dan ! ).&lt;br /&gt;&lt;br /&gt;I had a small OpenOffice presentation as the starting point and in the end I worked only in the NetBeans IDE, showing off:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html"&gt;module system&lt;/a&gt; (&lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#how-vers"&gt;dependencies&lt;/a&gt;, modules, module suite, module enable / disable).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-actions/org/openide/actions/doc-files/api.html"&gt;Actions API&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-netbeans-api-progress/org/netbeans/api/progress/package-summary.html"&gt;Progress API&lt;/a&gt; and &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-util/org/openide/util/RequestProcessor.html"&gt;RequestProcessor&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-windows/org/openide/windows/TopComponent.html"&gt;TopComponents &lt;/a&gt;with &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-windows/org/openide/windows/TopComponent.html#setActivatedNodes%28org.openide.nodes.Node%5B%5D%29"&gt;activated nodes&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-nodes/org/openide/nodes/Node.html"&gt;Node &lt;/a&gt;&lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-nodes/org/openide/nodes/Node.PropertySet.html"&gt;PropertySets&lt;/a&gt; (quick demo using the Properties window -- &lt;span style="font-size:85%;"&gt;that's why I used activated nodes and not the TopComponent Lookup&lt;/span&gt;).&lt;/li&gt;&lt;li&gt;Service declaration with &lt;a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Service%20Provider"&gt;META-INF/services&lt;/a&gt; and lookup using &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-util/org/openide/util/Lookup.html#getDefault%28%29"&gt;Lookup.getDefault()&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-util/org/openide/util/Lookup.Result.html#addLookupListener%28org.openide.util.LookupListener%29"&gt;Lookup listener on Lookup.Result&lt;/a&gt;. Nice to detect new service providers being activated (with a new module).&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-netbeans-modules-options-api/allclasses-frame.html"&gt;Options Dialog and SPI&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I only remembered I had a camera at the end of all the discussions. I was too bussy answering questions ;)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://static.flickr.com/121/315649473_589614d42c.jpg?v=0"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 321px; height: 240px;" src="http://static.flickr.com/121/315649473_589614d42c.jpg?v=0" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll try and post another picture with the NetBeans powerpoint in the background later on today or tomorrow. Of you could just download &lt;a href="http://web.info.uvt.ro/%7Efierarul/typo3/fileadmin/platform/netbeans-platform-presentation.odp"&gt;the presentation&lt;/a&gt; together with the &lt;a href="http://web.info.uvt.ro/%7Efierarul/typo3/fileadmin/platform/demo-alcatel.zip"&gt;small application&lt;/a&gt; written on the spot.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UPDATE(11.dec.2006): &lt;/span&gt;&lt;a href="http://www.flickr.com/photos/emilian/tags/netbeansplatform/"&gt;New photos&lt;/a&gt; on Flickr.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-3985622322648063562?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/3985622322648063562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=3985622322648063562&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3985622322648063562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3985622322648063562'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/12/netbeans-platform-1st-netbeans-workshop.html' title='NetBeans Platform: 1st NetBeans Platform workshop in Timisoara. Make that in Romania'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-3271992935125496467</id><published>2006-12-05T23:53:00.000+02:00</published><updated>2006-12-06T00:00:33.762+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans platform'/><title type='text'>NetBeans Platform: TopComponentGroup strangeness</title><content type='html'>Ok, I never used window groups as I wasn't that used to have that many interdependent windows.&lt;br /&gt;&lt;br /&gt;It seems easier to add a "Palette" inside your JPanel and it surely is easier to handle than to make a separate window tha listens on the Lookup/activated nodes and reacts.&lt;br /&gt;&lt;br /&gt;TopComponentGroup seems like the next logical step: if you already started using a whole bunch of windows that are interconnected somehow put them in the same group.&lt;br /&gt;&lt;br /&gt;The teoretical advantage would be that&lt;br /&gt; 1. You get to easily open and close the whole group. You don't even have to know *who* is in the group. (Note the nice decoupling you get there).&lt;br /&gt;&lt;br /&gt; 2. The Group implementation remembers the closed/open state of contained TopComponents and restores them in the same way. This makes it consistent with the user.&lt;br /&gt;&lt;br /&gt;Well, it's number 2 that annoys the hell out of me. For example: what if I *don't* want to remember the state ? What if I have 3 TopComponents that work together but they should *always* be in an open() state together ?&lt;br /&gt;&lt;br /&gt;What do you do then ? Of course: do it manually. You lose the decoupling and have to keep hard references to your "buddy"-windows and .open() or .close() them by hand when needed.&lt;br /&gt;&lt;br /&gt;Which means that by this point TopComponentGroup is useless and you might as well remove all the code/xmls. Grr.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-3271992935125496467?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/3271992935125496467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=3271992935125496467&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3271992935125496467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3271992935125496467'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/12/netbeans-platform-topcomponentgroup.html' title='NetBeans Platform: TopComponentGroup strangeness'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-3055097376571263865</id><published>2006-11-22T22:48:00.000+02:00</published><updated>2006-11-22T23:09:00.988+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans platform'/><title type='text'>NetBeans Platform: Lookup.Result garbage collection trick and active TopComponent lookup</title><content type='html'>In the old days, one could listen on changes in the "&lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-windows/org/openide/windows/TopComponent.Registry.html#getActivatedNodes%28%29"&gt;activated nodes&lt;/a&gt;" of the &lt;span style="font-weight: bold;"&gt;active&lt;/span&gt; TopComponent with  a listener on &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-windows/org/openide/windows/TopComponent.html#getRegistry%28%29"&gt;TopComponent.Registry&lt;/a&gt; paying attention to the &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-windows/org/openide/windows/TopComponent.Registry.html#PROP_ACTIVATED_NODES"&gt;PROP_ACTIVATED_NODES&lt;/a&gt; property.&lt;br /&gt;&lt;br /&gt;Now Lookup is a much nicer way to show activate "objects". The way to listen globally to&lt;br /&gt;changes in the Lookup of the active TopComponent is via &lt;tt&gt;&lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-util/org/openide/util/Utilities.html#actionsGlobalContext%28%29"&gt;Utilities.actionsGlobalContext()&lt;/a&gt; &lt;/tt&gt;(which is a Lookup &lt;span style="font-style: italic;"&gt;itself&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;The trick is simple, you add a &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-util/org/openide/util/LookupListener.html"&gt;LookupListener&lt;/a&gt; on the &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-util/org/openide/util/Lookup.Result.html"&gt;Lookup.Result&lt;/a&gt; you get from &lt;a href="http://wiki.netbeans.info/wiki/view/DevFaqTrackGlobalSelection"&gt;Utilities.actionsGlobalContext().lookup(yourLookupTemplete)&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;What is the garbage collection trick ?&lt;br /&gt;&lt;br /&gt;Well, it's quite odd for me the existence of the Lookup.Result class. Because you don't do something like &lt;span style="font-style: italic;"&gt;Lookup.addLookupListener(yourLookupTemplate, yourLookupListener)&lt;/span&gt;. If you &lt;span style="font-style: italic;"&gt;were&lt;/span&gt; to do something like this, you would expect that your listener lives as much as the Lookup. Meaning in the case of a "global" listener -- forever.&lt;br /&gt;&lt;br /&gt;But what you &lt;span style="font-style: italic;"&gt;do do&lt;/span&gt; is actually add a listener on Lookup.Result, which &lt;span style="font-style: italic;"&gt;could be garbage collected&lt;/span&gt; and thus your listener also.&lt;br /&gt;&lt;br /&gt;Generally, keep a hard reference on the Lookup.Result (or make a closure on it with some final  keyword and a reference from the anonymous listener). Because if you don't -- the garbage collector might kick in quite soon and your listener won't be called.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-3055097376571263865?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/3055097376571263865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=3055097376571263865&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3055097376571263865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/3055097376571263865'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/11/netbeans-platform-lookupresult-garbage.html' title='NetBeans Platform: Lookup.Result garbage collection trick and active TopComponent lookup'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-575228857969105882</id><published>2006-11-20T12:25:00.000+02:00</published><updated>2006-11-21T09:31:23.435+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans platform'/><title type='text'>NetBeans Platform: Branded resources</title><content type='html'>OK, you've probably been here too: how does one load a Branded resource ? Let's say... the splash screen.&lt;br /&gt;&lt;br /&gt;Well, let me tell you the stages you might try  after you've found out that it's "org/netbeans/core/startup/splash.gif" :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use the ClassLoader from Lookup to load the resource. What &lt;span class="on" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;does this do ? It returns the default, &lt;span style="font-weight: bold;"&gt;non-branded&lt;/span&gt; splash.&lt;/li&gt;&lt;li&gt;getClass().getResource(). Same as above.&lt;/li&gt;&lt;li&gt;new URL(). Wrong !&lt;/li&gt;&lt;li&gt;Utilities.loadImage(string). Still wrong.&lt;/li&gt;&lt;/ul&gt;Of course, the &lt;span style="font-style: italic;"&gt;nbres://&lt;/span&gt; protocol might also help (after all it's a NetBeans resource we're talking about) but you know what ? It also fails (with NPE) except for the new URL method.&lt;br /&gt;&lt;br /&gt;So ? What is the solution ? Well, it's &lt;a href="http://www.netbeans.org/download/dev/javadoc/org-openide-util/org/openide/util/Utilities.html#loadImage%28java.lang.String,%20boolean%29"&gt;Utilities.loadImage(string, true) &lt;/a&gt;. This is the only one that does the localized/branded woodoo. I'm still not certain why the nbres:// stuff didn't work...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-575228857969105882?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/575228857969105882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=575228857969105882&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/575228857969105882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/575228857969105882'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/11/netbeans-platform-branded-resources.html' title='NetBeans Platform: Branded resources'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-115912582054623589</id><published>2006-09-24T22:15:00.000+03:00</published><updated>2006-11-01T15:40:46.874+02:00</updated><title type='text'>Busy blogless month</title><content type='html'>It has been a really busy month since the last time I've blogged about the NetBeans Platform (or anything else).&lt;br /&gt;&lt;br /&gt;Mainly it consisted of:&lt;br /&gt;&lt;br /&gt;* one week holiday&lt;br /&gt;* another super-busy week at work trying to do a quick catch-up for an urgent (aren't they all ?) project&lt;br /&gt;* another week working and being part-time sick&lt;br /&gt;* another week still recovering and starting to remember the Platform.&lt;br /&gt;&lt;br /&gt;Basically my MindMapping application isn't near as ready as I would have liked (and there is at least another person working on the same thing: MindMapping with Visual library + NetBeans Platform). Bug it will be ready when it's ready. No deadline here. I was thinking maybe also use the new-ish StarOffice integration with NB that I kept reading about.&lt;br /&gt;&lt;br /&gt;The good news is that I'll be working more on NetBeans Platform-related tasks so watch out for new hints.&lt;br /&gt;&lt;br /&gt;I've also received a new Mac Mini (well, PPC actually not the new Core Duo) so I've got myself some new display/keyboard too ! A whole bunch of new stuff to make me want develop.&lt;br /&gt;&lt;br /&gt;BTW: forgot to mention I've also got an article on the netbeans.org website. That was quite an interesting experience ! (you should see the blog traffic spike :) ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-115912582054623589?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/115912582054623589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=115912582054623589&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115912582054623589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115912582054623589'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/09/busy-blogless-month.html' title='Busy blogless month'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-115634155822808950</id><published>2006-08-23T16:46:00.000+03:00</published><updated>2006-11-01T15:40:46.762+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans platform'/><title type='text'>NetBeans Platform: StatusLineElementProvider order and Progress bar</title><content type='html'>Using the nice META-INF/service, one can declare it's own little status-bar piece by implementing &lt;a href="http://www.netbeans.org/download/dev/javadoc/org-openide-awt/org/openide/awt/StatusLineElementProvider.html"&gt;StatusLineElementProvider&lt;/a&gt; . You basically just return your Component that will be placed on that IDE/Platform status bar.&lt;br /&gt;&lt;br /&gt;What the javadoc for StatusLineElementProvider doesn't say is how does one define the &lt;span style="font-style: italic;"&gt;order&lt;/span&gt; for the components in the status bar.&lt;br /&gt;&lt;br /&gt;Well, since we are using the services, then Lookup has something to do with this. Indeed, the documentation &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-util/org/openide/util/doc-files/api.html"&gt;states this&lt;/a&gt; and also mentiones two other Lookup features (aka extensions): you can remove service implementations and you can define the &lt;span style="font-style: italic;"&gt;order&lt;/span&gt; they are returned. Of course, this order is used for StatusLineElementProvider too !&lt;br /&gt;&lt;br /&gt;So, just edit the org.openide.awt.StatusLineElementProvider file and add after the implementation class name something like #position=10 to define a position for your implementation.&lt;br /&gt;&lt;br /&gt;At Platform startup these will be instantiated starting with the smallest position and going up.&lt;br /&gt;&lt;br /&gt;Another thing: the Progress API line element has position number &lt;span style="font-style: italic;"&gt;-13&lt;/span&gt;. So, if you use -14, -15 for 2 fake items, you get something like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4620/3244/1600/Screenshot-Re-eMind%20%20CCC-1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4620/3244/320/Screenshot-Re-eMind%20%20CCC-1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you use bigger numbers you get something like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4620/3244/1600/Screenshot-Re-eMind%20%20CCC.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4620/3244/320/Screenshot-Re-eMind%20%20CCC.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And, I could also get rid of the progress bar altogether with&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#-org.netbeans.progress.module.ProgressVisualizerProvider&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Enjoy.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;If this was helpful for you then maybe you'll like reading the other NetBeans Platform-related posts.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;--&lt;br /&gt;Emilian Bold&lt;br /&gt;Java-loving consulting services from Timisoara, Romania.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-115634155822808950?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/115634155822808950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=115634155822808950&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115634155822808950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115634155822808950'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/08/netbeans-platform-statuslineelementpro.html' title='NetBeans Platform: StatusLineElementProvider order and Progress bar'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-115633551980505046</id><published>2006-08-23T15:18:00.000+03:00</published><updated>2006-11-01T15:40:46.705+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans platform'/><title type='text'>NetBeans Platform: Showing Progress to the user</title><content type='html'>The &lt;a href="http://www.netbeans.org/project/www/download/dev/javadoc/org-netbeans-api-progress/org/netbeans/api/progress/package-summary.html"&gt;Progress API&lt;/a&gt; is a new (I've noticed it in the 5.0 release) and usefull little API. It has a rather simple task: display to the user the Progress of long tasks.&lt;p class="mobile-post"&gt;Usually it makes sense to use it if you have a task that may run in the background. If you need to block the whole IDE I guess you need to do it in a modal dialog-way.&lt;/p&gt;&lt;p class="mobile-post"&gt;But most of the long tasks may safely run in the background. With Progress API you just declare your new task and then in the lower-right part of the main window you'll see a progress bar.&lt;/p&gt;&lt;p class="mobile-post"&gt;Usually you have two kinds of tasks: tasks execute a predetermined number of steps and you could estimate something like a percentage realised so far and tasks that could go on for ever.&lt;/p&gt;&lt;p class="mobile-post"&gt;The fun part about the Progress API is not only that it allows you to have &lt;span style="font-style: italic;"&gt;*determinate*&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;*indeterminate*&lt;/span&gt; kind of progress handles (this is how your little presenter is called) but it also allows you to switch between determinate and indeterminate tasks.&lt;/p&gt;&lt;p class="mobile-post"&gt;Imagine this:  you take a locally-saved HTML file and need to re-save it with links up to a depth. For all local links you pretty much know it's going to take little time to copy the file so you have a determined progress (with a percentage shown) but once you start downloading something from the net you have no ideea how much it will take. So you switch to indeterminate and the user sees just an indefinite progress bar.&lt;/p&gt;&lt;p class="mobile-post"&gt;Even better, you could have more than one task running at one point. So if you click on the progress bar for the current task, a popup will appear with all the tasks.&lt;/p&gt;&lt;p class="mobile-post"&gt;Did I mention tasks could be canceled ? Yeap, you could declare that too and a small "close" button will appear next to the progress bar. Really handly.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4620/3244/1600/progress-api-list.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4620/3244/320/progress-api-list.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="mobile-post"&gt;Now, if you need this for standalone non-Platform based apps, you might find  &lt;a href="https://progress-api.dev.java.net/"&gt;https://progress-api.dev.java.net/&lt;/a&gt; usefull. There is one app where I used it and it works great !&lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;On holiday during the 24 august - 31 september period.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class="mobile-post"&gt;&lt;span style="font-size:85%;"&gt;--&lt;br /&gt;Emilian Bold&lt;br /&gt;http://emilian-bold.blogspot.com/&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="mobile-post"&gt;&lt;span style="font-size:85%;"&gt;Java and NetBeans Platform-loving consulting services from Timisoara, Romania.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-115633551980505046?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/115633551980505046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=115633551980505046&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115633551980505046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115633551980505046'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/08/netbeans-platform-showing-progress-to.html' title='NetBeans Platform: Showing Progress to the user'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-115623603175040878</id><published>2006-08-22T11:22:00.000+03:00</published><updated>2006-11-01T15:40:46.646+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans platform'/><title type='text'>NetBeans Platform: Options Dialog isValid() or implement thy TODOs</title><content type='html'>The Options Dialog API allows an &lt;span style="font-style: italic;"&gt;invalid&lt;/span&gt; state for the panels.This is normal, it could happen that user changes lead to an invalid state and you don't want to set some magic default. So, you force the user to make all the changes until the panel is in a valid state.&lt;br /&gt;&lt;br /&gt;For example: I have an user that may be a minor. If he's a minor, the parent's name must be set. I have 3 situations:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;he's an adult. Panel state is valid. Ok and cancel button are active, no warning. All is good.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4620/3244/1600/Screenshot-Options.0.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://photos1.blogger.com/blogger/4620/3244/320/Screenshot-Options.0.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;he's an minor with an empty parent name. You get the red text warning (which is just Swing from my JPanel, no Platform stuff here) and the OK button is &lt;span style="font-style: italic;"&gt;disabled&lt;/span&gt;.  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4620/3244/1600/Screenshot-Options-1.0.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4620/3244/320/Screenshot-Options-1.0.png" alt="" border="0" /&gt;&lt;/a&gt; Noticed that ? This is where the isValid() does its work.&lt;/li&gt;&lt;li&gt;he is a minor with a non-empty parent name. The OK button is enabled (isValid contribution) and no more red warnings (pure Swing code): &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4620/3244/1600/Screenshot-Options-3.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4620/3244/320/Screenshot-Options-3.png" alt="" border="0" /&gt;&lt;/a&gt; Fun stuff no ?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The way this is doable is: just look at the &lt;span style="font-style: italic;"&gt;TODOs.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Implement the &lt;span style="font-style: italic;"&gt;load()&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;store()&lt;/span&gt; methods in the generated Panel to have persistence.&lt;/li&gt;&lt;li&gt;Implement the valid() method in the Panel. In my case is something as simple as &lt;pre&gt; return adult || (!adult &amp;amp;&amp;amp; parentName.getText().trim().length()&gt;0);&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Then implement the final TODO from the constructor: &lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;listen to changes in form fields and call controller.changed() &lt;/span&gt;&lt;span style="font-size:100%;"&gt;In my case I just call &lt;span style="font-style: italic;"&gt;controller.changed()&lt;/span&gt; when the radio buttons are pressed and also in a &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/event/DocumentListener.html"&gt;DocumentListener&lt;/a&gt; for the text (to detect if the parent name changes and provide instant feedback).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;And that was all it was needed. Now I have a simple, interractive with possible invalid states option panel.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-style: italic; font-family: arial;"&gt;If this was helpful for you then maybe you'll like reading the &lt;/span&gt;&lt;a style="font-style: italic; font-family: arial;" href="http://search.blogger.com/?as_q=NetBeans+Platform&amp;ie=UTF-8&amp;amp;ui=blg&amp;bl_url=emilian-bold.blogspot.com&amp;amp;x=290&amp;y=11"&gt;other NetBeans Platform-related posts&lt;/a&gt;&lt;span style="font-style: italic; font-family: arial;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;p class="mobile-post"&gt;--&lt;br /&gt;Emilian Bold&lt;br /&gt;Java-loving consulting services from Timisoara, Romania.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-115623603175040878?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/115623603175040878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=115623603175040878&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115623603175040878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115623603175040878'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/08/netbeans-platform-options-dialog.html' title='NetBeans Platform: Options Dialog isValid() or implement thy TODOs'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-115613980279661909</id><published>2006-08-21T08:43:00.000+03:00</published><updated>2006-11-01T15:40:46.578+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans platform'/><title type='text'>NetBeans Platform: Branding the help with layer kung-fu</title><content type='html'>Since I said that I have to make a proper application and I was too lazy to actually write any complicated code in the weekend I said: &lt;span style="font-style: italic;"&gt;ok, let's add the Help&lt;/span&gt;. If you're new to NetBeans Platform, this means basically that there is a  Wizard to generate a whole bunch of files and configuration: the Java Help-related files and the files to have the integration with the Help system of the Platform.&lt;br /&gt;&lt;br /&gt;Since NetBeans 5.5 this Help Wizard has been a real life saver. The was too much wodoo going on there to actually get it done by hand. It was doable just no something you do when you want to feel relaxed.&lt;br /&gt;&lt;br /&gt;The deal about the Help System it's that, of course, is designed to take into account the situation where you have multiple modules with their own helpset. But when you develop a standalone platform application you only have one helpset and you get this ugly picture first:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4620/3244/1600/Screenshot-IDE%20Help.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4620/3244/320/Screenshot-IDE%20Help.png" alt="" border="0" /&gt;&lt;/a&gt; As you see there is an annoying first page.&lt;br /&gt;&lt;br /&gt;The nice thing about the NetBeans Platform and IDE is that the sources are available so you can always &lt;span style="font-style: italic;"&gt;grep&lt;/span&gt; the hell out of them and find what you need. For example, it seems that this page is in &lt;span style="font-style: italic;"&gt;core/javahelp&lt;/span&gt; (unsurprisingly) and that it's named &lt;span style="font-style: italic;"&gt;masterHelpPage,&lt;/span&gt; referenced from the &lt;span style="font-style: italic;"&gt;masterHelpMap.jhm&lt;/span&gt; with &lt;span style="font-style: italic;"&gt;MASTER_ID&lt;/span&gt; . MASTER_ID pops up in master-help.xml (based on helpcontext-1_0.dtd) which has an option &lt;span style="font-style: italic;"&gt;showmaster = true / false&lt;/span&gt;. So this must be the guilty thing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Ok, there it is, but how does one change it ?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Indeed, found the (possible) culprit. So I have to change the &lt;span style="font-style: italic;"&gt;showmaster&lt;/span&gt; somehow. Since I've always felt that Java Help is unnecessary complex, I first assume I have to patch the build system and modify the damn file. Nasty but doable.&lt;br /&gt;&lt;br /&gt;But this looks like some sort of per-application customization, known as &lt;span style="font-style: italic;"&gt;branding&lt;/span&gt; on the NetBeans Platform.&lt;span style="font-style: italic;"&gt; Branding&lt;/span&gt; is the same process that lets you change the application splash screen, icon, title, Bundles for localization and more.&lt;br /&gt;&lt;br /&gt;And branding usually involves work with the Bundles, the layer.xml file and new resources (icons, etc).&lt;br /&gt;&lt;br /&gt;Since I can't possibly imagine how one could brand, I find on the net &lt;a href="http://blogs.sun.com/roller/page/geertjan?entry=branding_the_default_help_topic"&gt;Geertjan's blog topic&lt;/a&gt; on the subject. The solution is unbelivebly short:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;folder name="Menu"&amp;gt;&lt;br /&gt;&amp;lt;folder name="Help"&amp;gt;&lt;br /&gt; &amp;lt;file name="master-help.xml_hidden"/&amp;gt;&lt;br /&gt; &amp;lt;file name="your-master.xml" url="master.xml"&amp;gt;&lt;br /&gt;&amp;lt;/folder&amp;gt;&lt;br /&gt;&amp;lt;/folder&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Read Geertjan's post for more details.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Layer kung-fu&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The ideea is simple: all layers on the Platform are placed on a stack with your module's layer on top. So basically you can't only add or hide (with _hidden) new files, but you can also &lt;span style="font-style: italic;"&gt;replace&lt;/span&gt; them.&lt;br /&gt;&lt;br /&gt;Of course ! This is how branding gets done.&lt;br /&gt;&lt;br /&gt;So in the XML above you see the existing &lt;span style="font-style: italic;"&gt;master-help.xml&lt;/span&gt; file is hidden and then replaced by our own (where we set our own MASTER_ID). It's so simple I can't believe it.&lt;br /&gt;&lt;br /&gt;I always though the layer ideea was a little over-engineered but now I'm a believer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Layers: I know kung-fu!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Developer: Show me !&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;If this was helpful for you then maybe you'll like reading the &lt;/span&gt;&lt;a style="font-style: italic; font-family: arial;" href="http://search.blogger.com/?as_q=NetBeans+Platform&amp;ie=UTF-8&amp;amp;ui=blg&amp;bl_url=emilian-bold.blogspot.com&amp;amp;x=290&amp;y=11"&gt;other NetBeans Platform-related posts&lt;/a&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;p class="mobile-post"&gt;--&lt;br /&gt;Emilian Bold&lt;br /&gt;Java-loving consulting services from Timisoara, Romania.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-115613980279661909?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/115613980279661909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=115613980279661909&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115613980279661909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115613980279661909'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/08/netbeans-platform-branding-help-with.html' title='NetBeans Platform: Branding the help with layer kung-fu'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30278691.post-115593925452187814</id><published>2006-08-19T01:14:00.000+03:00</published><updated>2006-11-01T15:40:46.514+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans platform'/><title type='text'>NetBeans Platform: Who needs the Web Browser ?</title><content type='html'>&lt;p class="mobile-post"&gt;During my lobby period for the NetBeans Platform at my workplace I did&lt;br /&gt;with a coleague a quick port to the NetBeans Platform of a Swing application.&lt;br /&gt;Of course, nothing too Platform-dependent, just module with&lt;br /&gt;TopComponents instead of JFrames, library wrappers, etc.&lt;/p&gt;&lt;p class="mobile-post"&gt;Now, one of the complaints was: "&lt;span style="font-style: italic;"&gt;hell, in another tab I had a *web browser* !&lt;/span&gt;"&lt;/p&gt;&lt;p class="mobile-post"&gt;Tonight I was looking at the new NetBeans 6.0 M2 Platform and it hit&lt;br /&gt;me: the View-&amp;gt;Web Browser is there ! It's there in 5.5 too.&lt;/p&gt;&lt;p class="mobile-post"&gt;Now, why would my standalone application need it ? It's not like&lt;br /&gt;people use some other "internal" broser that each application has, so&lt;br /&gt;why is it there? Or at least  -- why the menu item ?&lt;/p&gt;&lt;p class="mobile-post"&gt;There was a comment in a blog at some point with something like &lt;span style="font-style: italic;"&gt;"we&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;like Eclipse RPC because there we have to put things in, on the&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;NetBeans Platform we have to take things out first"&lt;/span&gt; which kinda made&lt;br /&gt;sense (although I haven't used the Eclipse RCP, only the IDE).&lt;br /&gt;&lt;/p&gt;&lt;p class="mobile-post"&gt;I've dugg into the sources and it seems the Web Browser is used by the&lt;br /&gt;*autoupdate* module. But even if I don't use the autoupdate module,&lt;br /&gt;it's still there. Ok you'll say: &lt;span style="font-style: italic;"&gt;"there is a trick! You never actually&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;remove autoupdate entirely"&lt;/span&gt;, which is true. Autoupdate also has the&lt;br /&gt;little update piece generated from libsrc/ that has low-level module&lt;br /&gt;update/install code.&lt;/p&gt;&lt;p class="mobile-post"&gt;But the Web Browser usage in autoupdate isn't in the *libsrc/* part,&lt;br /&gt;it's in the module, that you can disable.&lt;/p&gt;&lt;p class="mobile-post"&gt;Also, in Tools-&amp;gt;Options-&amp;gt;Advanced Options-&amp;gt;System there is a Web&lt;br /&gt;Browser option (with Swing Browser as the default). And that is needed&lt;br /&gt;... why ?&lt;/p&gt;Of course, one can always set a _hidden in tha layer for the folder or file and thus hide the Web Browser menu item or the whole View menu but this seems indeed a little odd. In the end -- what is the purpouse of the Web Browser that makes it so hard to remove altogether ?&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-family: arial;"&gt;If this was helpful for you then maybe you'll like reading the &lt;/span&gt;&lt;a style="font-style: italic; font-family: arial;" href="http://search.blogger.com/?as_q=NetBeans+Platform&amp;ie=UTF-8&amp;amp;ui=blg&amp;bl_url=emilian-bold.blogspot.com&amp;amp;x=290&amp;y=11"&gt;other NetBeans Platform-related posts&lt;/a&gt;&lt;span style="font-style: italic; font-family: arial;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;p class="mobile-post"&gt;--&lt;br /&gt;Emilian Bold&lt;br /&gt;Java-loving consulting services from Timisoara, Romania.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30278691-115593925452187814?l=emilian-bold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilian-bold.blogspot.com/feeds/115593925452187814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30278691&amp;postID=115593925452187814&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115593925452187814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30278691/posts/default/115593925452187814'/><link rel='alternate' type='text/html' href='http://emilian-bold.blogspot.com/2006/08/netbeans-platform-who-needs-web.html' title='NetBeans Platform: Who needs the Web Browser ?'/><author><name>Emilian Bold</name><uri>http://www.blogger.com/profile/10960978131273810766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_7kuGo66xDMI/S6HpcOuEgxI/AAAAAAAAQKo/do_N24IWZsw/S220/emilian-20100318.jpg'/></author><thr:total>2</thr:total></entry></feed>
