Trend Watch: Technology Email Newsletters

NewsletterNewsletters? Really? 2014 is a few months away, and yet I’m talking about newsletters like its 1998? Didn’t RSS kill newsletters and Twitter supplant RSS? Well, that is certainly the prevailing thinking. However, there is a retro trend cropping up, technology email newsletters, and its quickly becoming the primary way in which I find interesting articles online.

The trend seems to have started in August 2010 when Peter Cooper first published Ruby Weekly. Back in those days Ruby 1.8.7 was still shiny and new and Rails 3.0 had only just been released on the world. Since then, Peter has slowly added newsletter after newsletter, finally reaching a total of 6 newsletters under the Cooper Press banner. Many others, including Rahul Chaudhary, have taken inspiration from Peter and started their own newsletters. So, without further ado, here is a complete listing of newsletters you should know about as of October 2013.

Management and Leadership

Technology & Leadership News

An incredible wealth of knowledge from Kate Matsudaira and Kate Stull spanning technology, product, leadership, management and anything else interesting from the week. Probably the single most interesting and comprehensive newsletter of the bunch. If you enjoy the content then I highly recommend checking out their latest project over at https://popforms.com/.

Agile Weekly

A focused newsletter on agile development with a eye towards productivity and team leadership. Well worth the read, as well as the podcast run by the same folks.

Software Lead Weekly

A great compliment to the Agile Weekly newsletter with links focused on team building and leadership.

Founder Weekly

One of Rahul’s three newsletters. If you want information about financing, sales, marketing, PR, hackathons, incubators and the like, you will find it here.

Technology

Status Code

Another one of Peter’s newsletters and one of the most interesting technology newsletters digging into all sorts of hard core programming nerdery. C, UNIX, Protocols, algorithims, editors, etc.

NoSQL Weekly

Interested in MongoDB, Riak, Cassandra and other NoSQL stores? This newsletter from Rhaul helps you keep up with whats going on in the NoSQL world.

DevOps Weekly

Your weekly list of links covering Puppet, Chef, Docker, Vagrant, Boxen and all other manner of interesting DevOps tools as well as plenty of slide decks and blog posts on culture and process.

Postgres Weekly

Peter Cooper strikes again with news from the world of PostgreSQL.

Heroku Weekly

A production of Higher Order Heroku for those that want to level up their Heroku skills.

HTML5 Weekly

CSS 3, HTML 5, Websockets, Canvas, all covered, here, in another Cooper Press newsletter.

Responsive Design Weekly

A complement to the HTML 5 newsletter for all the web designer out there.

Programming Languages

These don’t require much in the way of introduction so here goes:

Introducing Chronophage

time eaterAt Localytics we deal with data, lots of data, and that data is never as clean as you want it. When we developed the first version of our upload API, thrown together during sleep deprived coding binges while participating in TechStars, the decision was made to upload datetimes as ISO 8601 formatted date strings. Code was written, uploads were sent, and life was grand; or at least we thought it was. You see Ruby, being the helpful language that it is, very kindly parses all manor of garbage, often quietly ignoring huge swaths of the string that it couldn’t make sense of. But I’m getting ahead of myself.

Putting on Grownup Pants

When I was brought on board, I was tasked with rewriting the processing pipeline which was beginning to creak under the weight of the data we were receiving. Being a fan of the JVM and wanting to hang out with all the cool kids, I decided to use Scala for the rewrite. Piece by piece the pipeline was rewritten, care was taken to unit test and code coverage was high. Then the fateful day came when we threw the switch and migrated to the new system. No sooner had we completed the migration then alerts started flying. Date strings were all over the map. Twelve hour time? Hindi? Kanji? What was this garbage? Only now were we seeing the dirt that Ruby had been silently sweeping under the rug for us. With a bit of scrambling the first iteration of what would become Chronophage was unleashed upon the world.

The Problem

It turns out, what we thought was ISO formatting was in fact a crap shoot based upon clients locale settings, language settings, and who knows what else. Dates were frequently formatted in 12 hr time and then kindly translated to whatever language the client was in. Did you know priekšpusdienā is Latvian for AM? Neither did I.

Chronophage

Fast forward a few years and Chronophage has been battle-hardened by trillions of datapoints. It supports twelve hour time in dozens of languages and locales, thanks in large part to Dave Rolsky‘s DateTime-Locale project for the locale translations, and a wide variety of other odd formattings, thanks to the Joda Time library’s ISO datetime parser. And now, it is with great pleasure that I can announce we are releasing Chronophage as an open source project. Go have a look at the GitHub project and if you find yourself drowning under a deluge of unintelligible date strings give it a spin.

