Friendships

After visiting with family over the Christmas break, Mandi and I drove out to Omaha to spend a few days with our friends Andrew and Sarah and their two little boys. To our delight, they brought home the newest addition to their family just before we arrive: Missy, the Schnauzer.

It was lovely to relax for a few days and hang out like we used to. Andrew and I used to have more opportunities like these when he lived in Chicago and I lived in Indianapolis.

With Mandi there this time it was easier for Andrew and I to get away together. Sarah has always been generous with me stealing away Andrew when I visit, but it’s hard for me to ask to do so because I know it’s like asking if we can go play while she takes care of the kids. I’m really thankful for that time, though, and knowing that Mandi was willing to help out made it easier.

_MG_3486
This was my attempt at a candid moment with Andrew, who is usually the one behind the camera.

Even those of us without kids know that it’s life-changing how different kids make things. When I spend the time with them I’m reminded of how little I have to think about things like eating, going to bed, doing house-work, etc… On the contrary, it can noticeably impact Ezra’s and Micah’s moods if they don’t eat at the scheduled times and they seem to fumble around with their bodies and expressiveness as they figure out how to say they’re hungry, just as missing a nap or going to bed at the wrong time can have frustrating consequences. I admire the effort parents put out to bring that needed structure and security in their kids’ lives (and clearly I have none of the structure in my own).

_MG_3477

That late-night light-bulb illuminated the lounge
where we laughed and lingered while the little ones
were lulled in their beds and the chill of the winter
was knocking on that lounge door,
was knocking and calling but we couldn’t hear
for the light of that lamp which was warming our spot
in the corner of that lonely lounge
was all that our fascinations were fixed on as we
sat and sipped and shared tales
of the times that we missed
and the times that were yet to be.

We got out into a place called the Old Market in downtown Omaha a few times which was really fun. The city reminded me of Kansas City. He was able to show me some of the places from his childhood which were part of who he is and which are special to his family. He took me to the Drastic Plastic record store and to the Beansmith up the street. We sat and had good conversation right across from the old brick buildings lining the paved-brick road.

In fact, one of the buildings we sat across from had seen its last Christmas and wasn’t going to see another. In 7º F temperature, it burned up just a few nights after we left. Andrew took some amazing pictures of the beatiful remants the following morning. Water sprayed on the building to quell the flames froze before it fell to the ground. If you click on the picture it will take you to his full gallery, and it’s worth a view.

Eventually Mandi and I had to leave. The 7º F chill wasn’t exactly holding us back either. We packed up, took a 4:00am lift to the airport, and came back to sunny Tucson after having been gone for weeks. Her luggage was destroyed in transit and we are waiting for a replacement from the airline. Overall we had a good vacation, but it’s really nice to be back home and back into my routine. I hope you all had a nice Christmas and New Years and had a chance to spend some time with some great people too.

 

Airports are fun

The following post was written onboard a flight a few weeks ago.

You can attribute any typos in this post to my shaky ride through the turbulence high above the Pennsylvania countryside. I’m just returning after a long trip that ended in Philadelphia for the first-ever WordCamp US.

Airports are Fun-003
Excersize is cut short by moving sidewalks at the Philadelphia airport.

My original flight was scheduled to leave at 1:45pm to Phoenix, where I would layover and then catch a second flight to Tucson. Just before boarding, the gate agents announced that they would be offering a $500 voucher and a later journey for anyone willing to give up their seat on the flight. I’ve been given this offer a few times, but usually I’m rearing to get home or on a deadline. Today, however, I was in no rush and immediately jumped at the opportunity. Now I’m still getting home on the same day, but I’ll take the shuttle from Phoenix to Tucson instead of flying and I have an extra $500 to spend on a flight within the next year (the catch is that I have to buy the ticket at the American Airlines desk inside an airport).

Henceforth, instead of leaving at 1:45pm I left at 6:10pm and had the rest of the afternoon to wait in the airport. Years ago this would have been quite a deal: free WiFi was basically non-existent (it wouldn’t have mattered much because I didn’t have a smartphone and I didn’t carry around my laptop – I couldn’t easily carry it around and its battery didn’t last very long); I didn’t have much flexibility in my travel so I was always rushed in the airport (travel time was wasted time); I didn’t have much real experience at airports.

Airports are Fun-004
Artists make otherwise unremarkable infrastructure creative at the Philadelphia airport.

