<?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-5903491164319093451</id><updated>2011-11-05T20:27:37.100-04:00</updated><category term='column mode'/><category term='jdbc'/><category term='java'/><category term='vi'/><category term='jfreechart'/><category term='awesome'/><category term='setnull'/><category term='windows'/><category term='copy search hits'/><category term='count lines'/><category term='com'/><category term='vim'/><category term='command line'/><category term='cmd'/><category term='graph'/><category term='preparedstatement'/><category term='batch file'/><category term='jar'/><category term='oracle'/><title type='text'>cat Llorllale | grep -v '/BS/'</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-5417845223393915393</id><published>2011-11-05T20:27:00.002-04:00</published><updated>2011-11-05T20:27:37.233-04:00</updated><title type='text'>Closures</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Closure_%28computer_science%29"&gt;Wikipedia's article&lt;/a&gt; still makes me somewhat dizzy whenever I have another go at it. Here are three useful links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.skorks.com/2010/05/closures-a-simple-explanation-using-ruby/"&gt;Closures – A Simple Explanation (Using Ruby)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://codebox.org.uk/pages/articles/closures-explained-simply"&gt;Closures Explained&lt;/a&gt; using JavaScript. The most illustrative of all three, imho.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.lua.org/pil/6.1.html"&gt;Closures&lt;/a&gt; using Lua.&lt;/li&gt;&lt;/ul&gt;Read it, can it, add it to your &lt;i&gt;bat belt&lt;/i&gt;. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-5417845223393915393?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/5417845223393915393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2011/11/closures.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/5417845223393915393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/5417845223393915393'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2011/11/closures.html' title='Closures'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-7000691514434833780</id><published>2011-08-05T18:57:00.001-04:00</published><updated>2011-08-05T19:36:57.679-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jdbc'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Oracle's JDBC BLOB support sucks....</title><content type='html'>Exception in thread "main" &lt;omitted&gt;: java.lang.ClassCastException: javax.sql.rowset.serial.SerialBlob cannot be cast to oracle.sql.BLOB&lt;/omitted&gt;&lt;br /&gt;...&lt;br /&gt;Caused by: java.lang.ClassCastException: javax.sql.rowset.serial.SerialBlob cannot be cast to oracle.sql.BLOB&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at oracle.jdbc.driver.OraclePreparedStatement.setBlob(OraclePreparedStatement.java:6634)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at oracle.jdbc.driver.OraclePreparedStatementWrapper.setBlob(OraclePreparedStatementWrapper.java:126)&lt;br /&gt;&lt;br /&gt;The "infringing" code is this:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SerialBlob sb1 = new SerialBlob(value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stmt.setBlob(5, sb1);&amp;nbsp;&amp;nbsp; //column 5 is a blob, in case you're wondering&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Really, why not code against standards?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;EDIT 8/5/2011 19:35: Issue worked around like so:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ByteArrayInputStream bais1 = new ByteArrayInputStream(value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stmt.setBinaryStream(5, bais1, value.length);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-7000691514434833780?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/7000691514434833780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2011/08/oracles-jdbc-blob-support-sucks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/7000691514434833780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/7000691514434833780'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2011/08/oracles-jdbc-blob-support-sucks.html' title='Oracle&apos;s JDBC BLOB support sucks....'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-1990739847848676296</id><published>2011-07-21T10:03:00.000-04:00</published><updated>2011-07-21T10:03:18.049-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><title type='text'>More Vim goodness: The Power of g</title><content type='html'>&lt;a href="http://vim.wikia.com/wiki/Power_of_g"&gt;The Power of g&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was in particular need of: &lt;b&gt;0"ay0:g/&lt;pattern&gt;/y A&lt;/pattern&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-1990739847848676296?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/1990739847848676296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2011/07/more-vim-goodness-power-of-g.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/1990739847848676296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/1990739847848676296'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2011/07/more-vim-goodness-power-of-g.html' title='More Vim goodness: The Power of g'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-3748065960482814255</id><published>2011-06-30T17:42:00.003-04:00</published><updated>2011-06-30T17:44:35.957-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jar'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='awesome'/><title type='text'>Editting zip files with Vim...</title><content type='html'>&lt;a href="http://vim.wikia.com/wiki/Edit_Java_jar_and_other_files"&gt;Woah&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Screenie:&lt;br /&gt;&lt;br /&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;img alt="" height="240" src="data:image/png;base64,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" style="margin-left: auto; margin-right: auto;" width="320" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Files like .jar and .xpi, themselves just renamed zip files, can also be opened using Vim&lt;br /&gt;(right click -&amp;gt; View Image to view in full size) &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;You can even edit the files with Vim! So long jar xvf/uvf! Seriously, with Vim, the possibilities are endless...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-3748065960482814255?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/3748065960482814255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2011/06/editting-zip-files-with-vim.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/3748065960482814255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/3748065960482814255'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2011/06/editting-zip-files-with-vim.html' title='Editting zip files with Vim...'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-8758366237350053250</id><published>2011-06-17T21:10:00.001-04:00</published><updated>2011-06-17T21:13:47.909-04:00</updated><title type='text'>Vim - End of line characters!</title><content type='html'>There are some dtds created with XmlSpy that are used by the system at work and for some reason they have mac style line endings (I really hope this isn't XmlSpy's doing...). Found the following link hugely helpful: http://vim.wikia.com/wiki/File_format&lt;br /&gt;&lt;br /&gt;Excerpt:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;A common problem is that you open a file and see &lt;tt&gt;^M&lt;/tt&gt; at the end of many lines. Entering &lt;tt style="white-space: nowrap;"&gt;:set ff?&lt;/tt&gt;  will probably show that the file was read as unix: the problem is that  some lines actually end with CRLF. To fix this, you need to tell Vim to  read the file again using dos file format. When reading as dos, all CRLF  line endings, and all LF-only line endings, are removed. Then you need  to change the file format for the buffer and save the file. The  following procedures will easily handle this situation, but they only  work reliably on reasonably recent versions of Vim (7.2.40 or higher). &lt;/p&gt; &lt;dl&gt;&lt;dt&gt;Convert from dos/unix to unix &lt;/dt&gt;&lt;/dl&gt; &lt;p&gt;To convert the current file from any mixture of CRLF/LF-only line endings, so all lines end with LF only: &lt;/p&gt; &lt;table class="cleartable"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;:update&lt;/tt&gt; &lt;/td&gt;&lt;td&gt; Save any changes. &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt&gt;:e ++ff=dos&lt;/tt&gt; &lt;/td&gt;&lt;td&gt; Edit file again, using dos file format (&lt;tt&gt;'fileformats'&lt;/tt&gt; is ignored).&lt;sup id="cite_ref-broken_0-0" class="reference"&gt;&lt;a href="http://vim.wikia.com/wiki/File_format#cite_note-broken-0"&gt;[A 1]&lt;/a&gt;&lt;/sup&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt&gt;:setlocal ff=unix&lt;/tt&gt; &lt;/td&gt;&lt;td&gt; This buffer will use LF-only line endings when written.&lt;sup id="cite_ref-1" class="reference"&gt;&lt;a href="http://vim.wikia.com/wiki/File_format#cite_note-1"&gt;[A 2]&lt;/a&gt;&lt;/sup&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt&gt;:w&lt;/tt&gt; &lt;/td&gt;&lt;td&gt; Write buffer using unix (LF-only) line endings. &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;In the above, replacing &lt;tt style="white-space: nowrap;"&gt;:set ff=unix&lt;/tt&gt; with &lt;tt style="white-space: nowrap;"&gt;:set ff=mac&lt;/tt&gt; would write the file with mac (CR-only) line endings. Or, if it was a mac file to start with, you would use &lt;tt style="white-space: nowrap;"&gt;:e ++ff=mac&lt;/tt&gt; to read the file correctly, so you could convert the line endings to unix or dos. &lt;/p&gt; &lt;dl&gt;&lt;dt&gt;Convert from dos/unix to dos &lt;/dt&gt;&lt;/dl&gt; &lt;p&gt;To convert the current file from any mixture of CRLF/LF-only line endings, so all lines end with CRLF only: &lt;/p&gt;  &lt;table class="cleartable"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;:update&lt;/tt&gt; &lt;/td&gt;&lt;td&gt; Save any changes. &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt&gt;:e ++ff=dos&lt;/tt&gt; &lt;/td&gt;&lt;td&gt; Edit file again, using dos file format (&lt;tt&gt;'fileformats'&lt;/tt&gt; is ignored).&lt;sup id="cite_ref-broken_0-1" class="reference"&gt;&lt;a href="http://vim.wikia.com/wiki/File_format#cite_note-broken-0"&gt;[A 1]&lt;/a&gt;&lt;/sup&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt&gt;:w&lt;/tt&gt; &lt;/td&gt;&lt;td&gt; Write buffer using dos (CRLF) line endings. &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-8758366237350053250?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/8758366237350053250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2011/06/vim-end-of-line-characters.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/8758366237350053250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/8758366237350053250'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2011/06/vim-end-of-line-characters.html' title='Vim - End of line characters!'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-5964965866346935464</id><published>2010-10-26T18:07:00.002-04:00</published><updated>2010-10-26T18:29:11.961-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jfreechart'/><category scheme='http://www.blogger.com/atom/ns#' term='graph'/><title type='text'>JFreeChart: PiePlot.getSectionPaint()</title><content type='html'>I am starting to consider replacing the &lt;a href="http://www.jfree.org/jfreechart/"&gt;JFreeChart&lt;/a&gt; API with some other one in future projects - gotta start looking for it.&lt;br /&gt;&lt;br /&gt;Anyway, today's annoyance with this tool happens to be the fact that &lt;a href="http://www.jfree.org/phpBB2/viewtopic.php?f=3&amp;amp;t=24922"&gt;charts don't assign colors until they're &lt;span style="font-style: italic;"&gt;drawn&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;[EDIT] I forgot to add that this small &lt;span style="font-style: italic;"&gt;detail&lt;/span&gt; is not mentioned in the javadoc. :) [/EDIT]&lt;br /&gt;&lt;br /&gt;My requirement was simple: assign the same color of each pieplot section to its respective series in an xychart. Sounds extremely simple, right? Well, after having it not work and me scrambling around, adding some ridiculous debugging messages I finally saw that PiePlot.getSectionPaint(Comparable&lt;t&gt; key) was returning null. At that point I wanted to do additional debugging but getSectionKey() is protected for reasons beyond my understanding. So I gave up debugging this myself and turned to google and got slapped in the face with the above.&lt;br /&gt;&lt;br /&gt;Damn man.&lt;/t&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-5964965866346935464?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/5964965866346935464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2010/10/jfreechart-pieplotgetsectionpaint.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/5964965866346935464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/5964965866346935464'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2010/10/jfreechart-pieplotgetsectionpaint.html' title='JFreeChart: PiePlot.getSectionPaint()'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-5032019587737166598</id><published>2010-10-06T10:14:00.001-04:00</published><updated>2010-10-06T10:25:21.196-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='preparedstatement'/><category scheme='http://www.blogger.com/atom/ns#' term='setnull'/><category scheme='http://www.blogger.com/atom/ns#' term='jdbc'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>JDBC and Oracle: setNULL</title><content type='html'>I was surprised (and disappointed) by this behaviour (using Sun JVM 1.4 with Oracle DB 10g):&lt;br /&gt;&lt;br /&gt;String sql = "select count(distinct seq_no) from tmp_table where time_stamp = to_date('29/09/2010 07:00:00', 'DD/MM/YYYY HH24:MI:SS') and err_code = ?";&lt;br /&gt;PreparedStatement pstmt = conn.prepareStatement(sql);&lt;br /&gt;pstmt.setNull(1, Types.NULL);&lt;br /&gt;result = pstmt.executeQuery();&lt;br /&gt;result.next();&lt;br /&gt;System.out.println("Result: " + result.getInt(1));&lt;br /&gt;&lt;br /&gt;The output is: &lt;span style="font-style: italic;"&gt;Result: 0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Zero?&lt;span style="font-style: italic;"&gt; But there are rows with err_code set to null!!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Substituting Types.NULL for Types.VARCHAR produces the same result.&lt;br /&gt;&lt;br /&gt;Googled around a bit and according to &lt;a href="http://www.experts-exchange.com/Programming/Languages/Java/Q_22679402.html"&gt;this&lt;/a&gt; the jdbc driver is actually sending a string 'null'. Wow. So now I will need to have a second sql/preparedstatement just for this scenario... takes away some of the benefits of preparedstatements... oh well. :/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-5032019587737166598?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/5032019587737166598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2010/10/jdbc-and-oracle-setnull.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/5032019587737166598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/5032019587737166598'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2010/10/jdbc-and-oracle-setnull.html' title='JDBC and Oracle: setNULL'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-1230375277085837708</id><published>2010-10-02T23:21:00.002-04:00</published><updated>2010-10-02T23:43:49.190-04:00</updated><title type='text'>VIM - Code Completion</title><content type='html'>It's been a while!&lt;br /&gt;&lt;br /&gt;Anyway, this post's catalyst occurred this morning during my first day of a Java course I'm attending (an attempt at keeping my teeth sharp). As is custom, use of an IDE is not supported and instead attendants are to use a "normal text editor" (we all know Vim is far from "normal text editor" but bare with me here :P).&lt;br /&gt;&lt;br /&gt;It suddenly struck me: it was time to fiddle around with code completion in Vim.&lt;br /&gt;&lt;br /&gt;Quickly dug around and found that Vim &lt;span style="font-weight: bold;"&gt;already&lt;/span&gt; had code completion for some common languages (from version 7 onwards)! Java was unfortunately not on the list so I had to look for a third party solution. So far I have come across &lt;a href="http://www.blogger.com/eclim.org"&gt;eclim&lt;/a&gt;, &lt;a href="http://www.vim.org/scripts/script.php?script_id=1213"&gt;VJDE&lt;/a&gt; and &lt;a href="http://www.vim.org/scripts/script.php?script_id=1213"&gt;java complete.&lt;/a&gt; I didn't like eclim's design (running a server with which vim would interface), and I couldn't make VJDE work for some reason, but &lt;span style="font-style: italic;"&gt;java complete&lt;/span&gt; has so far been working wonders:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_XBtuK4Rec6Y/TKf7U8M0MDI/AAAAAAAAAF0/2SdOmOU5dXk/s1600/vim_javacomplete.PNG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_XBtuK4Rec6Y/TKf7U8M0MDI/AAAAAAAAAF0/2SdOmOU5dXk/s320/vim_javacomplete.PNG" alt="" id="BLOGGER_PHOTO_ID_5523659805169037362" border="0" /&gt;&lt;/a&gt;Just one more reason to love Vim! :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-1230375277085837708?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/1230375277085837708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2010/10/vim-code-completion.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/1230375277085837708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/1230375277085837708'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2010/10/vim-code-completion.html' title='VIM - Code Completion'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XBtuK4Rec6Y/TKf7U8M0MDI/AAAAAAAAAF0/2SdOmOU5dXk/s72-c/vim_javacomplete.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-1946052207990663383</id><published>2009-12-15T10:49:00.002-04:00</published><updated>2009-12-15T10:55:50.551-04:00</updated><title type='text'>The Tao of Programming</title><content type='html'>&lt;pre&gt;&lt;blockquote&gt;The master programmer moves form&lt;br /&gt;program to program without fear.&lt;br /&gt;No change in management can harm&lt;br /&gt;him. He will not be fired, even&lt;br /&gt;if the project is cancelled.Why&lt;br /&gt;is this? He is filled with Tao.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The novice programmer stares in&lt;br /&gt;wonder at the bird, for he&lt;br /&gt;understands it not. The average&lt;br /&gt;programmer dreads the coming of&lt;br /&gt;the bird, for he fears its&lt;br /&gt;message. The master programmer&lt;br /&gt;continues to work at his terminal,&lt;br /&gt;for he does not know that the&lt;br /&gt;bird has come and gone.&lt;/blockquote&gt;&lt;br /&gt;Classic!&lt;br /&gt;&lt;br /&gt;PS: Not to be confused with the &lt;a href="http://thetaoishere.blogspot.com/"&gt;blog&lt;/a&gt;.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-1946052207990663383?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/1946052207990663383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2009/12/tao-of-programming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/1946052207990663383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/1946052207990663383'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2009/12/tao-of-programming.html' title='The Tao of Programming'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-3797079930282196569</id><published>2009-12-02T18:32:00.001-04:00</published><updated>2009-12-02T18:40:27.190-04:00</updated><title type='text'>Java String.split() and the "|" (pipe) character</title><content type='html'>I came across this issue today and someone else already blogged about it: http://hoskinator.blogspot.com/2006/11/trouble-using-pipe-with-stringsplit.html. Some of the comments are really good!&lt;br /&gt;&lt;br /&gt;The pipe character is not mentioned in the &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html"&gt;Pattern&lt;/a&gt; javadoc.&lt;br /&gt;&lt;br /&gt;Basically, just escape the pipe character with double backslashes like so &lt;span style="font-style: italic;"&gt;"\\|&lt;/span&gt;" and you're set.&lt;br /&gt;&lt;br /&gt;This post merely provides redundancy in case the above link goes extinct...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-3797079930282196569?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/3797079930282196569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2009/12/java-stringsplit-and-pipe-character.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/3797079930282196569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/3797079930282196569'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2009/12/java-stringsplit-and-pipe-character.html' title='Java String.split() and the &quot;|&quot; (pipe) character'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-8069782337333770436</id><published>2009-07-23T15:13:00.001-04:00</published><updated>2009-07-23T15:18:43.581-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='copy search hits'/><category scheme='http://www.blogger.com/atom/ns#' term='vi'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><title type='text'>Vim Tip of the Day</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Copying lines containing search hits&lt;/span&gt; (&lt;a href="http://vim.wikia.com/wiki/Copy_the_search_results_into_clipboard"&gt;source&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;1.- Clear a register (eg 'a'): qaq&lt;br /&gt;2.- Append all matching lines to that register: g/pattern/y A&lt;br /&gt;3.- Copy contents of register a to clipboard (register '+'): let @+ = @a&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-8069782337333770436?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/8069782337333770436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2009/07/vim-tip-of-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/8069782337333770436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/8069782337333770436'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2009/07/vim-tip-of-day.html' title='Vim Tip of the Day'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-6993810850277575428</id><published>2009-07-22T23:05:00.011-04:00</published><updated>2009-07-22T23:22:13.565-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='count lines'/><category scheme='http://www.blogger.com/atom/ns#' term='command line'/><category scheme='http://www.blogger.com/atom/ns#' term='cmd'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='batch file'/><category scheme='http://www.blogger.com/atom/ns#' term='com'/><title type='text'>Some Windows "magic"</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Script to get number of lines in a file:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;REM %1 is the file name to be parsed, passed at command line&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;@set count=0&lt;br /&gt;for /f %%a in (%1) do (&lt;br /&gt;@set /a count+=1&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;@echo %count%&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Script that will look at each entry (no spaces) in a file (called seq_no_t3.csv in my example) and search for lines that have an exact match with the string (ie "^string$") in a list of files (specified by adroms*_replies.txt in my example) and output the string "string,file_name" followed by an extra \n in an output file (called loc_matches_2.txt in my example). Also, it will constantly echo to the screen the line number on which it is currently working on from input file.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;@echo off&lt;br /&gt;@setlocal&lt;br /&gt;&lt;br /&gt;set count=0&lt;br /&gt;for /f %%i in ('type .\seq_no_t3.csv') do (&lt;br /&gt;set /a count+=1&lt;br /&gt;set count&lt;br /&gt;&lt;!--nul (set /p tmp=%%i) --&gt;&amp;lt;nul (set /p tmp=%%i) &gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp="%%i)"&gt;&amp;gt; loc_matches_2.txt&lt;br /&gt;&lt;nul tmp=",)"&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;!--nul (set /p tmp=,) --&gt;&lt;/nul&gt;&lt;/nul&gt;&amp;lt;nul (set /p tmp=,) &amp;gt;&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt; loc_matches_2.txt&lt;br /&gt;for /f %%j in (\findstr /m /r "^%%i$" adroms*_replies.txt') do (&lt;br /&gt;&lt;nul tmp="%%j)"&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;nul tmp="%%j)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;nul tmp="%%j)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;nul tmp="%%j)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;!--nul (set /p tmp=%%j) --&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&amp;lt;nul (set /p tmp=%%j) &amp;gt;&amp;gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt; loc_matches_2.txt&lt;br /&gt;)&lt;br /&gt;@echo. &gt;&gt; loc_matches_2.txt&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;@endlocal&lt;br /&gt;@echo on&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/blockquote&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;nul tmp="%%i)"&gt;&lt;nul tmp=",)"&gt;&lt;nul tmp="%%j)"&gt;&lt;br /&gt;&lt;br /&gt;This script has several interesting things going on. Apart from the use of the relatively powerful for loop (where in this case the default delimiter of &lt;space&gt; or &lt;enter&gt; is being used), the lines starting with&lt;span style="font-weight: bold;"&gt; &lt;nul&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/nul&gt;&lt;/span&gt;will pipe a &lt;span style="font-style: italic;"&gt;nul&lt;/span&gt; response to set /p so that the variable remains unchanged. Due to the quirky way &lt;span style="font-style: italic;"&gt;set&lt;/span&gt; works, set /p prints the value &lt;span style="font-style: italic;"&gt;to the right&lt;/span&gt; of the equals sign, not the value of the variable itself. Therefore, you're not changing the value of the %tmp% variable yet you are appending %%i/,/%%j to the file &lt;span style="font-weight: bold;"&gt;with no CRLF&lt;/span&gt;! (see source).&lt;br /&gt;&lt;br /&gt;Pending fixes:&lt;br /&gt;1.- Fix issue where blank lines (actually they have space characters) are printed to output file&lt;br /&gt;2.- Fix issue where if the input string is matched in several files, a list of files (where delim=CRLF) is appended to the line corresponding to the input string. Hence there will be lines with no comma separation - instead they will have a file name where the last input string was found.&lt;br /&gt;&lt;br /&gt;&lt;/enter&gt;&lt;/space&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;/nul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-6993810850277575428?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/6993810850277575428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2009/07/some-windows-magic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/6993810850277575428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/6993810850277575428'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2009/07/some-windows-magic.html' title='Some Windows &quot;magic&quot;'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5903491164319093451.post-4218709634257929585</id><published>2009-07-17T18:59:00.009-04:00</published><updated>2009-07-17T23:04:31.924-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='column mode'/><category scheme='http://www.blogger.com/atom/ns#' term='vi'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><title type='text'>Vim column mode</title><content type='html'>Today I found myself in the need of Vim's column mode (using regex for what I wanted to do would have been hard).&lt;br /&gt;&lt;br /&gt;I googled real quick but the first few hits weren't of much use/very clear and and so after figuring out how it works I think it's worthy of posting here as a) a reminder for myself :) and b) so others who google this may get to see this - faster, hopefully.&lt;br /&gt;&lt;br /&gt;Let's say you have sql statements like in the 1st screenshot. Look closely - they are missing a cast of the date fields with &lt;span style="font-weight: bold;"&gt;to_date&lt;/span&gt;. If you are stuck at 10PM at the office on a friday night, like me, and need to perform this, I really think substitution with regular expressions is the least preferable option at this point.&lt;br /&gt;&lt;br /&gt;Enter column mode.&lt;br /&gt;&lt;br /&gt;Move the cursor to the position where you would like to insert text:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XBtuK4Rec6Y/SmE3DBWsg7I/AAAAAAAAAEo/-qOt2Dg1Jko/s1600-h/vim_col_mode.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 125px;" src="http://4.bp.blogspot.com/_XBtuK4Rec6Y/SmE3DBWsg7I/AAAAAAAAAEo/-qOt2Dg1Jko/s200/vim_col_mode.PNG" alt="" id="BLOGGER_PHOTO_ID_5359625556590363570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hit &lt;span style="font-weight: bold;"&gt;Ctrl+q&lt;/span&gt;. This will make Vim go into 'visual block' mode. Select the intersection of columns and rows where you would like to insert your text. In my case, I wanted to insert some text right before the single quote selected:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XBtuK4Rec6Y/SmE4DiA5iYI/AAAAAAAAAEw/faGQZpG5CZ4/s1600-h/vim_col_mode2.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 125px;" src="http://3.bp.blogspot.com/_XBtuK4Rec6Y/SmE4DiA5iYI/AAAAAAAAAEw/faGQZpG5CZ4/s200/vim_col_mode2.PNG" alt="" id="BLOGGER_PHOTO_ID_5359626664868940162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now hit &lt;span style="font-weight: bold;"&gt;Shift+I&lt;/span&gt;. This will bring the cursor to the first coordinate selected before in  mode. Type in the text you want to enter. Don't fret when you see that you're only updating that line. Once you finish, press &lt;span style="font-weight: bold;"&gt;ESC&lt;/span&gt; - this is where the magic happens:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XBtuK4Rec6Y/SmE4_I82UJI/AAAAAAAAAE4/hOuXzWUoG_s/s1600-h/vim_col_mode4.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 125px;" src="http://2.bp.blogspot.com/_XBtuK4Rec6Y/SmE4_I82UJI/AAAAAAAAAE4/hOuXzWUoG_s/s200/vim_col_mode4.PNG" alt="" id="BLOGGER_PHOTO_ID_5359627688933216402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Isn't vim the greatest text editor in the world? :)&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5903491164319093451-4218709634257929585?l=llorllale.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://llorllale.blogspot.com/feeds/4218709634257929585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://llorllale.blogspot.com/2009/07/vim-column-mode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/4218709634257929585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5903491164319093451/posts/default/4218709634257929585'/><link rel='alternate' type='text/html' href='http://llorllale.blogspot.com/2009/07/vim-column-mode.html' title='Vim column mode'/><author><name>Llorllale</name><uri>http://www.blogger.com/profile/16977565399190122432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XBtuK4Rec6Y/SmE3DBWsg7I/AAAAAAAAAEo/-qOt2Dg1Jko/s72-c/vim_col_mode.PNG' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
