<?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-7372777165432727866</id><updated>2012-05-20T19:45:13.415+02:00</updated><category term='ruby'/><category term='Pomodoro'/><category term='reflection'/><category term='tools'/><category term='itbooze'/><category term='static analysis'/><category term='clojure'/><category term='Cygwin'/><category term='XP'/><category term='OCPJP'/><category term='UI'/><category term='maven'/><category term='SCJP'/><category term='conference'/><category term='general'/><category term='Lisp'/><category term='gradle'/><category term='prototyping'/><category term='agile'/><category term='SecurityManager'/><category term='git'/><category term='python'/><category term='spring'/><category term='rails'/><category term='Kanban'/><category term='Objective-C'/><category term='video'/><category term='uml'/><category term='top'/><category term='vim'/><category term='productivity'/><category term='review'/><category term='learning'/><category term='axis2'/><category term='scripting'/><category term='computation'/><category term='Time Management'/><category term='vs'/><category term='ant'/><category term='scala'/><category term='java'/><category term='tutorial'/><category term='GNUstep'/><category term='book'/><category term='Blogging'/><category term='Tomcat'/><category term='MinGW'/><category term='annotation'/><category term='tutorials'/><category term='groovy'/><category term='Linux'/><category term='DB'/><category term='code quality'/><category term='languages'/><category term='Eclipse'/><category term='Scrum'/><category term='jeeconf'/><category term='SVN'/><category term='sketching'/><category term='screencast'/><category term='Books'/><title type='text'>Knowledge Is Everything</title><subtitle type='html'>This blog is about my thoughts related with software development, automation repetitive tasks, programming languages, tools and approaches. I like learning as a process. Hope, my experience will be useful for You.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default?start-index=26&amp;max-results=25'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>56</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-985292616587341615</id><published>2012-05-20T15:15:00.001+02:00</published><updated>2012-05-20T19:45:13.436+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='jeeconf'/><title type='text'>JEEConf - Kiev, 2012 - Report</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-aFtjgaEje38/T7ja9v9eZ6I/AAAAAAAAAkc/dHwWudU4x74/s1600/logo_transp2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-aFtjgaEje38/T7ja9v9eZ6I/AAAAAAAAAkc/dHwWudU4x74/s1600/logo_transp2.png" /&gt;&lt;/a&gt;&lt;/div&gt;This year we had the second &lt;a href="http://jeeconf.com/" target="_blank"&gt;JEEConf&lt;/a&gt;. The amount of stages was increased from three to &lt;b&gt;four &lt;/b&gt;stages.&lt;br /&gt;I was really impressed about conference program "notebooks" :-) it was well done. The amount of people was really huge more then 600. I think it's impressive number for the second conference. &lt;br /&gt;&lt;br /&gt;As usual I've selected the most interest topics to watch/visit to:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Play with Play! by Anton Naumov&lt;/b&gt;&lt;br /&gt;The presenter briefly has shown the Play Framework v.1.2.x features and discussed the pros&amp;amp;cons. The most notably was that he stated the "fails" caused by this framework and how we can avoid similar stuff. The most loud message was "use Spring/MVC, Hibernate and Maven" if you are experienced with them :-). And try to use Play for prototype projects.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Hibernate performance tuning by Sander Mak&lt;/b&gt;&lt;br /&gt;It's very interesting and pragmatic topic. Even more I can say this presentation was a bunch of receipts for Hibernate performance improvement. There were depicted very interesting nuances which will be definitely valuable in real life codding.I'm looking forward for slides.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.&amp;nbsp; Methodology of performance optimization by Alexey Shipilyov and Sergey Kuksenko&lt;/b&gt;&lt;br /&gt;It was the most low-level topic on this conference. Guys shown the different ways to perform the subject. They review and in pair-speech way very complicated issues in performance optimization from conceptual point of view. I can't say that I will be able to reuse everything from this speech, but it's great start point for me. They are very proficient presenters.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Becoming a Professional Java Developer by Yakov Fain&lt;/b&gt;&lt;br /&gt;I must say "Thank you" for this speech. It was cool. Yakov has highlighted the non-technical aspect of Professional (Java) Developer. Of course his advices and &lt;span class="short_text" id="result_box" lang="en"&gt;&lt;span class="hps"&gt;observation are based on own experience and might be biased for somebody. But it's honest and reasonable speech might open "some" boring minds. Also, Yakov recommended to read his free e-book "Enterprise Software without the BS". I've already downloaded it and I'm planning to read it in nearest weeks.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="short_text" id="result_box" lang="en"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="short_text" id="result_box" lang="en"&gt;&lt;span class="hps"&gt;5. Inject Injection by Yuriy Litvinenko&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="short_text" id="result_box" lang="en"&gt;&lt;span class="hps"&gt;It was like a case study report about involving DI Framework (in this case Google Guice) in legacy project. It was very interesting, because I believe it's challenging task. The presenter has highlighted the issues which his team faced &lt;/span&gt;&lt;/span&gt;&lt;span class="short_text" id="result_box" lang="en"&gt;&lt;span class="hps"&gt;with&lt;/span&gt;&lt;/span&gt;&lt;span class="short_text" id="result_box" lang="en"&gt;&lt;span class="hps"&gt;. I can say this experience might be valuable when somebody needs to decide the benefits and evaluate the risks of involving DI &lt;/span&gt;&lt;/span&gt;&lt;span class="short_text" id="result_box" lang="en"&gt;&lt;span class="hps"&gt;Framework in something "really old&lt;/span&gt;&lt;/span&gt;&lt;span class="short_text" id="result_box" lang="en"&gt;&lt;span class="hps"&gt;&lt;/span&gt;&lt;/span&gt;". Well done.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;6. Cloud Java platforms: what's inside and what's the difference by Ruslan Synytskyy&lt;/b&gt;&lt;br /&gt;It was a pleasure to see ukrainian who is one of the founders of &lt;a href="http://jelastic.com/"&gt;Jelastic&lt;/a&gt;. Ruslan has reviewed&amp;nbsp; different types of&amp;nbsp; "* as a Service": SaaS, PaaS and IaaS. The comparison criteria of PaaS's are very useful for further evaluation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;7. Why do I hate the Hibernate? by Mikalai Alimenkou&lt;/b&gt;&lt;br /&gt;It was pragmatic, based on real experience presentation with tons of Hibernate issues. It's very useful for anyone who's developing application with Hibernate. We must know the weaknesses of our tools. Mikalai has used very interesting approach to blame something/someone: "nasty granny". You should review the slides to this presentation to understand what does it mean.&lt;br /&gt;&lt;br /&gt;I'd like to say &lt;i&gt;"Thank you"&lt;/i&gt; JEEConf organizers team. You are doing very important work for Ukrainian Java Community.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;See: &lt;a href="http://halyph.blogspot.com/2011/05/jeeconf-kiev-2011-report.html" target="_blank"&gt;JEEConf - Kiev, 2011 - Report&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-985292616587341615?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/985292616587341615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2012/05/this-year-we-had-second-jeeconf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/985292616587341615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/985292616587341615'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2012/05/this-year-we-had-second-jeeconf.html' title='JEEConf - Kiev, 2012 - Report'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-aFtjgaEje38/T7ja9v9eZ6I/AAAAAAAAAkc/dHwWudU4x74/s72-c/logo_transp2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-4516625822040863696</id><published>2012-05-02T17:35:00.002+02:00</published><updated>2012-05-02T17:35:53.007+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='screencast'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Review: Java Brains Spring Framework - Core Spring, by Koushik Kothagal</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Ik0LB2qKp0g/T5_x_1IbcCI/AAAAAAAAAj8/oAoF2cJighQ/s1600/placeholder_video_spring_projects.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-Ik0LB2qKp0g/T5_x_1IbcCI/AAAAAAAAAj8/oAoF2cJighQ/s1600/placeholder_video_spring_projects.png" /&gt;&lt;/a&gt;&lt;/div&gt;I've recently watched the subject &lt;a href="http://javabrains.koushik.org/p/spring-framework.html" target="_blank"&gt;Java Brains - Spring Framework&lt;/a&gt; video tutorials and I must admit that these screencasts were well done. One of the best Java related video tutorials I've ever seen. Whether you are experienced or beginner developer it worth to watch them all. It's very good sample how to produce qualitative and pleasure to watch screencasts.&lt;br /&gt;&lt;br /&gt;Let's review each tutorial one-by-one just to have some snapshot what was described there:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-01-understanding.html"&gt;&lt;b&gt;01 - Understanding Dependency Injection&lt;/b&gt;&lt;/a&gt; Dependency Injection (DI) introduction. Here was explained why do we need DI and some conceptual sample.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-02-setting-up.html"&gt;&lt;b&gt;02 - Setting Up&lt;/b&gt;&lt;/a&gt; Project Setup. The author avoided using any build tools (Ant, Maven) and set up Eclipse-based project via using Eclipse User Library.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-03-understanding-spring.html"&gt;&lt;b&gt;03 - Understanding Spring Bean Factory&lt;/b&gt;&lt;/a&gt; Explained the differences between Factory pattern and Spring Bean Factory without any technical details, plain conceptual overview.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-04-writing-code-using.html"&gt;&lt;b&gt;04 - Writing Code Using the Bean Factory&lt;/b&gt;&lt;/a&gt; Actually it's the first video with some &lt;b&gt;code inside&lt;/b&gt;. Author use classical approach to introduce Spring DI in practice - wrote simple code without Spring and re-wrote it with Spring. And it has nice effect - it became very descriptive.&lt;br /&gt;The next Spring-related things were introduced:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;spring.xml&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;BeanFactory&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;XmlBeanFactory&lt;/i&gt; and &lt;i&gt;FileSystemResources&lt;/i&gt;&lt;/li&gt;&lt;li&gt;bean instantiation via factory&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-05-applicationcontext.html"&gt;&lt;b&gt;05 - ApplicationContext and Property Initialization&lt;/b&gt;&lt;/a&gt; Replaced &lt;i&gt;BeanFactory &lt;/i&gt;with &lt;i&gt;ApplicationContext&lt;/i&gt;. How to initialize bean property via spring.xml has been shown.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-06-using-constructor.html"&gt;&lt;b&gt;06 - Using Constructor Injection&lt;/b&gt;&lt;/a&gt; Depicted different ways of constructor injection:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;plain&lt;/li&gt;&lt;li&gt;index based&lt;/li&gt;&lt;li&gt;type based&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-07-injecting-objects.html"&gt;&lt;b&gt;07 - Injecting Objects&lt;/b&gt;&lt;/a&gt; Created simple object and shown how to inject object dependency (i.e. was used&amp;nbsp; "property" tag and "ref" attribute, &lt;i&gt;&amp;lt;property name="propname" ref="beanref" /&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-08-inner-beans-aliases.html"&gt;&lt;b&gt;08 - Inner Beans, Aliases and idref&lt;/b&gt;&lt;/a&gt; The topic has pretty descriptive content, nothing more was here.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-09-initializing.html"&gt;&lt;b&gt;09 - Initializing Collections&lt;/b&gt;&lt;/a&gt; Here List was used as sample to initialize bean with collection. Stated that the same approach should be applied to Set and Map.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-10-bean-autowiring.html"&gt;&lt;b&gt;10 - Bean Autowiring&lt;/b&gt;&lt;/a&gt; Configured autowiring via spring.xml. Described pros&amp;amp;cons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;byName&lt;/li&gt;&lt;li&gt;byType&lt;/li&gt;&lt;li&gt;constructor&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-11-understanding-bean.html"&gt;&lt;b&gt;11 - Understanding Bean Scopes&lt;/b&gt;&lt;/a&gt; Explained bean scopes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Singleton&lt;/li&gt;&lt;li&gt;Prototype&lt;/li&gt;&lt;li&gt;Request&lt;/li&gt;&lt;li&gt;Session&lt;/li&gt;&lt;li&gt;Global Session&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-12-using.html"&gt;&lt;b&gt;12 - Using ApplicationContextAware&lt;/b&gt;&lt;/a&gt; Nicely shown how to use &lt;i&gt;ApplicationAwareContext &lt;/i&gt;and BeanNameAware interfaces.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-13-bean-definition.html"&gt;&lt;b&gt;13 - Bean Definition Inheritance&lt;/b&gt;&lt;/a&gt; Nice Spring feature is bean definition inheritance and how it is different from OOP inheritance. Explained when to use it and what is the benefits. Introduced bean &lt;i&gt;abstract &lt;/i&gt;and&amp;nbsp; &lt;i&gt;parent&lt;/i&gt; attributes and when to use it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-14-lifecycle-callbacks.html"&gt;&lt;b&gt;14 - Lifecycle Callbacks&lt;/b&gt;&lt;/a&gt; Introduced &lt;i&gt;init &lt;/i&gt;and &lt;i&gt;destroy &lt;/i&gt;methods in different incarnations:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;InitializingBean and DisposableBean interfaces&lt;/li&gt;&lt;li&gt;bean tag attributes: &lt;i&gt;init-method&lt;/i&gt; and &lt;i&gt;destroy-method&lt;/i&gt; &lt;/li&gt;&lt;li&gt;bean&lt;i&gt;&lt;b&gt;s&lt;/b&gt;&lt;/i&gt; tag attributes: &lt;i&gt;default-init-method&lt;/i&gt; and &lt;i&gt;default-&lt;/i&gt;&lt;i&gt;destroy-method&lt;/i&gt;&lt;/li&gt;&lt;li&gt;Added&lt;i&gt; AbstractApplicationCantext &lt;/i&gt;to switch on &lt;i&gt;redisterShutdownHook&lt;/i&gt;()&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-15-writing.html"&gt;&lt;b&gt;15 - Writing a BeanPostProcessor&lt;/b&gt;&lt;/a&gt; Shown how to implement custom &lt;i&gt;BeanPostProcessor&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-16-writing.html"&gt;&lt;b&gt;16 - Writing a BeanFactoryPostProcessor&lt;/b&gt;&lt;/a&gt; Shown how to implement:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;custom &lt;i&gt;BeanFactoryPostProcessor&lt;/i&gt;&lt;/li&gt;&lt;li&gt;introduces properties for spring.xml via adding &lt;i&gt;PropertyPlaceholderConfigurer&lt;/i&gt; (implementation of &lt;i&gt;BeanFactoryPostProcessor&lt;/i&gt;)&lt;/li&gt;&lt;/ul&gt;Explained when and why to use &lt;i&gt;BeanFactoryPostProcessor&lt;/i&gt;s. Explained the differences between &lt;i&gt;BeanFactoryPostProcessor&lt;/i&gt;s and &lt;i&gt;BeanPostProcessor.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-17-coding-to-interfaces.html"&gt;&lt;b&gt;17 - Coding To Interfaces&lt;/b&gt;&lt;/a&gt; Rewritten the initial demo project to support interface based design, the right way for developing Spring applications :-) &lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-18-introduction-to.html"&gt;&lt;b&gt;18 - Introduction to Annotations and the Required Annotation&lt;/b&gt;&lt;/a&gt; Added @Required annotation in demo project and activated it via adding bean post processor &lt;i&gt;RequiredAnnotationBeanPostProcessor&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;  &lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-19-autowired-annotation.html"&gt;&lt;b&gt;19 - The Autowired Annotation&lt;/b&gt;&lt;/a&gt; Shown how to use:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;@Autowire&lt;/i&gt; and &lt;i&gt;@Qualifier&lt;/i&gt; annotations&lt;/li&gt;&lt;li&gt;&lt;i&gt;&amp;lt;context:annotation-config /&amp;gt;&lt;/i&gt; in&lt;i&gt; spring.xml&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-20-some-jsr-250.html"&gt;&lt;b&gt;20 - Some JSR-250 Annotations&lt;/b&gt;&lt;/a&gt; Shown how to use:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;@Resource&lt;/i&gt; annotation&lt;/li&gt;&lt;li&gt;&lt;i&gt;@Resource&lt;/i&gt; annotation with parameters&lt;/li&gt;&lt;li&gt;&lt;i&gt;@PostConstruct &lt;/i&gt;annotation&lt;/li&gt;&lt;li&gt;&lt;i&gt;@PreDestroy &lt;/i&gt;annotation&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-21-component-and.html"&gt;&lt;b&gt;21 - Component and Stereotype Annotations&lt;/b&gt;&lt;/a&gt; Added the &lt;i&gt;&amp;lt;context:component-scan base-packaeg="package" /&amp;gt;&lt;/i&gt; to spring.xml. Shown how to use &lt;i&gt;@Component&lt;/i&gt; annotation and what rules applied to this annotation. Also, were mentioned other Spring stereotypes.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-22-using-messagesource.html"&gt;&lt;b&gt;22 - Using MessageSource To Get Text From Property Files&lt;/b&gt;&lt;/a&gt; Shown how to use &lt;i&gt;ResourceBundleMessageSource&lt;/i&gt; to get properties. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://javabrains.koushik.org/2011/08/spring-tutorial-23-event-handling-in.html"&gt;&lt;b&gt;23 - Event Handling in Spring&lt;/b&gt;&lt;/a&gt; Very nice introduction tutorial into the subject: even definition, event listeners and even publishing on application level.&lt;br /&gt;&lt;br /&gt;Ofcource, these tutorial are only intro and you should read Spring Documentation to gain the Spring "black" magic. But, it's good start point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-4516625822040863696?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/4516625822040863696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2012/05/review-java-brains-spring-framework.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4516625822040863696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4516625822040863696'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2012/05/review-java-brains-spring-framework.html' title='Review: Java Brains Spring Framework - Core Spring, by Koushik Kothagal'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Ik0LB2qKp0g/T5_x_1IbcCI/AAAAAAAAAj8/oAoF2cJighQ/s72-c/placeholder_video_spring_projects.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-8435035536881764896</id><published>2012-04-24T19:15:00.000+02:00</published><updated>2012-04-24T19:15:05.139+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Review: Getting Good with Git by Andrew Burgess</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-kFLV4Wc3Kl8/T5bX54e2wgI/AAAAAAAAAjE/o5eeyr60NH8/s1600/L_GettingGoodwithGit.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;There are several books about Git. I've decided to review them all and started with "Getting Good with Git" by Andrew Burgess&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://rockablepress.com/books/getting-good-with-git" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="302" src="http://2.bp.blogspot.com/-kFLV4Wc3Kl8/T5bX54e2wgI/AAAAAAAAAjE/o5eeyr60NH8/s320/L_GettingGoodwithGit.png" width="202" /&gt; &lt;/a&gt;&lt;/div&gt;First of all it's beginner level book. I wouldn't recommend it to anyone experienced developer. Even more it's more like tutorial and not a book.&lt;br /&gt;So, based on previous statements the next chapters can be easily cut off:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Introduction to Git&lt;/li&gt;&lt;li&gt;Commands&lt;/li&gt;&lt;li&gt;GitHub&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;IMHO, I would left the next two chapters:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Configuration&lt;/li&gt;&lt;li&gt;Beyond the Basics&lt;/li&gt;&lt;/ul&gt;And more important is the price of this book: &lt;span class="price"&gt;&lt;b&gt;$19&lt;/b&gt;. Guys, come on &lt;/span&gt;&lt;b class="price"&gt;$19 &lt;/b&gt;&lt;span class="price"&gt;for this. It doesn't cost this money. &lt;/span&gt;&lt;br /&gt;&lt;b class="price"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="price"&gt;Summary: don't spend your time and money on this book.&lt;/span&gt;&lt;b class="price"&gt;&lt;br /&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-8435035536881764896?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/8435035536881764896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2012/04/review-getting-good-with-git-by-andrew.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8435035536881764896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8435035536881764896'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2012/04/review-getting-good-with-git-by-andrew.html' title='Review: Getting Good with Git by Andrew Burgess'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-kFLV4Wc3Kl8/T5bX54e2wgI/AAAAAAAAAjE/o5eeyr60NH8/s72-c/L_GettingGoodwithGit.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-9031571903007486512</id><published>2012-03-27T00:09:00.002+02:00</published><updated>2012-03-27T00:13:12.831+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='itbooze'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Why you should join a user group?</title><content type='html'>&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VEwmiZMVtfc/T3Dp5f52omI/AAAAAAAAAhw/t_woMeyxTHo/s1600/1332798208_users.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-VEwmiZMVtfc/T3Dp5f52omI/AAAAAAAAAhw/t_woMeyxTHo/s1600/1332798208_users.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here I'd like to highlight the most important benefits for me:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Networking &lt;/b&gt;- ability to make social connections with developers from other companies&lt;/li&gt;&lt;li&gt;&lt;b&gt;Learning &lt;/b&gt;- it's the right place to learn something for free and improve you skills.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Knowledge sharing&lt;/b&gt; - you shouldn't always take also you can give something to others. In our case it's your knowledge. Most people are very kind and really like to share own experience.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Public Visibility&lt;/b&gt; - here you can promote yourself as passionate and well skilled developer&lt;/li&gt;&lt;li&gt;&lt;b&gt;Job Opportunities&lt;/b&gt; - you can find new contact which suggest a new job&lt;/li&gt;&lt;li&gt;&lt;b&gt;Find Expert&lt;/b&gt; - it's the right place to find the right people which might help you to solve some technical problems&lt;/li&gt;&lt;li&gt;&lt;b&gt;Become an Expert&lt;/b&gt; - it can happen &lt;/li&gt;&lt;li&gt;&lt;b&gt;Meet Nice People&lt;/b&gt; - just fact :)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;If you have other nice benefits please add in comments.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-9031571903007486512?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/9031571903007486512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2012/03/why-you-should-join-user-group.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/9031571903007486512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/9031571903007486512'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2012/03/why-you-should-join-user-group.html' title='Why you should join a user group?'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-VEwmiZMVtfc/T3Dp5f52omI/AAAAAAAAAhw/t_woMeyxTHo/s72-c/1332798208_users.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-4987761922792025571</id><published>2012-03-15T13:30:00.001+02:00</published><updated>2012-03-15T13:31:21.141+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='screencast'/><title type='text'>Java Related Free Video Trainings</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-OcQd9aLAnoc/T2HQNCIz5hI/AAAAAAAAAgk/wynszvwrfzw/s1600/1331810342_Java.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-OcQd9aLAnoc/T2HQNCIz5hI/AAAAAAAAAgk/wynszvwrfzw/s1600/1331810342_Java.png" /&gt;&lt;/a&gt;&lt;/div&gt;I've decided to collect Java related video tutorials and screencasts. Here is the initial list: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://eclipsetutorial.sourceforge.net/"&gt;Eclipse Video Tutorials&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://marakana.com/training/java/java_web_development_with_spring_and_hibernate.html"&gt;Marakana: Java Web, Spring and Hibernate Training&lt;/a&gt;&lt;a href="http://marakana.com/training/java/java_web_development_with_spring_and_hibernate.html"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/playlist?list=PL5745BA630E2195D9"&gt;Hibernate Tutorial&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://javabrains.koushik.org/"&gt;Java Trainings: JSP/Servlets, Hibernate, Spring, Maven, Struts2&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/7372777165432727866-4987761922792025571?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/4987761922792025571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2012/03/java-related-free-screencasts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4987761922792025571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4987761922792025571'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2012/03/java-related-free-screencasts.html' title='Java Related Free Video Trainings'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-OcQd9aLAnoc/T2HQNCIz5hI/AAAAAAAAAgk/wynszvwrfzw/s72-c/1331810342_Java.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-3004510102982392585</id><published>2012-02-26T20:19:00.000+02:00</published><updated>2012-02-26T20:19:14.988+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computation'/><title type='text'>State of numerical computation languages</title><content type='html'>When I was a student I spent a huge amount of time doing difference numerical computation with MATLAB and Maple. I must say I was falling in love with MATLAB. This environment, language and visualization possibilities were amazing and very powerful. I simply couldn't choose another stuff. It gave me a chance fully concentrate on engineering problems I had been trying to solve.&lt;br /&gt;&lt;br /&gt;But now I must admit that MATLAB is very expensive software. And we should look around for other open-source mathematical computation environments. Today I'm biased because I prefer to invest time in general purpose language then in specialized computation languages (like MATLAB, R).&lt;br /&gt;&lt;br /&gt;I've found very interested comparison (&lt;a href="http://mathesaurus.sourceforge.net/"&gt;Mathesaurus&lt;/a&gt;): &lt;br /&gt;&lt;div id="__ss_11756513" style="width: 477px;"&gt;&lt;b style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/halyph/math-synonyms" target="_blank" title="Math synonyms"&gt;Math synonyms&lt;/a&gt;&lt;/b&gt; &lt;iframe frameborder="0" height="510" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/11756513" width="477"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;documents&lt;/a&gt; from &lt;a href="http://www.slideshare.net/halyph" target="_blank"&gt;Orest Ivasiv&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Also, &lt;a href="http://hyperpolyglot.org/"&gt;Hyperpolyglot&lt;/a&gt; provides nice comparison &lt;a href="http://hyperpolyglot.org/numerical-analysis"&gt;"Numerical Analysis Software: Fortran, MATLAB, R, NumPy"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Based on these two comparisons I've selected several factors for choosing the "right" numerical environments:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Commercial or open-source&lt;/li&gt;&lt;li&gt;Visualization possibilities&lt;/li&gt;&lt;li&gt;Language itself (MATLAB, Maple, R, etc.): computational specific or general purpose (Python, Clojure/&lt;a href="http://incanter.org/"&gt;Incanter&lt;/a&gt;, etc. )&lt;/li&gt;&lt;li&gt;Integration with Fortran/C/C++ etc.&lt;/li&gt;&lt;li&gt;GUI features&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-3004510102982392585?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/3004510102982392585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2012/02/state-of-numerical-computation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/3004510102982392585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/3004510102982392585'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2012/02/state-of-numerical-computation.html' title='State of numerical computation languages'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-8577966194987315068</id><published>2012-02-13T01:18:00.000+02:00</published><updated>2012-02-13T01:27:08.885+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='sketching'/><category scheme='http://www.blogger.com/atom/ns#' term='prototyping'/><title type='text'>UML Sketching Tools</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-UyWzfrWKbDY/Tzg-7adYovI/AAAAAAAAAgU/zlejHhzAX6M/s1600/mola.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-UyWzfrWKbDY/Tzg-7adYovI/AAAAAAAAAgU/zlejHhzAX6M/s1600/mola.png" /&gt;&lt;/a&gt;&lt;/div&gt;UML drawing is painful in case your model should evolve very fast and you have to adjust it on the way. Such tool as Visio (and similar) is doing their job well till you don't need "aggressive" redrawing ;-) Have you ever tried to draw "huge" sequence, activity diagrams in Visio? I've "&lt;span class="example"&gt;struggled&lt;/span&gt;" with grouping, layouting, styling, etc. So, I have decided to concentrate more on modelling and switched to "easy-going" UML tools also knowing as &lt;b&gt;"Textual UML tools".&lt;/b&gt;&lt;br /&gt;Here is the list of my favorite:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plantuml.sourceforge.net/"&gt;PlantUML&lt;/a&gt; - very powerful tool. It supports very intuitive diagram language. Seven diagram types, nice styling. And very good documentation.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.umlet.com/"&gt;UMLet&lt;/a&gt; - It's true sketching tool. Very very simple. And you shouldn't expect sexy UI ;-) BUT! It's so "right tool for the job". You just have to try it.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.umlgraph.org/"&gt;UMLGraph&lt;/a&gt; - It can be used to generate UML class and sequence diagrams. It has nice integration with javadocs tool.&lt;/li&gt;&lt;/ul&gt;I think that this &lt;a href="http://www.holub.com/goodies/uml/"&gt;Allen Holub's UML Quick Reference&lt;/a&gt; (example based and very pragmatic) might be helpful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-8577966194987315068?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/8577966194987315068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2012/02/uml-sketching-tools.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8577966194987315068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8577966194987315068'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2012/02/uml-sketching-tools.html' title='UML Sketching Tools'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-UyWzfrWKbDY/Tzg-7adYovI/AAAAAAAAAgU/zlejHhzAX6M/s72-c/mola.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-168582308918844175</id><published>2012-01-21T16:31:00.000+02:00</published><updated>2012-01-21T16:33:21.070+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Quick way to join array of String in Java without third party libraries</title><content type='html'>As you probably know Java SE doesn't include such useful method as String join. Even old good JavaScript has this nice method: &lt;blockquote&gt; &lt;b&gt;JavaScript join() Method&lt;/b&gt;&lt;br/&gt;&lt;i&gt;Definition and Usage&lt;/i&gt;&lt;br/&gt;The join() method joins all elements of an array into a string, and returns the string.  The elements will be separated by a specified separator. The default separator is comma (,). &lt;/blockquote&gt; How to implement the similar stuff in Java SE? The easiest what came to my head is:  &lt;pre class="brush: java;"&gt;&lt;br /&gt; /**&lt;br /&gt;  * Join String arguments into one String separated by comma (",")&lt;br /&gt;  * @param args input Strings&lt;br /&gt;  * @return joined String&lt;br /&gt;  */&lt;br /&gt; public static String join(String... args) {&lt;br /&gt;  if(args.length &lt;1) throw new IllegalArgumentException();&lt;br /&gt;  &lt;br /&gt;  String joined = Arrays.toString(args);&lt;br /&gt;  String result = joined.substring(1, joined.length()-1);&lt;br /&gt;  return result;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt; Usage is pretty trivial: &lt;pre class="brush: java;"&gt;&lt;br /&gt;import static com.blogspot.HalypHUtils.join;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;String joinedString = join("Banana", "Orange", "Apple", "Mango");&lt;br /&gt;&lt;/pre&gt; And as you've already noticed this join uses comma (",") separator only.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-168582308918844175?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/168582308918844175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2012/01/quick-way-to-join-array-of-string-in.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/168582308918844175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/168582308918844175'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2012/01/quick-way-to-join-array-of-string-in.html' title='Quick way to join array of String in Java without third party libraries'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-531178570485437068</id><published>2012-01-09T13:25:00.001+02:00</published><updated>2012-01-09T13:25:53.784+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='OCPJP'/><title type='text'>What is the best book for SCJP/OCPJP exam preparation?</title><content type='html'>There are two major books for the exam preparation:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0071591060/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0071591060"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=0071591060&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=knowisever-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=knowisever-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0071591060" style="border: none !important; margin: 0px !important;" width="1" /&gt;&lt;br /&gt;&lt;b&gt;SCJP Sun Certified Programmer for Java 6 Exam 310-065, by Katherine Sierra, Bert Bates&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0321556054/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321556054"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=0321556054&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=knowisever-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=knowisever-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321556054" style="border: none !important; margin: 0px !important;" width="1" /&gt;&lt;br /&gt;&lt;b&gt;A Programmer's Guide to Java SCJP Certification: A Comprehensive Primer (3rd Edition), by Khalid Mughal, Rolf Rasmussen&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I've read both books and must admit that "SCJP Sun Certified Programmer for Java 6 Exam 310-065, by Katherine Sierra" is the best. You can also have a look into  &lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0072260882/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0072260882"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=0072260882&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=knowisever-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=knowisever-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0072260882" style="border: none !important; margin: 0px !important;" width="1" /&gt;&lt;br /&gt;&lt;b&gt;OCP Java SE 6 Programmer Practice Exams (Exam 310-065) (Certification Press), by Bert Bates, Katherine Sierra&lt;/b&gt;&lt;br /&gt;I can say it's like a companion book there are a plenty of nice mock exam questions.   &lt;br /&gt;&lt;br /&gt;I can say that you shouldn't use "A Programmer's Guide to Java SCJP Certification: A Comprehensive Primer (3rd Edition), by Khalid Mughal, Rolf Rasmussen" because:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;there too many unnecessary info which is totally useless on exam&lt;/li&gt;&lt;li&gt;book written style isn't perfect, it's really hard to follow the main idea&lt;/li&gt;&lt;li&gt;explanation of some ideas is very complex and bloated, it can be simplified&lt;/li&gt;&lt;li&gt;book typographic style is really ugly in comparison with "SCJP Sun Certified Programmer for Java 6 Exam 310-065, by Katherine Sierra"&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;Your can simplify your exam preparation if you stick to one book. Keep in mind your goal is optimize the exam preparation and avoid the redundant reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-531178570485437068?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/531178570485437068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2012/01/what-is-best-book-for-scjpocpjp-exam.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/531178570485437068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/531178570485437068'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2012/01/what-is-best-book-for-scjpocpjp-exam.html' title='What is the best book for SCJP/OCPJP exam preparation?'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-6617014385060706618</id><published>2011-12-25T21:16:00.000+02:00</published><updated>2011-12-25T21:16:28.245+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>How to decide which technology hype is worth personal investments?</title><content type='html'>I think it's very important question. Because studding some new technology requires some time (and maybe money).&lt;br /&gt;&lt;br /&gt;So, I've created for myself brief checklist which helps me to make this non-easy decision.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;How long it will take for me to master the major approaches of selected technology?&lt;/li&gt;&lt;li&gt;Can I reuse the gained knowledge during my daily development work?&lt;/li&gt;&lt;li&gt;How long it will take to train/coach my team mates to use this technology?&lt;/li&gt;&lt;li&gt;How big is the market for the selected technology?&lt;/li&gt;&lt;li&gt;How big is the local community for the selected technology?&lt;/li&gt;&lt;li&gt;How easily can we hire new developers with appropriate knowledge in selected technology?&lt;/li&gt;&lt;li&gt;Will it be profitable to have the knowledge in that technology?&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;I know&amp;nbsp; that some items are very boring&amp;nbsp; and mercantile, but it's life, real life. And we should align our priorities appropriately.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-6617014385060706618?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/6617014385060706618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/12/how-to-decide-which-technology-hype-is.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6617014385060706618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6617014385060706618'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/12/how-to-decide-which-technology-hype-is.html' title='How to decide which technology hype is worth personal investments?'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-262671567787467990</id><published>2011-11-03T15:04:00.003+02:00</published><updated>2011-11-03T15:08:02.856+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><title type='text'>How to run ANT script from .BAT/.CMD?</title><content type='html'>Imagine you need to call ANT script from BAT/CMD file.&lt;br /&gt;Ant script: &lt;br /&gt;&lt;pre class="brush: xml;"&gt;&lt;project default="bat-test" name="Blog"&gt;&lt;br /&gt;&lt;br /&gt; &lt;target description="check ant run" name="bat-test"&gt;&lt;br /&gt;  &lt;echo message="Message from ANT"&gt;&lt;br /&gt; &lt;/echo&gt;&lt;/target&gt;&lt;br /&gt;&lt;br /&gt;&lt;/project&gt;&lt;br /&gt;&lt;/pre&gt;And here is BAT file:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: bash;"&gt;@echo off&lt;br /&gt;echo BAT - Before Ant run&lt;br /&gt;ant -f build.xml&lt;br /&gt;echo BAT - After Ant run&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Unfortunately, when you run this BAT you get the next output:&lt;br /&gt;&lt;pre class="brush: bash;"&gt;BAT - Before Ant run&lt;br /&gt;Buildfile: D:\Projects\blog\build.xml&lt;br /&gt;&lt;br /&gt;bat-test:&lt;br /&gt;     [echo] Message from ANT&lt;br /&gt;&lt;br /&gt;BUILD SUCCESSFUL&lt;br /&gt;Total time: 0 seconds&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So, where is the &lt;b&gt;"BAT - After Ant run"&lt;/b&gt; echo message?&lt;br /&gt;&lt;br /&gt;The problem is that Ant on Windows executed via &lt;b&gt;ant.bat&lt;/b&gt; file and based on this we're calling one BAT file from another. We have to use CALL command to solve this issues, here is official note from CALL help:&lt;br /&gt;&lt;blockquote class="tr_bq" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Calls one batch program from another.&lt;br /&gt;CALL [drive:][path]filename [batch-parameters]&lt;br /&gt;batch-parameters&amp;nbsp;&amp;nbsp; Specifies any command-line information required by the batch program.&amp;nbsp;&lt;/blockquote&gt;And, here is the update BAT file:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: bash;"&gt;@echo off&lt;br /&gt;echo BAT - Before Ant run&lt;br /&gt;call ant -f build.xml&lt;br /&gt;echo BAT - After Ant run&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-262671567787467990?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/262671567787467990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/11/how-to-run-ant-script-from-batcmd.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/262671567787467990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/262671567787467990'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/11/how-to-run-ant-script-from-batcmd.html' title='How to run ANT script from .BAT/.CMD?'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-8092612552591603250</id><published>2011-10-21T12:37:00.000+02:00</published><updated>2011-10-21T12:38:47.060+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reflection'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Java Reflection: Invoke Constructor Issue</title><content type='html'>Let's imagine we have the next classes:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;package test.clazz;&lt;br /&gt;&lt;br /&gt;public class First {&lt;br /&gt; private FirstArg arg;&lt;br /&gt;&lt;br /&gt; public FirstArg getArg() {&lt;br /&gt;  return arg;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public First (FirstArg arg) {&lt;br /&gt;  this.arg = arg;&lt;br /&gt;  System.out.println("First() - constructor");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class FirstArg {&lt;br /&gt; public FirstArg() {&lt;br /&gt;  System.out.println("FirstArg.FirstArg()");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class SecondArg  extends FirstArg{&lt;br /&gt; public SecondArg() {&lt;br /&gt;  System.out.println("SecondArg.SecondArg()");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;And we can easily instantiate &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;First&lt;/span&gt; class with &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FirstArg&lt;span style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;or &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SecondArg&lt;/span&gt;:&lt;br /&gt;&lt;pre class="brush: java;"&gt;First f1Old = new First(new FirstArg());&lt;br /&gt;First f2Old = new First(new SecondArg());&lt;br /&gt;System.out.println(f1Old.getArg().getClass());&lt;br /&gt;System.out.println(f2Old.getArg().getClass());&lt;br /&gt;&lt;/pre&gt;We'll get the next output: &lt;br /&gt;&lt;pre class="brush: java;"&gt;FirstArg.FirstArg()&lt;br /&gt;First() - constructor&lt;br /&gt;FirstArg.FirstArg()&lt;br /&gt;SecondArg.SecondArg()&lt;br /&gt;First() - constructor&lt;br /&gt;class test.clazz.FirstArg&lt;br /&gt;class test.clazz.SecondArg&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now, we have to instantiate  &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;First&lt;/span&gt; class with &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FirstArg&lt;span style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;or &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SecondArg&lt;/span&gt;, but via Java reflection:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;public final class ConstructionUtil {&lt;br /&gt; public static Object instantiateClassOld(String className, Object iView) {&lt;br /&gt;  try {&lt;br /&gt;   Class iViewClass = iView.getClass();&lt;br /&gt;   Class clazz = Class.forName(className);&lt;br /&gt;&lt;br /&gt;   Constructor ctor = clazz.getDeclaredConstructor(iViewClass);&lt;br /&gt;   ctor.setAccessible(true);&lt;br /&gt;   return ctor.newInstance(iView);&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;   return null;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&amp;nbsp;&lt;/pre&gt;Check reflection based class instantiation: &lt;pre class="brush: java;"&gt;Object cls = instantiateClassOld("test.clazz.First", new FirstArg());&lt;br /&gt;First f1 = (First) cls;&lt;br /&gt;Object cls2 = instantiateClassOld("test.clazz.First", new SecondArg());&lt;br /&gt;First f2 = (First) cls2;&lt;br /&gt;System.out.println(f1.getArg().getClass());&lt;br /&gt;System.out.println(f2.getArg().getClass());&lt;br /&gt;&lt;/pre&gt;And we'll get Exception: &lt;br /&gt;&lt;pre class="brush: java;"&gt;FirstArg.FirstArg()&lt;br /&gt;First() - constructor&lt;br /&gt;FirstArg.FirstArg()&lt;br /&gt;SecondArg.SecondArg()&lt;br /&gt;java.lang.NoSuchMethodException: test.clazz.First.&lt;init&gt;(test.clazz.SecondArg)&lt;br /&gt; at java.lang.Class.getConstructor0(Unknown Source)&lt;br /&gt; at java.lang.Class.getDeclaredConstructor(Unknown Source)&lt;br /&gt; at test.ConstructionUtil.instantiateClassOld(ConstructionUtil.java:63)&lt;br /&gt; at test.ConstructionUtil.main(ConstructionUtil.java:22)&lt;br /&gt;&lt;/init&gt;&lt;/pre&gt;Reflection mechanism can't find &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;First(SecondArg arg) &lt;/span&gt;constructor.&lt;br /&gt;We have to patch &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;instantiateClassOld &lt;/span&gt;method like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;public final class ConstructionUtil {&lt;br /&gt; public static Object instantiateClassNew(String className, Object iView) {&lt;br /&gt;  try {&lt;br /&gt;   Class iViewClass = iView.getClass();&lt;br /&gt;   Class clazz = Class.forName(className);&lt;br /&gt;   try {&lt;br /&gt;    Constructor ctor = clazz.getDeclaredConstructor(iViewClass);&lt;br /&gt;    ctor.setAccessible(true);&lt;br /&gt;    return ctor.newInstance(iView);&lt;br /&gt;&lt;br /&gt;   } catch (NoSuchMethodException e) {&lt;br /&gt;    Constructor[] constructors = clazz.getDeclaredConstructors();&lt;br /&gt;    for (Constructor c : constructors) {&lt;br /&gt;     if (c.getParameterTypes().length &amp;gt; 1)&lt;br /&gt;      continue;&lt;br /&gt;     Class type = c.getParameterTypes()[0];&lt;br /&gt;     if (type.isAssignableFrom(iView.getClass())) {&lt;br /&gt;      return c.newInstance(type.cast(iView));&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   return null;&lt;br /&gt;&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;   return null;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&amp;nbsp;&lt;/pre&gt;And run it again: &lt;br /&gt;&lt;pre class="brush: java;"&gt;Object cls = instantiateClassNew("test.clazz.First",new FirstArg());&lt;br /&gt;First f1 = (First) cls;&lt;br /&gt;Object cls2 = instantiateClassNew("test.clazz.First",new SecondArg());&lt;br /&gt;First f2 = (First) cls2;&lt;br /&gt;System.out.println(f1.getArg().getClass());&lt;br /&gt;System.out.println(f2.getArg().getClass());&lt;br /&gt;&lt;/pre&gt;Output: &lt;br /&gt;&lt;pre class="brush: java;"&gt;FirstArg.FirstArg()&lt;br /&gt;First() - constructor&lt;br /&gt;FirstArg.FirstArg()&lt;br /&gt;SecondArg.SecondArg()&lt;br /&gt;First() - constructor&lt;br /&gt;class test.clazz.FirstArg&lt;br /&gt;class test.clazz.SecondArg&lt;br /&gt;&lt;/pre&gt; We should be careful when invoke methods via reflection with polymorphic arguments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-8092612552591603250?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/8092612552591603250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/10/java-reflection-invoke-constructor.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8092612552591603250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8092612552591603250'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/10/java-reflection-invoke-constructor.html' title='Java Reflection: Invoke Constructor Issue'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-6178492124109429918</id><published>2011-10-09T23:17:00.000+02:00</published><updated>2011-10-09T23:25:16.956+02:00</updated><title type='text'>Overview: Optimistic vs. Pessimistic Locking</title><content type='html'>Data Concurrency is a real problem in multi-user environment. How can we manage the data consistence when several users try to modify the same record(s) at the same time?&lt;br /&gt;This is a very interesting subject. Mostly, it's compromise. We can't easily pick one approach and forget about another.&lt;br /&gt;This subject was quite nice discussed in Martin's Fowler book: "Patterns of Enterprise Application Architecture"&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.amazon.com/gp/product/0321127420/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399377&amp;amp;creativeASIN=0321127420"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=0321127420&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=knowisever-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;/div&gt;And, you can find here the short Martin's overview: &lt;a href="http://www.martinfowler.com/eaaCatalog/pessimisticOfflineLock.html"&gt;Pessimistic Offline Lock&lt;/a&gt; and &lt;a href="http://www.martinfowler.com/eaaCatalog/optimisticOfflineLock.html"&gt;Optimistic Offline Lock&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/TransactionJTA_Overview-Pessimistic_and_optimistic_locking.html"&gt;JBoss community documentation&lt;/a&gt; has nice quotes about the subject:&lt;br /&gt;&lt;blockquote&gt;The disadvantage of &lt;b&gt;pessimistic locking &lt;/b&gt;is that a resource is locked from the time it is first accessed in a transaction until the transaction is finished, making it inaccessible to other transactions during that time. If most transactions simply look at the resource and never change it, an exclusive lock may be overkill as it may cause lock contention, and optimistic locking may be a better approach. With pessimistic locking, locks are applied in a fail-safe way. In the banking application example, an account is locked as soon as it is accessed in a transaction. Attempts to use the account in other transactions while it is locked will either result in the other process being delayed until the account lock is released, or that the process transaction will be rolled back. The lock exists until the transaction has either been committed or rolled back. &lt;/blockquote&gt;&lt;blockquote&gt;With &lt;b&gt;optimistic locking&lt;/b&gt;, a resource is not actually locked when it is first is accessed by a transaction. Instead, the state of the resource at the time when it would have been locked with the pessimistic locking approach is saved. Other transactions are able to concurrently access to the resource and the possibility of conflicting changes is possible. At commit time, when the resource is about to be updated in persistent storage, the state of the resource is read from storage again and compared to the state that was saved when the resource was first accessed in the transaction. If the two states differ, a conflicting update was made, and the transaction will be rolled back.  &lt;/blockquote&gt;The most popular example of optimistic locking is SVN commit operation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-6178492124109429918?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/6178492124109429918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/10/overview-optimistic-vs-pessimistic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6178492124109429918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6178492124109429918'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/10/overview-optimistic-vs-pessimistic.html' title='Overview: Optimistic vs. Pessimistic Locking'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-801462771869158925</id><published>2011-08-31T01:06:00.002+02:00</published><updated>2011-08-31T01:09:50.846+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='code quality'/><category scheme='http://www.blogger.com/atom/ns#' term='static analysis'/><title type='text'>Java Code Quality Tools - Overview</title><content type='html'>Recently, I had a chance to present the subject at the local IT community meetup. Here is the basic presentation: &lt;br /&gt;&lt;div id="__ss_9034438" style="text-align: left; width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/halyph/java-code-quality-tools" target="_blank" title="Java Code Quality Tools"&gt;Java Code Quality Tools&lt;/a&gt;&lt;/b&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9034438" width="425"&gt;&lt;/iframe&gt; &lt;/div&gt;and more meaningful mind map:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-NleZOjNwK6k/TlqM4Q_qjVI/AAAAAAAAAeU/mhQgYY6yb9c/s1600/Java+Code+Quality.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" src="http://4.bp.blogspot.com/-NleZOjNwK6k/TlqM4Q_qjVI/AAAAAAAAAeU/mhQgYY6yb9c/s320/Java+Code+Quality.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;But, I think I need to cover this subject more deeply. This blog post should be something like start point for further investigation in this direction.&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/-2zHzEW8oHqE/Tl1o5PzaobI/AAAAAAAAAeY/eOZPrsKsZkw/s1600/1314744466_kview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-2zHzEW8oHqE/Tl1o5PzaobI/AAAAAAAAAeY/eOZPrsKsZkw/s1600/1314744466_kview.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://code.google.com/javadevtools/codepro/doc/index.html"&gt;&lt;span style="font-size: large;"&gt;1. CodePro Analytix&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;It's a great tool (Eclipse plugin) for improving software quality. It has the next key features: Code Analysis, JUnit Test Generation, JUnit Test Editor, Similar Code Analysis, Metrics, Code Coverage and Dependency Analysis.&lt;br /&gt;&lt;a href="http://pmd.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;2. PMD&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;It scans Java source code and looks for potential problems: Possible bugs, Dead code, Suboptimal code, Overcomplicated expressions and Duplicate code.&lt;br /&gt;&lt;a href="http://findbugs.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;3. FindBugs&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;It looks for bugs in Java programs. It can detect a variety of common coding mistakes, including thread synchronization problems, misuse of API methods, etc.&lt;br /&gt;&lt;a href="http://cobertura.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;4.&amp;nbsp; Cobertura&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;It's a free Java tool that calculates the percentage of code accessed by tests. It can be used to identify which parts of your Java program are lacking test coverage. It is based on jcoverage.&lt;br /&gt;&lt;a href="http://emma.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;5. Emma&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;It is a fast Java code coverage tool based on bytecode  instrumentation. It differs from the existing tools by enabling coverage  profiling on large scale enterprise software projects with simultaneous  emphasis on fast individual development.&lt;br /&gt;&lt;a href="http://checkstyle.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;6.&amp;nbsp; Checkstyle&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;It is a development tool to help programmers write Java code         that adheres to a coding standard.&lt;br /&gt;&lt;a href="http://www.jboss.org/tattletale"&gt;&lt;span style="font-size: large;"&gt;7. JBoss Tattletale&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;JBoss Tattletale is a tool that can help you get an overview of the project you are working on or a product that you depend on. The tool will recursive scan a directory for JAR files and generate linked and formatted HTML reports.&lt;br /&gt;&lt;a href="http://www.ucdetector.org/"&gt;&lt;span style="font-size: large;"&gt;8. UCDetector&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;UCDetector (Unecessary Code Detector) is a Open Source eclipse PlugIn Tool to find unecessary (dead) java code. It also tries to make code final, protected or private. UCDetector also finds cyclic dependencies between classes. &lt;br /&gt;&lt;a href="http://www.sonarsource.org/"&gt;&lt;span style="font-size: large;"&gt;9. Sonar&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Sonar is a continuous quality control tool for Java applications. Its basic purpose in life is to join your existing continuous integration tools to place all your development projects under quality control.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;a href="http://xradar.sourceforge.net/"&gt;10. XRadar&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;The XRadar is an open extensible code report tool that produces HTML/SVG reports of the systems current state and the development over time. Uses DependencyFinder, JDepend, PMD, PMD-CPD, JavaNCSS, Cobertura, Checkstyle, XSource, JUnit, Java2HTML, ant and maven.&lt;br /&gt;&lt;a href="http://qalab.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;11. QALab&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;QALab consolidates data from Checkstyle, PMD, FindBugs and Simian and displays it in one consolidated view. QALab keeps a track of the changes over time, thereby allowing you to see trends over time. You can tell weather the number of violations has increased or decreased - on a per file basis, or for the entire project. It also plots charts of this data. QALab plugs in to maven or ant.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;a href="http://clirr.sourceforge.net/"&gt;12. Clirr&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;Clirr is a tool that checks Java libraries for binary and source compatibility with older releases. Basically you give it two sets of jar files and Clirr dumps out a list of changes in the public api. The Clirr Ant task can be configured to break the build if it detects incompatible api changes. In a continuous integration process Clirr can automatically prevent accidental introduction of binary or source compatibility problems. &lt;br /&gt;&lt;a href="http://jdiff.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;13. JDiff&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared. This is very useful for describing exactly what has changed between two releases of a product. Only the API (Application Programming Interface) of each version is compared. It does not compare what the source code does when executed. &lt;br /&gt;&lt;a href="http://artho.com/jlint/"&gt;&lt;span style="font-size: large;"&gt;14. JLint&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;It checks your Java code and find bugs, inconsistencies and synchronization problems by doing data flow analysis and building the lock graph.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.clarkware.com/software/JDepend.html"&gt;&lt;span style="font-size: large;"&gt;15. JDepend&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;JDepend traverses Java class file directories and generates design quality metrics for each Java package. JDepend allows you to automatically measure the quality of a design in terms of its extensibility, reusability, and maintainability to effectively manage and control package dependencies.&lt;br /&gt;&lt;a href="http://cloc.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;16. cloc&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;cloc counts blank lines, comment lines, and physical lines of source code in many programming languages.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;a href="http://source.valtech.com/display/dpm/Dependometer"&gt;17. Dependometer&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;Dependometer performs a static analysis of physical dependencies within a software system. Dependometer validates dependencies against the logical architecture structuring the system into classes, packages, subsystems, vertical slices and layers and detects cycles between these structural elements. Furthermore, it calculates a number of quality metrics on the different abstraction layers and reports any violations against the configured thresholds.&lt;br /&gt;&lt;a href="http://www.hammurapi.com/dokuwiki/doku.php/products:hammurapi:start"&gt;&lt;span style="font-size: large;"&gt;18. Hammurapi&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Hammurapi is an open source code inspection tool. Its release comes with more than 100 inspectors which inspect different aspects of code: Compliance with EJB specification, threading issues, coding standards, and much more.&lt;br /&gt;&lt;a href="http://www.kclee.de/clemens/java/javancss/"&gt;&lt;span style="font-size: large;"&gt;19. JavaNCSS&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;JavaNCSS is a simple command line utility which measures two standard source code metrics for the Java programming language. The metrics are collected globally, for each class and/or for each function.&lt;br /&gt;&lt;a href="http://java.net/projects/dcd"&gt;&lt;span style="font-size: large;"&gt;20. DCD&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;DCD finds dead code in your Java applications.&lt;br /&gt;&lt;a href="http://classycle.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;21. Classycle&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Classycle's Analyser analyses the static class and package dependencies in Java applications or libraries. It is especially helpful for finding cyclic dependencies between classes or packages. Classycle is similar to JDepend which does also a dependency analysis but only on the package level.&lt;br /&gt;&lt;a href="http://www.spinellis.gr/sw/ckjm/"&gt;&lt;span style="font-size: large;"&gt;22. ckjm&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;The program &lt;i&gt;ckjm&lt;/i&gt; calculates Chidamber and Kemerer object-oriented metrics by processing the bytecode of compiled Java files. The program calculates for each class the following six metrics proposed by Chidamber and Kemerer.&lt;br /&gt;&lt;a href="http://jameleon.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;23. Jameleon&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Jameleon is an automated testing framework that can be easily used by technical and non-technical users alike. One of the main concepts behind Jameleon is to create a group of keywords or tags that represent different screens of an application. All of the logic required to automate each particular screen can be defined in Java and mapped to these keywords. The keywords can then be organized with different data sets to form test scripts without requiring an in-depth knowledge of how the application works. The test scripts are then used to automate testing and to generate manual test case documentation. &lt;br /&gt;&lt;a href="http://www.incava.org/projects/doctorj"&gt;&lt;span style="font-size: large;"&gt;24. DoctorJ&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;DoctorJ analyzes Java code, in the following functional areas: documentation verification, statistics generation and syntax analysis.&lt;br /&gt;&lt;a href="http://innig.net/macker/"&gt;&lt;span style="font-size: large;"&gt;25. Macker&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Macker is a build-time architectural rule checking utility for Java developers. It's meant to model the architectural ideals programmers always dream up for their projects, and then break -- it helps keep code clean and consistent. You can tailor a rules file to suit a specific project's structure, or write some general "good practice" rules for your code. Macker doesn't try to shove anybody else's rules down your throat; it's flexible, and writing a rules file is part of the development process for each unique project.&lt;br /&gt;&lt;a href="http://www.squale.org/index.html"&gt;&lt;span style="font-size: large;"&gt;26. Squale&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Squale is a qualimetry platform that allows to analyze multi-language software applications in order to give a sharp and comprehensive picture of their quality: High level factors for top-managers and Practical indicators for development teams.&lt;br /&gt;&lt;a href="http://www.campwoodsw.com/sourcemonitor.html"&gt;&lt;span style="font-size: large;"&gt;27. SourceMonitor&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;The freeware program SourceMonitor lets you see inside your software source code to find out how much code you have and to identify the relative complexity of your modules. For example, you can use SourceMonitor to identify the code that is most likely to contain defects and thus warrants formal review.&lt;br /&gt;&lt;a href="http://www.panopticode.org/index.html"&gt;&lt;span style="font-size: large;"&gt;28. Panopticon&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;The Panopticode project provides a set of open source tools for gathering, correlating, and displaying code metrics.&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/metrics/"&gt;&lt;span style="font-size: large;"&gt;29. Eclipse Metrics plugin&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;article id="project-description"&gt;    &lt;/article&gt;&lt;br /&gt;Provide metrics calculation and dependency analyzer plugin for  the Eclipse platform. Measure various metrics with average and standard  deviation and detect cycles in package and type dependencies and graph  them.&lt;br /&gt;&lt;a href="http://qjpro.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;30. QJ-Pro&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;QJ-Pro is a comprehensive software inspection tool targeted towards the software developer. Developers can automatically inspect their Java source code and improve their Java programming skills as they write their programs. QJ-Pro provides descriptive Java patterns explaining error prone code constructs and providing solutions for it.&lt;br /&gt;&lt;a href="http://byecycle.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;31. Byecycle&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Byecycle is an auto-arranging dependency analysis plugin for Eclipse. Its goal is to make you feel sick when you see bad code and to make you feel happy when you see good code.&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/coqua/"&gt;&lt;span style="font-size: large;"&gt;32. Coqua&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Coqua measures 5 distinct Java code quality metrics, providing an overview and history for the management, and down-to-the-code, detailed views for the developer. Metrics can be defined per team. Ideal for mid- to large-sized and/or offshore projects.&lt;br /&gt;&lt;a href="http://depfind.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;33. Dependency Finder&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Extracts dependencies and OO metrics from Java class files produced by most Java compilers.&lt;br /&gt;&lt;a href="http://jalopy.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;34. Jalopy&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Jalopy is an easily configurable source code formatter that can detect, and fix, a number of code convention flaws that might appear in Java code. Jalopy is more of a code fixer than a code checker. Jalopy plug-ins are present for most IDEs and, in most cases, they gel quite seamlessly with the IDE.&lt;br /&gt;&lt;a href="http://www.kirkk.com/main/Main/JarAnalyzer"&gt;&lt;span style="font-size: large;"&gt;35. JarAnalyzer&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;JarAnalyzer is a dependency management tool for .jar files. JarAnalyzer will analyze all .jar in a given directory and identify the dependencies between each. Output formats include xml, with a stylesheet included to transform it to html, and GraphViz DOT, allowing you to produce a visual component diagram showing the relationships between .jar files. The xml output includes important design metrics such as Afferent and Efferent coupling, Abstractness, Instability, and Distance. There is also an Ant task available that allows you to include JarAnalyzer as part of your build script.&lt;br /&gt;&lt;a href="http://condenser.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;36. Condenser&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Condenser is a tool for finding and removing duplicated Java code. Unlike tools that only locate duplicated code, the aim of Condenser is to also automatically remove duplicated code where it is safe to do so.&lt;br /&gt;&lt;a href="http://www.workingfrog.org/index.html"&gt;&lt;span style="font-size: large;"&gt;37. Relief&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Relief provides a new look on Java projects. Relying on our ability to deal with real objects by examining their shape, size or relative place in space it gives a "physical" view on java packages, types and fields and their relationships, making them easier to handle. Lets discuss quickly how we interprete physical properties and how it can help us to grasp project characteristics.&lt;br /&gt;&lt;a href="http://jcsc.sourceforge.net/"&gt;&lt;span style="font-size: large;"&gt;38. JCSC&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;JCSC is a powerful tool to check source code against a highly definable coding standard and potential bad code. The standard covers naming conventions for class, interfaces, fields, parameter, ... . Also the structural layout of the type (class/interface) can be defined. Like where to place fields, either before or after the methods and in which order. The order can be defined through the visibility or by type (instance, class, constant). The same is applicable for methods. Each of those rules is highly customizable. Readability is enhanced by defining where to put white spaces in the code and when to use braces. The existence of correct JavaDoc can be enforced and various levels. Apart from that, it finds weaknesses in the the code -- potential bugs -- like empty catch/finally block, switch without default, throwing of type 'Exception', slow code.&lt;br /&gt;&lt;a href="http://spoon.gforge.inria.fr/"&gt;&lt;span style="font-size: large;"&gt;39. Spoon&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Spoon is a Java program processor that fully supports Java 5. It provides a complete and fine-grained Java metamodel where any program element (classes, methods, fields, statements, expressions...) can be accessed both for reading and modification. Spoon can be used on validation purpose, to ensure that your programs respect some programming conventions or guidelines, or for program transformation, by using a pure-Java template engine.&lt;br /&gt;&lt;a href="http://www.jutils.com/index.html"&gt;&lt;span style="font-size: large;"&gt;40. Lint4j&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Lint4j ("Lint for Java") is a static Java source and byte code analyzer that detects locking and threading issues, performance and scalability problems, and checks complex contracts such as Java serialization by performing type, data flow, and lock graph analysis.&lt;br /&gt;&lt;a href="http://www.crap4j.org/"&gt;&lt;span style="font-size: large;"&gt;41. Crap4j&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Crap4j is a Java implementation of the CRAP (Change Risk Analysis and Predictions) software metric – a mildly offensive metric name to help protect you from truly offensive code.&lt;br /&gt;&lt;a href="http://babelfish.arc.nasa.gov/trac/jpf"&gt;&lt;span style="font-size: large;"&gt;42. PathFinder&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Java PathFinder (JPF) is a system to verify executable Java bytecode programs. In its basic form, it is a Java Virtual Machine (JVM) that is used as an explicit state software model checker, systematically exploring all potential execution paths of a program to find violations of properties like deadlocks or unhandled exceptions. Unlike traditional debuggers, JPF reports the entire execution path that leads to a defect. JPF is especially well-suited to finding hard-to-test concurrency defects in multithreaded program&lt;br /&gt;&lt;a href="http://www.sable.mcgill.ca/soot/"&gt;&lt;span style="font-size: large;"&gt;43. Soot&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Soot can be used as a stand alone tool to optimize or inspect class files, as well as a framework to develop optimizations or transformations on Java bytecode. &lt;br /&gt;&lt;a href="http://secure.ucd.ie/products/opensource/ESCJava2/"&gt;&lt;span style="font-size: large;"&gt;44. ESC/Java2&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;The Extended Static Checker for Java version 2 (ESC/Java2) is a programming tool that attempts to find common run-time errors in JML-annotated Java programs by static analysis of the program code and its formal annotations. Users can control the amount and kinds of checking that ESC/Java2 performs by annotating their programs with specially formatted comments called pragmas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: center;"&gt;&lt;article id="project-description"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;* * *&lt;/span&gt;&lt;/article&gt;&lt;/div&gt;&lt;article id="project-description"&gt;&lt;/article&gt;&lt;/div&gt;&lt;article id="project-description"&gt;&lt;/article&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;This list includes open sourced and free tools. I intentionally have excluded commercial tools. I'm sure there are much more tools. In case your know some of them which isn't listed here please add comment to this post.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-801462771869158925?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/801462771869158925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/08/java-code-quality-tools-overview.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/801462771869158925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/801462771869158925'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/08/java-code-quality-tools-overview.html' title='Java Code Quality Tools - Overview'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-NleZOjNwK6k/TlqM4Q_qjVI/AAAAAAAAAeU/mhQgYY6yb9c/s72-c/Java+Code+Quality.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-6354433935970271529</id><published>2011-08-14T23:52:00.003+02:00</published><updated>2011-08-14T23:57:00.831+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>My reflection on "Programming Achievements: How to Level Up as a Developer"</title><content type='html'>Recently, I've read an amazing blog post &lt;a href="http://jasonrudolph.com/blog/2011/08/09/programming-achievements-how-to-level-up-as-a-developer/"&gt;"Programming Achievements: How to Level Up as a Developer"&lt;/a&gt;. Also, it worth to read comments to this post, they are really interesting, subjective and personal. But, in any case you'll get something to think about. How to measure your own professional achievements, different ways for improvements and some start point for planning all these stuff.&lt;br /&gt;&lt;br /&gt;The author suggests to use GitHub Gist as a natural way of improvements to keep them tracking. So, I've just forked his gist and performed several initial changes (see &lt;a href="https://gist.github.com/1141765"&gt;https://gist.github.com/1141765&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1141765.js?file=programming-achievements.md"&gt;&lt;/script&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-6354433935970271529?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/6354433935970271529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/08/recently-ive-read-amazing-blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6354433935970271529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6354433935970271529'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/08/recently-ive-read-amazing-blog-post.html' title='My reflection on &quot;Programming Achievements: How to Level Up as a Developer&quot;'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-6653587161335310507</id><published>2011-07-30T15:11:00.002+02:00</published><updated>2011-07-30T15:12:04.717+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='itbooze'/><category scheme='http://www.blogger.com/atom/ns#' term='clojure'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>IT Booze Meetup #2: Scala, Clojure, Groovy</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://sites.google.com/site/itboozeinif/_/rsrc/1309422340802/config/ITbooze.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://sites.google.com/site/itboozeinif/_/rsrc/1309422340802/config/ITbooze.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Today, I had a chance to attend local user group &lt;a href="https://sites.google.com/site/itboozeinif/home"&gt;IT Booze&lt;/a&gt;. It was the second meetup and it was very interesting, because of topics which were under discussion: Scala, Clojure And Groovy. I love such events especially in my town. :-)&lt;br /&gt;&lt;br /&gt;I'd like to share my &lt;i&gt;reflections &lt;/i&gt;regarding these cool languages.&lt;br /&gt;&lt;br /&gt;As you know these languages are very popular on JVM (of cause not so popular as Java :-). And I'm sure every passionate Java/JVM developer has been thinking "what's the &lt;b&gt;Next&lt;/b&gt; &lt;b&gt;Big Language&lt;/b&gt;". It's really hard to choose the next one.&lt;br /&gt;&lt;br /&gt;So, here is a short "brain snapshot":&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Scala and Clojure are great languages with huge amount of interesting features, but to master them we need to use Scala (or Clojure) on daily basis.&lt;/li&gt;&lt;li&gt;Scala appeared as complex language. I think it requires a &lt;span class="st"&gt;steeper learning curve then Clojure or Groovy. It means we must invest much, much more.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="st"&gt;Clojure has lisp syntax, but innovative concurrency concept is worth to look into. I say &lt;b&gt;lisp&lt;/b&gt;, because it might be a stopper for someone to evaluate it as a next big language.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="st"&gt;Clojure and functional programming require to "patch" our way of thinking. And it can be difficult.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="st"&gt;Groovy is agile language. We (Java developers) can start using it right away. I think we should invest more in Groovy just to boost our productivity in: scripting, testing, automation routine work, etc. It doesn't require big investments and we can learn as we go.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span class="st"&gt; So, here is outcome from this meetup:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="st"&gt;start using Groovy&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="st"&gt;look into Clojure concepts&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="st"&gt;postpone Scala for now&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="st"&gt;Could you please share your thoughts regarding this?&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-6653587161335310507?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/6653587161335310507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/07/it-booze-meetup-2-scala-clojure-groovy.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6653587161335310507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6653587161335310507'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/07/it-booze-meetup-2-scala-clojure-groovy.html' title='IT Booze Meetup #2: Scala, Clojure, Groovy'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-7656113624794859762</id><published>2011-07-20T22:29:00.001+02:00</published><updated>2011-07-20T22:29:33.556+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>How to disable System.out?</title><content type='html'>I have a legacy code base with tons of &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;System.out.println()&lt;/span&gt;. Actually, I don't need this in production, but during development it's cool enough to have. So, I've decided to disable &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;System.out&lt;/span&gt;:&lt;br /&gt;&lt;pre class="brush: java;"&gt;package org.halyph;&lt;br /&gt;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;import java.io.PrintStream;&lt;br /&gt;&lt;br /&gt;public class DisableMain {&lt;br /&gt;	public static void main(String[] args) {&lt;br /&gt;		PrintStream printStreamOriginal = System.out;&lt;br /&gt;&lt;br /&gt;		boolean DEBUG = true;&lt;br /&gt;		if (!DEBUG) {&lt;br /&gt;			System.setOut(new PrintStream(new OutputStream() {&lt;br /&gt;				public void close() {}&lt;br /&gt;				public void flush() {}&lt;br /&gt;				public void write(byte[] b) {}&lt;br /&gt;				public void write(byte[] b, int off, int len) {}&lt;br /&gt;				public void write(int b) {&lt;br /&gt;				}&lt;br /&gt;			}));&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		long a = System.currentTimeMillis();&lt;br /&gt;		for (int i = 0; i &amp;lt; 1000000; i++) {&lt;br /&gt;			System.out.println("Hello");&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		long b = System.currentTimeMillis() - a;&lt;br /&gt;&lt;br /&gt;		System.setOut(printStreamOriginal);&lt;br /&gt;		System.out.println(b);&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So, plain looped &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;println &lt;/b&gt;required ~10 seconds on my laptop, and only ~1 second with null output stream.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-7656113624794859762?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/7656113624794859762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/07/how-to-disable-systemout.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/7656113624794859762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/7656113624794859762'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/07/how-to-disable-systemout.html' title='How to disable System.out?'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-6135643218885765765</id><published>2011-07-19T00:45:00.002+02:00</published><updated>2011-07-19T00:49:00.453+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Ubuntu Server 10.04.2 VM Basic Configuration</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-qp-nTnpstbg/TiSxvkDbx0I/AAAAAAAAAdk/8jgWmGkr_5o/s1600/bg-logo.gif" /&gt; &lt;span style="font-size: x-large;"&gt;&lt;b&gt;&amp;nbsp;+&lt;/b&gt; &lt;/span&gt;&lt;img border="0" height="48px" src="http://2.bp.blogspot.com/-aTuq4gG_ZoI/S8ehmbmqNAI/AAAAAAAAAV8/FAQFVMjoox8/s1600/1271369264_start-here-ubuntuoriginal.png" width="48px" /&gt;&lt;span style="font-size: x-large;"&gt; &lt;b&gt;+&lt;/b&gt; &lt;/span&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-yj-eVJbdFPE/TiSweVkJDbI/AAAAAAAAAdg/Hei8Ko3FBBg/s1600/kitty.png" /&gt;&lt;/div&gt;Required tools:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; VMware Worstation&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ubuntu.com/"&gt;Ubuntu &lt;/a&gt;Server 10.04.2&lt;/li&gt;&lt;li&gt;&lt;a href="http://kitty.9bis.com/"&gt;Kitty &lt;/a&gt;(Putty ssh client fork)&lt;/li&gt;&lt;/ul&gt;I suppose that You know how to setup plain VM via VMware.&lt;br /&gt;And here is my basic Ubuntu VM configuration:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.ubuntu.com/"&gt;Ubuntu &lt;/a&gt;Server 10.04.2 doesn't include SSH server by default. That's why you have to install it:&lt;/li&gt;&lt;pre class="brush: bash;"&gt;sudo apt-get install ssh&lt;br /&gt;&lt;/pre&gt;&lt;li&gt;Check your Ubuntu VM IP:&lt;/li&gt;&lt;pre class="brush: bash;"&gt;$ ifconfig&lt;br /&gt;eth0      Link encap:Ethernet  HWaddr 00:0c:29:04:55:d6&lt;br /&gt;          inet addr:192.168.11.134  Bcast:192.168.11.255  Mask:255.255.255.0&lt;br /&gt;          inet6 addr: fe80::20c:29ff:fe04:55d6/64 Scope:Link&lt;br /&gt;          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;          RX packets:50 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;          TX packets:52 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;          collisions:0 txqueuelen:1000&lt;br /&gt;          RX bytes:6303 (6.3 KB)  TX bytes:7366 (7.3 KB)&lt;br /&gt;          Interrupt:19 Base address:0x2000&lt;br /&gt;&lt;/pre&gt;&lt;li&gt;Configure Kitty connection host name:&amp;nbsp; &lt;/li&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-rZ_fYBE3CFE/TiS0rfsEN7I/AAAAAAAAAdo/Lv7-_Vl7Ijs/s320/Clipboard-1.png" width="244" /&gt;&lt;li&gt;Create two scripts for:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;startup VM in background (&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;start_vm.bat&lt;/span&gt;&lt;/b&gt;)&lt;/li&gt;&lt;pre class="brush: bash;"&gt;set MYVM="F:\VMs\ubuntu-10.04.2-server\Ubuntu Server 10.04.2.vmx"&lt;br /&gt;set VMRUN="E:\Program Files\VMware\VMware Workstation\vmrun"&lt;br /&gt;&lt;br /&gt;%VMRUN% -T ws start %MYVM% nogui&lt;br /&gt;&lt;/pre&gt;&lt;li&gt;shutdown VM (&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;stop_vm.ba&lt;/span&gt;&lt;/b&gt;t)&lt;br /&gt;&lt;/li&gt;&lt;pre class="brush: bash;"&gt;set MYVM="F:\VMs\ubuntu-10.04.2-server\Ubuntu Server 10.04.2.vmx"&lt;br /&gt;set VMRUN="E:\Program Files\VMware\VMware Workstation\vmrun"&lt;br /&gt;&lt;br /&gt;%VMRUN% stop %MYVM% soft&lt;br /&gt;&lt;/pre&gt;&lt;/ul&gt;&lt;li&gt;Configure Kitty for auto-login:&lt;/li&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-pK4AnYImpbo/TiS2j12G8YI/AAAAAAAAAds/OGov-utOIOw/s1600/kitty_cfg.PNG" /&gt;&lt;li&gt;VM startup and Kitty run can be combined into one script&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-6135643218885765765?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/6135643218885765765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/07/ubuntu-server-10042-vm-basic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6135643218885765765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6135643218885765765'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/07/ubuntu-server-10042-vm-basic.html' title='Ubuntu Server 10.04.2 VM Basic Configuration'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-qp-nTnpstbg/TiSxvkDbx0I/AAAAAAAAAdk/8jgWmGkr_5o/s72-c/bg-logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-8946767289987742290</id><published>2011-07-11T22:00:00.001+02:00</published><updated>2011-07-11T22:00:39.952+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><category scheme='http://www.blogger.com/atom/ns#' term='clojure'/><title type='text'>Clojure Books</title><content type='html'>&lt;span style="font-size: large;"&gt;Published&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/1934356336/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399369&amp;amp;creativeASIN=1934356336"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=1934356336&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=knowisever-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1934356336&amp;amp;camp=217145&amp;amp;creative=399369" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/1430272317/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399369&amp;amp;creativeASIN=1430272317"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=1430272317&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=knowisever-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1430272317&amp;amp;camp=217145&amp;amp;creative=399369" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Books which aren't fully dedicated to Clojure&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/1935182455/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399369&amp;amp;creativeASIN=1935182455"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=1935182455&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=knowisever-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1935182455&amp;amp;camp=217145&amp;amp;creative=399369" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/193435659X/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399369&amp;amp;creativeASIN=193435659X"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=193435659X&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=knowisever-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=193435659X&amp;amp;camp=217145&amp;amp;creative=399369" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Coming Soon (in progress)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/1449394701/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399373&amp;amp;creativeASIN=1449394701"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=1449394701&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=knowisever-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1449394701&amp;amp;camp=217145&amp;amp;creative=399373" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/1935182595/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399369&amp;amp;creativeASIN=1935182595"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=1935182595&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=knowisever-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1935182595&amp;amp;camp=217145&amp;amp;creative=399369" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-8946767289987742290?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/8946767289987742290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/07/clojure-books.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8946767289987742290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8946767289987742290'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/07/clojure-books.html' title='Clojure Books'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-515592781437808025</id><published>2011-06-28T13:34:00.000+02:00</published><updated>2011-06-28T13:34:54.522+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>How to Add Jars at Runtime?</title><content type='html'>Suppose you have the next project structure:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-QtlWo-1EDkg/TgmwZRBlMUI/AAAAAAAAAdE/10zbvjjHeTE/s1600/img1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-QtlWo-1EDkg/TgmwZRBlMUI/AAAAAAAAAdE/10zbvjjHeTE/s1600/img1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here is the source code:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;package org.halyph.one;&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.lang.reflect.InvocationTargetException;&lt;br /&gt;import java.lang.reflect.Method;&lt;br /&gt;import java.net.MalformedURLException;&lt;br /&gt;import java.net.URL;&lt;br /&gt;import java.net.URLClassLoader;&lt;br /&gt;import java.security.CodeSource;&lt;br /&gt;&lt;br /&gt;import org.halyph.three.MyClassThree;&lt;br /&gt;import org.halyph.two.MyClassTwo;&lt;br /&gt;&lt;br /&gt;public class DynamicClassLoader {&lt;br /&gt; public static void main(String[] args) throws Exception {&lt;br /&gt;  System.out.println("DynamicClassLoader.main()");&lt;br /&gt;&lt;br /&gt;  MyClassTwo myClassTwo = new MyClassTwo();&lt;br /&gt;  MyClassThree myClassThree = new MyClassThree();&lt;br /&gt;  myClassTwo.printMessage();&lt;br /&gt;  myClassThree.printMessage();&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;package org.halyph.two;&lt;br /&gt;&lt;br /&gt;public class MyClassTwo {&lt;br /&gt; public void printMessage() {&lt;br /&gt;  System.out.println("MyClassTwo.printMessage()");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;package org.halyph.three;&lt;br /&gt;&lt;br /&gt;public class MyClassThree {&lt;br /&gt; public void printMessage() {&lt;br /&gt;  System.out.println("MyClassThree.printMessage()");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;And each of these classes are packed in separate jar:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;org.halyph.one.DynamicClassLoader - dynone.jar&lt;/li&gt;&lt;li&gt;org.halyph.two.MyClassTwo - dyntwo.jar&lt;/li&gt;&lt;li&gt;org.halyph.three.MyClassThree - dynthree.jar&lt;/li&gt;&lt;/ul&gt;To run this application you should put all these jars on classpath,&lt;br /&gt;E.g. the application output&lt;br /&gt;&lt;pre class="brush: bash;"&gt;# java -cp dynone.jar;dyntwo.jar;dynthree.jar org.halyph.one.DynamicClassLoader&lt;br /&gt;DynamicClassLoader.main()&lt;br /&gt;MyClassTwo.printMessage()&lt;br /&gt;MyClassThree.printMessage()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;But there are some cases when &lt;b&gt;dyntwo.jar&lt;/b&gt; and &lt;b&gt;dynthree.jar&lt;/b&gt; jars location can be known during runtime only. And we have to run our application in the next way:&lt;br /&gt;&lt;pre class="brush: bash;"&gt;# java -cp dynone.jar org.halyph.one.DynamicClassLoader&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Of cause, you'll get the next (or similar) error:&lt;br /&gt;&lt;pre class="brush: bash;"&gt;# java -cp dynone.jar org.halyph.one.DynamicClassLoader&lt;br /&gt;DynamicClassLoader.main()&lt;br /&gt;Exception in thread "main" java.lang.NoClassDefFoundError: org/halyph/two/MyClassTwo&lt;br /&gt;        at org.halyph.one.DynamicClassLoader.main(DynamicClassLoader.java:28)&lt;br /&gt;Caused by: java.lang.ClassNotFoundException: org.halyph.two.MyClassTwo&lt;br /&gt;        at java.net.URLClassLoader$1.run(Unknown Source)&lt;br /&gt;        at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt;        at java.net.URLClassLoader.findClass(Unknown Source)&lt;br /&gt;        at java.lang.ClassLoader.loadClass(Unknown Source)&lt;br /&gt;        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)&lt;br /&gt;        at java.lang.ClassLoader.loadClass(Unknown Source)&lt;br /&gt;        ... 1 more&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So, how can we solve this problem?&lt;br /&gt;Here is the patched org.halyph.one.DynamicClassLoader:&lt;br /&gt;&lt;pre class="brush: java;"&gt;package org.halyph.one;&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.lang.reflect.InvocationTargetException;&lt;br /&gt;import java.lang.reflect.Method;&lt;br /&gt;import java.net.MalformedURLException;&lt;br /&gt;import java.net.URL;&lt;br /&gt;import java.net.URLClassLoader;&lt;br /&gt;import java.security.CodeSource;&lt;br /&gt;&lt;br /&gt;import org.halyph.three.MyClassThree;&lt;br /&gt;import org.halyph.two.MyClassTwo;&lt;br /&gt;&lt;br /&gt;public class DynamicClassLoader {&lt;br /&gt;&lt;br /&gt; public static void main(String[] args) throws Exception {&lt;br /&gt;  System.out.println("DynamicClassLoader.main()");&lt;br /&gt;&lt;br /&gt;  String[] jars = new String[] { "dyntwo.jar",  "dynthree.jar"};&lt;br /&gt;  addJarsToClasspath(getRootFolder(), jars);&lt;br /&gt;  MyClassTwo myClassTwo = new MyClassTwo();&lt;br /&gt;  MyClassThree myClassThree = new MyClassThree();&lt;br /&gt;  myClassTwo.printMessage();&lt;br /&gt;  myClassThree.printMessage();&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static void addJarsToClasspath(String rootFolder, String[] jarNames)&lt;br /&gt;   throws SecurityException, NoSuchMethodException,&lt;br /&gt;   MalformedURLException, IllegalArgumentException,&lt;br /&gt;   IllegalAccessException, InvocationTargetException {&lt;br /&gt;&lt;br /&gt;  Method addURL = URLClassLoader.class.getDeclaredMethod("addURL",&lt;br /&gt;    new Class[] { URL.class });&lt;br /&gt;  addURL.setAccessible(true); // you're telling the JVM to override the&lt;br /&gt;         // default visibility&lt;br /&gt;&lt;br /&gt;  File[] files = new File[jarNames.length];&lt;br /&gt;  int i = 0;&lt;br /&gt;  for (String jarName : jarNames) {&lt;br /&gt;   files[i++] = new File(rootFolder + jarName);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // returning the jars to add&lt;br /&gt;  ClassLoader cl = ClassLoader.getSystemClassLoader();&lt;br /&gt;  for (i = 0; i &amp;lt; files.length; i++) {&lt;br /&gt;   URL url = files[i].toURL();&lt;br /&gt;   addURL.invoke(cl, new Object[] { url });&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static String getRootFolder() {&lt;br /&gt;  String result = null;&lt;br /&gt;  try {&lt;br /&gt;   String qualifiedClassName = DynamicClassLoader.class.getName();&lt;br /&gt;&lt;br /&gt;   Class qc = Class.forName(qualifiedClassName);&lt;br /&gt;   CodeSource source = qc.getProtectionDomain().getCodeSource();&lt;br /&gt;   if (source != null) {&lt;br /&gt;    URL location = source.getLocation();&lt;br /&gt;    File file = new File(location.toURI());&lt;br /&gt;&lt;br /&gt;    result = file.getParent() + "/";&lt;br /&gt;   } else {&lt;br /&gt;    System.out.println(qualifiedClassName + " : "&lt;br /&gt;      + "unknown source");&lt;br /&gt;   }&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   System.err.println("Unable to locate class on command line.");&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  }&lt;br /&gt;  return result;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here is the output of patched application:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: bash;"&gt;# java -cp dynone.jar org.halyph.one.DynamicClassLoader&lt;br /&gt;DynamicClassLoader.main()&lt;br /&gt;MyClassTwo.printMessage()&lt;br /&gt;MyClassThree.printMessage()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So, two additional methods were added to support this "magic":&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;public static String getRootFolder()&lt;/span&gt;- this method simply identifies the folder where dynone.jar (on behalf of &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.halyph.one.DynamicClassLoader&lt;/span&gt; class) is located. Because for this demo we put all application-related jars in one folder&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;public static void addJarsToClasspath(String rootFolder, String[] jarNames)&lt;/span&gt; - and here the "magic" happen. Based on this post on &lt;a href="http://www.velocityreviews.com/forums/t148021-dynamically-change-the-classpath.html"&gt;www.velocityreviews.com forums&lt;/a&gt;:&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;There is a well-known hack for dynamically extending the class path.&lt;br /&gt;It generally works, and we use it in production releases of our software. It uses reflection, plus the knowledge that the default ClassLoader *is* a URLClassLoader.&lt;br /&gt;...&lt;br /&gt;As I said, this is a hack, &lt;b&gt;undocumented&lt;/b&gt;, and subject to change at any&lt;br /&gt;time. Indeed, there's no guarantee that extant JREs use a URLClassLoader as a default class loader. Moreover, it only works if your program doesn't have a security manager (it probably doesn't), or your code is trusted.&lt;br /&gt;...&lt;br /&gt;We've never seen problems with it, although our software is used on a plethora of different boxes and OSs.&lt;/blockquote&gt;It works for me and I hope it will be useful for you as well.&lt;br /&gt;Happy hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-515592781437808025?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/515592781437808025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/06/how-to-add-jars-at-runtime.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/515592781437808025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/515592781437808025'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/06/how-to-add-jars-at-runtime.html' title='How to Add Jars at Runtime?'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-QtlWo-1EDkg/TgmwZRBlMUI/AAAAAAAAAdE/10zbvjjHeTE/s72-c/img1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-5359131935032843095</id><published>2011-06-19T23:55:00.000+02:00</published><updated>2011-06-19T23:55:52.358+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='annotation'/><title type='text'>@Override Java Annotation Issue</title><content type='html'>Let's create one simple interface and class which implements this interface:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;public interface IOverride {&lt;br /&gt;    void doSomething();&lt;br /&gt;}&lt;br /&gt;public class Overridden implements IOverride {&lt;br /&gt;    @Override&lt;br /&gt;    public void doSomething() {&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And compile this stuff on JDK v.1.5:&lt;br /&gt;&lt;pre class="brush: java;"&gt;# javac -d classes src\*.java&lt;br /&gt;src\Overridden.java:2: method does not override a method from its superclass&lt;br /&gt;        @Override&lt;br /&gt;         ^&lt;br /&gt;1 error&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Let's try to do the same on JDK v.1.6 - And, You've got no compilation error.&lt;br /&gt;&lt;blockquote&gt;Between Java 5 and Java 6 changes to the specification of @Override have been made. In Java 6 it is possible to add the @Override annotation to methods that implement methods of an interface which is not allowed in Java 5. (&lt;a href="http://dertompson.com/2008/01/25/override-specification-changes-in-java-6/"&gt;http://dertompson.com/2008/01/25/override-specification-changes-in-java-6/&lt;/a&gt;)&lt;/blockquote&gt;&lt;br /&gt;Also, I've found very interesting discussion on Stackoverflow: &lt;a href="http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why"&gt;http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why:&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Q:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;What are the best practices for using Java's @Override annotation and why?&lt;br /&gt;It seems like it would be overkill to mark every single overridden method with the @Override annotation. Are there certain programming situations that call for using the @Override and others that should never use the @Override?&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;A:&lt;/span&gt; &lt;br /&gt;&lt;blockquote&gt;Use it every time you override a method for two benefits. Do it so that you can take advantage of the compiler checking to make sure you actually are overriding a method when you think you are. This way, if you make a common mistake of misspelling a method name or not correctly matching the parameters, you will be warned that you method does not actually override as you think it does. Secondly, it makes your code easier to understand because it is more obvious when methods are overwritten.&lt;br /&gt;&lt;br /&gt;Additionally, in Java 1.6 you can use it to mark when a method implements an interface for the same benefits. I think it would be better to have a separate annotation (like &lt;i&gt;&lt;b&gt;@Implements&lt;/b&gt;&lt;/i&gt;), but it's better than nothing.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-5359131935032843095?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/5359131935032843095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/06/override-java-annotation-issue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/5359131935032843095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/5359131935032843095'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/06/override-java-annotation-issue.html' title='@Override Java Annotation Issue'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-5643843444686483350</id><published>2011-06-12T01:28:00.000+02:00</published><updated>2011-06-12T01:28:14.653+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><title type='text'>ITEvent 2011, Local Conference – Report</title><content type='html'>Yesterday (June 11, 2011) I attended the local (Ivano-Frankivsk, Ukraine) IT related conference “&lt;a href="http://itevent.if.ua/content/it-event-2011-vesna"&gt;itEvent 2011&lt;/a&gt;”. I must say I am impressed. There were more than a hundred participants. And it’s amazing. We live in a very small city and this local event/conference waked up so many developers to attend this event.&lt;br /&gt;&lt;br /&gt;The conference had three parallel flows/stages. And it’s a good sign. The organizers give us a chance to choose the most preferable topic(s) to attend. Additional good point is that each presentation was shot on video. So, I could see missed interesting topics.&lt;br /&gt;&lt;br /&gt;Here is the talks (which I saw and hear) overview:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.       “Two sides of IT interview” by Nataliya Mukhitdunova.&lt;/b&gt; To tell the truth I wasn’t expected that such boring subject can be presented in such interesting way. Just &lt;i&gt;wow&lt;/i&gt;. The speaker was concentrated on two interview stakeholders: HR and Developer. She clearly defined their goals and expectations, tips for HRs (as interviewer) and for Developers (as interviewee). And this speech was so easy made and “light” that I felt “I’m in right place in right time”. The presenter doesn’t use any slides or other supportive material, she was just well prepared with good background in this area.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.       “Kanban and the creation of the high effective teams” by Sergiy Fitsak and Anatoliy Okhotnikov.&lt;/b&gt; I’ve expected to hear some advices, case studies (especially BAD experience) and of cause the process implementation issues. And I’ve got all these. Thanks to the presenters. The one “minus” was that this talk wasn’t well coordinated between two presenters and they overused the presentation’s time limit. They hadn't predicted that they got so many questions and discussions.  I can say that this talk really revived the audience. And it was cool.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.       “Facebook as a mobile application platform” by Yevgen Vershynin.&lt;/b&gt; The presenter showed us from the very begging what the Facebook platform is and how to use it. This area was absolutely new for me. Additionally, he was well prepared and his speech was very dynamic. And, even more, he showed some passion during the speech. That’s why it was so interest. I must admit that Yevgen (the presenter) showed very high presentation, communication skills, and good domain knowledge. Very impressive.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4.       “How to meet customer expectations” by Ruslan Seredyuk.&lt;/b&gt; This topic was absolutely new for me. I mean I’ve never thought about “customer expectations” and “what is the successful project”. I like to discover something new. The presenter showed real knowledge which is based on work experience. And it’s very important. Every single case in his presentation had small life sample, which was very useful to demonstrate the all dark places in this mess area (i.e. customer expectations). Again, the presenter was well prepared with real case studies. The one "minus" is that the target audience wasn’t mentioned. And this topic wasn’t dedicated for the junior developers, IMHO.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now, let’s talk about conference organizations:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pros:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.       There were a lot of coffee, cakes and water.&lt;br /&gt;&lt;br /&gt;2.       The registration was straightforward.&lt;br /&gt;&lt;br /&gt;3.       The atmosphere was VERY friendly.&lt;br /&gt;&lt;br /&gt;4.       The presentations' quality was good.&lt;br /&gt;&lt;br /&gt;5.       And the most important, the &lt;b&gt;itEvent &lt;/b&gt;organizer overdid their own expectation, they gathered huge amount of IT related people in one place and gave them a chance to talk to each other and share personal knowledge, vision and contacts. As for me, the goal was perfectly achieved.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Cons:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.       I think that Conference, Camp or similar event should have some motto.&lt;br /&gt;&lt;br /&gt;2.       It’s good to have agenda for every presentation/speech in English as well&lt;br /&gt;&lt;br /&gt;3.       It’s good to have target audience for every presentation/speech. It’s even more important in multi-target conference (here we can see management, technical and usability directions, etc.)&lt;br /&gt;&lt;br /&gt;4.       The conference’s web resource is in Ukrainian only. It’s good to have English as well. Also, the web resource structure could be improved.&lt;br /&gt;&lt;br /&gt;So, the overall impression is good. This local conference exceeded my expectations. I hope we’ll have the similar event next year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-5643843444686483350?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/5643843444686483350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/06/itevent-2011-local-conference-report.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/5643843444686483350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/5643843444686483350'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/06/itevent-2011-local-conference-report.html' title='ITEvent 2011, Local Conference – Report'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-486750601390469480</id><published>2011-06-06T00:41:00.003+02:00</published><updated>2011-06-06T00:57:57.687+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='top'/><title type='text'>Top 15 Java Web Resources</title><content type='html'>Here is the top 15 Java-related resources I'd like to share with you.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-npyL_3BzIOw/TevorVuXEFI/AAAAAAAAAbo/kTnrMKRuqkE/s1600/images2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" id=":current_picnik_image" src="http://4.bp.blogspot.com/-npyL_3BzIOw/TevorVuXEFI/AAAAAAAAAbo/kTnrMKRuqkE/s1600/images2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Blogs, News &lt;a href="http://en.wikipedia.org/wiki/Aggregator"&gt;aggregator&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;img border="0" src="http://java.dzone.com/sites/all/themes/dzone/images/mh_dzone_logo.gif" /&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size: x-large;"&gt;1.&lt;/span&gt;&amp;nbsp; &lt;a href="http://www.dzone.com/"&gt;http://www.dzone.com&lt;/a&gt; is a very big aggregator for news, articles, video interviews, tutorials, reviews, and announcements. Also, you can use some particular, dedicated "zones":&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.dzone.com/"&gt;http://java.dzone.com&lt;/a&gt; - Javalobby&lt;br /&gt;IDEs and Tools:&lt;br /&gt;&lt;a href="http://eclipse.dzone.com/"&gt;http://eclipse.dzone.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://jetbrains.dzone.com/"&gt;http://jetbrains.dzone.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://netbeans.dzone.com/"&gt;http://netbeans.dzone.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This resource contains huge amount of information and you could easily lost there (50-80 new items per day). So, I suggest to use Javalobby as a start point.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;img border="0" height="33px" src="http://cdn1.infoq.com/styles/i/logo.gif" width="98px" /&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size: x-large;"&gt;2. &lt;/span&gt;&lt;a href="http://www.infoq.com/"&gt;http://www.infoq.com&lt;/a&gt;&amp;nbsp; News, videos, interviews, conference reports, etc.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;img border="0" height="33px" src="http://www.java.net/sites/all/themes/java_adaptive/images/logo.png" width="98px" /&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;3.&lt;/span&gt; &lt;a href="http://www.java.net/"&gt;http://www.java.net&lt;/a&gt; Articles, blogs, wiki, news.&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Forums and Q&amp;amp;A&lt;/span&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;img border="0" height="98px" src="http://www.javaranch.com/images/mooseSaloonAnimated1.gif" width="105px" /&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;4.&lt;/span&gt; &lt;a href="http://www.javaranch.com/"&gt;http://www.javaranch.com&lt;/a&gt; is one of the biggest Java forum&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-rzVDBPnTs5U/Tev5pCUyWuI/AAAAAAAAAbs/WlYbHy4FoQA/s1600/sprites.gif" /&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;5.&lt;/span&gt; &lt;a href="http://stackoverflow.com/"&gt;http://stackoverflow.com&lt;/a&gt; it's one of the biggest Q&amp;amp;A site which includes such features as Q&amp;amp;A, forum, wiki, blog, collaboration and community based content moderation. &lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Videos&lt;/span&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-kqptIDH2FSM/Tev9flmwKiI/AAAAAAAAAbw/Wox5c99ZlFM/s1600/1307311439_iChat.png" /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;6.&lt;/span&gt; &lt;a href="http://www.java-tv.com/"&gt;http://www.java-tv.com&lt;/a&gt; &lt;b&gt;Java-TV.com&lt;/b&gt; is a directory of videos, interviews and tutorials focused on software development activities with the Java™ programming language.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-kqptIDH2FSM/Tev9flmwKiI/AAAAAAAAAbw/Wox5c99ZlFM/s1600/1307311439_iChat.png" /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;7.&lt;/span&gt; &lt;a href="http://www.softdevtube.com/"&gt;http://www.softdevtube.com&lt;/a&gt; &lt;b&gt;SoftDevTube &lt;/b&gt;is a repository of videos, interviews and tutorials focused on all software development activities.&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Cookbooks&lt;/span&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-3zjI5imzwes/TewJLG1vIGI/AAAAAAAAAb4/qH95QqwAfh4/s1600/1307313979_information2.png" /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;8.&lt;/span&gt; &lt;a href="http://www.discursive.com/book/322"&gt;http://www.discursive.com/book/322&lt;/a&gt; &lt;b&gt;Common Java Cookbook&lt;/b&gt;&lt;br /&gt;This collection provides expert tips for using Java-based utilities from projects such as Apache Commons, Apache Lucene, and Apache Velocity. You don't have to be an expert, the book's solution-based format contains code examples for a wide variety of web, XML, network, testing, and application projects. If you want to learn how to combine common open-source Java utilities to create powerful Java applications and tools, the Common Java Cookbook is for you.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-3zjI5imzwes/TewJLG1vIGI/AAAAAAAAAb4/qH95QqwAfh4/s1600/1307313979_information2.png" /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;9.&lt;/span&gt; &lt;a href="http://mindprod.com/jgloss/jgloss.html"&gt;http://mindprod.com/jgloss/jgloss.html&lt;/a&gt; &lt;b&gt;Canadian Mind Products Java &amp;amp; Internet Glossary &lt;/b&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-3zjI5imzwes/TewJLG1vIGI/AAAAAAAAAb4/qH95QqwAfh4/s1600/1307313979_information2.png" /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;10.&lt;/span&gt; &lt;a href="http://www.javapractices.com/home/HomeAction.do"&gt;http://www.javapractices.com/home/HomeAction.do&lt;/a&gt; &lt;b&gt;Collected Java Practices. &lt;/b&gt;It offers concise presentations of Java practices, tasks, and designs, illustrated with syntax-highlighted code examples. &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-3zjI5imzwes/TewJLG1vIGI/AAAAAAAAAb4/qH95QqwAfh4/s1600/1307313979_information2.png" /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;11.&lt;/span&gt; &lt;a href="http://www.leepoint.net/notes-java/index.html"&gt;http://www.leepoint.net/notes-java/index.html&lt;/a&gt; &lt;b&gt;Java Notes.&lt;/b&gt;&lt;br /&gt;These Java programming notes are written to fill in missing or weak topics in textbooks the Author has taught from. &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-3zjI5imzwes/TewJLG1vIGI/AAAAAAAAAb4/qH95QqwAfh4/s1600/1307313979_information2.png" /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;12.&lt;/span&gt; &lt;a href="http://www.javamex.com/"&gt;http://www.javamex.com&lt;/a&gt; &lt;b&gt;Javamex &lt;/b&gt;is the author attempt to gather together information on some of the more intricate aspects of Java programming, building on the experience with the language. &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-3zjI5imzwes/TewJLG1vIGI/AAAAAAAAAb4/qH95QqwAfh4/s1600/1307313979_information2.png" /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;13.&lt;/span&gt; &lt;a href="http://www.exampledepot.com/"&gt;http://www.exampledepot.com&lt;/a&gt; This site holds all the examples from The  Java Developers Almanac and more. Copy and paste these examples directly  into your applications. Over a thousand useful examples can be found  there.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Other&lt;/span&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;img border="0" height="43px" src="http://z.javatoolbox.com/style/MainLogo.png" width="150px" /&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;14.&lt;/span&gt; &lt;a href="http://javatoolbox.com/"&gt;http://javatoolbox.com&lt;/a&gt; &lt;b&gt;JavaToolbox.com&lt;/b&gt; references the tools you need for Java development.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;img border="0" src="http://www.blackbeltfactory.com/image/BlackBeltFactoryLogo3D-header.png" /&gt;&lt;/td&gt;  &lt;td&gt;&lt;span style="font-size: x-large;"&gt;15&lt;/span&gt;. &lt;a href="http://www.blackbeltfactory.com/"&gt;http://www.blackbeltfactory.com&lt;/a&gt; On-line community-based exam system&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-486750601390469480?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/486750601390469480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/06/top-15-java-web-resources.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/486750601390469480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/486750601390469480'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/06/top-15-java-web-resources.html' title='Top 15 Java Web Resources'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-npyL_3BzIOw/TevorVuXEFI/AAAAAAAAAbo/kTnrMKRuqkE/s72-c/images2.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-9033401702848126837</id><published>2011-06-01T00:55:00.003+02:00</published><updated>2011-06-01T01:09:50.888+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vs'/><category scheme='http://www.blogger.com/atom/ns#' term='clojure'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>How to choose between Scala and Clojure?</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-TSZUHnPf1Vo/TeVzTeSMD4I/AAAAAAAAAbg/Zy19YqzOfTo/s1600/scala-icon.png" /&gt;&lt;span style="font-size: x-large;"&gt; vs. &lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/-Z2uFWB3np-Q/TeVzZOmDHTI/AAAAAAAAAbk/sOJtanqor7U/s1600/clojure-icon.gif" imageanchor="1"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Z2uFWB3np-Q/TeVzZOmDHTI/AAAAAAAAAbk/sOJtanqor7U/s1600/clojure-icon.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I think it's very popular question nowadays. The Java-haters produce so many buzz around this. So, want you or not, but You passively have been trying to choose the &lt;i&gt;Java.next()&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;I've found several interesting posts which cover pretty much about this subject:&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;by Stephan Schmidt&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://codemonkeyism.com/scala-vs-clojure/%20"&gt;&lt;span id="goog_1314162347"&gt;&lt;/span&gt;Scala vs. Clojure&lt;span id="goog_1314162348"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://codemonkeyism.com/clojure-scala-part-2/"&gt;&lt;span id="goog_1314162354"&gt;&lt;/span&gt;Clojure vs Scala, Part 2&lt;span id="goog_1314162355"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://codemonkeyism.com/scala-vsclojure-part-3-similarities"&gt;Scala vs.Clojure, part 3 – the similarities&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://codemonkeyism.com/scala-vs-clojure-flawed-loc-comparison/"&gt;Anatomy of a Flawed Clojure vs. Scala LOC Comparison&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;by Lau B. Jensen &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.bestinclass.dk/index.clj/2010/04/clojure-scala-similarities-twins-separated-at-birth.html"&gt;Clojure &amp;amp; Scala Similarities - Twins separated at birth?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bestinclass.dk/index.clj/2009/09/scala-vs-clojure-lets-get-down-to-business.html"&gt;Scala Vs Clojure - Lets get down to business&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bestinclass.dk/index.clj/2009/09/scala-vs-clojure-round-2-concurrency.html"&gt;Scala vs Clojure - Round 2: Concurrency!&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&amp;nbsp;&lt;b&gt;Others&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://gregosuri.com/on-scala-vs-clojure-what-the-market-thinks"&gt;On "Scala Vs Clojure", What the market thinks. &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://mattstine.com/2009/04/02/loty-time-again-scala-or-clojure"&gt;LOTY Time Again: Scala or Clojure?!?! &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;i&gt;Hint&lt;/i&gt;: Try to read comments to these posts, there are very interesting discussions. Some of them are even more useful than the actual post(s)/article(s).&lt;br /&gt;&lt;br /&gt;These articles don't give you any advices or strong opinions which language is the best. But, it's a good start point, for sure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-9033401702848126837?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/9033401702848126837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/06/how-to-choose-between-scala-and-clojure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/9033401702848126837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/9033401702848126837'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/06/how-to-choose-between-scala-and-clojure.html' title='How to choose between Scala and Clojure?'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-TSZUHnPf1Vo/TeVzTeSMD4I/AAAAAAAAAbg/Zy19YqzOfTo/s72-c/scala-icon.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-4557063699033739294</id><published>2011-05-23T23:41:00.002+02:00</published><updated>2011-05-23T23:47:19.368+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='jeeconf'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>JEEConf - Kiev, 2011 - Report</title><content type='html'>I had a chance to attend the first and totally dedicated to &lt;a href="http://jeeconf.com/"&gt;Java conference in Kiev&lt;/a&gt; (May 21, 2011).&lt;br /&gt;It was a great. The atmosphere was amazing. The organization was good, really good. The most noticeable thing was that almost every presentation was based on real problem, no metaphysical stuff :-)&lt;br /&gt;There were three stages, that's why I couldn't attend every talk and that's a pity.&lt;br /&gt;&lt;br /&gt;Here is a short overview of all attended talks:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. "What Riding the &lt;a href="http://camel.apache.org/"&gt;Camel &lt;/a&gt;can do to make integration easier for you" by Claus Ibsen.&lt;/b&gt;&lt;br /&gt;I had an idea what the Camel is, but this presentation gave me the "big picture". Actually, the speaker has been well prepared and known the presentation technique very well. He showed all major aspects of Camel framework and explain its purpose.&lt;br /&gt;&lt;br /&gt;He's shown the several Camel's DSLs: XML-based, Java and Scala. That short code snippets were really cool and clean. So, I've added into my todo list "the Camel DSL digging" ;-)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. "The &lt;a href="http://www.scala-lang.org/"&gt;Scala &lt;/a&gt;and &lt;a href="http://www.gridgain.com/"&gt;GridGain &lt;/a&gt;usage for the distributed systems with high efficiency" by Renat Ahmerov.&lt;/b&gt;&lt;br /&gt;This talk and master-class inspired me to start Scala learning. I've never seen the cloud computing in action. But during that master-class was created real application for distributed computing. And the code base was so tiny and clean, so my heart falling in love to this language. The last time I had had the similar feeling when I've seen the Rails in action.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. The problem diagnosing and GC tuning in HotSpot Java VM by Vladimir Ivanov.&lt;/b&gt;&lt;br /&gt;This talk was like a JVM magic :-). The speaker discovered the darkest GC places I've never known about. He's opened my eyes. I even couldn't expect that GC tuning is so interesting.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. To be in ten times faster kudos &lt;a href="http://groovy.codehaus.org/"&gt;Groovy &lt;/a&gt;by Evgeny Kompaniec&lt;/b&gt;&lt;br /&gt;This guy has shown the real case study:&lt;br /&gt;- Why he choose the Groovy as Java substitution.&lt;br /&gt;- Java code snippets vs Groovy (functionally equal) code snippets. IMHO, the most interesting and inspiration part of talk.&lt;br /&gt;- Groovy knowledge sharing via pros &amp;amp; cons.&lt;br /&gt;&lt;br /&gt;5. &lt;b&gt;&lt;a href="http://www.unitils.org/"&gt;Unitils &lt;/a&gt;for Java testing by Mikalai Alimenkou&lt;/b&gt;&lt;br /&gt;To be honest I've never heard about this tools. This presentation was full of practical samples and advices like a cookbook. Great talk, the presenter had a good mood and used the right jokes in the right places, he was very impressive. I wish every speaker had such good presentation technique.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;6. How Graph Databases can make you a super star by Andrés Taylor&lt;/b&gt;&lt;br /&gt;This talk was dedicated to the "beauty" of &lt;a href="http://neo4j.org/"&gt;Neo4j&lt;/a&gt; graph DB. It was just a start point for this DB.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;7. &lt;a href="http://vaadin.com/"&gt;Vaadin&lt;/a&gt;, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript by Joonas Lehtinen&lt;/b&gt;&lt;br /&gt;I've been following this framework about a year. And I must admit that it was really impressed to see CEO of company behind Vaadin.&lt;br /&gt;The talk was short and pragmatic. The major areas of Vaadin were highlighted. Then, the presenter has shown the Vaadin in action and it was cool. The community and the whole framework evolved in one year. As for me it was great to see the real person who developed so interesting stuff.&lt;br /&gt;&lt;br /&gt;It was my 6th IT conference. I must admit it was the best, no doubts. I hope to attend the Java conference next year again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-4557063699033739294?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/4557063699033739294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/05/jeeconf-kiev-2011-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4557063699033739294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4557063699033739294'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/05/jeeconf-kiev-2011-report.html' title='JEEConf - Kiev, 2011 - Report'/><author><name>Orest Ivasiv</name><uri>http://www.blogger.com/profile/09605761113220407236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_vLotBlgiVfE/StelIDt1idI/AAAAAAAAASE/1sQOhwIfj_Q/S220/blog_grey_edited.jpg'/></author><thr:total>0</thr:total></entry></feed>