My Scala Toolset – May 2013

scala-logo-cropedA friend recently asked for about my Scala toolset. When my response quickly spiraled out of control I decided to turn it into a quick blog post so everyone could benefit from the reply. So without further ado here is the current set of tools, libraries, and frameworks that I use on a semi-regular basis.

Tools/Frameworks

  • Akka: A very slick Actor framework.
  • Scalatra: A Scala port of sinatra
  • Scalatest: Nice testing framework, specs is the other main player
  • IntelliJ: Very nice IDE for Scala, I prefer it to Eclipse

SBT

  • SBT: Its a bit of a pain to work with but its the default build tool for Scala. If you are just trying to do basic dependency management its pretty nice. Extending it is where the pain comes in.
  • sbt-idea plugin: will generate intellij projects from sbt
  • xsbt-web-plugin: will create wars for your project
  • junit_xml_listener: outputs scalatest results as junit xml so Jenkins can process it
  • NOTE: SBT runs everything in parallel as much as it can, this can screw with junit tests but you can turn it off by setting parallelExecution := false

Java Libs

  • JodaTime: Replaces the standard Java date stuff which is quite weak. The next version of Java will actually have JodaTime built in
  • c3p0: A solid JDBC connection pool. I’ve also heard some talk about BoneCP which the Play framework uses.
  • Apache Commons: look here for things like, string utils, io utils, db utils, utils around codecs, really anything that seems like it should already exist.
  • SLF4J: The only logging framework worth using anymore
  • Whirlycache: A simple in memory cache though I keep hearing Google MapMaker is very nice.
  • Jackson: The only JSON library you should use, stupid fast

Scala Wrappers

  • scalaj-time: wrapper for joda time, lets you do things like 4.minutes.ago
  • scalaj-collection: wrapper for collections that allows you to easily convert between scala and java collections. However, this was essentially moved into the standard library in Scala 2.9 so you might just want to use that now
  • Jerkson: scala wrapper for Jackson though this is abandoned now. Jackson has a Scala module now and Json4s is trying to unify all the Scala JSON wrappers and supports Jackson.
  • slf4s: A Scala wrapper for slf4j
  • scalaj-http: A simple wrapper for the built in Java HTTP library, not super performant but works in a pinch
  • dispatch: A Scala wrapper around Apache HTTP Async, better for high performance HTTP but a bit more complicated to use as you should use a completion handler to process the response

Printing Greenhopper Cards From Jira

In an attempt to keep a better historical log of our work, my company switched from a whiteboard and 3×5 cards to Greenhopper on top of JIRA. However, we wanted to keep the whiteboard for ambient information and as a location for morning scrum. Greenhopper doesn’t support a way of printing 3×5 cards so what follows is a very convoluted set of instructions that have gotten up 80% of the way there.

Greasemonkey

Greenhopper has a way of printing story cards but the only available layout is a two column setup that doen’t handle page breaks nicely causing cards to be cut between pages. The following greasemonkey script will force a page break after each card.

function addGlobalStyle(css) {
    var head, style;
    head = document.getElementsByTagName('head')[0];
    if (!head) { return; }
    style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    head.appendChild(style);
}

addGlobalStyle('.issueCard {page-break-after: always;}');

Include this script on the following url pattern:

http://jira.locamoda.com/secure/Print.jspa*

Printing in Firefox

Ideally you could print directly from firefox to the 3×5 card but with my setup (FF 3.6 on OS X 10.6) Firefox wont accept 3×5 as a valid page size. To get around this create a 4.5 x 7.5 paper size by going to File -> Page Setup and select Manage Custom Sizes… under Paper Size. With that paper size selected, navigate to the Planning Board view in Greenhopper and click the printer icon next to your current sprint. Turn off all the headers and footers and click preview, not print.

Printing in Preview

In preview you are able to create a 3×5 paper size. Choose Print from the File menu and you  will see a Paper Size drop down in the print dialog. Select Manage Custom Sizes…, just like in the Page Setup dialog in Firefox, and create a paper size of 3×5. With that paper size selected click the scale radio button and scale up to 125%. Finally, load your printer with 3×5 cards and click print. You should end up with prints that fill most of a 3×5 card.

