<?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:blogger='http://schemas.google.com/blogger/2008' 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-5199583470212679285</id><updated>2024-09-05T00:15:00.276+02:00</updated><category term="programming"/><category term="batch"/><category term="NT"/><category term="PHP"/><category term="google"/><category term="symfony"/><category term="chrome"/><category term="browser"/><category term="git"/><category term="java"/><category term="file"/><category term="read"/><category term="Firefox"/><category term="KeyCzar"/><category term="search engine"/><category term="Flash"/><category term="HTML forms"/><category term="RSA"/><category term="books"/><category term="css"/><category term="file attributes"/><category term="file size"/><category term="form rendering"/><category term="install"/><category term="javascript"/><category term="loop"/><category term="object-oriented"/><category term="security"/><category term="subroutine"/><category term="substring"/><category term="::"/><category term="Ajax"/><category term="Belgium"/><category term="IDE"/><category term="IE6"/><category term="IE7"/><category term="Netbeans"/><category term="PEAR"/><category term="REM"/><category term="Safari"/><category term="adobe"/><category term="apache"/><category term="arguments"/><category term="blogger"/><category term="browser sniffer"/><category term="comparing file sizes"/><category term="cuil"/><category term="decryption"/><category term="default"/><category term="delayed expansion"/><category term="development"/><category term="download day"/><category term="e-learning"/><category term="encryption"/><category term="eula"/><category term="file information"/><category term="file path"/><category term="files"/><category term="for ... in (...) do"/><category term="framework"/><category term="french"/><category term="guiness record"/><category term="help"/><category term="hosts"/><category term="ini"/><category term="keys"/><category term="label"/><category term="mysql"/><category term="private"/><category term="public"/><category term="publish-assets"/><category term="search"/><category term="sfGuardPlugin"/><category term="sub"/><category term="timestamp"/><category term="virtual host"/><category term="world record"/><category term="yahoo"/><category term="%date%"/><category term="%time%"/><category term="%~dp0"/><category term="%~z0"/><category term="3G"/><category term="ASUS"/><category term="ActiveXObject"/><category term="Ajax is not defined"/><category term="BOSS"/><category term="CON"/><category term="CRM"/><category term="DNS"/><category term="DNS checker"/><category term="Draggable is not defined"/><category term="Europe"/><category term="Flash 10"/><category term="IE8"/><category term="Internet Explorer"/><category term="JScrollPane"/><category term="JTable"/><category term="Kaminsky"/><category term="Kolb"/><category term="Kolb&#39;s experiential learning theory"/><category term="Kolb&#39;s learning styles model"/><category term="LinkedIn"/><category term="MVC"/><category term="Mac"/><category term="ORM"/><category term="RAID"/><category term="RAM"/><category term="Republic of Ireland"/><category term="Russia"/><category term="ShockwaveFlash"/><category term="Sotirov"/><category term="UK"/><category term="XP"/><category term="XP SP2"/><category term="Zend"/><category term="accented characters"/><category term="accents"/><category term="accentué"/><category term="actionscript"/><category term="animation"/><category term="anxcity"/><category term="apple"/><category term="aptivate"/><category term="argument"/><category term="attrib"/><category term="attributes"/><category term="automated updates"/><category term="belt track"/><category term="black belt"/><category term="blog"/><category term="blogging"/><category term="business"/><category term="cakePHP"/><category term="calibre"/><category term="cd /D"/><category term="cheatsheet"/><category term="cloud"/><category term="color"/><category term="colortool"/><category term="column"/><category term="comments"/><category term="configuration"/><category term="copy"/><category term="crawl"/><category term="crowd search"/><category term="cryptography"/><category term="current directory"/><category term="database"/><category term="database.yml"/><category term="databases.yml"/><category term="date"/><category term="delims"/><category term="design pattern"/><category term="directories"/><category term="doxpara"/><category term="dsn"/><category term="e-book"/><category term="edit"/><category term="enabledelayedexpansion"/><category term="exclamation"/><category term="experience"/><category term="fast boot"/><category term="flex"/><category term="folders"/><category term="func_get_args"/><category term="gears"/><category term="getColumnName"/><category term="google favicon"/><category term="hacker"/><category term="header"/><category term="hidden"/><category term="http"/><category term="iPhone"/><category term="internet"/><category term="learning"/><category term="line"/><category term="linux"/><category term="management"/><category term="me.dium"/><category term="minimum requirements"/><category term="motherboard"/><category term="move"/><category term="names"/><category term="nested variables"/><category term="network"/><category term="no valid packages found"/><category term="notebook"/><category term="notepad"/><category term="null"/><category term="number"/><category term="open source"/><category term="open source tools"/><category term="participation"/><category term="pdf"/><category term="phar"/><category term="plugin"/><category term="price"/><category term="problem"/><category term="prompt"/><category term="propel"/><category term="properties"/><category term="remarks"/><category term="rename"/><category term="rich internet application"/><category term="run path"/><category term="sandbox"/><category term="schedule"/><category term="second life"/><category term="set /P"/><category term="setlocal"/><category term="site optimisation"/><category term="social"/><category term="social search"/><category term="spaces"/><category term="splashtop"/><category term="ssl"/><category term="svn"/><category term="swf"/><category term="system"/><category term="training"/><category term="undefined"/><category term="upgrad"/><category term="upgrade1.2"/><category term="useragent"/><category term="visual aid"/><category term="w3c"/><category term="web 2.0"/><category term="webkit"/><category term="world map"/><category term="write"/><category term="xcopy"/><category term="youtube"/><category term="zencity"/><category term="Š"/><title type='text'>The Blog That Refused To Throw NPE</title><subtitle type='html'>Quick links: &#xa;&lt;a href=&quot;http://elinorhurst.blogspot.com/search/label/batch&quot;&gt;batch&lt;/a&gt;, &#xa;&lt;a href=&quot;http://elinorhurst.blogspot.com/search/label/books&quot;&gt;books&lt;/a&gt;,&#xa;&lt;a href=&quot;http://elinorhurst.blogspot.com/search/label/git&quot;&gt;git&lt;/a&gt;,&#xa;&lt;a href=&quot;http://elinorhurst.blogspot.com/search/label/java&quot;&gt;Java&lt;/a&gt;, &lt;a href=&quot;http://elinorhurst.blogspot.com/search/label/javascript&quot;&gt;Javascript&lt;/a&gt;, &lt;a href=&quot;http://elinorhurst.blogspot.com/search/label/symfony&quot;&gt;symfony&lt;/a&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>109</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-4071432429173912960</id><published>2012-10-24T20:34:00.001+02:00</published><updated>2012-10-24T20:34:13.532+02:00</updated><title type='text'>LaTeX errors</title><content type='html'>This article contains a list of LaTeX errors - good to know:&lt;br /&gt;
&lt;a href=&quot;http://www.cs.utexas.edu/~witchel/errorclasses.html&quot;&gt;http://www.cs.utexas.edu/~witchel/errorclasses.html&lt;/a&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/4071432429173912960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/4071432429173912960?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/4071432429173912960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/4071432429173912960'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/10/latex-errors.html' title='LaTeX errors'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-4860841970936212038</id><published>2012-10-24T19:45:00.000+02:00</published><updated>2012-10-24T19:45:00.748+02:00</updated><title type='text'>(La)TeX resources</title><content type='html'>Looking for LaTeX online renderer, came across this link that covers quite a few that are good:&lt;br /&gt;
&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
&lt;a href=&quot;http://tex.stackexchange.com/questions/3/compiling-documents-online&quot;&gt;http://tex.stackexchange.com/questions/3/compiling-documents-online&lt;/a&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Worth taking a look at ;-)&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/4860841970936212038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/4860841970936212038?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/4860841970936212038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/4860841970936212038'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/10/latex-resources.html' title='(La)TeX resources'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-5174565647545551501</id><published>2012-10-19T19:04:00.000+02:00</published><updated>2012-10-19T19:04:00.316+02:00</updated><title type='text'>Groovy iteration - great resource</title><content type='html'>Groovy allows you to use &quot;short-written&quot; constructs (such as &lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;each &lt;/span&gt;&lt;/span&gt;or &lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;find&lt;/span&gt;&lt;/span&gt;) to run through lists or easily find one or several items in a list using closures.&lt;br /&gt;
&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;&quot;&gt;myList.each { item -&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // do something with the item&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; item.doSomething() &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This says: for each element in my list, I would like to access it using the variable name &quot;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;&quot;&gt;item&lt;/span&gt;&quot;. If the list is typed, the item will be of the type of the elements in the list and its properties and behaviours will be accessible as such. This is how you access&lt;span style=&quot;font-size: small;&quot;&gt; &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;item.doSomething()&lt;/span&gt;&lt;/span&gt; which is declared in the item&#39;s class.&lt;br /&gt;
&lt;br /&gt;
The block in curly brackets is called a &lt;i&gt;closure&lt;/i&gt;, it will get precompiled into a separate class file, much as anonymous classes in Java get precompiled into separate classes.&lt;br /&gt;
&lt;br /&gt;
You can also for instance find the first occurrence of something using closures as follows:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;&quot;&gt;myList.find { it.temperature == 165 }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This will find the first item in the list which has temperature 165. &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;&quot;&gt;it&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt; &lt;/span&gt;is the keyword that lets you access the current element being iterated. Here we&#39;re imagining we are working with a class that store (among other things) a temperature value.&lt;br /&gt;
&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
You could do the same and find all corresponding items using:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;&quot;&gt;myList.findAll { it.temperature == 165 }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
As in the two previous, examples, the piece of code between curly braces is called a &lt;i&gt;closure&lt;/i&gt; and will get precompiled to a separate class file.&lt;br /&gt;
&lt;br /&gt;
If this has wet your appetite, try this resource the covers a much more comprehensive range of iteration operations available in Groovy with clean hands-on examples: &lt;a href=&quot;http://hanuska.blogspot.be/2008/12/easy-groovy-iteration.html&quot;&gt;http://hanuska.blogspot.be/2008/12/easy-groovy-iteration.html.&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
As you can see there are some really cool one-liners just waiting to be born.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/5174565647545551501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/5174565647545551501?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/5174565647545551501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/5174565647545551501'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/10/groovy-iteration-great-resource.html' title='Groovy iteration - great resource'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-5632415421450516790</id><published>2012-10-18T18:40:00.000+02:00</published><updated>2012-10-18T18:40:00.560+02:00</updated><title type='text'>Google - LaTeX labs</title><content type='html'>Want a quick and easy way of rendering LaTeX online? Try out the Google LaTeX labs tool. It&#39;s not a Google tool but it &lt;i&gt;does&lt;/i&gt; work pretty well as far as I can tell.&lt;br /&gt;
&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
Easy steps:&lt;br /&gt;
- add the lab to your Google labs&lt;br /&gt;
- type in some LaTeX&lt;br /&gt;
- in the menu select &lt;i&gt;Compile&lt;/i&gt; and hey presto, a whole new world to explore.&lt;br /&gt;
&lt;br /&gt;
Get back to editing mode, by using the &quot;source&quot; button, bottom left of your screen (you can also use the &#39;Preview&#39; button instead of compiling). &lt;br /&gt;
&lt;br /&gt;
See: &lt;a href=&quot;http://docs.latexlab.org/docs&quot;&gt;http://docs.latexlab.org/docs&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Enjoy and let me know your thoughts...</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/5632415421450516790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/5632415421450516790?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/5632415421450516790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/5632415421450516790'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/10/google-latex-labs.html' title='Google - LaTeX labs'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-802276645828798258</id><published>2012-10-17T19:27:00.000+02:00</published><updated>2012-10-17T19:27:00.231+02:00</updated><title type='text'>Method Object pattern</title><content type='html'>&quot;The Method Object implementation pattern suggests
turning a
complex method into an object to enable further simplification.&lt;i&gt;&quot;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
Read more at: &lt;a href=&quot;http://www.threeriversinstitute.org/TwoMoreImplementationPatterns.htm&quot;&gt;http://www.threeriversinstitute.org/TwoMoreImplementationPatterns.htm&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/802276645828798258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/802276645828798258?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/802276645828798258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/802276645828798258'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/10/method-object-pattern.html' title='Method Object pattern'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-8518130778312822364</id><published>2012-10-17T19:14:00.000+02:00</published><updated>2012-10-17T19:14:00.038+02:00</updated><title type='text'>Groovy is full-OO</title><content type='html'>Unlike Java that hawled us through (and still is) the autoboxing conundrum for primitive types&lt;i&gt;, &lt;/i&gt;Groovy&lt;i&gt; &lt;/i&gt;simply *is* fully object-oriented. Declare a primitive type such a 2, and you are actually handling an java Integer.&lt;br /&gt;
&lt;br /&gt;
Want to know the really pretty thing about this? You can use stuff like:&lt;br /&gt;
def x = 5&lt;br /&gt;
def y = 7&lt;br /&gt;
and then something like:&lt;br /&gt;
def z = x + y&lt;br /&gt;
println z =&amp;gt; should print 12&lt;br /&gt;
or something like:&lt;br /&gt;
def z = y.plus(x)&lt;br /&gt;
println z =&amp;gt; will also print 12&lt;br /&gt;
&lt;br /&gt;
Cool!&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/8518130778312822364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/8518130778312822364?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/8518130778312822364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/8518130778312822364'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/10/groovy-is-full-oo.html' title='Groovy is full-OO'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-8606204311248975925</id><published>2012-10-17T18:53:00.000+02:00</published><updated>2012-10-17T18:53:00.724+02:00</updated><title type='text'>Running *.groovy</title><content type='html'>Now, this one is interesting. You know how in Java - you call javac, the java or javaw with the classpath to run your *.class (precompiled) file?&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
Well, Groovy just lets you run the *.groovy file itself. Wow. This means it hides its inner workings, precompiles to Java bytecode for you and then runs the file.&lt;br /&gt;
&lt;br /&gt;
Nifty is what I say.&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/8606204311248975925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/8606204311248975925?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/8606204311248975925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/8606204311248975925'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/10/running-groovy.html' title='Running *.groovy'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-8725089622735591881</id><published>2012-10-16T16:33:00.001+02:00</published><updated>2012-10-16T16:35:32.011+02:00</updated><title type='text'>Groovy</title><content type='html'>As you can see in the previous post, lots of new programming languages are cropping up that will actually run &quot;on&quot; the JVM. In clear, this simply means the code (groovy or whatever) is (pre-)compiled to Java-equivalent bytecode. Why do I say &quot;Java-equivalent&quot; because it may well be some things get optimized that wouldn&#39;t normally in Java.&lt;i&gt; &lt;/i&gt;Why? Because optimization is often &quot;pattern&quot;-driven (not design pattern, just code pattern), which means languages that offer different constructs, may be able to optimize these in a way that Java cannot. &lt;br /&gt;
&lt;i&gt; &lt;/i&gt;Cut a long story short... I am currently exploring Groovy, which is both a (pre-)compilable and scripting language. What&#39;s great about this, is that you can run along, code some Groovy on the command-line to check it&#39;s all working, create a *.groovy file you save to disk containing your logic, and run the file using &lt;i&gt;groovyc&lt;/i&gt; for instance, the equivalent of &lt;i&gt;javac &lt;/i&gt;for Java. What&#39;s really cool about the bytecode thing, is that it means you just take a piece of Groovy code, hand it to groovyc, then to the JVM. The JVM will basically handle it like any old plain piece of Java. So what&#39;s the point? might you ask. Groovy offers lots of very handy constructs, working with lists or XML for intance is a breeze, so try it and erm... let me know what you think. Personnaly I am pretty enthusiastic about it :-).&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
PS: I nearly forgot... remember to &quot;groovydoc&quot;, if you choose to walk that path...&lt;i&gt;&lt;br /&gt;&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/8725089622735591881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/8725089622735591881?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/8725089622735591881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/8725089622735591881'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/10/groovy.html' title='Groovy'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-5520726266815559542</id><published>2012-10-16T15:41:00.002+02:00</published><updated>2012-10-16T15:41:37.757+02:00</updated><title type='text'>JVM languages</title><content type='html'>Interesting article about Java Virtual Machine languages including Groovy, JRuby and Jython.&lt;br /&gt;
&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_JVM_languages&quot; target=&quot;_blank&quot;&gt;http://en.wikipedia.org/wiki/List_of_JVM_languages &lt;/a&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/5520726266815559542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/5520726266815559542?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/5520726266815559542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/5520726266815559542'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/10/jvm-languages.html' title='JVM languages'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-300343644406125589</id><published>2012-05-09T19:00:00.001+02:00</published><updated>2012-05-09T19:00:07.708+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="books"/><title type='text'>Who moved my cheese?</title><content type='html'>We have all heard of this book by Spencer Johnson, it&#39;s just been out for &lt;i&gt;that&lt;/i&gt; long and used by so many companies to &quot;help&quot; people cope with (and perhaps even learn to enjoy) usually unwanted change.&lt;br /&gt;
&lt;br /&gt;
It describes the lives of four characters in a maze who are looking for cheese, that represents fullness and&amp;nbsp;happiness&amp;nbsp;- which is what we all hope for right? Through the differences in reaction to change, we see that some people are simply constantly prepared for change, and thrive on it. Others don&#39;t expect it, get upset by it, and then get over it. And others... well, read the book and find out for yourself.&amp;nbsp;It makes for a quick, simple read but doesn&#39;t delve into the depths, content to remain on the surface, some, as I did, may find that somewhat disappointing.&lt;br /&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;
&lt;iframe frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=themicblo-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=0399144463&amp;amp;ref=tf_til&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;height: 240px; width: 120px;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;
A few&amp;nbsp;excerpts&amp;nbsp;I found meaningful from The Writing On The Wall in the maze :&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&quot;If You Do Not Change, You Can Become Extinct&quot;&lt;/b&gt; - Theory of evolution, eh?&lt;br /&gt;
&lt;b&gt;&quot;What Would You Do, If You Weren&#39;t Afraid?&quot;&lt;/b&gt;&amp;nbsp;- Use this with care... fear can be useful&lt;br /&gt;
&lt;b&gt;&quot;When You Move Beyond Your Fear, You Feel Free.&quot;&lt;/b&gt;&amp;nbsp;- True, but also dangerous to a certain extent&lt;br /&gt;
&lt;br /&gt;
It is a simple read - but not a great a read, could leave you feeling simply empty and void. Take a peak and let me know what you think if you can find it &lt;b&gt;free&lt;/b&gt; somewhere. &lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/300343644406125589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/300343644406125589?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/300343644406125589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/300343644406125589'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/05/who-moved-my-cheese.html' title='Who moved my cheese?'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-3671674657491744888</id><published>2012-04-30T19:00:00.001+02:00</published><updated>2021-11-02T15:21:30.107+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="actionscript"/><category scheme="http://www.blogger.com/atom/ns#" term="flex"/><category scheme="http://www.blogger.com/atom/ns#" term="null"/><category scheme="http://www.blogger.com/atom/ns#" term="undefined"/><title type='text'>Flex: null vs undefined</title><content type='html'>&lt;br /&gt;
This may seem like a non-post but it&#39;s actually more important than it seems at first glance.&lt;br /&gt;
&lt;br /&gt;
This is when I learned that actionscript (Flex), like javascript, has both a null value (meaning &lt;i&gt;null&lt;/i&gt;) and an undefined value meaning &lt;i&gt;undefined&lt;/i&gt;. That totally makes sense both the languages deriving from ECMA-script. I cannot believe how long it took me to make the difference between for instance :&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;if (myObject == null) { /* do something */ }&lt;/pre&gt;
&lt;pre&gt;&lt;/pre&gt;
and

&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;if (myObject) { /* do something */ }&lt;/pre&gt;
&lt;br /&gt;
These are actually two very different things: in the first case we only catch things going wrong if the object is null and don&#39;t bother checking whether it is actually defined or not. In the second case, we know the object is both not null and defined - so we can get to work with it.
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;Erratum 02/11/2021 :&lt;/b&gt;&lt;div&gt;Reading this over several years later, I was surprised by the contents of this post.&amp;nbsp; So, I went back and checked when strict equality (&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;===&lt;/span&gt;) was introduced in ECMAScipt, and realised it goes way back to the late 90s.&amp;nbsp; Also, I tried to acertain when &lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;null == undefined&lt;/span&gt; became true, and it certainly already was when the above post was written.&amp;nbsp; In other words, this article was flawed, and here&#39;s the fix (with my apologies).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;There are basically three scenarios at play here:&lt;div&gt;- strict equality&lt;/div&gt;&lt;div&gt;- same value&lt;/div&gt;&lt;div&gt;- thruthy-ness&lt;div&gt;&lt;pre&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; white-space: normal;&quot;&gt;1.&amp;nbsp; Strict Equality&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;if (myObject === null) { /* do something */ }&lt;/pre&gt;or &quot;strict equality&quot; checks whether both type and value are identical.&amp;nbsp; So &lt;pre&gt;2 === 2&lt;/pre&gt;and&amp;nbsp;&lt;pre&gt;&quot;2&quot; !== 2&lt;/pre&gt;&lt;pre&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; white-space: normal;&quot;&gt;2.&amp;nbsp; Same value&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;pre&gt;if (myObject == null) { /* do something */ }&lt;/pre&gt;or &quot;same value&quot; unsurprisingly checks whether both values are the same.  
Thus, &lt;pre&gt;2 == 2&lt;/pre&gt;and &lt;pre&gt;&quot;2&quot; == 2&lt;/pre&gt;Taking this one step further, note that by definition:&lt;pre&gt;null == undefined&lt;/pre&gt; (and vice versa), whereas &lt;pre&gt;null !== undefined &lt;/pre&gt;(strict inequality).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. Truthyness&lt;br /&gt;&lt;pre&gt;if (myObject) { /* do something */ }&lt;/pre&gt;The &lt;i&gt;if&lt;/i&gt; predicate verifies whether the value (or value resulting from a condition) is &lt;i&gt;truthy&lt;/i&gt;.  
  And it so happens that both &lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;null &lt;/span&gt;and &lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;undefined&lt;/span&gt;&amp;nbsp;are &lt;i&gt;falsy&lt;/i&gt;.  There is a trap of course lying herein: most people use this construct to check whether an object is defined, hence &quot;useable&quot; (i.e. both &lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;!null&lt;/span&gt; and &lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;!undefined&lt;/span&gt;).  However, there is third case in which a value is falsy: when it is itself a boolean false.  In other words the condition &lt;pre&gt;if (something)&lt;/pre&gt; checks whether &lt;i&gt;something&lt;/i&gt; is &lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;!null&lt;/span&gt;, &lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;!undefined&lt;/span&gt;&amp;nbsp;and &lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;!false&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;Thoughts?&lt;/i&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/3671674657491744888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/3671674657491744888?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/3671674657491744888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/3671674657491744888'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/04/flex-null-vs-undefined.html' title='Flex: null vs undefined'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-6976598380618524012</id><published>2012-04-25T19:00:00.000+02:00</published><updated>2012-05-02T11:00:36.105+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><title type='text'>Git merging</title><content type='html'>Usually one wants to merge a branch back into the master (or &quot;trunk&quot; equivalent branch).&lt;br /&gt;
To do so simply used:&lt;br /&gt;
&lt;pre&gt;git checkout master (for instance)&lt;/pre&gt;&lt;br /&gt;
followed by&lt;br /&gt;
&lt;pre&gt;git merge BRANCH_NAME&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Bare in mind this means you &lt;i&gt;explicitly&lt;/i&gt; are not attempting to hide the fact you have branched and that the branch &lt;i&gt;will&lt;/i&gt; be committed to the remote repository if you git svn dcommit.&lt;br /&gt;
&lt;br /&gt;
You can then remove the merged branch using&lt;br /&gt;
&lt;pre&gt;git -d BRANCH_NAME&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
This gives a tree structure similar to this:&lt;br /&gt;
&lt;pre&gt;  &amp;nbsp;/----------------\ &amp;lt;- BRANCH_NAME
------------------------------------- &amp;lt;- *master&lt;/pre&gt;&lt;br /&gt;
where / represents the branch out and the \ represents the merge back into the master branch.&lt;br /&gt;
&lt;br/&gt;
This is not very elegant unless you want to share remote branches, if you are just working with your branch locally (as you would be if you are using git over SVN), then rebase is probably the nicer option (see coming post).

&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/6976598380618524012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/6976598380618524012?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/6976598380618524012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/6976598380618524012'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/04/git-merging.html' title='Git merging'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-2224566605229299326</id><published>2012-04-24T19:00:00.000+02:00</published><updated>2012-04-25T19:59:10.334+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><title type='text'>Git branches</title><content type='html'>This is most certainly one of the most powerful features in git compared to tradition CVS/SVN systems.&lt;br /&gt;
&lt;br /&gt;
1. you can branch locally, without affecting the remote directory - that&#39;s very cool&lt;br /&gt;
2. as we will see in later posts you can either merge or rebase your branch to the trunk (this defines the way your branch will get committed remotely: if you merge, you see the branch as a separate &quot;path&quot; in your remote repository, if you rebase, you can make sure your commit ends up looking like part of the trunk &quot;path&quot;) - again very cool&lt;br /&gt;
&lt;br /&gt;
So, here are the basics, use:&lt;br /&gt;
&lt;pre&gt;git branch&lt;/pre&gt;
to view all current branches, the star indicates which branch you are currently working in&lt;br /&gt;
&lt;pre&gt;git branch BRANCH_NAME&lt;/pre&gt;
to create a new branch
&lt;br /&gt;
&lt;pre&gt;git checkout BRANCH_NAME&lt;/pre&gt;
to start working in that branch
&lt;br /&gt;
&lt;pre&gt;git checkout master&lt;/pre&gt;
to revert to the master (main) branch
&lt;br /&gt;
&lt;pre&gt;git merge BRANCH_NAME&lt;/pre&gt;
to merge BRANCH_NAME into another branch (for instance master)
&lt;br /&gt;
&lt;pre&gt;git rebase BRANCH_NAME&lt;/pre&gt;
to rebase BRANCH_NAME into another branch (for instance master)
&lt;br /&gt;
&lt;pre&gt;git branch -d BRANCH_NAME&lt;/pre&gt;
to delete a given branch
&lt;br /&gt;
&lt;pre&gt;git&amp;nbsp;branch -D BRANCH_NAME&lt;/pre&gt;
to force delete a branch
&lt;br /&gt;
&lt;pre&gt;git checkout BRANCH_NAME&lt;/pre&gt;&lt;br /&gt;
to checkout a branch and start (or continue) working on it&lt;br /&gt;
More information about the difference between merge and commit coming soon.
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/2224566605229299326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/2224566605229299326?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/2224566605229299326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/2224566605229299326'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/04/git-branches.html' title='Git branches'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-7218273575141807471</id><published>2012-04-23T19:00:00.000+02:00</published><updated>2012-04-23T19:00:19.668+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><title type='text'>Git hashes</title><content type='html'>Git identifies all its objects with a SHA-1 (40 byte) hash identifier.&lt;br /&gt;
This way git uniquely identifies :&lt;br /&gt;
- blobs (files)&lt;br /&gt;
- trees (groups of files and/or other trees)&lt;br /&gt;
- commits (a single tree)&lt;br /&gt;
among others.&lt;br /&gt;
&lt;br /&gt;
If you type: &lt;br /&gt;
&lt;pre&gt;gitk&lt;/pre&gt;
you will be able to see every single commit, their hashes, as well as all the files of each commit and their hashes
&lt;br /&gt;
You can use commands such as:
&lt;br /&gt;
&lt;pre&gt;git log 540991f&amp;nbsp;&lt;/pre&gt;
to view blob content,
&lt;br /&gt;
&lt;pre&gt;git ls-tree&lt;/pre&gt;
to view tree information,
&lt;br /&gt;
&lt;pre&gt;git show&lt;/pre&gt;
for information about commits,&lt;br /&gt;
&lt;br /&gt;
And so on and so forth.&lt;br /&gt;
&lt;br /&gt;
Note the git is constructed around the concept that most hashes are very different and that the beginning of the hash is sufficient to identify the complete hash. That&#39;s what I did above in the git log command: used the shortened hash, which actually identifies a single blob in my system.&lt;br /&gt;
&lt;br /&gt;
Use git help &lt;command&gt;&lt;/command&gt; for more information on command options.
&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/7218273575141807471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/7218273575141807471?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/7218273575141807471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/7218273575141807471'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/04/git-hashes.html' title='Git hashes'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-4976470871044645584</id><published>2012-04-20T19:00:00.000+02:00</published><updated>2012-04-20T19:00:00.816+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><title type='text'>Working locally with git</title><content type='html'>Now we have worked out how to interact with an SVN repository, let&#39;s see how we can work with git locally.&lt;br /&gt;
&lt;br /&gt;
Git has three &quot;areas&quot; you can work in:&lt;br /&gt;
- the working area - this is where you program&lt;br /&gt;
- the staging area - this is where you store the files that have changed and you would like to include in an upcoming commit&lt;br /&gt;
- the repository - this is where everything that has been committed is stored (and when I say everything I mean &lt;i&gt;everything&lt;/i&gt;&amp;nbsp;- every single snapshot you have committed is stored here)&lt;br /&gt;
&lt;br /&gt;
The &lt;i&gt;trick&lt;/i&gt;&amp;nbsp;with git is to get files from one place to another satisfactorily.&lt;br /&gt;
&lt;br /&gt;
Here are the basic commands to do that:&lt;br /&gt;
&lt;pre&gt;git status&lt;/pre&gt;
&lt;br /&gt;
set a list of changed files, files prepared for commit, and unfollowed files (you can make git ignore changes to certain files like target build files, and so on and so forth).&lt;br /&gt;
&lt;br /&gt;
Once you have the status, you can check differences for any of the files listed in the staging are using:&lt;br /&gt;
&lt;pre&gt;git diff FILE_PATH&lt;/pre&gt;
&lt;br /&gt;
You can also add unstaged files to the staging area:&lt;br /&gt;
&lt;pre&gt;git add FILE_PATH&lt;/pre&gt;
&lt;br /&gt;
And vice versa&lt;br /&gt;
&lt;pre&gt;git checkout -- FILE_PATH&lt;/pre&gt;
&lt;br /&gt;
Once you have added all the files you want to the staging area, you can commit your changes:&lt;br /&gt;
&lt;pre&gt;git commit -m &quot;my commit message&quot;&lt;/pre&gt;
&lt;br /&gt;
You have just created a &lt;i&gt;local&lt;/i&gt; commit.&lt;br /&gt;
&lt;br /&gt;
We will see in some of the next posts how the data is stored and the powerful things we can do with local commits before sending them through to the central repository.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/4976470871044645584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/4976470871044645584?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/4976470871044645584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/4976470871044645584'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/04/working-locally-with-git.html' title='Working locally with git'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-5649467654105574604</id><published>2012-04-19T19:00:00.000+02:00</published><updated>2012-04-20T15:49:11.333+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><category scheme="http://www.blogger.com/atom/ns#" term="svn"/><title type='text'>Basic git commands</title><content type='html'>We&#39;ll be using a classic configuration of Git over SVN. In other words, we will be running and &quot;old&quot; SVN repository with Git clients so that we get all the flexibility of Git without having to change the server configuration and migrating all of the source code to Git.&lt;br /&gt;
&lt;br /&gt;
The first obvious thing one wants to do in such a situation is to get hold of some project in the repository. There are several ways of doing this. One simple way is to get oneself into a cosy directory where we want a project to land and initialize the git repository like so:&lt;br /&gt;
&lt;pre&gt;git svn init -s PROJECT_URL LOCAL_DIR_NAME&lt;/pre&gt;
and then go fetch it:
&lt;br /&gt;
&lt;pre&gt;git svn fetch&lt;/pre&gt;
&lt;br /&gt;
If you want to make sure you are up to date simply type:
&lt;br /&gt;
&lt;pre&gt;git svn rebase&lt;/pre&gt;
and if you want to commit changes &lt;i&gt;centrally&lt;/i&gt; use:
&lt;br /&gt;
&lt;pre&gt;git svn dcommit&lt;/pre&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/5649467654105574604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/5649467654105574604?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/5649467654105574604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/5649467654105574604'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/04/basic-git-commands.html' title='Basic git commands'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-7895726268901965154</id><published>2012-04-18T19:00:00.000+02:00</published><updated>2012-04-19T17:31:54.696+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><title type='text'>Git overview</title><content type='html'>We&#39;ve all heard of CVS, SVN... and now more flexible systems such as Git.&lt;br /&gt;
&lt;br /&gt;
This a quick overview of the power of Git over SVN for instance.&lt;br /&gt;
&lt;br /&gt;
There are several differences between our habitual CVS/SVN versioning systems and Git:&lt;br /&gt;
- SVN stores deltas between files that have changed in every commit; Git stores compressed &quot;snapshots&quot; of every commit&lt;br /&gt;
- SVN stores its data centrally; Git stores its data both centrally &lt;i&gt;and &lt;/i&gt;locally.&lt;br /&gt;
&lt;br /&gt;
These two main differences result in several advantages of Git:&lt;br /&gt;
- because everything is stored locally, you can work offline if the network is down&lt;br /&gt;
- because everything is stored locally and remotely, you can lose your central server and not lose &lt;i&gt;anything&lt;/i&gt;&lt;br /&gt;
- because all snapshots are store locally, diffs are really quick, no need to have a working central server, nor to get the files across the network
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/7895726268901965154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/7895726268901965154?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/7895726268901965154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/7895726268901965154'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/04/git-overview.html' title='Git overview'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-1471611470719229198</id><published>2012-04-17T19:00:00.000+02:00</published><updated>2012-04-17T19:00:00.637+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="calibre"/><category scheme="http://www.blogger.com/atom/ns#" term="e-book"/><category scheme="http://www.blogger.com/atom/ns#" term="e-learning"/><category scheme="http://www.blogger.com/atom/ns#" term="training"/><title type='text'>Calibre e-book management</title><content type='html'>A colleague recently suggested using Calibre for e-book management. It seemed like something of a leap to me, quite used to plundering through my PDF files stuffed (and often lost) in categorized directories.&lt;br /&gt;
&lt;br /&gt;
Anyway, I skeptically got hold of the software, tried it and got hooked. &lt;br /&gt;
&lt;br /&gt;
To put it in a nutshell -&lt;br /&gt;
&lt;b&gt;Calibre is to e-books, what iTunes is to music&lt;/b&gt;&lt;br /&gt;
- a living example of KISS at its best and it&#39;s free (you can donate of course if you wish).&lt;br /&gt;
&lt;br /&gt;
Enjoy -&lt;br /&gt;
&lt;a href=&quot;http://calibre-ebook.com/&quot;&gt;http://calibre-ebook.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/1471611470719229198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/1471611470719229198?isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/1471611470719229198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/1471611470719229198'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/04/calibre-e-book-management.html' title='Calibre e-book management'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-2789549273142451980</id><published>2012-04-16T19:00:00.007+02:00</published><updated>2012-04-16T19:00:06.169+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="books"/><category scheme="http://www.blogger.com/atom/ns#" term="management"/><title type='text'>Behind closed doors: secrets of great management</title><content type='html'>When I was young (about a year ago), I thought &quot;The one minute manager&quot; was a great read. I still believe it does have something to it - it makes for a quick read and is straight to the point.&lt;br /&gt;
&lt;br /&gt;
But now that I am old (about a year later) and that I have read &quot;Behind closed doors: secrets of great management&quot; by Johanna Rothman and Esther Derby, I have just been ... well enlightened so to speak.&lt;br /&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;
&lt;br /&gt;
&lt;iframe frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=themicblo-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=0976694026&amp;amp;ref=tf_til&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;height: 240px; width: 120px;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
This book does take more than &lt;b&gt;one&lt;/b&gt; minute to read but &lt;i&gt;feels&lt;/i&gt; like it takes only about &lt;b&gt;two&lt;/b&gt;, and is full of healthy material whatever your &lt;i&gt;job description&lt;/i&gt; may say. From the bottom of the ladder right to the top, it is full of handy tips on how to coach, create team-spirit and take new team members on board. It &lt;i&gt;is &lt;/i&gt;about creating leadership and making sure you tell the right people the right things at the right place and&amp;nbsp;&lt;i&gt;in the right way&lt;/i&gt;. Sound easy? Not so. Do you tell someone their behaviour is unacceptable even though they are a good worker?&lt;i&gt;&amp;nbsp;Yes&lt;/i&gt;. Ok, but when? In a &lt;i&gt;one-on-one&lt;/i&gt;&amp;nbsp;meeting. And &lt;b&gt;HOW&lt;/b&gt;? Without getting&amp;nbsp;emotionally involved, without pointing fingers (&quot;&lt;i&gt;you &lt;/i&gt;have done this...&quot;) - after all the person might not even be aware they have made mistakes in the past period, so avoid emotional cues and train people to learn to accept information without over-reacting. And what do you do when you take on a new team, that&#39;s just not really a &lt;i&gt;team&lt;/i&gt;&amp;nbsp;but a group of people working together or against each other? Behold the wonders team-meetings, prioritization, one-on-ones, coaching, rumour-killing,&amp;nbsp;gelling,&amp;nbsp;and much much more.&lt;br /&gt;
&lt;br /&gt;
This book will definitely not fall off my bookshelf any time soon.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/2789549273142451980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/2789549273142451980?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/2789549273142451980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/2789549273142451980'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/04/behind-closed-doors-secrets-of-great.html' title='Behind closed doors: secrets of great management'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-1986676910120400371</id><published>2012-04-13T19:00:00.003+02:00</published><updated>2012-04-13T19:00:03.778+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="batch"/><category scheme="http://www.blogger.com/atom/ns#" term="default"/><category scheme="http://www.blogger.com/atom/ns#" term="NT"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="prompt"/><title type='text'>Batch programming: defaulting user input</title><content type='html'>This is a really simple script which sets a variable to a default value if the user doesn&#39;t provide input when asked.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;set /P val=Please enter value: || set val=default
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
If the user enters a value, the %val% variable is set to the given value. Otherwise (if the user simply pressed &lt;i&gt;Enter&lt;/i&gt;) &#39;default&#39; is used instead.&lt;br /&gt;
&lt;br /&gt;
Neat :).&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/1986676910120400371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/1986676910120400371?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/1986676910120400371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/1986676910120400371'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/04/batch-programming-defaulting-user-input.html' title='Batch programming: defaulting user input'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-3047448276782661562</id><published>2012-04-12T19:00:00.000+02:00</published><updated>2012-04-12T19:00:07.271+02:00</updated><title type='text'>Back from a long hawl</title><content type='html'>It&#39;s been a while one might quite honestly say since I have kept this blog alive... rest assured though that live again it will. I am back with a family, a house, a recent new job and lots of new material to work through. So, look forward to information of all sorts: from Git to Flex through some interesting new reads and much much more!&lt;br /&gt;
&lt;br /&gt;
I should be back publishing regularly shortly, so come back for a peak any time - you know you are always welcome :).&lt;br /&gt;
&lt;br /&gt;
Thanks for your interest and next post shortly!&lt;br /&gt;
&lt;br /&gt;
Elinor</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/3047448276782661562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/3047448276782661562?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/3047448276782661562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/3047448276782661562'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2012/04/back-from-long-hawl.html' title='Back from a long hawl'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-2985672228226458787</id><published>2010-03-07T20:03:00.002+01:00</published><updated>2010-04-09T22:19:19.035+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="books"/><title type='text'>The one-minute read</title><content type='html'>When I saw the title of this book, I simply couldn&#39;t resist giving it a peak.&lt;br /&gt;
&lt;iframe src=&quot;http://rcm.amazon.com/e/cm?t=themicblo-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0007107927&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&quot; style=&quot;align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;&quot;align=&quot;left&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
I would say it is was worth the 5-10$ it cost and made for a quick, relatively entertaining read.&lt;br /&gt;
The book covers three basic principles to manage anything, from your family, to your work, to your life in general: &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;keep a list of understandable self-contained goals (one-minute objectives)&lt;/li&gt;
&lt;li&gt;remember to praise yourself and others when things go right (one-minute praises)&lt;/li&gt;
&lt;li&gt;remember to reprimand yourself and others when things go wrong (one-minute reprimands) BUT, never leave it at that: make sure to remind yourself of what actually *did* go right and that &quot;to err is human, to forgive divine&quot; (thanks Maggie Smith :D)&lt;/li&gt;
&lt;/ol&gt;So... this is where I start rambling on about traveling the US, making it to Canada, Scotland, Ireland and many places more... go girl!! :-)&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/2985672228226458787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/2985672228226458787?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/2985672228226458787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/2985672228226458787'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2010/02/one-minute-read.html' title='The one-minute read'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-1789025150464716712</id><published>2010-03-01T23:05:00.004+01:00</published><updated>2010-03-01T23:06:30.285+01:00</updated><title type='text'>Google AdWords</title><content type='html'>Well, hey presto that&#39;s done. Got an advert via the post and have decided to try out Google adWords to see how things pan out - for better for worse.</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/1789025150464716712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/1789025150464716712?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/1789025150464716712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/1789025150464716712'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2010/03/google-adwords.html' title='Google AdWords'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-3948604865805921905</id><published>2009-12-11T18:32:00.003+01:00</published><updated>2012-04-12T14:06:17.815+02:00</updated><title type='text'>Accessing the symfony development environment</title><content type='html'>No later than this morning was I trying to use my &lt;a href=&quot;http://www.symfony-project.org&quot; target=&quot;_blank&quot;&gt;symfony&lt;/a&gt; dev environment from a different PC on the network, and came across the following error:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
You are not allowed to access this file. Check xxxxx_dev.php for more information.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
Well, to every simple problem it seems there is a simple solution :).&lt;br /&gt;
&lt;br /&gt;
Just open xxxxx_dev.php and add the relevant IP address to the array as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
if (!in_array(@$_SERVER[&#39;REMOTE_ADDR&#39;], array(&#39;127.0.0.1&#39;&lt;b&gt;, &#39;192.168.254.102&#39;&lt;/b&gt;, &#39;::1&#39;)))&lt;br /&gt;
{&lt;br /&gt;
die(&#39;You are not allowed to access this file. Check &#39;.basename(__FILE__).&#39; for more information.&#39;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Obviously you probably wouldn&#39;t want to do this on a public server but it&#39;s neat for LAN use all the same and I am just literally more and more impressed with all the inbuilt mechanisms that symfony has to offer!&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thoughts?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/3948604865805921905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/3948604865805921905?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/3948604865805921905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/3948604865805921905'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2008/12/accessing-symfony-development.html' title='Accessing the symfony development environment'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5199583470212679285.post-8029187757423994669</id><published>2009-12-05T20:23:00.042+01:00</published><updated>2009-12-05T21:07:59.057+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="column"/><category scheme="http://www.blogger.com/atom/ns#" term="default"/><category scheme="http://www.blogger.com/atom/ns#" term="getColumnName"/><category scheme="http://www.blogger.com/atom/ns#" term="header"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="JScrollPane"/><category scheme="http://www.blogger.com/atom/ns#" term="JTable"/><category scheme="http://www.blogger.com/atom/ns#" term="names"/><title type='text'>JTable in JScrollPane showing default column names</title><content type='html'>Well, back to the basics of Java...&lt;br /&gt;&lt;br /&gt;Just in case anybody (that&#39;s including me ;-)) gets this problem (again) here is the solution.&lt;br /&gt;&lt;br /&gt;Basic scenario: building a JTable with a non default model class extending &lt;i&gt;AbstractTableModel&lt;/i&gt; as follows. I have omitted necessary includes and actually removed method bodies for simplification purposes.&lt;br /&gt;&lt;br /&gt;Spot the error...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class SyncOperationTableModel extends AbstractTableModel&lt;br /&gt;{&lt;br /&gt;    // attributes&lt;br /&gt;&lt;br /&gt;    public SyncOperationTableModel(ArrayList&lt;SyncOperation&gt; syncOperations)&lt;br /&gt;    {&lt;br /&gt;        super();&lt;br /&gt;        // initialize attributes&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public int getRowCount()&lt;br /&gt;    {&lt;br /&gt;        // return the row count based on attributes (for instance)&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public int getColumnCount()&lt;br /&gt;    {&lt;br /&gt;        // return column count base on attributes (for instance)&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getColumName(int column)&lt;br /&gt;    {&lt;br /&gt;        // return column name&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Object getValueAt(int row, int column)&lt;br /&gt;    {&lt;br /&gt;        // return the value, &lt;br /&gt;        // by default setValueAt is not necessary &lt;br /&gt;        // (AbstractTableModel returns false to isCellEditable method)&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Symptom? The column names (&lt;i&gt;getColumName(int column)&lt;/i&gt;) never get returned and are replaced with default names: A, B, C... At first sight this is strange, since I purposefully add the table to a JScrollPane (which should handle the table header automatically).&lt;br /&gt;&lt;br /&gt;Solution? In the above code the &lt;i&gt;getColumnName(int column)&lt;/i&gt; does not get called simply because I have created a new method named getColumName (i.e. with a missing &#39;n&#39; to the &#39;column&#39; part of the name). Stu-pid!&lt;br /&gt;&lt;br /&gt;New method:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public String getColumnName(int column)&lt;br /&gt;    {&lt;br /&gt;        // code&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Reaaaaally hopeless... no wonder this was impossible to find despite GIYF. Now getting on to cell rendering - it&#39;s been a while... other silly mistakes ahead I am sure.&lt;br /&gt;&lt;br /&gt;More news soon.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Thoughts in the meantime?&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://elinorhurst.blogspot.com/feeds/8029187757423994669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5199583470212679285/8029187757423994669?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/8029187757423994669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5199583470212679285/posts/default/8029187757423994669'/><link rel='alternate' type='text/html' href='http://elinorhurst.blogspot.com/2009/12/jtable-in-jscrollpane-showing-default.html' title='JTable in JScrollPane showing default column names'/><author><name>Elinor</name><uri>http://www.blogger.com/profile/16238006038283808291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>