If you’ve ever scripted in Ruby before, you’ve more than likely encountered deeply nested arrays and hashes. These nested structures often come from Ruby’s JSON parser, but Ruby itself doesn’t have effective methods for dealing with them. Specifically, sorting these structures: the standard routine only shallow sorts the top layer…

Speeding up RESTful Services in Play Framework thumbnail

Here at Lucid Software we use a hypermedia-driven application architecture. This means that a client that uses our micro-services simply has to hard-code a “bootstrap” resource URI, and we can re-jigger our endpoints whenever we choose. This approach gives us flexibility on the back-end while maintaining perfect compatibility with our…

Lucid Software validates every pull request for its internal code base. Running over 1000 builds a day across 80 projects strains the robustness of our code, tests, and tools. For example, several times a week, builds complained about the default Java version. It didn’t make much sense. Our servers are…

5 reasons not to pass up a startup internship thumbnail

We’ve all seen movies and heard stories about boisterous internships at large, established tech companies. All play; no work; food; parties; nerds—what more could an undergrad want? Unfortunately, all that hype can lead would-be interns to overlook smaller companies offering comparable, if not better, experiences. With that in mind, here…

An Implementer's Overview of Managing Cloud Identity with SCIM thumbnail

System for Cross-domain Identity Management (SCIM) allows an enterprise to manage users across multiple cloud applications using a single interface. It might be helpful to think of it in terms of its original and more memorable acronym, Simple Cloud Identity Management. You ended up with this poor configuration accidentally. Where…

Building Angular 2 Components on the Fly: A Dialog Box Example thumbnail

UPDATE 8-22-16: This post has been updated to use Angular 2 version 2.0.0-rc.5. It was originally written against the API provided by Angular 2 version 2.0.0-rc.4, but as Tom Nurkkala pointed out in the comments, the relevant API from version 2.0.0-rc.4 has been deprecated. UPDATE 9-24-16: A more succinct variation…

Introducing Xtract, a new XML deserialization library for Scala thumbnail

Last summer, our team added support for importing Adobe InDesign files into Lucidpress, a cloud-based publishing app. Specifically, the app now supports IDML files, which consist of XML files packaged up in a .zip file. The process of conversion involves: Parsing the XML from the IDML file into a model…

Disaster-proof A/B Testing, Pt. 1: Managing metrics thumbnail

Almost every product change made here at Lucid is first validated by an A/B test. Over the years, we’ve made a lot of mistakes while running A/B tests and writing the code for managing them. In this series of posts, we’ll be sharing what we learned from these mistakes and…