Christmas Eve 2015

It is Christmas Eve 2015. I measure time in birthdays and Christmases. In my case that ends up being exactly six months apart. Birthdays happen in the summer for me. Christmas is the apex of winter. Actually, it comes just a few days after the winter solstice which marks the beginning of winter in the northern hemisphere but I still think of it as the height of the winter season.

My mother’s birthday was on the winter solstice. She got a rough deal because of that as a child. Everyone always gave her a combined birthday and Christmas present. My brother and father and I were always sure to make the distinction when we celebrated her birthday though. It must have colored  her perception of the year though, I’m sure. She didn’t have two milestones six months apart to divide her years neatly in two like I did. Consequently it may have never occurred to her to divide the year up in that fashion.

Memories of Christmas are mixed for me. Lately they have been less joyous than they were when I was young. I think this is because it has become a time of year where there are exceptional demands on the finances and money is always in short supply.

In late January or early February I get my annual bonus at work. It is dependent on stock performance the previous year but our stock has been performing well so dependably that I have come to depend on it.

Then, a few weeks later, there’s income tax return. I had one unpleasant brush with the IRS after which I made sure that I always pay more than I am going to owe so that I always get a substantial return. This is also something upon which I have come to depend.

I have been making an effort to change my perception of Christmas to more of a time of cherishing family and reflecting upon the good things that have happened in the year that we are wrapping up. It is easier said than done but I am stubborn and so I have hope of achieving this goal.

Tuesday Ramble

I am happy that I am finally getting some readers for my blog. I guess Facebook is good for something after all. I wish that Facebook would respect hyperlinks though. I often use them like footnotes so that I don’t have to stop and explain myself in the middle of a story. Since Facebook only allows a single link and apparently WordPress uses that one to link back to your WordPress blog, I don’t have that option.

I’ve been thinking about how to adapt my style to be less dependent on hyperlinks. I’m not really going to use footnotes. That would be a little bit too stilted. I tried putting URLs in parenthesis but Facebook cuts them out as well. I’ll keep trying experiments until I find something that works. Luckily I haven’t felt the need to hyperlink anything today.

I have been waiting for a check in the mail. I still have Christmas shopping to do. I’m afraid the check may have been lost. It’s not that I can’t get a replacement check, just that it will put a severe crimp in my holiday celebration if it doesn’t get her soon. I have been hanging around the house all week waiting for the mail to come. I have been getting stuff done around the house but it wasn’t how I planned to spend this week.

This post has been a bit of a ramble. I have been trying to write cohesive posts but my mind is not very cohesive today. I am going to wrap up this post and then go play my lovely new guitar. That is the best therapy for cohesion that I can think of. (of which I can think?) Sometimes you have to throw grammar out the window and write the way you talk.

Challenges of Preparing a Class

