Posted by & filed under Content - Highlights and Reviews, django, javascript, microservices, programming, Programming & Development, Tech, testing.

Earlier this year, we overhauled our search application and changed it from a django app to a microservice. This opened us up to move the frontend of our search out of django templates and into a single-page JavaScript application that communicates via JSON.


Starting from scratch allowed us to think about the overall structure and components of the application. We use Backbone in most of our javaScript so a Backbone + Marionette + Backbone.Radio application made sense. Marionette allowed us to simplify our application in a number of ways including; better binding between our models and views using Marionette Layout, Composite, Item and Collection Views, more reusable components using Marionette Behaviors, easier view rendering and cleanup with Marionette Regions, templateHelpers for teasing logic in our JavaScript templates.

Breaking things down

We started by breaking the app into modules. This included a module for ‘facets’, which are the publishers, topics and author options you can check off in the UI to narrow your search. ‘Suggest’ for the autocomplete module. The main part of the app handled pagination and the templates, collection and views for rendering search results.

Each of these modules included their own collections, models and views. We kept these mostly isolated components that used local event messaging. We used ‘controllers’ for app-wide event messaging and managing their module components. Read more »

Posted by and & filed under Business, Content - Highlights and Reviews, Digital Publishing, PubFactory, publishing, Safari, Tech.

Each year publishers spend countless hours crafting lengthy Requests for Proposals (RFPs) that exhaustively detail their ideal online publishing platform. There is a sense that before a platform migration can occur every aspect of the functions, features, and capabilities must be identified and explicitly defined. Yet in other market segments the approach to revising business and technology strategies has shifted to make use of evaluative tools that enable A/B Testing, measurement of usage impact, and iterative revisions. Why shouldn’t publishers also benefit from these mechanisms that provide ample opportunity for sanity checking their assumptions (technology and otherwise)? And just as importantly, why wouldn’t a publisher want to turn their users into invested stakeholders that contribute to strategy…after all the users are the ones that need to be satisfied and grown? Read more »

Posted by & filed under career advice, careers, general, jobs, Personal Development, Programming & Development, Tech, working remotely.

The beginning

My first contact with open-source was the same as it is for most people: using open-source projects. I’m too curious to stop at that. I wanted to know how these projects I’ve been using were written and which architecture and patterns they use. I wanted to debug its code so I could both use them better and learn to write my own software better. Open-source software allows me to legally look under the hood and read its source. In fact, it actively encourages doing so. It encourages people to contribute, implementing new features which matter to them, filing bugs, fixing bugs, writing documentation, helping other users, and so on.

Closer involvement

That’s exactly what I did almost ten years ago. I started learning and using a Java Web framework, Apache Tapestry, in my free time, and then pushing its use at the company I was working at that time. I fell in love. I routinely read different parts of its source code and learned an awful lot from it. At the same time, I started participating in the project’s users mailing list. It’s part of my nature to try to help by sharing what know with others (at one point I was a part-time university professor), so soon I was not just posting questions, I was also answering questions and joining discussions about the project. To date I’ve posted 6624 times.

I started being a known name in the Tapestry world (small though it is). It was noticed by the Tapestry team. In 2009, they invited me to be a committer despite having contributed no code yet. As defined by the ASF’s internal process, there was a vote done by e-mail and I was approved. In the same year, I was also invited and approved to Tapestry’s project management commitee. In 2015, I was nominated and approved to be an ASF member. Read more »

Posted by & filed under ebooks, epub, Programming & Development.

Three years ago, my colleagues and I in O’Reilly Media’s Production department made the decision to rearchitect our print-publishing software toolchain to support typesetting print books in HTML and CSS. Doing print layout with web technology was a fairly radical notion at the time (and still is today!), especially in traditional publishing-industry circles where commercial desktop-publishing software continues to hold sway. But we were convinced that aligning our publishing tech with the web stack would pay dividends. Short-term, we knew it would enable us to simultaneously produce print and digital media more efficiently. And long-term, we felt that placing our bets on HTML+CSS was the best way to future-proof our workflows as electronic publishing, both online and offline, continued to evolve.

Read more »

Posted by & filed under Business, change, Content - Highlights and Reviews, culture, entrepreneurship, execution, growth, innovation, leadership, strategy, Tech, work culture.


By Luke Williams

Luke Williams is the executive director of entrepreneurship and founder of the W.R. Berkley Innovation Lab at New York University’s Stern School of Business. He is the international bestselling author of the second edition of “Disrupt: Think the Unthinkable to Spark Transformation in Your Business.”

Luke Williams  Disrupt

Different organizations have different opinions about what kind of leadership behaviors will work best for them, and these opinions are often inherited in prepackaged form. In business, we call them best practices: borrowing a successful way of doing something from another company or industry. (If you’ve ever participated in a brainstorming session, you’ve seen first-hand how the concept of best practices keeps everyone in the room thinking the same way about a particular business or industry.)

