<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Michael Greenly</title>
    <description>programming, linux and other stuff.</description>    
    <link>http://blog.michaelgreenly.com</link>
    <atom:link href="http://blog.michaelgreenly.com/atom.xml" rel="self" type="application/rss+xml" />
    
      <item>
        <title>A Slow Goodbye to Ruby</title>
        <description>&lt;p&gt;I&amp;#39;ve been using &lt;strong&gt;&lt;a href=&quot;https://www.ruby-lang.org/en/&quot;&gt;Ruby&lt;/a&gt;&lt;/strong&gt; as my primary development language for over a decade now.  It&amp;#39;s been a wonderful tool but my requirements have changed.  Quickness of delivery is still very important to me but it no longer trumps runtime performance at all costs.&lt;/p&gt;

&lt;h3&gt;One Language To Rule Them All&lt;/h3&gt;

&lt;p&gt;I spent a very long time trying to find one language that could satisfy all my needs, for work and play.  I&amp;#39;ve given serious attention to 
&lt;strong&gt;&lt;a href=&quot;http://golang.org/&quot;&gt;Go&lt;/a&gt;&lt;/strong&gt;, 
&lt;strong&gt;&lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt;&lt;/strong&gt;, 
&lt;strong&gt;&lt;a href=&quot;http://www.erlang.org/&quot;&gt;Erlang&lt;/a&gt;&lt;/strong&gt;, 
&lt;strong&gt;&lt;a href=&quot;http://elixir-lang.org/&quot;&gt;Elixir&lt;/a&gt;&lt;/strong&gt;, 
&lt;strong&gt;&lt;a href=&quot;http://www.haskell.org/haskellwiki/Haskell&quot;&gt;Haskell&lt;/a&gt;&lt;/strong&gt; and 
&lt;strong&gt;&lt;a href=&quot;http://goo.gl/9RGQG&quot;&gt;Scheme&lt;/a&gt;&lt;/strong&gt;.  None of them did everything I wanted.&lt;/p&gt;

&lt;p&gt;I eventually realized my goal of finding a single language for work and play was just to ambitious.&lt;/p&gt;

&lt;h3&gt;&amp;quot;Go&amp;quot; For Work&lt;/h3&gt;

&lt;p&gt;My primary work requirements include; a large selection of libraries for web development, good development tools, large community, posix friendly behavior, performant runtime, and a quick iterative development process.  It turns out &lt;strong&gt;Go&lt;/strong&gt; covers all those points nicely.&lt;/p&gt;

&lt;p&gt;I was only overlooking it because I found the language so boring.&lt;/p&gt;

&lt;p&gt;Moving forward I&amp;#39;ll be transitioning to &lt;strong&gt;Go&lt;/strong&gt; for the majority of my work needs.&lt;/p&gt;

&lt;h3&gt;&amp;quot;Haskell&amp;quot;&lt;/h3&gt;

&lt;p&gt;I&amp;#39;ve just recently abandoned my third significant attempt to fall in love with &lt;strong&gt;Haskell&lt;/strong&gt;.  It&amp;#39;s certainly a wonderful language but I&amp;#39;m finally willing to admit it&amp;#39;s just not for me.  It&amp;#39;s not because I don&amp;#39;t get it.  It&amp;#39;s just that I don&amp;#39;t like like lazy evaluation, the extra ceremony of monads or it&amp;#39;s syntax.&lt;/p&gt;

&lt;h3&gt;&amp;quot;OCaml&amp;quot;&lt;/h3&gt;

&lt;p&gt;I&amp;#39;ve recently started to explore &lt;strong&gt;OCaml&lt;/strong&gt;.  At least from the outside it looks like &lt;strong&gt;Haskell&lt;/strong&gt; with eager evaluation, side effects and a more regular syntax.  At this point I&amp;#39;m very hopeful but we&amp;#39;ll see how I feel in a few weeks.  I&amp;#39;m sure it has some rough edges somewhere.&lt;/p&gt;

&lt;h3&gt;One Language For Play.&lt;/h3&gt;

&lt;p&gt;When I&amp;#39;m done surveying languages, I think &lt;strong&gt;OCaml&lt;/strong&gt; is the last, I&amp;#39;ll select one language to focus on for a few years.  I want to truly master one language. &lt;/p&gt;

&lt;p&gt;At this point it looks like that language will most likely be &lt;strong&gt;OCaml&lt;/strong&gt; or &lt;strong&gt;Scheme&lt;/strong&gt;.&lt;/p&gt;
</description>
        <pubDate>Sat, 26 Jul 2014 00:00:00 -0500</pubDate>
        <link>http://blog.michaelgreenly.com/2014/07/26/slow-goodbye-to-ruby.html</link>
        <guid isPermaLink="true">http://blog.michaelgreenly.com/2014/07/26/slow-goodbye-to-ruby.html</guid>
      </item>
    
      <item>
        <title>Gauche Scheme for Ruby Programmers</title>
        <description>&lt;p&gt;If you&amp;#39;re a Ruby programmer that&amp;#39;s interested in &lt;a href=&quot;http://en.wikipedia.org/wiki/Scheme_(programming_language)&quot;&gt;Scheme&lt;/a&gt;