11 Lesser Known 3rd Party Libraries For Every Project

pennies_in_jar_small The Java 3rd party library ecosystem is a wild wild place. While everyone has heard of the big players such as Spring and Hibernate, too often the more humble, but equally important, libraries get left out in the cold.  It is for that reason that I give you the 11 lesser known 3rd party libraries that no project should be without.

Unit Testing

As always, the easiest place to start playing around with new libraries and languages is in unit tests.  I’m convinced they would be worth writing if only as an outlet for developers to try new and interesting tools, let along the code quality improvements.

DBUnit

While we can quibble over including databases in unit tests or if they are integration tests the fact of the matter is that at some point most people write a unit test that requires a database with some preexisting data.  Thats when DBUnit shines. It has the ability to use xml from a file or a string or any other type of input to clean and populate database tables with ease.  It even has some nice utilities for asserting data after a test has run.

Mockito

On the other end of the spectrum from full blown database integration is mocking. When you need to disentangle an object from its myriad of dependancies and test it in isolation mock objects come to the rescue. There are a number of solutions out there but Mockito takes the cake. To see why I prefer it to EasyMock check out their comparison. They’ve even added some niceties for BDD style testing.

Hamcrest Matchers

Since Junit 4.4, a core set of hamcrest matchers has been included with the distribution and has gone a long way to simplifying assertions by through a pseduo english DSL. For even more power you can include the whole hamcrest matcher jar and start playing with features such as asserting the contents of collections.

Apache Commons

Configuration

Most projects start with one properties file and before you know it there are two, then three, then ten and it gets out of control. You have static singletons that pull files off the class path and you’ve gone off the deep end. Thats why I say start Commons Configurations, even for that first file. Not only does it greatly simplify dealing with properties from the api point of view but it allows for pulling properties from xml, jdbc, property files, and much more. Its can even work as a simple api for dealing with xml in a jiffy.

DbUtils

These days with Spring JDBC, iBatis, Hibernate, ActiveObjects, and a host of other frameworks and libraries for dealing with JDBC its pretty easy to never have to directly touch the stuff.  However, if you find yourself in the hell which is closing a connection, session, and statement (with all the null checks and finals and exceptions and oh dear god) then Commons DbUtils is for you.  A simple close() method is provided which handles all the null checking and try catching and so on. So basic and yet so helpful.

IO

This one might be a bit more obscure but if you have ever needed to simply read the contents of a file you have no doubt been stymied by which reader gets wrapped by which buffered writer and who flushes what. Commons IO provides a beautifully simple api for file reading as well as some nice utility methods, similar to DbUtils, for closing all those annoying objects with out all the hassle.

Lang

If there was one library on my list it would come down to this or Google Collections. Commons Lang is the place for every utility method you have ever thought of writing. Every time you have though of creating a null safe version of any of the String methods, StringUtils has your back. If you have though of doing the same for Booleans then BooleanUtils is for you. Same for Object and ObjectUtils. But it doesnt stop there, StringUtils has more methods than you can shake a stick at and then there is the Builder package. The Builder package contains a Hashcode, ToString, Equals and CompareTo builder. Better yet they contain methods to build these values dynamically based on reflection. I’ve taken to making a base class from which all my domain objects inherit  that simply overrides Hashcode, ToString and Equals with the reflection based builders. Never again do you need to create these annoying methods by hand or have Eclipse generate them only to forget to regenerate when you add another field.

New Kids On The Block

SLF4J

Logging, everyone needs it. Thats probably why there are at least four major Java logging frameworks.  However, they are not all created equal. Java util logging is known to have a number of shortcomings when compared to Log4J and Commons Logging is just a facade that allows you to switch between the two more easily. Out of this mess comes SLF4J. Created by the creator of Log4J it is simply a set of interfaces that anyone can implement. The default implementation, also made by the same guy, is called logback and takes all the best of Log4J and improves on it. Moreover there are converters that route Log4J, CommonsLogging, and Java util logging to SLF4J. Never again do you have to struggle with multiple libraries and configuration files for all of your 3rd party libraries in your project. Simply drop in the converters and everything nicely flows into SLF4J.

Google Collections

Like I said before, if there were one library on my list it would come down to Commons Lang and Google Collections. If you have every used Commons Collections and cursed at its lack of type safety then Google Collections is for you. If you have ever balked at having to write List<Map<String, List<Integer>>> only to realized you have to type it all over again on the left hand side of the value assignment then Google Collections static methods such as newHashMap() are for you. If you are looking for a poor mans cache then MapMaker is for you. Finally, if you want to play around with functional programing ideas in Java look no farther than Predicate and Function and take it as a challenge to remove all for loops from your application.