First, a quick note for my Facebook readers. You might want to click through to my blog. I tend to put hyperlinks to related pages in my blog posts and these don’t seem to show up on Facebook. Consequently, when I put a link to Airtable in my last post (http://airtable.com/), some Facebook readers didn’t realize that I was talking about a program that I was using as opposed to one that I wrote myself. Now on to today’s post.

I am developing a class on how to build and program a robot. It is intended as a follow-on class for people who have already taken the class on building simple circuits and writing programs to control them with the Arduino. For those of you that haven’t yet encountered the Arduino, it is a small computer, roughly the size of a credit card, that is easy to learn to program and has the necessary hardware to control a lot of different hardware circuits. Some of the early projects that most people do while learning to build things with an Arduino are flashing LEDs and buzzing buzzers. It is also able of controlling servos which are often used to provide robots with wheels.

It is going to be challenging to put together a class that meets all of the criteria that have been set for me. It needs to be about two or three hours of instruction. Check. It needs to have a budget for lab materials of roughly $15. Ouch! That is going to be challenging. Also making it interesting for a variety of ages is going to be its own challenge. I’ve got a rough draft and I’m still shopping for lab materials. I think it is doable. I’ll just have to be a little bit clever. I’m excited.

Teaching an Old Dog a New Trick

And so my Christmas break begins. The large aerospace company for which I work is primarily a manufacturing company. As such it can’t afford to keep the lines running when over half of the employees are taking vacation so, to keep everyone happy, we get one less week of vacation than other companies and instead, the company starts the Christmas holidays on Christmas eve and carry it on through New years day. This year that means that by taking four days of vacation I can be off for seventeen days. That is a good deal.

In past years I have started the break with the best of intentions but usually by the time January rolls around, I haven’t achieved any of the plans that I made at the beginning of the break. This year I’m starting the break. With the help of a nifty little application called Airtable I have come up with a super todo list to support a new strategy I have come up with. I have created a list of tasks. Each task has a group of tags associated with it, like “domestic” or “chore” or “ham radio” or “artistic” or “musical”. It also has a status, and a completion date. Every task starts with a status of “TODO” and a completion date that is blank. When I complete a task, I change it’s status to “Done” and fill in the completion date.

I can create multiple views of the list and each list can apply a filter that determines which items are shown. For instance, I have one view with a filter that only shows tasks with a status of “TODO”. Another view only shows tasks with a status of “Done”. I can create a view with a filter that shows tasks with a completed date after a start date and before an end date. This allows me to keep track of what I do and when. The plan is to try to balance the things that I do that are chores with the things that I do that are recreational. That way, I can feel like I accomplished something in both domains at the end of the Christmas break. I’ll update you next year and let you know how it worked.

A Philosophical Ramble (tl;dr?)

I read a blog post that my friend Dave Winer wrote. (By the way, go read it or else this post won’t make much sense to you.) At least I consider him my friend. I don’t really know him. We haven’t sat down face to face and talked. But I feel like I know him. I have read his blog for fifteen or twenty years, it’s been long enough that I don’t remember exactly how long. I have benignly stalked him on the internet. I was curious to find out more about this person that wrote so engagingly and had so many interests similar to mind.

I discovered that we were almost the same age. His birthday is a month or so before mine. We grew up in the same era. He grew up in New York, Michigan, and Silicon Valley, as far as I’ve been able to determine from reading his writing and what the bibliographical information that I’ve been able to dig up on him says. On the other hand, I grew up in Paducah, KY, Carbondale, IL and Huntsville, AL. Even so, we apparently have many things in common, e.g. programming, liberal politics, and an interest in communications.

But I don’t really know him. I would like to know him better. But when you get right down to it, nobody ever really knows anyone. The best you can expect is that the people around you know some part of you. We tend to think that people are the same from moment to moment when actually we are constantly evolving, becoming someone else. The person that someone comes to know becomes someone else. Or do they?

I think, I am myself but the very concept of self is questionable. Am I, myself, the same person that I perceived myself to be ten minutes ago? How about an hour ago? A day, a week, a month? Who were all those people? What happened to them? Are they still a part of who I am now? If I forget something that happened to me, do I lose a part of myself? These are profound questions. If I struggle to know myself, how can I expect that anyone else can know me?

When someone writes a kind piece about the aspects of you that they remember, it is to be cherished. They are not eulogizing you. You are not dead yet. They are telling the things that they know about you, the things that you have shown them of the self you were when they knew you. I understand the desire to be known for who you have become. But does that mean you should deny who you have been?

By the way, Dave, I have been following your new work. I’ve been learning from you. I was as blown away by Electron as you were. Thanks for the tip. I was working on a single page web app written in Javascript that I moved over to Electron when I saw how easy it was to do. I haven’t followed your work as closely lately as I did for a while. But I’m back reading your posts daily now. I’m even blogging regularly myself.

I don’t know what my Facebook followers are going to thing about this post (both of them :-)). Maybe they’ll think a little bit about identity and friendship the way you have incited me to do. Thanks for your presence in the world, the work you do, and the part of you that I have come to know. I can hope for more but I will treasure all that you give us.

Yeah, I’ve Still Got It!

It has been an exhilarating day. I configured Jenkins to build a Groovy application that I wrote at work using the Gradle build script that I wrote on Monday. Then I figured out how to get my Grails web app that I developed with NetBeans imported into JetBrains IntelliJ IDEA. Both of these were accomplished with minimal reference to the great oracle, the internet. This reassured me that I am still a competent developer even if I’m not twenty something any more.

I get an adrenalin rush from figuring out these problems. The thing that was missing when I was working on the Grails web app earlier this year was a good development tool. NetBeans is a good development tool for what you pay for it (it is free). But it is designed for developing Java applications and hasn’t kept up adequately with the evolution of the JVM ecosystem of languages and developer tools. Eclipse (another free development tool) is better but again it is very Java centric.

IntelliJ IDEA on the other hand is written for paying customers. It has a consistent development model across the languages that it supports and is still actively evolving along with the platforms it supports. Even the free community edition outshines NetBeans and Eclipse.

The proof is in the ease with which I accomplished tasks in hours or days, that had taken me weeks or months when I was developing with NetBeans. I am now firmly convinced that one should not scrimp on one’s tools. And now it is time to say good night.

My New Taylor GSmini Koa-e Guitar

My New Guitar
My New Guitar