As times have changed, I’ve grown to enjoy the airport more and more. Today I sat around at a sit-stand shelf at Starbucks and worked on my laptop while planes taxied behind the floor-to-ceiling windows. After a while a small band setup next to the Christmas trees, Menorahs, and lights and started playing smooth Jazz. Like my last layover in San Francisco, it was simply a peaceful time. Despite the rush and chaos, I had the most focused work session I think I’ve had in three weeks.

I’ve come to learn that although airports can seem pretty scary and unfamiliar, they are a warm home to frequent travelers. They’re clean, safe, and have just about everything you could need. I’ve spent time alone in airport yoga rooms and prayer rooms, washed my face and put on a refreshingly clean change of chothes in the bathroom, stared out the windows at things passing by, and sipped plenty a capuccino while calmly working at the gates.

We don’t always have the luxury of time and flexibility, but we always have the choice of how to make use of our circumstances. Travel was always hectic growing up and coincidentally was never considered part of our vacation or part of our journey. Mandi and I have always tried to make the ride special: by stopping in the middle of a long drive to go hiking; by trying to walk around the entire airport during a layover; or simply by finding a place to get comfortable and work.

Micah’s Journey to Diagnosis

My best friend has two wonderful little boys. Micah, the older brother, has experienced difficulties with his speech and there are a few areas where he seems to be developmentally behind other children. At the same time, Micah is one of the happiest little guys I know and has an absolutely charming personality.

It has been a challenge for Andrew and Sarah to figure out how they ought to respond and act to help Micah grow, and for some time they have had a looming suspicion that Micah might suffer under the ailment of a rare genetic syndrome. They finally have a confirmation for a very rare condition called Kabuki Syndrome.

The linked blog post is an incredibly worthwhile read. Andrew tells his story from the very beginning to now and shares his emotions, joys, and struggles along the journey. I am very proud of my best friend and his wife and have learned so much from him as he has shared his experiences and challenged me in the ways that I perceive parents and their children.

Stepping Back

The start of the journey

Early in the morning on September 17th, 2012 Sarah’s water broke. She was five days overdue and extremely ready to meet our first little baby. After a few hours of trying to get comfortable at home we headed to the hospital to meet our little guy.

11330251863_25401a27c4_k

The labor went quickly, without any real hitches at all, and our first son Micah entered the world at 12:31 in the afternoon. It is a birth story that Sarah’s midwife said needed to be told frequently to encourage other pregnant women. Birth stories aren’t all bad or horrific or traumatizing. We were fortunate to have a good one to tell.

It was a Monday. I’ll never forget the feeling of lying in that roll away hospital bed that first night with Micah watching Peyton Manning throw four interceptions on Monday Night Football.

I had a son. And life as…

View original post 3,311 more words

next :: Java -> Haskell

You might have read Seeing Java where I described my experience writing a project for a Java class as an exercise in learning some modern Java. Today I did a similar experiment but on a much smaller scale and with one of the polar opposites of the Java language: Haskell.

Haskell is something I’ve been thinking quite a bit about lately as I’ve been pushing myself to learn more about “functional programming.” Haskell and Clojure are two languages that break the normal paradigm I’m used to and encourage a dramatically different style of programming. They  take very different approaches to that concept, though, and I’ll only be discussing Haskell today. By the way, today is the day I wrote my first program ever in Haskell.

Functional programming is a misnomer. Most software is functional. The term comes from a technical aspect about passing around functions whereas many languages only allow passing around data. Functional programming is basically the result of the worlds of mathematics and computer science crashing into each other. I’ll describe it more fully in a future post.

Java and Haskell have strong typing in common, but Java’s typing system feels like a bear compared to Haskell’s, which helps more than it annoys. Typing is lightweight in Haskell, which means that the language encourages creating all sorts of names for a certain type of data. Instead of a list of numbers in a certain form, for example, we might create  a phoneNumber type. This can be done in most programming languages but it can require more effort to do well.

Haskell is a purely functional language. This comes from the math side of things and that means we can make a bunch of assumptions about the code we write, which in turn makes code that might otherwise be very slow to run work fast. Usually when programming there is a way to write code that is simple to understand but slow and another way that is harder to read but runs faster. Because we “promise” not to do certain things, the Haskell compiler can translate our easier-to-read code into faster-to-run code for us.