c3p0

Database pooling, if you connectot to a database you need it. There are a few out there to choose from and the decision is always a bit of an argument but since Hibernate chose c3p0 as its default connection pool it has gotten significantly more attention than the other options and the prevailing winds seem to suggest that it is the way to go.

Joda Time

Not everyone has to deal with time in their programs but if you do, look no farther than Joda Time. From simple formatting to the complication of subtracting dates and everything in between, Joda Time is an easy to use api for all your date and time needs. No longer will you have deal with Calendars and wonder what exactly is a Gregorian one.

Why emacs is still in my toolbelt

When I first started out as a developer one of the crackpot nutjobs with whom I worked at the time convinced me that emacs was absolutely the best editor to use.  I didn’t really know any better and he was by far the fastest and most nimble code navigator of anyone else in the group so I gave it a try.  Many hundreds of hours of elisp hacking and a 37MB ~/.emacs.d directory later I am a fairly well worn emacs yeoman.  For many years I used nothing but emacs, cramming all sorts of language modes in it to make it do fun stuff and syntax highlight everything from shell script to Java to Ruby to InstallScript (insert vomiting in own mouth joke here).

I say, with no small amount of nostalgia, that emacs is no longer the development workhorse it once was for me.  I spend most of my time writing large Java projects and have fallen prey to the siren song of fancy IDE’s with their “Show me a list of all the places this specific method is called anywhere in my project” tricks and “Refactor this entire package hierarchy with all the file renaming and moving and even rename the getters and setters to reflect the new names” chicanery.  Emacs had a few tricks to make it look like it was doing these things but it was always kinda hacky and required a great deal of TLC to keep it working across JDK upgrades and switching projects with environment variables and jdk-* elisp variables that were just right.

All that said, you can have my emacs when you pry it from my cold dead hands, and here’s a glimpse into why:

  1. Zip file handling smooth as a baby’s butt
    Have you ever tried to open a zip file with emacs?  Give it a try, its awesome. It shows you a normal list of all of the files in the zip archive.  No big deal, right?  Now move the cursor onto one of the files.  Shows you the file, doesn’t it.  Not bad, huh?  Now try editing the file.  Let’s you edit it, doesn’t it.  Now try saving it.  Oh baby.  Right back into the archive where it belongs and you don’t even have temp files to clean up.  Seriously? That’s worth the price of admission right there.
  2. That’s what you’re computer is for, numbskull
    If I see one more person with their hands hovering over their keyboards in some weird way just so that they can type “Down arrow, End, BkSpace, BkSpace” over and over for every line in a 500 line file I’m going to scream.  I know emacs is not the only editor that does simple macro recording and playback, but if your editor doesn’t have that (yes, I’m staring at your Eclipse) then you most likely have wasted some time this week.
    “C-x-( <do your thing here> C-x-) Ctrl-u 500 C-e” and 500 lines later your done.  Menial tasks should not be done by people.
  3. Graphical and terminal mode
    This may be specific to you server developers out there, but sometimes you just need a decent editor on a headless server.  I know, I know, use vi. If I wanted to ask my editors permission to type a letter I would install Clippy (ducks).  Sorry, had to get that in there.  Having a workable dev environment on a headless server has been a huge help on many occasions where fun graphical wizbang is just not an option.
  4. Cross Platform
    Linux, OS X, Solaris, even Windows if I really have to, but emacs comes with me everywhere.  It always works and so does my well worn ~/.emacs.d directory of everything I’ve ever needed.  Its a great way to lower the cognitive load of jumping around all the time.  What good is your trust side kick if it doesn’t come with you wherever the fates may carry you?

The list really goes on and on.  The idea here is less about emacs specifically and having really amazingly good reliable all purpose text editor to sit next to your honkin’ cool IDE and fill in the gaps.  If you are a gainfully employed programmer and you use notepad.exe for anything, then you are a thief stealing from your employer.

I’ll be honest, I spend a lot less time in emacs than I used to, but every good carpenter needs a good hacksaw/screwdriver/nail puller/hedge trimmer/ladder/rotary drill/french coffee press/drop cloth/tire rotater.  Right?

xkcd emacs comic

Follow

Get every new post delivered to your Inbox.