Pam bought me this Taylor guitar for an early Christmas present. It is made of rare Hawaiian Koa wood. It sounds and plays like a dream. Not to mention how beautiful it is. The size is perfect for an apartment. I can comfortably sit on the couch and play it without taking up more than a single seat worth of space.

It has a strong, bright tone. The strings are right above the fret board making it very easy to play. The intonation is perfectly in tune everywhere on the neck. I have never owned such a finely crafted guitar. It may be small but it is loud and if I need it to be louder, or I want to record with it, it has a built in pickup and volume and tone controls.

The Koa wood is endemic to Hawaii. It grows at altitudes between 330 and 7500 feet and requires between 33 and 197 inches of annual rainfall. It is a tone wood which is to say it is known for the musical tone it imbues instruments made from it.

I suppose I sound a little bit like a fanatic about it but until you’ve heard it played, it’s hard to describe how it sounds. I love my new guitar and my sweet wife who bought it for me.

Experiments with Gradle in the IntelliJ IDEA IDE

I’ve recently started using JetBrain’s IntelliJ IDEA software to develop software written in Groovy at work. It is an excellent package well worth it’s modest price. I have been investigating the differences between the Ultimate edition that my employer purchased for me at work and the community edition that JetBrain’s offers for free. While the extra features available in the Ultimate edition are nice, I have been finding my experience with the community edition as good or better than my previous experiences with Eclipse and Netbeans.

Lately, I have been experimenting with using the Gradle build tool within IDEA. I have figured a lot of things out about it but I am having trouble getting it to build an executable jar file. I’m sure it is just a matter of configuring something correctly within the jar task but I haven’t figure out how to do it yet.

I have learned a lot about IDEA and Gradle but I am just going to have to keep studying until I figure out how to get things to work the way that I want them to. I’ll write a post when I figure out how it’s done.

UPDATE: I figured it out. You just need to add the following lines to your build.gradle file. This includes all of your dependent jars in your executable jar. By the way, substitute the name of your main class  for  ‘org.me.package.Main’.

task fatJar(type: Jar) {
    manifest {
        attributes 'Main-Class': 'org.me.package.Main'
    }
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

A Word or Two Before I Call It a Day

Today was a busy day. I was on my own and I got most of the things on my TODO list done. I am so tired I can barely think but I made a commitment to blog every day so I’m going to write something.

It has been a while since I so single-mindedly worked on a project like this. I organized the stuff that we have stashed in our spare bedroom so that I could vacuum the carpet and then shampoo it. When I finished that, I assembled two plant shelf units for my wife to use in her plant business. I also made lunch for myself and went to the store for dog food.

It doesn’t sound like I did much but it filled my day. I was planning to spend some time building a radio kit that has been riding around in my pocket for several weeks now. I don’t think I could keep my eyes open to read the instructions much less solder. At least you can’t burn yourself while writing a blog.

Of Gradle, Groovy, and How I’ve Come to Love Build Automation

I finally got my project at work to build using Gradle. Grade is a build tool, something like make or ant except that it is implemented as a Domain Specific Language (DSL) built on top of Groovy. Groovy is a remarkable language in its own right. It is a dynamic language that compiles to Java byte code so it runs on the Java Virtual Machine (JVM). It can freely call code written in Java and Java code can call code written in it. This gives Groovy an enormous head start in terms of the variety of libraries that it can take advantage of right out of the box.

What is so great about Groovy, anyway? Well, it is a lot less verbose than Java for one thing. You rarely need to use semicolons in Groovy. Usually, it knows where the end of a statement is without you having to tell it explicitly with a semicolon. Another thing Groovy is good at is figuring out the types of variables without explicitly being told. This makes it easy to define a variable using the def keyword and letting Groovy figure out the type of the variable by what you assign to it. Groovy is touted as a scripting language and it does serve in that capacity very well but it can also be used to write very succinct and flexible object oriented code, like Java. Another place where Groovy saves typing is with imports. All of the more commonly used library packages are included by default.

Groovy also adds a new syntax for cleanly entering Map constants. This makes creating keyword/value data structures much easier. These are very useful for collecting information such as configuration parameters. There are lots of other neat features that Groovy brings to the table but to get back to Gradle, it is an application, written in Groovy specifically for managing the build process.

Gradle makes the build process a lot more expressive. It is more concise while at the same time being more flexible. It is easily extended both in an ad-hoc fashion by writing code specific to the build at hand as well as in a more general fashion by supporting plug-ins that can be shared among many different projects.

Using Gradle to automate my build process has turned a tedious job into one that is as exciting for me as writing the rest of the code in my application is. If you are developing in Java or Groovy or any other language for that matter, I suggest that you give Gradle a look.