and haven&amp;#39;t yet taken the plunge, I recommend trying &lt;a href=&quot;http://practical-scheme.net/gauche/&quot;&gt;Gauche Scheme&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ruby is often described as being very lisp like. I find Gauche to be the most Ruby like lisp.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gauche is actively developed&lt;/li&gt;
&lt;li&gt;conforms to the most current Scheme standard (&lt;a href=&quot;http://en.wikipedia.org/wiki/Scheme_(programming_language)#R7RS&quot;&gt;R7RS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Starts extremely fast which is excellent for scripts.&lt;/li&gt;
&lt;li&gt;Supports native threads and has no &lt;a href=&quot;http://en.wikipedia.org/wiki/Global_Interpreter_Lock&quot;&gt;GIL&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Supports UTF-8 by default.&lt;/li&gt;
&lt;li&gt;Supports regular expressions.&lt;/li&gt;
&lt;li&gt;Everything is an object.&lt;/li&gt;
&lt;li&gt;Uses a Common Lisp like object system (&lt;a href=&quot;http://en.wikipedia.org/wiki/Common_Lisp_Object_System&quot;&gt;CLOS&lt;/a&gt;) that supports multiple dispatch.&lt;/li&gt;
&lt;li&gt;Provides a complete API over standard POSIX system calls.&lt;/li&gt;
&lt;li&gt;Includes a high level interface for evented IO built on Posix select.&lt;/li&gt;
&lt;li&gt;Supports extensions through C much like Ruby.&lt;/li&gt;
&lt;li&gt;Comes with a well structured and fairly complete standard library.&lt;/li&gt;
&lt;li&gt;Includes many &lt;a href=&quot;http://en.wikipedia.org/wiki/Scheme_Requests_for_Implementation&quot;&gt;SRFI&lt;/a&gt; by default.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What Gauche is missing compared to Ruby is the vast ecosystem of external libraries, tools, and users.&lt;/p&gt;

&lt;p&gt;What it provides instead is everything you&amp;#39;d expect from Scheme which makes a great foundation for building all the rest.&lt;/p&gt;

&lt;p&gt;If you happen to be running Linux you can install it with &lt;a href=&quot;https://github.com/mgreenly/gauche-simple-installer&quot;&gt;gsi&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you&amp;#39;re on any other operating system the Gauche website provides excellent instructions &lt;a href=&quot;http://practical-scheme.net/gauche/download.html&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, if you&amp;#39;re a Vim user (many Ruby programmers are), I strongly recomend &lt;a href=&quot;http://tmux.sourceforge.net/&quot;&gt;tmux&lt;/a&gt;, &lt;a href=&quot;https://github.com/jpalardy/vim-slime&quot;&gt;vim-slime&lt;/a&gt; and &lt;a href=&quot;https://bitbucket.org/kovisoft/paredit&quot;&gt;paredit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you&amp;#39;re really new to Scheme here&amp;#39;s some material that may help you get started.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=byofGyW2L10&amp;amp;list=PLfHYba8zC7hTNImXmUAxuPcmhpgWlZLAc&amp;amp;index=1&quot;&gt;Andy Balaam&amp;#39;s Feel the Cool videos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mitpress.mit.edu/sicp/full-text/book/book.html&quot;&gt;SICP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ccs.neu.edu/home/matthias/BTLS/&quot;&gt;The little Schemer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.scheme.com/tspl3/&quot;&gt;The Scheme Programming Language&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html&quot;&gt;Teach Yourself Scheme in Fixnum Days&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;ftp://ftp.cs.utexas.edu/pub/garbage/cs345/schintro-v14/schintro_toc.html&quot;&gt;Introduction to Scheme and its Implementation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Thu, 03 Jul 2014 00:00:00 -0500</pubDate>
        <link>http://blog.michaelgreenly.com/2014/07/03/guache-scheme-for-ruby-programmers.html</link>
        <guid isPermaLink="true">http://blog.michaelgreenly.com/2014/07/03/guache-scheme-for-ruby-programmers.html</guid>
      </item>
    
      <item>
        <title>Programming Languages</title>
        <description>&lt;p&gt;About a year ago I decided I wanted to learn a new programming language but I didn&amp;#39;t know which, so I spent a year investigating my options.&lt;/p&gt;

&lt;p&gt;If you are considering something similar I&amp;#39;d recommend looking at one descendant of &lt;a href=&quot;http://en.wikipedia.org/wiki/Forth_(programming_language)&quot;&gt;Forth&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Lisp_(programming_language)&quot;&gt;Lisp&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/ML_(programming_language)&quot;&gt;ML&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Prolog_(programming_language)&quot;&gt;Prolog&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Smalltalk_(programming_language)&quot;&gt;Smalltalk&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Each takes a truly unique approach to computing.&lt;/p&gt;
</description>
        <pubDate>Sun, 29 Jun 2014 00:00:00 -0500</pubDate>
        <link>http://blog.michaelgreenly.com/2014/06/29/programming-languages.html</link>
        <guid isPermaLink="true">http://blog.michaelgreenly.com/2014/06/29/programming-languages.html</guid>
      </item>
    
  </channel>
</rss>