Haskell has a bad reputation for being incredibly cryptic. My first bit of Haskell was pain-free, but I’m not doing anything particularly complicated. I enjoyed the language syntax (the format for how you are supposed to write the program) and the error messages were pretty good when I wrote incorrect code. As a programmer I didn’t find this any more cryptic or hard-to-read than just about any other language.

One of the things I really enjoy is the declarative nature of this code verses the imperative or procedural nature of what I’m used to. When we typically learn how to program, we are taught how to break complicated processes into smaller and smaller steps and then order those steps in code to accomplish our goals. The math-side of functional languages prefer to focus on the relationships between data (or input and output) and let the computer “figure out” how to make it work. Let me illustrate with a description of pattern matching.

Pattern matching is a way to specify different behaviors for input that is structurally distinct. A little code will hopefully make sense.

pluralize :: takes a word and a plurality indicator to make a new word
    noun 1 = noun
    noun 2 = "a couple {noun}s"
    noun n = "{noun}s"

Disclaimer: the above snippet isn’t real code from any language, but it’s similar to how Haskell makes functions to operate on data. We can see here in the second line that if we call pluralize with a noun and a count of 1, then we just return the noun. If, however, we want the noun for a count of 2, the function pieces together a simple fragment, “a couple of things.” Finally, if we call it with any other number besides 1 or 2, we simply add an s on the end of the noun and call it a day. This crude pluralizer won’t get an A in grammar class, but it’s not a bad way to describe the behavior we want from pluralizing nouns.

This code snippet leaves much to be imagined on how to accomplish the pluralizing. In a traditional imperative language, we would have to construct it in a way that includes lots of “support” code, which figures out what circumstances we are in before giving a new value.

pluralize( noun, count )
    if count is 1 then noun
    else if count is 2 then "a couple {noun}s"
    else "{noun}s"

The differences are subtle in a simple function like this, but in the first snippet we don’t have to perform checking on the input to see if it is a particular value and then to respond accordingly. Sometimes we end up with more code to check the input than we do to actually get.stuff.done. Again, this is a result of the mathematical focus on the algorithm in Haskell and other functional programming languages.

This was a small project but a fun one. Reasons for choosing Haskell for a project include the language’s ability to prove its behavior the way we construct mathematical proofs such as for  the Pythagorean Theorem, its ability to concurrently run code safely, its type safety, and the love of the purity and expressiveness of the language.

The only real trip-up I had came from the fact that I was running my code through my text editor – a “set-it-and-forget-it” kind of deal. Unfortunately, a few of the errors I made in the process caused the code to run forever without ending, so I was surprised to see a popup telling me that my computer’s memory was full and I had to close some applications or it would crash. Whoops.

Want to see the code? Here it is. How much of what it is doing can you figure out? How would you attempt to add a new function in this code to compute the standard deviation?

 


import Data.Monoid;
x1 = [1..100]
x2 = [2,4..100]
x3 = [3,6..100]
data Summary = Summary {µ::Float, n::Int} deriving (Show)
instance Monoid Summary where
mempty = Summary { µ = 0, n = 0 }
mappend s1 s2 = Summary {
µ = combinedMean s1 s2,
n = (n s1) + (n s2)
}
count :: [Float] -> Int
count xs = length xs
mean :: [Float] -> Float
mean xs =
let s = sum xs
n = fromIntegral $ count xs
in s / n
describe :: [Float] -> Summary
describe xs = Summary { µ = mean xs, n = count xs }
combinedMean :: Summary -> Summary -> Float
combinedMean s1 s2 =
let n1 = fromIntegral $ n s1
n2 = fromIntegral $ n s2
µ1 = µ s1
µ2 = µ s2
in (µ1 * n1 + µ2 * n2) / (n1 + n2)
main :: IO ()
main = do
putStrLn $ " x1 – " ++ (show $ d1)
putStrLn $ " x2 – " ++ (show $ d2)
putStrLn $ " x3 – " ++ (show $ d3)
putStrLn $ " x1 + x2 – " ++ (show $ d1 <> d2)
putStrLn $ "x1 + x2 + x3 – " ++ (show $ mconcat [d1, d2, d3])
where
[d1, d2, d3] = map describe [x1, x2, x3]

Shakes

I wrote the following post over a week ago while returning home from a conference in Philadelphia, but neglected to post in a timely manner.

