<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Squid's Blog</title><link>https://gigasquidsoftware.com/blog/2023/07/02/posts/</link><description>Recent content in Posts on Squid's Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 02 Jul 2023 12:31:00 +0000</lastBuildDate><atom:link href="https://gigasquidsoftware.com/blog/2023/07/02/posts/atom.xml" rel="self" type="application/rss+xml"/><item><title>Ciphers with Vector Symbolic Architectures</title><link>https://gigasquidsoftware.com/blog/2023/07/02/ciphers-with-vector-symbolic-architectures/</link><pubDate>Sun, 02 Jul 2023 12:31:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2023/07/02/ciphers-with-vector-symbolic-architectures/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://raw.githubusercontent.com/gigasquid/vsa-clj/main/examples/secret-message.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;A secret message inside a 10,000 hyperdimensional vector&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve seen in previous posts how we can encode data structures using &lt;a href="http://gigasquidsoftware.com/blog/2022/12/31/vector-symbolic-architectures-in-clojure/"&gt;Vector Symbolic Architectures in Clojure&lt;/a&gt;. This is an exploration of how we can use this to develop a cipher to transmit a secret message between two parties.&lt;/p&gt;
&lt;h3 id="a-hyperdimensional-cipher"&gt;A Hyperdimensional Cipher&lt;/h3&gt;
&lt;p&gt;Usually, we would develop a dictionary/ cleanup memory of randomly chosen hyperdimensional vectors to represent each symbol. We could do this, but then sharing the dictionary as our key to be able to decode messages would be big. Instead, we could share a single hyperdimensional vector and then use the protect/ rotation operator to create a dictionary of the alphabet and some numbers to order the letters. Think of this as the initial seed symbol and the rest being defined as &lt;code&gt;n+1&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Vector Symbolic Architectures in Clojure</title><link>https://gigasquidsoftware.com/blog/2022/12/31/vector-symbolic-architectures-in-clojure/</link><pubDate>Sat, 31 Dec 2022 15:41:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2022/12/31/vector-symbolic-architectures-in-clojure/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://live.staticflickr.com/65535/52596142860_c4cf8642b0_z.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;generated with Stable Diffusion&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Before diving into the details of what Vector Symbolic Architectures are and what it means to implement Clojure data structures in them, I&amp;rsquo;d like to start with some of my motivation in this space.&lt;/p&gt;
&lt;h2 id="small-ai-for-more-personal-enjoyment"&gt;Small AI for More Personal Enjoyment&lt;/h2&gt;
&lt;p&gt;Over the last few years, I&amp;rsquo;ve spent time learning, exploring, and contributing to open source deep learning. It continues to amaze me with its rapid movement and achievements at scale. However, the scale is really too big and too slow for me to enjoy it anymore.&lt;/p&gt;</description></item><item><title>Breakfast with Zero-Shot NLP</title><link>https://gigasquidsoftware.com/blog/2021/03/15/breakfast-with-zero-shot-nlp/</link><pubDate>Mon, 15 Mar 2021 09:07:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2021/03/15/breakfast-with-zero-shot-nlp/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://i.imgflip.com/51ror1.jpg"&gt;&lt;/p&gt;
&lt;p&gt;What if I told you that you could pick up a library model and instantly classify text with arbitrary categories without any training or fine tuning?&lt;/p&gt;
&lt;p&gt;That is exactly what we are going to do with &lt;a href="https://joeddav.github.io/blog/2020/05/29/ZSL.html"&gt;Hugging Face&amp;rsquo;s zero-shot learning model&lt;/a&gt;. We will also be using &lt;a href="https://github.com/clj-python/libpython-clj"&gt;libpython-clj&lt;/a&gt; to do this exploration without leaving the comfort of our trusty Clojure REPL.&lt;/p&gt;
&lt;h3 id="whats-for-breakfast"&gt;What&amp;rsquo;s for breakfast?&lt;/h3&gt;
&lt;p&gt;We&amp;rsquo;ll start off by taking some text from a recipe description and trying to decide if it&amp;rsquo;s for breakfast, lunch or dinner:&lt;/p&gt;</description></item><item><title>Thoughts on AI Debate 2</title><link>https://gigasquidsoftware.com/blog/2020/12/24/thoughts-on-ai-debate-2/</link><pubDate>Thu, 24 Dec 2020 10:59:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2020/12/24/thoughts-on-ai-debate-2/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://montrealartificialintelligence.com/aidebate2mosaic1440x720v8.jpg"&gt;&lt;/p&gt;
&lt;h2 id="ai-debate-2-from-montrealai"&gt;AI Debate 2 from Montreal.AI&lt;/h2&gt;
&lt;p&gt;I had the pleasure of watching the second AI debate from Montreal.AI last night. The first AI debate occurred last year between &lt;a href="https://yoshuabengio.org/"&gt;Yoshua Bengio&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Gary_Marcus"&gt;Gary Marcus&lt;/a&gt; entitled &lt;a href="https://montrealartificialintelligence.com/aidebate.html"&gt;“The Best Way Forward for AI”&lt;/a&gt; in which Yoshua argued that Deep Learning could achieve General AI through its own paradigm, while Marcus argued that Deep Learning alone was not sufficient and needed a hybrid approach involving symbolics and inspiration from other disciplines.&lt;/p&gt;</description></item><item><title>Clojure Interop with Python NLP Libraries</title><link>https://gigasquidsoftware.com/blog/2020/01/24/clojure-interop-with-python-nlp-libraries/</link><pubDate>Fri, 24 Jan 2020 15:34:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2020/01/24/clojure-interop-with-python-nlp-libraries/</guid><description>&lt;p&gt;&lt;img alt="clojure-python" loading="lazy" src="http:////live.staticflickr.com/65535/49435394578_400fdf1c7f_c.jpg"&gt;&lt;/p&gt;
&lt;p&gt;In this edition of the blog series of Clojure/Python interop with &lt;a href="https://github.com/cnuernber/libpython-clj"&gt;libpython-clj&lt;/a&gt;, we&amp;rsquo;ll be taking a look at two popular Python NLP libraries: &lt;a href="https://www.nltk.org/"&gt;NLTK&lt;/a&gt; and &lt;a href="https://spacy.io/"&gt;SpaCy&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="nltk---natural-language-toolkit"&gt;NLTK - Natural Language Toolkit&lt;/h2&gt;
&lt;p&gt;I was taking requests for doing examples of python-clojure interop libraries on twitter the other day, and by &lt;em&gt;far&lt;/em&gt; NLTK was the most requested library. After looking into it, I can see why. It&amp;rsquo;s the most popular natural language processing library in Python and you will see it everywhere there is text someone is touching.&lt;/p&gt;</description></item><item><title>Parens for Pyplot</title><link>https://gigasquidsoftware.com/blog/2020/01/18/parens-for-pyplot/</link><pubDate>Sat, 18 Jan 2020 15:39:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2020/01/18/parens-for-pyplot/</guid><description>&lt;p&gt;&lt;a href="https://github.com/cnuernber/libpython-clj"&gt;libpython-clj&lt;/a&gt; has opened the door for Clojure to directly interop with Python libraries. That means we can take just about any Python library and directly use it in our Clojure REPL. But what about &lt;a href="https://matplotlib.org/"&gt;matplotlib&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;Matplotlib.pyplot is a standard fixture in most tutorials and python data science code. How do we interop with a python graphics library?&lt;/p&gt;
&lt;h2 id="how-do-you-interop"&gt;How do you interop?&lt;/h2&gt;
&lt;p&gt;It turns out that matplotlib has a headless mode where we can export the graphics and then display it using any method that we would normally use to display a .png file. In my case, I made a quick macro for it using the shell &lt;code&gt;open&lt;/code&gt;. I&amp;rsquo;m sure that someone out that could improve upon it, (and maybe even make it a cool utility lib), but it suits what I&amp;rsquo;m doing so far:&lt;/p&gt;</description></item><item><title>Hugging Face GPT with Clojure</title><link>https://gigasquidsoftware.com/blog/2020/01/10/hugging-face-gpt-with-clojure/</link><pubDate>Fri, 10 Jan 2020 19:33:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2020/01/10/hugging-face-gpt-with-clojure/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://live.staticflickr.com/65535/49364554561_6e4f4d0a51_w.jpg"&gt;&lt;/p&gt;
&lt;p&gt;A new age in Clojure has dawned. We now have interop access to any python library with &lt;a href="https://github.com/cnuernber/libpython-clj"&gt;libpython-clj&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;Let me pause a minute to repeat.&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;** You can now interop with ANY python library. **&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;I know. It&amp;rsquo;s overwhelming. It took a bit for me to come to grips with it too.&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;Let&amp;rsquo;s take an example of something that I&amp;rsquo;ve &lt;em&gt;always&lt;/em&gt; wanted to do and have struggled with mightly finding a way to do it in Clojure:&lt;br&gt;
I want to use the latest cutting edge GPT2 code out there to generate text.&lt;/p&gt;</description></item><item><title>Integrating Deep Learning with clojure.spec</title><link>https://gigasquidsoftware.com/blog/2019/10/11/integrating-deep-learning-with-clojure.spec/</link><pubDate>Fri, 11 Oct 2019 13:51:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2019/10/11/integrating-deep-learning-with-clojure.spec/</guid><description>&lt;p&gt;clojure.spec allows you to write specifications for data and use them for validation. It also provides a generative aspect that allows for robust testing as well as an additional way to understand your data through manual inspection. The dual nature of validation and generation is a natural fit for deep learning models that consist of paired discriminator/generator models.&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;TLDR: In this post we show that you can leverage the dual nature of clojure.spec&amp;rsquo;s validator/generator to incorporate a deep learning model&amp;rsquo;s classifier/generator.&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Focus On the Generator</title><link>https://gigasquidsoftware.com/blog/2019/09/06/focus-on-the-generator/</link><pubDate>Fri, 06 Sep 2019 18:07:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2019/09/06/focus-on-the-generator/</guid><description>&lt;p&gt;&lt;a data-flickr-embed="true" href="https://www.flickr.com/photos/smigla-bobinski/19705409981/in/album-72157647756733695/" title="SIMULACRA by Karina Smigla-Bobinski"&gt;&lt;img src="https://live.staticflickr.com/330/19705409981_4e0ae93572.jpg" width="500" height="267" alt="SIMULACRA by Karina Smigla-Bobinski"&gt;&lt;/a&gt;&lt;script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;In this first post of this series, we took a look at a &lt;a href="https://gigasquidsoftware.com/blog/2019/08/16/simple-autoencoder/"&gt;simple autoencoder&lt;/a&gt;. It took and image and transformed it back to an image. Then, we &lt;a href="https://gigasquidsoftware.com/blog/2019/08/30/focus-on-the-discriminator/"&gt;focused in on the disciminator&lt;/a&gt; portion of the model, where we took an image and transformed it to a label. Now, we focus in on the generator portion of the model do the inverse operation: we transform a label to an image. In recap:&lt;/p&gt;</description></item><item><title>Focus on the Discriminator</title><link>https://gigasquidsoftware.com/blog/2019/08/30/focus-on-the-discriminator/</link><pubDate>Fri, 30 Aug 2019 10:16:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2019/08/30/focus-on-the-discriminator/</guid><description>&lt;p&gt;&lt;a data-flickr-embed="true" href="https://www.flickr.com/photos/marcomagrini/698692268/in/photolist-24JYSq-hTTAJN-4gjQW9-9GRKCW-4gfNhz-x2yZ-6Nnwy1-6Lm68p-66BVjW-8hawRk-4sE2Jz-5Z6uvQ-6B4iH3-qzDvGU-aNpvLT-9UFZLh-egKvNt-bMh6PR-ceG9AL-gDqtze-96JhRW-7EWMH6-3MTfDt-9rUJ4W-dFPssj-8LLrys-aDAda3-9rUJ45-7xLAFR-prSHik-7yDFHC-7erqEc-6YJx8e-39SyR4-dkQnGi-7hy6zT-4UokrH-hkMoBr-9tBN3K-jq8Bpu-aDMSk2-pwQdmt-9tFrUD-6TzF6G-WDAsCC-8Mm4tD-8M8hyS-4yzkGK-67MPUw-crfg" title="sunflowers"&gt;&lt;img src="https://live.staticflickr.com/1007/698692268_b31d429272.jpg" width="500" height="325" alt="sunflowers"&gt;&lt;/a&gt;&lt;script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;In the &lt;a href="https://gigasquidsoftware.com/blog/2019/08/16/simple-autoencoder/"&gt;last post&lt;/a&gt;, we took a look at a simple autoencoder. The autoencoder is a deep learning model that takes in an image and, (through an encoder and decoder), works to produce the same image. In short:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Autoencoder: image -&amp;gt; image&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a discriminator, we are going to focus on only the first half on the autoencoder.&lt;/p&gt;
&lt;p&gt;&lt;img alt="discriminator" loading="lazy" src="https://live.staticflickr.com/65535/48647347383_9577b7b672_b.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Why only half? We want a different transformation. We are going to want to take an image as input and then do some &lt;em&gt;discrimination&lt;/em&gt; of the image and classify what type of image it is. In our case, the model is going to input an image of a handwritten digit and attempt to decide which number it is.&lt;/p&gt;</description></item><item><title>Simple Autoencoder</title><link>https://gigasquidsoftware.com/blog/2019/08/16/simple-autoencoder/</link><pubDate>Fri, 16 Aug 2019 16:16:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2019/08/16/simple-autoencoder/</guid><description>&lt;p&gt;&lt;a data-flickr-embed="true" href="https://www.flickr.com/photos/horlik/2901925672/in/photolist-5qr8pf-qkv3m8-32RwmC-dZBC2B-ja8ch-48vDg-f56TGS-oUfNKn-652ZqG-QnCrbX-y3C828-jeGkmu-dxwE9L-jKaGtZ-haQ6j3-61w8UJ-WmitYz-tLymA-dZCHC4-CGvx3R-CC3GPE-BSxzda-eu625R-vHAgnk-cR7WAE-jZiLgu-BsZwLP-fhfvPT-dN1Rf9-o8Mkby-8zDocw-5DvC7S-CEij58-oaw922-akUgeW-ayQiGU-aay1vS-2fVFske-2eoRpCe-rqwa4o-9VJPtv-opgEcq-MDfFe-9yzUaK-4is9Z9-cutXnm-f9U23-L7hpoe-3i3H-enSJKf" title="Perfect mirror"&gt;&lt;img src="https://live.staticflickr.com/3274/2901925672_325f5faeb8.jpg" width="500" height="364" alt="Perfect mirror"&gt;&lt;/a&gt;&lt;script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you look long enough into the autoencoder, it looks back at you.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The Autoencoder is a fun deep learning model to look into. Its goal is simple: given an input image, we would like to have the same output image.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s sort of an identity function for deep learning models, but it is composed of two parts: an encoder and decoder, with the encoder translating the images to a &lt;em&gt;latent space representation&lt;/em&gt; and the encoder translating that back to a regular images that we can view.&lt;/p&gt;</description></item><item><title>Clojure MXNet April Update</title><link>https://gigasquidsoftware.com/blog/2019/04/26/clojure-mxnet-april-update/</link><pubDate>Fri, 26 Apr 2019 15:51:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2019/04/26/clojure-mxnet-april-update/</guid><description>&lt;p&gt;Spring is bringing some beautiful new things to the &lt;a href="http://mxnet.incubator.apache.org/"&gt;Clojure MXNet&lt;/a&gt;. Here are some highlights for the month of April.&lt;/p&gt;
&lt;h2 id="shipped"&gt;Shipped&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve merged &lt;a href="https://github.com/apache/incubator-mxnet/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr+is%3Aclosed+clojure"&gt;10 PRs&lt;/a&gt; over the last month. Many of them focus on core improvements to documentation and usability which is very important.&lt;/p&gt;
&lt;p&gt;The MXNet project is also preparing a new release &lt;code&gt;1.4.1&lt;/code&gt;, so keep on the lookout for that to hit in the near future.&lt;/p&gt;
&lt;h2 id="clojure-mxnet-made-simple-article-series"&gt;Clojure MXNet Made Simple Article Series&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://arthurcaillau.com/about/"&gt;Arthur Caillau&lt;/a&gt; added another post to his fantastic series - &lt;a href="https://arthurcaillau.com/mxnet-made-simple-pretrained-models/"&gt;MXNet made simple: Pretrained Models for image classification - Inception and VGG&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Clojure MXNet March Update</title><link>https://gigasquidsoftware.com/blog/2019/03/22/clojure-mxnet-march-update/</link><pubDate>Fri, 22 Mar 2019 10:42:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2019/03/22/clojure-mxnet-march-update/</guid><description>&lt;p&gt;I&amp;rsquo;m starting a monthly update for &lt;a href="http://mxnet.incubator.apache.org/"&gt;Clojure MXNet&lt;/a&gt;. The goal is to share the progress and exciting things that are happening in the project and our community.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s some highlights for the month of March.&lt;/p&gt;
&lt;h2 id="shipped"&gt;Shipped&lt;/h2&gt;
&lt;p&gt;Under the shipped heading, the 1.4.0 release of MXNet has been released, along with the &lt;a href="https://search.maven.org/search?q=clojure%20mxnet"&gt;Clojure MXNet Jars&lt;/a&gt;. There have been improvements to the JVM memory management and an Image API addition. You can see the full list of changes &lt;a href="https://github.com/apache/incubator-mxnet/releases/tag/1.4.0#clojure"&gt;here&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Object Detection with Clojure MXNet</title><link>https://gigasquidsoftware.com/blog/2019/01/19/object-detection-with-clojure-mxnet/</link><pubDate>Sat, 19 Jan 2019 13:34:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2019/01/19/object-detection-with-clojure-mxnet/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://c1.staticflickr.com/8/7837/32928474208_4960caafb3.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Object detection just landed in MXNet thanks to the work of contributors &lt;a href="https://github.com/kedarbellare"&gt;Kedar Bellare&lt;/a&gt; and &lt;a href="https://github.com/hellonico/"&gt;Nicolas Modrzyk&lt;/a&gt;. Kedar ported over the &lt;code&gt;infer&lt;/code&gt; package to Clojure, making inference and prediction much easier for users and Nicolas integrated in his &lt;a href="https://github.com/hellonico/origami"&gt;Origami&lt;/a&gt; OpenCV library into the the examples to make the visualizations happen.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll walk through the main steps to use the &lt;code&gt;infer&lt;/code&gt; object detection which include creating the detector with a model and then loading the image and running the inference on it.&lt;/p&gt;</description></item><item><title>How to GAN a Flan</title><link>https://gigasquidsoftware.com/blog/2018/12/18/how-to-gan-a-flan/</link><pubDate>Tue, 18 Dec 2018 16:34:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2018/12/18/how-to-gan-a-flan/</guid><description>&lt;p&gt;It&amp;rsquo;s holiday time and that means parties and getting together with friends. Bringing a baked good or dessert to a gathering is a time honored tradition. But what if this year, you could take it to the next level? Everyone brings actual food. But with the help of Deep Learning, you can bring something completely different - you can bring the &lt;em&gt;image&lt;/em&gt; of baked good! I&amp;rsquo;m not talking about just any old image that someone captured with a camera or created with a pen and paper. I&amp;rsquo;m talking about the computer itself &lt;strong&gt;creating&lt;/strong&gt;. This image would be never before seen, totally unique, and crafted by the creative process of the machine.&lt;/p&gt;</description></item><item><title>Clojure MXNet - The Module API</title><link>https://gigasquidsoftware.com/blog/2018/07/05/clojure-mxnet-the-module-api/</link><pubDate>Thu, 05 Jul 2018 19:39:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2018/07/05/clojure-mxnet-the-module-api/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://cdn-images-1.medium.com/max/800/1*OoqsrMD7JzXAvRUGx_8_fg.jpeg"&gt;&lt;/p&gt;
&lt;p&gt;This is an introduction to the high level Clojure API for deep learning library &lt;a href="http://mxnet.incubator.apache.org/"&gt;MXNet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The module API provides an intermediate and high-level interface for performing computation with neural networks in MXNet.&lt;/p&gt;
&lt;p&gt;To follow along with this documentation, you can use this namespace to with the needed requires:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-clojure" data-lang="clojure"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(&lt;span style="color:#66d9ef"&gt;ns &lt;/span&gt;docs.module
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (&lt;span style="color:#e6db74"&gt;:require&lt;/span&gt; [clojure.java.io &lt;span style="color:#e6db74"&gt;:as&lt;/span&gt; io]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [clojure.java.shell &lt;span style="color:#e6db74"&gt;:refer&lt;/span&gt; [sh]]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [org.apache.clojure-mxnet.eval-metric &lt;span style="color:#e6db74"&gt;:as&lt;/span&gt; eval-metric]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [org.apache.clojure-mxnet.io &lt;span style="color:#e6db74"&gt;:as&lt;/span&gt; mx-io]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [org.apache.clojure-mxnet.module &lt;span style="color:#e6db74"&gt;:as&lt;/span&gt; m]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [org.apache.clojure-mxnet.symbol &lt;span style="color:#e6db74"&gt;:as&lt;/span&gt; sym]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [org.apache.clojure-mxnet.ndarray &lt;span style="color:#e6db74"&gt;:as&lt;/span&gt; ndarray]))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="prepare-the-data"&gt;Prepare the Data&lt;/h2&gt;
&lt;p&gt;In this example, we are going to use the MNIST data set. If you have cloned the MXNet repo and &lt;code&gt;cd contrib/clojure-package&lt;/code&gt;, we can run some helper scripts to download the data for us.&lt;/p&gt;</description></item><item><title>Clojure MXNet Joins the Apache MXNet Project</title><link>https://gigasquidsoftware.com/blog/2018/07/01/clojure-mxnet-joins-the-apache-mxnet-project/</link><pubDate>Sun, 01 Jul 2018 10:44:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2018/07/01/clojure-mxnet-joins-the-apache-mxnet-project/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://cdn-images-1.medium.com/max/800/1*OoqsrMD7JzXAvRUGx_8_fg.jpeg"&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m delighted to share the news that the Clojure package for &lt;a href="https://mxnet.apache.org/"&gt;MXNet&lt;/a&gt; has now joined the main Apache MXNet project. A big thank you to the efforts of everyone involved to make this possible. Having it as part of the main project is a great place for growth and collaboration that will benefit both MXNet and the Clojure community.&lt;/p&gt;
&lt;h2 id="invitation-to-join-and-contribute"&gt;Invitation to Join and Contribute&lt;/h2&gt;
&lt;p&gt;The Clojure package has been brought in as a &lt;em&gt;contrib&lt;/em&gt; &lt;a href="https://github.com/apache/incubator-mxnet/tree/master/contrib/clojure-package"&gt;clojure-package&lt;/a&gt;. It is still very new and will go through a period of feedback, stabilization, and improvement before it graduates out of contrib.&lt;/p&gt;</description></item><item><title>Meet Clojure MXNet - NDArray</title><link>https://gigasquidsoftware.com/blog/2018/06/03/meet-clojure-mxnet-ndarray/</link><pubDate>Sun, 03 Jun 2018 16:13:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2018/06/03/meet-clojure-mxnet-ndarray/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://cdn-images-1.medium.com/max/800/1*OoqsrMD7JzXAvRUGx_8_fg.jpeg"&gt;&lt;/p&gt;
&lt;p&gt;This is the beginning of a series of blog posts to get to know the &lt;a href="https://mxnet.apache.org/"&gt;Apache MXNet&lt;/a&gt; Deep Learning project and the new Clojure language binding &lt;a href="https://github.com/apache/incubator-mxnet/tree/master/contrib/clojure-package"&gt;clojure-package&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MXNet is a first class, modern deep learning library that AWS has officially picked as its chosen library. It supports multiple languages on a first class basis and is incubating as an Apache project.&lt;/p&gt;
&lt;p&gt;The motivation for creating a Clojure package is to be able to open the deep learning library to the Clojure ecosystem and build bridges for future development and innovation for the community. It provides all the needed tools including low level and high level apis, dynamic graphs, and things like GAN and natural language support.&lt;/p&gt;</description></item><item><title>On Staying Technical</title><link>https://gigasquidsoftware.com/blog/2018/03/04/on-staying-technical/</link><pubDate>Sun, 04 Mar 2018 11:03:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2018/03/04/on-staying-technical/</guid><description>&lt;p&gt;I was 10 years into my career when I met her. I could count the number of other women programmers I had worked with on one hand and none of them had young children at home like me. She was not only incredibly experienced and competent, but also had a son in college. I was curious about her career path so I asked her one day at lunch why she was still programming and hadn’t become a manager instead.&lt;/p&gt;</description></item><item><title>Cats and Dogs with Cortex Redux</title><link>https://gigasquidsoftware.com/blog/2017/11/07/cats-and-dogs-with-cortex-redux/</link><pubDate>Tue, 07 Nov 2017 18:51:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2017/11/07/cats-and-dogs-with-cortex-redux/</guid><description>&lt;p&gt;I wrote a &lt;a href="http://gigasquidsoftware.com/blog/2016/12/27/deep-learning-in-clojure-with-cortex/"&gt;blog post&lt;/a&gt; a while back about using a Clojure machine learning library called &lt;a href="https://github.com/thinktopic/cortex"&gt;Cortex&lt;/a&gt; to do the Kaggle Cats and Dogs classification challenge.&lt;/p&gt;
&lt;p&gt;I wanted to revisit it for a few reasons. The first one is that the Cortex library has progressed and improved considerably over the last year. It&amp;rsquo;s still not at version 1.0, but it my eyes, it&amp;rsquo;s really starting to shine. The second reason is that they recently published an &lt;a href="https://github.com/thinktopic/cortex/tree/master/examples/resnet-retrain"&gt;example&lt;/a&gt; of using the RESNET50 model, (I&amp;rsquo;ll explain later on), to do fine-tuning or transfer learning. The third reason, is that there is a great new plugin for leiningen the supports using &lt;a href="https://github.com/didiercrunch/lein-jupyter"&gt;Jupyter notebooks with Clojure projects&lt;/a&gt;. These notebooks are a great way of doing walkthroughs and tutorials.&lt;/p&gt;</description></item><item><title>Embedded Interop between Clojure, R, and Python with GraalVM</title><link>https://gigasquidsoftware.com/blog/2017/10/22/embedded-interop-between-clojure-r-and-python-with-graalvm/</link><pubDate>Sun, 22 Oct 2017 16:02:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2017/10/22/embedded-interop-between-clojure-r-and-python-with-graalvm/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://images-na.ssl-images-amazon.com/images/M/MV5BOTViY2Y0ZGItMTg2OC00YzEzLWJhYjYtZjg4OTMyOWE4YzM1XkEyXkFqcGdeQXVyNTQ1NzU4Njk@._V1_.jpg"&gt;&lt;/p&gt;
&lt;p&gt;In my talk at &lt;a href="https://www.youtube.com/watch?v=eLl6_k_fZn4"&gt;Clojure Conj&lt;/a&gt; I mentioned how a project from Oracle Labs named GraalVM might have to potential for Clojure to interop with Python on the same VM. At the time of the talk, I had just learned about it so I didn&amp;rsquo;t have time to take a look at it. Over the last week, I&amp;rsquo;ve managed to take it for a test drive and I wanted to share what I found.&lt;/p&gt;</description></item><item><title>Self Publishing for the Creative Coder</title><link>https://gigasquidsoftware.com/blog/2017/05/27/self-publishing-for-the-creative-coder/</link><pubDate>Sat, 27 May 2017 14:11:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2017/05/27/self-publishing-for-the-creative-coder/</guid><description>&lt;p&gt;So, you have an idea for a fiction book. First, let me tell you that it&amp;rsquo;s a good idea and it&amp;rsquo;s a great thing that you are a coder. Quite a few successful authors have a background in software development. &lt;a href="http://www.imdb.com/title/tt2543164/"&gt;Arrival&lt;/a&gt;, (which is a fabulous movie), comes from the book, &lt;a href="https://www.amazon.com/Stories-Your-Life-Others-Chiang/dp/1101972122"&gt;Stories of your Life&lt;/a&gt;, written by a fellow programmer &lt;a href="https://en.wikipedia.org/wiki/Ted_Chiang"&gt;Ted Chiang&lt;/a&gt;. &lt;a href="https://en.wikipedia.org/wiki/Charles_Stross"&gt;Charlie Stross&lt;/a&gt; is another fine example. One of my favorites is [Daniel Suarez](&lt;a href="https://en.wikipedia.org/wiki/Daniel_Suarez_(author)"&gt;https://en.wikipedia.org/wiki/Daniel_Suarez_(author)&lt;/a&gt;, the author of the&lt;a href="https://www.amazon.com/DAEMON-Daniel-Suarez/dp/0451228731"&gt; Daemon&lt;/a&gt; and more recently &lt;a href="https://www.amazon.com/Change-Agent-Novel-Daniel-Suarez/dp/110198466X/"&gt;Change Agent&lt;/a&gt;. So yes, you can write a fiction book and you&amp;rsquo;re in good company. This post is dedicated to help make it happen.&lt;/p&gt;</description></item><item><title>Deep Learning in Clojure with Cortex</title><link>https://gigasquidsoftware.com/blog/2016/12/27/deep-learning-in-clojure-with-cortex/</link><pubDate>Tue, 27 Dec 2016 10:44:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2016/12/27/deep-learning-in-clojure-with-cortex/</guid><description>&lt;p&gt;&lt;strong&gt;Update: Cortex has moved along since I first wrote this blog post, so if you are looking to run the examples, please go and clone the &lt;a href="https://github.com/thinktopic/cortex"&gt;Cortex&lt;/a&gt; repo and look for the cats and dogs code in the examples directory.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There is an awesome new &lt;em&gt;Clojure-first&lt;/em&gt; machine learning library called &lt;a href="https://github.com/thinktopic/cortex"&gt;Cortex&lt;/a&gt; that was open sourced recently. I&amp;rsquo;ve been exploring it lately and wanted to share my discoveries so far in this post. In our exploration, we are going to tackle one of the classic classification problems of the internet. How do you tell the difference between a cat and dog pic?&lt;/p&gt;</description></item><item><title>Genetic Programming with clojure.spec</title><link>https://gigasquidsoftware.com/blog/2016/07/18/genetic-programming-with-clojure.spec/</link><pubDate>Mon, 18 Jul 2016 09:40:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2016/07/18/genetic-programming-with-clojure.spec/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://c1.staticflickr.com/9/8815/28320682816_44780d1b75.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.cognitect.com/blog/2016/5/23/introducing-clojurespec"&gt;Clojure.spec&lt;/a&gt; is a new library for Clojure that enables you to write specifications for your program. In an earlier &lt;a href="http://gigasquidsoftware.com/blog/2016/05/29/one-fish-spec-fish/"&gt;post&lt;/a&gt;, I showed off some of it&amp;rsquo;s power to generate test data from your specifications. It&amp;rsquo;s a pretty cool feature. Given some clojure.spec code, you can generate sample data for you based off of the specifications. But what if you could write a program that would &lt;em&gt;generate&lt;/em&gt; your clojure.spec program based off of data so that you could generate more test data?&lt;/p&gt;</description></item><item><title>Hello World for the Next Generation</title><link>https://gigasquidsoftware.com/blog/2016/07/03/hello-world-for-the-next-generation/</link><pubDate>Sun, 03 Jul 2016 15:01:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2016/07/03/hello-world-for-the-next-generation/</guid><description>&lt;p&gt;I sit next to my daughter, showing her programming for the first time.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-clojure" data-lang="clojure"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(+ &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;ldquo;Now press enter.&amp;rdquo;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-clojure" data-lang="clojure"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;ldquo;Pretty cool, huh?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;She looks unimpressed. I fear I&amp;rsquo;m losing her. How can I explain that this is just a small tip of something so much bigger?&lt;/p&gt;
&lt;h3 id="you-can-make-the-code-sing-to-you"&gt;You can make the code sing to you.&lt;/h3&gt;
&lt;p&gt;You can take these numbers, turn them into notes, and line them up with the beat of your heart. Bring in the melody and chorus and build them up to a crescendo. Let it crash in waves and then&lt;/p&gt;</description></item><item><title>Book Writing for the Busy Programmer</title><link>https://gigasquidsoftware.com/blog/2016/06/19/book-writing-for-the-busy-programmer/</link><pubDate>Sun, 19 Jun 2016 09:22:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2016/06/19/book-writing-for-the-busy-programmer/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://c5.staticflickr.com/8/7302/27492453220_eecdf6dee1.jpg"&gt;&lt;/p&gt;
&lt;p&gt;So you want to write a book? Awesome. I&amp;rsquo;ve been working on one too for the last year.&lt;/p&gt;
&lt;p&gt;No, it&amp;rsquo;s not really a programming book, but it does have code in it. It&amp;rsquo;s a sci-fi/fantasy book written for my ten year daughter, but this post isn&amp;rsquo;t about that. It&amp;rsquo;s about sharing the tools and setup that I&amp;rsquo;ve found work best for me.&lt;/p&gt;
&lt;h2 id="tools-for-writing"&gt;Tools for Writing&lt;/h2&gt;
&lt;p&gt;If the first thing you think of when you want to write a book is creating some really cool tools to help you, I can totally relate. It&amp;rsquo;s a programmer thing.&lt;/p&gt;</description></item><item><title>One Fish Spec Fish</title><link>https://gigasquidsoftware.com/blog/2016/05/29/one-fish-spec-fish/</link><pubDate>Sun, 29 May 2016 16:29:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2016/05/29/one-fish-spec-fish/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://upload.wikimedia.org/wikipedia/en/9/9a/One_Fish_Two_Fish_Red_Fish_Blue_Fish_%28cover_art%29.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.cognitect.com/blog/2016/5/23/introducing-clojurespec"&gt;Clojure.spec&lt;/a&gt; is an exciting, new core library for Clojure. It enables pragmatic specifications for functions and brings a new level of robustness to building software in Clojure, along with unexpected side benefits. One of which is the ability to write specifications that generate Dr. Seuss inspired rhymes.&lt;/p&gt;
&lt;p&gt;In this blog post, we&amp;rsquo;ll take a tour of writing specifications for a clojure function, as well as the power of data generation. First, some inspirational words:&lt;/p&gt;</description></item><item><title> Kolmogorov-Uspensky Machine</title><link>https://gigasquidsoftware.com/blog/2016/03/16/kolmogorov-uspensky-machine/</link><pubDate>Wed, 16 Mar 2016 18:19:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2016/03/16/kolmogorov-uspensky-machine/</guid><description>&lt;p&gt;It happened again. I was sitting down reading a paper and I came across the phrase &lt;em&gt;Kolmogorov-Uspensky machine&lt;/em&gt; and I had no idea what it was. My initial reaction was just to move on. It probably wasn&amp;rsquo;t important, I told myself, just a detail that I could skim over. I took a sip of my tea and continued on. The next paragraph it appeared &lt;em&gt;again&lt;/em&gt;. It was just sticking up like a thread waiting to be pulled. Still, I resisted. After all, I wasn&amp;rsquo;t even near my computer. I would have to get up an walk into the other room. After considering it for a moment, inertia won out and I continued my reading. There it was &lt;em&gt;once more&lt;/em&gt;. This time right in the same paragraph, silently mocking me. I knew I had to do something so I strode to my computer and pulled the thread.&lt;/p&gt;</description></item><item><title>Fairy Tale Word Vectors</title><link>https://gigasquidsoftware.com/blog/2016/02/10/fairy-tale-word-vectors/</link><pubDate>Wed, 10 Feb 2016 21:27:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2016/02/10/fairy-tale-word-vectors/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://c2.staticflickr.com/2/1558/24654386380_bda44419a8_n.jpg"&gt;&lt;/p&gt;
&lt;p&gt;This post continues our exploration from the last blog post &lt;a href="http://gigasquidsoftware.com/blog/2016/02/06/why-hyperdimensional-socks-never-match/"&gt;Why Hyperdimensional Socks Never Match&lt;/a&gt;. We are still working our way through &lt;a href="http://redwood.berkeley.edu/pkanerva/papers/kanerva09-hyperdimensional.pdf"&gt;Kanerva&amp;rsquo;s paper&lt;/a&gt;. This time, with the basics of hypervectors under our belts, we&amp;rsquo;re ready to explore how words can be expressed as context vectors. Once in a high dimensional form, you can compare two words to see how similar they are and even perform reasoning.&lt;/p&gt;
&lt;p&gt;To kick off our word vector adventure, we need some words. Preferring whimsy over the Google news, our text will be taken from ten freely available fairy tale books on &lt;a href="http://www.gutenberg.org/"&gt;http://www.gutenberg.org/&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Why Hyperdimensional Socks Never Match</title><link>https://gigasquidsoftware.com/blog/2016/02/06/why-hyperdimensional-socks-never-match/</link><pubDate>Sat, 06 Feb 2016 14:26:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2016/02/06/why-hyperdimensional-socks-never-match/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://c2.staticflickr.com/8/7238/7188420611_a99f936971_n.jpg"&gt;&lt;/p&gt;
&lt;p&gt;The nature of computing in hyperdimensions is a strange and wonderful place. I have only started to scratch the surface by reading a paper by &lt;a href="http://redwood.berkeley.edu/pkanerva/papers/kanerva09-hyperdimensional.pdf"&gt;Kanerva&lt;/a&gt;. Not only is it interesting from a computer science standpoint, it&amp;rsquo;s also interesting from a cognitive science point of view. In fact, it could hold the key to better model AI and general reasoning. This blog is a casual stroll through some of the main points of Kanerva&amp;rsquo;s paper along with examples in Clojure to make it tangible. First things first, what is a hyperdimension?&lt;/p&gt;</description></item><item><title>Book of Software Miracles</title><link>https://gigasquidsoftware.com/blog/2016/01/16/book-of-software-miracles/</link><pubDate>Sat, 16 Jan 2016 22:09:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2016/01/16/book-of-software-miracles/</guid><description>&lt;figure&gt;
&lt;img loading="lazy" src="http://c2.staticflickr.com/2/1611/23811303563_029d4c864e_c.jpg"
alt="Book of Software Miracles - Cover"/&gt; &lt;figcaption&gt;
Book of Software Miracles - Cover
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;This 21st century illustrated manuscript was recently uncovered. It depicts miraculous phenomena in software engineering and represents one of the most spectacular new discoveries in the field of Renaissance Computer Science.&lt;/p&gt;
&lt;p&gt;Some examples of the glorious illustrations and text translations are presented here.&lt;/p&gt;
&lt;figure&gt;
&lt;img loading="lazy" src="http://c2.staticflickr.com/2/1520/24070311299_c23fc388e0_z.jpg"
alt="Book of Software Miracles Fol. 26"/&gt; &lt;figcaption&gt;
Book of Software Miracles Fol. 26
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;On the day in 1958 that John McCarthy invented LISP, three suns appeared in the East in the morning sky which moved towards each other so that they merged into one.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Can a Programming Language Make You Smarter?</title><link>https://gigasquidsoftware.com/blog/2015/12/20/can-a-programming-language-make-you-smarter/</link><pubDate>Sun, 20 Dec 2015 11:16:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2015/12/20/can-a-programming-language-make-you-smarter/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://c1.staticflickr.com/1/34/118425909_86f332f075_z.jpg?zz=1"&gt;&lt;/p&gt;
&lt;p&gt;All programming languages are not created equal. Some clearly excel at solving different problems. There are languages that are great for scalability and others that are great for proving correctness. But what about one that that will make you smarter? To look for this answer, I am going to turn to a different language, our human language, and research from the field of linguistics and cognitive development.&lt;/p&gt;
&lt;h3 id="a-new-language-is-born"&gt;A new language is born&lt;/h3&gt;
&lt;p&gt;Up until the late 1970s, there was no school for the deaf In Nicaragua. Being deaf before then meant only developing crude signs with your family and friends. Beyond that there was nothing. Finally, the wife of the dictator set up a special school for them. This was the first time that the children were brought together in one place rather than being scattered about. For most of them, it was the first time that they had ever met another deaf person. There were about fifty kids in that first class and they came together with fifty different ways of communication with crude gestures. But after awhile, something amazing happened. They started to converge into a common system - a language was born. For scientists, this was an incredible opportunity to watch a new language develop. One of the fascinating insights had to do with how the this sign language evolved over the generations of children entering the school. One in particular, was a study about how words in a language can actually increase your cognitive capacity and make people &lt;em&gt;smarter&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>The Key to Moving Fast is Feedback</title><link>https://gigasquidsoftware.com/blog/2015/12/19/the-key-to-moving-fast-is-feedback/</link><pubDate>Sat, 19 Dec 2015 14:06:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2015/12/19/the-key-to-moving-fast-is-feedback/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://c1.staticflickr.com/3/2205/1809288965_c84080f2d3_n.jpg"&gt;&lt;/p&gt;
&lt;p&gt;The last time I went to the dentist to get a cavity filled, I got a shot of Novocain as a local anesthetic to numb the area. After I emerged from the dental chair, I still had no feeling in my lip and mouth area.
Trying to talk and smile was comical. Trying to drink tea resulting in dribbles down my face. Luckily, the loss of feeling only lasted a couple hours. Soon, I was back to normal. Even in this small and common scenario, we can see the close link between motion and sensory perception. What would happen if you couldn&amp;rsquo;t feel your whole body?&lt;/p&gt;</description></item><item><title>Gigasquid's Radar 2015</title><link>https://gigasquidsoftware.com/blog/2015/12/08/gigasquids-radar-2015/</link><pubDate>Tue, 08 Dec 2015 17:36:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2015/12/08/gigasquids-radar-2015/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://c1.staticflickr.com/1/627/23249736219_dfa625309b_c.jpg"&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s that time of the year again for &lt;em&gt;radars&lt;/em&gt;. Since I made &lt;a href="http://gigasquidsoftware.com/blog/2014/12/17/gigasquids-radar-2014/"&gt;one last year&lt;/a&gt;, I decided to continue the tradition and make one this year.&lt;/p&gt;
&lt;h2 id="languages"&gt;Languages&lt;/h2&gt;
&lt;p&gt;No changes from last year for Clojure and Pixie.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Adopt&lt;/em&gt;: Clojure - It is fantastic language.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Trial&lt;/em&gt;: &lt;a href="https://github.com/pixie-lang/pixie"&gt;Pixie&lt;/a&gt; - The language continues to grow and improve and has a great community - and it is a LISP.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Assess&lt;/em&gt;: &lt;a href="http://elixir-lang.org/"&gt;Elixir&lt;/a&gt; - Another great functional language leveraging the Erlang VM. It has a lot of energy in the community.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Hold&lt;/em&gt;: Java - There are plenty of other great alternatives out there on the JVM.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cute-animals"&gt;Cute Animals&lt;/h2&gt;
&lt;p&gt;Alpacas have moved up from &lt;em&gt;trial&lt;/em&gt; last year, and Llamas to &lt;em&gt;hold&lt;/em&gt;. Alpacas are clearly more fluffy.&lt;/p&gt;</description></item><item><title>Speech Act Classification for Text with Clojure</title><link>https://gigasquidsoftware.com/blog/2015/10/20/speech-act-classification-for-text-with-clojure/</link><pubDate>Tue, 20 Oct 2015 13:11:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2015/10/20/speech-act-classification-for-text-with-clojure/</guid><description>&lt;p&gt;We humans are quite wonderful. We do amazing things every day without even realizing it. One of them, you are doing right now. You are reading text. Your brain is taking these jumbles of letters and spaces in this sentence, which in linguist terms is called an &lt;a href="https://en.wikipedia.org/wiki/Utterance"&gt;utterance&lt;/a&gt;, and making sense out of it. The individual meanings of sentences might be quite complex.&lt;/p&gt;
&lt;p&gt;Take for example the utterance, &amp;ldquo;I like cheese&amp;rdquo;. To understand it properly, you need to know the meanings of the individual words. In particular, you would need to know that cheese is a tasty food stuff that is made from milk. This would be a detailed and full understanding. But there is a higher level of understanding that we can look at called &lt;a href="https://en.wikipedia.org/wiki/Utterance"&gt;Speech Acts&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Conversations with Datomic - Part 3</title><link>https://gigasquidsoftware.com/blog/2015/08/25/conversations-with-datomic-part-3/</link><pubDate>Tue, 25 Aug 2015 10:28:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2015/08/25/conversations-with-datomic-part-3/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://avatars0.githubusercontent.com/u/1478702?v=3&amp;s=200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This is a continuation of the &lt;a href="http://gigasquidsoftware.com/blog/2015/08/15/conversations-with-datomic/"&gt;first&lt;/a&gt; and
&lt;a href="http://gigasquidsoftware.com/blog/2015/08/19/conversations-with-datomic-part-2/"&gt;second&lt;/a&gt; conversations in which topics such as creating databases,
learning facts, querying, and time traveling were discussed. Today&amp;rsquo;s topics include architecture, caching, and scaling.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Human:&lt;/strong&gt; Hello again &lt;a href="http://www.datomic.com/"&gt;Datomic&lt;/a&gt;. Ready to talk again?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Datomic:&lt;/strong&gt; Sure. I think you wanted to ask me some questions about how I would fit in with your other systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Human:&lt;/strong&gt; Yes. Like I was saying earlier, I think your abilities to learn facts, reason about them, and keep track of the history of all those facts is really great.
I am interested in having you work with me every day, but first I want to understand your components so that I can make sure you are a good fit for us.&lt;/p&gt;</description></item><item><title>Conversations with Datomic Part 2</title><link>https://gigasquidsoftware.com/blog/2015/08/19/conversations-with-datomic-part-2/</link><pubDate>Wed, 19 Aug 2015 08:56:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2015/08/19/conversations-with-datomic-part-2/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://avatars0.githubusercontent.com/u/1478702?v=3&amp;s=200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The following is a continuation of the first &lt;a href="http://gigasquidsoftware.com/blog/2015/08/15/conversations-with-datomic/"&gt;conversation&lt;/a&gt; which touched on schema creation and querying. This conversation includes learning new facts, time, and the sometimes unfortunate reality of lawyers.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Human:&lt;/strong&gt; Hi &lt;a href="http://www.datomic.com/"&gt;Datomic&lt;/a&gt;. I am back from my tea and cookies break. I really enjoyed talking with you, could we continue our conversation?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Datomic:&lt;/strong&gt; Certainly. Let me see, where did we leave off?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Human:&lt;/strong&gt; Let me check my &lt;a href="https://gist.github.com/gigasquid/92a1effb14fe4f6ced59"&gt;notes&lt;/a&gt;. Oh yes, we had created a database and filled it with facts about some dogs and owners. You showed me how to ask you things about the facts, like which dogs liked cheese.&lt;/p&gt;</description></item><item><title>Conversations with Datomic</title><link>https://gigasquidsoftware.com/blog/2015/08/15/conversations-with-datomic/</link><pubDate>Sat, 15 Aug 2015 10:29:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2015/08/15/conversations-with-datomic/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://avatars0.githubusercontent.com/u/1478702?v=3&amp;s=200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Human:&lt;/strong&gt; Hi &lt;a href="http://www.datomic.com/"&gt;Datomic&lt;/a&gt;. I have been hearing good things about you. I would like to talk to you and get to know you. Is that alright?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Datomic:&lt;/strong&gt; Sure! I would be happy to talk with you. What language would you like to converse in?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Human:&lt;/strong&gt; I like Clojure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Datomic:&lt;/strong&gt; That is one of my favorites too. You know how to setup a Leiningen project right?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Human:&lt;/strong&gt; Oh yes. What dependency should I use?&lt;/p&gt;</description></item><item><title>Wild Horses, Things, and Creativity</title><link>https://gigasquidsoftware.com/blog/2015/05/30/wild-horses-things-and-creativity/</link><pubDate>Sat, 30 May 2015 10:53:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2015/05/30/wild-horses-things-and-creativity/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://nmbdesigner.files.wordpress.com/2012/05/where-the-wild-things-are-2.jpeg"&gt;&lt;/p&gt;
&lt;p&gt;Sometimes I want to create something and I run into a limitation or
constraint. It is at this point where I am tempted to give up and say
that I just &lt;em&gt;can&amp;rsquo;t&lt;/em&gt; do that.&lt;/p&gt;
&lt;p&gt;At this time, I remember Maurice Sendak and the origins of &lt;em&gt;Where
the Wild Things Are&lt;/em&gt;. In this &lt;a href="http://www.pbs.org/now/arts/sendak.html"&gt;interview with Bill Moyers&lt;/a&gt;, he explains
how the book was originally titled &lt;em&gt;Where the Wild Horses Are&lt;/em&gt;, but he
couldn&amp;rsquo;t draw horses.&lt;/p&gt;</description></item><item><title>How Not to Panic While Writing a Clojure Book</title><link>https://gigasquidsoftware.com/blog/2015/05/22/how-not-to-panic-while-writing-a-clojure-book/</link><pubDate>Fri, 22 May 2015 09:11:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2015/05/22/how-not-to-panic-while-writing-a-clojure-book/</guid><description>&lt;p&gt;I made it to that magical moment when the Clojure book I had been working on so long was published and I could actually hold it in my hand.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://pbs.twimg.com/media/CDWsQPCUgAERViK.jpg"&gt;&lt;/p&gt;
&lt;p&gt;It was an immense project and I am very happy that it is finally done. Since then, I met some people that are interested in writing books as well.
They asked if I had any insights or tips having gone through the process as a first time author. I have collected them in this post in hopes that they will be helpful to those going through the process themselves.&lt;/p&gt;</description></item><item><title>Partition with Game of Thrones Pugs</title><link>https://gigasquidsoftware.com/blog/2015/01/26/partition-with-game-of-thrones-pugs/</link><pubDate>Mon, 26 Jan 2015 18:55:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2015/01/26/partition-with-game-of-thrones-pugs/</guid><description>&lt;p&gt;Clojure&amp;rsquo;s &lt;em&gt;partition&lt;/em&gt; and &lt;em&gt;partition-all&lt;/em&gt; functions are very useful.
However, I have been bitten a few times using &lt;em&gt;partition&lt;/em&gt; when I
really wanted &lt;em&gt;partition-all&lt;/em&gt;. So to help myself and all of you to
remember it, I have made some diagrams with &lt;a href="http://www.designswan.com/archives/the-pugs-of-westeros-cute-pugs-dressed-up-like-characters-in-game-of-thrones.html"&gt;pugs from the Game of Thrones&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In code, &lt;a href="http://clojuredocs.org/clojure.core/partition"&gt;partition&lt;/a&gt; takes a collection and returns a lazy sequence of
lists, each containing n items.&lt;/p&gt;
&lt;p&gt;To demonstrate this with pugs, we will partition 5 pugs into groups of
twos.&lt;/p&gt;</description></item><item><title>Gigasquid's Radar 2014</title><link>https://gigasquidsoftware.com/blog/2014/12/17/gigasquids-radar-2014/</link><pubDate>Wed, 17 Dec 2014 20:55:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/12/17/gigasquids-radar-2014/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://c4.staticflickr.com/8/7554/16045999682_b4658620c1_c.jpg"&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s that time of year for &lt;em&gt;radars&lt;/em&gt; to be published. So this year, I thought I would publish one of my own. Here is what is on my radar.&lt;/p&gt;
&lt;h2 id="languages"&gt;Languages&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Adopt&lt;/em&gt;: Clojure - It is fantastic language. Really.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Trial&lt;/em&gt;: &lt;a href="https://github.com/pixie-lang/pixie"&gt;Pixie&lt;/a&gt; - The promise of a really fast startup Clojure inspired language. I am impressed already and it is only a few months old.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Assess&lt;/em&gt;: &lt;a href="http://www.idris-lang.org/"&gt;Idris&lt;/a&gt; - I have only seen this lang briefly, but was impressed by the typing and proofing abilities.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Hold&lt;/em&gt;: JavaScript - I don&amp;rsquo;t have to say more, you know what I mean.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cute-animals"&gt;Cute Animals&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Adopt&lt;/em&gt;: &lt;a href="http://www.llamas.org/imgs/corner.jpg"&gt;Llamas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Trial&lt;/em&gt;: &lt;a href="http://www.preciousanimals.com/wp-content/plugins/woo-tumblog/functions/thumb.php?src=wp-content/uploads/2012/03/Cute-Animals-4e41e26ba45d7.jpg&amp;amp;w=530&amp;amp;h=&amp;amp;zc=1&amp;amp;q=90"&gt;Alpacas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Assess&lt;/em&gt;: &lt;a href="http://i.dailymail.co.uk/i/pix/2014/08/27/article-0-20D869FB00000578-191_634x758.jpg"&gt;Wombats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Hold&lt;/em&gt;: &lt;a href="http://4.bp.blogspot.com/-expAkvezlsw/UjJIGE3EqMI/AAAAAAAABoo/UcCeUo7ALtc/s1600/cute-hedgehog-dino-toy.jpg"&gt;Hedgehogs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="robots"&gt;Robots&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Adopt&lt;/em&gt;: &lt;a href="http://ardrone2.parrot.com/"&gt;Parrot AR Drone&lt;/a&gt; Hackable flying drone with sonar and cameras. Doesn&amp;rsquo;t injure your fingers too much when you get them caught in the blades.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Trial&lt;/em&gt;: &lt;a href="http://gigasquidsoftware.com/blog/2014/03/20/world-domination-with-hexapods-and-clojure/"&gt;PhantomX Hexapod&lt;/a&gt; A bit pricey and delicate, but built from kit and is super cool when you get it going.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Assess&lt;/em&gt;: &lt;a href="https://www.thalmic.com/en/myo/"&gt;Myo Armband&lt;/a&gt; Control things with a flick of your wrist. Mine finally arrived after a year and a half wait. I haven&amp;rsquo;t had time to play with it, but I have high hopes for it.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Hold&lt;/em&gt;: Roombas - I love my Roombas, but I am not sure the latest models have an ROI port to hack :(&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tasty-food"&gt;Tasty Food&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Adopt&lt;/em&gt;: &lt;a href="http://upload.wikimedia.org/wikipedia/commons/3/38/Buttered_crumpet2.jpg"&gt;Crumpets&lt;/a&gt; - Put lots of butter on them toasted. Yum!&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Trial&lt;/em&gt;: &lt;a href="http://www.aussiefoodshop.com/i/peppe%20biscuits/dark_choc_mint.JPG"&gt;Mint Tim Tams&lt;/a&gt;- Minty, just the right amount of crunch. Hard to find in the US, but a treat when you do.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Assess&lt;/em&gt;: &lt;a href="http://en.wikipedia.org/wiki/Raclette"&gt;Raclette&lt;/a&gt; - I have never actually had it, but it is melted cheese, it has to be incredible.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Hold&lt;/em&gt;: Egg Nog - Don&amp;rsquo;t drink it directly from the bowl.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy Holidays Everyone!&lt;/p&gt;</description></item><item><title>Clojure FizzBuzz without Conditionals</title><link>https://gigasquidsoftware.com/blog/2014/11/13/clojure-fizzbuzz-without-conditionals/</link><pubDate>Thu, 13 Nov 2014 21:43:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/11/13/clojure-fizzbuzz-without-conditionals/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://c1.staticflickr.com/5/4136/4825113119_9630b7927f.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Sure you may have done FizzBuzz before. Maybe you have even done it
in Clojure. But have you done it without the use of &lt;em&gt;any&lt;/em&gt;
conditionals?&lt;/p&gt;
&lt;p&gt;As your brain starts to work on the &lt;em&gt;how&lt;/em&gt; this we be done, you might
be wondering &lt;em&gt;why&lt;/em&gt; you should do this in the first place?&lt;/p&gt;
&lt;p&gt;There are two very good reasons for this. The first is that it is a
&lt;em&gt;kata&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="katas-build-your-code-practice"&gt;Katas build your code practice&lt;/h2&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://c4.staticflickr.com/4/3552/3434757877_711709da58_b.jpg"&gt;&lt;/p&gt;</description></item><item><title>The Five Stages of Writing a Book</title><link>https://gigasquidsoftware.com/blog/2014/11/10/the-five-stages-of-writing-a-book/</link><pubDate>Mon, 10 Nov 2014 08:37:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/11/10/the-five-stages-of-writing-a-book/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://c1.staticflickr.com/9/8078/8314929977_28fd740070_c.jpg"&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Denial&lt;/em&gt;: I am not really writing a book.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Anger&lt;/em&gt;: Why did I ever decide to write a book?&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Bargaining&lt;/em&gt;: If I just finish this book, I promise never to write another one.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Depression&lt;/em&gt;: I am never going to finish this book.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Resolution&lt;/em&gt;: I am writing a book and I am going to give it my &lt;em&gt;frigging all&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Notes and Tips on Working from Home</title><link>https://gigasquidsoftware.com/blog/2014/10/31/notes-and-tips-on-working-from-home/</link><pubDate>Fri, 31 Oct 2014 08:16:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/10/31/notes-and-tips-on-working-from-home/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://c4.staticflickr.com/8/7538/15671394561_261bf74b95.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Recently, I switched from a traditional, &amp;ldquo;go to an office&amp;rdquo;
job,
to working from my home. It took some time to setup my home
work space and get used to working remotely, but I finally have a
system working for me. In this post, I thought I would share some things that I
found useful.&lt;/p&gt;
&lt;h3 id="window-seat-please"&gt;Window Seat Please&lt;/h3&gt;
&lt;p&gt;If at all possible, locate your home work space near a window. The
natural light does wonders for you mood and being able to glance up
and look at trees and real life is a refreshing break from staring at
code all day.&lt;/p&gt;</description></item><item><title>Green Eggs and Transducers</title><link>https://gigasquidsoftware.com/blog/2014/09/06/green-eggs-and-transducers/</link><pubDate>Sat, 06 Sep 2014 15:47:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/09/06/green-eggs-and-transducers/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://upload.wikimedia.org/wikipedia/en/c/c2/Greenegg.gif"&gt;&lt;/p&gt;
&lt;p&gt;A quick tour of Clojure Transducers with core.async with Dr. Seuss as a guide.&lt;/p&gt;
&lt;p&gt;Follow along at home by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lein new green-eggs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;modify your project.clj to include the following:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-clojure" data-lang="clojure"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(&lt;span style="color:#66d9ef"&gt;defproject &lt;/span&gt;green-eggs &lt;span style="color:#e6db74"&gt;&amp;#34;0.1.0-SNAPSHOT&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;:description&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;try them&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;:url&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;http://en.wikipedia.org/wiki/Green_Eggs_and_Ham&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;:license&lt;/span&gt; {&lt;span style="color:#e6db74"&gt;:name&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Eclipse Public License&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;:url&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;http://www.eclipse.org/legal/epl-v10.html&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;:dependencies&lt;/span&gt; [[org.clojure/clojure &lt;span style="color:#e6db74"&gt;&amp;#34;1.7.0-alpha1&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [org.clojure/core.async &lt;span style="color:#e6db74"&gt;&amp;#34;0.1.338.0-5c5012-alpha&amp;#34;&lt;/span&gt;]])
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Start up a repl and hack in!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="green-eggs-and-ham"&gt;Green Eggs and Ham&lt;/h2&gt;
&lt;p&gt;Transducers are a new feature of Clojure 1.7. Instead of trying to explain them with words, let&amp;rsquo;s take a look of them in action. First we need some data. Let&amp;rsquo;s def a vector of all the places you could try green eggs and ham.&lt;/p&gt;</description></item><item><title>The Proper Pronunciation of Clojure's Assoc</title><link>https://gigasquidsoftware.com/blog/2014/07/28/the-proper-pronunciation-of-clojures-assoc/</link><pubDate>Mon, 28 Jul 2014 20:27:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/07/28/the-proper-pronunciation-of-clojures-assoc/</guid><description>&lt;p&gt;Sometimes I pause before talking to someone about Clojure code. Not because I am unsure of the code, but because I am unsure of
how to pronounce the code. The particular code in question is
Clojure&amp;rsquo;s &lt;em&gt;assoc&lt;/em&gt;. I have heard it pronounced two ways. One is
&amp;ldquo;assosh&amp;rdquo;, the other is &amp;ldquo;assok&amp;rdquo;. So, to determine it, I decided to conduct a
scientific poll of the Clojure community.&lt;/p&gt;
&lt;p&gt;I posted the poll on
&lt;a href="https://twitter.com/gigasquid/status/493891057906896896"&gt;twitter&lt;/a&gt; to
the Cojure community who follow me. The control group poll was not viewed
by those who do not follow me, and/or, are not on twitter.&lt;/p&gt;</description></item><item><title>Clojure X-Men</title><link>https://gigasquidsoftware.com/blog/2014/07/27/clojure-x-men/</link><pubDate>Sun, 27 Jul 2014 20:12:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/07/27/clojure-x-men/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://c2.staticflickr.com/6/5557/14761955842_6a8bf4a66a_n.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Nobody knows how it happened. Some people think it was due to the rapid expansion and adoption of Clojure. Other people say that the language itself was caused by something deeper and more magical. No one knows for sure. All that we really know is that people starting being born with extraordinary powers. Powers that no human had had before. They were strange and unique to each person they touched. The only thing that they all had in common, was that each was an aspect of the Clojure programming language.&lt;/p&gt;</description></item><item><title>Love Songs Through History and Why You Should Create</title><link>https://gigasquidsoftware.com/blog/2014/07/06/love-songs-through-history-and-why-you-should-create/</link><pubDate>Sun, 06 Jul 2014 19:52:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/07/06/love-songs-through-history-and-why-you-should-create/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://news.nationalgeographic.com/news/2001/02/lovesong.gif"&gt;&lt;/p&gt;
&lt;h2 id="the-earliest-known-love-song"&gt;The Earliest Known Love Song&lt;/h2&gt;
&lt;p&gt;The earliest known love song was found in an &lt;a href="http://news.nationalgeographic.com/news/2001/02/0213_1stlovesong.html"&gt;Egyptian tomb&lt;/a&gt;. The
fragment found in the 4,300 year old tomb read:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;I love and admire your beauty. I am under it.
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="medieval-love-songs"&gt;Medieval Love Songs&lt;/h2&gt;
&lt;p&gt;&lt;img loading="lazy" src="http://www.luminarium.org/medlit/manasseh.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Moving forward in history to Medieval times, there are many examples
of love songs. One of them from a great composer in the 14th century,
named &lt;a href="http://public.wsu.edu/~brians/love-in-the-arts/medieval.html"&gt;Guillaume de Machaut&lt;/a&gt;:, went something like
this:&lt;/p&gt;</description></item><item><title>A Taste of the Star Programming Language</title><link>https://gigasquidsoftware.com/blog/2014/06/11/a-taste-of-the-star-programming-language/</link><pubDate>Wed, 11 Jun 2014 10:38:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/06/11/a-taste-of-the-star-programming-language/</guid><description>&lt;p&gt;A while ago, I was &lt;a href="http://gigasquidsoftware.com/blog/2013/05/01/growing-a-language-with-haskell-and-instaparse/"&gt;exploring creating a programming language with
Instaparse&lt;/a&gt;.
I ended up exploring some concepts of Speech Acts proposed by John
McCarthy by creating my first toy language called
&lt;a href="http://gigasquidsoftware.com/blog/2013/06/04/babar-a-little-language-with-speech-acts-for-machines/"&gt;Babar&lt;/a&gt;.
Shortly after posting a blog about it, I got an email from someone
saying that I might be interested in a full blown, real programming
language that also incorporated Speech Acts. I happily started
composing an reply to the email that started off with&lt;/p&gt;</description></item><item><title>World Domination with Hexapods and Clojure</title><link>https://gigasquidsoftware.com/blog/2014/03/20/world-domination-with-hexapods-and-clojure/</link><pubDate>Thu, 20 Mar 2014 21:00:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/03/20/world-domination-with-hexapods-and-clojure/</guid><description>&lt;p&gt;Once you have your &lt;a href="http://gigasquidsoftware.com/blog/2014/03/19/walking-with-hexapods/"&gt;hexapod assembled and running using the hand held
controller&lt;/a&gt;,
of course, your thoughts naturally turn to world domination.&lt;/p&gt;
&lt;h2 id="the-most-powerful-tool-in-the-world-is-the-clojure-repl"&gt;The most powerful tool in the world is the Clojure REPL&lt;/h2&gt;
&lt;p&gt;World domination requires the most powerful tools available. That of
course calls for Clojure and the Clojure REPL. I recommend Emacs
as the editor of choice of such an endeavor. However, it if you are
content with city, state, or single country domination, other editors
that support Clojure are also fine.&lt;/p&gt;</description></item><item><title>Walking with Hexapods</title><link>https://gigasquidsoftware.com/blog/2014/03/19/walking-with-hexapods/</link><pubDate>Wed, 19 Mar 2014 21:06:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/03/19/walking-with-hexapods/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://farm4.staticflickr.com/3804/13278398783_0bedfa7b40.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Here we see the &lt;a href="http://www.trossenrobotics.com/phantomx-ax-hexapod.aspx"&gt;PhantomX Hexapod&lt;/a&gt; thriving in the natural habitat of a
cozy, climate controlled, modern house. But there was a time before
the hexapod. In particular, there was a time of many hexapod parts
and a high level software developer that somehow, despite her natural
lack of mechanical skills, managed to bring it to life. This blog post
endeavors to chronicle the high and low points of this journey. And
perhaps, will make it easier for any other brave souls that would like
to bring the &lt;em&gt;Age of Hexapods&lt;/em&gt; into their homes.&lt;/p&gt;</description></item><item><title>Remembering Jim</title><link>https://gigasquidsoftware.com/blog/2014/02/22/remembering-jim/</link><pubDate>Sat, 22 Feb 2014 11:02:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/02/22/remembering-jim/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://newcontext-production.s3.amazonaws.com/portrait/jim-weirich/medium_78048abb24eadb2017034c5ee10826f9.jpg"&gt;&lt;/p&gt;
&lt;p&gt;You don&amp;rsquo;t really understand how important someone is in your life
until they are suddenly gone. I have had the honor and privilege of
working, playing, and laughing alongside Jim Weirich for the last few
years. He was an amazing man. I miss him dearly.&lt;/p&gt;
&lt;p&gt;##Think##
Jim taught us how to think about computer programming. I once had a
Physics professor tell me not to worry so
much about the formulas and math. The most important thing was how to
&lt;strong&gt;think&lt;/strong&gt;.
Everything thing after that would
naturally fall into place. Jim embodied that philosophy for
programming. The languages and algorithms poured almost
effortlessly from his masterful fingers. He knew how to &lt;strong&gt;think&lt;/strong&gt; about
the problem, observe from a multitude of angles. Finally, bringing his
experience, creativity, and humility to bear on it, he would shape it into
a beautiful piece of code.&lt;/p&gt;</description></item><item><title>Hitchhiker's Clojure has a New Home</title><link>https://gigasquidsoftware.com/blog/2014/02/16/hitchhikers-clojure-has-a-new-home/</link><pubDate>Sun, 16 Feb 2014 14:57:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/02/16/hitchhikers-clojure-has-a-new-home/</guid><description>&lt;p&gt;The Hitchhiker&amp;rsquo;s Guide to Clojure posts now have a new home to make it
easier to read them in a chronological fashion.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hitchhikersclojure.com/"&gt;http://hitchhikersclojure.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There is also a public &lt;a href="https://github.com/gigasquid/hitchhikers-clojure"&gt;repo&lt;/a&gt; - feel free to contribute spelling and
grammar fixes, or your great ideas.&lt;/p&gt;</description></item><item><title>Hitchhiker's Guide to Clojure - Part 3</title><link>https://gigasquidsoftware.com/blog/2014/02/15/hitchhikers-guide-to-clojure-part-3/</link><pubDate>Sat, 15 Feb 2014 13:48:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/02/15/hitchhikers-guide-to-clojure-part-3/</guid><description>&lt;p&gt;Amy and Frank fled down the stairs from her office and met an
unexpected obstacle to their exit, a locked door. As
they peered out the window, they saw yesterday&amp;rsquo;s Amy pull up in the
parking space, get out, retrieve her laptop, and start to head in
the front door.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Oh good, we can take your car&amp;rdquo;, said Frank.&lt;/p&gt;
&lt;p&gt;Amy took a second to recover from the shock of seeing what her hair really
looked like from behind and then asked, &amp;ldquo;But, how can we get to it?
The door is locked, and we
can&amp;rsquo;t go back up to the office&amp;hellip; I would meet myself.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Hitchhiker's Guide to Clojure - Part 2</title><link>https://gigasquidsoftware.com/blog/2014/02/08/hitchhikers-guide-to-clojure-part-2/</link><pubDate>Sat, 08 Feb 2014 21:20:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/02/08/hitchhikers-guide-to-clojure-part-2/</guid><description>&lt;p&gt;Amy and Frank were hurtled quite rapidly through time and space after
attaching themselves to a transaction headed through the
&lt;a href="http://docs.datomic.com/transactions.html"&gt;Datomic Transactor&lt;/a&gt;. From
there things slowed down a bit, then took a sharp left and
ricocheted off again with incredible speed until they landed in another
&lt;a href="http://docs.datomic.com/architecture.html"&gt;Datomic Peer&lt;/a&gt;, and finally
appeared in the same room. Amy was quite startled by the
anti-climatic nature of the whole dematerializing and rematerializing
in the same exact spot, and didn&amp;rsquo;t really know what to do next. She
surveyed her office and found it exactly the same,
except for two distinct details. For one, the pistachio shells had
disappeared, and for another, the date on the computer showed
yesterday at 8:00 am. She tried to connect these facts rationally
with the pistachios in her pocket and finally said,&lt;/p&gt;</description></item><item><title>Hitchhiker's Guide to Clojure</title><link>https://gigasquidsoftware.com/blog/2014/02/01/hitchhikers-guide-to-clojure/</link><pubDate>Sat, 01 Feb 2014 19:33:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/02/01/hitchhikers-guide-to-clojure/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://farm6.staticflickr.com/5480/12258585125_36e8fdee1e.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The following is a cautionary example of the unpredictable
combination of Clojure, a marathon viewing of the BBC&amp;rsquo;s series &amp;ldquo;The
Hitchhiker&amp;rsquo;s Guide to the Galaxy&amp;rdquo;, and a questionable amount of
cheese.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There have been many tourism guides to the
&lt;a href="http://clojure.org/"&gt;Clojure&lt;/a&gt; programming language. Some that easily
come to mind for their intellectual erudition and prose are &amp;ldquo;The Joy
of Touring Clojure&amp;rdquo;, &amp;ldquo;Touring Clojure&amp;rdquo;, &amp;ldquo;Clojure Touring&amp;rdquo;, and the
newest edition of &amp;ldquo;Touring Clojure Touring&amp;rdquo;. However, none has
surpassed the wild popularity of &amp;ldquo;The Hitchhiker&amp;rsquo;s Guide to Clojure&amp;rdquo;.
It has sold over 500 million copies and has been on the &amp;ldquo;BigInt&amp;rsquo;s
Board of Programming Language Tourism&amp;rdquo; for the past 15 years. While,
arguably, it
lacked the in-depth coverage of the other guides, it made up for it in
useful practical tips, such as what to do if you find a nil in your
pistachio. Most of all, the cover had the following words printed in
very large letters: &lt;strong&gt;Don&amp;rsquo;t Worry About the Parens&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Lean Customer Interview Tips for the Introverted Developer</title><link>https://gigasquidsoftware.com/blog/2014/01/09/lean-customer-interview-tips-for-the-introverted-developer/</link><pubDate>Thu, 09 Jan 2014 21:23:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2014/01/09/lean-customer-interview-tips-for-the-introverted-developer/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://farm5.staticflickr.com/4029/4356643150_9b26a637e9.jpg"&gt;&lt;/p&gt;
&lt;p&gt;After attending a local Lean Startup Circle meetup, I decided to write
about some of my experiences with the
&lt;a href="http://theleanstartup.com/"&gt;Lean Startup Methodology&lt;/a&gt; from a software
developer&amp;rsquo;s point of view.&lt;/p&gt;
&lt;h2 id="why-should-you-care-about-the-lean-startup-methodology"&gt;Why should you care about the Lean Startup Methodology?&lt;/h2&gt;
&lt;p&gt;As software developer, I put my passion, honed expertise, and time
into crafting a digital product or service. One of the worst things
that can happen is that when it is released, no one uses it or wants
it. You can build a absolutely beautiful software product that scales
to the nines. But if you build the wrong thing, it is a failure.&lt;/p&gt;</description></item><item><title>Neural Networks in Clojure with core.matrix</title><link>https://gigasquidsoftware.com/blog/2013/12/02/neural-networks-in-clojure-with-core.matrix/</link><pubDate>Mon, 02 Dec 2013 19:28:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2013/12/02/neural-networks-in-clojure-with-core.matrix/</guid><description>&lt;p&gt;After having spent some time recently looking at top-down AI, I
thought I would spend some time looking at bottom&amp;rsquo;s up AI, machine
learning and neural networks.&lt;/p&gt;
&lt;p&gt;I was pleasantly introduced to &lt;a href="https://twitter.com/mikera"&gt;@mikea&amp;rsquo;s&lt;/a&gt; &lt;a href="https://github.com/mikera/core.matrix"&gt;core.matrix&lt;/a&gt; at Clojure Conj
this year and wanted to try making my own neural network using the
library. The purpose of this blog is to share my learnings along the
way.&lt;/p&gt;
&lt;h2 id="what-is-a-neural-network"&gt;What is a neural network?&lt;/h2&gt;
&lt;p&gt;A neural network is an approach to machine learning that involves
simulating, (in an idealized way), the way our brains work on a
biological level. There are three layers to neural network: the input
layer, the hidden layers, and the output layer. Each layer consists
of neurons that have a value. In each layer, each neuron is connected to
the neuron in the next layer by a connection strength. To get data
into the neural network, you assign values to the input layer, (values
between 0 and 1). These values are then &amp;ldquo;fed forward&amp;rdquo; to the hidden layer neurons though an algorithm that
relies on the input values and the connection strengths. The values
are finally &amp;ldquo;fed forward&amp;rdquo; in a similar fashion to the output layer.
The &amp;ldquo;learning&amp;rdquo; portion of the neural network comes from &amp;ldquo;training&amp;rdquo; the
network data. The training data consists of a collection of
associated input values and target values. The training process at a
high level looks like this:&lt;/p&gt;</description></item><item><title>Embrace and Reach</title><link>https://gigasquidsoftware.com/blog/2013/11/02/embrace-and-reach/</link><pubDate>Sat, 02 Nov 2013 14:51:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2013/11/02/embrace-and-reach/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://farm1.staticflickr.com/99/290760357_01392a3f51_n.jpg"&gt;&lt;/p&gt;
&lt;p&gt;One of the wonderful things about being a technologist today, is
to be part of an industry that is bubbling over with new and
exciting things. It can be exhilarating and overwhelming. How can we
try and do all these great new things? Of course, it is not
sensible to simply drop whatever you are using and continually chase
after the newest tech. Nor is steadfastly staying in one place and
refusing to accept that there is a better way of doing things. The
challenge is to absorb, identify, and synthesize both good of the
what we are currently doing and the new stuff too. We want to embrace and continue the good things that
are working for us and reach for the new technologies that will propel
us farther in the future.&lt;/p&gt;</description></item><item><title>Looking Forward to London</title><link>https://gigasquidsoftware.com/blog/2013/10/03/looking-forward-to-london/</link><pubDate>Thu, 03 Oct 2013 20:43:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2013/10/03/looking-forward-to-london/</guid><description>&lt;p&gt;I really love the London. I have only been once many years ago,
but I was enchanted. Here is a partial list of my favorite
things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ducks in Regent&amp;rsquo;s Park&lt;/li&gt;
&lt;li&gt;Tea Rooms&lt;/li&gt;
&lt;li&gt;The Food Hall at Harrod&amp;rsquo;s&lt;/li&gt;
&lt;li&gt;The British Museum&lt;/li&gt;
&lt;li&gt;English Breakfasts&lt;/li&gt;
&lt;li&gt;The way the British put an extra &amp;ldquo;r&amp;rdquo; in phrases like &amp;ldquo;vanilla in it&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As you know, I also adore Clojure. So I am absolutely thrilled to combine the two.&lt;/p&gt;</description></item><item><title>Controlling Multiple Drones with Clojure and Goals and Beliefs</title><link>https://gigasquidsoftware.com/blog/2013/09/05/controlling-multiple-drones-with-clojure-and-goals-and-beliefs/</link><pubDate>Thu, 05 Sep 2013 15:35:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2013/09/05/controlling-multiple-drones-with-clojure-and-goals-and-beliefs/</guid><description>&lt;h2 id="how-to-control-multiple-drones-with-clojure"&gt;How to Control Multiple Drones with Clojure&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/gigasquid/clj-drone"&gt;clj-drone&lt;/a&gt; library now
has multi-drone support! You can now send multiple drones commands,
receive their navigation data, and even have them perform their
actions autonomously with goals and beliefs.&lt;/p&gt;
&lt;p&gt;It takes a bit of extra setup to control more than one drone. We need to assign them each an
ip and get them talking as an adhoc network.
&lt;a href="https://twitter.com/jimweirich"&gt;Jim Weirich&lt;/a&gt; creating a neat little
script to run on the drone to do just this. Here are the
instructions:&lt;/p&gt;</description></item><item><title>My 5 Whys of Community</title><link>https://gigasquidsoftware.com/blog/2013/07/22/my-5-whys-of-community/</link><pubDate>Mon, 22 Jul 2013 19:44:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2013/07/22/my-5-whys-of-community/</guid><description>&lt;h2 id="why-do-you-devote-time-and-participate-in-the-community"&gt;Why do you devote time and participate in the community?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Why do you devote time and participate in the community?&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I find joy in coding and making things. I want to be around other
people who feel the same way.&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;em&gt;Why?&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Because I want to be inspired by others and learn from others and hope that they are inspired and learn from me.&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;em&gt;Why?&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Because ideas and learning doesn&amp;rsquo;t happen in a vacuum. There is something magical about the serendipity of human interaction and that needs a community to take place.&lt;/p&gt;</description></item><item><title>Demoing with Drones: Tips and Warnings</title><link>https://gigasquidsoftware.com/blog/2013/07/15/demoing-with-drones-tips-and-warnings/</link><pubDate>Mon, 15 Jul 2013 15:42:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2013/07/15/demoing-with-drones-tips-and-warnings/</guid><description>&lt;p&gt;Lately, I have had the pleasure of speaking and sharing my experience
of programming &lt;a href="http://ardrone2.parrot.com/"&gt;AR Drones&lt;/a&gt; with Clojure. However, doing live hardware
demos has not always been a smooth ride. In fact, it can be fraught
with peril. I thought that I would share some of the tips and tricks
that have helped me, as well as help make you
aware of some potential pitfalls.&lt;/p&gt;
&lt;h2 id="traveling-with-the-ar-drone"&gt;Traveling with the AR Drone&lt;/h2&gt;
&lt;figure class="left"&gt;
&lt;img loading="lazy" src="http://farm6.staticflickr.com/5332/9301848814_1633857d6d.jpg"/&gt;
&lt;/figure&gt;
&lt;p&gt;Do you need to take your drone with you on the plane to the demo?
The box that the drone comes in is a very nice carrying case, however it
is too big to take on as a carry-on. I found that taking the hull
off, and packing it into a plastic box worked well. It was small
enough to pack under the seat of even the smaller planes. I took the
battery out and packed it in my checked luggage.&lt;/p&gt;</description></item><item><title>Babar - A Little Language with Speech Acts for Machines</title><link>https://gigasquidsoftware.com/blog/2013/06/04/babar-a-little-language-with-speech-acts-for-machines/</link><pubDate>Tue, 04 Jun 2013 18:57:52 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2013/06/04/babar-a-little-language-with-speech-acts-for-machines/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://farm8.staticflickr.com/7352/9925781735_77dfa3157b_o.jpg"&gt;&lt;/p&gt;
&lt;h2 id="preface-a-gentle-obsession"&gt;Preface: A Gentle Obsession&lt;/h2&gt;
&lt;p&gt;About a year ago, I picked up John McCarthy&amp;rsquo;s paper on &lt;a href="http://web.archive.org/web/20131014084908/http://www-formal.stanford.edu/jmc/elephant/elephant.html"&gt;Elephant 2000&lt;/a&gt;. I have to admit that I only understood about 10% of it. But I was so intrigued by the ideas that it sent me on a quest. I re-read it numerous times, slept with it under my pillow, and finally decided that I needed to read his other papers to get an insight into his thoughts. I began a considered effort with &lt;a href="http://gigasquidsoftware.com/blog/2012/09/18/7-john-mccarthy-papers-in-7-days-prologue/"&gt;Seven McCarthy Papers in Seven Weeks&lt;/a&gt;. It ended up taking about three months, rather than seven 7 weeks. Again I came back to Elephant 2000. I began to understand more as other ideas and concepts sunk in, like &lt;a href="http://web.archive.org/web/20131014084908/http://www-formal.stanford.edu/jmc/ascribing/ascribing.html"&gt;ascribing beliefs and goals to machines&lt;/a&gt;. But to really explore the ideas, I really wanted to try to implement parts of Elephant in my own programming language. The problem was, having no formal training in computer science, (my background is Physics), I had never created a programming language before. The stars aligned and I found the &lt;a href="https://github.com/Engelberg/instaparse"&gt;Instaparse&lt;/a&gt; Clojure library. The result is &lt;a href="https://github.com/gigasquid/babar"&gt;Babar&lt;/a&gt;, a language designed to explore communication with machines via &lt;a href="http://en.wikipedia.org/wiki/Speech_act"&gt;Speech Acts&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Growing a Language with Clojure and Instaparse</title><link>https://gigasquidsoftware.com/blog/2013/05/02/growing-a-language-with-clojure-and-instaparse/</link><pubDate>Thu, 02 May 2013 02:08:18 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2013/05/02/growing-a-language-with-clojure-and-instaparse/</guid><description>&lt;p&gt;Creating your own programming language with Clojure and &lt;a href="https://github.com/Engelberg/instaparse"&gt;Instaparse&lt;/a&gt; is like building rainbows with s-expressions.  The Instaparse library is an elegant way of building executable parsers trees with pattern matching and &lt;a href="http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form"&gt;&lt;em&gt;standard EBNF notation&lt;/em&gt;&lt;/a&gt; for context-free grammars. Since this is my first foray into parser trees and grammars, I thought I would share my learnings in this post.&lt;/p&gt;
&lt;h2 id="starting-with-a-single-word"&gt;Starting with a Single Word&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s start with the simplest example:  a number.  When we start up our REPL in our brand new language, we want to be able to enter an integer, and have evaluate as an integer.&lt;/p&gt;</description></item><item><title>Why Open a Coworking Space?</title><link>https://gigasquidsoftware.com/blog/2013/03/14/why-open-a-coworking-space/</link><pubDate>Thu, 14 Mar 2013 02:32:31 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2013/03/14/why-open-a-coworking-space/</guid><description>&lt;p&gt;So I am in the midst of doing something a bit crazy and a bit wonderful at the same time. I am opening a coworking space in Loveland, OH called &lt;a href="http://locolo.us/"&gt;Locolo&lt;/a&gt;. It is a bit crazy because it has very little chance of being profitable, I have very little free time in my life to devote to such an undertaking, and I work full-time with awesome folks so I wouldn&amp;rsquo;t even be there during the day. Despite these very pragmatic reasons for not doing it, somewhere along the way I said F*** IT, I am doing it anyway. This blog post is an attempt to explain why.&lt;/p&gt;</description></item><item><title>The Joy of Flying AR Drones with Clojure</title><link>https://gigasquidsoftware.com/blog/2013/02/05/the-joy-of-flying-ar-drones-with-clojure/</link><pubDate>Tue, 05 Feb 2013 03:45:19 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2013/02/05/the-joy-of-flying-ar-drones-with-clojure/</guid><description>&lt;p&gt;Clojure is fun.  Flying &lt;a href="http://ardrone2.parrot.com/usa/"&gt;AR Parrot Drones&lt;/a&gt; are fun.  Put them together and there is pure joy.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="http://farm8.staticflickr.com/7441/9925804126_e4707c8b72_o.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Ever since I found out that you could program and control your drone over UDP, I couldn&amp;rsquo;t wait to try it out in Clojure.  I had dreams of controlling it with my Emacs REPL.  That dream came true and it has been a true joy to fly in a function language. This blog post shows some of the features that the &lt;a href="https://github.com/gigasquid"&gt;clj-drone project&lt;/a&gt; has so far.  There is still a bit of work to go to make it complete.  But, I wanted to share and hopefully encourage others to start playing with it too.&lt;/p&gt;</description></item><item><title>7 McCarthy Papers in 7ish weeks #7 - Elephant 2000</title><link>https://gigasquidsoftware.com/blog/2013/01/02/7-mccarthy-papers-in-7ish-weeks-%237-elephant-2000/</link><pubDate>Wed, 02 Jan 2013 00:30:32 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2013/01/02/7-mccarthy-papers-in-7ish-weeks-%237-elephant-2000/</guid><description>&lt;p&gt;Saving the best for last.  &lt;a href="http://web.archive.org/web/20131014084908/http://www-formal.stanford.edu/jmc/elephant/elephant.html"&gt;Elephant 2000&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To be continued&amp;hellip;.&lt;/p&gt;</description></item><item><title>Hobby Languages for Clojurists</title><link>https://gigasquidsoftware.com/blog/2012/12/26/hobby-languages-for-clojurists/</link><pubDate>Wed, 26 Dec 2012 21:58:43 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/12/26/hobby-languages-for-clojurists/</guid><description>&lt;p&gt;I spend most of my work day in Ruby and CoffeeScript. However, my true love belongs to Clojure, which I consider my &amp;ldquo;hobby&amp;rdquo; language right now. I started to wonder, what are the &amp;ldquo;hobby&amp;rdquo; languages for people who spend most of their work day with Clojure. My informal twitter poll revealed selection as diverse and interesting as the Clojurists themselves.&lt;/p&gt;
&lt;p&gt;**Developers Who Enjoy Clojure Also Enjoy: **
&lt;em&gt;(In no particular order)&lt;/em&gt;&lt;/p&gt;</description></item><item><title>7 McCarthy Papers in 7ish Weeks #5 &amp; #6 - SDFW Tic-Tac-Toe</title><link>https://gigasquidsoftware.com/blog/2012/11/25/7-mccarthy-papers-in-7ish-weeks-%235-%236-sdfw-tic-tac-toe/</link><pubDate>Sun, 25 Nov 2012 14:08:53 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/11/25/7-mccarthy-papers-in-7ish-weeks-%235-%236-sdfw-tic-tac-toe/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://farm8.staticflickr.com/7388/9925780935_9744792c36_o.png"&gt;&lt;/p&gt;
&lt;p&gt;This holiday edition blog post covers two McCarthy papers instead of just one.  We will be talking about &lt;a href="http://web.archive.org/web/20131014084908/http://www-formal.stanford.edu/jmc/freewill.pdf"&gt;Free Will - Even for Robots&lt;/a&gt; and the companion paper &lt;a href="http://web.archive.org/web/20131014084908/http://www-formal.stanford.edu/jmc/freewill2.pdf"&gt;Simple Deterministic Free Will&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="in-which-we-deftly-sidestep-the-philosophers"&gt;In which we deftly sidestep the philosophers&lt;/h2&gt;
&lt;p&gt;We know that computers and programs are completely deterministic.  A philosophical question is whether we, as humans are ruled by determinism, (although complex it may be), or not.  If we take the decision that humans are deterministic, then we can argue that either there is no free will - or that free will is &amp;ldquo;compatible&amp;rdquo; with determinism.  Philosophers, of course, could discuss such questions interminably, trying to get a theory to fit for all people and all occasions.  Thankfully, McCarthy takes a very admirable and practical view on free will.  Let&amp;rsquo;s try out something simple for a computer program and see how it works.  He explores a philosophy &amp;ldquo;Compatibilist&amp;rsquo;s&amp;rdquo; view, which regards a person to have free will if his actions are decided by an internal process, even if this process itself is deterministic.  But by exploring this view with computer programs, he makes clear:&lt;/p&gt;</description></item><item><title>7 McCarthy Papers in 7ish Weeks - #4</title><link>https://gigasquidsoftware.com/blog/2012/11/06/7-mccarthy-papers-in-7ish-weeks-%234/</link><pubDate>Tue, 06 Nov 2012 13:32:04 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/11/06/7-mccarthy-papers-in-7ish-weeks-%234/</guid><description>&lt;p&gt;Reading &lt;a href="http://www-formal.stanford.edu/jmc/ailogic/ailogic.html"&gt;Artificial Intelligence, Logic, and Formalizing Common Sense&lt;/a&gt;, led me surprisingly to reflect on, not only logic and philosophy, but also the history and present state of AI.&lt;/p&gt;
&lt;p&gt;Fist let&amp;rsquo;s look at the kind of AI that McCarthy is describing in paper. He talks of a program that can use common sense knowledge about the world around it and have this knowledge structured well enough that it can be reasoned about mathematically. In fact, he describes four levels of logic:&lt;/p&gt;</description></item><item><title>7 John McCarthy Papers in 7 Weeks #3</title><link>https://gigasquidsoftware.com/blog/2012/10/15/7-john-mccarthy-papers-in-7-weeks-%233/</link><pubDate>Mon, 15 Oct 2012 01:37:30 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/10/15/7-john-mccarthy-papers-in-7-weeks-%233/</guid><description>&lt;p&gt;&lt;strong&gt;In which I realize that John McCarthy is the father of the Semantic Web&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I have realized that it generally takes me more than a week to read a paper, reflect on it, experiment, and finally blog about it. But, since I made up the rules of the project in the first place,  I am not going to dwell on the time frame and just move forward with the next paper.&lt;/p&gt;</description></item><item><title>7 John McCarthy Papers in 7 Weeks - #2</title><link>https://gigasquidsoftware.com/blog/2012/09/29/7-john-mccarthy-papers-in-7-weeks-%232/</link><pubDate>Sat, 29 Sep 2012 16:00:36 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/09/29/7-john-mccarthy-papers-in-7-weeks-%232/</guid><description>&lt;p&gt;Well, life threw me for a bit of a loop and delayed my post on my second paper. So I am going to consider this a &amp;ldquo;weekish&amp;rdquo; period of time and just continue on.&lt;/p&gt;
&lt;p&gt;I read &lt;a href="http://web.archive.org/web/20131014084908/http://www-formal.stanford.edu/jmc/towards/towards.html"&gt; Towards a Mathematical Science of Computation&lt;/a&gt;. It is quite a meaty paper and was certainly a lot to digest. Here are some highlights that I gleaned from it.&lt;/p&gt;
&lt;h3 id="how-can-a-mathematical-science-of-computation-help-in-a-practical-way"&gt;How can a Mathematical Science of Computation help in a practical way?&lt;/h3&gt;
&lt;p&gt;McCarthy points out that while it is hard to predict practical applications ahead of time. A couple of could be&lt;/p&gt;</description></item><item><title>7 John McCarthy Papers in 7 weeks – #1 How My Thermostat has Beliefs and Goals</title><link>https://gigasquidsoftware.com/blog/2012/09/20/7-john-mccarthy-papers-in-7-weeks-%231-how-my-thermostat-has-beliefs-and-goals/</link><pubDate>Thu, 20 Sep 2012 13:03:36 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/09/20/7-john-mccarthy-papers-in-7-weeks-%231-how-my-thermostat-has-beliefs-and-goals/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://farm1.staticflickr.com/199/447335691_8a933251ab_n.jpg"&gt;&lt;/p&gt;
&lt;h2 id="ascribing-mental-qualities-to-machines-or-how-my-thermostat-has-beliefs-and-goals"&gt;Ascribing Mental Qualities to Machines or How My Thermostat has Beliefs and Goals&lt;/h2&gt;
&lt;p&gt;After reading John McCarthy&amp;rsquo;s paper this week &lt;a href="http://web.archive.org/web/20131014084908/http://www-formal.stanford.edu/jmc/"&gt;Ascribing Mental Qualities to Machines&lt;/a&gt;, I can honestly say that it has changed the way I think about programs and most certainly thermostats. For you see, I realize now that my thermostat has beliefs and goals. No, it does not have beliefs about what the weather is going to be tomorrow, or when the next George R.R. Martin book is going to come out. But it does have beliefs. It has three of them to be exact:&lt;/p&gt;</description></item><item><title>7 John McCarthy Papers in 7 weeks - Prologue</title><link>https://gigasquidsoftware.com/blog/2012/09/19/7-john-mccarthy-papers-in-7-weeks-prologue/</link><pubDate>Wed, 19 Sep 2012 01:50:08 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/09/19/7-john-mccarthy-papers-in-7-weeks-prologue/</guid><description>&lt;p&gt;In the spirit of &lt;a href="http://pragprog.com/book/btlang/seven-languages-in-seven-weeks"&gt;Seven Languages in Seven Weeks&lt;/a&gt;, I have decided to embark on a quest. But instead of focusing on expanding my mindset with different programming languages, I am focusing on trying to get into the mindset of &lt;a href="http://en.wikipedia.org/wiki/John_McCarthy_(computer_scientist)"&gt;John McCarthy&lt;/a&gt;, father of LISP and AI, by reading and thinking about seven of his &lt;a href="http://web.archive.org/web/20131014084908/http://www-formal.stanford.edu/jmc/"&gt;papers&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="why"&gt;Why?&lt;/h3&gt;
&lt;h4 id="get-out-of-your-box"&gt;Get out of your box&lt;/h4&gt;
&lt;p&gt;If you are comfortable, you are not challenging yourself to grow. You are doomed to stay in your same mindset and your little box and your world gets smaller. As an Object Oriented programmer, I was happy in my little box. Then one day, I discovered Clojure and Functional Programming and my world became bigger and richer because of it. I hope to glean a similar box expansion, by exploring the thoughts of McCarthy. Especially, since I have the nagging suspicion that we are somehow doing programming &lt;a href="http://www.catonmat.net/blog/wp-content/uploads/2008/12/john-mccarthy-programming-wrong.jpg"&gt;&amp;ldquo;completely wrong.&amp;rdquo;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>A Clojure REPL Driven Roomba</title><link>https://gigasquidsoftware.com/blog/2012/08/09/a-clojure-repl-driven-roomba/</link><pubDate>Thu, 09 Aug 2012 20:03:52 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/08/09/a-clojure-repl-driven-roomba/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://farm3.staticflickr.com/2826/9925780955_4a32b8dc8a_o.jpg"&gt;
One of the things that I love about Clojure is that it can go anywhere that Java can.  That is why, when I found out that the Roomba already had a &lt;a href="http://hackingroomba.com/code/roombacomm/"&gt;Java library&lt;/a&gt; written for it - I was excited to be able to hook it up to my Emacs / Swank and be able to control it from my editor.&lt;/p&gt;
&lt;p&gt;It is great fun! If you have a Roomba at home and you want to play along&amp;hellip;&lt;/p&gt;</description></item><item><title>Talking to your Roomba via Bluetooth and RoombaComm</title><link>https://gigasquidsoftware.com/blog/2012/08/02/talking-to-your-roomba-via-bluetooth-and-roombacomm/</link><pubDate>Thu, 02 Aug 2012 18:29:37 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/08/02/talking-to-your-roomba-via-bluetooth-and-roombacomm/</guid><description>&lt;p&gt;I love Roomba. It cleans our floors and it can be &lt;a href="http://www.irobot.com/images/consumer/hacker/roomba_sci_spec_manual.pdf"&gt;hacked&lt;/a&gt; to help teach my kids programming. Win!&lt;/p&gt;
&lt;p&gt;Here are the setup steps that I used to get going talking to Roomba:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Ordered a &lt;a href="https://www.sparkfun.com/products/10980?"&gt;Rootooth&lt;/a&gt; bluetooth connection for Roomba.  I could have build one from &lt;a href="http://hackingroomba.com/projects/build-a-roomba-bluetooth-adapter/"&gt;scratch&lt;/a&gt;, but I am a busy mom and hacker.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Removed the cover from Roomba to expose the ROI port (&lt;a href="http://www.youtube.com/watch?v=EaZibdOIeD0"&gt;Video&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Setup the Bluetooth adapter on my Mac&lt;/p&gt;</description></item><item><title>Baba Yaga and the Clojure Reducers</title><link>https://gigasquidsoftware.com/blog/2012/07/07/baba-yaga-and-the-clojure-reducers/</link><pubDate>Sat, 07 Jul 2012 23:56:36 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/07/07/baba-yaga-and-the-clojure-reducers/</guid><description>&lt;p&gt;&lt;img alt="Baba Yaga&amp;rsquo;s House" loading="lazy" src="http://www.thebells.net/Halloween/BabaYaga/BabaYaga3.GIF"&gt;&lt;/p&gt;
&lt;p&gt;Once upon a time, a young girl decided to take a break from her code and stroll in the forest. It was quite a pleasant day, she packed her lunch in her bag and set off. While she was walking, she started thinking about a concurrency bug that her OO project was having. As she pondered the complexities of mutablilty, state, and threads, she must of strayed from the trail and lost track of time. By the time she looked around, she realized that she was totally lost.&lt;/p&gt;</description></item><item><title>How to include non clojars/maven clojure version in your lein project</title><link>https://gigasquidsoftware.com/blog/2012/07/07/how-to-include-non-clojars/maven-clojure-version-in-your-lein-project/</link><pubDate>Sat, 07 Jul 2012 19:02:33 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/07/07/how-to-include-non-clojars/maven-clojure-version-in-your-lein-project/</guid><description>&lt;p&gt;Do you need to have a specific version of Clojure in your leiningen project that you can&amp;rsquo;t get from Clojars?&lt;/p&gt;
&lt;p&gt;I ran into this problem when I wanted to run a sample project on Clojure&amp;rsquo;s reducers - which is not in the current Clojars version of 1.4.0.  I needed to use the most recent version, (unreleased), of 1.5.0.  These are the steps to get you running.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Clone the &lt;a href="https://github.com/clojure/clojure/"&gt;clojure git repository &lt;/a&gt;&lt;/p&gt;</description></item><item><title>Day Dream Dinner</title><link>https://gigasquidsoftware.com/blog/2012/05/04/day-dream-dinner/</link><pubDate>Fri, 04 May 2012 02:06:43 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/05/04/day-dream-dinner/</guid><description>&lt;p&gt;In a day dream, I met a genie.  He kindly offered to setup my dream dinner for me.  All I had to do was name six guests and they would receive gilt invitations to the best restaurant in the world.  Of course, they would all be delighted to attend and would be spared the nuisance of travel arrangements by handy magical teleportation.  I hesitated for a moment, there are so many people that I would like to name.  The genie tapped his foot impatiently.  Alright here they are:&lt;/p&gt;</description></item><item><title>The Software Bathtub Curve</title><link>https://gigasquidsoftware.com/blog/2012/04/12/the-software-bathtub-curve/</link><pubDate>Thu, 12 Apr 2012 04:02:09 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/04/12/the-software-bathtub-curve/</guid><description>&lt;figure class="left"&gt;
&lt;img loading="lazy" src="http://farm4.staticflickr.com/3767/9925846584_3bf93b2cca.jpg"/&gt;
&lt;/figure&gt;
&lt;p&gt;I have had my Dualit Toaster for close to 19 years now. It has never broken down. It has reliably toasted my bread every morning with the mere turn of a dial.&lt;/p&gt;
&lt;p&gt;I have had my dishwasher for 1 year and 2 weeks. It has all sorts of cool buttons and modes so that I can customize my wash cycles to suit my dishes and my mood. Precisely two weeks after the warranty expired, it began to blink randomly and stopped working. The control board had died. This was not an isolated incident. I have gone through many such failures with other appliances, my refrigerator, stove and washing machine.&lt;/p&gt;</description></item><item><title>Code Mash 2012: Bacon for the Brain</title><link>https://gigasquidsoftware.com/blog/2012/01/14/code-mash-2012-bacon-for-the-brain/</link><pubDate>Sat, 14 Jan 2012 21:10:14 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/01/14/code-mash-2012-bacon-for-the-brain/</guid><description>&lt;p&gt;I was delighted to see first hand, why 1200 &lt;a href="http://codemash.org/"&gt;CodeMash&lt;/a&gt; tickets sold out in 20 minutes. It was full of awesome. This was easily the biggest conference that I have ever attended. It was held in the luxurious and fun Kalahari conference center and ran as smooth as silk, expertly supported by a volunteer staff.&lt;/p&gt;
&lt;p&gt;One of the things that I really appreciated about the conference was the diversity of people from different technology backgrounds. There were many developers from .NET, Java, Ruby, and Python worlds all coming together to swap stories, share ideas and learn something new. It created an opportunity for everyone to get out of their box and their comfort zone. I was particularly impressed by one woman that I talked to, who came from the .NET world but had made a conscious decision to not attend any .NET talks at all.&lt;/p&gt;</description></item><item><title>Getting Ready for CodeMash</title><link>https://gigasquidsoftware.com/blog/2012/01/10/getting-ready-for-codemash/</link><pubDate>Tue, 10 Jan 2012 03:09:20 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/01/10/getting-ready-for-codemash/</guid><description>&lt;p&gt;Only one more day until &lt;a href="http://codemash.org/"&gt;CodeMash&lt;/a&gt;.  I am really looking forward to my first one.  I have heard nothing but wonderful things about this conference that brings together developers, geeks and their families for a week in January in Sandusky, Ohio.&lt;/p&gt;
&lt;p&gt;I am also looking forward to the opportunity of presenting my &amp;ldquo;Once Upon a Time in Clojureland&amp;rdquo; talk.  It is an introduction to Clojure in a Fairy Tale format.  I am hoping to share my enthusiasm for the language and inspire others to try it out for themselves.&lt;/p&gt;</description></item><item><title>Nyan Cat Country Technology Index</title><link>https://gigasquidsoftware.com/blog/2012/01/04/nyan-cat-country-technology-index/</link><pubDate>Wed, 04 Jan 2012 03:00:27 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2012/01/04/nyan-cat-country-technology-index/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://farm3.staticflickr.com/2845/9925780995_b507b30d9a_o.png"&gt;&lt;/p&gt;
&lt;p&gt;One important measure of a country&amp;rsquo;s economy is it&amp;rsquo;s technology. Most current technology indexes for countries rely on boring statistics like R&amp;amp;D spending and internet availability. I think that these measures are totally inadequate. To really gauge whether a country is technologically advanced, you need to take a hard look at stupid, pointless, and amusing things produced on the internet.&lt;/p&gt;
&lt;p&gt;As an alternative, I would like to announce the Nyan Cat Country Technology Index. For those of you who have not heard of Nyan Cat. It is a &lt;a href="http://en.wikipedia.org/wiki/Nyan_Cat"&gt;internet meme&lt;/a&gt; that combines a flying Pop Tart cat trailing rainbows and a strange Japanese song.&lt;/p&gt;</description></item><item><title>Sunday in the Park with George and Clojure</title><link>https://gigasquidsoftware.com/blog/2011/09/13/sunday-in-the-park-with-george-and-clojure/</link><pubDate>Tue, 13 Sep 2011 02:17:52 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/09/13/sunday-in-the-park-with-george-and-clojure/</guid><description>&lt;h1 id="heading"&gt; &lt;/h1&gt;
&lt;figure class="left"&gt;
&lt;img loading="lazy" src="http://farm3.staticflickr.com/2843/9925803956_c92c63045e_o.jpg"/&gt;
&lt;/figure&gt;
&lt;p&gt;White: a Blank Page or Canvas.&lt;/p&gt;
&lt;p&gt;As I spent a pleasant Sunday outside doing yard work, songs from one of my favorite musicals, &lt;a href="http://en.wikipedia.org/wiki/Sunday_in_the_Park_with_George"&gt;“Sunday in the Park with George”&lt;/a&gt;, came to mind. While the songs were playing in my head, my thoughts again drifted to one of my favorite programming languages, Clojure. To my surprise, I was struck by similarities between the musical, which is about the artist Geroges Seuret and his creation of one of his famous painting, and that of the functional JVM language of Clojure. Granted, musicals, art and programming languages don&amp;rsquo;t generally get discussed together, but please humor me and let me elaborate. Following the thread of my inspiration, I will be using the first few opening lines from the musical as my headings and guides for my discussion.&lt;/p&gt;</description></item><item><title>On Men in Ballet and Women in Software Development</title><link>https://gigasquidsoftware.com/blog/2011/08/20/on-men-in-ballet-and-women-in-software-development/</link><pubDate>Sat, 20 Aug 2011 20:15:02 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/08/20/on-men-in-ballet-and-women-in-software-development/</guid><description>&lt;p&gt;Long ago,  I worked for a couple years as a professional ballet dancer with a small company. Reflecting on this, I have an interesting perspective of working in field were woman are the majority and also one where women are in the minority. I thought I would dedicate this post a few observations of similarities between men in ballet and women in software development.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Men in Ballet&lt;/strong&gt;
&lt;figure class="left"&gt;
&lt;img loading="lazy" src="http://farm4.staticflickr.com/3786/9925846994_2673f8183c_o.jpg"/&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Have some lame people think ballet is just for girls and make assumptions about them based on cultural stereotypes&lt;/p&gt;</description></item><item><title>Project-Grep : Another Sharp Tool for your Emacs</title><link>https://gigasquidsoftware.com/blog/2011/08/13/project-grep-another-sharp-tool-for-your-emacs/</link><pubDate>Sat, 13 Aug 2011 18:31:20 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/08/13/project-grep-another-sharp-tool-for-your-emacs/</guid><description>&lt;p&gt;Since joining EdgeCase, I have shelved my heavy Intellij and Eclipse IDEs in favor of Emacs. Overall, I have enjoyed moving to the light-weight but powerful editor. There is one thing that I did miss from my IDEs – that was the ability to search projects for string occurrences and being able to click navigate to them through the editor. Fortunately, one of the strengths of Emacs is it&amp;rsquo;s infinite configurability and extensibility. Even more fortunate, one of the guys in our shared office, &lt;a href="http://twitter.com/#!/dougalcorn"&gt;Doug Alcorn&lt;/a&gt; of Gaslight Software, had already written just this feature for his Emacs. I installed it and was so pleased with it, that I thought I would share …&lt;/p&gt;</description></item><item><title>Semantic Web and JRuby</title><link>https://gigasquidsoftware.com/blog/2011/08/08/semantic-web-and-jruby/</link><pubDate>Mon, 08 Aug 2011 02:30:21 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/08/08/semantic-web-and-jruby/</guid><description>&lt;p&gt;I got the chance to share my enthusiasm for two of my favorite technologies at JRubyConf by giving a presentation on Semantic Web and JRuby. It was an excellent experience. I was able to connect with other people that shared my interest in the Semantic Web and some that have even worked with the technologies professionally. Most exciting, I had the opportunity to share my knowledge and hopefully inspire others to look farther into using JRuby with the Jena Semantic Web Framework.&lt;/p&gt;</description></item><item><title>Super Easy Clojure Web Apps with Heroku Cedar</title><link>https://gigasquidsoftware.com/blog/2011/06/11/super-easy-clojure-web-apps-with-heroku-cedar/</link><pubDate>Sat, 11 Jun 2011 23:57:52 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/06/11/super-easy-clojure-web-apps-with-heroku-cedar/</guid><description>&lt;p&gt;Deploying Clojure apps with a single command to the cloud is now possible with Heroku Cedar and let me tell you, it is pure joy.&lt;/p&gt;
&lt;p&gt;I experimented with this the other day by creating a Compojure web application that compares the followers that two twitter users have in common.&lt;/p&gt;
&lt;p&gt;Here is the secret sauce you need to push your apps to Heroku:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;**Procfile: **
You need to create a file in the root of your directory that contains the way to start up your application:&lt;/p&gt;</description></item><item><title>Mocking Ajax Calls with Jasmine</title><link>https://gigasquidsoftware.com/blog/2011/05/05/mocking-ajax-calls-with-jasmine/</link><pubDate>Thu, 05 May 2011 16:42:13 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/05/05/mocking-ajax-calls-with-jasmine/</guid><description>&lt;p&gt;I have been happily using &lt;a href="https://github.com/pivotal/jasmine/"&gt;Jasmine&lt;/a&gt; and &lt;a href="https://github.com/velesin/jasmine-jquery"&gt;Jasmine-JQuery&lt;/a&gt; on a project with great success. However, I was still unsure about how to handle mocking the ajax calls back to the server. It turns out the answer is already in Jasmine. Time to call out the spies!&lt;/p&gt;
&lt;p&gt;There is a wiki page on spies &lt;a href="https://github.com/pivotal/jasmine/wiki/Spies"&gt;https://github.com/pivotal/jasmine/wiki/Spies&lt;/a&gt;, but I always enjoy a nice code sample.&lt;/p&gt;
&lt;p&gt;In my source file I have an ajax call that I would like to mock that looks like this:
[gist id=957387]&lt;/p&gt;</description></item><item><title>Hacking JavaScript for the Love of Clojure</title><link>https://gigasquidsoftware.com/blog/2011/05/01/hacking-javascript-for-the-love-of-clojure/</link><pubDate>Sun, 01 May 2011 14:02:39 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/05/01/hacking-javascript-for-the-love-of-clojure/</guid><description>&lt;p&gt;Lately, I have been working on the awesome open source project &lt;a href="http://www.4clojure.com/"&gt;4Clojure.com&lt;/a&gt;. The site helps you to learn Clojure by solving “koan” type problems in an interactive format. One of the enhancements that I was looking at putting in was a way to enter code in a text box and have it color highlight as type. I found the &lt;a href="http://ace.ajax.org/"&gt;ACE project&lt;/a&gt;, which looked like exactly what I wanted. However, sad panda, they didn&amp;rsquo;t have a Clojure mode. Not deterred, I decided that I would try to take a crack at it. I ported most of the rules from the Clojure brush in Syntax Highlighter over and implemented some basic auto-indent.&lt;/p&gt;</description></item><item><title>Yellow Belt Katas for Ruby and Clojure</title><link>https://gigasquidsoftware.com/blog/2011/04/16/yellow-belt-katas-for-ruby-and-clojure/</link><pubDate>Sat, 16 Apr 2011 03:11:29 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/04/16/yellow-belt-katas-for-ruby-and-clojure/</guid><description>&lt;p&gt;I have put a couple projects out on GitHub to help people get started with Clojure and Ruby.
The Katas are taken more or less from the Coding Kata site &lt;a href="http://codingkata.org/katas/"&gt;http://codingkata.org/katas/&lt;/a&gt;. The projects both include the basic project setup for you to get started with TDD beginner katas.&lt;/p&gt;
&lt;p&gt;The Ruby project has tests in the form of rspec-given, which is quite fun. The Clojure project has tests in the form of Midje, which has a lovely syntax.&lt;/p&gt;</description></item><item><title>Knights Who Say Monad</title><link>https://gigasquidsoftware.com/blog/2011/04/12/knights-who-say-monad/</link><pubDate>Tue, 12 Apr 2011 02:02:05 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/04/12/knights-who-say-monad/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://farm6.staticflickr.com/5539/9925781235_e80904a961_o.jpg"&gt;&lt;/p&gt;
&lt;p&gt;(*Sketch By My Awesome Husband)&lt;/p&gt;</description></item><item><title>On Thinking in Ruby and Clojure</title><link>https://gigasquidsoftware.com/blog/2011/04/08/on-thinking-in-ruby-and-clojure/</link><pubDate>Fri, 08 Apr 2011 02:02:09 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/04/08/on-thinking-in-ruby-and-clojure/</guid><description>&lt;p&gt;Recently, I decided to work on a set of code Katas. I couldn&amp;rsquo;t decide whether to do them in Ruby or Clojure, so I decided to do them in both. I did the Kata in Ruby first and then immediately followed up with the same one in Clojure. It was an interesting exercise, not only for the learning of the languages, but to highlight how I thought about the problems differently depending on the language.&lt;/p&gt;</description></item><item><title>Bowling Game Kata in Clojure with STM and defrecord</title><link>https://gigasquidsoftware.com/blog/2011/03/01/bowling-game-kata-in-clojure-with-stm-and-defrecord/</link><pubDate>Tue, 01 Mar 2011 02:43:29 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/03/01/bowling-game-kata-in-clojure-with-stm-and-defrecord/</guid><description>&lt;p&gt;We took our kids bowling for the first time the other day. I have to admit, that I am not a great bowler. I had only been bowling two or three times in my life previous to that event and I was very thankful that those bumpers were up. The computer program malfunctioned in the final frames of our last game. I realized then, that I really had no idea how to score bowling. Later that night, in my surfing, I came across a reference to the &lt;a href="http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata"&gt;Bowling Game Kata&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Vampire Slaying in Clojure with STM - Part 2</title><link>https://gigasquidsoftware.com/blog/2011/01/18/vampire-slaying-in-clojure-with-stm-part-2/</link><pubDate>Tue, 18 Jan 2011 03:01:47 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/01/18/vampire-slaying-in-clojure-with-stm-part-2/</guid><description>&lt;p&gt;In Part 1, we used defrecords to create a vampire slayer named “Buffy” and a few vampires for her to kick around. Today we are going to use Buffy and her vampires to explore STM (Software Transactional Memory) in Clojure for managing state.&lt;/p&gt;
&lt;p&gt;Recap&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defrecord Vampire [name, health])
(def vampire1 (Vampire. &amp;quot;Stu&amp;quot; 50))
(def vampire2 (Vampire. &amp;quot;Vance&amp;quot; 100))
(def vampire3 (Vampire. &amp;quot;Izzy&amp;quot; 75))
(defrecord Slayer [name, weapon])
(def kungfu 25)
(def buffy (Slayer. &amp;quot;Buffy&amp;quot; kungfu))
(defn hit [vampire, hitpoints]
(- (:health vampire) hitpoints))
;vampires don't fight back but it takes time to kill them
(def combat-time 20)
(defn hit-vampire [vampire, slayer]
(Thread/sleep (* combat-time 10))
(assoc vampire :health (hit vampire (:weapon slayer))))
(defn kill-vampire [vampire, slayer]
(if (&amp;gt; (:health vampire) 1)
(recur (hit-vampire vampire slayer) slayer)
(assoc vampire :health 0)))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let&amp;rsquo;s take our vampires and stand them up in a line for Buffy to fight. We are also going to create a function that just has Buffy killing a vampire, rather then a generic slayer.&lt;/p&gt;</description></item><item><title>Vampire Slaying with Clojure - Part 1 defrecord</title><link>https://gigasquidsoftware.com/blog/2011/01/12/vampire-slaying-with-clojure-part-1-defrecord/</link><pubDate>Wed, 12 Jan 2011 03:33:43 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2011/01/12/vampire-slaying-with-clojure-part-1-defrecord/</guid><description>&lt;p&gt;It&amp;rsquo;s time to learn more Clojure. This time, Buffy the Vampire Slayer* is going to help us.&lt;/p&gt;
&lt;p&gt;First things first, of course we need vampires!&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s create a vampire data type with defrecord. Our vampires are going to have two attributes, their name and the number of health points that they have. This is of course, how Buffy is going to slay them. If a vampire&amp;rsquo;s health points goes to zero, then they are dead. Well, they already are undead&amp;hellip; so let&amp;rsquo;s say they are slayed at that point and turn into dust.&lt;/p&gt;</description></item><item><title>Mutually Recursive Zombies on a Trampoline</title><link>https://gigasquidsoftware.com/blog/2010/12/08/mutually-recursive-zombies-on-a-trampoline/</link><pubDate>Wed, 08 Dec 2010 04:06:50 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/12/08/mutually-recursive-zombies-on-a-trampoline/</guid><description>&lt;p&gt;It&amp;rsquo;s late at night. The kids are all tucked snuggly in their beds and I am ready to explore mutual recursion on my own in Clojure after doing some reading of &lt;a href="http://pragprog.com/titles/shcloj/programming-clojure"&gt;Programming Clojure&lt;/a&gt;. What better subject to explore them with then zombies? In this example we have two zombies – zombie1 and zombie2. Let&amp;rsquo;s represent each zombie as a sequence:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(def zombie1 '(&amp;quot;z1_head&amp;quot;, &amp;quot;z1_r_arm&amp;quot; &amp;quot;z1_l_arm&amp;quot; &amp;quot;z1_torso&amp;quot; &amp;quot;z1_r_leg&amp;quot; &amp;quot;z1_l_leg&amp;quot;))
(def zombie2 '(&amp;quot;z2_head&amp;quot;, &amp;quot;z2_r_arm&amp;quot; &amp;quot;z2_l_arm&amp;quot; &amp;quot;z2_torso&amp;quot; &amp;quot;z2_r_leg&amp;quot; &amp;quot;z2_l_leg&amp;quot;))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;zombie1 is ready to take a bite of zombie2&amp;rsquo;s left leg, since it is nice and tasty there at the end. Once zombie1 takes a bite, the body part will be added to its own sequence – but in the second position, so that the head is always first and ready to take another bite. So, if zombie2 just stood still and let itself be eaten, after one bite, zombie1 would look like this&lt;/p&gt;</description></item><item><title>Zen and Zombies - Adventures in Ruby</title><link>https://gigasquidsoftware.com/blog/2010/11/20/zen-and-zombies-adventures-in-ruby/</link><pubDate>Sat, 20 Nov 2010 04:06:07 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/11/20/zen-and-zombies-adventures-in-ruby/</guid><description>&lt;p&gt;What do Zen and Zombies have in common? You probably got the beginning with the letter “Z”, but did you also guess Ruby? This blog post is to share two awesome and fun filled ways to learn Ruby and Ruby and Rails.&lt;/p&gt;
&lt;p&gt;First, let&amp;rsquo;s start with the Zen. &lt;a href="http://edgecase.com/"&gt;Edgecase &lt;/a&gt;created a great way of learning Ruby. It is through &lt;a href="http://rubykoans.com/"&gt;Ruby Koans &lt;/a&gt;. Koans are a way of teaching Zen through questions. The master asks the student a question. The student then meditates on it until they come to the answer , eventually leading to enlightenment. The Ruby Koans are cleverly designed to teach bite size tidbits of the Ruby language through the completion of unfinished test cases. Each test case is a Koan. Every time you fix the test case by filling in the blanks, you are gaining a deeper understanding of the language. The main path_to_enlightment.rb file leads you through test cases that explore many areas of the languages such as Strings, Classes, Methods, and Exceptions. Enlightenment has never been so much fun.&lt;/p&gt;</description></item><item><title>Clojure Dictionary Challenge</title><link>https://gigasquidsoftware.com/blog/2010/10/12/clojure-dictionary-challenge/</link><pubDate>Tue, 12 Oct 2010 03:11:52 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/10/12/clojure-dictionary-challenge/</guid><description>&lt;p&gt;There was a question today on Twitter about how to go about finding the word with the most consecutive consonants in the dictionary file. Of course, being a typical developer, when presented with a problem – I am usually not satisfied until I find a solution. Since I am interested in learning Clojure, I thought I would try to solve this problem functionally.&lt;/p&gt;
&lt;p&gt;Armed with Stuart Halloway&amp;rsquo;s “Programming Clojure” and trusty Google by my side, I embarked on my first Clojure mission.&lt;/p&gt;</description></item><item><title>Agile Software Lessons from Ballet</title><link>https://gigasquidsoftware.com/blog/2010/09/13/agile-software-lessons-from-ballet/</link><pubDate>Mon, 13 Sep 2010 00:09:15 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/09/13/agile-software-lessons-from-ballet/</guid><description>&lt;p&gt;&lt;img alt="Swan Lake" loading="lazy" src="http://lh3.ggpht.com/_ebGqcJ7qdjk/SimNpSOosaI/AAAAAAAACcI/lr-4YdYyz3E/kirov-swan-lopatkina.jpg"&gt;
_Photo by Valentin Baranovsky - Uliana Lopatkina and Danila Korsuntsev. _&lt;/p&gt;
&lt;p&gt;Many moons ago, I spent a couple of years dancing with a ballet company. You wouldn&amp;rsquo;t think that much of that experience would transfer to development projects, but I give you an example in partnership, the can be applicable straight from the ballet world to the software world. The partnership in question is the one between the lead ballerina and the lead male dancer called a “pas de deux.” In many ballets, this dance involves the ballerina being a swan/princess and the male dancer being a prince/sorcerer. But in my example, it really doesn&amp;rsquo;t matter that much. The only important point is that they are the best dancers in the whole company.&lt;/p&gt;</description></item><item><title>Openssl fix for Rails 3.0 on Ubuntu</title><link>https://gigasquidsoftware.com/blog/2010/09/12/openssl-fix-for-rails-3.0-on-ubuntu/</link><pubDate>Sun, 12 Sep 2010 14:11:14 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/09/12/openssl-fix-for-rails-3.0-on-ubuntu/</guid><description>&lt;p&gt;If you are trying to run ruby rvm and rails 3.0 on Ubuntu you might run into this problem when you start up you server.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LoadError: no such file to load
-- openssl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After much googling and researching – just installing the openssl library on your system won&amp;rsquo;t fix the problem. You need to recompile and install your rvm ruby version with the openssl. I found this fixed it for me.&lt;/p&gt;</description></item><item><title>Fox In Socks Blocks</title><link>https://gigasquidsoftware.com/blog/2010/08/20/fox-in-socks-blocks/</link><pubDate>Fri, 20 Aug 2010 02:43:34 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/08/20/fox-in-socks-blocks/</guid><description>&lt;p&gt;In honor of the Ruby &lt;a href="http://www.globalnerdy.com/2010/08/19/whyday-today-august-19th/"&gt;Why Day&lt;/a&gt;, I was inspired to dabble in Ruby Blocks after being reading &amp;ldquo;Fox In Socks&amp;rdquo; multiple times to my children before bed. For all of you parents out there that have read the book many, many times while your children are giggling at your pronunciation difficulties, I am sure this bit will be familiar:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def fox_in_socks_blocks
chicks_bricks = [&amp;quot;Chicks&amp;quot;,&amp;quot;bricks&amp;quot;,&amp;quot;blocks&amp;quot;,&amp;quot;clocks&amp;quot;]
yield chicks_bricks[0..1]
yield [chicks_bricks[0],chicks_bricks[2]]
yield chicks_bricks
end
fox_in_socks_blocks do |sillywords|
puts &amp;quot;#{sillywords[0]} with #{sillywords[1]} come.&amp;quot; if sillywords.size &amp;lt; 3
puts &amp;quot;#{sillywords[0]} with #{sillywords[1]} and #{sillywords[2]} and #{sillywords[3]} come.&amp;quot; if sillywords.size &amp;gt;= 3
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&amp;rsquo;s right - the output is:
&lt;code&gt;Chicks with bricks come. Chicks with blocks come. Chicks with bricks and blocks and clocks come.&lt;/code&gt;&lt;/p&gt;</description></item><item><title>The Smart Not-So-Smart Wave Function</title><link>https://gigasquidsoftware.com/blog/2010/08/18/the-smart-not-so-smart-wave-function/</link><pubDate>Wed, 18 Aug 2010 01:58:04 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/08/18/the-smart-not-so-smart-wave-function/</guid><description>&lt;p&gt;I am cruising along in my morning. I have a cup of tea in my hand and a good outlook on my tasks at hand. The code is flowing off of my fingertips. I am feeling pretty smart. Then the cloud moves in and the code darkens. I am at a roadblock. I try to google, I try debugging, I try calling in my fellow developers to see if they can see what the problem is&amp;hellip; no luck. I bang my head unproductively for another hour and then go home. A fresh start in the morning and a fresh cup of day move me in a new direction, somehow I stumble upon the answer and quite frankly, it was so simple I can&amp;rsquo;t believe I missed it. I feel not so smart. This is one of the many smart-not-so-smart waves that rule the life of a developer.&lt;/p&gt;</description></item><item><title>Open Source Wednesdays</title><link>https://gigasquidsoftware.com/blog/2010/07/30/open-source-wednesdays/</link><pubDate>Fri, 30 Jul 2010 02:54:33 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/07/30/open-source-wednesdays/</guid><description>&lt;p&gt;I have always wanted to contribute to Open Source. I have reaped the benefits of using Open Source packages throughout the years, I sincerely want to give back. What has been stopping me all this time? Lack of time is my main excuse. I have two small children and by the time I clean up from dinner and get them bathed and off to bed, there is little time left to code. I tend to use this excuse for lots of other tasks that I avoid around the house, like closet cleaning, reorganizing the garage, etc … But an excuse is exactly what it is.&lt;/p&gt;</description></item><item><title>Hello World in RDF</title><link>https://gigasquidsoftware.com/blog/2010/07/08/hello-world-in-rdf/</link><pubDate>Thu, 08 Jul 2010 03:33:20 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/07/08/hello-world-in-rdf/</guid><description>&lt;p&gt;I decided to start playing with RDFs to start me on the road to understanding and programming Semantic Web. As always, the first step it to start with a “Hello World” type of exercise. In my case, I had armed myself with a good cappuccino at Starbucks and decided to set myself with a purl link and FOAF page.
&lt;a href="https://secure.wikimedia.org/wikipedia/en/wiki/FOAF_%28software%29"&gt;
FOAF (Friend of a Friend)&lt;/a&gt; is one of the most popular vocabularies out there for RDF (Resource Description Framework). It expresses relationships in a machine readable format and is considered one of the first social Semantic Web applications.&lt;/p&gt;</description></item><item><title>No Fluff Just Stuff - Columbus 2010</title><link>https://gigasquidsoftware.com/blog/2010/07/01/no-fluff-just-stuff-columbus-2010/</link><pubDate>Thu, 01 Jul 2010 18:04:53 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/07/01/no-fluff-just-stuff-columbus-2010/</guid><description>&lt;p&gt;I attended my first NFJS conference last weekend up in Columbus. Overall, it was an excellent experience. The speakers were all first rate and I got a chance to hang out and meet some other like-minded people who are interested in giving up a weekend to learn new technologies and generally just geek-out.&lt;/p&gt;
&lt;p&gt;The main technologies that stood out to me are concurrency and semantic web. Concurrency and functional programming are becoming more and more important with the ability to scale out on the server, rather then scale up (horizontal vs vertical scaling). There is always some threshold to the amount of power that you can throw at one system. However, that limit disappears if you can spread the load out across many servers. Java runs into some real problems with threads and concurrency. For this reason, the functional languages like Scala, Erlang, and Clojure are really starting to shine. I was so impressed with Clojure, that I picked up a book for my “play around and take a look at” tech stack.&lt;/p&gt;</description></item><item><title>Not ready to throw the Object Model out with the Bath Water</title><link>https://gigasquidsoftware.com/blog/2010/06/27/not-ready-to-throw-the-object-model-out-with-the-bath-water/</link><pubDate>Sun, 27 Jun 2010 02:38:46 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/06/27/not-ready-to-throw-the-object-model-out-with-the-bath-water/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://farm4.staticflickr.com/3833/9925947563_50031edb46_o.jpg"&gt;&lt;/p&gt;
&lt;p&gt;I have been attending talks on functional programming languages at NFJS over the past couple of days. I have to admit it, I am really taken with the power of Scala and Clojure to tackle problems that Java cannot handle. I even purchased a Clojure book to add to my &amp;ldquo;languages to take a good hard look at&amp;rdquo; stack. I really believe that it is true that the functional languages have a lot to offer.&lt;/p&gt;</description></item><item><title>Customer Zone + Developer Zone = Most Excellent Zone</title><link>https://gigasquidsoftware.com/blog/2010/06/09/customer-zone--developer-zone-most-excellent-zone/</link><pubDate>Wed, 09 Jun 2010 17:08:52 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/06/09/customer-zone--developer-zone-most-excellent-zone/</guid><description>&lt;p&gt;I think most developers are familiar with getting in the “zone”. The place you get when you are totally in focus and in the flow of development. The code comes quickly, the ideas are together and everything just seems to work. It is the sweet spot of productivity. I have found the best way for me to get into the zone is to put on my headphones, arrange some uninterrupted time and just start going.&lt;/p&gt;</description></item><item><title>Feature vs Bug - Does it Matter?</title><link>https://gigasquidsoftware.com/blog/2010/05/27/feature-vs-bug-does-it-matter/</link><pubDate>Thu, 27 May 2010 02:09:14 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/2010/05/27/feature-vs-bug-does-it-matter/</guid><description>&lt;p&gt;How many minutes and hours have been wasted trying to decide if a ticket is a feature or a bug?  Yes, I have been there, entering a new item ticket, the dropdown in the tracker glares at me.  Decide!  Is is a bug or a feature.  Some are clear-cut, of course.  The ever popular null-pointer on unvalidated input for example.  But others are not so clear.   What about the field that you thought was supposed to viewable employees in the supervisor&amp;rsquo;s location, but really ended up needing to be viewable to the employee&amp;rsquo;s in the supervisor&amp;rsquo;s location and the direct reports in another location?   The question then turns on whether or not this information was in the &amp;ldquo;spec&amp;rdquo; or whether the business user didn&amp;rsquo;t let the developer know about it.  Now the question has created an ugly situation of &amp;ldquo;blame&amp;rdquo;.  Whose fault is it?&lt;/p&gt;</description></item><item><title>Guide to Leaving your Mac Laptop</title><link>https://gigasquidsoftware.com/blog/1/01/01/guide-to-leaving-your-mac-laptop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gigasquidsoftware.com/blog/1/01/01/guide-to-leaving-your-mac-laptop/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="http://farm4.staticflickr.com/3795/11572063123_6baf3b35c2.jpg"&gt;&lt;/p&gt;
&lt;p&gt;I felt like I was in a controlling relationship headed downhill.
After two custom laptops returned for defective hardware, I wanted to
leave. But leaving didn&amp;rsquo;t seem so easy after living in the walled
garden of Apple all those years.&lt;/p&gt;
&lt;p&gt;This blog post is about how to leave your Mac and return to OSS.&lt;/p&gt;
&lt;h2 id="make-a-new-plan-stan"&gt;Make a New Plan, Stan&lt;/h2&gt;
&lt;p&gt;There are quite a few nice alternatives to the Mac Air out there.
I decided to go with the new
&lt;a href="http://www.dell.com/us/business/p/xps-13-linux/pd"&gt;Sputnik 3&lt;/a&gt;.
Some of my reasons:&lt;/p&gt;</description></item></channel></rss>