Protected branches help prevent accidental pushes to
master, a backstop I didn’t want to lose. The switch from Java 7 to Java 8 for the Scala 2.10 and 2.11 artifacts wouldn’t have impacted our use of the library, but why unnecessarily restrict who can use those artifacts?
At Dwolla, we have several Scala-based open source projects, each of which needs to be automatically tested and built. We have these projects set up to build using Travis CI, which the build results reporting back to GitHub for branches and pull requests. Merges to
master are built and artifacts pushed to Bintray automatically as well.
We hadn’t automated the release process, though. Pull requests were responsible for updating the version information correctly, which could be tedious and somewhat error-prone. Concurrent pull requests needed to resolve versioning conflicts. Local development usually proceeds using a
‑SNAPSHOT version, so Ivy knows to overwrite any artifacts being created, but that means I have to remember to change the version in the project’s build definition before committing my changes.
Several Scala-based open source projects use the
sbt-release to manage their release process. The plugin ensures no snapshot dependencies are being used, moves the project from a
‑SNAPSHOT version to a release version, commits and tags the version change, and builds and publishes artifacts. In the end, two commits are created (the release version and the next snapshot version).
At Dwolla, the platform team dedicates lots of time to writing tooling, making our teams’ lives easier. What’s particularly exciting is when those tools have wider application beyond the walls of Dwolla. Since our team spends lots of time with Scala microservices deployed using Docker, we’ve written several SBT plugins and helper libraries. These plugins help us manage our services, both in production and locally during development.
All of the projects described below have been released on GitHub using the MIT License—pull requests are welcome! Each project contains a Bintray badge in its README, linked to where its artifacts have been published in one of Dwolla’s Bintray repositories.
For some time now I’ve been using Git to manage the files that make up PlanetHolt.com. Prior to switching to git, I was using Mercurial (hg), mainly because we use that at work and as a result I am significantly more familiar with its syntax and general workflow. Because Drupal.org uses git to manage its repositories, I decided to switch to make it easier to pull in updates. I am by no means a git expert, but things are coming along. I thought it might be useful to document my workflow.
I’ve been experimenting with virtualization technologies a lot lately, and after a conversation with my friend Ken, I decided that it might be a good idea to lay out some explicit goals.
While these goals are all interrelated to a degree, in my mind the first two and last two form natural pairs. While everyone agrees we’d avoid problems by using the same software locally that we do in production, if doing so is painful no one will use it except to debug problems when they arise. Innovation is tough in a space that isn’t well understood.
So far I’ve used VMWare Player and CentOS with Kickstarter to create base images and a local repository containing the software we’re using. I need to spend more time disseminating knowledge, though, because not many of my teammates are aware of my efforts. I think this would start to address the first goal but I’m not sure it’s easy enough for regular use.
On a different track, I’ve also managed to get OpenStack Essex set up on a workstation in our area. Hopefully by next week I’ll be able to demonstrate running our application in my little private cloud. PuppetLabs is hosting a webinar this afternoon that I hope proves useful as well, because I’ve found Puppet to be an extremely useful tool and I hope to understand how it fits into an elastic world.
I am excited about OpenStack in particular. It’s not clear to me yet whether it’s ready for prime time, so to speak, but playing with it so far reminds me of using Linux back in the 1.x kernel days. Huge promise, frustrating at times, fun to play with and to see what one can build.
An apparent defect in how IE handled our OAuth consent flow at work turned out to be an interesting difference in how Firefox and IE (Firefox 6 and IE8, in this case) handle content loaded via a 302 HTTP response.
After one of our UI developers beautified our OAuth consent page (where the user authorizes a client application to use data on his or her behalf), one of our testers pointed out that the overall flow stopped working in Internet Explorer. It still worked in Firefox, though, and she told us that if she permanently authorized the client in Firefox, the flow still worked in Internet Explorer.
We allow OAuth clients to provide an image that will be displayed when we ask users for consent. However, it’s not required, and so occasionally on the consent page the
IMG tag would have an empty
<img src="" alt="client Logo"/>.
I ordered the new iPhone 3GS shortly after its announcement earlier this month, as I’ve wanted one for some time. I was mainly waiting for a 32GB version, which provides enough room for a reasonable (Your definition of reasonable may vary.) number of songs and videos. After anxiously awaiting its delivery, a slight mishap on delivery day, and eventual successful delivery, I excitedly unwrapped my new toy, activated it, and started transferring my media library.
Eventually I started looking for a new ringtone. The included choices are decent, including a good “old fashioned” ringer, but I wanted something more flashy—and I certainly was not going to pay $0.99 for something that would only play for up to forty seconds at a time. Luckily, iPhones ringtones are just short AAC clips, and are therefore easily created from the songs already in your music library. This article will share how to do it yourself.
While I’m far from an expert on the subject, I’ve had the opportunity to introduce jQuery to some of my fellow developers here in India. I thought I'd share the presentations in the hopes that someone else might find them useful as well.
jFootnotes is a jQuery plugin that creates and formats footnotes based on inline content. I have used it fairly extensively on this site, and thought I’d share it with the world. It has been tested with jQuery 1.2.6, and lightly tested with jQuery 2 as well.
Once the module has been included in a page, it can be called as follows:
Pretty straightforward. By default, it will look for
spanelements with the
blockquoteelements with a
within the outer selection (e.g., within any
div elements, in this case). The matches will be extracted and moved to footnotes.