<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.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:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-22530044</id><updated>2009-10-17T20:20:26.193+01:00</updated><title type="text">consonants</title><subtitle type="html">the grkvlt irregular publishing mechanism - enterprise java, web development, information security, statistics and probability, gambling, book reviews and technology discussion, together at last!</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://grkvlt.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default?start-index=26&amp;max-results=25" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://grkvlt.blogspot.com/atom.xml" type="application/atom+xml" /><feedburner:browserFriendly>welcome to the syndicated consonants feed. this is an XML representation of my weblog at http://grkvlt.blogspot.com/</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry><id>tag:blogger.com,1999:blog-22530044.post-6903126834540505231</id><published>2009-04-18T11:28:00.004+01:00</published><updated>2009-04-18T11:49:59.194+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="checkstyle" /><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="standards" /><title type="text">Working Standards</title><content type="html">well, i've now been working at yell adworks for almost three months, and i'm really enjoying it so far. after spending (probably too much) time on design, we have got started on development of a workflow engine system. i'm using spring, hibernate, mule, cxf, jbpm and other interesting technologies, some of which i'm still learning about (mule and associated esb technologies) or, in the case of spring, updating myself on - until now the most recent version of spring i had used was 2.0.9 and we are using 2.5.6, with attendant annotation based goodness and so on.&lt;br /&gt;&lt;br /&gt;&lt;span class="full-post"&gt;one of the only problems so far is the continuous integration system, which is set up with a very strict set of &lt;a href="http://checkstyle.sourceforge.net/"&gt;checkstyle&lt;/a&gt; and &lt;a href="http://pmd.sourceforge.net/"&gt;PMD&lt;/a&gt; rules for code quality. i'm all in favour of managing code quality as an automated process and continuous integration with these tools is a &lt;em&gt;Good Thing&lt;/em&gt;, but i keep falling foul of some of the rules, in particular the checks for multiple return statements in one method, to enforce &lt;a href="http://c2.com/cgi/wiki?SingleFunctionExitPoint"&gt;single exit points&lt;/a&gt;. i believe writing methods with &lt;a href="http://c2.com/cgi-bin/wiki?GuardClause"&gt;guard clauses&lt;/a&gt; up front is the most readable and elegant way of expressing certain types of logic, and apparently martin fowler agrees (see his &lt;a href="http://www.amazon.co.uk/Refactoring-Improving-Design-Existing-Technology/dp/0201485672"&gt;refactoring&lt;/a&gt; book) with me. the following discussion on &lt;a href="http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement/48630"&gt;stackoverflow&lt;/a&gt; is relevant, too. also, there are strict rules on long variable names, which keep me from naming things like &lt;tt&gt;constraintDefinition&lt;/tt&gt; or &lt;tt&gt;workflowInstance&lt;/tt&gt; although i do agree with the restriction on short (less than four characters) names.&lt;br /&gt;&lt;br /&gt;i'm (&lt;em&gt;really&lt;/em&gt;) going to try and make more of an effort to keep this blog updated more frequently, since it's over a year since i last posted ;)&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/development" rel="tag"&gt;development&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/personal" rel="tag"&gt;personal&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/checkstyle" rel="tag"&gt;checkstyle&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/standards" rel="tag"&gt;standards&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/java" rel="tag"&gt;java&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-6903126834540505231?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/6903126834540505231/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=6903126834540505231" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/6903126834540505231" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/6903126834540505231" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/wCCRe-5up40/working-standards.html" title="Working Standards" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2009/04/working-standards.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-2782966982231821395</id><published>2008-03-16T18:33:00.008Z</published><updated>2009-04-18T12:04:23.301+01:00</updated><title type="text">greenock central</title><content type="html">&lt;div class="image"&gt;&lt;a href="http://bp2.blogger.com/_qKK85E-Vnx8/R91n8WHic0I/AAAAAAAAABQ/kblZ0GIj6pc/s1600-h/image-upload-30-701306.jpe"&gt;&lt;img src="http://bp2.blogger.com/_qKK85E-Vnx8/R91n8WHic0I/AAAAAAAAABQ/kblZ0GIj6pc/s320/image-upload-30-701306.jpe"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br clear="all" /&gt; sunset over greenock central station taken with panorama setting by stitching three landscape frames together using a sony ericsson camera phone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-2782966982231821395?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/2782966982231821395/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=2782966982231821395" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/2782966982231821395" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/2782966982231821395" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/Kf9KwLJH-Ig/greenock-central.html" title="greenock central" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp2.blogger.com/_qKK85E-Vnx8/R91n8WHic0I/AAAAAAAAABQ/kblZ0GIj6pc/s72-c/image-upload-30-701306.jpe" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2008/03/greenock-central.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-6940098853996246640</id><published>2008-02-29T22:45:00.009Z</published><updated>2009-10-13T08:17:24.892+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><category scheme="http://www.blogger.com/atom/ns#" term="LONEOS" /><category scheme="http://www.blogger.com/atom/ns#" term="astronomy" /><category scheme="http://www.blogger.com/atom/ns#" term="asteroid" /><title type="text">images from outer space...</title><content type="html">&lt;div class="image"&gt;&lt;img src="http://en.wikipedia.org/wiki/File:7166_Kennedy_Animation.gif" border="0" /&gt;&lt;/div&gt;I recently managed to obtain some images of the asteroid &lt;strong&gt;(7166) Kennedy&lt;/strong&gt;, which is named after my father, Malcolm Kennedy. The discoverer Ted Bowell, and his colleague Bruce Koehn, sent me a set of four images from their frame archive. The Lowell Observatory Near-Earth Object Search (LONEOS), which is funded by NASA, looks for objects that may present a hazard to the planet, such as asteroids with orbits that are close to or intersect earth's. As far as I know, we are in no danger from Kennedy, which is comforting.&lt;br /&gt;&lt;br /&gt;I uploaded the images from Bruce to a &lt;a href="http://www.flickr.com/photos/grkvlt/sets/72157604009500794/"&gt;Flickr set&lt;/a&gt;, and tagged them with a note indicating the asteroid's location, since it's very faint (magnitude 16.6 in these images). Also, to see more details, including the IAU discovery details and citation, as well as confusing orbital ephemeris and data, I have updated the &lt;a href="http://en.wikipedia.org/wiki/7166_Kennedy"&gt;Wikipedia article&lt;/a&gt;. This contains the image you can see here, which is a composite of the LONEOS frames, saved as an animated GIF to show the motion across the fixed stellar background. I really can't explain how much I appreciate the fact that Ted named this object after Malcolm, so I'd like to publicly thank him anyway.&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/astronomy" rel="tag"&gt;astronomy&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/asteroid" rel="tag"&gt;asteroid&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/LONEOS" rel="tag"&gt;LONEOS&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/personal" rel="tag"&gt;personal&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-6940098853996246640?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="related" href="http://en.wikipedia.org/wiki/7166_Kennedy" title="images from outer space..." /><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/6940098853996246640/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=6940098853996246640" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/6940098853996246640" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/6940098853996246640" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/prIf_uyE_5s/images-from-outer-space.html" title="images from outer space..." /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2008/02/images-from-outer-space.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-6938747616602923291</id><published>2007-10-02T20:39:00.005+01:00</published><updated>2009-04-18T12:05:29.392+01:00</updated><title type="text">coming home present</title><content type="html">&lt;div class="image"&gt;&lt;a href="http://bp0.blogger.com/_r8hu0TaP_rE/RwKedEh8gnI/AAAAAAAAAAM/Xq75AijYRPs/s1600-h/image-upload-11-769629.jpe"&gt;&lt;img src="http://bp0.blogger.com/_r8hu0TaP_rE/RwKedEh8gnI/AAAAAAAAAAM/Xq75AijYRPs/s320/image-upload-11-769629.jpe"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br clear="all" /&gt; the problem is, of course, whether to be happy that biggles likes me enough to give me his dead mice, *OR* to be worried that there is (was) a mouse (or mice) in my flat... maybe it's time to board up the hole in the bathroom wall before it gets colder?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-6938747616602923291?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/6938747616602923291/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=6938747616602923291" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/6938747616602923291" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/6938747616602923291" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/nMX130w_eTM/coming-home-present.html" title="coming home present" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp0.blogger.com/_r8hu0TaP_rE/RwKedEh8gnI/AAAAAAAAAAM/Xq75AijYRPs/s72-c/image-upload-11-769629.jpe" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2007/10/coming-home-present.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-1816055513961268354</id><published>2007-10-02T01:37:00.002+01:00</published><updated>2009-04-18T12:05:57.145+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="visualization" /><category scheme="http://www.blogger.com/atom/ns#" term="music" /><title type="text">seeing music, hearing pictures</title><content type="html">i just have to post a link to this site. it's called &lt;a href="http://www.musanim.com/index.html"&gt;the music animation machine&lt;/a&gt; and consists of videos of classical pieces being performed, with a piano-roll type animation showing the notes as they play, with different colours for separate voices and highlights for the current tone, almost like a strange karaoke machine. you can buy them on dvd or just watch some samples on youtube. apparently &lt;a href="http://en.wikipedia.org/wiki/Edward_Tufte"&gt;edward tufte&lt;/a&gt; is a big fan, and uses the system as an &lt;a href="http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=00005y"&gt;example in his lectures&lt;/a&gt;, to show how information can be easily assimilated if it is in the right format.&lt;br /&gt;&lt;br /&gt;&lt;div class="image"&gt;&lt;img src="http://www.musanim.com/indulci.gif" title="the music animation machine" border="0" /&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;br /&gt;&lt;br /&gt;the best ones i have seen are &lt;a href="http://www.youtube.com/v/ipzR9bhei_o&amp;rel=1" target="_blank"&gt;Johann Sebastian Bach, Toccata and Fugue in D Minor&lt;/a&gt;, &lt;a href="http://www.youtube.com/v/oP6URbitYOg&amp;rel=1" target="_blank"&gt;Frederic Chopin, Etude, opus 10 #7&lt;/a&gt; and &lt;a href="http://www.youtube.com/v/o1ZCH7gr4dI&amp;rel=1" target="_blank"&gt;Franz Liszt, Feux Follets&lt;/a&gt;. i think they look like some sort of bizarre 2D &lt;a href="http://mathworld.wolfram.com/CellularAutomaton.html"&gt;cellular automata&lt;/a&gt; evolving with the music&lt;br /&gt;&lt;br /&gt;enjoy!&lt;br /&gt;&lt;br /&gt;(&lt;em&gt;see also the IBM &lt;a href="http://www.philipglass.com/glassengine/#"&gt;glass engine&lt;/a&gt;, infinity edition - a java applet for exploring &lt;a href="http://en.wikipedia.org/wiki/Philip_Glass"&gt;philip glass&lt;/a&gt;'s musical works.&lt;/em&gt;)&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/music" rel="tag"&gt;music&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/visualization" rel="tag"&gt;visualization&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-1816055513961268354?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/1816055513961268354/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=1816055513961268354" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/1816055513961268354" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/1816055513961268354" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/QIbWzVuY8kg/seeing-music-hearing-pictures.html" title="seeing music, hearing pictures" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2007/10/seeing-music-hearing-pictures.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-579307361569285718</id><published>2007-10-02T01:24:00.003+01:00</published><updated>2009-04-18T12:06:19.969+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><category scheme="http://www.blogger.com/atom/ns#" term="gadgets" /><category scheme="http://www.blogger.com/atom/ns#" term="phone" /><title type="text">bandwidth gadgets</title><content type="html">ok, i better post something since otherwise it'd be a full year (well, in a fortnight it would...) between posts. and, of course, fifty weeks is a perfectly reasonable gap instead.&lt;br /&gt;&lt;br /&gt;the other reason for posting is that i finally got myself an interweb thing and my email and web-browser suddenly started working again! but no ADSL (no land line, rented property) or cable (not in my postcode, anyway) for me. instead, i now have a vodafone 3G data card in my laptop. it goes in the expresscard slot (although it does come with an adapter for PC card slots) so it looks nice and tidy, as opposed to the alternative white brick on the end of a USB cable i was offered. it does cost GBP 50.00 for the internal card, and the USB dongle is free, but there's no competition when you see them, and what else am i going to put in that slot anyway?&lt;br /&gt;&lt;br /&gt;&lt;div class="image"&gt;&lt;img title="vodafone 3g expresscard modem" src="http://www.vodafonebusinessshop.co.uk/img/features/expresscard.jpg" width="162" height="232" border="0" /&gt; &lt;img title="vodafone external usb 3g modem" src="http://www.vodafonebusinessshop.co.uk/img/features/usbmodem.jpg" width="162" height="232" border="0" /&gt;&lt;img title="sony ericsson w880i phone" src="http://farm1.static.flickr.com/183/381668673_8ca744263b.jpg" width="149" height="232" border="0" /&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;br /&gt;&lt;br /&gt;i also grabbed a new mobile phone, too - the &lt;a href="http://www.sonyericsson.com/spg.jsp?cc=GB&amp;lc=en&amp;ver=4000&amp;template=pip1&amp;zone=pp&amp;pid=10653"&gt;sony ericsson W880i&lt;/a&gt; walkman phone. beautiful shiny steel case, really thin, candy-bar phone, plus it's 3G. the walkman features are pretty cool, and since it came with a 1Gb M2 data card and &lt;em&gt;proper&lt;/em&gt; sony in-ear headphones (i.e. the ones with changeable rubber seals that stop noise escaping and irritating other people...) i might even start using it instead of my ipod. to complete my sony collection, i'm just holding out for the MBW-150 bluetooth watch, supposedly shipping in october...&lt;br /&gt;&lt;br /&gt;it's still the 3g data card that amazes me, though. i remember my first GSM modem card (in an apple newton, actually, connected to a motorola star-tac) which gave me 19.2Kbps with compression, if i was lucky. this card gives me 7.2Mbps (peak, confirmed) or 1.4 Mega-&lt;em&gt;bytes&lt;/em&gt; per second. boggle.&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/mobile" rel="tag"&gt;mobile&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/phone" rel="tag"&gt;phone&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/gadgets" rel="tag"&gt;gadgets&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-579307361569285718?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/579307361569285718/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=579307361569285718" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/579307361569285718" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/579307361569285718" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/k8At2VWSaFI/bandwidth-gadgets.html" title="bandwidth gadgets" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2007/10/bandwidth-gadgets.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-116042817278443677</id><published>2006-10-09T21:45:00.001+01:00</published><updated>2009-04-18T12:07:00.993+01:00</updated><title type="text">the tesco value experiment</title><content type="html">although i've been paid now, i had to spend over a month (nearly two...) waiting on my first cheque (actually, BACS) during which time i had to economise. there happens to be a large, 24-hour, tesco near the halls of residence i stay in, since they claim that &lt;em&gt;every little helps&lt;/em&gt;, i decided to shop there. my problem - how to make no money (or very close to none) last a week and provide me with food? the answer - &lt;strong&gt;tesco &lt;em&gt;value&lt;/em&gt; food&lt;/strong&gt;!&lt;br /&gt;&lt;br /&gt;&lt;span class="full-post"&gt;&lt;div class="image"&gt;&lt;img src="http://www.tesco.com/pi/xpi/2/5010204862132_200.jpg" title="chicken noodles @ 8p" alt="chicken noodles @ 8p" width="150" height="150" /&gt;&lt;img src="http://www.tesco.com/pi/xpi/2/5000436787402_200.jpg" title="four teacakes @ 27p" alt="four teacakes @ 27p" width="150" height="150" /&gt;&lt;img src="http://www.tesco.com/pi/xpi/8/5018374320148_200.jpg" title="baked beans @ 17p" alt="baked beans @ 17p" width="150" height="150" /&gt;&lt;br /&gt;&lt;img src="http://www.tesco.com/pi/xpi/1/5050179246841_200.jpg" title="36 wheat biscuits @ 64p" alt="36 wheat biscuits @ 64p" width="150" height="150" /&gt;&lt;img src="http://www.tesco.com/pi/xpi/4/5010204838274_200.jpg" title="golden savoury rice meal @ 25p" alt="golden savoury rice meal @ 25p" width="150" height="150" /&gt;&lt;img src="http://www.tesco.com/pi/xpi/0/5010204450490_200.jpg" title="plain chocolate digestives @ 34p" alt="plain chocolate digestives @ 34p"width="150" height="150" /&gt;&lt;/div&gt;&lt;br clear="all" /&gt;&lt;br /&gt;&lt;br /&gt;and, there's more where they come from. since they all cost so little, my expectations were naturally low, and i can fairly say they were met, and possibly even exceeded. in particular, those teacakes are an amazing purchase and last for ages without going stale, as are the digestives. even the savoury rice and tomato pasta meals (not pictured) which are bags of rice/pasta with powdered sauce that require boiling in water/milk for 5-10 minues to cook are not overly dreadful. now, i know people are going to say why didn't i get  vegetables and meat and so on - &lt;em&gt;ingredients&lt;/em&gt; basically! and make my own meals? well, i'm pretty lazy, and also, i still think the 'value way' is cheaper.&lt;br /&gt;&lt;br /&gt;another thing i noticed is that the value brand now extends way past food. you can buy value pens, pencils and paper, cameras, telephones, crockery, shampoo, irons, microwaves - i could go on... my experiment has thankfully ended, but i am convinced that although man may not live on bread alone, he &lt;em&gt;could&lt;/em&gt; do it with tesc's value range, even on the dole...&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/tesco" rel="tag"&gt;tesco&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/value" rel="tag"&gt;value&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/food" rel="tag"&gt;food&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/shopping" rel="tag"&gt;shopping&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/money" rel="tag"&gt;money&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-116042817278443677?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="related" href="http://www.tesco.com/" title="the tesco value experiment" /><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/116042817278443677/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=116042817278443677" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/116042817278443677" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/116042817278443677" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/y4FaGa4MqnI/tesco-value-experiment.html" title="the tesco value experiment" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/10/tesco-value-experiment.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-115790331949946079</id><published>2006-09-10T13:46:00.000+01:00</published><updated>2006-09-10T16:48:39.620+01:00</updated><title type="text">regarding web two point zero</title><content type="html">i've been looking at new additions to google and amazon that seem to be pushing the web 2.0 model of user supplied and managed content. firstly, there's &lt;a href="http://base.google.com/"&gt;google base&lt;/a&gt; which is a new database of user supplied and annotated content that is indexed, searched and published by google. if you have a google services account, you can easily add items, either singly or in bulk using XML to submit them all. there are a bunch of pre-defined item types or categories, such as Blogs, Jobs, Podcasts, Reviews, Recipies, Products or Reference articles each with their own set of default attributes/meta-data.&lt;br /&gt;&lt;br /&gt;&lt;span class="full-post"&gt;you can also post items in your own categories, and add arbitrary new attributes. attributes are just name/value pairs, where the value is either a plain text string or one of several pre-defined types like numbers, date (range), URLs or locations (for google maps). these are displayed at the top of an item's display page. additionally you can add up to ten labels, which are similar to tags or keywords. these labels are used to group items, and for browsing, similarly to categories except that you may have membership of multiple label classes but only one category.&lt;br /&gt;&lt;br /&gt;although i like the idea of submitting your own content to be hosted by google, with tags and semantic info for indexing, it appears that most of the information in the base is auto submitted from other sites, as a link to the item page and some meta-data. unfortunately, for items like books, cds and dvds or other physical objects, there are many online retailers selling them. it means that there are &lt;em&gt;many&lt;/em&gt; copies of the information (meta data) on an item, sometimes conflicting, and no way of determining the &lt;em&gt;definitive&lt;/em&gt; item's identity. this is a shame, because a database like this would be a good basis for some of the &lt;a href="http://en.wikipedia.org/wiki/Semantic_Web"&gt;semantic&lt;/a&gt; &lt;a href="http://www.w3.org/2001/sw/"&gt;web&lt;/a&gt; projects.&lt;br /&gt;&lt;br /&gt;i'm not sure how google will &lt;em&gt;rank&lt;/em&gt; the information though, since people can obviously submit anything - the wikipedia problem, basically, which &lt;em&gt;they&lt;/em&gt; seem to have solved, admittedly. also, there aren't really any links to or from the google hosted content (yet) and this makes it hard to calculate a pagerank equivalent. interestingly, you can see recent searches on the base front page, which can be odd! but, they could use some of the search data to determine which items people looked at most and have this as part of the ranking data.&lt;br /&gt;&lt;br /&gt;there &lt;em&gt;are&lt;/em&gt; also vocabularies to describe links and relationships. for instance &lt;a href="http://vocab.org/frbr/core"&gt;functional requirements for bibliographic records&lt;/a&gt; (FRBR) is a vocabulary that describes the relationships between works, such as &lt;em&gt;parodyOf&lt;/em&gt;, &lt;em&gt;excerptFrom&lt;/em&gt;, &lt;em&gt;originalWork&lt;/em&gt;, &lt;em&gt;reviewOf&lt;/em&gt; and so on. sites like &lt;a href="http://www.imdb.com/"&gt;IMDb&lt;/a&gt; provide a unique namespace for referencing movies, which can each be entered into base with the relevant meta data. then, any reviews, parodies or whatever can be easily linked to the unique identity of the original work.&lt;br /&gt;&lt;br /&gt;i have submitted a copy of my mind performance hacks review, as one of &lt;a href="http://base.google.com/base/search?authorid=1437851"&gt;my items&lt;/a&gt; to see how the data entry works, as well as data for my weblog. as mentioned previously, there aren't many google hosted items at the moment, although the &lt;a href="http://base.google.com/base/search?a_n0=people+profiles&amp;a_y0=9&amp;hl=en&amp;gl=US"&gt;people profiles&lt;/a&gt; category is, and has some special search settings. this part works like a personal ad database, really, although it could eventually evolve into a directory for identity information, like a white pages. &lt;br /&gt;&lt;br /&gt;the second user generated content system is on &lt;a href="http://www.amazon.com/"&gt;amazon&lt;/a&gt;, namely their addition of &lt;a href="http://wiki.org/wiki.cgi?WhatIsWiki"&gt;wiki&lt;/a&gt;-pages to all book information, called &lt;a href="http://www.amazon.com/gp/wiki/what-is-this/103-6731623-5173411"&gt;&lt;em&gt;ProductWiki&lt;/em&gt;&lt;/a&gt; (product information from our customers). this allows any customer to contribute relevant information as freeform text and links, not nescessarily in the form of a product review. for instance, links to source code download sites for technical books or to online discussion forums about the characters for fiction. at the moment, uptake seems slow for this feature, but since the wikis allow cross-referncing between books easily, this could grow into a hypertext literary database. i have edited and created content on the &lt;a href="http://en.wikipedia.org/wiki/Wikipedia"&gt;wikipedia&lt;/a&gt; encyclopaedia site, as well as friend's private wikis, and used them at work for recording information like network configurations that is often dynamic, and i really like the concept. hopefully user contributions will make amazon's wiki a useful resource eventually.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/semantic%20web" rel="tag"&gt;semantic web&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/google" rel="tag"&gt;google&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/content" rel="tag"&gt;content&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/wiki" rel="tag"&gt;wiki&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/google%20base" rel="tag"&gt;google base&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-115790331949946079?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/115790331949946079/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=115790331949946079" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/115790331949946079" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/115790331949946079" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/xPJOozs3rx0/regarding-web-two-point-zero.html" title="regarding web two point zero" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/09/regarding-web-two-point-zero.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-115786491697069518</id><published>2006-09-10T04:28:00.000+01:00</published><updated>2006-09-10T11:55:16.976+01:00</updated><title type="text">restart</title><content type="html">well, it seems like i'm working again! this time, though, i'm a java developer, which is a new experience as a full-time role. i mean, i've done development work as &lt;em&gt;part&lt;/em&gt; of other jobs, and i've worked on development projects on a freelance basis from home (see earlier posts...) just never in an office, nine-to-five, with other developers. so, i'm getting on ok, although i've still not been paid, due to the vagaries of contract work and umbrella company/agency interaction, which is a pain. it's good to have a 'proper' job though, and i feel much more motivated that a few months ago, when i became disillusioned by internet-based freelance development contracting...&lt;br /&gt;&lt;br /&gt;&lt;span class="full-post"&gt;i'm living in &lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;amp;q=greenock,+uk&amp;ie=UTF8&amp;amp;z=14&amp;om=1&amp;amp;iwloc=A" rel="map"&gt;greenock&lt;/a&gt;, outside &lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;amp;q=glasgow,+uk&amp;ie=UTF8&amp;amp;om=1&amp;z=11&amp;amp;ll=55.86568,-4.257202&amp;spn=0.272407,0.86586&amp;amp;iwloc=A" rel="map"&gt;glasgow&lt;/a&gt;, which is also different for me. i actually happen to be staying in halls of residence at the moment, since greenock isn't exactly a top tourist destination, and they seem to be the only form of temporary accomodations available. the students arrived two weeks ago now, so i'm surrounded by people half my age who seem to spend all their time drinking and smoking pot, stereotypes and cliches be damned! i hope i'll be moving into a proper flat soon, since my contract has several months to run yet.&lt;br /&gt;&lt;br /&gt;a nice thing about my current digs is the view - i can look out onto and across the clyde, and the deep-water channel along which diverse ships steam most days. there is a container terminal slightly further down-river where cruise liners and container cargo vessels both dock; the occasional royal navy frigate or somesuch from &lt;a href="http://www.royal-navy.mod.uk/server/show/nav.3157"&gt;HM naval base faslane&lt;/a&gt; are often visible (no submarines spotted yet); tugs and other workboats from &lt;a href="http://www.clyde-marine.co.uk/"&gt;clyde marine&lt;/a&gt; can be seen assisting larger boats; and the paddle steamer &lt;a href="http://www.waverleyexcursions.co.uk/waverley.htm"&gt;waverley&lt;/a&gt; stops regularly on her pleasure trips to rothesay and points west. i've been quite enjoying my forays into ship-spotting out of the window, particularly since there's not much else to do!&lt;br /&gt;&lt;br /&gt;once i have a more permanant base, i think i'll start to feel more at home, since the halls are rather basic and uninviting. there's nothing worse than not wanting to go home at night, when home is a tiny room with a single bed and a desk, where i can't even smoke. that ought to change, like i said, in a week or so, when i move out. so, here's to working again, and getting myself sorted out with a flat and a kitten here on the west of scotland...&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/work" rel="tag"&gt;work&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/development" rel="tag"&gt;development&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/java" rel="tag"&gt;java&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/location" rel="tag"&gt;location&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/personal" rel="tag"&gt;personal&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/ships" rel="tag"&gt;ships&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-115786491697069518?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/115786491697069518/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=115786491697069518" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/115786491697069518" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/115786491697069518" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/SmmoswDRCyY/restart.html" title="restart" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/09/restart.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114334945535827396</id><published>2006-03-26T05:54:00.000+01:00</published><updated>2006-04-08T03:21:08.580+01:00</updated><title type="text">mind hacking</title><content type="html">this is a review of two o'reilly books from their &lt;em&gt;hacks&lt;/em&gt; series which are both basically about the same thing, although the subject is approached in two different ways. they are '&lt;em&gt;&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0596007795/consonants-21?creative=6394&amp;camp=1406&amp;adid=14D3Q241X3RCT4Y3MGWS&amp;link_code=as1"&gt;mind hacks&lt;/a&gt;&lt;/em&gt;' and '&lt;em&gt;&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0596101538/consonants-21?creative=6394&amp;camp=1406&amp;adid=1NF5ZVW2D13JPCJ1TQD6&amp;link_code=as1"&gt;mind performance hacks&lt;/a&gt;&lt;/em&gt;', the former published back in early 2005 and the other just last month, in february 2006.&lt;br /&gt;&lt;br /&gt;the books have very similar titles and are difficult to judge by their covers alone. in fact, MH ('&lt;em&gt;mind hacks&lt;/em&gt;') is not a typical &lt;em&gt;hacks&lt;/em&gt; book at all. instead of being filled with useful tricks and ideas to improve and enhance the way you work with your mind, it is more of a description of the hacks that are employed by your brain and your mind to make &lt;em&gt;you&lt;/em&gt; work. it gives an introduction to the neural machinery behind your mind, with lots of facts and details about cognitive- and neuroscience. it uses these to explain perception, thinking, cognition, optical illusions and other aspects and artifacts of consciousness. this is in essence a hardware manual, showing why and how your mind does what it does, without explaining how to do any of it better.&lt;br /&gt;&lt;br /&gt;MPH ('&lt;em&gt;mind performance hacks&lt;/em&gt;' - i will refer to the books by their abbreviated titles in the rest of this review) on the other hand is a software users guide. it gives many tricks, or what you would recognize as &lt;em&gt;hacks&lt;/em&gt; that you can use to accomplish mental tasks quicker, better and more efficiently. it covers memorization, computation or calculation, organization, creativity,  communication and general efficiency. these are all presented in a very practical way, with examples illustrating situations where the hacks can be used with complete instructions for you to follow. they are not rote copying tasks, though, but mostly conceptual tools that should become part of an overall mental toolbox to be used whenever you need to think quickly and efficiently.&lt;br /&gt;&lt;br /&gt;both books score well on references and citations for further reading, giving you pointers to all the material you will need to study each concept in much more detail - scientific papers, journal and newspaper or magazine articles, books and websites. there are also excellent websites associated with the books, written by their authors, a &lt;a href="http://www.mindhacks.com"&gt;mind hacks&lt;/a&gt; blog and the &lt;a href="http://www.ludism.org/mentat/MindPerformanceHacks"&gt;mentat wiki&lt;/a&gt; for MPH. as o'reilly books, they both have excellent indexes, and there are also some good sample hacks available as pdf downloads from the &lt;a href="http://www.oreilly.com/catalog/"&gt;publisher&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="full-post"&gt;i suspect that many people will have bought the first book hoping that the contents are similar to those of the second, and at the time the second book did not exist, making MH the best book available. however, now that MPH is available it occupies the space that most readers would associate with a &lt;em&gt;hacks&lt;/em&gt; series book dealing with the mind in a practical sense, and the title is certainly relevant since all the hacks are about increasing your mental performance, or overclocking your brain.&lt;br /&gt;&lt;br /&gt;MH covers a lot of ground, and is a useful jumping-off point for people who want to learn how their mind and brain work. it starts off with a description of the brain, and the methods used by neuroscientists to explore and map the physical structure and activity, such as MRI and PET scanning and EEG readers. there are sections on each of the senses, showing how we perceive things and how we can be tricked by simple illusions. many of the hacks are actually tricks or demonstrations that show off these mechanisms, and can usually be performed while reading the book. they are, however, solely intended to illustrate these points, and most cannot be used for anything else, except to prove that your brain works in the same way as everyone else's!&lt;br /&gt;&lt;br /&gt;i did find that i could just dip into the book at random and find something interesting to read, and because it is very well researched, i could always lose myself for hours following up the references and end-notes given for each hack. i definitely enjoyed reading this, and it will appeal to anyone who is interested in or thinking about studying cognitive science, psychology or neuroscience, although it will not turn you into a brain surgeon overnight. i don't think MH really fits into the hacks series, but does make a good and easy to read reference book for the casual reader.&lt;br /&gt;&lt;br /&gt;&lt;div class="box"&gt;&lt;div class="book"&gt;&lt;div class="book-cover"&gt;&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0596007795/consonants-21?creative=6394&amp;camp=1406&amp;adid=14D3Q241X3RCT4Y3MGWS&amp;link_code=as1"&gt;&lt;img style="border: 1px solid white;" border="0" title="mind hacks" src="http://rcm-images.amazon.com/images/P/0596007795.02._SCLZZZZZZZ_SX120_CR10,10,100,120_.jpg" title="mind hacks" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="book-details"&gt;&lt;strong&gt;title&lt;/strong&gt; / mind hacks&lt;/div&gt;&lt;br /&gt;&lt;div class="book-details"&gt;&lt;strong&gt;author&lt;/strong&gt; / tom stafford and matt webb&lt;/div&gt;&lt;br /&gt;&lt;div class="book-details"&gt;&lt;strong&gt;price&lt;/strong&gt; / gbp 17.50 / eur 22.00 / usd 24.95&lt;/div&gt;&lt;br /&gt;&lt;div class="book-details"&gt;&lt;strong&gt;pages&lt;/strong&gt; / 394&lt;/div&gt;&lt;br /&gt;&lt;div class="book-details"&gt;&lt;strong&gt;isbn&lt;/strong&gt; / 0-596-00779-5&lt;/div&gt;&lt;br /&gt;&lt;div class="book-details"&gt;&lt;strong&gt;published&lt;/strong&gt; / november 2004&lt;/div&gt;&lt;br /&gt;&lt;div class="book-details"&gt;an excellent introductory reference to cognitive science and the mind, masquerading as a book of practical tips and tools.&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br style="clear: both;" /&gt;&lt;br /&gt;&lt;div class="rating"&gt;&lt;span class="three stars"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;em&gt;three out of five cats preferred &lt;strong&gt;mind hacks&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;&lt;br /&gt; &lt;br /&gt;MPH, on the other hand, definitely fits the mould. it is an entirely practical text, and is still easy to dip into. if you want to try and get the most out of your brain, and become a better thinker, this will help you. you won't be able to absorb many of the hacks at first reading, since a lot of them require memorisation or rote learning of techniques, or repeated practice until you can get them just right. i found that it helped to skim through the book, reading the hacks that looked interesting, and noting down those that seemed useful. the book recommends creating a 'mental toolkit' and you should bear this in mind, thinking about where you need to strengthen yourself mentally, and focus on the topics that relate to those areas. once you have noted down the hacks that you want to try and implement, you can then go back over them and read them carefully, one at a time, looking up the end-notes and references.&lt;br /&gt;&lt;br /&gt;to get the full benefit of the book will, i think, require a long time, possibly several months, since the hacks often require you to commit to a certain way of doing something that you will need to dedicate time to practice each day. i think of it as a mental exercise program, with the long-term goal of getting mentally fit. this means drawing up a schedule of exercises and routines to go through on a daily or weekly basis, much the same as physical exercise. certainly, there are some hacks that can be understood instantly, with immediate effect, but most are long-term habit and routine changing, and will require (and repay) dedication and perseverance.&lt;br /&gt;&lt;br /&gt;MPH is split into several sections: memory, information processing, creativity, maths, decision making, communication, clarity and mental fitness. each of these focusses on a single area, but often gives several different methods for each type of task. different people work best in different ways, and this allows you to choose the hack that best suits your type of personality and use it to its full effectiveness, and there is usually guidance on deciding between these multiple choices if you are unsure.&lt;br /&gt;&lt;br /&gt;the topics i am most interested in and will be trying to implement are the memory and mnemonics, shorthand writing, techniques for recording ideas and information, creativity tools and mental fitness and clarity techniques. i will go over these briefly, but the first section of the book is illustrative of the style and content as a whole, and is a good example to go over in detail.&lt;br /&gt;&lt;br /&gt;this section contains twelve hacks related to memory. the first is one that i was aware of already - the &lt;em&gt;rhyming method&lt;/em&gt; for remembering ten things to take with you when leaving your house. this involves a rhyming list of words relating to the numbers one to ten. each word is then associated with a vivid picture to remind you of an object. you can then go through the ten rhymes easily, bringing the pictures into your head and thus remembering the items. for example &lt;em&gt;one&lt;/em&gt; rhymes with &lt;em&gt;gun&lt;/em&gt; and i picture firing a gun-toting cowboy with an enormous, oversized stetson hat, thus reminding me to pick up my own hat. this system is only really extensible to ten, and maybe a few more, items. the system i am currently trying to learn for larger lists is the &lt;em&gt;hotel dominic&lt;/em&gt; system. this allows ten thousand pieces of information to be stored and recalled instantly. the details are complex, but the operation of the system is simple, and i hope it will be able to supplement my usually pretty flaky memory.&lt;br /&gt;&lt;br /&gt;another technique that i am trying to work into my everyday routine is hack number fourteen - &lt;em&gt;write faster with speedwords&lt;/em&gt; which is an alternative to shorthand systems like pitman. traditional shorthand has the drawback of using special symbols and cannot be entered into a computer or pda. this system uses only lowercase letters, and is standardized so cannot be misinterpreted like txt abbrv style writing. there is a list of single, two and three letter combinations, along with the words they represent which must be learned, and then they can be used in place of the full spelling. the abbreviations have mnemonic-style notes to aid memorization, often based on another language or a homophone. a useful extension of this hack would be to use the features of some text editors and word processors that allow expansion of arbitrary strings into full words and phrases, greatly speeding up typing.&lt;br /&gt;&lt;br /&gt;the sections on creativity and clarity contain many hacks that seem rather 'fluffy' at first glance, however changing the way you think about something and deliberately doing things according to some plan that seems unnatural to you is often a good way to stimulate your mind, and get you thinking along paths that would not otherwise be available. there are a lot of well respected ideas presented, including brian eno's &lt;em&gt;oblique strategies&lt;/em&gt; and edward de bono's &lt;em&gt;po&lt;/em&gt; which have helped many people generate brilliant ideas. i would encourage trying these hacks out, even if they seem silly, since you will never know if they are helpful until you put in the effort and try. something that i have problems with is stage fright, and hack fifty four gives some interesting ideas on how to use this to your own advantage, which i will try to remember for the next time i have to speak in public. &lt;br /&gt;&lt;br /&gt;the last section on mental fitness is a good example of the routine-changing advice given in the book. it suggests many ways of keeping your mind active and heathy, from the obvious, such as playing board games, to the less obvious (eating and sleeping properly) and also explains the &lt;em&gt;mental toolbox&lt;/em&gt; concept, which is one of the central themes. the previous chapter, on clarity also contains some intriguing ideas. hack sixty suggests &lt;em&gt;meditation&lt;/em&gt; as a way to clear and focus the mind, which i have never really tried before, but would like to learn more about. also, hack sixty one talks about &lt;em&gt;self hypnosis&lt;/em&gt; which i am skeptical of, but will also investigate.&lt;br /&gt;&lt;br /&gt;one thing about MPH that will particularly appeal to hackers is the code snippets provided. the book contains several short perl programs to illustrate or implement the hacks. these are usually for generating randomness, but there are some innovative programs and the source is freely downloadable from the publisher. there are also pointers to applications (commercial, free and shareware) that can augment some of the hacks, although they are never necessary to use the book. the software is biased towards macintosh os x, however the scripts should work on any operating system that has a perl interpreter.&lt;br /&gt;&lt;br /&gt;overall, MPH is an excellent resource, particularly if you feel you might be stagnating mentally, or are suffering from lack of mental stimulation after finishing university or leaving an interesting job. if you put in the time and effort to develop your mental toolkit, MPH will help you keep it up to date and working. i don't recommend all of the hacks to everyone (for instance, not all readers will have the time or patience to learn esperanto!) but picking and choosing what hacks seem right for you, and starting off with something achievable should produce obvious results. treat the book as a do it yourself guidebook combined with an exercise program and you will get the most out of it.&lt;br /&gt;&lt;br /&gt;&lt;div class="box"&gt;&lt;div class="book"&gt;&lt;div class="book-cover"&gt;&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0596101538/consonants-21?creative=6394&amp;camp=1406&amp;adid=1NF5ZVW2D13JPCJ1TQD6&amp;link_code=as1"&gt;&lt;img style="border: 1px solid white;" border="0" title="mind performance hacks" src="http://rcm-images.amazon.com/images/P/0596101538.02._SCLZZZZZZZ_SX120_CR10,10,100,120_.jpg" title="mind performance hacks" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="book-details"&gt;&lt;strong&gt;title&lt;/strong&gt; / mind performance hacks&lt;/div&gt;&lt;br /&gt;&lt;div class="book-details"&gt;&lt;strong&gt;author&lt;/strong&gt; / ron hale-evans&lt;/div&gt;&lt;br /&gt;&lt;div class="book-details"&gt;&lt;strong&gt;price&lt;/strong&gt; / gbp 17.50 / eur 22.00 / usd 24.99&lt;/div&gt;&lt;br /&gt;&lt;div class="book-details"&gt;&lt;strong&gt;pages&lt;/strong&gt; / 330&lt;/div&gt;&lt;br /&gt;&lt;div class="book-details"&gt;&lt;strong&gt;isbn&lt;/strong&gt; / 0-596-10153-8&lt;/div&gt;&lt;br /&gt;&lt;div class="book-details"&gt;&lt;strong&gt;published&lt;/strong&gt; / february 2006&lt;/div&gt;&lt;br /&gt;&lt;div class="book-details"&gt;a great selection of mind expanding tips and tricks that should be an essential part of your mental toolkit.&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br style="clear: both;" /&gt;&lt;br /&gt;&lt;div class="rating"&gt;&lt;span class="five stars"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;em&gt;five out of five cats preferred &lt;strong&gt;mind performance hacks&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;note&lt;/strong&gt; - &lt;em&gt;i will be writing more about my experiences implementing the techniques from MPH above, and explaining which hacks i found useful, in a few months, by which time the techniques i described above should be completely natural to me.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/books" rel="tag"&gt;books&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/review" rel="tag"&gt;review&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/mind" rel="tag"&gt;mind&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/hacks" rel="tag"&gt;hacks&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/brain" rel="tag"&gt;brain&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114334945535827396?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114334945535827396/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114334945535827396" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114334945535827396" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114334945535827396" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/Oj22g7HCCJ0/mind-hacking.html" title="mind hacking" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/03/mind-hacking.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114307214915899067</id><published>2006-03-22T23:32:00.000Z</published><updated>2006-03-29T22:24:01.806+01:00</updated><title type="text">shell idiom</title><content type="html">this is a little bit of unix shell technique that i haven't seen mentioned much. there are some really good lists of &lt;a href="http://sial.org/howto/perl/one-liner/"&gt;perl one-liners&lt;/a&gt; floating around, but there's also a lot you can do in the shell alone. this particular command is used to solve the common problem of finding all files containing a particular regular expression, and displaying them, along with the matching lines.&lt;br /&gt;&lt;br /&gt;it uses &lt;em&gt;find&lt;/em&gt; to get a list of files that match some criteria and then looks for the regular expression using &lt;em&gt;grep&lt;/em&gt;. the intuitive solution, piping the file contents, or passing the file as an argument, to &lt;code&gt;grep &lt;i&gt;regexp&lt;/i&gt;&lt;/code&gt; won't work, because grep just outputs the matching lines, and we won't know which file they came from.&lt;br /&gt;&lt;br /&gt;one solution would be to use &lt;em&gt;xargs&lt;/em&gt; which accepts paramaters on stdin and executes a command with each line of input as an argument. this will run into shell command length limitations, although xargs is a handy tool for many tasks. my preferred one-line command is this one, however:&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;find &lt;i&gt;path&lt;/i&gt; -type f -exec grep "&lt;i&gt;regexp&lt;/i&gt;" {} /dev/null \;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;which uses the fact that although &lt;em&gt;/dev/null&lt;/em&gt; will never contain your pattern, since &lt;em&gt;grep&lt;/em&gt; is looking at multiple files it will print the names of files that contain a match, at the start of each line, for example, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ &lt;b&gt;find ~/public_html/ -type f -exec grep "^&amp;lt;title" {} /dev/null \;&lt;/b&gt;&lt;br /&gt;~/public_html/index.htm: &amp;lt;title&amp;gt;index page&amp;lt;/title&amp;gt;&lt;br /&gt;~/public_html/test.htm: &amp;lt;head&amp;gt;&amp;lt;title&amp;gt;testing&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;Binary file ~/public_html/scripts/statcgi matches&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/unix" rel="tag"&gt;unix&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/shell" rel="tag"&gt;shell&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/one-liner" rel="tag"&gt;one-liner&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/scripting" rel="tag"&gt;scripting&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/tips" rel="tag"&gt;tips&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114307214915899067?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114307214915899067/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114307214915899067" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114307214915899067" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114307214915899067" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/oNz44mgnCSE/shell-idiom.html" title="shell idiom" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/03/shell-idiom.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114252290912963742</id><published>2006-03-16T15:16:00.000Z</published><updated>2006-03-16T15:28:29.156Z</updated><title type="text">sun fire link roundup</title><content type="html">here area few links that will be of interest to sun fire t2000 owners and users. first off, the &lt;a href="http://sunfirefan.com/"&gt;sun fire fan site&lt;/a&gt;, which is a community of people who are participating in the try'n'buy performance evaluation program. i found this from the &lt;a href="http://feh.holsman.net/articles/tag/t2000"&gt;feh v2 blog&lt;/a&gt; run by the same person. several people have already looked at the crypto accelerator performance, as an &lt;a href="http://blog.goolamabbas.org/?p=36"&gt;https accelerator&lt;/a&gt; and here are &lt;a href="http://blogs.sun.com/roller/page/chichang1?entry=rsa_performance_of_sun_fire"&gt;raw numbers&lt;/a&gt; on &lt;em&gt;openssl&lt;/em&gt; performance. several sun blogs deal with the t2000 including this one on &lt;a href="http://blogs.sun.com/roller/page/travi"&gt;database scalability&lt;/a&gt;. finally, here is some good information on &lt;a href="http://www.stdlib.net/~colmmacc/2006/03/11/first-results-from-the-niagara-benchmarking/"&gt;throughput benchmarking&lt;/a&gt; with some useful graphs..&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/sun" rel="tag"&gt;sun&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/sparc" rel="tag"&gt;sparc&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/t2000" rel="tag"&gt;t2000&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/performance" rel="tag"&gt;performance&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/links" rel="tag"&gt;links&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114252290912963742?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="related" href="http://sunfirefan.com/" title="sun fire link roundup" /><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114252290912963742/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114252290912963742" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114252290912963742" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114252290912963742" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/4CjdHg69Lgw/sun-fire-link-roundup.html" title="sun fire link roundup" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/03/sun-fire-link-roundup.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114247991234454060</id><published>2006-03-16T02:58:00.000Z</published><updated>2006-03-16T03:35:38.830Z</updated><title type="text">network security appliance</title><content type="html">one of the ideas i have for testing the capabilities of the &lt;a href="http://www.sun.com/servers/coolthreads/t2000/"&gt;sun fire t2000&lt;/a&gt; server is to build a network security appliance. this would involve utilisation of the &lt;a href="http://www.sun.com/software/solaris/howtoguides/containersLowRes.jsp"&gt;zones&lt;/a&gt; feature in solaris 10. this allows full virtualisation of sevrers on one machine, along with allocation of resources, such as network ports or physical cpus, to that instance. each instance is a separate, full version of the solaris operating environment, and is indistinguishable from a complete physical machine to any processes running in it. this makes it ideal for separating security critical functions like firewalls and intrusion detection systems from each other, while still allowing them to run on one server. &lt;br /&gt;&lt;br /&gt;&lt;span class="box"&gt;&lt;a href="http://photos1.blogger.com/blogger/2599/2292/1600/t2k-net-app-full.jpg"&gt;&lt;img src="http://photos1.blogger.com/blogger/2599/2292/1600/t2k-net-app.jpg" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="caption"&gt;network security appliance diagram&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="full-post"&gt;in the above diagram you can see that i intend to virtualise six instances, four firewalls, one ids sensor and a management system. the t2000 has four gigabit ethernet ports, which would be assigned to each of the four networks, while inter-machine communication and intrusion detection would all be done using the virtual internal network. it will be simple to allocate at least one cpu to each machine, and the resource pooling commands available will allow some of the virtual machines to have extra cpus allocated, perhaps the internet-facing firewall and the ids sensor. the sun bigadmin site has some useful &lt;a href="http://www.sun.com/bigadmin/content/zones/"&gt;resources&lt;/a&gt; on zones, including the original &lt;a href="http://www.usenix.org/events/vm04/wips/tucker.pdf"&gt;usenix paper&lt;/a&gt; describing the implementation.&lt;br /&gt;&lt;br /&gt;the software to be installed will all be open-source packages, most of which are de-facto industry standards. i will use &lt;a href="http://www.squid-cache.org/"&gt;squid&lt;/a&gt; as the outgoing web proxy, &lt;a href="http://www.snort.org/"&gt;snort&lt;/a&gt; as the network ids and use native solaris networking for the firewall rules. i will need to determine a suitable console to administer the firewalls, but &lt;a href="http://sguil.sourceforge.net/"&gt;sguil&lt;/a&gt; will be used for ids command and control.&lt;br /&gt;&lt;br /&gt;a useful test would be to determine the line-speed that the firewalls and the ids are capable of handling without dropping any packets, and the number of simultaneous outgoing connections that the proxy will allow, while the dmz also has web traffic being sent to it from the internet. i believe that the t2000 should be a good platform for this kind of appliance, due to the one-box approach that can be taken, while not having to compromise on cpu power available. i intend to set this environment up over the next week and produce some performace figures to try and validate this claim.&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/sun" rel="tag"&gt;sun&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/sparc" rel="tag"&gt;sparc&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/security" rel="tag"&gt;security&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/t2000" rel="tag"&gt;t2000&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/network" rel="tag"&gt;network&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/solaris" rel="tag"&gt;solaris&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114247991234454060?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114247991234454060/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114247991234454060" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114247991234454060" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114247991234454060" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/LF4oIK-ciuU/network-security-appliance.html" title="network security appliance" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/03/network-security-appliance.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114246296261419835</id><published>2006-03-15T22:44:00.000Z</published><updated>2006-03-20T01:57:03.360Z</updated><title type="text">hardening solaris ten</title><content type="html">my first job on booting solaris 10 on &lt;code&gt;hexagon&lt;/code&gt;, my sun fire t2000 system, was to harden the operating system. i want to make sure that the system is not going to be offering extraneous services to passers-by on the internet (even though everything but ssh will be firewalled off.) this will have the added bonus of stopping cpu being used unnecessarily. an initial portscan using the ubiquitous &lt;a href="http://www.insecure.org/nmap/download.html"&gt;nmap&lt;/a&gt; utility revealed the following open ports:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;robot$ &lt;b&gt;nmap -p1-65535 -A hexagon&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Interesting ports on hexagon (10.10.10.6):&lt;br /&gt;(The 65514 ports scanned but not shown below are in state: closed)&lt;br /&gt;PORT      STATE SERVICE          VERSION&lt;br /&gt;21/tcp    open  ftp              Solaris ftpd&lt;br /&gt;22/tcp    open  ssh              SunSSH 1.1 (protocol 2.0)&lt;br /&gt;23/tcp    open  telnet&lt;br /&gt;25/tcp    open  smtp             Sendmail 8.13.4+Sun/8.13.3&lt;br /&gt;111/tcp   open  rpcbind           2-4 (rpc #100000)&lt;br /&gt;513/tcp   open  login            Berkeley remote login service&lt;br /&gt;514/tcp   open  tcpwrapped&lt;br /&gt;587/tcp   open  smtp             Sendmail 8.13.4+Sun/8.13.3&lt;br /&gt;898/tcp   open  http             Solaris management console server&lt;br /&gt;4045/tcp  open  nlockmgr          1-4 (rpc #100021)&lt;br /&gt;5987/tcp  open  unknown&lt;br /&gt;5988/tcp  open  unknown&lt;br /&gt;7100/tcp  open  font-service     Sun Solaris fs.auto&lt;br /&gt;9010/tcp  open  tcpwrapped&lt;br /&gt;22273/tcp open  wnn6?&lt;br /&gt;32771/tcp open  status            1 (rpc #100024)&lt;br /&gt;32772/tcp open  fmproduct         1 (rpc #1073741824)&lt;br /&gt;32773/tcp open  rusersd           2-3 (rpc #100002)&lt;br /&gt;32774/tcp open  ttdbserverd       1 (rpc #100083)&lt;br /&gt;32777/tcp open  sometimes-rpc17?&lt;br /&gt;32778/tcp open  dmispd            1 (rpc #300598)&lt;br /&gt;32779/tcp open  snmpXdmid         1 (rpc #100249)&lt;br /&gt;32795/tcp open  unknown&lt;br /&gt;Service Info: OSs: Solaris, Unix, SunOS&lt;br /&gt;&lt;br /&gt;Nmap finished: 1 IP address (1 host up) scanned in 1778.040 seconds&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="full-post"&gt;as you can see, there's a lot of unwanted access provided there. at least &lt;em&gt;ssh&lt;/em&gt; is there by default, but we also have &lt;em&gt;telnet&lt;/em&gt; and &lt;em&gt;rlogin&lt;/em&gt;, the X11 font server, as well as all those RPC services... solaris 10 manages services with the &lt;code&gt;svcxs&lt;em&gt;xxx&lt;/em&gt;&lt;/code&gt; utilities, and i will use them to turn off telnetd and rlogin, as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;root@hexagon# &lt;b&gt;svcadm disable svc:/network/telnet&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;svcadm disable svc:/network/login:rlogin&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;svcadm disable svc:/application/x11/xfs&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;svcadm disable svc:/network/ftp:default&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;svcadm disable svc:/network/rpc/rusers&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;svcadm disable svc:/network/rpc/rstat&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;svcadm disable svc:/network/shell:default&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and we can also get rid of the packages that provide &lt;code&gt;telnetd&lt;/code&gt; itself, since it is inherently insecure, and there is always potential access via telnet to the console over the ALOM network port. first, check what packages need removed, then remove them with the &lt;code&gt;pkgrm&lt;/code&gt; utility:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;root@hexagon# &lt;b&gt;pkginfo | grep -i telnet&lt;/b&gt;&lt;br /&gt;    SUNWtnetr      Telnet Server Daemon (Root)&lt;br /&gt;    SUNWtnetc      Telnet Command (client)&lt;br /&gt;    SUNWtnetd      Telnet Server Daemon (Usr)&lt;br /&gt;root@hexagon# &lt;b&gt;pkgrm SUNWtnetr SUNWtnetd&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;hopefully, this has given you an idea of how to do all this manually. i also downloaded the &lt;a href="http://www.sun.com/software/security/jass/"&gt;sun solaris security toolkit&lt;/a&gt; which has a lot of useful scripts to automate the hardening process. the file you require is &lt;code&gt;SUNWjass-4.2.0.pkg.tar.Z&lt;/code&gt; and is only 600KB. you need to be registered with sun to download anything, but this is useful anyway, since you need an id to get the latest security patches, and also to access the &lt;a href="https://updates.sun.com:443/"&gt;sun update connection&lt;/a&gt; site.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;root@hexagon# &lt;b&gt;uncompress SUNWjass-4.2.0.pkg.tar.Z&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;tar xf SUNWjass-4.2.0.pkg.tar&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;pkgadd -d . SUNWjass&lt;/b&gt;       &lt;br /&gt;&lt;br /&gt;Processing package instance &amp;lt;SUNWjass&amp;gt; from &amp;lt;/root/install&amp;gt;&lt;br /&gt;&lt;br /&gt;Solaris Security Toolkit 4.2.0(Solaris) 4.2.0&lt;br /&gt;Copyright 2005 Sun Microsystems, Inc.  All rights reserved.&lt;br /&gt;Use is subject to license terms.&lt;br /&gt;Using &amp;lt;/opt&amp;gt; as the package base directory.&lt;br /&gt;## Processing package information.&lt;br /&gt;## Processing system information.&lt;br /&gt;## Verifying package dependencies.&lt;br /&gt;## Verifying disk space requirements.&lt;br /&gt;## Checking for conflicts with packages already installed.&lt;br /&gt;## Checking for setuid/setgid programs.&lt;br /&gt;&lt;br /&gt;Installing Solaris Security Toolkit 4.2.0 as &amp;lt;SUNWjass&amp;gt;&lt;br /&gt;&lt;br /&gt;## Installing part 1 of 1.&lt;br /&gt;/opt/SUNWjass/Audit/disable-IIim.aud&lt;br /&gt;/opt/SUNWjass/Audit/disable-ab2.aud&lt;br /&gt;&lt;i&gt;...etc...&lt;/i&gt;&lt;br /&gt;/opt/SUNWjass/rules.SAMPLE&lt;br /&gt;/opt/SUNWjass/sysidcfg &amp;lt;symbolic link&amp;gt;&lt;br /&gt;[ verifying class &amp;lt;none&amp;gt; ]&lt;br /&gt;&lt;br /&gt;Installation of &amp;lt;SUNWjass&amp;gt; was successful.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;you'll notice that the package was loaded from &lt;code&gt;/root/install&lt;/code&gt;. this is because i modify the &lt;em&gt;root&lt;/em&gt; user to have a different home directory. often &lt;code&gt;/&lt;/code&gt; is a shared home directory for other system accounts and daemon user ids, and it's never a good ide to have the root &lt;code&gt;.profile&lt;/code&gt; and other dot-files there. moving home is relatively easy though:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;root@hexagon# &lt;b&gt;usermod -d /root root&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;mkdir /root&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;chmod 700 /root&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;mv /.[a-zA-Z0-9]* /root/&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and even all the existing dot-files get copied across. the &lt;em&gt;jaas&lt;/em&gt; security toolkit has a large number of configurable options, which are documented in the &lt;a href="http://www.sun.com/products-n-solutions/hardware/docs/pdf/819-1503-10.pdf"&gt;reference manual&lt;/a&gt;. the &lt;a href="http://www.sun.com/software/security/blueprints/index.html"&gt;security blueprints&lt;/a&gt; collection is also a good place to look for information. to secure your solaris system with the &lt;em&gt;jaas&lt;/em&gt; tool, execute the hardening driver using the following command:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;root@hexagon# &lt;b&gt;/opt/SUNWjass/bin/jass-execute -d hardening.driver |&lt;br /&gt; tee jaas-hardening.log&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;which will lock down your system, and place a log of all output into &lt;code&gt;jaas-hardening.txt&lt;/code&gt;. once this has completed, reboot to implement the changes. when you next login you will see that a security warning has been added:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;|-----------------------------------------------------------------|&lt;br /&gt;| This system is for the use of authorized users only.            |&lt;br /&gt;| Individuals using this computer system without authority, or in |&lt;br /&gt;| excess of their authority, are subject to having all of their   |&lt;br /&gt;| activities on this system monitored and recorded by system      |&lt;br /&gt;| personnel.                                                      |&lt;br /&gt;|                                                                 |&lt;br /&gt;| In the course of monitoring individuals improperly using this   |&lt;br /&gt;| system, or in the course of system maintenance, the activities  |&lt;br /&gt;| of authorized users may also be monitored.                      |&lt;br /&gt;|                                                                 |&lt;br /&gt;| Anyone using this system expressly consents to such monitoring  |&lt;br /&gt;| and is advised that if such monitoring reveals possible         |&lt;br /&gt;| evidence of criminal activity, system personnel may provide the |&lt;br /&gt;| evidence of such monitoring to law enforcement officials.       |&lt;br /&gt;|-----------------------------------------------------------------|&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;which should be modified to comply with local legal requirements. also, the passwords for any existing users will have been expired, and a much more stringent policy is now in place. if an &lt;em&gt;nmap&lt;/em&gt; scan is run against the system now, you will see that most ports are closed, except ssh and one other that will be investigated later:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ nmap -p 1-65535 -A hexagon | tee entries/hexagon.ports.03.txt&lt;br /&gt;&lt;br /&gt;Interesting ports on hexagon (10.10.10.6):&lt;br /&gt;(The 65533 ports scanned but not shown below are in state: closed)&lt;br /&gt;PORT      STATE SERVICE VERSION&lt;br /&gt;22/tcp    open  ssh     SunSSH 1.1 (protocol 2.0)&lt;br /&gt;22273/tcp open  wnn6?&lt;br /&gt;&lt;br /&gt;Nmap finished: 1 IP address (1 host up) scanned in 1814.355 seconds&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;next, i installed some useful extra utilities, from the &lt;a href="http://sunfreeware.com/programlistsparc10.html"&gt;sun freeware&lt;/a&gt; site. this has lots of GNU software compiled for SPARC on solaris 10, although you may want to check out sun's offerings from the solaris 10 &lt;a href="http://www.sun.com/software/solaris/freeware/"&gt;companion dvd&lt;/a&gt;. &lt;em&gt;sudo&lt;/em&gt; is a good replavement for the standard &lt;code&gt;su&lt;/code&gt; program, &lt;em&gt;curl&lt;/em&gt; makes retrieval of files from the internet simple and &lt;em&gt;lsof&lt;/em&gt; lists all files that a process has . once you have downloaded them, installstallation follows the same basic pattern. this is how i installed the &lt;em&gt;SMClsof&lt;/em&gt; and &lt;em&gt;SFWsudo&lt;/em&gt; packages:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;root@hexagon# &lt;b&gt;gunzip lsof-4.76-sol10-sparc-local.gz&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;ln -s /usr/sfw /usr/local&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;pkgadd -d ./lsof-4.76-sol10-sparc-local&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The following packages are available:&lt;br /&gt;  1  SMClsof     lsof&lt;br /&gt;                 (sparc) 4.76&lt;br /&gt;&lt;br /&gt;Select package(s) you wish to process (or 'all' to process&lt;br /&gt;all packages). (default: all) [?,??,q]: &lt;b&gt;all&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Processing package instance &amp;lt;SMClsof&amp;gt;&lt;br /&gt;from &amp;lt;/root/install/lsof-4.76-sol10-sparc-local&amp;gt;&lt;br /&gt;&lt;br /&gt;lsof(sparc) 4.76&lt;br /&gt;Vic Abell&lt;br /&gt;Using &amp;lt;/usr/local&amp;gt; as the package base directory.&lt;br /&gt;## Processing package information.&lt;br /&gt;## Processing system information.&lt;br /&gt;   2 package pathnames are already properly installed.&lt;br /&gt;## Verifying disk space requirements.&lt;br /&gt;## Checking for conflicts with packages already installed.&lt;br /&gt;&lt;br /&gt;The following files are already installed on the system and are being&lt;br /&gt;used by another package:&lt;br /&gt;* /usr/local/doc&lt;br /&gt;* /usr/local/man&lt;br /&gt;&lt;br /&gt;* - conflict with a file which does not belong to any package.&lt;br /&gt;&lt;br /&gt;Do you want to install these conflicting files [y,n,?,q] &lt;b&gt;n&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Do you want to continue with the installation of &amp;lt;SMClsof&amp;gt; [y,n,?] &lt;b&gt;y&lt;/b&gt;&lt;br /&gt;## Checking for setuid/setgid programs.&lt;br /&gt;&lt;br /&gt;The following files are being installed with setuid and/or setgid&lt;br /&gt;permissions:&lt;br /&gt; /usr/local/bin/lsof &amp;lt;setgid bin&amp;gt;&lt;br /&gt;&lt;br /&gt;Do you want to install these as setuid/setgid files [y,n,?,q] &lt;b&gt;y&lt;/b&gt;&lt;br /&gt;## Processing package information.&lt;br /&gt;## Processing system information.&lt;br /&gt;&lt;br /&gt;Installing lsof as &amp;lt;SMClsof&amp;gt;&lt;br /&gt;&lt;br /&gt;## Installing part 1 of 1.&lt;br /&gt;/usr/local/bin/lsof&lt;br /&gt;/usr/local/doc &amp;glt;conflicting pathname not installed&amp;gt;&lt;br /&gt;/usr/local/doc/lsof/00.README.FIRST&lt;br /&gt;/usr/local/doc/lsof/00CREDITS&lt;br /&gt;/usr/local/doc/lsof/00DCACHE&lt;br /&gt;/usr/local/doc/lsof/00DIALECTS&lt;br /&gt;/usr/local/doc/lsof/00DIST&lt;br /&gt;/usr/local/doc/lsof/00FAQ&lt;br /&gt;/usr/local/doc/lsof/00LSOF-L&lt;br /&gt;/usr/local/doc/lsof/00MANIFEST&lt;br /&gt;/usr/local/doc/lsof/00PORTING&lt;br /&gt;/usr/local/doc/lsof/00QUICKSTART&lt;br /&gt;/usr/local/doc/lsof/00README&lt;br /&gt;/usr/local/doc/lsof/00TEST&lt;br /&gt;/usr/local/doc/lsof/00XCONFIG&lt;br /&gt;/usr/local/doc/lsof/lsof.man&lt;br /&gt;/usr/local/man &amp;lt;conflicting pathname not installed&amp;gt;&lt;br /&gt;/usr/local/man/man8/lsof.8&lt;br /&gt;[ verifying class &amp;lt;none&amp;gt; ]&lt;br /&gt;&lt;br /&gt;Installation of &amp;lt;SMClsof&amp;gt; was successful&lt;br /&gt;root@hexagon# &lt;b&gt;bzip2 -d SFWsudo.bz2&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;ln -s /usr/sfw /opt/sfw&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;pkgadd -d ./SFWsudo&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The following packages are available:&lt;br /&gt;  1  SFWsudo     Sudo - superuser do&lt;br /&gt;                 (sparc) 1.6.8.5,REV=2005.01.05.17.49&lt;br /&gt;&lt;br /&gt;Select package(s) you wish to process (or 'all' to process&lt;br /&gt;all packages). (default: all) [?,??,q]: &lt;b&gt;all&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Processing package instance &amp;lt;SFWsudo&amp;gt; from &amp;lt;/root/install/SFWsudo&amp;gt;&lt;br /&gt;&lt;br /&gt;Sudo - superuser do(sparc) 1.6.8.5,REV=2005.01.05.17.49&lt;br /&gt;&lt;br /&gt;&lt;em&gt;...and so on...&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Installation of &amp;lt;SFWsudo&amp;gt; was successful.&lt;br /&gt;root@hexagon# &lt;b&gt;chmod u+s /usr/sfw/bin/sudo&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong style="text-decoration: underline; text-transform: uppercase;"&gt;important&lt;/strong&gt; - notice that the &lt;em&gt;sudo&lt;/em&gt; executable was &lt;em&gt;not&lt;/em&gt; setuid root, and we had to change this after installation, to make it work! after this, the installs for any other packages will be very similar - use the above processes as a guide, just remember to check where in the filesystem things get installed, and either create symlinks or allow it as required. once &lt;em&gt;sudo&lt;/em&gt; has been installed, you need to authorise users to have access to the root user. use the &lt;code&gt;visudo&lt;/code&gt; command as root, and setup the &lt;code&gt;sudoers&lt;/code&gt; file. i added the following line, which gives everyone in the &lt;em&gt;sysadmin&lt;/em&gt; group root access:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;%sysadmin       ALL=(ALL)       ALL&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;since we have &lt;em&gt;lsof&lt;/em&gt; installed now, we can check what was holding the other port (22273/tcp) open. in the &lt;em&gt;nmap&lt;/em&gt; output it is listed as &lt;em&gt;wnn6?&lt;/em&gt; but we can check what process is using it with &lt;em&gt;lsof&lt;/em&gt; and &lt;em&gt;find&lt;/em&gt; as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;root@hexagon# &lt;b&gt;lsof | grep -i wnn&lt;/b&gt;&lt;br /&gt;jserver_m  741   root    3u  IPv4 0x600036e0100  0t0  TCP *:wnn6 (BOUND)&lt;br /&gt;jserver_m  741   root    4u  IPv6 0x6000377f940  0t0  TCP *:wnn6 (LISTEN)&lt;br /&gt;root@hexagon# &lt;b&gt;find / -name "jserver_m" -print&lt;/b&gt;&lt;br /&gt;/usr/lib/locale/ja/wnn/jserver_m&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and we can see that it is a program called &lt;code&gt;jserver_m&lt;/code&gt; that seems to have something to do with the japanese locale input method. i don't live in japan, or speak japanese, so this can be safely turned off. checking with &lt;em&gt;svcs&lt;/em&gt; shows that it is started by &lt;em&gt;init&lt;/em&gt; and can be disabled as follows:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;root@hexagon# &lt;b&gt;svcs | grep -i wnn&lt;/b&gt;&lt;br /&gt;legacy_run     20:50:28 lrc:/etc/rc2_d/S94Wnn6&lt;br /&gt;root@hexagon# &lt;b&gt;/etc/init.d/Wnn6 stop&lt;/b&gt;&lt;br /&gt;root@hexagon# &lt;b&gt;mv /etc/rc2.d/S94Wnn6 /etc/rc2.d/_S94Wnn6.DISABLED&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;hopefully this has given you an idea of how best to approach hardening a solaris 10 system. the one thing not covered here is patching, which i will describe in another post. depending on how tightly you want things locked down initially, you can either manually turn off certain services or you can use sun's provided toolkit, and edit the default settings. this gives you a lot of flexibility, but i now have a system i feel safe about connecting to my router and assigning an IP address...&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/security" rel="tag"&gt;security&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/hardening" rel="tag"&gt;hardening&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/sun" rel="tag"&gt;sun&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/solaris" rel="tag"&gt;solaris&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/sparc" rel="tag"&gt;sparc&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114246296261419835?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114246296261419835/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114246296261419835" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114246296261419835" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114246296261419835" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/0UtUB5LaJSg/hardening-solaris-ten.html" title="hardening solaris ten" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/03/hardening-solaris-ten.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114224766165566361</id><published>2006-03-13T10:52:00.000Z</published><updated>2006-03-16T03:44:28.553Z</updated><title type="text">plasma flickring</title><content type="html">at the weekend, my friend &lt;a href="http://occular.livejournal.com/"&gt;alex&lt;/a&gt; came round, and we toook some amazing pictures of one of those little plasma-ball toys that barry has in his front room. they were taken with alex's digital nikon slr, and at shutter speeds varying from 1/10 to 2 seconds. they really look beautiful, and with a tripod and some preparation they could probably even be improved...! the thumbnails below link to the photo-set on &lt;a href="http://www.flickr.com/"&gt;flickr&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a class="box" href="http://www.flickr.com/photos/redlex/sets/72057594080779345/"&gt;&lt;img src="http://static.flickr.com/43/111636945_617fa33d32_s.jpg" style="border: 1px solid white;" /&gt;&lt;img src="http://static.flickr.com/37/111636346_a7674f8d74_s.jpg" style="border: 1px solid white;" /&gt;&lt;img src="http://static.flickr.com/43/111636270_ae0f756d1c_s.jpg" style="border: 1px solid white;" /&gt;&lt;img src="http://static.flickr.com/41/111636093_66305684c1_s.jpg" style="border: 1px solid white;" /&gt;&lt;img src="http://static.flickr.com/50/111640320_378ed96dd8_s.jpg" style="border: 1px solid white;" /&gt;&lt;img src="http://static.flickr.com/41/111639953_b0bda27c19_s.jpg" style="border: 1px solid white;" /&gt;&lt;img src="http://static.flickr.com/41/111639953_b0bda27c19_s.jpg" style="border: 1px solid white;" /&gt;&lt;img src="http://static.flickr.com/40/111639311_319a095077_s.jpg" style="border: 1px solid white;" /&gt;&lt;img src="http://static.flickr.com/41/111639171_e981aa80d9_s.jpg" style="border: 1px solid white;" /&gt;&lt;img src="http://static.flickr.com/54/111638653_22e69ac041_s.jpg" style="border: 1px solid white;" /&gt;&lt;img src="http://static.flickr.com/49/111638263_e6d4d9b0b8_s.jpg" style="border: 1px solid white;" /&gt;&lt;img src="http://static.flickr.com/41/111637896_711296e2e4_s.jpg" style="border: 1px solid white;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/plasma" rel="tag"&gt;plasma&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/photos" rel="tag"&gt;photos&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/pretty" rel="tag"&gt;pretty&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/ball" rel="tag"&gt;ball&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114224766165566361?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="related" href="http://www.flickr.com/photos/redlex/sets/72057594080779345/" title="plasma flickring" /><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114224766165566361/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114224766165566361" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114224766165566361" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114224766165566361" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/-X_Zh4XThC4/plasma-flickring.html" title="plasma flickring" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/03/plasma-flickring.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114204579079439463</id><published>2006-03-11T02:43:00.000Z</published><updated>2006-03-11T20:29:30.906Z</updated><title type="text">trees in a forest</title><content type="html">this is a really nice photograph, taken by my friend rob. he's an amateur photographer, looking to make it professionally. he took this with a &lt;a href="http://www.hasselblad.com/index.asp"&gt;hasselblad&lt;/a&gt; medium format camera. it was shot on kodak film, and scanned with an &lt;a href="http://www.imacon.dk/sw3032.asp"&gt;imacon 949&lt;/a&gt;. adobe &lt;a href="http://www.adobe.com/products/photoshop/main.html"&gt;photoshop&lt;/a&gt; was used to adjust the gamma curves because the film used is hard to scan, although no other retouching or other editing was needed.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://static.flickr.com/43/110693917_bc62a10e70_o_d.jpg" title="trees in a forest"&gt;&lt;img class="box" src="http://static.flickr.com/43/110693917_bc62a10e70_m.jpg" width="240" height="240" alt="trees in a forest" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="caption"&gt;trees in a forest - copyright &amp;copy; 2006 robert phillips&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;for more technical details, or if you would like to get a print made, or see his other work, &lt;a href="mailto:robertdphillips@gmail.com"&gt;email him&lt;/a&gt; directly..&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/trees" rel="tag"&gt;trees&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/photograph" rel="tag"&gt;photograph&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/forest" rel="tag"&gt;forest&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/colour" rel="tag"&gt;colour&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114204579079439463?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114204579079439463/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114204579079439463" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114204579079439463" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114204579079439463" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/EScmivtxl-U/trees-in-forest.html" title="trees in a forest" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/03/trees-in-forest.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114203964633445745</id><published>2006-03-11T00:54:00.000Z</published><updated>2006-03-16T11:58:18.716Z</updated><title type="text">niagara falls</title><content type="html">i am currently running one of sun's new &lt;a href="https://www.sun.com/servers/coolthreads/t2000/index.jsp"&gt;sun fire t2000&lt;/a&gt; servers, as part of an evaluation and review programme. sun are allowing qualified individuals and companies to try the system for sixty (60) days before buying one. this can only be a good thing for sun, since it ought to get people who would not normally specify sun kit to have a look. as far as cost goes, the server retails at around usd 10K depending on configuration. this is actually pretty cheap for a system of this quality and power. think of it this way - how much would a 24-way PC system cost? and in a 2U form factor chassis as well?&lt;br /&gt;&lt;br /&gt;the specification of my machine is listed as &lt;em&gt;medium&lt;/em&gt; and has a niagara T1 processor. this is a six core ultra SPARC T1 cpu, each core of which runs at 1 GHz and has four 'coolthread' execution units, giving a total of twenty four (24) processors. the machine also has 8 gigabytes of ram and two 73 gigabyte serial attached SCSI (SAS) drives. the technology is known as &lt;em&gt;cool&lt;/em&gt;threads because the system only consumes seventy five watts (75W) at full load. this isn't the highest spec, either - it is possible to have t2000 configurations with eight T1 cores, running at 1.2 GHz, giving 32 coolthreads. note that there is &lt;em&gt;no&lt;/em&gt; floating point processor in the T1, although the system does have a cryptographic accelerator built in.&lt;br /&gt;&lt;br /&gt;so, when the box arrived yesterday, i unpacked it immediately...&lt;br /&gt;&lt;br /&gt;&lt;span class="full-post"&gt;the shipment consisted of: the server itself, a rack-mounting kit, two utp patch cords and two uk power cords. there is no real documentation shipped, just a small warranty booklet and a set of packing notes. it does, however, have a whole set of neat little diagrams on the top of the chassis explaining common maintenance tasks, like replacing fans or installing more ram modules. i downloaded the &lt;a href="http://www.sun.com/products-n-solutions/hardware/docs/Servers/coolthreads/t2000/index.html"&gt;documentation&lt;/a&gt; from sun, and read the &lt;a href="http://www.sun.com/products-n-solutions/hardware/docs/pdf/819-2546-10.pdf"&gt;install guide&lt;/a&gt; first.&lt;br /&gt;&lt;br /&gt;&lt;div class="box"&gt;&lt;img src="http://static.flickr.com/37/104979200_a4c823c556.jpg" /&gt;&lt;/div&gt;&lt;div class="caption"&gt;the sun fire t2000 'coolthreads' server&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;it turns out that on power being supplied initially, it will go into the lights-out management mode (&lt;a href="http://www.sun.com/products-n-solutions/hardware/docs/pdf/819-2550-10.pdf"&gt;ALOM&lt;/a&gt;) and stay there. this must be accessed via the serial management console, which is the &lt;em&gt;only&lt;/em&gt; active port on the box as shipped.&lt;br /&gt;&lt;br /&gt;to get into it i needed an RJ45 (sun) to DB9F (PC) &lt;a href="http://hardwarebook.net/cable/serial/ciscoconsole9.html"&gt;null-modem cable&lt;/a&gt;. unfortunately, nothing of the kind came in the box. still, a trip to maplins and application of a soldering iron and a few hours later (yes, i'm that bad at soldering, &lt;em&gt;and&lt;/em&gt; i had help!) a cable was ready. it turns out that this is what is commonly called a 'cisco console rollover cable' and they are almost always available on ebay. i enabled the network management port and booted into the open firmware &lt;code&gt;ok&lt;/code&gt; prompt, and then into solaris. sun don't configure Solaris for you, although they do install it, however the configuration is as simple as setting IP address parameters and location details, so it didn't take long until i had a working, networked server. annd here is the proof:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;adk@hexagon$ &lt;b&gt;prtdiag&lt;/b&gt;&lt;br /&gt;System Configuration:  Sun Microsystems  sun4v Sun Fire T200&lt;br /&gt;System clock frequency: 200 MHz&lt;br /&gt;Memory size: 8184 Megabytes&lt;br /&gt;&lt;br /&gt;========================= CPUs =========================&lt;br /&gt;                            CPU                 CPU  &lt;br /&gt;Location     CPU   Freq     Implementation      Mask &lt;br /&gt;------------ ----- -------- ------------------- -----&lt;br /&gt;MB/CMP0/P0       0 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P1       1 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P2       2 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P3       3 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P4       4 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P5       5 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P6       6 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P7       7 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P8       8 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P9       9 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P10     10 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P11     11 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P12     12 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P13     13 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P14     14 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P15     15 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P16     16 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P17     17 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P18     18 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P19     19 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P20     20 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P21     21 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P22     22 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;MB/CMP0/P23     23 1000 MHz  SUNW,UltraSPARC-T1         &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;as you can see, i have 24 cpus ready to do whatever i want. i have been waiting for this technology ever since i first read about it in &lt;a href="http://blogs.sun.com/roller/page/jonathan/20040910"&gt;2004&lt;/a&gt; so i have some pretty good ideas about how to utilise it. although sun seem to be promoting this as an enterprise class web and web application server (which it will perform fine as.) &lt;strong&gt;but&lt;/strong&gt;, i think that it would make an excellent &lt;em&gt;network security appliance&lt;/em&gt;. i intend to run an array of security applications and services to see how well it copes. this would include network IDS and IPS sensors and management servers, which can take advantage of the virtualisation technology available in solaris 10. also, some kind of all-in-one firewall and dmz protection device with deep packet inspection and virtualised ingress and egress firewalls, using all four gigabit ethernet ports. it also has crypto acceleration, which is ideal for several other security tasks.&lt;br /&gt;&lt;br /&gt;my &lt;em&gt;first&lt;/em&gt; job is to secure and harden the stock solaris 10 install that it came with. i have to turn off all the default services, such as &lt;code&gt;telnetd&lt;/code&gt; and &lt;code&gt;rlogin&lt;/code&gt;, only then will i be able to start thinking about allowing &lt;code&gt;hexagon&lt;/code&gt; onto the internet, and doing something useful. more on this as i run the tests and build the environments to test them...&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/sun" rel="tag"&gt;sun&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/server" rel="tag"&gt;server&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/sparc" rel="tag"&gt;sparc&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/review" rel="tag"&gt;review&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/install" rel="tag"&gt;install&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/security" rel="tag"&gt;security&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114203964633445745?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="related" href="https://www.sun.com/servers/coolthreads/t2000/index.jsp" title="niagara falls" /><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114203964633445745/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114203964633445745" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114203964633445745" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114203964633445745" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/KOxFSEy8eYY/niagara-falls.html" title="niagara falls" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/03/niagara-falls.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114147183908762451</id><published>2006-03-04T04:40:00.000Z</published><updated>2006-03-04T11:30:39.136Z</updated><title type="text">wake me up!</title><content type="html">i'm notoriously bad at getting up, and since i pawned my last ipod (don't ask...) i don't have any way of waking up to a selection of music in the morning. i decided this wouldn't do at all, and i was getting tired of the awful ring-tone my phone used as its alarm noise. now, my macintosh has itunes, and a set of nice loud speakers. howevber, i'm running OS X 10.3.9, so no &lt;a href="http://www.apple.com/macosx/features/automator/"&gt;automater&lt;/a&gt; for me. i do have a working knowledge of &lt;a href="http://www.apple.com/applescript/"&gt;applescript&lt;/a&gt; though, and itunes is chock-full of applescript-awareness, so i decided to write a little script to work as an alarm clock.&lt;br /&gt;&lt;br /&gt; &lt;span class="full-post"&gt;the script is really very simple. to use it, open up the &lt;em&gt;script editor&lt;/em&gt;, which lives in the &lt;em&gt;/Applications/AppleScript/&lt;/em&gt; folder. enter the following text, exactly as shown:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;-- iWake&lt;br /&gt;-- &lt;br /&gt;-- slowly raise itunes volume to wake up.&lt;br /&gt;-- call from batch processing every morning&lt;br /&gt;-- &lt;br /&gt;-- author: andrew kennedy&lt;br /&gt;-- created: 02 march 2006 09:54&lt;br /&gt;-- &lt;br /&gt;-- copyright (c) 2006 nevada systems&lt;br /&gt;&lt;br /&gt;property wake : 30 -- time in minutes to wake up in&lt;br /&gt;property vol : 100 -- volume setting&lt;br /&gt;property step : 1 -- delay in seconds between volume changes&lt;br /&gt;&lt;br /&gt;on run&lt;br /&gt; -- get current volume&lt;br /&gt; tell application "iTunes"&lt;br /&gt;  set vol to sound volume&lt;br /&gt;  set sound volume to 0&lt;br /&gt; end tell&lt;br /&gt; &lt;br /&gt; -- set wake time in minutes&lt;br /&gt; set step to (wake * 60) / vol&lt;br /&gt; &lt;br /&gt; -- start itunes&lt;br /&gt; tell application "iTunes"&lt;br /&gt;  play&lt;br /&gt; end tell&lt;br /&gt; &lt;br /&gt; -- slowly raise the volume&lt;br /&gt; repeat with counter from 0 to vol by 1&lt;br /&gt;  delay step&lt;br /&gt;  tell application "iTunes"&lt;br /&gt;   set sound volume to counter&lt;br /&gt;  end tell&lt;br /&gt; end repeat&lt;br /&gt;end run&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;you can test this script out by choosing &lt;em&gt;compile&lt;/em&gt; and then, making sure iTunes is running but paused, press &lt;em&gt;run&lt;/em&gt; at the top of the script editor window. what should happen is that the itunes volume will be reset to zero, and then start playing, while slowly raising the volume back to the original level over the next ten minutes. assuming you see the volume drop and iTunes start, you can  (rather than wait ten minutes) just quit the iWake application, but make sure it's &lt;strong&gt;not&lt;/strong&gt; the script editor.&lt;br /&gt;&lt;br /&gt;now, save the whole thing as an application somewhere useful. i chose to put mine in &lt;em&gt;~/bin/iWake.app&lt;/em&gt; which is in my path. you will need a way to run your alarm clock, at whatever time in the morning you want woken up. i use the Unix cron daemon, which is part of the BSD package installation on OS X. go to the terminal, and run the command &lt;code&gt;crontab -e&lt;/code&gt; and you will be presented with a blank editor window, probably &lt;em&gt;vi&lt;/em&gt;. now, add the following text (to the end of the file if there is anything there already) and save it.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;##&lt;br /&gt;# adk cron entries&lt;br /&gt;# modified 2006/03/04 -5h00&lt;br /&gt;##&lt;br /&gt;# wake up with itunes in the morning at 09h00&lt;br /&gt;00 09 * * 1-5 osascript &lt;em&gt;/Path/to/your/saved/iWake&lt;/em&gt;&lt;br /&gt;# and at 10h30 weekends&lt;br /&gt;30 10 * * 0,6 osascript &lt;em&gt;/Path/to/your/saved/iWake&lt;/em&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;make sure that you replace the path after &lt;em&gt;osascript&lt;/em&gt; with wherever you saved the script. if you're not sure how to use vi, paste the text into another editor and modify it there, then copy the whole thing to the clipboard and just press the following keys in order &lt;b&gt;G&lt;/b&gt; &lt;b&gt;o&lt;/b&gt; &lt;b&gt;&lt;i&gt;[command]-V&lt;/i&gt;&lt;/b&gt; &lt;b&gt;&lt;i&gt;[escape]&lt;/i&gt;&lt;/b&gt; &lt;b&gt;:wq&lt;/b&gt; &lt;b&gt;&lt;i&gt;[enter]&lt;/i&gt;&lt;/b&gt; when vi appears, and you should be told &lt;em&gt;crontab: installing new crontab&lt;/em&gt; when finished. for help on changing the times and days look at the &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/Manpages/man5/crontab.5.html"&gt;&lt;em&gt;crontab(5)&lt;/em&gt;&lt;/a&gt; man page.&lt;br /&gt;&lt;br /&gt;you now get woken up gently by your favourite music. which is good. as an exercise for the reader, i would suggest modifying the script to choose a particular playlist, since this version just resumes whatever was playing when itunes was paused. next time, a sleep timer that &lt;em&gt;drops&lt;/em&gt; the volume...&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/itunes" rel="tag"&gt;iTunes&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/applescript" rel="tag"&gt;AppleScript&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/cron" rel="tag"&gt;cron&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/alarm" rel="tag"&gt;alarm&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/wake" rel="tag"&gt;wake&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114147183908762451?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114147183908762451/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114147183908762451" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114147183908762451" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114147183908762451" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/rAYqTK7BeoY/wake-me-up.html" title="wake me up!" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/03/wake-me-up.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114118384132907466</id><published>2006-03-01T03:29:00.000Z</published><updated>2006-03-01T03:30:41.336Z</updated><title type="text">MAKE.MONEY.FAST</title><content type="html">i'm a (pretty good?) web programmer by now, and i've amassed a bunch of skillz over my time served in the industry. i started working on perl cgi scripts in 1992 when nobody knew what the web was, let alone perl or cgi. i then moved on to java in 1995 when it arrived, and tried my hand at javascript in the first browsers that supported it. i remember creating my first site with frames and javascript rollovers back then, because the client wanted something modern and flashy. i coded a netscape server api library that accessed a database over odbc on a dec alpha running nt 3.51 when such things were cutting edge. you get the idea, i've been doing web applications for a long time now, over ten years anyway.&lt;br /&gt;&lt;br /&gt;so, as you might have seen from the development environment posts, i'm also fluent in the latest java and java enterprise apis, and the associated libraries. things like struts, jsps, servlets, mysql/jdbc and so on. i'm even able to turn my hand to php when the need arises. what, though, can i do with this hard-won knowledge? i believe the official MBA term would be to &lt;em&gt;monetize my skill set&lt;/em&gt; or something like that. oh, and i don't want to have to go to an office for 0900, wear a suit or interact with people on a daily basis.&lt;br /&gt;&lt;br /&gt;&lt;span class="full-post"&gt;the answer turns out to be freelance bit-work. i've been working from home on a web application for a friend's small business, and i thought there must be a lot of people in his situation. he wanted some custom software, but couldn't pay the tens of thousands of pounds for a full-scale j2ee solution, with oracle, weblogic, and all that kind of heavyweight server-based junk. i started looking at the &lt;a href="http://www.rentacoder.com/"&gt;rent-a-coder&lt;/a&gt; site to see what it was like, and found that there were plenty of likely candidates.&lt;br /&gt;&lt;br /&gt;the other three sites that i'm registered on as a developer are: &lt;a href="http://www.getacoder.com/"&gt;get a coder&lt;/a&gt;, &lt;a href="http://www.getafreelancer.com/"&gt;get a freelancer&lt;/a&gt; and &lt;a href="http://www.scriptlance.com/"&gt;script-lance&lt;/a&gt;. so far, i have two projects active on rent-a-coder, and several projects that have reached the shortlist stage on get a coder. i'm not sure about the other two sites, but i'm bidding on them at the moment and will see what comes up. one problem i've noticed is that a lot of indian, chinese and eastern european developers and &lt;em&gt;teams&lt;/em&gt; of developers use these sites. they seem to be able to put in extremely low prices, which is the benefit of offshore outsourcing, i guess, but makes it hard for me to be competitive &lt;em&gt;and&lt;/em&gt; profitable.&lt;br /&gt;&lt;br /&gt;anyway, i'm working on two projects right now, and the buyers seem really friendly and have been pretty clear about what they wanted, and accepted my advice about what was and wasn't possible. the sites encourage communication using their message boards/forums so that disputes and arbitration when a disagreement occurs about scope can be resolved by referring to what each party actually said. when a project starts, your IM alias is given out, and this makes simple back and forth chat easier, but i have been summarising any decisions on the site so there is a permanent record. one thing to watch out for is people trying to get their college assignments and homework done on the cheap. i worked for my degree (well, a little) and i have big problems with someone trying to submit work that they just paid someone else to do.&lt;br /&gt;&lt;br /&gt;another type of project to avoid is the 'clone' request. this usually involves a (probably teenager) asking for a clone of amazon/ebay/myspace/&lt;em&gt;insert-commercial-site-here&lt;/em&gt; and offering the princely sum of, say, fifty dollars. i wonder if they can even comprehend the amount of money that a company like amazon spends on their e-commerce web service? &lt;em&gt;avoid!&lt;/em&gt; with regard to payment for &lt;em&gt;real&lt;/em&gt; projects, the site will escrow the full bid amount from the buyer at the  start. this means i am sure i'll get paid at the end (assuming i deliver an acceptable product...)&lt;br /&gt;&lt;br /&gt;something i'd like to have clarified is the position on open source libraries. i &lt;em&gt;believe&lt;/em&gt; that the GNU &lt;a href="http://www.fsf.org/licensing/licenses/lgpl.html"&gt;LGPL&lt;/a&gt; (lesser GNU public license) allows me to sell software that links to libraries with that license. also, since i provide source code for my app and unmodified binaries (which have freely downloadable source anyway) for libraries i use, i interpret the apache &lt;a href="http://www.apache.org/licenses/LICENSE-2.0.html"&gt;ASL&lt;/a&gt; (apache source license 2.0) as allowing me to distribute, say, jakarta commons httpclient with my application. i'd &lt;strong&gt;&lt;em&gt;REALLY&lt;/em&gt;&lt;/strong&gt; like to get this properly clarified.&lt;br /&gt;&lt;br /&gt;the ebay &lt;a href="http://developer.ebay.com/DevProgram/developer/sdk.asp"&gt;sdk&lt;/a&gt; and api download seems to get away with distributing apache &lt;a href="http://ws.apache.org/axis/"&gt;axis&lt;/a&gt; (the web services api, more on this and the ebay development platform some other time) and a whole load of jakarta commons libraries, so they must think it's legal, and in this case, i'm going to redistribute the ebay sdk anyway, so the licensing issues are theirs. it's a grey area though, and i need to be careful. i don't want richard stallman coming round to my house with a bunch of the FSF hired goons! &lt;br /&gt;&lt;br /&gt;i'm really pleased with my discovery of rent-a-coder work, and i'm pretty sure it's a good way for me to make money doing something i enjoy. so far, admittedly, i haven't won any bids on the other sites so i'll just have to keep bidding, but at least i'm going to be productive. i'll update with some more information about my interactions with get a coder, get a freelance and script-lance when they happen, and also report on the outcome of my current projects when i'm finished.&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/freelance" rel="tag"&gt;freelance&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/devenv" rel="tag"&gt;devenv&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/rentacoder" rel="tag"&gt;rentacoder&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/software" rel="tag"&gt;software&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114118384132907466?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="related" href="http://www.rentacoder.com/" title="MAKE.MONEY.FAST" /><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114118384132907466/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114118384132907466" title="12 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114118384132907466" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114118384132907466" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/BLtkikgb0Ek/makemoneyfast_01.html" title="MAKE.MONEY.FAST" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">12</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/03/makemoneyfast_01.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114091659433997485</id><published>2006-02-24T01:17:00.000Z</published><updated>2006-03-27T18:21:58.336+01:00</updated><title type="text">fully organised</title><content type="html">you may notice on my list of interesting links i have a pointer to a to-do list service. this is the rather splendid &lt;a href="http://www.rememberthemilk.com/"&gt;&lt;strong&gt;remember the milk&lt;/strong&gt;&lt;/a&gt; site.&lt;br /&gt;&lt;br /&gt;the site is one of the best to-do list managers on the web that i have come across. i have also looked at several others before making my mind up, and they each had their benefits. i mentioned &lt;a href="http://www.tadalists.com"&gt;&lt;strong&gt;tadalists&lt;/strong&gt;&lt;/a&gt; from 37signals, and there is also &lt;a href="http://voo2doo.com"&gt;&lt;strong&gt;voo2do&lt;/strong&gt;&lt;/a&gt;. although these last two services provide task listings and management, both in a convenient AJAX-ified interface, where they fall down is integration.&lt;br /&gt;&lt;br /&gt;anyway, i will go over the features and problems with all three services and explain my reasoning behind the choice of RTM as my to-do list manager in the following set of reviews:&lt;br /&gt;&lt;br /&gt;&lt;span class="full-post"&gt;&lt;h1&gt;reviews of free web-based to-do list managers&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;img src="http://www.tadalist.com/images/pro/namelogo.gif" alt="Ta-da Lists" /&gt;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;i will start with &lt;strong&gt;&lt;a href="http://www.tadalist.com"&gt;Ta-da Lists&lt;/a&gt;&lt;/strong&gt;, which is the first service i tried. it gives you a password protected custom URL to access your lists, as a sub-domain off their site. for instance, mine would be &lt;code&gt;http://grkvlt.tadalist.com/&lt;/code&gt; which is easy to remember. the list functionality is fairly rudimentary, only allowing you to add tasks and attach notes. there is no concept of a repeating task or a due date. this functionality &lt;em&gt;is&lt;/em&gt; available in thir commercial offering, &lt;strong&gt;backpack&lt;/strong&gt; however. the user interface is simplicity itself, since there are very few functions, and the use of AJAX in-place editing makes adding and removing list items and lists incredibly easy. overall, the site design is very polished and attractive, and renders properly in all browsers that i tested it with.&lt;br /&gt;&lt;br /&gt;&lt;img class="box" src="http://www.tadalist.com/images/pro/screenshot-simplelist.gif" alt="tadalist screenshot" /&gt;&lt;br /&gt;&lt;div class="caption"&gt;sample tadalist screenshot&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;the front page of your account shows you all the lists you have created, and these are marked with a bullet whose size indicates how many incomplete tasks are remaining in that list. from here you can add a new list or edit or delete existing lists. clicking on a list name takes you to the list of tasks. each task has an html form checkbox next to it, which will when checked, mark that item as completed immediately. an optional description can be added to a list to explain its purpose, and it is also possible to alter the order items are displayed, however that is as far as prioritising of individual items gets.&lt;br /&gt;&lt;br /&gt;it is possible to share lists with other people, both publicly (read-only) and privately (full access). the person you are sharing with does not need a tadalists account, a special url is mailed to them for access. the other publishing options available are to email the list contents to your registered email address (only) and to export your list as an RSS feed.&lt;br /&gt;&lt;br /&gt;to be fair, there are commercial offerings from 37signals, such as &lt;a href="http://www.backpackit.com"&gt;backapckit&lt;/a&gt; and &lt;a href="http://www.basecamphq.com/"&gt;bascamp hq&lt;/a&gt;, and they even have free trial versions available. these are more project management tools, and even the simplest, backpackit, just adds the ability to create notes and upload images, and doesn't improve on the todo list functions. basecamp is a &lt;em&gt;much&lt;/em&gt; more complex product, and this actually gets in the way of managing simple lists, due to its concepts of milestones that must be assigned before being used.&lt;br /&gt;&lt;br /&gt;although short, the &lt;a href="http://www.tadalist.com/help/faq"&gt;FAQ list&lt;/a&gt; is a good resource, and there is also a page &lt;a href="http://jf.tadalist.com/lists/public/1005"&gt;listing comments&lt;/a&gt; made about the application bu ysers, which should give you ideas on how to use it.&lt;br /&gt;&lt;br /&gt;&lt;div class="box"&gt;&lt;strong&gt;&lt;a href="http://www.tadalist.com/"&gt;Ta-da Lists&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;provides a very simple task list manager, which is suitable for static checklists, very easy to use, static lists only, limited export capability, no reminders&lt;br /&gt;&lt;br /&gt;&lt;div class="rating"&gt;&lt;span class="three stars"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;em&gt;three out of five cats preferred tadalists&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;img src="http://www.rememberthemilk.com/img/logo.png" alt="Remember The Milk (tm) beta" /&gt;&lt;/h2&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.rememberthemil.com"&gt;Remember The Milk&lt;/a&gt;&lt;/strong&gt; is a much more polished application in terms of features, however it should be noted that it is apparently still a 'BETA' product. this, in and of itself, doesn't seem to mean much these days. google are forever producing applications like GMail and Groups that never seem to leave beta status but are perfectly usable. what it &lt;em&gt;does&lt;/em&gt; suggest is that the creators are activley fixing bugs and seeking to improve and add new features, which can only be a good thing. the site was started in august v2004, and is run by a team of just three people.&lt;br /&gt;&lt;br /&gt;your lists are accessed via a subdirectory from the main site, after you have logged in, and if you choose the 'remember me' cookie, you will always be redirected to your tasks overview page when you access the site. for those that find typing the whole url a pain, it can also be accessed as &lt;code&gt;http://rtmilk.com/&lt;/code&gt;. once at the overview page, it is possible to see all your tasks, or view them in groups. the groups can simply be labels for a list of tasks or a 'smart' list, based on a saved search you specify. these are all shown in a familiar tabbed interface. once a tab is selected, tasks can then be added to that list. initially, no options are set for the new tasks, but it is possible to set these up later. one small issue is that selecting individual tasks by clicking on them is confusing - the checkboxes for other tasks are not deselected, and it is sometimes unclear which selected task will be edited when you only want to alter details on one. the rest of the user interface is fairly easy to understand, and accessibility features like keyboard shortcuts (c.f. GMail) have been added.)&lt;br /&gt;&lt;br /&gt;&lt;img class="box" src="http://www.rememberthemilk.com/img/lm_tasks2.png" alt="rememberthemilk screenshot" /&gt;&lt;br /&gt;&lt;div class="caption"&gt;sample rememberthemilk screenshot&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;a task can have as many &lt;em&gt;tags&lt;/em&gt; as required added to it, to act as category filters or keywords when searching or grouping. it can also have a due date (which can be entered in english ('next tuesday', 'tomorrow') or as a standard date and time. tasks can also be set to repeat, using similar text options, and an estimate of the time required can be added. selected tasks may be prioritised from nothing through three different levels, and these are shown as coloured highlights. in addition tasks with date information will be formatted differently if they are due or overdue. you may also add text notes to a task with additional information, apparently without limit!&lt;br /&gt;&lt;br /&gt;the smart list feature works the same as smart playlists in iTunes, and allows you to create a virtual task list of entries that fulfil some set of criteria, specified as a boolean expression. this is where tags are useful for assigning tasks to groups. usefully, on the overview page there is a 'tag soup' box, showing all tags attached to your tasks, sized according to number of tasks, priority and due data, giving you a quick visual reminder of what is most important.&lt;br /&gt;&lt;br /&gt;the lists can also be shared, both publicly and with chosen subscribers, similar to tadalists, and also exported as an Atom feed. the feed can contain just a particular list, or all your tasks, and all feeds are auto-discoverable by most modern browsers. the most useful (for me) publishing feature is the iCal integration. this exports either all tasks, or just a particular list, as a webcal subscription for use by iCal on OS X. this means that your remember the milk tasks are then available on iSync and to any other application on your local computer that can access iCal. the shared feeds, webcals and your task pages are all protected by secure password authentication, unless you choose to make some of them fully publicly available.&lt;br /&gt;&lt;br /&gt;as i mentioned earlier, due dates and times can be set for tasks, and RTM uses this information to send out reminders. it will send both a daily summary of your tasks, and also remind you just before the start time. this is all fully configurable in the settings page. additionally, reminders can be sent using IM (various clients and networks) and by text message (SMS) to mobile phones, including t-mobile in the UK. this raises the usefulness of the service by an order of magnitude. finally, if you don't like this technological nonsense, there is a weekly planner page, designed to be printed out with empty boxes to tick, and lots os space to scribble on with low-tech pencils! also, if you need to set up a new task while away from the web, you can email a message to a personalised address, and it will be added toy your tasks inbox for later editing.&lt;br /&gt;&lt;br /&gt;really, the fact that there's a huge number of help pages rather than one short FAQ page (tadalists, i'm looking at you) should tell you all you need to know about the feature set, and if you look at the &lt;a href="http://blog.rememberthemilk.com/"&gt;blog&lt;/a&gt; or &lt;a href="http://www.rememberthemilk.com/forums/"&gt;forums&lt;/a&gt; you can find out what ever new features are planned and anything else you need to know. the current &lt;a href="http://www.rememberthemilk.com/about/learnmore.rtm"&gt;feature list&lt;/a&gt; is incredibly comprehensive, and should cover everything you want to do, however.&lt;br /&gt;&lt;br /&gt;&lt;div class="box"&gt;&lt;strong&gt;&lt;a href="http://www.rememberthemilk.com/"&gt;Remember The Milk&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;provides an excellent, full-featured reminders and tasks service, many useful notification options and methods, useful smart grouping and searching functionality, accessible using iCal, simple to use with extensive help, extras like sms/im notification and contact lists.&lt;br /&gt;&lt;br /&gt;&lt;div class="rating"&gt;&lt;span class="five stars"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;em&gt;five out of five cats preferred rememberthemilk&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2 style="background: #ffb url(http://voo2do.com/images/ygrad.png) repeat-x;"&gt;&lt;img src="http://voo2do.com/images/logo.gif" alt="voo2doo" /&gt;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://voo2do.com/"&gt;voo2do&lt;/a&gt;&lt;/strong&gt; is the newest (i think) of the services i am reviewing, and was created by the authour for his personal use before making it publicly available. i discovered it while trying to find a better list service than tadalist, and was attracted to it because of the ajax type interface and the fact that it is project based, much like basecamp, but free and apparently simpler to use. the feature list has more in common with rememberthemilk, and tasks can be assigned priorities, due dates and have time estimates attached. however, they can also be allocated to a project. the project tasks can be managed by updating them with hours elapsed and setting current versus original duration estimates. these are used to track total time elapsed and remaining in a whole project composed of sub-tasks.&lt;br /&gt;&lt;br /&gt;the task views are mainly arranged aroun due dates, and consist of historical (what you've done) and deadlines (what needs done this week). views, showing the tasks that fall due today, tomorrow etc. for each individual project are also available. the initial screen aggregates all of this information into a dashboard, showing all the high-priority tasks their dates with overdue items highlighted.&lt;br /&gt;&lt;br /&gt;&lt;img class="box" src="http://voo2do.com/images/help/dashboard.png" width="300" alt="voo2do dashboard screenshot" /&gt;&lt;br /&gt;&lt;div class="caption"&gt;sample voo2do dashboard screenshot&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;similarly to rememberthemilk, it is possible to email the server with a new task and have it added to a list. however, the area where voo2do excels over the other applications here is its programmability. it is the only application featured that allows REST web service access to all of its functions. this means that there are now a number of third party applications available that can poll your account for upcoming due tasks, or provide a windows GUI to add new tasks. the REST method of accessing a web service is also simple enough that it is possible to write basic scripts in shell, perl or python to access your task list. this makes voo2do potentially the most powerful application reviewed, although this is dependant on the userbase writing these useful add-ons and scripts, and we will need to wait and see whether this happens?&lt;br /&gt;&lt;br /&gt;&lt;img class="box" src="http://voo2do.com/images/help/viewdropdown.gif" alt="voo2do screenshot" /&gt;&lt;br /&gt;&lt;div class="caption"&gt;sample voo2do screenshot&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;something that appears to be missing is automatic notifications, using any out-of-band mechanism. the only way to check task and project status is to log in, which is not always possible. the status diusplays are also very cluttered, with too many form controls visible, and lacking the smooth design that we have grown used to with most modern web applications. this mkay be a nescessity brought on by the complexity of the project and time tracking features, but a cleaner printout would have been easy to achieve with alternate stylesheets, rather than printing out the unnecessary screen chrome.&lt;br /&gt;&lt;br /&gt;voo2do also makes use of keyboard shortcuts, and is very much a web 2.0 application, with new features being added all the time. there is a &lt;a href="http://blog.voo2do.com/"&gt;blog&lt;/a&gt; published with information and notes written by the author, and documentation on the &lt;a href="http://voo2do.com/help/api"&gt;API&lt;/a&gt; for programmers. however, i found it quite hard to get started using, mainly because new accounts are not initially populated with projects and it is unclear what the best way of implementing personal tasks are, since i don't usually assign shopping or tidying to a project. i can see this being useful to contracters or freelance workers who need to manage their time, and are willing to invest in setting things up. it should also appeal to anyone who wants to expand the features or integrate it into an existying project setup using the API.&lt;br /&gt;&lt;br /&gt;&lt;div class="box"&gt;&lt;strong&gt;&lt;a href="http://voo2do.com/"&gt;voo2doo&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;a project focussed task manager with excellent REST API based extensibility. initially cumbersome and aesthetically lacking, but has some very good time tracking and management features not found anywhere else, but no reminder facilities.&lt;br /&gt;&lt;br /&gt;&lt;div class="rating"&gt;&lt;span class="three stars"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;em&gt;three out of five cats preferred voo2do&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2 style="font-family: Georgia, serif; font-weight: bold; font-size: 32px; background-color: #260073; color: #ffffff; border-bottom: 3px solid #6699ff; margin: 0; padding: 0.4em 10px;"&gt;HassleMe&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;after all these complex systems, sometimes the simplicity of a one-page web form is refreshing. &lt;strong&gt;&lt;a href="http://www.hassleme.co.uk/"&gt;HassleMe&lt;/a&gt;&lt;/strong&gt; was first written as a script by the creators of mysociety to encourage them to update their development blog. this then mutated into a public site offering the same features. essentially it is a scheduled email reminder service, although not &lt;em&gt;too&lt;/em&gt; scheduled,  in case it gets too easy to ignore.&lt;br /&gt;&lt;br /&gt;simply fill in the self explanatory (although there is a &lt;a href="http://www.hassleme.co.uk/faq"&gt;FAQ&lt;/a&gt;) form, and you will be reminded 'approximately' after every specified interval by an email with whatever you wanted hassled to do. the software took two afternoons to write, but does its one job perfectly, so there's little elso to say. it doesn't even require registration!&lt;br /&gt;&lt;br /&gt;&lt;div class="box"&gt;&lt;strong&gt;&lt;a href="http://www.hassleme.co.uk/"&gt;HassleMe&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;reminders via email at semi-unpredictable intervals&lt;br /&gt;&lt;br /&gt;&lt;div class="rating"&gt;&lt;span class="two stars"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;em&gt;two out of five cats preferred hassleme&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;summary&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;in my opinion, rememberthemilk is the best of these applications, particularly if you are a Macintosh user, due to the excellent iCal integration. the options for task settings and searching are well thought out, and the system is easy to use and understand, as well as being the most professional looking of the four (sorry, HassleMe!). since all of these systems are free, though, i would suggest you grab an account at each of them, have a play and see what suits you best.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sign up for &lt;a href="http://www.tadalist.com/account/new"&gt;Tadalist&lt;/a&gt;&lt;/li&gt;&lt;li&gt;sign up for &lt;a href="http://www.rememberthemilk.com/signup/"&gt;Remember The Milk&lt;/a&gt;&lt;/li&gt;&lt;li&gt;sign up for &lt;a href="http://voo2do.com/login1#register"&gt;voo2do&lt;/a&gt;&lt;/li&gt;&lt;li&gt;sign up for &lt;a href="http://www.hassleme.co.uk/"&gt;HassleMe&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;and, if you think i'm wrong about rememberthemilk, or there are any other similar applications that i've missed, just add a comment and let me know...&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/ajax" rel="tag"&gt;ajax&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/web" rel="tag"&gt;web&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/tasks" rel="tag"&gt;tasks&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/gtd" rel="tag"&gt;gtd&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/lists" rel="tag"&gt;lists&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/reviews" rel="tag"&gt;reviews&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114091659433997485?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="related" href="http://www.rememberthemilk.com/" title="fully organised" /><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114091659433997485/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114091659433997485" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114091659433997485" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114091659433997485" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/0vgVz8A4IIA/fully-organised.html" title="fully organised" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/02/fully-organised.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114038859694292485</id><published>2006-02-19T22:36:00.000Z</published><updated>2006-02-28T01:37:24.283Z</updated><title type="text">development environment (two)</title><content type="html">(&lt;strong&gt;note:&lt;/strong&gt; this is part two of a series on developing java enterprise applications. &lt;a href="http://grkvlt.blogspot.com/2006/02/development-environment-one.html"&gt;part one&lt;/a&gt; deals with the tools used to set up your development environments.)&lt;br /&gt;&lt;br /&gt;the current project i'm working on requires a number of external libraries for its functionality. i use open source projects from apache's &lt;a href="http://jakarta.apache.org/"&gt;jakarta&lt;/a&gt; and the jakarta &lt;a href="http://jakarta.apache.org/commons/"&gt;commons&lt;/a&gt; projects for many of these features, but there is a lot of good, quality OSS code around. the application i'm working on is a web based service, running under tomcat. i will go through each of the packages it depends on and explain why i chose and use them.&lt;br /&gt;&lt;br /&gt;&lt;span class="full-post"&gt;&lt;h2&gt;struts&lt;/h2&gt;&lt;br /&gt;&lt;a href="http://struts.apache.org/"&gt;apache struts&lt;/a&gt; is an &lt;a href="http://java.sun.com/blueprints/patterns/MVC-detailed.html"&gt;MVC&lt;/a&gt; (model-view-controller pattern) framework. the current release version is 1.2.8 and it has been around for long enough that there are many good books available. &lt;br /&gt;&lt;br /&gt;the struts project is currently undergoing a revision, and will be split into two frameworks, action (much like the current version) and shale (which will integrate with sun's &lt;a href="http://java.sun.com/j2ee/javaserverfaces/"&gt;JSF&lt;/a&gt; presentation layer) as well. currently, the 1.2.8 release is likely to remain useful and stable, and i would not recommend using any of the forked versions until they have more support and documentation avaialable.&lt;br /&gt;&lt;br /&gt;in terms of books, the two i would recommend are both part of the o'reilly java series: &lt;a href="http://www.amazon.co.uk/exec/obidos/redirect?link_code=ur2&amp;tag=consonants-21&amp;camp=1634&amp;creative=6738&amp;path=ASIN%2F059600771X"&gt;jakarta struts cookbook&lt;/a&gt;&lt;img src="http://www.assoc-amazon.co.uk/e/ir?t=consonants-21&amp;amp;l=ur2&amp;amp;o=2" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; by bill siggelkow and &lt;a href="http://www.amazon.co.uk/exec/obidos/redirect?link_code=ur2&amp;tag=consonants-21&amp;camp=1634&amp;creative=6738&amp;path=ASIN%2F0596006519"&gt;programming jakarta struts&lt;/a&gt;&lt;img src="http://www.assoc-amazon.co.uk/e/ir?t=consonants-21&amp;amp;l=ur2&amp;amp;o=2" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; by chuck cavaness. the documentation and &lt;a href="http://struts.apache.org//struts-doc-1.2.8/api/index.html"&gt;javadocs&lt;/a&gt; are available on the jakarta site.&lt;br /&gt;&lt;br /&gt;struts implements the &lt;a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/FrontController.html"&gt;front controller&lt;/a&gt; pattern, and is mainly concerned with the C of MVC. the model and presentation layers are up to you. the controller is based on the concept of actions, which are invoked from the struts action servlet, usually by any URL ending in &lt;code&gt;.do&lt;/code&gt; and are defined declaratively. in fact, the whole of the struts configuration is done this way, from a single (or multiple, if required) XML file. this specified the forms, their contents and the actions that process them, as well as any exceptions that may occur, message resources, plug-ins and forwards. forwards are struts mechanism for separating the presentation layer from the controller, and allow you to give a name to a a JSP or HTML file, that an action will then forward to. this way, you can change what the forward points to without re-coding your actions.&lt;br /&gt;&lt;br /&gt;in general, struts is a very nice framework, particularly since you can mix and match any other model and presentation frameworks you want. many, many commercial sites use struts - look for the tell-tale &lt;code&gt;.do&lt;/code&gt; extensions on pages that perform the business functions in the site. for example, Blogger uses this, as do &lt;a href="http://www.sonybmg.com.au/home/sonyhome.do"&gt;Sony Austrailia&lt;/a&gt; and &lt;a href="http://www.yell.com/ucs/HomePageAction.do"&gt;Yell&lt;/a&gt; to name just three.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;torque&lt;/h2&gt;&lt;br /&gt;this was a difficult choice. i knew that i didn't want anything to do with &lt;em&gt;real&lt;/em&gt; J2EE and the mindless tedium that is developing EJBs (ie writing tons of boilerplate template code for home, remote, whatever interfaces) and anyway i don't want to be running a heavyweight app-server. &lt;a href="http://www.caucho.com/resin-3.0/"&gt;Resin&lt;/a&gt; (a lightwight J2EE container from Caucho Software) and &lt;a href="http://www.jboss.com/products/jbossas"&gt;JBoss&lt;/a&gt; (the de facto standard OSS app-server) are overkill. i didn't contemplate BEA WebLogic, IBM WebSphere, Oracle AS etc. for even a moment - they are all hugely expensive too, as well as requiring more cpu power than i or my client have available.&lt;br /&gt;&lt;br /&gt;basically, &lt;a href="http://db.apache.org/torque/"&gt;torque&lt;/a&gt; is a spin-off from the turbine project, and now forms part of the &lt;a href="http://db.apache.org/"&gt;Apache DB&lt;/a&gt; project, which is an attempt to produce a completely open-source database system by the apache organisation. this includes &lt;a href="http://db.apache.org/ddlutils/"&gt;DDL&lt;/a&gt; (the data description language), an XML dialect for specifying relational database schemas. the torque system parses a DDL definitionj file, and produces a java object model. the model is provided as a set of SQL files used to create the database tables in whichever dialect of SQL you require, and a set of java source files implementing the model. the generation of the model and SQL is easily autyomated, and a &lt;code&gt;build.xml&lt;/code&gt; ant file is provided that can be imported into your projects build process.&lt;br /&gt;&lt;br /&gt;the objects created follow the JavaBeans standards, and come in two types. there are the actual model objects, which have get/set methods for the database columns in whatever table the object is represented by, and peer objects, which implement finder methods. the peers use torque criteria objects to specify which bits of the model to retrieve from the database and populate the model with, and can handle complex 1:n, 1:1 and m:n relationships. it is also possible to feed straight SQL to a criteria. the model and peer objects are defined as super classes, and a set of empty sub-classes extending them are made available for you to use in your project, and add any convenience methods you require.&lt;br /&gt;&lt;br /&gt;generation and runtime configuration are accomplished by &lt;code&gt;.properties&lt;/code&gt; files, which specify the dialect of SQL used, and a connection to a database. at runtime, the only thing required is to call &lt;code&gt;Torque.init(&lt;em&gt;properties-file&lt;/em&gt;)&lt;/code&gt; somewhere in your applications startup code. from then on, you can use the model and peer objects as desired, loading your data from the peer's finder methods, and calling &lt;code&gt;.save()&lt;/code&gt; on the model objects to update them.&lt;br /&gt;&lt;br /&gt;i particularly like torque because the only configuration required is the DDL, and the database connection details at runtime. the object model code is auto-generated, so you only need to write out your database definition once. for example, &lt;a href="http://www.hibernate.org/"&gt;hibernate&lt;/a&gt; needs the database SQL to be written, the hibernate mapping configuration to be written in an XML file, &lt;em&gt;and&lt;/em&gt; the model beans to be coded, which involves repeating the same list of fields three times, with different implementations, and hoping they all match. &lt;em&gt;plus&lt;/em&gt; if you were to alter a table, those three files all need modified, with torque, just run the generator again after updating the DDL. &lt;a href="http://springframework.org/"&gt;spring&lt;/a&gt; just adds another configuration file representing the same data... (yes, i know things like &lt;a href="http://xdoclet.sf.net/"&gt;xdoclet&lt;/a&gt; go some way towards solving this, but it's still complex, and just something else to learn.&lt;br /&gt;&lt;br /&gt;i'm not sure how scalable torque is, but for a small webapp with a few users, i think it should be fine, and i believe turbine was designed as an enterprise class system, so you should be safe.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;log4j&lt;/h2&gt;&lt;br /&gt;this is the &lt;em&gt;best-of-breed&lt;/em&gt; standard java enterprise logging library. it is part of the &lt;a href="http://logging.apache.org/"&gt;Apache Logging&lt;/a&gt; project, available &lt;a href="http://logging.apache.org/log4j/docs/index.html"&gt;here&lt;/a&gt;. there are actually various implementations, in .NET, C++, Perl and several others, all using the same compatible API and output. configuring log4j can be problematic, since may j2ee containers and application servers also use it, and class-loader issues can prevent the library being loaded correctly. the onjava site has a good &lt;a href="http://www.onjava.com/lpt/a/3355"&gt;discussion of the problem&lt;/a&gt;, and it's solutions.&lt;br /&gt;&lt;br /&gt;(&lt;strong&gt;note:&lt;/strong&gt; this is not to be confused with &lt;em&gt;commons&lt;/em&gt; logging, which is a super-api for many logging services. logging using log4j under the commons-logging framework will be covered later in this series.)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;quartz&lt;/h2&gt;&lt;br /&gt;i need to have jobs that run, producing reports and emailing messages and information to users and administrators on a regular basis. &lt;a href="http://www.opensymphony.com/quartz/"&gt;quartz&lt;/a&gt; is developed by &lt;a href="http://www.opensymphony.com/"&gt;OpenSymphony&lt;/a&gt; and has been open sourced recently. it provides job/task scheduling for enterprise java systems, with facilities for triggers and schedules, including a cron-style trigger. this uses the same configuration options as the standard &lt;a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?crontab"&gt;Unix crontab&lt;/a&gt; file, with a few extra selectors for ranges and last-n of month, third-m of month etc. i haven't added the scheduler to my current project, but this project appears to include everything i could ever need. there's also part of a soon to be published &lt;a href="http://www.opensymphony.com/quartz/book_chaps.html"&gt;book&lt;/a&gt;, written by struts and j2ee developer and author &lt;a href="http://www.oreillynet.com/cs/catalog/view/au/988?x-t=book.view"&gt;chuck cavaness&lt;/a&gt; available for free download.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;poi&lt;/h2&gt;&lt;br /&gt;an important part of a webapp for businesses is reporting. it's all very well to present data in HTML tables, but this is not easily exported into other applications for analysis. sometimes formatting your data as a comma-separated or tab-separated file is sufficient, but i prefer to output &lt;a href="http://r.office.microsoft.com/r/rlidAppFolder?clid=1033&amp;p1=excel"&gt;Microsoft Excel&lt;/a&gt; workbooks directly, and so do most users. the apache &lt;a href="http://jakarta.apache.org/poi/"&gt;POI&lt;/a&gt; project provides apis to manipulate and generate DOC, XLS and PPT files. i used the &lt;a href="http://jakarta.apache.org/poi/hssf/index.html"&gt;HSSF&lt;/a&gt; (horrible spreadsheet format, by the way) routines to produce excel sheets with tabular data returned by an SQL query on a database. the code is extremely simple if all you want is numbers and text in boxes, and often that's all that the users need - they can pretty it up themselves. the api allows a lot more than this, though, and in my current project i'd like to take this a step further and start formatting the cells appropriately, and maybe even insert formulas and colours/lines to produce a sheet that can be printed out or used immediately.&lt;br /&gt;&lt;br /&gt;related to the generation of MS Office documents is &lt;a href=""&gt;Adobe PDF&lt;/a&gt; file generation. there are a couple of options here that i have yet to fully explore. the &lt;a href="http://www.lowagie.com/iText/"&gt;iText&lt;/a&gt; library seems fairly basic, but there is a lot of good documentation and &lt;a href="http://www.onjava.com/lpt/a/3924"&gt;tutorials&lt;/a&gt;. for a more complex solution, XSL formatting objects may be the way to go. the &lt;a href="http://xmlgraphics.apache.org/fop/"&gt;Apache FOP&lt;/a&gt; project implements this.&lt;br /&gt;&lt;br /&gt;the next installment of this series will deal with some more libraries, including many of the &lt;a href="http://jakarta.apache.org/commons/"&gt;Jakarta Commons&lt;/a&gt; sub-projects. hopefully you found this information useful, but let me know if you think i missed anything or got something wrong...&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/devenv" rel="tag"&gt;devenv&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/struts" rel="tag"&gt;struts&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/torque" rel="tag"&gt;torque&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/log4j" rel="tag"&gt;log4j&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/quartz" rel="tag"&gt;quartz&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/poi" rel="tag"&gt;poi&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/java" rel="tag"&gt;java&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/j2ee" rel="tag"&gt;j2ee&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114038859694292485?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114038859694292485/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114038859694292485" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114038859694292485" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114038859694292485" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/cPVDwXiK8E0/development-environment-two_19.html" title="development environment (two)" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/02/development-environment-two_19.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114008801909858903</id><published>2006-02-16T11:02:00.000Z</published><updated>2006-02-19T03:51:55.286Z</updated><title type="text">migration - new and improved</title><content type="html">i've decided to change my weblog provider. the blog is now hosted by &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt;, a &lt;a href="http://www.google.com/press/pressrel/blog_voice.html"&gt;Google subsidiary&lt;/a&gt;, instead of livejournal. Blogger has a bit more of a 'serious' reputation than LJ (it doesn't keep asking about how i'm feeling, like an insecure teenage girl in the middle of a relationship crisis, for instance!) the customisation options also seem a lot better, and it has full API access via an &lt;a href="http://www.mnot.net/drafts/draft-nottingham-atom-format-02.html"&gt;Atom&lt;/a&gt; XML-RPC / HTTP interface.&lt;br /&gt;&lt;br /&gt;the templates for page design are also much more flexible - the CSS / HTML is fully editable and i'm still tweaking the layout options. so far i'm very impressed with the functionality and customisation options. i expect to produce the same high quality random text that i always have, but with &lt;em&gt;better fonts&lt;/em&gt; and &lt;em&gt;prettier design&lt;/em&gt;.update your bookmarks for &lt;em&gt;consonants&lt;/em&gt; to this URL: &lt;code&gt;&lt;a href="http://grkvlt.blogspot.com/"&gt;http://grkvlt.blogspot.com&lt;/a&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;i'll be continuing the development environment article here in the next few days...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114008801909858903?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114008801909858903/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114008801909858903" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114008801909858903" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114008801909858903" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/Y64mZcAjRxU/migration-new-and-improved.html" title="migration - new and improved" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/02/migration-new-and-improved.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114007250257889220</id><published>2006-02-09T00:25:00.000Z</published><updated>2006-02-28T01:39:07.103Z</updated><title type="text">interface or class?</title><content type="html">this post is about some stuff i discovered is possible, using only standard 100% java, to add functionality to interfaces.&lt;br /&gt;&lt;br /&gt;i'm assuming you all have a good grounding in OOP and understand inheritance and interfaces and so on. in particular, the java object model is a tree, starting with &lt;code&gt;java.lang.Object&lt;/code&gt; and descending down by way of child classes that extend this base or root class. these sub-classes can only &lt;em&gt;extend&lt;/em&gt; one parent class, however they can &lt;em&gt;implement&lt;/em&gt; several interfaces. an &lt;em&gt;interface&lt;/em&gt; is a statement of an API contract that must be fulfilled by the implementing object. it usually consists of a number of public methods that will be written by the developer as part of the new object. for example, the &lt;code&gt;java.lang.Runnable&lt;/code&gt; interface (for thread creation) requires that the object have a &lt;code&gt;public void run()&lt;/code&gt; method. this means that any object where &lt;code&gt;(o instanceof Runnable)&lt;/code&gt; is true will be able to have &lt;code&gt;o.run()&lt;/code&gt; called on it. similar to interfaces are &lt;em&gt;abstract class&lt;/em&gt;es, which are like ordinary objects, but with some methods declared using the &lt;code&gt;abstract&lt;/code&gt; keyword. these methods must then be implemented by any child classes that extend it.&lt;br /&gt;&lt;br /&gt;&lt;span class="full-post"&gt;since java only allows single-inheritance, interfaces are used to allow a class to extend some parent class and still conform to multiple other method signatures or contracts. however, if you have developed an interface that must be implemented by a large number of your classes, and these classes must also extend some different parent to inherit required functionality, it can be a pain to have to write the same implementation of an interface method many times. what you would like to do is have interfaces that don't just specify method signatures, but actually contain the code for an implementation of those methods that can then be called on any implementing class. sadly this is not possible - an interface cannot contain any Java code.&lt;br /&gt;&lt;br /&gt;all is not lost, though, since it &lt;em&gt;is&lt;/em&gt; possible to define a nested &lt;em&gt;inner class&lt;/em&gt; as part of your interface. an inner class is just like a standard class definition, except it is nested in the code for another class. inner interfaces are also possible, but not discussed here. what i discovered is that it is possible to write a number of method implementations, fields, static initialisers and so on in this inner class, and when compiled, any object that implements the interface will also have access to them, and present them to other classes depending on visibility. here is an example... suppose we have an interface &lt;code&gt;Kitten&lt;/code&gt; which defines methods &lt;code&gt;public String getText()&lt;/code&gt; and &lt;code&gt;public void doSomething()&lt;/code&gt;. the code looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public interface Kitten {&lt;br /&gt;    public String getText();&lt;br /&gt;    public void doSomething();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;em&gt;but&lt;/em&gt;, we also want all &lt;code&gt;Kitten&lt;/code&gt; objects to have access to some utility methods &lt;code&gt;public void doMore(String s)&lt;/code&gt; and &lt;code&gt;public String findOut()&lt;/code&gt;. These &lt;em&gt;could&lt;/em&gt; be added to the interface signature, and implemented by any class that implements &lt;code&gt;Kitten&lt;/code&gt;, but instead we will add an inner class called &lt;code&gt;Helpful&lt;/code&gt; and a reference to it in the outer interface, as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public interface Kitten {&lt;br /&gt;    public String getText();&lt;br /&gt;    public void doSomething();&lt;br /&gt;    public Helpful h = new Helpful();&lt;br /&gt;    public class Helpful {&lt;br /&gt;        private String THING = "java interfaces";&lt;br /&gt;        public void doMore(String s) {&lt;br /&gt;            System.out.println("doing more with " + s);&lt;br /&gt;        }&lt;br /&gt;        public String findOut() {&lt;br /&gt;            return THING;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;so, this interface now has the inner class added. in order to see how it works, we will need to write a test program that implements the interface and then try accessing some of the inner class methods. the implementation is simple, just write the body for the two methods declared by &lt;code&gt;Kitten&lt;/code&gt;, for instance:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class Potato implements Kitten {&lt;br /&gt;    // we could also add "extends Whatever"&lt;br /&gt;    public String getText() {&lt;br /&gt;        return "this is some text!";&lt;br /&gt;    }&lt;br /&gt;    public void doSomething() {&lt;br /&gt;        for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;            System.out.println("stage " + i);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;with this class we ought to be able to call both the &lt;code&gt;Kitten&lt;/code&gt; and the &lt;code&gt;Helpful&lt;/code&gt; methods, so we should write a test class to demonstrate:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class Test {&lt;br /&gt;    public static void main(String[] argv) {&lt;br /&gt;        Potato p = new Potato();&lt;br /&gt;&lt;br /&gt;        System.out.println(p.getText()); // Kitten&lt;br /&gt;        p.doSomething(); // Kitten&lt;br /&gt;        p.h.doMore("string"); // Helpful&lt;br /&gt;        System.out.println(p.h.findOut()); // Helpful&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and when compiled, the output from the &lt;code&gt;Test&lt;/code&gt; class is as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ &lt;b&gt;javac Test.java&lt;/b&gt;&lt;br /&gt;$ &lt;b&gt;java Test&lt;/b&gt;&lt;br /&gt;this is some text!&lt;br /&gt;stage 0&lt;br /&gt;stage 1&lt;br /&gt;stage 2&lt;br /&gt;doing more with string&lt;br /&gt;java interfaces&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;this is pretty much as expected. the inner class methods are called on the &lt;code&gt;Helpful&lt;/code&gt; instance &lt;code&gt;h&lt;/code&gt; that is part of the interface specification. they could also be called directly. for example, if there was a static method in &lt;code&gt;Helpful&lt;/code&gt; named &lt;code&gt;doThis()&lt;/code&gt;, it could be called from anywhere inside a class implementing &lt;code&gt;Kitten&lt;/code&gt; as &lt;code&gt;Helpful.doThis()&lt;/code&gt; or from anywhere else in your code as simply &lt;code&gt;Kitten.Helpful.doThis()&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;i think this is probably an abuse of the java object system, and certainly not "best practice" for OOP in any way, but it may be helpful for some situations where you want to avoid repeated boilerplate code and need the benefits of inheritance for utility methods but your objects &lt;strong&gt;must&lt;/strong&gt; descend from a library class, and interfaces are the only extension point available. one thing to bear in mind, however, is that the nested inner class methods are treated by the compiler as &lt;code&gt;static&lt;/code&gt; and there may be scope issues with access to the parent class. this could be worked around by passing a reference to &lt;code&gt;this&lt;/code&gt; into some of the methods, or similar tactics.&lt;br /&gt;&lt;br /&gt;happy coding!&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/java" rel="tag"&gt;java&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/oop" rel="tag"&gt;oop&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/tricks" rel="tag"&gt;tricks&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/code" rel="tag"&gt;code&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114007250257889220?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114007250257889220/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114007250257889220" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114007250257889220" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114007250257889220" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/x0eQiiTgX-s/interface-or-class.html" title="interface or class?" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/02/interface-or-class.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114007255109750590</id><published>2006-02-08T01:26:00.000Z</published><updated>2006-02-28T01:35:42.656Z</updated><title type="text">development environment (one)</title><content type="html">i've been quite busy lately developing a web application for a friend's small business. in doing so, i've discovered (re-discovered) a good set of tools, and i think i now have the best dev-env that i can manage for free. so, this blog is a discussion and description of what my setup is like and what tools i'm using and why...&lt;br /&gt;&lt;br /&gt;i use Apple Macintosh computers almost exclusively now (a G4 15" powerbook, from my friend gav, who died last year and left it to me. thanks. you're still remembered...) and the only thing that bugs me is the single-button mouse, and the fact that one has to control-click to access context menus etc. anyway, i recently invested in a microsoft notebook mouse, a small two button plus scroll-wheel optical USB mouse (about 33% the size of a standard mouse). this simply works just like you'd hope it would, ie. the right mouse button is the equivalent of control-clicking, and pops up the context menu for the item you click on, in the finder, java applications, eclipse, whatever. the scroll-wheel also works exactly like windows, and both of these features have raised my productivity no end. the trackpad on a laptop is inherently tricky as it is, and i'm glad to be rid of it.&lt;br /&gt;&lt;br /&gt;&lt;span class="full-post"&gt;&lt;h2&gt;eclipse ide&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;in terms of software, i had always used vi on Unix systems, which i learned in university, and graduated on to &lt;a href="http://www.vim.org/"&gt;vim&lt;/a&gt; eventually, since it's also available for XP. however I recently tried the Sun &lt;a href="http://www.netbeans.org/"&gt;NetBeans 4.1&lt;/a&gt; IDE and really liked it. i then got &lt;a href="http://www.eclipse.org/"&gt;Eclipse 3.1&lt;/a&gt; (originally from IBM) for OS X and installed it to try with my current project, since there seemed to be more plug-ins available for it. i really like both of them, having used Microsoft &lt;a href="http://msdn.microsoft.com/vstudio/"&gt;Visual Studio&lt;/a&gt; on XP, and find they are quite similar. (as an aside, although VS2005 is quite expensive, and the free .NET command-line tools provided with the SDK are OK, Microsoft have now made available &lt;a href="http://msdn.microsoft.com/vstudio/express/"&gt;Express Edition&lt;/a&gt; of VS for C#, VB and even C++ for free, as in beer, for at least the next year.) anyway, of the two open source IDEs, i think i prefer the way Eclipse works, with its views and perspectives and enormous collection of editor and environment plug-ins.&lt;br /&gt;&lt;br /&gt;in my development setup, i use Eclipse with the standard set of web and enterprise plug-ins. these are all packaged together as the &lt;a href="http://www.eclipse.org/webtools/"&gt;Web Tools Platform&lt;/a&gt; or WTP. this gives me XML, HTML, CSS, JSP, and many more editors and views. because of this, i can now edit all the files in my web application with an Eclipse native editor and integrated debugging, error reporting/detection and validation (except for JSPs, since the editor doesn't handle taglibs that are imported with a&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;%@ taglib ... %&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;directive in a sub-fragment included in the main page using a&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;%@ include file= ... %&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;directive. this is perfectly legal in the JSP spec, since the include directive is processed before compilation (like &lt;code&gt;#include&lt;/code&gt; pre-processor directives in C), unlike the&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;jsp:include ... &amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;tag and similar, which are processed at runtime. this means that my struts JSPs which use the html, bean and logic taglibs all show up with warnings, since the editor can't see the included taglib declaration. all quite annoying, and i had to turn off JSP validation, although that still doesn't always work. i tried a bunch of other plug-ins, but the better ones were all 30-day trials of commercial software (MyEclipse, EnterpriseWorkbence, ExpressWorkshop etc.) or poorly integrated and incomplete. the WST project is the official Eclipse set of J2EE/Web editing tools, originally the IBM  Web Tools for Eclipse product, and is currently at version 1.5 and works fine for my purposes.&lt;br /&gt;&lt;br /&gt;other Eclipse features i like are the ant integration and incremental compilation. i use Apache &lt;a href="http://ant.apache.org/"&gt;ant&lt;/a&gt; as my build mechanism because it allows me to do command-line builds and also deployment and other tasks in a repeatable way. i have tasks set up for compilation, war creation, database creation, code generation, revision control, backups and app-server deployment. Eclipse has an ant view that shows all available targets and an editor for your &lt;code&gt;build.xml&lt;/code&gt; file that interprets file inclusions and external task definitions correctly, as well as parsing the EL syntax in properties and auto-completion of tags as you write. the auto-complete works in a similar way to Microsoft VS IntelliSense and gives you a pop-up list of possible methods, fields and so on whenever appropriate, as well as adding closing braces, parentheses and so on. good if you're forgetful, since you have less of the &lt;em&gt;oh-damn-&lt;/em&gt;&lt;em&gt;i-forgot-a-close-curly-brace-there-&lt;/em&gt;&lt;em&gt;that's-why-it-won't-compile&lt;/em&gt; moments, after ten minutes of staring at the code...&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;subclipse&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;the next plug-in i use, and the main reason for switching from NetBeans to Eclipse, is &lt;a href="http://subclipse.tigris.org/"&gt;subclipse&lt;/a&gt;, which is a subversion revision control tool. it integrates into the package/file navigator view, showing me which of my project files is under revision control (currently the &lt;code&gt;src/&lt;/code&gt;, &lt;code&gt;conf/&lt;/code&gt; and &lt;code&gt;web/&lt;/code&gt; directories) and whether they are out of sync with the repository. i can also do diffs against the repository, tag and branch revisions easily and commit changes, all using the Team context menu. (see above re: the new mouse... ;) &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; is a great RCS, but it took me a while to decide to use it. the first version control system i ever used was sccs, and i then moved to RCS because it was free. CVS is the next obvious step, it being a descendant of RCS, but i never got around to using it. i was looking for something to use with my current project, and had heard lots of good things about subversion, but the lack of integration with my IDE stopped me trying until my decision to switch. now, however, i'm finding it very simple and easy to use, and the setup for OS X was very simple. i have the server running from xinetd, rather than WEBDAV, with &lt;code&gt;svn://localhost/&lt;/code&gt; URLs for the repositories. i also use a tool called &lt;a href="http://www.lachoseinteractive.net/en/community/subversion/svnx/features/"&gt;SvnX&lt;/a&gt; to browse svn repositories and manipulate the with an OS X GUI. i also tried using a Finder plug-in that gives a subversion context menu for each file under revision control, and integrates subversion with the Finder icons, but so far i've not found it that useful. i manipulate the working copy of my project just like i would normal files, and only commit and update using the UI inside Eclipse, since that's where the editing is going on. also, the command-line client gives me a much more powerful set of tools when i really need them.&lt;br /&gt;(&lt;strong&gt;update&lt;/strong&gt; the finder integration plugin is called &lt;a href="http://scplugin.tigris.org/"&gt;SCPlugin&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;one thing i haven't been using the Eclipse UI for is managing the application server or the database. i tend to view these components as infrastructure rather than part of my development environment, and usually control them using their native interfaces. i &lt;em&gt;do&lt;/em&gt; have ant targets that allow me to deploy database schemas and upload web-app war files, but that's only as part of the deployment/build cycle. the app-server i'm using is &lt;a href="http://tomcat.apache.org/"&gt;Jakarta Tomcat 5.5.12&lt;/a&gt;. this version is usually built with the J2SE 5.0 runtime, but the version of OS X i have (10.3.9) doesn't have that available (although 10.4 does) so i'm stuck running 1.4.2 instead. fortunately, there's a compatibility package available that drops in on top of the Tomcat install to allow it to run on 1.4.2 Java environments. interestingly, the latest Tomcats all use the Eclipse Java incremental compiler, so only need a runtime not a full JDK deployment, although you &lt;em&gt;can&lt;/em&gt; use javac or jikes if you want. to manage the Tomcat instance i just use the provided scripts, although i had to provide a &lt;code&gt;SystemStarter&lt;/code&gt; directory and an option in the &lt;code&gt;/etc/hostconfig&lt;/code&gt; file to get it to run on startup. i just copied the Apache scripts written by Apple.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;database&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;the database i use is &lt;a href="http://www.mysql.com/"&gt;MySQL 5.0&lt;/a&gt; with the InnoDB tables, since they provide better transaction and relational support. my persistence engine manages most of the actual data and schema definitions and updates (more later ...) but i also downloaded MySQL Administrator from the MySQL site to configure and monitor the database server itself. they provide a .dmg disk image for the OS X version of the 5.0 server, which installs in &lt;code&gt;/usr/local/mysql&lt;/code&gt; and also adds a preference pane for automatic startup options. the actual OS X installer is a .pkg file and the whole experience is painless. i find a lot of companies don't give much thought to the OS X versions of their products, thinking "it's just BSD, isn't it?" so this is a welcome change.&lt;br /&gt;&lt;br /&gt;well, that's all for today. later this week i'll talk a bit about the libraries and other packages i'm using to actually write the application...&lt;br /&gt;&lt;br /&gt;&lt;div class="technorati-tags"&gt;&lt;a href="http://www.technorati.com/tag/devenv" rel="tag"&gt;devenv&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/java" rel="tag"&gt;java&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/j2ee" rel="tag"&gt;j2ee&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/eclipse" rel="tag"&gt;eclipse&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/subclipse" rel="tag"&gt;subclipse&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/ant" rel="tag"&gt;ant&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/howto" rel="tag"&gt;howto&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114007255109750590?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114007255109750590/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114007255109750590" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114007255109750590" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114007255109750590" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/t_83WoYHx0A/development-environment-one.html" title="development environment (one)" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2006/02/development-environment-one.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22530044.post-114007244233669420</id><published>2005-10-14T03:18:00.001+01:00</published><updated>2006-02-16T08:31:54.900Z</updated><title type="text">analog organisation?</title><content type="html">so, &lt;a href="http://www.palm.com/"&gt;palm&lt;/a&gt; have released some new handhelds (the &lt;a href="http://euro.palm.com/uk/en/products/tx/index.html"&gt;T|X&lt;/a&gt; which is a black, wifi enabled full-featured top of the range model, and the &lt;a href="http://euro.palm.com/uk/en/products/z22/index.html"&gt;Z22&lt;/a&gt;, an ipod white style entry lrvrl unit. i actually own the &lt;a href="http://euro.palm.com/uk/en/products/zire72/index.html"&gt;Zire 72s&lt;/a&gt;, which my family bought me for my thirtieth birthday (best. present. ever.) anyway, while reading about these, i noticed a comment in a review talking about &lt;em&gt;pocketmod&lt;/em&gt;. this is a paper based organiser, which is easily &lt;a href="http://www.pocketmod.com/app/index.html"&gt;made&lt;/a&gt; by printing the design on a sheet of A4 and folding/cutting as indicated. the site allows a whole range of pages to be chosen for your organiser, and they will form a nice, compact 8-page booklet.&lt;br /&gt;&lt;br /&gt;for some reason this origami organiser appeals to me, maybe just the alliteration?&lt;br /&gt;&lt;br /&gt;i actually use the &lt;a href="http://www.moleskine.it/eng/default.htm"&gt;moleskine&lt;/a&gt; notebooks, which are excellent, with cool features like a set of perforated pages that cab be torn out easily, and a little pocket at the back, as well as a ribbon bookmark and an elastic band to keep the notebook shut. i just happen to like writing with a pen and paper, i guess, and it lasts longer than  a laptop, since the batteries never run down... as soon as a lightweight laptop with the perfect handwriting interface comes out (newton, where are you now?) i'd buy that, until then, compromise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22530044-114007244233669420?l=grkvlt.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grkvlt.blogspot.com/feeds/114007244233669420/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22530044&amp;postID=114007244233669420" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114007244233669420" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22530044/posts/default/114007244233669420" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/consonants/~3/akN_z38Oduo/analog-organisation_14.html" title="analog organisation?" /><author><name>grkvlt</name><uri>http://www.blogger.com/profile/08567288684267343287</uri><email>andrewinternational@gmail.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13936831450144819190" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://grkvlt.blogspot.com/2005/10/analog-organisation_14.html</feedburner:origLink></entry></feed>