My flight home today was both one of the shakiest and most-consistently shaky flights I’ve been on. The pilot announced that we would likely experience more turbulence than normal “for a long while.” Not exactly the usual reassurance that it will be short-lived. The flight crew has been amazing tonight though. I couldn’t rate this particular experience with American Airlines highly enough.

When I finally arrived at home and laid down to sleep, I could still feel the turbulence just as feeling the rolling of the waves after spending a day on a boat.

Since that time…

All the shakes were pretty bad on me. After having broken a rib a week earlier, the rocking and bumping and shuffles wore me out. The night after the flight too, I could still feel the turbulence just like you can feel the rocking of the waves after a day on a boat.

It’s all good though, one more adventure in the journey book.

The souls are all proceeding

Too many people have been waiting for me on this…although I promised that it would take some time before I could publish the edited photos, it took me much longer than anticipated. In fact, I don’t think it’s ever taken me this long before to go from photo-shoot to Flickr, but I started out with five hundred pictures and have ended up with eighty-six.

It’s very difficult to delete so many pictures that I’ve taken, but this is one of the best disciplines for shooting. If I left in all the photos I liked, I’d bore you to death and you’d never be able to pick out the best ones from the rest of the group.

These are just my favorites, but you can follow-on to my Flickr site to see my whole album for the Tucson All-Souls Procession and download higher-resolution copies.

Seeing Java

In the world of programming there is a particular language known for its…well…thoroughness in doing its job: Java. If any programming language were to build the Great Pyramids, it would probably be Java – and this is no compliment!

A friend of mine is the teaching assistent for a Java class at the University, however, and out of curiousity I recently had him send me a class project. I’ve always ignored Java despite it being one of the most popular programming languages and wondered what I might be missing out.

The rest of this post is a personal reflection on my experience building a program to compare two Poker hands in Java as a “class project” for a first-year Java class.

Continue reading “Seeing Java”

Pause. Breathe.

This post is coming to you from our new WordPress app for Mac computers, which we released today!

I took a moment tonight after a long few days to setup at a coffee shop in downtown Kansas City. It’s a shame I don’t have more time to explore them because there are some real winners here. Right now I’m at the West Port Coffee House (open ’til 11:00pm).

It’s been a real rush here and I’ve kept myself busy 100% with family matters in the land of my ancestors – well, at least my grandparents and their generation.

Moving around to new coffee shops in unfamiliar cities is somewhat relaxing to me and I feel more privacy here than at home, despite being surrounded by people.

Kansas City has a great downtown with a good portion of history. Sadly I have to miss jazz night here at Westport, but it’s buzzing anyway with people studying, chatting, and having a date.

Rest is important to me. It’s probably important to you. I hope that you have a chance soon to sit back, take a pause from the rush of life, and have a breath all to yourself.

On a slant

In Indiana the water goes down. In Tucson the water goes up.

It has rained here the past couple of days. Noticeable all over are the puddles that the rain leaves. If you walk along the sidewalk at the university you can see all sorts of multi-colored stains from where the puddles have lived.

In Indiana the sidewalks, streets, and parking lots are all slanted and the water flows downhill. Here, the water still flows downhill during the heavy rains, but after each rain there’s a large amount of water that sticks around on the relatively flat surfaces until it evaporates – it flows up towards the sky.

Growing up a heavy spring rain meant that the streets would be washed clean. Rainstorms in our part of town scatter and leave palm fronds and sand across the roads.

Another group of fundamental assumptions broken.

React in Five Minutes

Last week I gave a presentation at a local programming meetup. If you are interested in the details (or on React.js) then check out this writeup with the slides and a demonstration app!

Fluffy and Flakey

Three days ago I gave a presentation on React.js at the TucsonJS meetup. The goal was to provide a high-level overview of what React is talk about why someone ought to be interested in applying it. At the end of the talk I gave a live coding demonstration where we iterated a design for a blogging website (it used WordPress.com for the content generation and management).

The actual presentation was built with reveal-md and the source can be found in my GitHub gists.

If you would like to get started and see what a basic React application looks like, you can check out my react-in-five-minutes repository and dive in (consult the README.md for instructions). The app was designed to be just complicated enough to show how to accomplish real-world problems and yet simple enough not to hide the essence of React in a bunch of logic and noise.

View original post