When learning a new language I find it helpful to study a languages idioms. Idioms exist in a language for a specific reason. Sometimes that reason is to further the principles of the language, other times it’s to mask, or otherwise deal with some underlying design decision of the language. Currently, I am studying Haskell, and currently I am struggle to clarify the idioms of the language. The syntax is still very new and awkward, currently with a total authoring in Haskell of 713 lines.
I was reviewing a new software module for work today, and discovered that when the class fit on a single screen my comments were more meaningful, than when the class was larger. My comments for spatially larger classes were mostly focused on syntactic, and idiomatic details. It was an interesting self-observation, but this certainly isn’t new information. I’ve heard the adage that smaller reviews are more effective than larger ones. At a conference I attended hosted by Atlassian: The JIRA team noted several instances where the time per file decreased with the number of files in the review.
I wake up in the morning with ideas that please me, and some of those ideas actually please me also later in the day when I’ve entered them into my computer. - Donald Knuth I’m on a bit of a Knuth kick right now, and I’ve been procrastinating studying, and homework to find interviews, and papers by the master himself. I currently have a list of microfiche references to check out as soon as I get to the basement of my university’s library: Woot, computational necromancy!
This past weekend we held another capture the flag event at the Arizona State University’s Linux User’s Group. It had more of a system admin focus than security cracking exploits, but it was fun an nontheless a diverse learning experience for all those involved. However, almost immediately, I realized the number one rule in CTF, nothing is off limits! The game was organized into two parts, a game server which collected the the scores and displayed the point totals of all teams in real-time, and the virtual servers (hosted on Amazon EC2) which contained the actual games.
This semester, I’m taking an introduction to artificial intelligence, and despite this being the second week, I’ve learned a great deal. Our second assignment was to implement a program in clingo (clasp on gringo) which is a derivative of Prologue. This is my first experience with a logical programming language, and I am intrigued to the possibilities. Immediately I was intrigued by the freeform expressiveness of the language. The example we did in class for example was to determine which muppet went to which amusement park.
Dr. Andrew Weil of the Arizona Center for Integrative Medicine states, “If we can make the correct diagnosis, the healing can begin. If we can’t, both our personal health and our economy are doomed. ” Accurate, traceable, and informed diagnosis are paramount to the health of patients. Medicine, within the United States, is an enormous $2.5 Trillion opportunity and with the proliferation of research over many decades new medical findings are being published than could ever be grokked, unassisted, by a doctor .
I found an interesting blog today with some clear and interesting discussion on Haskell, and Monads: http://intoverflow.wordpress.com/2010/07/20/i-come-from-java-and-want-to-know-what-monads-are-in-haskell/
For the last several months I’ve been working on Project Euler in Haskell. My intent has been to learn Haskell, and grasp the functional concepts. While working on several problems it’s important to have a workflow that allows for a fast cycle time. I spent some time with Cabal, attempting to build a scheme that works efficiently, but was unable to do so. Instead I setup a mix of cabal-dev, and make to build a fast workflow that allow for compiling, testing, common code libraries, and benchmarks.
My family purchased this book for me, as a motivator to start thinking about the thesis component of my master’s degree. “It must be substantial…” said a colleague of mine. “It must be original work…” Original, substantial, all words that left me with uneasiness about how to start. This book however was an easy read, and gave some very pragmatic advice on how to start, yet the most important quote I drew from the book was, “What are the questions in your field?
As a software engineer I have a vested interest in disproving this statement. Bjarne Stroustroup says C++ is designed to create efficient abstractions. A software engineer’s job is to create simple abstractions to complex systems. State machines form a large part of many systems. The other day, a co-worker came to me, and asked, “Is it better to make straight line code for each case statement, even if it repeats, or is it better to abstraction into functions and make the code ‘cleaner’.
A coworker of mine stated something interesting, “…a pattern is evidence of missing feature in the language…”. At first I struggled with this statement. How can you design a language general enough to be widely used, and simultaneously cover all the desirable idioms such that patterns are built in? At first this seemed silly to me, until I heard Erik Meijer state in a Haskell lecture, “..this is why we implemented LINQ as a pattern instead of a language feature…”
Well, the Haskell honeymoon is over for me. I spent some time working on a few Project Euler problems this weekend, and my initial assumptions formed from toy problems were dashed. While I was able to solve 3 problems fairly quickly, I faced a number of non trivial bugs, and memory issues. On the other side of my naïve passion, I’m finding a functional thought process, and it’s exciting. My problems were really centered around a naïve belief that Haskell could convert my inefficient algorithms to some “mathematically pure” representation.
I’ve restarted my haskell programming education. Here is my implementation of FizzBuzz fizzbuzz x | x `mod` 15 == 0 = "FIZZBUZZ" | x `mod` 3 == 0 = "FIZZ" | x `mod` 5 == 0 = "BUZZ" | otherwise = show x main = print (map fizzbuzz [1..100]) [suffusion-adsense client=‘ca-pub-6284398857369558’ slot=‘1495369305’ width=‘728’ height=‘90’]
Latex Walkthrough from Jeremy Wright on Vimeo.
We presented our Beagle Board Cluster at the Engineering Career Fair. Look out for a design writeup soon! http://asulug.org/2013/03/engineering-open-house/ [suffusion-adsense client=‘ca-pub-6284398857369558’ slot=‘1495369305’ width=‘728’ height=‘90’]