At their core, best practices are no more than a proven way of allocating resources within the industry in which they operate. They’re useful, but when you buy prepackaged best practices, you’re buying into a zero-sum game: Putting things together in a certain way for one practice makes it difficult to put them together in a different way for a different practice. For much of the 20th century, the best practice many industries used was some variation of the “razor and blades” concept: If you hook your customers with a free or cheap product below cost (the razor handle), you can charge a lot more over time for the necessary add-ons to that product (the blades). The concept was set in stone, and a lot of leaders still accept it. “We make our money by making desktop computers as inexpensive as possible but getting users to spend big bucks on software licenses.” Or “We make our money by selling our video game consoles for less than what they cost to manufacture, but we get $50 a piece for the games.” Read more »

Posted by & filed under Devops, Docker, Information Technology, infrastructure, IT, Programming & Development.

What is Docker Swarm?

Docker Swarm is native clustering for Docker. It allows you create and access to a pool of Docker hosts using the full suite of Docker tools.

With the increased attention of containerization and microservices, Docker is an obvious choice for development and perhaps production. How can an Infrastructure team leverage shared machine resources and build something self-service for their awesome Engineering teams?

The answer may be Docker Swarm, which will allow you to build a cluster of Docker hosts that can each run many Docker containers, and can scale with your needs. In this post I will walk you through setting up a test environment for you to play with Docker Swarm.

If you have not already, then please download and install the Docker Toolbox.

A good run-through is the Get started with Docker Swarm page; I will mostly be following that, but with the addition of showing you how to set up service discovery at the same time.

Read more »

Posted by & filed under analytics, ecommerce, marketing, Programming & Development, Web Development.

Browsing the web with an ad blocker is certainly nothing new, but 2015 is the year that the practice is going mainstream. Apple not only made it easy for iOS 9 users to install ad blockers on their mobile devices, but also introduced the concept of ad blocking to a whole new audience.  How big is the audience that’s using ad blockers?

Today, 34 percent of web users have installed some sort of ad blocker. Eighteen percent of tablet users have installed one, and almost a quarter of all mobile phone users—24 percent—have installed an ad blocker.”

VentureBeat, November 2015

34% is a large percentage, and it’s growing by the month!

Whatever your feelings on the ethics of ad blocking, widespread adoption of them is a game changer for everyone on the web. Ad networks and sites that rely on ad revenue (Safari does not) are getting the most attention, but site usability is a concern for web developers and customers alike. Even if you don’t serve ads, ad blockers are throwing the practice of web analytics into a period of uncertainty and change.

Looking for some good news? I think those of us in the analytics space have gotten pretty lazy when it comes to how and what we measure. A little crisis is just what we need to rethink our practices and refocus on what matters. Tools like Google Analytics and Adobe Analytics have become so commonplace that the competitive advantage of relying on standard metrics has virtually disappeared.  Sure, we all have to track visits, page views, conversions and so on, but doing so is a basic need rather than a way to get ahead.

Read more »

Posted by & filed under being awesome, Business, career advice, change, communication, Content - Highlights and Reviews, Daily Learning, emotional intelligence, entrepreneurship, influence and persuasion, learning, Learning & Development, managing yourself, motivation, presentations, productivity.

By Kathryn Zonghetti

Kathryn Zonghetti is an empowerment strategist at Purposeful Challenges: Discover Your True Capabilities. You can subscribe to her YouTube channel here.

We all have a story that needs to be shared with the world. We are all fighting our own battle. The best way to face our own challenges and adversity is by being vulnerable and authentic with others.

Share your story

“Your story inspired me to be myself.” These are the powerful words that were said to me when I shared my vulnerabilities and story with the world. The fear of sharing my true self with others kept me from inspiring others to do the same for many years. I chose to share my message through public speaking and social media.

Public Speaking

Several years ago I had a fear of public speaking. I decided to join Toastmasters, a club for practicing public speaking. But I was terrified to set foot in it for the first time. I was motivated to enhance my public speaking skills because I believed that I had a message to share with the world. I believed that my story would resonate with others. But, I didn’t want to be judged by others. What if I stumbled on my words? What if I turned bright red? What if I tripped? Many thoughts ran through my mind before joining this public speaking club. I took a deep breath and made it happen. This offered me the ability to learn from my mistakes in a safe and judgment free environment.

Social Media

Social media is the perfect way to share your insights and stories with the public. From LinkedIn, Facebook, Twitter, to Tumblr, Pinterest, and Instagram. We have the opportunity to express ourselves and share our message. The goal is to focus on what motivates YOU, not what you think would motivate everyone else. This way, if the external praise subsides during some points (which it will), you will continue to keep going and not give up. Read more »

Posted by & filed under Content - Highlights and Reviews, programming, Programming & Development, Tech, Web Development.

by Sam Phippen

Sam Phippen

Sam Phippen has been writing software for more than seven years. He routinely gives conference talks about software design and testing and currently serves the Ruby community as a member of the RSpec core team. Sam regularly contributes to Open Source Ruby applications and works as a consultant at Fun and Plausible Solutions. He is the presenter of the recently released video course called “Effective Ruby” from Addison-Wesley Professional


