Notebook

  • Publishing with Gradle to Sonatype and Maven Central on Travis

    I spent many hours yesterday trying to automate the release of the Java client library for NATs. The goal was to upload a release to Sonatype's open source Nexus server whenever we tag a release in GitHub. Sonatype will then upload it to Maven Central. This involves uploading to ...

  • First Synadia Release - Java Nats

    Today I released my first software for Synadia. I was tasked with re-writing the Java client library for NATs, and despite a few hiccups released a library I am really proud of today. The new library is easy to use for publishing messages: Connection nc = Nats.connect("nats://myh ...

  • GopherCon 2015 Recap

    With todays release of the videos from GopherCon 2015 I thought I would write up my 5 minutes recap of the conference, in case it helps someone pick the videos that might interest them. Go Kit: A Standard Library ... Peter Bourgon Codifying what it means to write a microservice a ...

  • Open Source - Logging & Config Update

    I mentioned earlier a pair of packages I released to the Go community while at Fog Creek. Now that I am no longer with the company, we agreed to redirect folks to my personal fork of the two libraries so that I can maintain them. You can now access the config library at github.co ...

  • Plug and Play Services and Testing

    I got to thinking... One of the reasons some people give for having a complete test suite is that it makes it easier to change code. In the case of a microservice architecture I have seen people motivate microservices with the possibility of replacing them based on tests. The ide ...

  • The IDs have It Again

    While preparing for my talk at StrangeLoop last year I ran into a great post by Jeff Hodges. The entire post is worth reading. But I was especially excited to see the section labelled "Choose id spaces wisely." This reminded me of my post on choosing IDs, and just how important I ...

  • Linked List Fun

    Talking to some folks the other day a couple of fun problems came up: How do you find cycles in a linked list? How do you reverse a linked list? Both of these algorithms can be implemented with very little extra memory, and I thought it would be fun to build them in Go. The ful ...

  • Fog Creek Open Source - Logging & Config

    Today I opened sourced, via Fog Creek, two libraries I have been working on. The first is a simple INI config file reader. While the package is small, it has 100% code coverage with tests, something I am pretty proud of. You can get this package on github.com/fogcreek/mini. The s ...

  • HashTables for Fun

    My buddy and co-worker Blake Caldwell posted a fun little note on Hashtables today. It got me thinking about the simple hash table implementation I have been using for cough cough years. So I thought I would put it up on github and write a bit about it. First, let me introduce ...

  • Tagged Logging

    There are a lot of logging libraries out there. A LOT. So why did I want to write a new one for a project we are doing at Fog Creek? The answer is tags. Logging libraries deal with two fundamental areas, what to log and where to log it. Where you log things is a question usually ...

  • Strangeloop

    Had a great time at Strangeloop last week, culminating in my talk which is now on YouTube. If you haven't been to strangeloop, and you are a software developer, I highly recommend it. The conference was really interesting, the people were great and the opening party at the City M ...

  • An Introduction To Genetic Algorithms

    I had some time this weekend and discovered the magic that is pandoc, so I decided to convert the chapter on Genetic Algorithms over to my blog for easier reading. There may be some odd formatting due to the conversion, and my quick hand fixes. Please keep in mind that this intr ...

  • Go Interfaces and Pointers

    The Go programming language has an interesting take on pointers. While pointers exist, they are often hidden or dereferenced automatically. This behavior can be confusing around interfaces. Go doesn't use pointers to interfaces. So when you are working with something that is an i ...

  • Update on the Kiln Operations Log

    Earlier i wrote a post with an idea for an operations log. We ended up implementing that idea in Kiln. It has been great. For now, we are using a simple Ghost installation, with GhostHunter for searching. I did discover a small issues with the search, in that it uses RSS which on ...

  • Polymer, Hello World, NEXTSTEP Style

    I am at Google I/O this week. Since I am mostly doing web development right now, I was most interested in their announcements around polymer and web components. Polymer looks like a really cool library on top of a really cool technology, and the talks I have seen have prompted me ...

  • Is HTML for Pages or Apps?

    As I was learning about Polymer today at Google I/O, one of the speakers said something that sounded funny to me. I realized it is because I am old. No really, it is because I am old. I remember when the web "came into being". At least publicly. Back then, we thought of the web a ...

  • Searching versus Asking

    I was already out of graduate school when the world wide web became public knowledge and Mosaic hit the streets for the first time. I had already formed most of my habits for learning new things. Some of those habits have been updated. Some remain the same. When I went to school, ...

  • Strangeloop

    I will be speaking at StangeLoop this September. Check out the website for up to the minute details. My talk is titled The Eight Fallacies of Distributed Computing based on Peter Deutsch and James Gosling's earlier discussion of these fallacies. Abstract The wild growth of the w ...

  • Creating an Operations Log

    As I mentioned in a previous post, I recently joined the Kiln team at Fog Creek. One of the effects of my move is that I have needed to learn how to help run Kiln both within Fog Creek and for our customers. Essentially I have been trying to learn how to be a good operator for Ki ...

  • A Short Note on Automated Testing

    I think people can over test and under test. Take a simple example of testing a function that takes an integer and expects the integer to be between 0 and 5. You can certainly test all the numbers from 0 to 5, and maybe test -1 and 6 to see what happens if you pass a bad number. ...

  • SAS

    We were thinking about our road map for Kiln today and I got to thinking about the underlying principles, or themes, I want to guide our planning. Coincidentally, when I got off work and was poking around the web I ran across this post on principles and it motivated me to write u ...

  • The IDs Have It

    I was talking to my wife the other day about an application she uses at work. The application is used to track parts, and provides each part with a part number. She was talking about how hard it is to find parts, and my immediate thought was that the unique parts number would mak ...

  • Monte Carlo

    Chapter 4 of the The New Turing Omnibus is about the Monte Carlo method. I spent a fair bit of time learning about Monte Carlo methods for my PhD and have had to explain it to a few people as a result. When I read this chapter, I thought back to my favorite example, and thought I ...

  • Finite Automata

    Chapter 2 of the The New Turing Omnibus is about Finite Automata. I wanted to do some of the exercises on the blog so I looked around for a good way to draw finite state diagrams. Looks like graphviz is the standard. I thought it would be easier if I could just write my graphviz ...

  • The Turing Omnibus

    I started reading The New Turing Omnibus. I am not sure what blog post pointed me at the book, but I read that it is a great tour of computer science, which sounded interesting so I thought I would jump right in. The first chapter is on Algorithms, which made me think of the firs ...

  • Simple Canvas Examples

    In an earlier post I talked about how I added the ability to include simple JS examples into my blog pages. I started working on some new code examples, and realized I want to be able to draw things as well. So now I added a class for automatically running javascript that draws o ...

  • Experiments in JavaScript Closures

    I have been trying to improve the object-oriented nature of my JavaScript lately. Part of that process is getting a handle on closures and public/private data. The following are a few experiments to help me process these concepts, I am posting them in case they help someone else ...

  • Simple JS Examples

    While I was writing this post about JavaScript I wanted to make an easy way to include JavaScript in my markdown and also show output from the scripts. I came up with the following idea. What if I can mark each example with a CSS class, I called it runnable, and then evaluate the ...

  • Adding Google Search

    So I wanted to add Google search for my site, thus reducing the need to implement search. I found a great article on askdavetayler.com and ended up implementing my search form using: <form class="navbar-search pull-right" method="get" action="http://www.google.com/search"> <input ...

  • Number Utils

    I have, on a few occasions, needed some utilities to convert numbers to binary, so I created a class that will do this for the various numbers in Java and am making it available on GitHub for people to do what they will. For example, to convert from a short to binary I do: public ...

  • Number Style

    I have worked on a couple projects that involved building page numbers. As part of another side project I created a Java class for converting numbers to Roman numeral format, as well as English and data sizes. This class can be used for page numbers, or for an outline. I figured ...

  • Printing the Java Environment/Properties

    There are times when I have been programming in Java when I want to know about the system environment or system properties. I created the following class to print out the default properties and environment, but you could convert it to a utility class for use in a larger project. ...

  • Sting

    The first version of Genetik was designed for genetic programming as well as genetic algorithms. Genetic programming evolves programs rather than simple data. Rather than trying to manipulate a syntax tree, i thought it would be interesting to manipulate a stack-based language. T ...

  • Ping Pong Balls

    My wife and I went to a dance performance in 2008 at a local college. One piece in the show was about pinball or something like that. It was kind of abstract and to be honest, not that interesting to me. But I remember one thing. At the end of the piece they dropped about 100 pin ...

  • Hello World

    This is the obligatory hello world first post for my new site. Hopefully something more interesting will follow soon. I am planning to start with some code I wrote a few years ago, and some thoughts I wrote previously. I have long list of posts I am hoping to write in the next fe ...