<?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-01-23T09:40:36.554+02:00</updated><category term='ruby'/><category term='Pomodoro'/><category term='reflection'/><category term='tools'/><category term='itbooze'/><category term='static analysis'/><category term='Cygwin'/><category term='clojure'/><category term='XP'/><category term='OCPJP'/><category term='UI'/><category term='maven'/><category term='SCJP'/><category term='conference'/><category term='Lisp'/><category term='general'/><category term='gradle'/><category term='prototyping'/><category term='agile'/><category term='SecurityManager'/><category term='python'/><category term='rails'/><category term='Kanban'/><category term='Objective-C'/><category term='top'/><category term='vim'/><category term='productivity'/><category term='review'/><category term='learning'/><category term='axis2'/><category term='scripting'/><category term='vs'/><category term='Time Management'/><category term='ant'/><category term='scala'/><category term='java'/><category term='GNUstep'/><category term='Blogging'/><category term='Tomcat'/><category term='MinGW'/><category term='annotation'/><category term='groovy'/><category term='DB'/><category term='Linux'/><category term='code quality'/><category term='Eclipse'/><category term='languages'/><category term='Scrum'/><category term='jeeconf'/><category term='SVN'/><category term='Books'/><category term='screencast'/><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?max-results=100'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><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>49</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><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 standardsource code metrics for the Java programming language. The metrics arecollected 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-orientedmetrics by processing the bytecode of compiled Java files.The program calculates for each class the following six metrics proposedby 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><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-92365221945435528</id><published>2011-05-03T00:28:00.001+02:00</published><updated>2011-05-03T18:12:32.694+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><category scheme='http://www.blogger.com/atom/ns#' term='XP'/><category scheme='http://www.blogger.com/atom/ns#' term='Kanban'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><title type='text'>XP, Scrum and Kanban: How to make the first step?</title><content type='html'>There are so many books, articles and blog posts about the topic. And it's not the easy way to chose the right one, laconic and simple, with pragmatic advices and some real case studies.&lt;br /&gt;The biggest issues for almost every "agile" related book is their size, about 300 pages (in general). But what about brief, all-sufficient book?&lt;br /&gt;I can suggest two, short enough, books: &lt;a href="http://www.infoq.com/minibooks/scrum-xp-from-the-trenches"&gt;Scrum and XP from the Trenches&lt;/a&gt; and &lt;a href="http://www.infoq.com/minibooks/kanban-scrum-minibook"&gt;Kanban and Scrum - making the most of both&lt;/a&gt;. The names of the books are self-explained.&lt;br /&gt;&lt;br /&gt;You've got the "big picture" after the reading of these books.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-92365221945435528?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/92365221945435528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/05/xp-scrum-and-kanban-how-to-make-first.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/92365221945435528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/92365221945435528'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/05/xp-scrum-and-kanban-how-to-make-first.html' title='XP, Scrum and Kanban: How to make the first step?'/><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-4099103467201772644</id><published>2011-04-16T23:57:00.001+02:00</published><updated>2011-04-16T23:59:35.110+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='axis2'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='SecurityManager'/><title type='text'>Axis2 and Tomcat work together with SecurityManager</title><content type='html'>&lt;ol&gt;&lt;li&gt;First of all download the latest &lt;a href="http://tomcat.apache.org/download-70.cgi"&gt;Tomcat&lt;/a&gt; and &lt;a href="http://axis.apache.org/axis2/java/core/download.cgi"&gt;axis2.war&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Read &lt;a href="http://tomcat.apache.org/tomcat-7.0-doc/security-manager-howto.html"&gt;Tomcat Security Manager HOW-TO&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Setup Tomcat and deploy axis2.war.&lt;/li&gt;&lt;li&gt; Edit &lt;code&gt;&amp;lt;TOMCAT install dir&amp;gt;/conf/catalina.policy&lt;/code&gt; file and add the next:&lt;/li&gt;&lt;pre class="brush: bash;"&gt;grant {&lt;br /&gt;    permission java.io.FilePermission "${catalina.base}/webapps/axis2/WEB-INF/-", "read";&lt;br /&gt;    permission java.lang.RuntimePermission "getClassLoader";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;grant codeBase "file:${catalina.home}/webapps/axis2/-" {&lt;br /&gt;    permission java.lang.RuntimePermission "createClassLoader";  &lt;br /&gt;    permission java.lang.RuntimePermission "setContextClassLoader";  &lt;br /&gt;    permission java.lang.RuntimePermission "checkPropertiesAccess";  &lt;br /&gt;    permission java.lang.RuntimePermission "getClassLoader";  &lt;br /&gt;    permission java.lang.RuntimePermission "getProtectionDomain";  &lt;br /&gt;    permission java.lang.RuntimePermission "defineClassInPackage.org.apache.jasper.runtime";  &lt;br /&gt;    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.deploy";&lt;br /&gt;    permission java.lang.RuntimePermission "shutdownHooks";  &lt;br /&gt;    permission java.lang.RuntimePermission "accessDeclaredMembers";  &lt;br /&gt;    permission java.util.PropertyPermission "*", "read,write";  &lt;br /&gt;    permission java.net.SocketPermission "localhost:8080", "resolve, connect";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.base}/webapps/axis2/WEB-INF/modules/*", "read,write";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.base}/webapps/axis2/WEB-INF/services/*", "read,write";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.home}/common/classes", "read";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.home}/shared/classes", "read";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.base}/common/classes", "read";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.base}/shared/classes", "read";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.home}/common/i18n/*", "read";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.home}/common/lib/*", "read";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.home}/lib", "read";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.home}/lib/*", "read";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.home}/bin/*", "read";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.base}/webapps/axis2/WEB-INF/scriptServices/*", "read";  &lt;br /&gt;    permission java.io.FilePermission "${java.home}/lib/ext/*", "read";  &lt;br /&gt;    permission java.io.FilePermission "${catalina.base}/webapps/axis2/WEB-INF/web.xml", "read";  &lt;br /&gt;    permission java.io.FilePermission "${java.io.tmpdir}${/}-", "read, write, delete"; &lt;br /&gt;    permission java.io.FilePermission "${java.io.tmpdir}", "read, write, delete";&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;li&gt;Start Tomcat with SecurityManager:&amp;nbsp;&lt;/li&gt;&lt;pre&gt;$CATALINA_HOME/bin/catalina.sh start -security    (Unix)&lt;br /&gt;%CATALINA_HOME%\bin\catalina start -security      (Windows)&lt;br /&gt;&lt;/pre&gt;&lt;li&gt;Verify axis2 &lt;span class="postbody"&gt;"HappyAxis" page as follows: http://localhost:8080/axis2/axis2-web/HappyAxis.jsp &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;NOTE: other application servers can and have different security policy file options/permissions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-4099103467201772644?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/4099103467201772644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/04/axis2-and-tomcat-work-together-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4099103467201772644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4099103467201772644'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/04/axis2-and-tomcat-work-together-with.html' title='Axis2 and Tomcat work together with SecurityManager'/><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-5719884735905606323</id><published>2011-02-15T01:02:00.001+02:00</published><updated>2011-02-15T01:04:24.384+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lisp'/><title type='text'>Lisp Balkanization?</title><content type='html'>I've heard this words' pair too often and I never knew what does it mean?&lt;br /&gt;&lt;br /&gt;Until I read these two posts: &lt;a href="http://gilesbowkett.blogspot.com/2008/02/ultra-balkanization-makes-lisp-autistic.html"&gt;Ultra-Balkanization Makes Lisp Autistic&lt;/a&gt; and &lt;a href="http://www.findinglisp.com/blog/2005/12/reddit-and-lisp-psychosis.html"&gt;Reddit and Lisp psychosis&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In general every Lisp developer tends to write "new" super-puper Lisp, invent the wheel, write own "cool" emacs extension and tell to the world that he is a HACKER. I love this.&lt;br /&gt;&lt;br /&gt;Nowadays, Clojure is the real answer for Lisp guys. It can consolidate the Lisp language flexibility and JVM power. I think it's a good choice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-5719884735905606323?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/5719884735905606323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/02/lisp-balkanization.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/5719884735905606323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/5719884735905606323'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/02/lisp-balkanization.html' title='Lisp Balkanization?'/><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-8112724171067643295</id><published>2011-02-11T00:50:00.003+02:00</published><updated>2011-02-11T01:04:08.591+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'>How to choose the next programming language to learn?</title><content type='html'>I believe that this question has been appearing in the brains very often.&lt;br /&gt;&lt;i&gt;Note&lt;/i&gt;: I'm writing from Java developer point of view.&lt;br /&gt;&lt;br /&gt;How to solve this dilemma? I said "dilemma" because it's investment in the new knowledge. And every new knowledge should bring some benefits. The wrong investment is equal to waste of your time.&lt;br /&gt;&lt;br /&gt;As a Java developer I think I should invest outside the JVM. It's even more important in nowadays. Oracle is more aggressive then Sun was. So, investment in non-JVM "platform"/language can protect the own future.&lt;br /&gt;&lt;br /&gt;I don't want to write about some definite language. It's not important right now. The most important thing is to learn something new which is totally separated from JVM.&lt;br /&gt;&lt;br /&gt;Someone can say: "Try Groovy, Scala or Clojure". Good point. But,&amp;nbsp; it's JVM (even if they are "beautiful" and interesting choices). One exception: you can have a possibility to use these languages on the job project. In that case it's ok. Just pick the right one and start the party. In other case avoid them.&lt;br /&gt;&lt;br /&gt;There is NO right answer. Just define your own philosophy (language to learn) and keep it alive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-8112724171067643295?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/8112724171067643295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/02/how-to-choose-next-programming-language.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8112724171067643295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8112724171067643295'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/02/how-to-choose-next-programming-language.html' title='How to choose the next programming language to learn?'/><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-1501052448768306955</id><published>2011-01-26T02:58:00.005+02:00</published><updated>2011-02-19T16:38:41.260+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Review: Language Grubbing</title><content type='html'>Yet another interesting reading from Steve Yegge: &lt;a href="http://sites.google.com/site/steveyegge2/language-grubbing"&gt;Language Grubbing&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;He reviewed several programming languages (C, C++, Java, Perl, Python, Ruby, Smalltalk, Lisp family, ML family, Haskell, Erlang). He mentioned pros and cons for each of them, criticized some of them (Perl, Common Lisp). Also told that Lua, Tcl, Prolog, Pascal wouldn't be in his learning "backlog".&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;I looked at a lot of other languages: JavaScript, Lua, Tcl, Prolog, Eiffel, Pascal, and a bunch of others. None of them really stood out as being "special" like the others I've talked about.&lt;br /&gt;&lt;br /&gt;For instance, you can do Prolog-like logic/constraint programming in Lisp or OCaml pretty easily, and they're both broader/better languages than Prolog. Pascal gives you nothing that C doesn't already do better. ... Lua is a cleaned-up Tcl, but neither one of them is as interesting (to me, anyway) as Python for doing embedded languages, unless you really need to strip it down to practically nothing, in which case Lua is useful. &lt;/blockquote&gt;&lt;br /&gt;IMHO, reasonable comments. &lt;br /&gt;He mentioned about language groups:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Java, C# and C++ (&lt;i&gt;I would add Objective-C and Smalltalk&lt;/i&gt;)&lt;/li&gt;&lt;li&gt; Haskell, SML, OCaml (&lt;i&gt;I would add F#, Scala&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;Common Lisp, Emacs Lisp, Scheme (&lt;i&gt;I would add Clojure&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;Perl, Python, Ruby (I would add PHP) &lt;/li&gt;&lt;li&gt;Erlang (&lt;i&gt;I would add Prolog, Oz&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;Lua, Tcl, JavaScript (&lt;i&gt;I would add Io, Ioke, R, REBOL&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;C, Pascal&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I wrote about this but I'll repeat again. I time wasting if you learn several languages from the same group. E.g. Python and Ruby, or Java and C#.&lt;br /&gt;So, just a pick the "major" language from each group and learn it. E.g.: Java, Haskell, Clojure, Ruby, JavaScript and C.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;C &lt;/b&gt;language is like Latin for the plain developer. &lt;b&gt;JavaScript &lt;/b&gt;is must be know by anyone involved in web-related development.&lt;br /&gt;&lt;br /&gt;For myself I formed the next language priority list:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Java &lt;/li&gt;&lt;li&gt;JavaScript&lt;/li&gt;&lt;li&gt;Ruby or Python (I haven't decided yet)&lt;/li&gt;&lt;li&gt;Clojure, Scheme or Common Lisp (I haven't decided yet)&lt;/li&gt;&lt;li&gt;C&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-1501052448768306955?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/1501052448768306955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/01/review-language-grubbing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/1501052448768306955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/1501052448768306955'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/01/review-language-grubbing.html' title='Review: Language Grubbing'/><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-4257003964043281506</id><published>2011-01-25T01:08:00.001+02:00</published><updated>2011-01-25T01:12:35.348+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lisp'/><title type='text'>Review: Beating the Averages</title><content type='html'>This Paul's Graham essay (&lt;a href="http://www.paulgraham.com/avg.html"&gt;Beating the Averages&lt;/a&gt;) is very popular among Lisp community. Someone told that it was the new Lisp push, the new Lisp wave. I read this essay and companion technical article "&lt;a href="http://lib.store.yahoo.net/lib/paulgraham/bbnexcerpts.txt"&gt;Lisp in Web-Based Applications&lt;/a&gt;" in one short. It's really inspired reading.&lt;br /&gt;&lt;br /&gt;Paul Graham described the "hidden" power of Lisp. Unfortunately, the Common Lisp community is fragmented so much. Too many different implementations. It hurts Lisp as a sub-culture. I hope this situation will be resolved by Clojure vibrant community&lt;br /&gt;&lt;br /&gt;Definitely, if you want to open your Lisp mind you should read this essay. Nothing special from technical point of view, but really cool as Lisp catalyst. Read it, feel the power, feel the spirit.&lt;br /&gt;&lt;br /&gt;The general idea (IMHO): startup is the right place to try something new and revolutionary to "kill" your competitors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-4257003964043281506?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/4257003964043281506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/01/review-beating-averages.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4257003964043281506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4257003964043281506'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/01/review-beating-averages.html' title='Review: Beating the Averages'/><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-4295332052819420185</id><published>2011-01-22T17:10:00.001+02:00</published><updated>2011-01-22T17:14:09.353+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='vs'/><category scheme='http://www.blogger.com/atom/ns#' term='Lisp'/><title type='text'>Lisp, Ruby, Acceptable and not Acceptable</title><content type='html'>There is one really (in)famous essay &lt;a href="http://www.randomhacks.net/articles/2005/12/03/why-ruby-is-an-acceptable-lisp"&gt;Why Ruby is an acceptable LISP&lt;/a&gt; by Eric Kidd. The most interesting of all this stuff are comments and other responsive blog posts (e.g. &lt;a href="http://steve-yegge.blogspot.com/2006/04/lisp-is-not-acceptable-lisp.html"&gt;Lisp is Not an Acceptable Lisp&lt;/a&gt; by Steve Yegge)&lt;br /&gt;I can say this is something like "vs" essay which is very popular nowadays. &lt;br /&gt;&lt;br /&gt;Here is the list of some quotes and key ideas:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lisp macros are far more powerful than the trivial use cases you’ve listed. I could give a lot of examples here, but just ask yourself: why is most of the programming community so fond with “Design Patterns”, while the Lisp community generally isn’t? &lt;b&gt;Well, that’s because patterns are nothing but high-level specifications for code being rewritten again and again and again. The Lisp approach is to create some macros and auxiliary functions that actually implement the pattern, thus extending the language capabilities and avoiding continuous reinvention of the wheel.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;This article sounds like it was written for folks who really want to use Lisp, but have chosen Ruby because all the&lt;i&gt; cool kids&lt;/i&gt; are using it and want to reasonably justify an emotional decision. &lt;/li&gt;&lt;li&gt;If you want to learn a language that can change with the times and incorporate whatever latest fad the programming cool kids have to offer, Lisp is the choice. Lisp is the red pill.&lt;/li&gt;&lt;li&gt;A final example: look at the 2 open source Computer Algebra Systems written in Common Lisp available as Open Source: 1) Axiom – originally from IBM Thomas Watson Research Center; 2) Maxima – originally Department of Energy (US). This is software written in the 70s. You can’t write software that lasts so long with a language that is a moving target. This is the kind of survival and complex domain which shows the power of Lisp.&lt;/li&gt;&lt;li&gt;The real reason that brought me to Lisp (and never will get me away from it) is simply this:&lt;br /&gt;You can build it out of 7 (s-e-v-e-n) primitive operators!&lt;br /&gt;And, as a consequence, no other language can be expressed in itself as short as Lisp. (As you probably know, quite any language can be expressed in itself.)&lt;br /&gt;So let me repeat: &lt;b&gt;really no other language can be expressed in itself that short, and (as a natural consequence) can be built out of less primitive operators.&lt;/b&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ruby has a syntax, and Ruby needs a full parser to get from that syntax to an AST. Because Lisp code is naturally an AST, things are very different&lt;/li&gt;&lt;/ul&gt;And small summary of the Steve's blog post &lt;a href="http://steve-yegge.blogspot.com/2006/04/lisp-is-not-acceptable-lisp.html"&gt;Lisp is Not an Acceptable Lisp&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;There is no acceptable Lisp. This is a problem. It's not a little teeny one, either. The Lisp communities (yeah, there are a bunch) are going to have to realize that if Lisp is ever going to be massively successful, it needs an overhaul. Or maybe a revolution. Contrary to what some might tell you, it doesn't need a committee, and it doesn't need a bunch of money. Linux proved exactly the opposite. &lt;span style="font-size: x-large;"&gt;Lisp needs a benevolent dictator&lt;/span&gt;. Lisp needs to ditch the name "Lisp", since it scares people. And Lisp needs to learn from the lessons of the 45 years of languages that have followed it.&lt;/blockquote&gt;Based on this comments and I'm attaching this funny picture:&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_vLotBlgiVfE/TTryfUy5UwI/AAAAAAAAAbA/1e6SWfopmQw/s1600/media_httpwwwdeimeken_rvzBA.gif.scaled661.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="640" src="http://2.bp.blogspot.com/_vLotBlgiVfE/TTryfUy5UwI/AAAAAAAAAbA/1e6SWfopmQw/s640/media_httpwwwdeimeken_rvzBA.gif.scaled661.gif" width="288" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://danelliott.me/the-programmers-superiority-complex-in-hierar"&gt;The programmer's superiority complex... in hierarchy format.&lt;/a&gt;&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-4295332052819420185?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/4295332052819420185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/01/lisp-ruby-acceptable-and-not-acceptable.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4295332052819420185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4295332052819420185'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/01/lisp-ruby-acceptable-and-not-acceptable.html' title='Lisp, Ruby, Acceptable and not Acceptable'/><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/_vLotBlgiVfE/TTryfUy5UwI/AAAAAAAAAbA/1e6SWfopmQw/s72-c/media_httpwwwdeimeken_rvzBA.gif.scaled661.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-3689766605821029964</id><published>2011-01-14T01:56:00.001+02:00</published><updated>2011-01-14T01:59:07.209+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogging'/><title type='text'>Review: You Should Write Blogs?</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_vLotBlgiVfE/TS-Q1PIKm0I/AAAAAAAAAa8/nRXqErpLNls/s1600/1294962747_blog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_vLotBlgiVfE/TS-Q1PIKm0I/AAAAAAAAAa8/nRXqErpLNls/s1600/1294962747_blog.png" /&gt;&lt;/a&gt;&lt;/div&gt;I've just finished reading the Steve Yegge's post &lt;a href="http://sites.google.com/site/steveyegge2/you-should-write-blogs"&gt;"You Should Write Blogs"&lt;/a&gt;.&lt;br /&gt;As for me it's very impressive and honest writing about blogging I've ever read. I like this style of writing.&lt;br /&gt;The general idea is to explain why You should write blogs.&lt;br /&gt;&lt;blockquote&gt;So don't worry about whether people will read it. Just write it! &lt;/blockquote&gt;&lt;blockquote&gt;No matter where you are in your education, some people will be interested in hearing your struggles. This is an important thing to keep in mind when you're blogging. Each person in your audience is on a different clock, and all of them are ahead of you in some ways and behind you in others. The point of blogging is that we all agree to share where we're at, and not poke fun at people who seem to be behind us, because they may know other things that we won't truly understand for years, if ever.&lt;/blockquote&gt;He described some reasons why people don't like to write blogs and commented it:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I'm too busy.&lt;/li&gt;&lt;li&gt;I'm afraid to put my true thoughts on public record.&lt;/li&gt;&lt;li&gt;Nobody will read my blog.&lt;/li&gt;&lt;li&gt;Blogging is narcissistic.&lt;/li&gt;&lt;/ol&gt;I must say that Steve inspired me to write more. Just for fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-3689766605821029964?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/3689766605821029964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/01/review-you-should-write-blogs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/3689766605821029964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/3689766605821029964'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/01/review-you-should-write-blogs.html' title='Review: You Should Write Blogs?'/><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/_vLotBlgiVfE/TS-Q1PIKm0I/AAAAAAAAAa8/nRXqErpLNls/s72-c/1294962747_blog.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-4329082040802543922</id><published>2011-01-12T02:05:00.003+02:00</published><updated>2011-01-15T19:33:01.734+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lisp'/><title type='text'>Should I learn Lisp?</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_vLotBlgiVfE/TSzhI4nRqoI/AAAAAAAAAa4/3bZ1_uqpiho/s1600/Lisplogo_alien_256.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_vLotBlgiVfE/TSzhI4nRqoI/AAAAAAAAAa4/3bZ1_uqpiho/s1600/Lisplogo_alien_256.png" /&gt;&lt;/a&gt;&lt;/div&gt;I had been asking this question myself every time I had found something (blog post, article, book title, etc.) interesting related to Lisp. But those “ugly” brackets put me away again and again :-). So, what was happen and why I changed my vision?&lt;br /&gt;&lt;br /&gt;I think I’ve got three triggers to change my mind: a) friends of mine works with &lt;a href="http://www.gensym.com/"&gt;Gensym/G2&lt;/a&gt; platform and they are really inspired by Lisp power; b) I saw several &lt;a href="http://clojure.blip.tv/%20"&gt;Rich Hickey’s talks about Clojure&lt;/a&gt; and the last one c) &lt;a href="http://www.paulgraham.com/"&gt;Paul Graham essays&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Then, I started googling to find other opinions about Lisp (when I say “Lisp” I mean Common Lisp, Scheme, Clojure and other Lisp dialects).&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Lisp Quotes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://bc.tech.coop/blog/040314.html"&gt;Bill Clementson wrote about this&lt;/a&gt;:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: small;"&gt;“Usually, rather than trying to convince people … I feel it is better to just spread the "seeds" and let people convince themselves. This is often better done with quotes and/or stories because these often highlight some salient feature that resonates better with people than arguments do.”&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size: small;"&gt;Also, check &lt;a href="http://paulgraham.com/quotes.html"&gt;Paul Graham Quotes List&lt;/a&gt;.&lt;br /&gt;I like this one: &lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: small;"&gt;"Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot." (&lt;a href="http://www.catb.org/%7Eesr/faqs/hacker-howto.html"&gt;Eric Raymond, "How to Become a Hacker"&lt;/a&gt;)"&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size: large;"&gt;Lisp Dialects&lt;/span&gt;&lt;br /&gt;Here is the lisp of the major Lisp dialect, as for me:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Common Lisp (CLOS)&lt;/li&gt;&lt;li&gt;Scheme&lt;/li&gt;&lt;li&gt;Clojure&lt;/li&gt;&lt;li&gt;Dylan&lt;/li&gt;&lt;li&gt;Arc&lt;/li&gt;&lt;li&gt;newLisp&lt;/li&gt;&lt;li&gt;Emacs Lisp&lt;/li&gt;&lt;/ul&gt;I'm sure this lisp uncompleted, but from my point of view other stuff is too specific.&lt;br /&gt;&lt;br /&gt;Additionally you should check this page to get some syntax overview: &lt;a href="http://hyperpolyglot.org/lisp"&gt;Lisp: A side-by-side reference sheet&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think there are two major player, IMHO: Common Lisp and Clojure.&lt;br /&gt;Common Lisp is just golden standard for all &lt;i&gt;Lisp&lt;/i&gt;s. Plus, all major Lisp related books were written for Common Lisp.&lt;br /&gt;&lt;br /&gt;I would choose Clojure for practical reason. It just has JVM background and can use Java ecosystem. And it's the major features. The other good point is that Clojure is much simpler than Common Lisp.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Beginner Lisp Books&lt;/span&gt;&lt;br /&gt;&lt;b&gt;Common Lisp:&lt;/b&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.amazon.com/Practical-Common-Lisp-Peter-Seibel/dp/1590592395?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" style="margin-left: auto; margin-right: auto;" target="_blank"&gt;&lt;img alt="Practical Common Lisp" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=1590592395&amp;amp;tag=knowisever-20" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Practical Common Lisp, by Peter Seibel, 2005&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;Clojure:&lt;/b&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.amazon.com/Programming-Clojure-Pragmatic-Programmers-Halloway/dp/1934356336?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" style="margin-left: auto; margin-right: auto;" target="_blank"&gt;&lt;img alt="Programming Clojure (Pragmatic Programmers)" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=1934356336&amp;amp;tag=knowisever-20" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Programming Clojure, by Stuart Halloway, 2009&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=knowisever-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1934356336" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;br /&gt;&lt;b&gt;Scheme:&lt;/b&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.amazon.com/Instructors-Structure-Interpretation-Computer-Programs/dp/0262692201?ie=UTF8&amp;amp;tag=knowisever-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" style="margin-left: auto; margin-right: auto;" target="_blank"&gt;&lt;img alt="Instructor's Manual t/a Structure and Interpretation of Computer Programs - 2nd Edition" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=0262692201&amp;amp;tag=knowisever-20" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Structure and Interpretation of Computer Programs, by Harold Abelson, Gerald Jay Sussman, Julie Sussman&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=knowisever-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0262692201" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;br /&gt;People suggest to choose one "lisp" for start. I think Common Lisp must be in your learning roadmap, but it shouldn't be a start point.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Development Environment&lt;/span&gt;&lt;br /&gt;I've analyzed a lot of opinions and made an obvious (and expected) conclusion. Whatever Lisp you want to use Emacs is the only one true way for the real Lisp development.&lt;br /&gt;Emacs is very powerful and very complicated text editor. I have to invest a huge amount of your time to be really productive with it. But real lisper can't suggest your other editors.&lt;br /&gt;&lt;br /&gt;Even for Clojure people suggest to use Emacs.&lt;br /&gt;Don't forget that you'll get additional Lisp on your shelf with Emacs - Emacs Lisp (elisp). It uses for Emacs scripting and you must know it to tune Emacs properly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Summary&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I like Lisp after this small overview. This language has huge power and conceptual background which is different from what I've see so far. It's mean that Lisp can extent my conceptual horizon.&lt;/li&gt;&lt;li&gt;I should chose the only one Lisp for start. It's no simple task. I think that Clojure is better choice for me as for Java developer. But, Common Lisp has big legacy (books, community and history) which is very interested for me. In any case List is just for fun. I can't use it on my work :-(&lt;/li&gt;&lt;li&gt;I should invest noticeable amount of time for Emacs learning. And I don't like this.&lt;/li&gt;&lt;li&gt;Unfortunately, I can't learn Lisp this year. Because it will be fragmented learning process. And I have such approach. I like to dive into the subject and live with it. I have to set List as a goal for 2012 year.&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-4329082040802543922?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/4329082040802543922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/01/should-i-learn-lisp.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4329082040802543922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4329082040802543922'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/01/should-i-learn-lisp.html' title='Should I learn Lisp?'/><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/_vLotBlgiVfE/TSzhI4nRqoI/AAAAAAAAAa4/3bZ1_uqpiho/s72-c/Lisplogo_alien_256.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-1344029605269979329</id><published>2011-01-10T23:53:00.001+02:00</published><updated>2011-01-15T00:56:32.161+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Review: How To Become A Hacker?</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;a href="http://2.bp.blogspot.com/_vLotBlgiVfE/TSt38br1t5I/AAAAAAAAAa0/TdFtyUtBKRo/s1600/glider.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/_vLotBlgiVfE/TSt38br1t5I/AAAAAAAAAa0/TdFtyUtBKRo/s1600/glider.png" /&gt;&lt;/a&gt;Recently I've read these philosophical essays:&lt;a href="http://draft.blogger.com/"&gt;  How To Become A Hacker, by Eric Steven Raymond&lt;/a&gt; and &lt;a href="http://norvig.com/21-days.html"&gt;Teach Yourself Programming in Ten Years, by Peter Norvig.&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;It's worth reading. I think that it's like hacker "mantra" ;-) I don't want to retell all that stuff. Just want to sum up.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;1. Programming language learning. &lt;/span&gt;&lt;br /&gt;We should learn different programming languages from paradigm point of view: "classical" OOP languages (C++, C#, Java), procedural languages (C), functional languages (Lisp family languages: Common Lisp, Scheme, Clojure), dynamic and scripting languages (Perl, Python, Ruby) and web-related (JavaScript).&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;"Besides being the most important ... languages, they represent very different approaches to programming, and each will educate you in valuable ways."&lt;/i&gt;&lt;/blockquote&gt;It means that you should&amp;nbsp; learn languages from different paradigms to get some conceptual&amp;nbsp; knowledge.&lt;br /&gt;&lt;i&gt;E.g. &lt;/i&gt;You shouldn't learn Java and&amp;nbsp; C#, or Python and Ruby. I think it's just waste of your time.&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;&lt;i&gt;"To be a real hacker, you need to get to the point where you can learn a new language in days by relating what's in the manual to what you already know.This means you should learn several very different languages."&lt;/i&gt;&lt;/b&gt;&lt;/blockquote&gt;&lt;span style="font-size: large;"&gt;2. Learn Unix/Linux.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;I think the best way to learn is to start playing with Ubuntu.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;3. Learn English and native language.&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;You should be able the speak and write &lt;/span&gt;fluently in both.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;4. Persistent learning &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;It's the key point to success in any profession.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Summary&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;"To follow the path:&lt;/i&gt;&lt;br /&gt;&lt;i&gt;look to the master,&lt;/i&gt;&lt;br /&gt;&lt;i&gt;follow the master,&lt;/i&gt;&lt;br /&gt;&lt;i&gt;walk with the master,&lt;/i&gt;&lt;br /&gt;&lt;i&gt;see through the master,&lt;/i&gt;&lt;br /&gt;&lt;i&gt;become the master."&lt;/i&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-1344029605269979329?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/1344029605269979329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2011/01/review-how-to-become-hacker.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/1344029605269979329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/1344029605269979329'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2011/01/review-how-to-become-hacker.html' title='Review: How To Become A Hacker?'/><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/_vLotBlgiVfE/TSt38br1t5I/AAAAAAAAAa0/TdFtyUtBKRo/s72-c/glider.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-8787899460455501682</id><published>2010-12-29T00:47:00.000+02:00</published><updated>2010-12-29T00:47:14.687+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>How to set ${user} property in Eclipse?</title><content type='html'>Select &lt;b&gt;Preferences -&amp;gt; Java -&amp;gt; Code Style -&amp;gt; Code Template -&amp;gt; Section Comment -&amp;gt; Type&lt;/b&gt;&lt;br /&gt;You can replace the &lt;i&gt;&lt;b&gt;author tag&lt;/b&gt;&lt;/i&gt; by whatever value you need and it will have an effect on new generated classes.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_vLotBlgiVfE/TRpkZDenFyI/AAAAAAAAAag/Ei5FLfFyP34/s1600/Clipboard-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="325" src="http://4.bp.blogspot.com/_vLotBlgiVfE/TRpkZDenFyI/AAAAAAAAAag/Ei5FLfFyP34/s400/Clipboard-1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;${user} uses the value of the user.name environment variable. You can check it via &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;System.getProperty("user.name")&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There are several solutions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;define it via command line: &lt;br /&gt;&lt;pre class="brush: bash;"&gt;C:/eclipse/eclipse.exe -vmargs -Duser.name="someUserName"&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;define it via eclipse.ini:&lt;br /&gt;&lt;pre class="brush: bash;"&gt;-showsplash&lt;br /&gt;org.eclipse.platform&lt;br /&gt;--launcher.XXMaxPermSize&lt;br /&gt;256M&lt;br /&gt;-vmargs&lt;br /&gt;-Dosgi.requiredJavaVersion=1.5&lt;br /&gt;-Duser.name="someUserName"&lt;br /&gt;-Xms40m&lt;br /&gt;-Xmx512m&lt;br /&gt;&lt;/pre&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-8787899460455501682?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='' href='http://www.infoq.com' length='0'/><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/8787899460455501682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/12/how-to-set-user-property-in-eclipse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8787899460455501682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8787899460455501682'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/12/how-to-set-user-property-in-eclipse.html' title='How to set ${user} property in Eclipse?'/><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/_vLotBlgiVfE/TRpkZDenFyI/AAAAAAAAAag/Ei5FLfFyP34/s72-c/Clipboard-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-140937762780401364</id><published>2010-12-28T01:28:00.001+02:00</published><updated>2010-12-28T16:00:32.714+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><title type='text'>My Bookshelf  - Part Zero</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_vLotBlgiVfE/TRntaqfFslI/AAAAAAAAAac/IzQRRc0as58/s1600/bookshelf_icon.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_vLotBlgiVfE/TRntaqfFslI/AAAAAAAAAac/IzQRRc0as58/s1600/bookshelf_icon.gif" /&gt;&lt;/a&gt;&lt;/div&gt;Each software developer spend some amount of time reading IT books. I have several reading directions and special sequence of&amp;nbsp; reading. I think it would be interesting to share my virtual bookshelf: books which I've read and books which I'm going to read.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Here are books' categories:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Design, Patterns, Refactoring and Architecture&lt;/li&gt;&lt;li&gt;Agile Technique&lt;/li&gt;&lt;li&gt;Tools&lt;/li&gt;&lt;li&gt;Learning and Career Development&lt;/li&gt;&lt;li&gt;Java and JVM Languages&lt;/li&gt;&lt;li&gt; Other&lt;/li&gt;&lt;/ul&gt;I'm sure I will extend this list, but this one is OK as start point.&lt;br /&gt;&lt;br /&gt;Maybe it will be good to group books by authors as well. Will see. Definitely, I have to try this approach as well.&lt;br /&gt;&lt;br /&gt;In the next part I'm going to post about &lt;i&gt;"Design, Patterns, Refactoring and Architecture"&lt;/i&gt; bookshelf.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-140937762780401364?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/140937762780401364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/12/my-bookshelf-part-zero.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/140937762780401364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/140937762780401364'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/12/my-bookshelf-part-zero.html' title='My Bookshelf  - Part Zero'/><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/_vLotBlgiVfE/TRntaqfFslI/AAAAAAAAAac/IzQRRc0as58/s72-c/bookshelf_icon.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-2551384326148218867</id><published>2010-12-15T01:00:00.001+02:00</published><updated>2010-12-15T01:02:57.361+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='gradle'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Java Build Tools and Future</title><content type='html'>&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin: 0in;"&gt;&lt;span style="font-size: small;"&gt;It's always interesting to read comparison of Java build tools. There are two major player so far: Ant and Maven. But, I'd like to know more about other tools.&lt;/span&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin: 0in;"&gt;&lt;span style="font-size: small;"&gt;Here are some interesting links:&lt;/span&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.hjug.org/present/Java_Build_Tool_Comparison.ppt"&gt;www.hjug.org/present/Java_Build_Tool_Comparison.ppt&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; - short comparison matrix,      it's really useful for overview&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://adam.pohorecki.pl/?p=27"&gt;The future of Java build tools&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; - conceptual review, worth      reading, especially comments&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://java.dzone.com/news/maven-or-ant"&gt;http://java.dzone.com/news/maven-or-ant&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; - pros and      cons for both Maven and Ant&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.webforefront.com/archives/2009/09/java_build_tool.html"&gt;http://www.webforefront.com/archives/2009/09/java_build_tool.html&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; - small Maven criticism&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://kent.spillner.org/blog/work/2009/11/14/java-build-tools.html"&gt;http://kent.spillner.org/blog/work/2009/11/14/java-build-tools.html&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; - "Java Build Tools:      Ant vs. Maven", I think it's really famous article in the Internet.      Just read arguments of Maven hater. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://community.jboss.org/wiki/Gradlewhy"&gt;http://community.jboss.org/wiki/Gradlewhy&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; - Hibernate moved from      Maven2 to Gradle!&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;ul style="direction: ltr; font-family: inherit; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;/ul&gt;&lt;div style="font-family: inherit; margin: 0in;"&gt;&lt;span style="font-size: small;"&gt;Top 3 Java build tools:&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: inherit; margin: 0in;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Ant + Ivy (&lt;a href="http://ant.apache.org/"&gt;http://ant.apache.org/&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Maven (&lt;a href="http://maven.apache.org/"&gt;http://maven.apache.org&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Gradle (&lt;a href="http://gradle.org/"&gt;http://gradle.org/&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style="direction: ltr; font-family: inherit; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;/ul&gt;I don’t want to mention the other tools. The list isn't small. I'm not sure if it worth spending time for learning/investigating new build tools. We should follow the trends. &lt;br /&gt;&lt;br /&gt;Ant and Maven are good enough for any projects. But Gradle evolves really quickly. So, we can get additional "big" player on Java build tools field.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-2551384326148218867?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/2551384326148218867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/12/java-build-tools-and-future.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/2551384326148218867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/2551384326148218867'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/12/java-build-tools-and-future.html' title='Java Build Tools and Future'/><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-3326214411388012298</id><published>2010-12-10T00:13:00.002+02:00</published><updated>2010-12-10T00:22:58.596+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>How to use Dropbox as SVN repository?</title><content type='html'>You probably know about such cool stuff as Dropbox. So, I use it as on-line SVN repository for my own projects. It gives me an opportunity to have my own repository everywhere. &lt;br /&gt;Check this post before go ahead: &lt;a href="http://mlevit.wordpress.com/2009/11/18/how-to-use-subversion-dropbox-to-create-an-effective-work-managementbackup-system/"&gt;How to use Subversion &amp;amp; Dropbox to create an effective work  management/backup&amp;nbsp;system&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So,&lt;b&gt; 1) you have to create SVN repository in some Dropbox folder&lt;/b&gt;; 2) do the checkout from this folder on every work machine where you need to do something with your SVN repository. That's it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-3326214411388012298?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/3326214411388012298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/12/how-to-use-dropbox-as-svn-repository.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/3326214411388012298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/3326214411388012298'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/12/how-to-use-dropbox-as-svn-repository.html' title='How to use Dropbox as SVN repository?'/><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-6640819701160676364</id><published>2010-11-25T01:48:00.003+02:00</published><updated>2010-12-10T18:45:37.996+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pomodoro'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><category scheme='http://www.blogger.com/atom/ns#' term='Time Management'/><title type='text'>Review: The Pomodoro Technique by Francesco Cirillo</title><content type='html'>Some time ago I read this book &lt;a href="http://www.pomodorotechnique.com/products.html#pomodoropdf"&gt;"The Pomodoro Technique" by Francesco Cirillo&lt;/a&gt;&lt;br /&gt;&lt;span id="bxgy_x_title"&gt;&lt;span class="bxgy-binding-byline"&gt;&lt;span class="bxgy-byline-text"&gt;I have to say that it's really useful and super fast introduction for this particular time management technique. I highly recommend it for everybody interested in Pomodoro.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="bxgy_x_title"&gt;&lt;span class="bxgy-binding-byline"&gt;&lt;span class="bxgy-byline-text"&gt;I don't want to analyze main chapters because you just have to read them all.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="bxgy_x_title"&gt;&lt;span class="bxgy-binding-byline"&gt;&lt;span class="bxgy-byline-text"&gt;Of cause you read only about basic approaches and you have to adapt some of them. It's general practice. There is no single way to do the job, there is only recommended way to organize you work time. You have to start applying Pomodoro iteratively and make correction to "your" technique after each working day.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="bxgy_x_title"&gt;&lt;span class="bxgy-binding-byline"&gt;&lt;span class="bxgy-byline-text"&gt;Have fun with Pomodoro. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-6640819701160676364?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/6640819701160676364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/11/review-pomodoro-technique-by-francesco.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6640819701160676364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6640819701160676364'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/11/review-pomodoro-technique-by-francesco.html' title='Review: The Pomodoro Technique by Francesco Cirillo'/><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-841295972893501939</id><published>2010-10-31T23:18:00.002+02:00</published><updated>2011-01-15T00:55:50.191+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Why Should I Attend Conferences?</title><content type='html'>I'm mainly a Java developer. But, I always do some "diving" around new technologies, trends and just around other interesting stuff (read blogs, watch screencasts, etc.). And it's not enough for me. So, I've decided to attend some conferences. Here is the chronological list of conferences I've attended:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://coffee-n-code.org.ua/home/event/september_2009_barcamp"&gt;Ruby Bar Camp&lt;/a&gt; (September 26, 2009) &lt;/li&gt;&lt;li&gt;&lt;a href="http://coffee-n-code.org.ua/"&gt;Ruby Shift&lt;/a&gt; (May 21, 2010)&lt;/li&gt;&lt;li&gt;&lt;a href="http://agilebasecamp.org/"&gt;Agile Base Camp&lt;/a&gt; (January 23, 2010) &lt;/li&gt;&lt;li&gt;&lt;a href="http://agilebasecamp.org/"&gt;Agile Base Camp&lt;/a&gt; (May 29, 2010)&lt;/li&gt;&lt;li&gt;&lt;a href="http://ua.pycon.org/"&gt;PyCon Ukraine&lt;/a&gt; (October 23-24, 2010)&lt;/li&gt;&lt;/ol&gt;All these conference related to non-Java technologies. And what? The main benefit I've got is the real face-to-face communication with technology addicted people.&lt;br /&gt;I've seen great, good and &lt;i&gt;ugly &lt;/i&gt;presentations. This experience has opened my mind. Why? &lt;br /&gt;Every conference which I've attended gave me the additional energy for the next attempts to learn something new, something great and interesting. Even if it's unpopular in my company and inside my local developer's community.&lt;br /&gt;These conferences showed me the real people which stand behind the blog posts, forum posts, frameworks and libraries.&lt;br /&gt;I'm a 100% sure that every developer must attend a conference just to feel the spirit of community.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-841295972893501939?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/841295972893501939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/10/why-should-i-attend-conferences.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/841295972893501939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/841295972893501939'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/10/why-should-i-attend-conferences.html' title='Why Should I Attend Conferences?'/><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-5040024530987523929</id><published>2010-09-11T17:34:00.007+02:00</published><updated>2010-12-10T18:45:47.001+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pomodoro'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><category scheme='http://www.blogger.com/atom/ns#' term='Time Management'/><title type='text'>Review: Pomodoro Technique Illustrated</title><content type='html'>I've got a real pressure because I had to learn TOO many different things simultaneous. And I had very small time frame to do the job in time. I needed some tool which can help me to organize all my learning activities.&lt;br /&gt;I remembered about Pomodoro. Without any delay I started reading this book: &lt;a href="http://www.amazon.com/Pomodoro-Technique-Illustrated-Minutes-Pragmatic/dp/1934356506"&gt;Pomodoro Technique Illustrated: Can You Focus - Really Focus - for 25 Minutes?, by Staffan Noteber&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Chapter 1: One Activity at a Time&lt;/u&gt;&lt;br /&gt;Pomodoro concepts overview. Author present simple examples which help us to understand the real value of this technique.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Chapter 2: Context&lt;/u&gt;&lt;br /&gt;This chapter describes how our brain works. Basic ideas and simple worlds. It’s really pragmatic approach based on applicable examples and associations.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Chapter 3. Mechanics&lt;/u&gt;&lt;br /&gt;This chapter help us to understand the Pomodoro process in action: Pomodoro sets, Activity, Iteration, breaks, Activity Inventory, Records.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Chapter 4. Interruptions&lt;/u&gt;&lt;br /&gt;Clarifies  the difference between the Internal and External interruption and gives several advices how to manage them.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Chapter 5. Estimate&lt;/u&gt;&lt;br /&gt;Explains basic technique for Pomodoro estimation and estimate analysis. &lt;br /&gt;&lt;br /&gt;&lt;u&gt;Chapter 6. Adapt&lt;/u&gt;&lt;br /&gt;This chapter shows some Pomodoro best practice: tools, length of Pomodoro, breaks, progress sheet, prioritizing, mind maps, reviews etc.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Chapter 7. Team&lt;/u&gt;&lt;br /&gt;The last chapter, it gives some advices how to apply Pomodoro technique to pair work.&lt;br /&gt;&lt;br /&gt;In general this book opened my mind. I'm going to try Pomodoro. The most beautiful thing it that this time management technique is very simple, has small set of rules and tools.&lt;br /&gt;&lt;br /&gt;Summary: well written book, short and pragmatic. Good start point to learn Pomodoro technique and adapt it to your own needs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-5040024530987523929?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/5040024530987523929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/09/review-pomodoro-technique-illustrated.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/5040024530987523929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/5040024530987523929'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/09/review-pomodoro-technique-illustrated.html' title='Review: Pomodoro Technique Illustrated'/><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-7845281538400689391</id><published>2010-08-11T23:11:00.003+02:00</published><updated>2010-09-28T00:33:29.091+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>(J)Ruby or Groovy for scripting in Java environment</title><content type='html'>It's my dilemma. And I come to the conclusion that (J)Ruby is a better choice:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Groovy&lt;/b&gt; &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Groovy provides easily integration with existence Java code-base.&lt;/li&gt;&lt;li&gt;Groovy is easy to learn for Java developers&lt;/li&gt;&lt;li&gt;Groovy has the similar "power" as (J)Ruby&lt;/li&gt;&lt;li&gt;Grails has "support" from &lt;a href="http://www.springsource.com/developer/grails"&gt;SpringSource&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Groovy/Grails has competitor inside &lt;a href="http://www.springsource.com/developer/grails"&gt;SpringSource&lt;/a&gt; - Spring Roo.&lt;/li&gt;&lt;li&gt;Groovy has evolving community. &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;b&gt;Ruby&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;JRuby can be integrated in existence Java code-base but no so good as Groovy&lt;/li&gt;&lt;li&gt;Ruby has amazing community (tutorial, screencasts, books, etc.)&lt;/li&gt;&lt;li&gt;Ruby language is "super sexy", but I think it's because of hype in community ;-)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.engineyard.com/"&gt;Engine Yard&lt;/a&gt; is big player in Ruby community. It supports JRuby and Rubinius projects&lt;/li&gt;&lt;li&gt;Ruby can be run not only on JVM! So, I can reuse my Ruby-knowledge in different environments &lt;/li&gt;&lt;li&gt;Ruby is faster then Groovy.&lt;/li&gt;&lt;li&gt;Ruby has good support on *nix environments, but there are some issues with popular gems on Windows.&lt;/li&gt;&lt;/ol&gt;I know that all these ideas are subjective and you can select own pros/cons.&lt;br /&gt;&lt;br /&gt;The another main item against Groovy is that there are so many JVM languages (Groovy, Jruby, Scala, Jyton, Clojure) and they are change each other in popularity from year to year. Groovy, Scala, Clojure are JVM based mainly (Clojure has CLR implementation). It's hard to get some expensive time to dive deeper in each of them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Conclusion is pretty simple - use the right tool for the job.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-7845281538400689391?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/7845281538400689391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/08/jruby-or-groovy-for-scripting-in-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/7845281538400689391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/7845281538400689391'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/08/jruby-or-groovy-for-scripting-in-java.html' title='(J)Ruby or Groovy for scripting in Java environment'/><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-3775835593711297850</id><published>2010-04-30T00:58:00.007+02:00</published><updated>2010-10-26T00:32:17.152+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DB'/><title type='text'>Oracle UNDO DBF issues</title><content type='html'>Oracle 10.2 is installed on Windows XP SP3.&lt;br /&gt;&lt;br /&gt;Useful references:&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://dbataj.blogspot.com/2007/01/switch-undo-tablespace.html"&gt;Switch Undo Tablespace&lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fprodlife.wordpress.com%2F2008%2F02%2F23%2Ffun-with-undo-tablespaces%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFrqEzewOhBQ8Arh8URMqDBjxM4uqtYRbA"&gt;Fun with UNDO tablespaces&lt;/a&gt;&lt;br /&gt;3. &lt;a href="http://arjudba.blogspot.com/2008/08/ora-01548-active-rollback-segment.html"&gt;ORA-01548: active rollback segment '_SYSSMU1$' found, terminate dropping tablespace&lt;/a&gt;&lt;br /&gt;4. &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpsoug.org%2Freference%2Finit_dot_ora.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFrqEzdRT2zTihnnQA80ru3cpkRna7jG6g"&gt;Oracle Init.Ora &amp;amp; SPFile&lt;/a&gt;&lt;br /&gt;5. &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fwww.idevelopment.info%2Fdata%2FOracle%2FDBA_tips%2FDatabase_Administration%2FDBA_40.shtml%23Using%2520the%2520undo_tablespace%2520Parameter&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFrqEzcQ6O9904RM5OP8ZJVZiepPb-wo-w"&gt;Automatic UNDO Management in Oracle9i&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Problem description:&lt;/b&gt;&lt;br /&gt;UNDO dbf file was f**ed up, it have to be removed and replaced.&lt;br /&gt;&lt;br /&gt;Create temp tablespace and switch UNDO to it:&lt;br /&gt;&lt;pre class="brush: plain"&gt;sqlplus&amp;gt; create undo tablespace UNDO_RBS1 datafile 'path_to_new_undo_dbf' size 500M AUTOEXTEND ON MAXSIZE 3900M;&lt;br /&gt;sqlplus&amp;gt; alter system set undo_tablespace=UNDO_RBS1;&lt;br /&gt;&lt;br /&gt;sqlplus&amp;gt; select status from v$rollstat;&lt;br /&gt;STATUS&lt;br /&gt;---------------&lt;br /&gt;ONLINE&lt;br /&gt;PENDING OFFLINE&lt;br /&gt;PENDING OFFLINE&lt;br /&gt;ONLINE&lt;br /&gt;ONLINE&lt;br /&gt;ONLINE&lt;br /&gt;ONLINE&lt;br /&gt;ONLINE&lt;br /&gt;ONLINE&lt;br /&gt;ONLINE&lt;br /&gt;ONLINE&lt;/pre&gt;&lt;b&gt;You can't drop or offline if status show offline pending.&lt;/b&gt;&lt;br /&gt;Restart DB:&lt;br /&gt;&lt;pre class="brush: plain;"&gt;sqlplus&amp;gt; shutdown immediate;&lt;br /&gt;sqlplus&amp;gt; startup;&lt;br /&gt;&lt;/pre&gt;And now try to drop undo tablespace:&lt;br /&gt;&lt;pre class="brush: plain;"&gt;sqlplus&amp;gt;alter tablespace UNDOTBS1 offline;&lt;br /&gt;sqlplus&amp;gt;drop tablespace UNDOTBS1 including contents and datafiles;&lt;br /&gt;*&lt;br /&gt;ERROR at line 1:&lt;br /&gt;ORA-01548: active rollback segment '_SYSSMU1$' found, terminate dropping&lt;br /&gt;tablespace&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;Cause of The Problem&lt;/b&gt;&lt;br /&gt;An attempt was made to drop a tablespace that contains active rollback segments.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Solution of The Problem&lt;/b&gt;&lt;br /&gt;In order to get rid of this error you have to follow following steps.&lt;br /&gt;&lt;br /&gt;1)Create pfile if you started with database with spfile.&lt;br /&gt;&lt;pre class="brush: plain;"&gt;sqlplus&amp;gt; create PFILE from SPFILE;&lt;/pre&gt;You can use the next command to get path to spfile (in my case pfile was located at "D:\oracle\product\10.2.0\admin\A7\pfile\init.ora.1252010112825" ):&lt;br /&gt;&lt;pre class="brush: plain;"&gt;sqlplus&amp;gt; show parameter spfile&lt;/pre&gt;&lt;br /&gt;2)Edit pfile and set undo management to manual.&lt;br /&gt;&lt;pre class="brush: plain;"&gt;undo_management = manual&lt;/pre&gt;&lt;br /&gt;3)Put the entries of the undo segments in the pfile by using the following statement in the pfile:&lt;br /&gt;&lt;b style="font-family: inherit;"&gt;_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,.....)&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush: plain;"&gt;###########################################&lt;br /&gt;# System Managed Undo and Rollback Segments&lt;br /&gt;###########################################&lt;br /&gt;undo_management=MANUAL&lt;br /&gt;undo_tablespace=UNDOTBS1&lt;br /&gt;_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4)Mount the database using new pfile:&lt;br /&gt;&lt;pre class="brush: plain;"&gt;sqlplus&amp;gt; shutdown immediate;&lt;br /&gt;sqlplus&amp;gt; startup mount pfile='fullpath to pfile'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;5)Drop the undo segments,&lt;br /&gt;&lt;pre class="brush: plain;"&gt;sqlplus&amp;gt; drop rollback segment "_SYSSMU1$";&lt;/pre&gt;&lt;br /&gt;6) Drop Old undo tablespace.&lt;br /&gt;&lt;pre class="brush: plain;"&gt;sqlplus&amp;gt; drop tablespace UNDOTBS1 including contents and datafiles;&lt;/pre&gt;&lt;br /&gt;7) Add the new undo tablespace:&lt;br /&gt;&lt;pre class="brush: plain;"&gt;sqlplus&amp;gt; create undo tablespace UNDOTBS1 datafile 'path to new undo table space' size 500M AUTOEXTEND ON MAXSIZE 32000M;&lt;br /&gt;sqlplus&amp;gt; alter system set undo_tablespace=UNDOTBS1;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;8) Remove temp undo table space:&lt;br /&gt;&lt;pre class="brush: plain;"&gt;sqlplus&amp;gt; alter tablespace UNDO_RBS1 offline;&lt;br /&gt;sqlplus&amp;gt; drop tablespace UNDO_RBS1 including contents and datafiles;&lt;br /&gt;sqlplus&amp;gt; shutdown immediate;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;9) Change the pfile parameters back to Undo_management = AUTO and modify the parameter Undo_tablespace=new_undo_tablespace_name and remove the _corrupted_rollback_segments parameter:&lt;br /&gt;&lt;pre class="brush: plain;"&gt;###########################################&lt;br /&gt;# System Managed Undo and Rollback Segments&lt;br /&gt;###########################################&lt;br /&gt;undo_management=AUTO&lt;br /&gt;undo_tablespace=UNDOTBS1&lt;br /&gt;#_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$)&lt;/pre&gt;&lt;br /&gt;10) Startup the Database:&lt;br /&gt;&lt;pre class="brush: plain;"&gt;sqlplus&amp;gt; startup&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;NOTE: In step #3 I've tried to use _OFFLINE_ROLLBACK_SEGMENT = (_syssmu1$). But it didn't work.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-3775835593711297850?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/3775835593711297850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/04/oracle-undo-dbf-issues.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/3775835593711297850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/3775835593711297850'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/04/oracle-undo-dbf-issues.html' title='Oracle UNDO DBF issues'/><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-2933564311745922639</id><published>2010-04-25T23:13:00.005+02:00</published><updated>2010-09-07T20:44:10.454+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>How to change the default editor in Ubuntu?</title><content type='html'>The default editor in Ubuntu is &lt;code&gt;nano&lt;/code&gt;. But I like &lt;code&gt;Vim&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: bash;"&gt;$ sudo update-alternatives --config editor&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And You will get the next:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: bash;"&gt;There are 6 choices for the alternative editor (providing /usr/bin/editor).&lt;br /&gt;&lt;br /&gt;  Selection    Path                    Priority   Status&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;* 0            /bin/nano                40        auto mode&lt;br /&gt;  1            /bin/ed                 -100       manual mode&lt;br /&gt;  2            /bin/nano                40        manual mode&lt;br /&gt;  3            /usr/bin/mcedit-debian   25        manual mode&lt;br /&gt;  4            /usr/bin/vim.basic       30        manual mode&lt;br /&gt;  5            /usr/bin/vim.nox         40        manual mode&lt;br /&gt;  6            /usr/bin/vim.tiny        10        manual mode&lt;br /&gt;&lt;br /&gt;Press enter to keep the current choice[*], or type selection number: 4&lt;br /&gt;update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode. &lt;br /&gt;&lt;/pre&gt;Select 4, in this case and that's it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-2933564311745922639?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/2933564311745922639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/04/how-to-change-default-editor-in-ubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/2933564311745922639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/2933564311745922639'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/04/how-to-change-default-editor-in-ubuntu.html' title='How to change the default editor in Ubuntu?'/><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-4800643742533887476</id><published>2010-04-25T23:05:00.003+02:00</published><updated>2010-09-07T20:44:53.226+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>How to use SUDO without password in Ubuntu?</title><content type='html'>I don't need to type password all the time when I use &lt;code&gt;sudo&lt;/code&gt; in Ubuntu. &lt;br /&gt;&lt;pre class="brush: bash;"&gt;$ sudo visudo&lt;br /&gt;&lt;/pre&gt;Type the next thing at the end of the opened file:&lt;br /&gt;&lt;pre class="brush: bash;"&gt;username ALL=(ALL) NOPASSWD: ALL&lt;br /&gt;&lt;/pre&gt;Save and close this file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-4800643742533887476?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/4800643742533887476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/04/how-to-use-sudo-without-password-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4800643742533887476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4800643742533887476'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/04/how-to-use-sudo-without-password-on.html' title='How to use SUDO without password in Ubuntu?'/><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-7739141554391619789</id><published>2010-04-22T00:30:00.005+02:00</published><updated>2010-09-07T20:46:55.982+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>How to setup Ruby/Rails development environment, Part 2 - E-TextEditor</title><content type='html'>There are tons of text editors which are good enough for Ruby/Rails/web development. And it's not so easier to choose the "best" editor.&lt;br /&gt;I'd like to talk about my top three editors which like the most:&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;a href="http://3.bp.blogspot.com/_vLotBlgiVfE/S8kW9Jrzs8I/AAAAAAAAAW8/KWlGtADhPWg/s1600/images.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_vLotBlgiVfE/S8kW9Jrzs8I/AAAAAAAAAW8/KWlGtADhPWg/s320/images.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;br /&gt;&lt;a href="http://notepad-plus.sourceforge.net/"&gt;&lt;b&gt;Notepad++&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;It's the base text editor on my workstation. It has active community, plug-in repository developing fast enough. But, this editor doesn't have Rails syntax highlight, here I mean ERB files. So, for Rails editing I have to skip it (for now)&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_vLotBlgiVfE/S8kW5uPHbDI/AAAAAAAAAWs/INRyOfGhWjc/s1600/app-thumbnail.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_vLotBlgiVfE/S8kW5uPHbDI/AAAAAAAAAWs/INRyOfGhWjc/s320/app-thumbnail.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.vim.org/"&gt;&lt;b&gt;Vim&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Cross&lt;b&gt;-&lt;/b&gt;platform text editor. It has BIG, super active community with tons of plugins.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_vLotBlgiVfE/S89xU4N-bvI/AAAAAAAAAXc/aU5CYbOPPwc/s1600/e-texteditor.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_vLotBlgiVfE/S89xU4N-bvI/AAAAAAAAAXc/aU5CYbOPPwc/s1600/e-texteditor.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.e-texteditor.com/"&gt;&lt;b&gt;E-TextEditor&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;It's Textmate clone for Windows.&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;There are two choices for using these text editors: &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Use Notepad++/E-TextEditor (or other editors) on host machine and connect to Ubuntu VM via tool such as &lt;b&gt;&lt;a href="http://www.expandrive.com/windows"&gt;ExpanDrive&lt;/a&gt;&lt;span style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Use Vim via SSH (Putty) terminal. You'll have got plain linux terminal with all restrictions, but in this case you shouldn't install such tool as ExpanDrive which cost some money.&lt;/li&gt;&lt;/ol&gt;So, I will describe first solutions in this post and second - in the next post.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;E-TextEditor and ExpanDrive&lt;/span&gt;&lt;br /&gt;I assume that you install both e-texteditor and ExpanDrive.&lt;br /&gt;Now, we can create some Rails project:&lt;br /&gt;&lt;pre class="brush: bash;"&gt;$ rails bar&lt;/pre&gt;And check IP address our Ubuntu VM:&lt;br /&gt;&lt;pre class="brush: bash;"&gt;$ ifconfig&lt;br /&gt;eth0      Link encap:Ethernet  HWaddr 00:0c:29:2b:58:78&lt;br /&gt;          inet addr:192.168.72.132  Bcast:192.168.72.255  Mask:255.255.255.0&lt;br /&gt;          inet6 addr: fe80::20c:29ff:fe2b:5878/64 Scope:Link&lt;br /&gt;          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;          RX packets:185 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;          TX packets:191 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;          collisions:0 txqueuelen:1000&lt;br /&gt;          RX bytes:20339 (20.3 KB)  TX bytes:33193 (33.1 KB)&lt;br /&gt;          Interrupt:18 Base address:0x2000&lt;/pre&gt;Now open ExpanDrive and setup connection to VM:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_vLotBlgiVfE/S8948vFk8CI/AAAAAAAAAXg/oF3cdR5hJuI/s1600/expandrive_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="265" src="http://3.bp.blogspot.com/_vLotBlgiVfE/S8948vFk8CI/AAAAAAAAAXg/oF3cdR5hJuI/s400/expandrive_01.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_vLotBlgiVfE/S895y_VxvuI/AAAAAAAAAXk/t3-WtDqg6RU/s1600/expandrive_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://4.bp.blogspot.com/_vLotBlgiVfE/S895y_VxvuI/AAAAAAAAAXk/t3-WtDqg6RU/s400/expandrive_02.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;As you can see my Ubuntu VM disk is mapped to host machine and I can use it for my Rails development.&lt;br /&gt;Now, we can use any Windows based text editor and made modification directly on Ubuntu VM disk:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_vLotBlgiVfE/S8965_bxI-I/AAAAAAAAAXo/-FBArym-D6w/s1600/expandrive_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="338" src="http://3.bp.blogspot.com/_vLotBlgiVfE/S8965_bxI-I/AAAAAAAAAXo/-FBArym-D6w/s400/expandrive_03.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;For Rails scaffolding we use SSH/Putty terminal.&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;References:&lt;/b&gt;&lt;br /&gt;&lt;a href="http://halyph.blogspot.com/2010/04/how-to-setup-rubyrails-development.html"&gt;How to setup Ruby/Rails development environment, Part 1 - Ubuntu VM&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-7739141554391619789?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/7739141554391619789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/04/how-to-setup-rubyrails-development_22.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/7739141554391619789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/7739141554391619789'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/04/how-to-setup-rubyrails-development_22.html' title='How to setup Ruby/Rails development environment, Part 2 - E-TextEditor'/><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/_vLotBlgiVfE/S8kW9Jrzs8I/AAAAAAAAAW8/KWlGtADhPWg/s72-c/images.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-4593647395566426445</id><published>2010-04-15T23:55:00.040+02:00</published><updated>2010-09-07T20:45:36.008+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>How to setup Ruby/Rails development environment, Part 1 - Ubuntu VM</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_vLotBlgiVfE/S8ehubzEY5I/AAAAAAAAAWE/mrBSd1rWhg8/s1600/RubyOnRails_128.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_vLotBlgiVfE/S8ehubzEY5I/AAAAAAAAAWE/mrBSd1rWhg8/s320/RubyOnRails_128.png" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_vLotBlgiVfE/S8ehmbmqNAI/AAAAAAAAAV8/Ifs1dW4hrR8/s1600/1271369264_start-here-ubuntuoriginal.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 2em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_vLotBlgiVfE/S8ehmbmqNAI/AAAAAAAAAV8/Ifs1dW4hrR8/s320/1271369264_start-here-ubuntuoriginal.png" /&gt;&lt;/a&gt;&lt;/div&gt;The most popular Ruby/Rails development platform isn't Windows. There are a lot of plug-ins, tutorials and blogs about Ruby/Rails on *nix like system. But, I'm Windows user (yes I know, Linux - rules!), so how can I use all community knowledge and easily apply it?&lt;br /&gt;I've decided setup VMWare VM with &lt;a href="http://www.ubuntu.com/" target="_blank"&gt;Ubuntu Server v.9.10&lt;/a&gt;. And perform all Ruby/Rails development there via Putty (SSH). &lt;br /&gt;I assume that You have installed Ubuntu VM.&lt;br /&gt;&lt;br /&gt;This post is base on the next articles:&lt;br /&gt;&lt;ul&gt;&lt;a href="http://1.bp.blogspot.com/_vLotBlgiVfE/S8ehmbmqNAI/AAAAAAAAAV8/Ifs1dW4hrR8/s1600/1271369264_start-here-ubuntuoriginal.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 2em;"&gt; &lt;/a&gt;&lt;li&gt;&lt;a href="http://www.hackido.com/2009/11/install-ruby-on-rails-on-ubuntu-karmic.html" target="_blank"&gt;Install Ruby on Rails on Ubuntu Karmic Koala 9.10&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.rubyonrails.org/getting-started/installation/linux" target="_blank"&gt;Installing Ruby on Rails on Debian/Ubuntu&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/RubyOnRails" target="_blank"&gt;Ubuntu Community documentation - RubyOnRails&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.michaelgreenly.com/2009/03/rails-development-on-ubuntu.html" target="_blank"&gt;Rails Development On Ubuntu&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html" target="_blank"&gt;How Do I Enable Remote Access To MySQL Database Server?&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Step 1:&lt;/b&gt; Install Ubuntu VM - done&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Step 2:&lt;/b&gt; Install &lt;a href="http://www.putty.org/" target="_blank"&gt;Putty&lt;/a&gt; on Windows&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Step 3&lt;/b&gt;: Configure Putty - Ubuntu VM connection&lt;br /&gt;Check Ubuntu VM IP: &lt;b&gt;ifconfig&lt;/b&gt;. Apply this VM IP in Putty setting. All next steps will be performed via Putty console&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Step 4:&lt;/b&gt; Update Ubuntu installation&lt;br /&gt;&lt;pre class="brush: bash;"&gt;sudo apt-get update&lt;br /&gt;sudo apt-get dist-upgrade&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Step 5&lt;/b&gt;: Install all necessary libs&lt;br /&gt;&lt;pre class="brush: bash;"&gt;sudo apt-get install build-essential&lt;br /&gt;sudo apt-get install ruby ri rdoc mysql-server libmysql-ruby ruby1.8-dev irb1.8 libdbd-mysql-perl libdbi-perl libmysql-ruby1.8 libmysqlclient15off libnet-daemon-perl libplrpc-perl libreadline-ruby1.8 libruby1.8 mysql-client-5.1 mysql-common mysql-server-5.1 rdoc1.8 ri1.8 ruby1.8 irb libopenssl-ruby libopenssl-ruby1.8 libhtml-template-perl mysql-server-core-5.1 libmysqlclient16 libreadline5 psmisc&lt;/pre&gt;&lt;b&gt;Step 6:&lt;/b&gt; During installation MySQL will ask to setup credentials:&lt;br /&gt;&lt;pre class="brush: bash;"&gt;user = "root"&lt;br /&gt;password = "root"&lt;/pre&gt;Check Ruby version&lt;br /&gt;&lt;pre class="brush: bash;"&gt;$ ruby -v&lt;br /&gt;ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]&lt;/pre&gt;&lt;b&gt;Step 7&lt;/b&gt;: Install RubyGems &lt;br /&gt;&lt;pre class="brush: bash;"&gt;wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.6.tgz&lt;br /&gt;tar xvzf rubygems-1.3.6.tgz&lt;br /&gt;cd rubygems-1.3.6&lt;br /&gt;sudo ruby setup.rb&lt;br /&gt;&lt;br /&gt;sudo ln -s /usr/bin/gem1.8 /usr/bin/gem&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Step 8&lt;/b&gt;: Install Rails&lt;br /&gt;&lt;pre class="brush: bash;"&gt;sudo gem install rails &lt;/pre&gt;&lt;b&gt;Step 9&lt;/b&gt;: Install SQLlite&lt;br /&gt;&lt;pre class="brush: bash;"&gt;sudo apt-get install sqlite3 libsqlite3-dev&lt;br /&gt;sudo gem install sqlite3-ruby    &lt;/pre&gt;&lt;b&gt;Step 10&lt;/b&gt;: Install MySQL client&lt;br /&gt;&lt;pre class="brush: bash;"&gt;sudo apt-get install libmysqlclient-dev&lt;br /&gt;sudo gem install mysql&lt;/pre&gt;&lt;b&gt;Step 11&lt;/b&gt;: Test your Rails instalation&lt;br /&gt;&lt;pre class="brush: bash;"&gt;$ rails myrailsapp&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-4593647395566426445?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/4593647395566426445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/04/how-to-setup-rubyrails-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4593647395566426445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4593647395566426445'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/04/how-to-setup-rubyrails-development.html' title='How to setup Ruby/Rails development environment, Part 1 - Ubuntu VM'/><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/_vLotBlgiVfE/S8ehubzEY5I/AAAAAAAAAWE/mrBSd1rWhg8/s72-c/RubyOnRails_128.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-3576114123355142099</id><published>2010-03-05T01:37:00.005+02:00</published><updated>2011-01-15T00:55:32.543+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='prototyping'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><title type='text'>UI prototyping gets easier</title><content type='html'>A wireframe or mockup screens always help us quickly define UI design direction. It helps team to concentrate on business and skip UI details for the next round.&lt;br /&gt;It's not easy to choose some "good" tool for UI prototyping. There are a lot of freeware and payware solutions.&lt;br /&gt;So, we've got dilemma.&lt;br /&gt;&lt;br /&gt;I've choose the next directions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;free tool for easier prototyping UI stuff&lt;/li&gt;&lt;li&gt;or tool which can be used in other areas, so, knowledge accumulated with UI prototyping can be re-used.&lt;/li&gt;&lt;/ul&gt;Some time for googling and I've got:&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.krisjordan.com/2008/09/07/10-minute-mock-prototyping-tips-for-powerpoint/"&gt;&lt;span style="font-size: small;"&gt;10 Minute Mock Prototyping – Tips for PowerPoint&lt;/span&gt;&lt;/a&gt; &lt;span style="font-size: small;"&gt;very interesting post, worth reading.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.istartedsomething.com/20071018/powerpoint-prototype-toolkit-01/" rel="bookmark" title="Permanent Link to &amp;quot;PowerPoint Prototyping Toolkit (release 0.2)&amp;quot;"&gt;&lt;span style="font-size: small;"&gt;PowerPoint Prototyping Toolkit (release 0.2)&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.boxesandarrows.com/view/interactive"&gt;Interactive Prototypes with PowerPoint&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; tutorial for creation prototypes with interactions (mouse click, mouse over, etc.) &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: small;"&gt;Plus, &lt;a href="http://www.evolus.vn/Pencil/Home.html"&gt;Pencil Project&lt;/a&gt;, you should take a look, opensource tool for making diagrams and GUI prototyping. It's pretty simple and get the thing done tool, IMHO.&lt;/span&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;If you choose to use PowerPoint, you should collect some UI components library for easier UI composing, etc. I've found several good examples.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-3576114123355142099?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/3576114123355142099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2010/03/ui-prototyping-gets-easier.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/3576114123355142099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/3576114123355142099'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2010/03/ui-prototyping-gets-easier.html' title='UI prototyping gets easier'/><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-9203904651543764608</id><published>2009-12-27T14:42:00.008+02:00</published><updated>2011-01-15T00:50:46.825+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Why I've chosen Ruby as main scripting language for my toolbox</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;There are a lot of scripting languages: Perl, Python, Lua, Tcl, Ruby, JavaScript, Scala, Groovy, Erlang, Lisp, Scheme and Bash/Awk(as shell scripting).&lt;br /&gt;&lt;br /&gt;There are criteria I've tried to match for my scripting language of choice:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Easy to learn&lt;/li&gt;&lt;li&gt;Active and big community &lt;/li&gt;&lt;li&gt;Amount of books and tutorials which are available &lt;/li&gt;&lt;li&gt;How many screencasts, conference videos are on-line?&lt;/li&gt;&lt;li&gt;Can replace shell scripting?&lt;/li&gt;&lt;li&gt;Number of text editors which support selected language&lt;/li&gt;&lt;li&gt;Code for fun? Is it suitable for selected language&lt;/li&gt;&lt;li&gt;Amount of useful frameworks and libraries&lt;/li&gt;&lt;/ul&gt;Let's discuss each of them.&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;b&gt;JavaScript.&lt;/b&gt; I like this language, but it doesn't have standard serve-side API. There are a lot of implementation, but community  have to work a lot to get valuable result. Check &lt;a href="http://wiki.commonjs.org/wiki/CommonJS"&gt;CommonJS&lt;/a&gt; to get more info&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; &lt;b&gt;Perl&lt;/b&gt;. I've never tried to dig deeply into this and code style doesn't suitable for me. I can't code for fun.  Number of tutorials/books are huge. Community is big. But, it's not my language of choice.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; &lt;b&gt;Lua&lt;/b&gt;. There are no killer features, as for me. In general language are cool and fast. Easy to learn. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; &lt;b&gt;Tcl&lt;/b&gt;.  I just don't like Tcl language. It's main stopper for me. Community not so big in comparison with other languages. Amount the books is limited.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; &lt;b&gt;Lisp/Scheme&lt;/b&gt;. Great languages, but not for shell oriented scripting (It will be awkward to write shell scripts)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; &lt;b&gt;Erlang&lt;/b&gt;. Interesting language, but it's not general purpose. Good for concurrency domain. I have to skip it.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; &lt;b&gt;Scala/Groovy&lt;/b&gt;. Yet another scripting languages. I can see hype near these languages, especially Scala in Java community.  I can predict, that the next year will have got another hype language(s). &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; &lt;b&gt;Bash/Awk&lt;/b&gt;. I'd like to learn these two, but I'm windows user and I don't have a possibility to use these during my work. I can use Cygwin/MSYS, but it will be strange, awkward. It will be unnatural. I'm sure I need to get additional experience in Bash scripting, but not now. Time is my enemy.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Python vs Ruby.&lt;/b&gt; These two are very similar. Both have big and active community. Both are general purpose languages. Both are great.&lt;br /&gt;But I falling in love with Ruby blocks. I love http://railscasts.com/.  I'm not web-developer, but Rails concept is super-productive.  I just love Ruby community. &lt;br /&gt;&lt;br /&gt;But, there is one drawback. There is a ton of libraries and frameworks which are doing the same thing. Community super productive  and  it's in developing. There is no consistency. So, I have to be aware of any big changes in my favorite libraries/frameworks. I know it sounds strange but it's IMHO.&lt;br /&gt;&lt;br /&gt;Shell scripting and task automation is one of the main direction to be productive. From time to time I have to work on different OS's (Windows, Linux, OS X) and environment. But my primary work station is Windows based. I'd like to have consistent scripting and automation tools for all these OS/environments. We can automate everything with Bash, etc. But what about Windows? So, choosing scripting language was good decision to create multi-platform toolbox. So, I can use my knowledge on any machine with minimal rework (if required).&lt;br /&gt;&lt;br /&gt;Any developer should have some scripting language in his arsenal. &lt;b&gt;The right tool for the job&lt;/b&gt;. Keep follow this idea and you will be productive.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-9203904651543764608?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/9203904651543764608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2009/12/why-i-chosen-ruby-as-main-scripting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/9203904651543764608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/9203904651543764608'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2009/12/why-i-chosen-ruby-as-main-scripting.html' title='Why I&amp;#39;ve chosen Ruby as main scripting language for my toolbox'/><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-4499959497318399531</id><published>2009-11-18T03:02:00.003+02:00</published><updated>2011-01-15T00:54:24.700+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cygwin'/><category scheme='http://www.blogger.com/atom/ns#' term='MinGW'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>*nix-like environments for Windows</title><content type='html'>*nix like environment is good for developer and sysadmins, and really useful for end-user. That's why we've got KDE, Gnome and similar. But, I like it a lot even if I'm Windows user ;-). There are several cases to set up *nix environment on Windows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;setup Virtual Machine with some Linux distributive and you've got fully functional Linux. You can use &lt;a href="http://www.vmware.com/"&gt;VMware&lt;/a&gt; or &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;&lt;li&gt;or you can setup Linux-like environment in Windows (i.e. bash, gcc, make, grep, find, sed, etc.).&lt;/li&gt;&lt;/ul&gt;Here is "my" list of choice for such environments.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.mingw.org/"&gt;MinGW&lt;/a&gt; - Minimalist GNU for Windows. My top choice if you need GNU development programming tool set. Additional, if you need bash and similar tools install MSYS - general purpose command line environment.&lt;/li&gt;&lt;li&gt;&lt;a href="http://cygwin.com/"&gt;Cygwin&lt;/a&gt; -&amp;nbsp; is a Linux-like environment for Windows. It's very powerful if you need to develop OS-portable application on windows (it's provide substantial Linux API functionality).&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://gnuwin32.sourceforge.net/"&gt;GnuWin32&lt;/a&gt; - provides ports of tools with a &lt;a href="http://www.gnu.org/"&gt;GNU&lt;/a&gt; or similar open source licenses. Check package list on their home page.&lt;/li&gt;&lt;li&gt; &lt;a href="http://www2.research.att.com/sw/tools/uwin/"&gt;&lt;b style="font-weight: normal;"&gt;UWIN&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;- it's the similar to MinGW and GnuWin32, but less popular.&lt;/li&gt;&lt;/ol&gt;I prefer to use MinGW/MSYS and Cygwin because they have great community support.&lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-4499959497318399531?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/4499959497318399531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2009/11/nix-like-environments-for-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4499959497318399531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/4499959497318399531'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2009/11/nix-like-environments-for-windows.html' title='*nix-like environments for Windows'/><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><georss:featurename>Ivano-Frankivs'k, Ukraine</georss:featurename><georss:point>48.9054273 24.7119127</georss:point><georss:box>48.849010299999996 24.595183199999997 48.9618443 24.8286422</georss:box></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-6450729650978493273</id><published>2009-11-09T01:08:00.006+02:00</published><updated>2011-01-15T00:46:11.029+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='GNUstep'/><title type='text'>GNUstep Getting Started</title><content type='html'>&lt;h1 style="font-weight: normal;"&gt;&lt;span style="font-size: small;"&gt;Objective-C popularity &lt;/span&gt;&lt;span style="font-size: small;"&gt;aggressively increased based on &lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"&gt;TIOBE Index&lt;/a&gt; (for October 2009)&lt;/span&gt;&lt;/h1&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_vLotBlgiVfE/SvYgEqZMDPI/AAAAAAAAASk/Fm8ImW8xdfQ/s1600-h/TIOBE.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_vLotBlgiVfE/SvYgEqZMDPI/AAAAAAAAASk/Fm8ImW8xdfQ/s320/TIOBE.gif" /&gt; &lt;br /&gt;&lt;/a&gt;&lt;/div&gt;The reason is simple -- iPhone and all related stuff. We should be ready to develop Objective-C based application in future. The worst thing I don't have a Mac, so I don't have development environment.&lt;br /&gt;I need to get basic Objective-C knowledge, and here several solutions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;buy Mac&lt;/li&gt;&lt;li&gt;install &lt;a href="http://en.wikipedia.org/wiki/OSx86"&gt;Hackintosh &lt;/a&gt;on PC&lt;/li&gt;&lt;li&gt;try GNU compiler and play with Objective-C&lt;/li&gt;&lt;/ul&gt;The better choice is the last one (for me). As I'm a Windows XP user and I don't have a time to set up Linux, I'm going to use some Windows GNU GCC port: Cygwin or MinGW.&lt;br /&gt;There are two cross-platform projects which implements Objective-C Cocoa/OpenStep      APIs:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.cocotron.org/"&gt;The Cocotron&lt;/a&gt; -- this project uses Mac machine for build (I didn't dig into this), but built application can be run on Windows.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;a href="http://www.gnustep.org/"&gt;GNUstep&lt;/a&gt; -- this project supports many platforms (Windows included).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: small;"&gt;My choice is &lt;/span&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_vLotBlgiVfE/SvYntu2sdpI/AAAAAAAAASs/FUxzQyt_BLU/s320/gnustep-header14.png" /&gt;&lt;br /&gt;&lt;br /&gt;Here is the useful links for quick start:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.gnustep.org/"&gt;www.gnustep.org&lt;/a&gt; -- official site&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gnustep.it/nicola/Tutorials/index.html"&gt;&lt;span style="font-size: small;"&gt;GNUstep programming mini tutorials&lt;/span&gt;&lt;/a&gt; -- the second place you should start with.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gnustep.it/"&gt;www.gnustep.it&lt;/a&gt; -- This site is dedicated to &lt;a href="http://www.gnustep.org/"&gt;GNUstep&lt;/a&gt;. There are a lot of useful info.&amp;nbsp; &lt;/li&gt;&lt;li&gt;&lt;a href="http://gap.nongnu.org/"&gt;GNUstep Application Project&lt;/a&gt; -- The purpose of this project is to implement a set of administrative applications and user level applications using GNUstep. Another aim of this project is to port as many applications from OPENSTEP/Cocoa to GNUstep as possible. Great place to look into real application.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.foldr.org/%7Emichaelw/objective-c/"&gt;Objective-C: Links, Resources, Stuff&lt;/a&gt; -- dig deeper in Objective-C culture&lt;/li&gt;&lt;li&gt;&lt;a href="http://gnustep.made-it.com/"&gt;GNUstep Library&lt;/a&gt; -- additional info:&lt;span style="font-size: small;"&gt; Build Guides, &lt;/span&gt;&lt;span style="font-size: small;"&gt;User Documentation,&lt;/span&gt;&lt;span style="font-size: small;"&gt; Developer Documentation&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://old.nabble.com/GNUstep-f1880.html"&gt;GNUstep forum&lt;/a&gt; -- it covers the next categories: General, Help, Dev, Webmasters, Bugs, Announce, Apps&lt;/span&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://www.roard.com/docs/"&gt;&lt;span style="font-size: small;"&gt;GNUstep HelpCenter&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt; -- &lt;/span&gt; links to various tutorials and articles on GNUstep.&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.gnustep.org/"&gt;GNUstepWiki&lt;/a&gt; -- just &lt;i&gt;wiki&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;How to build your first GNUstep application in Windows?&lt;/b&gt;&lt;br /&gt;In general it's simple, but if you have some troubles with it here is the links:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.techotopia.com/index.php/Installing_and_using_GNUstep_and_Objective-C_on_Windows#Downloading_the_GNUstep_Packages"&gt;Installing and using GNUstep and Objective-C on Windows &lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gnustep.it/nicola/Tutorials/WritingMakefiles/"&gt;Writing GNUstep Makefiles&lt;/a&gt; (I highly recommend it)&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.lyxite.com/2008/01/compile-objective-c-programs-using-gcc.html"&gt;Compile Objective-C Programs Using gcc&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;The next post will be about tuning the development environment for GNUstep .&lt;br /&gt;&lt;a href="http://www.jayson.in/programming/objective-c-programming-in-windows-gnustep-projectcenter.html"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/a&gt;  &lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-6450729650978493273?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/6450729650978493273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2009/11/gnustep-getting-started.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6450729650978493273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6450729650978493273'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2009/11/gnustep-getting-started.html' title='GNUstep Getting Started'/><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/_vLotBlgiVfE/SvYgEqZMDPI/AAAAAAAAASk/Fm8ImW8xdfQ/s72-c/TIOBE.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-6237127218844503543</id><published>2009-08-29T02:30:00.006+02:00</published><updated>2011-01-15T00:40:06.137+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogging'/><title type='text'>Syntax Highlighting Code in Blogger</title><content type='html'>How to highlight code in Blogger? You can use &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"&gt;SyntaxHighlighter&lt;/a&gt;.&lt;br /&gt;I don't want to repeat other useful posts about adjusting Blogger for &lt;a class="external text" href="http://en.wikipedia.org/wiki/Syntax_highlighting" rel="nofollow" title="http://en.wikipedia.org/wiki/Syntax_highlighting"&gt;code syntax highlighter&lt;/a&gt;, so take look at these:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter:Integration"&gt;http://alexgorbatchev.com/wiki/SyntaxHighlighter:Integration&lt;/a&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://yacoding.blogspot.com/2008/05/how-to-add-syntax-highlight-to-blogger.html"&gt;http://yacoding.blogspot.com/2008/05/how-to-add-syntax-highlight-to-blogger.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://fahdshariff.blogspot.com/2008/07/syntax-highlighting-code-in-webpages.html"&gt;http://fahdshariff.blogspot.com/2008/07/syntax-highlighting-code-in-webpages.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;There is one useful feature in &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"&gt;SyntaxHighlighter&lt;/a&gt; -- &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter:Themes" title="SyntaxHighlighter:Themes"&gt;Bundled themes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is small example:&lt;br /&gt;&lt;pre class="brush: xml;"&gt;&lt;pre class="brush: java;"&gt;public void printHello() {  &lt;br /&gt;     System.out.println("Hello World");  &lt;br /&gt; }  &lt;br /&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-6237127218844503543?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/6237127218844503543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2009/08/test-page-must-be-deleted.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6237127218844503543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/6237127218844503543'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2009/08/test-page-must-be-deleted.html' title='Syntax Highlighting Code in Blogger'/><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-2772777033509564413</id><published>2009-08-26T02:13:00.005+02:00</published><updated>2009-08-29T02:28:40.630+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>Rails 2.3 migration issues with MySQL 5.1.3</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;small&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="color: yellow; font-size: 85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/small&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;span style="font-size: 85%;"&gt;depot&amp;gt;rake db:migrate --trace&lt;br /&gt;(in D:/Projects/RoR/depot)&lt;br /&gt;** Invoke db:migrate (first_time)&lt;br /&gt;** Invoke environment (first_time)&lt;br /&gt;** Execute environment&lt;br /&gt;** Execute db:migrate&lt;br /&gt;rake aborted!&lt;br /&gt;Mysql::Error: query: not connected: CREATE TABLE `schema_migrations` (`version`&lt;br /&gt;varchar(255) NOT NULL) ENGINE=InnoDB&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/connetion_adapters/abstract_adapter.rb:212:in `log'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/connetion_adapters/mysql_adapter.rb:320:in `execute'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/connetion_adapters/abstract/schema_statements.rb:114:in `create_table'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/connetion_adapters/mysql_adapter.rb:473:in `create_table'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/connetion_adapters/abstract/schema_statements.rb:320:in `initialize_schema_migration_table'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/migraion.rb:436:in `initialize'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/migraion.rb:400:in `new'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/migraion.rb:400:in `up'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/migraion.rb:383:in `migrate'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rails-2.3.3/lib/tasks/databases.rake:116&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with call_chain'&lt;br /&gt;d:/tools/Ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with call_chain'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_tas'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'&lt;br /&gt;d:/tools/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31&lt;br /&gt;d:/Tools/Ruby/bin/rake:19:in `load'&lt;br /&gt;d:/Tools/Ruby/bin/rake:19&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;As I understood the client MySQL library doesn't work well with Rails 2.3. We can resolve this by using the older MySQL client library (libmySQL.dll). You can get it here &lt;a href="http://forums.aptana.com/viewtopic.php?f=20&amp;amp;t=7563&amp;amp;p=27407&amp;amp;hilit=libmysql.dll#p27407"&gt;http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll&lt;/a&gt;.&lt;br /&gt;Just put it in &lt;span style="font-family: Courier New;"&gt;&amp;lt;ruby base dir&amp;gt;\bin\&lt;/span&gt; and restart MySQL service.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-2772777033509564413?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/2772777033509564413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2009/08/rails-23-migration-issues-with-mysql_26.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/2772777033509564413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/2772777033509564413'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2009/08/rails-23-migration-issues-with-mysql_26.html' title='Rails 2.3 migration issues with MySQL 5.1.3'/><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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-8841432517621116453</id><published>2009-06-03T00:32:00.006+02:00</published><updated>2010-10-26T00:32:32.238+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='screencast'/><title type='text'>Top Ruby screencast resources</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;As you know there are several way to kick-off and learn a new programming language, environment or special tools:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;tutorial&lt;/li&gt;&lt;li&gt;screencast&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;But, now screencast is more popular for effective start and feature demonstration. So, I'm trying to collect as more as possible screencast resources for learning Ruby and Rails.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://railscasts.com/"&gt;http://railscasts.com&lt;/a&gt;, it's the most popular free Rails screencasts&lt;/li&gt;&lt;li&gt;&lt;a href="http://sdruby.com/"&gt;http://sdruby.com&lt;/a&gt;, it's San Diego's Ruby community, there are about 59 Ruby and Rails screencasts&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rubyplus.org/episodes"&gt;http://www.rubyplus.org/episodes&lt;/a&gt;, Free Ruby and Rails Screencast, about 93 episodes&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.tekniqal.com/"&gt;http://www.tekniqal.com&lt;/a&gt;, there are 17 tutorials covering basic Ruby topics&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.confreaks.com/events"&gt;http://www.confreaks.com/events&lt;/a&gt;, here is located videos from several Ruby conferences&lt;/li&gt;&lt;li&gt;&lt;a href="http://showmedo.com/videotutorials/ruby"&gt;http://showmedo.com/videotutorials/ruby&lt;/a&gt; and &lt;a href="http://showmedo.com/videotutorials/rubyonrails"&gt;http://showmedo.com/videotutorials/rubyonrails&lt;/a&gt;, it's great resource for learning from ground up. There are a lot of interesting videos for beginners. Also, this resource includes other areas, not only Ruby/Rails related&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bestechvideos.com/category/development/ruby"&gt;http://www.bestechvideos.com/tag/ruby-on-rails&lt;/a&gt; and &lt;a href="http://www.bestechvideos.com/category/development/ruby"&gt;http://www.bestechvideos.com/category/development/ruby&lt;/a&gt;, video collection from different conferences, presentations, etc. &amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://railslab.newrelic.com/scaling-rails"&gt;http://railslab.newrelic.com/scaling-rails&lt;/a&gt; there are educational videos, teaching you just about everything you need to know to create a Rails application that can scale&lt;/li&gt;&lt;li&gt;&lt;a href="http://rubytu.be/"&gt;http://rubytu.be&lt;/a&gt; is a community driven collection of Ruby related videos and screencasts&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.learnivore.com/"&gt;http://www.learnivore.com&lt;/a&gt; is another great screencast aggregator&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.teachmetocode.com/screencasts"&gt;http://www.teachmetocode.com/screencasts&lt;/a&gt; is similar to railscast.com but have less posts, it's worth to look into &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-8841432517621116453?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/8841432517621116453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2009/06/ruby-screencast-resources.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8841432517621116453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/8841432517621116453'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2009/06/ruby-screencast-resources.html' title='Top Ruby screencast 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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7372777165432727866.post-2047089519323801464</id><published>2009-03-16T21:35:00.001+02:00</published><updated>2011-01-15T00:53:09.682+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Effective way to be an Expert</title><content type='html'>I've found great post about &lt;a href="http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way" rel="bookmark"&gt;How to Become an Expert. The Effective Way.&lt;/a&gt;&lt;br /&gt;The core idea is: &lt;br /&gt;&lt;blockquote&gt;Experts are made, not born.&lt;b&gt; Experts are made by themselves.&lt;/b&gt; It is a long, thorny and hard road. But this road makes their life interesting, positive, meaningful and brings &lt;a href="http://softwarecreation.org/2008/the-happiness-programmers-edition/" id="r8q4" title="happiness"&gt;happiness&lt;/a&gt; from achieving a rare gift - mastery in the field they love.  &lt;/blockquote&gt;I invite you to read that post. Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7372777165432727866-2047089519323801464?l=halyph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halyph.blogspot.com/feeds/2047089519323801464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://halyph.blogspot.com/2009/03/effective-way-to-be-expert.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/2047089519323801464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7372777165432727866/posts/default/2047089519323801464'/><link rel='alternate' type='text/html' href='http://halyph.blogspot.com/2009/03/effective-way-to-be-expert.html' title='Effective way to be an Expert'/><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></feed>