The Hash class is one of the most widely used in Ruby. We use it to represent everything from parameters objects, to database rows, and even domain specific data structures. In this post, we’ll explore a number of specific ways that you can improve your use of hash objects to make better rails applications.

Preferring Hash#fetch over Hash#[]

The most common way to get values from a hash is to use the square brackets, or subscript, method. This method directly looks up the value under the passed key in the hash and returns the value stored under the key in the hash. If the key is not found, [] instance method returns nil.

So let’s talk about fetch. On first inspection, the fetch method is similar to the [] method:

Unlike the [] method, the fetch method raises an exception if the key being looked up is not found.

This behavior of fetch is very useful. Primarily, it means that you can find key places where data values are missing in your system with ease. It may be the case that you sometimes want to provide a default value, even when the hash does not contain a value stored under that key. With [] you may be used to ||ing the value in, using the nil as the missing value behavior. fetch makes this easy and explicit.

Instead of having a separate (||) syntax for providing a default the fetch method provides us with an explicit way of doing this. Fetch actually has three signatures:

  • fetch(key) which raises an exception if the provided key is not found
  • fetch(key, default) which returns the provided default value if the provided key is not found
  • fetch(key) { ... } which evalutes the provided block and returns its return value if the key is not found.

Read more »

Posted by & filed under work culture.

Clothing has always been important to me, and while I’ve never been a particularly trendy dresser, I’ve always cared about what I wear and how I present myself.

As a high school student I developed an eccentric sense of style that culled from Army Navy stores, flea markets, thrift stores, and my grandmother, which earned me the dubious title of “best dressed” from my choir. (Long live art kids.) Fast forward almost ten years and I still have a penchant for ripped tights, messy hair, weird fitting cardigans, and massive scarves, so dressing appropriately for work is a continuous challenge for me, even in a casual environment like Safari.

Below, some things I’ve learned:

1. Choose a color palette and develop a uniform

I chose black as my color palette because black is versatile, dynamic, and simple. While black clothing can be difficult to match together, (never assume that two black pieces are going to match!) they are also easy to accessorize, look more polished, wash better, and generally wrinkle less than light colored clothing. Also, if you are like me, all your white dresses will have coffee stains, which are fortunately easily covered with large scarves. (Just kidding!)

NYMag ran a series of excellent posts on stylish women and uniforms, and I largely echo those sentiments. Wearing a uniform has made getting dressed in the morning easier and infinitely more chic.

2. Purge often

I had bedbugs in college, which meant I had to get rid of a fairly large collection of hideous patterned 1980s sweaters collected from years of thrifting.

At the time I was devastated, but now I see that experience as a blessing because it taught me the importance of purging my clothes often. Are your favorite pair of pants pilled beyond recognition? Do you have dresses that look wrinkled no matter how many times you iron them? What’s sitting in the back of your drawer that you never wear? Give these clothes to charity, sell them to a consignment shop, or have a clothes swap with your friends: there’s no reason to hold onto things you don’t wear, and getting rid of clothing means you have more room for the things you actually feel good in.

3. Accessorize

Accessories are an easy way to make every outfit feel more complete, from scarves to statement necklaces to big vintage rings. I inherited a large collection of scarves from my grandmothers, and I scour vintage stores, flea markets, and consignment sales for costume jewelry. I also try to buy simple, inexpensive pieces from local designers at small boutiques in the area.

I rarely leave the house without jewelry and a subtle perfume. A distinctive scent can help you feel more polished. (I wear Jo Malone 154.) If you’re scent sensitive, I highly recommend finding an organic essential oil you enjoy. A few drops can make the whole day brighter.


Working it at work

4. Quality always trumps quantity

While we live in an age of fast fashion, you can find well-made clothes for less if you take some time to think about your buying values. While I occasionally buy for convenience, I also am extremely aware of the quality of my clothes due to years of trawling consignment stores for top designers like Marc Jacobs and Chloe.

Good quality clothing doesn’t have to be expensive.. Brass, a local Boston startup that works directly with factories to provide high quality garments for less, ran a piece last year about how to judge quality in clothing, and I’ve found it helpful when shopping for work clothes.

5. Never buy retail

Like one of my fashion role models, Fran Fine, I would never buy retail. (Particularly if my “cousin” was Todd Oldham!)

For better or worse, most retailers exist in a constant sales model where it’s easy to patiently wait for a piece to go slightly out of season in order to get a deal. My focus on sales has helped me find some amazing pieces from high-end designers for much less than their original price. 

6. Don’t forget your shoes

I am from a “shoe family” (I’m the first in three generations not to work in the women’s shoe business!) so shoes are clearly important to me. With shoes, price does reflect quality and comfort, so it’s worth investing in a few good pairs that you can wear for a long time.

Also, meet your local cobbler and make friends! If you love a pair of shoes and wear them out they can usually be fixed.

Read more »