<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.razie.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-20018300</atom:id><lastBuildDate>Sun, 14 Mar 2010 03:10:46 +0000</lastBuildDate><title>RazBlog</title><description>Razie's ramblings...</description><link>http://blog.razie.com/</link><managingEditor>noreply@blogger.com (Razie)</managingEditor><generator>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.razie.com/Razblog" /><feedburner:info uri="razblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-7276734972175648212</guid><pubDate>Sun, 14 Mar 2010 03:04:00 +0000</pubDate><atom:updated>2010-03-13T22:10:46.743-05:00</atom:updated><title>Blogger is stupid</title><description>Trying to edit a blog (&lt;a href="http://blog.homecloud.ca/2010/03/option-monad-pattern-thing.html"&gt;this one&lt;/a&gt;) I've had it: this editor right here is one of the worst I've used in a long time. It's still close to impossible to quote nice code snippets and the html it generates is riddled with DIV tags worse than a word document.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I guess this is the fate of things. The bad ones become good enough and the good get worse.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Shame. I shall investigate options to blogger, since the best voting is done with the feet...or, in this case, with the...fingertips...?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I shall create my own nice code quoting system, based on the &lt;a href="http://scripster.razie.com"&gt;scripster&lt;/a&gt; I just put together. I should probably thank them for the idea...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-7276734972175648212?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/25j9VCckRb4" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/25j9VCckRb4/blogger-is-stupid.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2010/03/blogger-is-stupid.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-1307161256424076347</guid><pubDate>Fri, 26 Feb 2010 16:17:00 +0000</pubDate><atom:updated>2010-02-26T11:52:53.752-05:00</atom:updated><title>Implementing a state machine in scala DSL</title><description>I had a bit of fun in the past few days writing a telnet server implementation in #scala. Part of that was implementing a state machine, which I then cleaned up so the definitions are simple.&lt;br /&gt;&lt;br /&gt;Here's a sample state machine:&lt;br /&gt;&lt;pre name="code" class="scala"&gt;&lt;br /&gt;class SampleSM extends razie.SM.StateMachine {&lt;br /&gt;import razie.SM._&lt;br /&gt;implicit val sm = this&lt;br /&gt;&lt;br /&gt;val states @ (s1, s2, s3) = ("s1", "s2", "s3")&lt;br /&gt;override def start = state("s1") // TODO there's an issue if i use s1 instead of "s1"&lt;br /&gt;&lt;br /&gt;override val transitions : Seq[Transition] =&lt;br /&gt;   (s1, 2)               -&gt; s2 ::&lt;br /&gt;   (s1, 0)               -&gt; s1 :: // NOP&lt;br /&gt;   (s2, 1)               -&gt; s1 + echo ("back to s1") :: // CR&lt;br /&gt;   (s2, 3)               -&gt; s3 ::&lt;br /&gt;   (s3, Seq(4, 5, 6, 7)) -&gt; s2 ::&lt;br /&gt;   (s3, AnyEvent)        -&gt; s1 ::&lt;br /&gt;   (s2, {_:Event=&gt;true}) -&gt; s2 + eatChar + echo ("s2 eats all others") :: // eating stuff&lt;br /&gt;   (""".*""".r, -1)      -&gt; s1 :: // some reset event applies to all states&lt;br /&gt;    Nil&lt;br /&gt;&lt;br /&gt;def eatChar (sm:StateMachine, t:Transition, e:Event) =&lt;br /&gt; println ("ate char: " + e.asInstanceOf[IEvent].i.toChar)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;object SampleSMain extends Application {&lt;br /&gt;implicit def e (i:Int) = SM.IEvent(i)&lt;br /&gt;val sm = new SampleSM()&lt;br /&gt;sm move 2 move 1 move 3 move -1 move 2 move 3 move 6 move 59&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The code is at &lt;a href="http://code.google.com/p/razie/source/browse/trunk/razie/src/razie/SM.scala"&gt;http://code.google.com/p/razie/source/browse/trunk/razie/src/razie/SM.scala&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The basic structure is:&lt;br /&gt;&lt;pre&gt; (state, event-matcher) -&gt; newstate + callback ++ unitcalback... + callback :: Nil&lt;/pre&gt;The event-matcher can be:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;an event&lt;/li&gt;&lt;li&gt;a sequence of events&lt;/li&gt;&lt;li&gt;a function taking an event and returning...Boolean, of course&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The callback is a function with either of these signatures:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;def push (sm:StateMachine, t:Transition, e:Event) - use + for these&lt;br /&gt;&lt;/li&gt;&lt;li&gt;def reset : Unit - use ++ for these (hey, I'm still getting my head around advanced scala stuff)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Enjoy, and if you likee, contribute, eh?&lt;br /&gt;&lt;br /&gt;Here's the definition (in-work) of the high-level telnet state machine, a little more complicated but not much.&lt;br /&gt;&lt;br /&gt;The picture (thanks to &lt;a href="http://tomi.vanek.sk/index.php?page=telnet"&gt;http://tomi.vanek.sk/index.php?page=telnet&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://tomi.vanek.sk/static/telnet/Telnet%20Parser.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer; width: 479px; height: 504px;" src="http://tomi.vanek.sk/static/telnet/Telnet%20Parser.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The state machine (when it's ready I'll post the link to the entire code):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// based on diagram at http://tomi.vanek.sk/index.php?page=telnet&lt;br /&gt;&lt;br /&gt;implicit val sm = this&lt;br /&gt;&lt;br /&gt;val sstates @ (data, cmd, app, param, neg, subneg) = ("data", "cmd", "app", "param", "neg", "subneg")&lt;br /&gt;override def start = state("data")&lt;br /&gt;&lt;br /&gt;override val transitions : Seq[Transition] =&lt;br /&gt;      (data, IAC)             -&gt; cmd ::&lt;br /&gt;      (data, 0)               -&gt; data :: // NOP - don't know why i get these after CR&lt;br /&gt;      (data, 10)              -&gt; data :: // NOP - LF ignored?&lt;br /&gt;      (data, 13)              -&gt; data + eatLine + echo ("") :: // CR&lt;br /&gt;      (data, {_:Event=&gt;true}) -&gt; data + eatChar + echo ("") :: // remaining chars&lt;br /&gt;      (cmd, IAC)              -&gt; data ::&lt;br /&gt;      (cmd, Seq(WILL, WONT, DO, DONT)) -&gt; neg + push ::&lt;br /&gt;      // TODO 3-2 should negociate stuff, i.e. reply with will/won't&lt;br /&gt;      (neg, {_:Event=&gt;last==SM(DO)})   -&gt; data + mode(true) + pop ::&lt;br /&gt;      (neg, {_:Event=&gt;last==SM(DONT)}) -&gt; data + mode(false) + pop ::&lt;br /&gt;      (neg, AnyEvent) -&gt; data + echo("interesting sequence...") + pop ::  // What is this?&lt;br /&gt;      (cmd, SB) -&gt; subneg ::&lt;br /&gt;      (""".*""".r, CR) -&gt; data :: // it's important to reset the thing on ENTRE&lt;br /&gt;       Nil&lt;br /&gt;&lt;br /&gt; def eatChar (sm:StateMachine, t:Transition, e:Event)&lt;br /&gt; def eatLine (sm:StateMachine, t:Transition, e:Event)&lt;br /&gt;&lt;/pre&gt;Enjoy and, more importantly, have fun!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you'd like to read more of my rants about scala, see &lt;a href="http://wiki.homecloud.ca/thinking-in-scala"&gt;http://wiki.homecloud.ca/thinking-in-scala&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-1307161256424076347?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/toUE2aBmVNQ" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/toUE2aBmVNQ/implementing-state-machine-in-scala-dsl.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2010/02/implementing-state-machine-in-scala-dsl.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-8550380359595565107</guid><pubDate>Wed, 20 Jan 2010 17:48:00 +0000</pubDate><atom:updated>2010-01-20T12:54:43.224-05:00</atom:updated><title>Start dowloading torrents remotely</title><description>Say you're at work and you stumble onto a torrent you'd like to watch tonite (some documentary or the latest episode from &lt;a href="http://www.cbc.ca/nextprimeminister/blog/2008/03/download_canadas_next_great_pr.html"&gt;http://www.cbc.ca/nextprimeminister/blog/2008/03/download_canadas_next_great_pr.html&lt;/a&gt;). &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, here's one way to do it...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Run uTorrent at home, 24/7, even if it's not downloading anything. Configure it to automatically load torrents from a folder say "torrentstodo". This is in Preferences/Directories at the bottom.&lt;/div&gt;&lt;div&gt;2. Install LiveMesh both at home and at work&lt;/div&gt;&lt;div&gt;3. map this folder as shared on both computers: right click and say "share with LiveMesh" at home and at work just right click the "LiveMesh Folders" in explorer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then, when you like a torrent, save it to the local "torrentstodo" folder at work. LiveMesh will transfer it at home automatically. Then uTorrent will pick it up and start downloading it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Please don't steal copyrighted material when it's easily available (online) at a reasonable price :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-8550380359595565107?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/mb8aSMRWN9E" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/mb8aSMRWN9E/start-dowloading-torrents-remotely.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2010/01/start-dowloading-torrents-remotely.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-4030714006765749396</guid><pubDate>Fri, 11 Dec 2009 22:01:00 +0000</pubDate><atom:updated>2009-12-11T17:08:45.207-05:00</atom:updated><title>I'm a Code Manager</title><description>Product Manager, Project Manager, HR - i.e. People Manager, Technical Account Manager, Development Manager, Build Manager....and developers. Some develop and the rest manage stuff.&lt;br /&gt;&lt;br /&gt;WRONG!&lt;br /&gt;&lt;br /&gt;You know what? I want to be called by my new title: Code Manager. Everyone manages something and I manage code.&lt;br /&gt;&lt;br /&gt;THERE!&lt;br /&gt;&lt;br /&gt;I guess I missed the many architects, we can call them Code Benders - hey, I actually like that!&lt;br /&gt;&lt;br /&gt;Happy coding!&lt;br /&gt;&lt;br /&gt;P.S. I think I left out the Resource Manager - as in some companies, people are known as "resources". So in a project, the Project Mananger can choose 3 resources: a cofee machine, a printer and a developer. WRONG. I'm a Code Manager, not a resource, so please...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-4030714006765749396?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/IHhQA9PDJpo" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/IHhQA9PDJpo/im-code-manager.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2009/12/im-code-manager.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-1087119816086677689</guid><pubDate>Thu, 24 Sep 2009 15:35:00 +0000</pubDate><atom:updated>2009-09-24T11:54:05.809-04:00</atom:updated><title>My Nokia 770</title><description>I love my Nokia 770 and it's much more useful than the iPod - I must say...Since I was bashing all device manufacturers other than Apple, I must exclude Nokia from the list...&lt;br /&gt;&lt;br /&gt;Having the courage to come up with a Linux-based Internet tablet, when they did, puts them squarely in front of Apple...&lt;br /&gt;&lt;br /&gt;The thing is that I use them both (iPod Touch and the 770) as remotes to &lt;a href="http://wiki.homecloud.ca/WatchMovie"&gt;control movie playing at home&lt;/a&gt; and the Nokia is better equiped to be the remote. It is a little bulkier and sluggish to reconnect the WiFi, but the web browsing experience is much better, for the simple pages my application requires (larger screen helps, but the ergonomics of full-page and persistent zoom are what make it the better one).&lt;br /&gt;&lt;br /&gt;Fully customisable home screen and a host of applications out-of-the-box actually make it the winner...just to think that I've had it for a few years now and it cost half what the iPod did...why is this new iPod touch so backwards? Target market? Well, I guess simplicity does have its benefits...it is a &lt;span style="font-style: italic;"&gt;portable&lt;/span&gt; music player first of all!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-1087119816086677689?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/fNObEyatngs" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/fNObEyatngs/my-nokia-770.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2009/09/my-nokia-770.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-8661873191875399330</guid><pubDate>Mon, 21 Sep 2009 16:08:00 +0000</pubDate><atom:updated>2009-09-21T12:32:44.586-04:00</atom:updated><title>iPods suck nicely</title><description>Just gave in and got the new iPod Touch (32G) this weekend. Let's see...&lt;br /&gt;&lt;br /&gt;Couldn't even take it out of the box - I was afraid to break it - I went back and asked a "Mac Helper" for help and he explained how to take it out - apparently Apple just won the abnormal packaging contest!&lt;br /&gt;&lt;br /&gt;Walked again out of the store only to come back: when turned on, the thing only displays an image suggesting plugging its USB into iTunes. I had to go back and explained that I just paid 400$ for a toy that doesn't work...they finally convinced me to just refrain from returning it and wait until I got home to plug it in and see what's what.&lt;br /&gt;&lt;br /&gt;Well - finally got home and started playing with it. It does grow on you and you start to wonder how come every OTHER device manufacturer out there seems to be sooo stupid. They do deserve the market share they're left with!&lt;br /&gt;&lt;br /&gt;But then you start to notice the noticeables:&lt;br /&gt;- the only dark screen is the home screen...most others are the same stupid black on white as your microsoft outlook...and there's no obvious way to change the "skin".&lt;br /&gt;- the browser, while smart, is also stupid. I.e. the "zoom", while nicely done with the pinching manouver, is not remembered when you click on the next page&lt;br /&gt;- the home screen doesn't go wide when you turn the thing...non-sensical since when you can go back and forth between "wide" apps, you pass through the home screen and have to turn the thing again...&lt;br /&gt;&lt;br /&gt;Overall, they can get away with all these, just because the thing is so nice in many other ways...but it goes to prove the limits of every day life - nobody's perfect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-8661873191875399330?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/WTqYQSzA9XA" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/WTqYQSzA9XA/ipods-suck-nicely.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2009/09/ipods-suck-nicely.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-5645985736880659758</guid><pubDate>Thu, 17 Sep 2009 03:50:00 +0000</pubDate><atom:updated>2010-01-22T12:48:03.049-05:00</atom:updated><title>converting Java collections to scala collections</title><description>This took me many hours to figure out. I didn't find a word about it in the (quite a bit of) stuff I read, including the "Programming in Scala" book, blogs, posts etc.&lt;br /&gt;&lt;br /&gt;How to best convert java collections into scala collections and back. This is crucial, as lots of would-be scalaistas would still carry around some kind of Java library, be it JNDI or JTA or some in-house non-rewritables!&lt;br /&gt;&lt;br /&gt;As of scala 2.7, scala.collection.jcl.Convertions is your friend. As of scala 2.8, scala.collection.JavaConversions is your best friend. Enough said.&lt;br /&gt;&lt;br /&gt;Interestingly, I use List pretty much everywhere in my code. However, as you'll see, since List is the only one that doesn't freely convert from one to the other, it follows that you should use Seq[A] in all your scala code...hmmmm&lt;br /&gt;&lt;br /&gt;[later edit] Also, your arguably best friend in scala is the scala.collections.mutable.ListBuffer - check it out, it's all you thought List would be! Although, after a while, you will find yourself relying on mutable collections less and less...&lt;br /&gt;&lt;br /&gt;To get the full power of the implicit java to scala conversions, make sure you import the contents of the class, note the underscore below:&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span"  style="color:#FF0000;"&gt;import scala.collection.JavaConversions._&lt;/span&gt;&lt;/pre&gt;[Later edit] I removed my examples here as being too clumsy :) use the import above instead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-5645985736880659758?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/Rm5Q996M2Fs" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/Rm5Q996M2Fs/converting-java-collections-to-scala.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2009/09/converting-java-collections-to-scala.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-4964447402674024615</guid><pubDate>Tue, 11 Aug 2009 20:25:00 +0000</pubDate><atom:updated>2009-08-11T16:27:32.141-04:00</atom:updated><title>Increase battery capacity to 123% :)</title><description>&lt;a href="http://2.bp.blogspot.com/_AgcP7L_T8ZQ/SoHUJ6AfTQI/AAAAAAAAAE0/1kZHmvOp83w/s1600-h/battery.PNG"&gt;&lt;img style="MARGIN: 0px 0px 10px 10px; WIDTH: 303px; FLOAT: right; HEIGHT: 103px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5368805497457560834" border="0" alt="" src="http://2.bp.blogspot.com/_AgcP7L_T8ZQ/SoHUJ6AfTQI/AAAAAAAAAE0/1kZHmvOp83w/s320/battery.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Just got this "warning" from my own laptop...no comments!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-4964447402674024615?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/GN7f_NNLlkE" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/GN7f_NNLlkE/increase-battery-capacity-to-123.html</link><author>noreply@blogger.com (Razie)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_AgcP7L_T8ZQ/SoHUJ6AfTQI/AAAAAAAAAE0/1kZHmvOp83w/s72-c/battery.PNG" height="72" width="72" /><feedburner:origLink>http://blog.razie.com/2009/08/increase-battery-capacity-to-123.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-7812248735757975469</guid><pubDate>Fri, 05 Jun 2009 14:51:00 +0000</pubDate><atom:updated>2009-06-05T10:55:05.843-04:00</atom:updated><title>Process Explorer - me likee</title><description>Installed this &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"&gt;Process Explorer &lt;/a&gt;a while back and it replaces the windows classic Task management stuff which is hopeless!&lt;br /&gt;&lt;br /&gt;I love it. The best features are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;it shows a lot of information about what's running&lt;/li&gt;&lt;li&gt;you can search for a process just by typing the name&lt;/li&gt;&lt;li&gt;when you say "kill" it actually kills them asap rather than think and wait and ask for confirmation about 10 times...&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Whoa! Goodie! Me likee.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-7812248735757975469?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/qmpZG_Sypj4" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/qmpZG_Sypj4/process-explorer-me-likee.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2009/06/process-explorer-me-likee.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-3479036256209147430</guid><pubDate>Thu, 14 May 2009 16:59:00 +0000</pubDate><atom:updated>2009-05-14T13:08:34.871-04:00</atom:updated><title>Your own newspaper</title><description>Here's the culmination of the freedom from the mainstream: you can create your own newspaper, from the feeds you want: &lt;a href="http://feedjournal.com/index.html"&gt;http://feedjournal.com/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not only are we using feed readers, we can now print our own newspapers - that's so cool...interestingly enough, this is just another of the &lt;a href="http://www.amazon.ca/Sovereign-Individual-Mastering-Transition-Information/dp/0684832720"&gt;Sovereign Individual &lt;/a&gt;predictions...&lt;br /&gt;&lt;br /&gt;And...to complete the picture, for the retarded sites that don't support content feeds, here's a free service that does it: &lt;a href="http://changedetection.com"&gt;ChangeDetection&lt;/a&gt;. It is simple to use and no catches that I could find...&lt;br /&gt;&lt;br /&gt;If you're looking, there's actually more of these page2rss services, including &lt;a href="http://page2rss.com"&gt;http://page2rss.com&lt;/a&gt; - really simple! The &lt;a href="http://www.watchthatpage.com/"&gt;http://www.watchthatpage.com/&lt;/a&gt; seems more complicated, while &lt;a href="http://www.followthatpage.com/"&gt;http://www.followthatpage.com/&lt;/a&gt; can do only email...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Happy newsprinting!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-3479036256209147430?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/1uxL8A2QqJU" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/1uxL8A2QqJU/your-own-newspaper.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2009/05/your-own-newspaper.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-4657128882461953782</guid><pubDate>Tue, 21 Apr 2009 16:50:00 +0000</pubDate><atom:updated>2009-05-04T12:13:45.831-04:00</atom:updated><title>Optional arguments in Scala</title><description>I couldn't find much on the web with this search and it took me maybe 15 min to figure it out, so here's the low down on using optional arguments in Scala. There's a description in section 8.8 in the Programming in Scala book - they call them "repeated parameters".&lt;br /&gt;&lt;br /&gt;Using this notation you can overload Java methods with optional parms as well as pass them over to a "super." method (which was what I needed to do):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def takesOptionalArgs (x:String*) = {&lt;br /&gt;   println ("Scala println: ", x.mkString(" "))&lt;br /&gt;   java.lang.System.out.printf ("Java printf: %s %s %s", x:_*)&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This special syntax instructs the compiler to pass the x array elements individually, not as an array!&lt;br /&gt;&lt;br /&gt;Cheers.&lt;br /&gt;&lt;br /&gt;[later edit] P.S. Note that there's an outstanding defect for overloading java vararg methods - it currently doesn't work: &lt;a href="https://lampsvn.epfl.ch/trac/scala/ticket/1459"&gt;https://lampsvn.epfl.ch/trac/scala/ticket/1459&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-4657128882461953782?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/j2ng50Vukt0" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/j2ng50Vukt0/optional-arguments-in-scala.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2009/04/optional-arguments-in-scala.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-809872695050601243</guid><pubDate>Tue, 14 Apr 2009 18:13:00 +0000</pubDate><atom:updated>2009-04-14T14:21:11.637-04:00</atom:updated><title>Agile Architecture talk from Coplien</title><description>&lt;p&gt;For a nice glimpse at the future of programming as it evolves, I strongly recommend this talk from my favorite architecture guy: Coplien. Prerequisites: get a beer, slippers and a robe, the conclusion is not light reading!&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.jaoo.dk/2009/03/04/handling-architecture-in-the-agile-world/"&gt;http://blog.jaoo.dk/2009/03/04/handling-architecture-in-the-agile-world/&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Some of the things that deserve emphasis:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The need that the application’s own model matches the model the users have in their head, i.e. the “view of the world” is obvious, but, unfortunately, it is not obvious to many…&lt;/li&gt;&lt;li&gt;Architecture is the essence of structure (the form), not the structure itself. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;A good agile/lean architecture:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;supports change&lt;/li&gt;&lt;li&gt;Supports user interaction&lt;/li&gt;&lt;li&gt;Lowers discovery costs, rework&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Other memorables:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Habitable code – code where the designer could choose to live. Do you like your code? Would you live with it?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Refactoring is bad! We want to avoid re-work…you need a system view, not code–as-you-think!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The long forgotten purpose of OO is to capture the model from the user’s mind, not create toys for developers!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;(Razie says hmm): Do object diagrams instead of class diagrams – users think in terms of instances, not abstract classes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The GUI is not something between the GUI and the model, is a tool allowing the user to mess with the model! Kent Beck said “you can’t hide a bad architecture behind a good GUI”.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;(Razie says hmm): Requirements are the LAST thing you look at when doing architecture!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Need architecture upfront, code just-in-time!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Java is a TOY language.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Scala’s got traits, baby!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This is the brief follow up: &lt;a href="http://blog.jaoo.dk/2008/12/20/jaoo-video-2008-james-o-coplien/"&gt;http://blog.jaoo.dk/2008/12/20/jaoo-video-2008-james-o-coplien/&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Peter Coad’s now a pilot, but his role-based color modeling should’ve taken off! &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-809872695050601243?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/iw_UI2UXC2U" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/iw_UI2UXC2U/agile-architecture-talk-from-coplien.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2009/04/agile-architecture-talk-from-coplien.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-2111007781862265238</guid><pubDate>Thu, 12 Mar 2009 14:44:00 +0000</pubDate><atom:updated>2009-03-12T10:49:19.254-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">design</category><category domain="http://www.blogger.com/atom/ns#">architecture</category><category domain="http://www.blogger.com/atom/ns#">principle</category><title>Components vs Frameworks</title><description>ABSTRACT: One of Razie's infamous uber-principles: I see frameworks as being the opposite of components. When architecting parts of a system, use this to decide on one or the other - this point of view could enrich the designer's arsenal of decision principles.&lt;br /&gt;TAGS: architecture, design, principle&lt;br /&gt;&lt;br /&gt;When you're talking about "writing code", the best option is generally reusing an existing piece of code and customizing it. Reusable pieces of code are normally in the category of either components or frameworks.&lt;br /&gt;&lt;br /&gt;Components are more or less black boxes with well defined inputs/outputs and customization settings.&lt;br /&gt;&lt;br /&gt;Frameworks, while they may also have defined inputs/outputs, they generally cannot be used as is. You write "plugins" (i.e. proxies or strategies) that customize a piece of the puzzle and then combine them to achieve the functionality the framework is intended for.&lt;br /&gt;&lt;br /&gt;I see frameworks as being the opposite of components, given how they're used: while components are pre-determined pieces of functionality, which you combine to achieve a flexible structure, frameworks define first an immutable structure and then allow you to customize some aspects of it.&lt;br /&gt;&lt;br /&gt;Patterns fall sqarely in the framework category, since they prescribe a structure with roles to fill out.&lt;br /&gt;&lt;br /&gt;In terms of initialization and configuration, components get everything up-front, while frameworks usually will use a callback to retrieve configuration, when needed. At least it's easier to always follow this pattern: use of factories indicates frameworks, for instance.&lt;br /&gt;&lt;br /&gt;Depending on the level you're at and your point of view, it is relative whether a given library falls in either category. For instance, a component could take a "strategy" as an input.&lt;br /&gt;&lt;br /&gt;When you look at a system, you will see components made of frameworks, made of components, made of frameworks etc. A system is made of sub-systems, which can only be of either kind :) since they're the two opposite forms of sub-system architecture.&lt;br /&gt;&lt;br /&gt;CONCLUSION&lt;br /&gt;&lt;br /&gt;Making the distinction and decision between component vs. framework, when designing, is important, since the denomination of "component" carries lots of semantics: independence, self-sufficiency, black-box, upfront initialization etc.&lt;br /&gt;&lt;br /&gt;Frameworks allow flexibility in the detail but are inflexible structure-wise. A framework that is too flexible is called a mess.&lt;br /&gt;&lt;br /&gt;A framework with all variabilities fixed is a component.&lt;br /&gt;&lt;br /&gt;Keep thinking and have fun, eh? I certainly am!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-2111007781862265238?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/DBlHZ4bH0-k" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/DBlHZ4bH0-k/components-vs-frameworks.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2009/03/components-vs-frameworks.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-4294438285939674855</guid><pubDate>Tue, 17 Feb 2009 17:18:00 +0000</pubDate><atom:updated>2009-02-18T14:39:53.536-05:00</atom:updated><title>Google Chrome and your passwords in clear-text</title><description>It was fun using the "remember passwords" feature until i figured out that Chrome will show your remembered passwords in clear-text...&lt;br /&gt;&lt;br /&gt;...it's probably the worse feature I've seen implemented so far, this year...but it's just february...and you didn't see what I have to say about CIRA-the Canandian internet registrar- yet, eh?&lt;br /&gt;&lt;br /&gt;[later edit]...this is especially evil since now evildoers could change the passwords to all your accounts and lock you out - otherwise, even if they find your laptop logged into all those accounts, they couldn't change your password before you did...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-4294438285939674855?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/2tFMLuDNgvQ" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/2tFMLuDNgvQ/google-chrome-and-your-passwords-in.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2009/02/google-chrome-and-your-passwords-in.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-8880714131354615570</guid><pubDate>Tue, 10 Feb 2009 17:27:00 +0000</pubDate><atom:updated>2009-02-18T14:43:04.673-05:00</atom:updated><title>Stupid feedburner</title><description>Sorry folks, after many troubles and wasted time trying to get my feedburner feed to work, AFTER migration to google, I am giving up on using feedburner. It's the worse cloud ever and the worse migration of anything, ever!&lt;br /&gt;&lt;br /&gt;This will be my feed. Yahoo pipes rock!&lt;br /&gt;&lt;br /&gt;xxx url&lt;br /&gt;&lt;br /&gt;Cheers!&lt;br /&gt;&lt;br /&gt;[later edit] ... came to my senses...they still suck, but you should use this feed instead: &lt;a href="http://feeds.razie.com/Razvan"&gt;http://feeds.razie.com/Razvan&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-8880714131354615570?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/yC5FYQLJYOI" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/yC5FYQLJYOI/stupid-feedburner.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2009/02/stupid-feedburner.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-1515391378955398057</guid><pubDate>Thu, 27 Nov 2008 13:51:00 +0000</pubDate><atom:updated>2008-11-27T08:56:50.379-05:00</atom:updated><title>Finally, a simple BASIC for kids</title><description>I've been looking for almost a year for a very simple programming environment to get my kids started in programming - obviously BASIC comes to mind...but couldn't find any!!!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I know, it's unbelievable that there was no easy to use BASIC environment in the year 2008, but I'm not alone in that quest, read &lt;a href="http://www.salon.com/tech/feature/2006/09/14/basic/index.html"&gt;Why Johnny Can't Code&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally, I found and downloaded today a "simple basic" from the big "evil" dogs: &lt;a href="http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx"&gt;http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It works, it's very simple. It can have a litle more glitz in how it indicates the errors, but I love the content assist, although it doesn't actually complete the arguments but hey...it's better than Z80...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sweet, now i don't have to explain to my 8 year-old why he needs "static void main (String[] argv)" to write "Hello, Andrei".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-1515391378955398057?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/ONT-XUjkCII" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/ONT-XUjkCII/finally-simple-basic-for-kids.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2008/11/finally-simple-basic-for-kids.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-7653075942415266890</guid><pubDate>Fri, 06 Jun 2008 20:28:00 +0000</pubDate><atom:updated>2008-06-06T16:32:27.954-04:00</atom:updated><title>testing disqus</title><description>apparently this disqus.com is a nice comment manager for blogs, where comments are managed in discussion threads etc. I moved my blogger to use disqus and I am now curious to see how it looks like.&lt;br /&gt;&lt;br /&gt;I'm assuming the comments will now be stored on the disqus site and meshed into my blog...&lt;br /&gt;&lt;br /&gt;I wonder what other use is there for this, other than just degenerate comments into threaded discussions...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-7653075942415266890?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/8XkZtGjtrAA" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/8XkZtGjtrAA/testing-disqus.html</link><author>noreply@blogger.com (Razie)</author><feedburner:origLink>http://blog.razie.com/2008/06/testing-disqus.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-2205331987102667210</guid><pubDate>Wed, 16 Apr 2008 21:28:00 +0000</pubDate><atom:updated>2008-04-16T17:30:18.164-04:00</atom:updated><title>online graph, tag-based browsing</title><description>this type of technology, I believe, will be uniquitous in due time...it is really interesting to see the relationships that form. Graph mind-mappers are old, but this one's online based on flickr pic tags - really interesting:&lt;br /&gt;&lt;a href="http://taggraph.com/everybody/motorcycle"&gt;http://taggraph.com/everybody/motorcycle&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-2205331987102667210?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/zyvYfmWYhAo" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/zyvYfmWYhAo/online-graph-tag-based-browsing.html</link><author>noreply@blogger.com (Razie)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.razie.com/2008/04/online-graph-tag-based-browsing.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-2177116874472760438</guid><pubDate>Tue, 13 Nov 2007 16:37:00 +0000</pubDate><atom:updated>2007-11-13T11:39:59.104-05:00</atom:updated><title>new 105 km/h speed limit for trucks?</title><description>I sent this open letter to the Minister of Transportation and the Prime Minister of Ontario.&lt;br /&gt;&lt;br /&gt;I think this is a relevant issue that will affect us all every day.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The government is to promote truck-related accidents?&lt;br /&gt;&lt;br /&gt;I hear this more often: the government is thinking to limit the speed of heavy vehicles to 105 km/h. I challenge that that will actually cause more accidents, fatal ones too, due to a serious increase in truck traffic as well as the number of car-truck incidents.&lt;br /&gt;&lt;br /&gt;You surely know that most studies as well as common sense indicates that what causes collisions is not that much the absolute speed, but the difference in speed between vehicles. If three lanes of traffic are flowing down any 400 series at 120-130 km/h, there will be no accidents, no tailgating, no unsafe lane changes, nothing but a reasonably safe and steady flow of commuter cars.&lt;br /&gt;&lt;br /&gt;Assume now that those three or four lanes of packed traffic encounter a 50 ton, 18-wheeled speed hump doing 100 km/h down the middle. I have witnessed this first hand and I can tell you that you’ll see traffic scatter, unsafe speed and lane changes, heavy braking on all lanes, nothing safe, really! And this would happen every day, everywhere on our major highways!&lt;br /&gt;&lt;br /&gt;Now I see Quebec politicians proposing this as a law. I see the Canada Safety Council supporting this 105 km/h limit, stating that it will “reduce highway collisions related to tailgating and improper lane changes”, which are exactly the effects I witnessed first hand. Several truck collisions I heard of recently in the GTA were caused by cars cutting them off, another incident that will happen more frequently, given increased driver frustration and road-rage incidents.&lt;br /&gt;&lt;br /&gt;When we know the actual mean traffic speeds on the 400 series to be between 120-130 km/h especially outside the city, why on earth would it be safer to limit trucks to well below these speeds? Mind you, trucks do need to cross 3 or 7 lanes of traffic, even from left to right, to take certain exits or ramps.&lt;br /&gt;&lt;br /&gt;One of jokes I like most is about the plans, in Britain, to start driving on the right side of the road: the first day they’d switch the trucks and the second day the rest of the vehicles. Amusing, but I used to think it is an aberration…until now, that is!&lt;br /&gt;&lt;br /&gt;I urge you to let citizens focus on driving rather than dodging 18 wheelers. While a limit might make sense, 115 km/h is a perhaps manageable difference of only 10 km/h versus actual traffic speeds and overall a lot more safe and flexible while rooting out the inconsiderate speed daemons.&lt;br /&gt;&lt;br /&gt;In terms of traffic, it seems to me that merchandise will move 10% slower at 105 km/h vs. 115 km/h, meaning that at any point in time, there will be 10% less trucks available to load/unload (the trucks being on the road for 10% more time than before); less merchandise will reach its destination in any given day. Since people will not suddenly eat 10% less food nor buy 10% less toys, it will require the addition of 10% more trucks, with additional costs, insurance, diesel, pollution etc. Increasing truck traffic by 20% increases the truck-related accidents by the same 20% or more. (The same amount of trucks is on the road for 10% more time, plus the new 10% more trucks needed, equals 20% increase in truck traffic on our roads, to move the same volume).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S. – On the speed limits.&lt;br /&gt;&lt;br /&gt;Before you reply that most citizens have no business exceeding the speed limits you so vigorously enforce, this is what they actually do and, by all accepted principles of law except Ontario’s traffic laws, what most people do defines the norm.&lt;br /&gt;&lt;br /&gt;The reason behind this105 km/h figure is the 100 km/h speed limit on our major highways. I have a hard time seeing what that limit has to do with actual traffic speeds, other than generate “government revenue” and put the people that actually observe it at risk. Study after study shows that drivers routinely ignore abnormally low speed limits and even that variations in speed limits (either up or down) do not cause significant changes in actual traffic speeds! People, on the average, drive with the speed they consider safe and reasonable for different sections of the road! Assuming anything else leads to the conclusion that the citizens of this country are either suicidal, bent on killing or impaired in some other ways, since most drive daily.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-2177116874472760438?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/kLPM8B_4lNI" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/kLPM8B_4lNI/new-105-kmh-speed-limit-for-trucks.html</link><author>noreply@blogger.com (Razie)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.razie.com/2007/11/new-105-kmh-speed-limit-for-trucks.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-113504516215124095</guid><pubDate>Tue, 20 Dec 2005 02:17:00 +0000</pubDate><atom:updated>2005-12-19T21:42:09.293-05:00</atom:updated><title>Good Software Design</title><description>Just saw another post somewhere with a nice definition of what makes a good design, something on the lines of “A good design allows your code to do things you never expected it to have to do”. [&lt;a href="http://jroller.com/page/fate?entry=the_black_art_of_good"&gt;http://jroller.com/page/fate?entry=the_black_art_of_good&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;Bang on...and enough...if you add some, I think obvious, other attributes: the said design must also be efficient, minimal and be reasonably generic (not super-generic, that is).&lt;br /&gt;&lt;br /&gt;This kind of extreme flexibility should be a side effect of good design, not a goal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-113504516215124095?l=blog.razie.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/XCmfkkMKQo4" height="1" width="1"/&gt;</description><link>http://feeds.razie.com/~r/Razblog/~3/XCmfkkMKQo4/good-software-design.html</link><author>noreply@blogger.com (Razie)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.razie.com/2005/12/good-software-design.html</feedburner:origLink></item></channel></rss>
