Articles

Technology The New Normal How We Work Customer Stories Testing | All Topics

Yeller Chooses Clojure and Datomic for High-Throughput Exception Tracking Service

Yeller is an exception tracking service whose goal is to provide clear, actionable information to developers to take the pain out of examining application errors. They chose Clojure and Datomic as the platform for Yeller in order to make the development process more effective and more efficient. 

Clojure and the JVM specifically helped them create a robust runtime service handling spikes of millions of events per second. 

Clojure’s focus on immutability makes writing ‘ordinary’ code less error prone and enables some very high performance techniques.
— Tom Crayford, Founder


2 Myths and 2 Facts About Clojure That Change Everything

When people come to Cognitect seeking solutions, we start by delving deeply into the challenge at hand (aging legacy system, new business venture, a need to scale rapidly, and so forth). Together we envision what success would look like - first targeting an ideal world and then narrowing focus to what is achievable given current budgets, schedules, and realities within the broader organization. We find this method of "working backwards" consistently delivers both project and business success beyond what many clients originally thought possible.

For today's complex information challenges, the Clojure language, often paired with Datomic, enables the simplest, most flexible, robust, and least resource intensive solutions. 

During the initial review of the proposed architecture, most clients see clearly the benefits inherent in a Clojure-based, Datomic-backed system. In fact, the most common concern among clients who have not previously leveraged Clojure within their organization is whether or not they will be able to either hire new developers or train their existing teams to adopt and expand the delivered system. While Cognitect does indeed offer full-service support options, many companies have recently found building a team of high-performing Clojure developers in-house to be less of a challenge than with other languages. And there’s more - these teams then tend to accelerate the pace of overall company innovation. Here's why:

Myth: Clojure is still for early adopters and start-ups

Over 175 companies have actively advertised their Clojure adoption, and given the broad participation in user groups there are clearly many more organizations using Clojure at some level in their technology stack. A quick scan of various job sites shows Clojure positions at companies like Walmart, Facebook, Staples, Consumer Reports, Salesforce, and Amazon. It doesn't get much more mainstream than that. 

Myth: Enterprise applications require large teams to build and support them in production

Why are so many companies embracing Clojure in rapidly increasing droves? As Adrian Cockcroft of Battery Ventures (formerly Chief Architect at Netflix) puts it, more and more developers are learning Clojure and then "producing ridiculously sophisticated things in a very short time." 

Walmart's eReceipts team of only 8 developers led by Anthony Marcar built a system to process and integrate every purchase at Walmart's 5000+ stores, including online and mobile data. 

We also have Colin Steele, CTO of Roomkey.com, and his small team of developers adopting Clojure from scratch to build a booking site backed by major hotel chains to compete with huge incumbents like Expedia. Within 7 months after launch in 2012 they went from about 1,000 visits per day to 600,000+ visits per day on roomkey.com. He describes Clojure as a technology choice which enables "mere mortal developers to build a highly concurrent system, yielding an enviable user::machine density." In his blog post describing the full development experience, Steele further emphasizes how Clojure lets you do much more with significantly less. When pressed by the Room Key board to explain how Clojure is suited to large programming teams, Steele’s response was that “I never intended us to have a large programming team. Programming in the large is a higher-order 'code smell' ('architecture smell'?) that means you’re doing it wrong. Decoupled, distributed systems mean you shouldn’t be worrying about this problem any more." 

Fact: There may be fewer Clojure developers than developers in some languages - but you only need to hire a few of them

Experienced technology managers tell us many of the best developers out there are either already using Clojure or are eager to learn. Back in 2011, when the "early adopter" label may have been more appropriate, Steele remembers how the Room Key team started by "picking off pieces and building them, learning Clojure as we went. It turned out to be a very steep learning curve, but despite that we were doing reasonably well with the new language and environment within a few months." In 2011, Colin Steele didn’t have the option of hiring a team of experienced Clojure developers - so he built a small team of smart developers instead. We already know what happened after that. There are fantastic developers in many languages, but a lower bar to entry can make them harder to identify in crowds of applicants. For many organizations, Clojure isn’t just an advantage for building great systems; it is equally effective for building high-performing teams. Hiring managers tell us Clojure is their “secret weapon. It self-selects for smart developers”. 

Fact: The Clojure developer community is growing (rapidly)
  
While there may be fewer Clojure developers than in some languages, the Clojure developer community is growing rapidly.  Clojure conferences have expanded from the east coast to the west coast, and this year to Europe,  growing by double digit percentages every year. Surveys show that the two fastest growing segments of attendees are at a Clojure show for the first time and have been using Clojure for less than 2 years. Over the last two years, the percentage of respondents using Clojure in production has jumped from 35% to 75%. And community-sponsored shows and events are springing up all over, like ClojureBridge, which has run 16 events worldwide since 2014, or ClojureTre, which just had 200 attendees in Finland. The community is growing rapidly, with the number of candidates for new teams growing along with it.

In 2015, Clojure is not just a proven source of power. It is also a powerful filter, enabling technology managers at innovative companies to build and support incredible solutions with smaller teams at significantly lower costs. Pretty simple.

Nubank Uses Datomic to Shake up the Banking Industry in Brazil

Datomic has helped us solve really hard business problems and, frankly, make impossible business problems possible for us.
— Edward Wible, CTO

Brazil is the world's 5th largest country in both area and population, has the 2nd most airports (behind the United States), and one of the highest credit card interest rates in the world. The Brazilian banking industry is both heavily regulated and extremely concentrated. Enter Nubank, whose founders have created a banking alternative in one of the world’s fastest growing mobile markets.

Traditional software wasn’t going to get the job done for Nubank. From the very beginning, the goal was “differentiation through technology.” They needed to plan for growth - in size and complexity to meet the constantly changing regulatory and business rules.

Nubank turned to Datomic, a flexible, simple database that allows them to access multiple data stores simultaneously, process transactions at scale and easily query historical data. Engineers can perform complex analyses on real-time data while the performance of the production environment is preserved. Along the way, the Cognitect team helped steer Nubank’s engineers on the right path as they built Datomic into their business.

Read the full case study to see how Datomic and Clojure are changing the banking industry.

Extending Transit

The transit spec defines several ground types that are supported by
JSON and MessagePack, on which transit piggy-backs to convey data from
one process to another. These include scalar types like strings and
numbers, and composite types like maps and arrays.

The spec also defines several extension types, which are built from
ground types, each represented by a tag and a value. The tag is a
string, which is a scalar ground type. The value can be a scalar or
composite type. When the reader encounters a composite, e.g. an array,
it unpacks its values and reads each one, recursing until it reaches
scalar ground types.

We use the same extension system to support custom types that are
not part of the transit spec. These can be domain-specific types like
Person or Account, or they can be generic datatypes like trees, sorted
sets, tuples, etc. They don't need to be supported by all of the
languages in our system. In fact, they don't even need to be recognized
by the transit libs running in all of the processes in our system!

Consumer Reports uses Clojure and Datomic to Deliver Consumer Data

Since 1936, Consumer Reports has been the go-to source for reviews and product comparisons.

Over the years, they have amassed a huge amount of data in a variety of systems and databases, creating a complex array of backend interfaces. As a result, any time Consumer Reports wanted to build a new app, they had to integrate across these multiple data sources and interfaces, which slowed development.

Consumer Reports knew that its current challenges in app development ran counter to the organization’s reputation for reliability and up-to-date recommendations, and the complexities for creating new apps limited their ability to attract new audiences. To solve this problem, they built an enterprise-wide container service using Clojure and Datomic that fuses together all the underlying backend systems and databases, providing a consistent set of services to developers.

Faster

With an enterprise-wide container service, apps that used to take weeks or months to develop now take days. Creating apps faster means Consumer Reports can develop more apps to meet consumer needs.

Simpler 

With a streamlined approach of the container service, one or two developers can create an app that used to require a team approach, since backend system knowledge is no longer necessary to create an app.

Consistently Reliable 

Using a unified service rather than replicating backend system logic for each new application decreases the risk of copying bugs from one program to another, reinforcing a 79 year old reputation for trustworthiness.

With the enterprise-wide container service, developers can create applications quickly with decreased risk and effort, and with more reliability. As a result, Consumer Reports can be more responsive in creating apps that provide the data consumers are searching for. To learn more, watch Paul deGrandis explain the strategy and methods used for Unlocking Data Driven Systems.

 

Clojure Delivers Fresh Global Fashion, 10 Million Times Each Month

stylefruits is founded on the idea that online shopping should be just as exciting and inspiring as a shopping trip in the city. With more than 10 million visits worldwide each month, around 2 million app downloads and eight million Facebook fans, stylefruits is the leading European recommendation platform for fashion and home.

Focusing on authentic style recommendations from users, shopping with stylefruits is shopping with friends, but online - so reliability, excellent performance, and frequent seamless updates have been critical to business success. Since late 2012, stylefruits has relied on Clojure as the core ingredient of their production infrastructure. Clojure runs through the full stack, from backend data processing up to client-facing websites.

Find out about the experience of migrating to Clojure in this 2014 presentation from Jan Stepien. For more details on how Clojure enabled stylefruits to achieve continuous delivery, high availability, dynamic scaling and pauseless deployments under load, watch Jan's talk from BOB 2015 in Berlin.

Excellent tooling, high expressiveness, unquestionable stability and access to the entire JVM ecosystem. Clojure is so much fn.
— Daniel Steiner, Head of Development

A Puppet Labs Revolution Powered by Clojure

Puppet Labs helps tens of thousands of the world’s leading companies manage millions of machines and devices. Companies like Bank of America, Cisco, NYSE, and salesforce.com rely on our software to deploy their own software faster, be more productive, and gain insight into infrastructure configurations and operation.

Why is Puppet Labs moving all their server-side applications to Clojure? In a word - results. Drastic improvements in performance. Increased scalability. Ease of deployment. In several more words - the power and ecosystem of the JVM, Clojure’s functional strengths of immutability and concurrency, and an active development community. Leveraging their Trapperkeeper library, an open source Clojure framework for composing large-scale applications, Puppet Labs has enabled any organization to up their game for building highly reliable long-running applications and services. 

Clojure is a functional programming language from top to bottom. This means that code written in Clojure is very modular, composable, reusable and easy to reason about.
— Chris Price, Principal Engineer



Atlassian Builds Realtime Collaboration Services with Clojure

Big teams, small teams, virtual teams, creative, business, academic, or nonprofit teams. If you depend on others to see your vision realized, we’re for you.

Teams worldwide already rely on Atlassian products -- including popular software like JIRA, Confluence, HipChat and Bitbucket -- to organize, collaborate and communicate around shared work. To make this portfolio even better, Atlassian is using Clojure to build realtime collaboration features into both new and existing products. 

Senior Clojure Developer Leonardo Borges explains why Atlassian chose Clojure and the exciting results the team has achieved in his recent presentation at EuroClojure 2015.

Walmart Runs Clojure at Scale

Say the words "Black Friday" to a group of people and you'll get back a range of emotions. In 2014 this day of historically epic consumer enthusiasm on the Friday after Thanksgiving generated over $50 billion in sales from over 133 million U.S. shoppers. Although originally named for post-Thanksgiving traffic woes in Philadelphia in the 1960's, Black Friday has long been viewed by retailers (some of whom struggle "in the red" through much of the year) as a chance to get their financial numbers "in the black." But this massive surge in transactions is both an opportunity and a crisis for global retailers. Crowds of shoppers seeking pre-holiday deals can generate huge revenue boosts - along with massive spikes in web traffic and server loads. Last year several major retailers suffered system outages costing them $300,000 an hour, and substantially more during peak shopping times. While CFOs (and shoppers) may look to Black Friday with excited anticipation, many CTOs and IT Departments view their November calendars with increasing anxiety.

In preparation for the 2014 holiday season, project architect Anthony Marcar's team at WalmartLabs rolled out a new system designed from the ground up to handle the projected shopping frenzy. The result? After the staggering wave ebbed, his tweet following the surge said it all: 

Our Clojure system just handled its first Walmart black Friday and came out without a scratch.
— Anthony Marcar, Senior Architect - WalmartLabs

How did Walmart's eReceipts team of 8 developers build a system to process and integrate every purchase at Walmart's 5000+ stores, including online and mobile data? Simple - they used Clojure "all the way down" to build a powerful data system enabling the popular Savings Catcher, Vudu Instawatch, Black Friday's 1-Hour Guarantee, and other programs to improve the customer experience and streamline operations. 

Clojure uses anywhere from 5 to 10 times less code than other programming languages, speeding development time, reducing the instances of bugs, and lowering maintenance costs.

Take a behind-the-scenes look at how and why Walmart uses Clojure to reliably power one of the most demanding retail environments in the world as Anthony presents Clojure at Scale.

Clojure 1.7 is now available

We are pleased to announce the release of Clojure 1.7. The two headline features for 1.7 are transducers and reader conditionals. Also see the complete list of all changes since Clojure 1.6 for more details.

Transducers

Transducers are composable algorithmic transformations. They are independent from the context of their input and output sources and specify only the essence of the transformation in terms of an individual element. Because transducers are decoupled from input or output sources, they can be used in many different processes - collections, streams, channels, observables, etc. Transducers compose directly, without awareness of input or creation of intermediate aggregates.

Many existing sequence functions now have a new arity (one fewer argument than before). This arity will return a transducer that represents the same logic but is independent of lazy sequence processing. Functions included are: map, mapcat, filter, remove, take, take-while, drop, drop-while, take-nth, replace, partition-by, partition-all, keep, keep-indexed, map-indexed, distinct, and interpose. Additionally some new transducer functions have been added: cat, dedupe, and random-sample.

Transducers can be used in several new or existing contexts:

  • into - to collect the results of applying a transducer
  • sequence - to incrementally compute the result of a transducer
  • transduce - to immediately compute the result of a transducer
  • eduction - to delay computation and recompute each time
  • core.async - to apply a transducer while values traverse a channel

Portable Clojure and Reader Conditionals

It is now common to see a library or application targeting multiple Clojure platforms with a single codebase. Clojure 1.7 introduces a new extension (.cljc) for files that can be loaded by Clojure and ClojureScript (and other Clojure platforms). 

There will often be some parts of the code that vary between platforms. The primary mechanism for dealing with platform-specific code is to isolate that code into a minimal set of namespaces and then provide platform-specific versions (.clj/.class or .cljs) of those namespaces.

To support cases where is not feasible to isolate the varying parts of the code, or where the code is mostly portable with only small platform-specific parts, 1.7 provides Reader Conditionals

Reader conditionals are a new reader form that is only allowed in portable cljc files. A reader conditional expression is similar to a cond in that it specifies alternating platform identifiers and expressions. Each platform is checked in turn until a match is found and the expression is read. All expressions not selected are read but skipped. A final :default fallthrough can be provided. If no expressions are matched, the reader conditional will read nothing. The reader conditional splicing form takes a sequential expression and splices the result into the surrounding code.

Contributors

Thanks to all of those who contributed patches to Clojure 1.7:

  • Timothy Baldridge
  • Bozhidar Batsov
  • Brandon Bloom
  • Michael Blume
  • Ambrose Bonnaire-Sergeant
  • Aaron Cohen
  • Pepijn de Vos
  • Andy Fingerhut
  • Gary Fredricks
  • Daniel Solano Gómez
  • Stuart Halloway
  • Immo Heikkinen
  • Andrei Kleschinsky
  • Howard Lewis Ship
  • Alex Miller
  • Steve Miner
  • Nicola Mometto
  • Tomasz Nurkiewicz
  • Ghadi Shayban
  • Paul Stadig
  • Zach Tellman
  • Luke VanderHart
  • Jozef Wagner
  • Devin Walters
  • Jason Wolfe
  • Steven Yi

Also, continued thanks to the total list of contributors from all releases.

Cognitect +4

In a mad rush, Cognitect welcomed four new members to the team over the last couple of weeks.   Growth tends to come in odd shapes and sizes -- often times gradual, sometimes in punctuated leaps.  This is one of those latter times.  

Allow me to introduce the four newest members of our wonderful, geographically dispersed team.

Carin Meier

We've known Carin for many years, now, and are grateful that the stars have finally aligned to allow her to join the team. We're excited to have her technical chops, both in the service of our customers' projects but in communicating ideas to a wide audience.  In her own words: 

Carin started off as a professional ballet dancer, studied Physics in college, and has been developing software for both the enterprise and entrepreneur ever since. She digs Clojure, robots, and, of course, controlling robots with Clojure. She is highly involved in the community and spoken at many conferences, including keynoting at OSCON and Strange Loop. She helps lead the Cincinnati Functional Programmers and is the author of Living Clojure.

Benoit Fleury

Benoit has been working with us on and off for the last two years, and we are thrilled to be able to make the arrangement more permanent. We are looking forward to his continued pursuit of simplicity and elegance in our projects.  Allow me to let him introduce himself:

Aspiring designer of software systems, Benoît wishes to help make software look less like an Egyptian pyramid and more like the Empire State Building. His interest in powerful ideas and tools led him to Clojure. He believes that the the design of the next generation of software will require to get back to basic principles centered on the human condition.

Joe Smith

Joe has likewise been with us for some time already, working on a variety of projects, and we are again happy to make the arrangement more permanent.  Our customers can look forward to more of his excellent technical skills, but I'm personally just hoping to get at some of his homemade salsa.  Here is Joe on Joe:

Joe Smith has a deep appreciation for computer science fundamentals and believes that learning for the sake of learning is an essential exercise for software engineers. When he’s not coding he can be found extolling the virtues of functional programming, cooking, and gardening.

Jenn Hillner

Jenn is joining our Business Development team. She brings an exuberance for working with companies to discover how we can work together and to smooth the path from contact to contract.  Everyone who has had the opportunity to interact with Jenn will tell you the same thing: "I came away smarter and happier." Here she is: 

Jenn is a choreographer at heart.  She has always loved to see the parts and then help them move together to reach some common goal.   She applies this passion for movement to her work, her family and occasionally still to dance.   When the parts come together in a way that feels right to all, it’s a work of art.


Welcome, one and all.  

Breeze EHR Simplifies Healthcare with Clojure and Datomic

Along with complex electronic documentation requirements, medical professionals face an increasing number of factors beyond just symptoms when considering patient diagnosis. Breeze EHR is creating software with Clojure, Datomic, and React that helps doctors make decisions and simplify workflow. This scalable technology will enable all parties in the healthcare ecosystem to collaborate for positive outcomes across a wide range of goals, and enable the system itself to participate on their behalf during the medical encounter.

Clojure and Datomic are valuable as tools, but their radical stance toward simplicity goes beyond the products and also informs and shapes the people and designs that use them.
— Tyler Tallman, CTO

Learn more from Tyler’s Clojure/West presentation.

Yieldbot's Powerful Data Platform runs on Clojure

Yieldbot is using data science to revolutionize the way media value is created for consumers, brands and publishers. Yieldbot’s Clojure-based system processes over 1 billion page views per week and applies machine learning for realizing consumer intent. 

Why Clojure?

  • Leverage the power of the JVM with significantly less code
  • Rapid data exploration via the REPL
  • Zero delta between prototype code and production code

 Find out more from Soren Macbeth’s Clojure/West presentation.

Distinguished Magic

"The future is already here — it's just not very evenly distributed." - William Gibson

Decision, decisions. Users are screaming to pay money for your service, but your current infrastructure is going to pop like a balloon if you let any more sign up. Or your cumbersome deployment process has slowed enterprise sales to a crawl as your small support team runs themselves ragged. Is your competition widening the feature gap due to your lengthy test and release cycle? How to process all that customer data into useful trends? Your decisions today will mean soaring profit or smoldering ruin. How will you solve these problems? Traditional answers to these questions lead many organizations down roads from which they never return. But in the future? Roads? Where we’re going, we don’t need roads...  

You may have tried incremental approaches that were so incremental that nothing changed. You may have attempted full system overhauls, only to have the budget and schedule blow up in your face while the problems remained - or got worse. Or you may not even know where to start.

Usually the problem isn’t a lack of skill. It’s not a lack of commitment. Or an aversion to hard work. No, what’s holding you back is a failure of imagination. Most people self-censor (whether they are aware of it or not), limiting themselves to what they think is possible. We tend to stick to what we know how to do or have seen others do. Because we cannot see a path to the future we would like to see, we fail to see that future at all.  Ironically, when we come across someone who did manage to transcend these mental limits, we say that they “saw what others could not see”. Actually these visionaries see less than others - they don’t  see the walls that block others' view of a better world. They don’t impose restrictions on the future. The difference is that they believe in magic.

So forget what you and the people around you already know how to do. Forget what you have time to do. Forget what you have the budget to do. Forget what you think others will let you do. Instead, ask yourself:

If I could wave a magic wand and make the solution appear, what would it look like? 

Ignore how you are going to get there and just think about what things will look like once you arrive. You need to believe.

Working backwards from a “magical” solution will result in a better real world solution than you can get to by crawling forward on your belly around obstacles you find along the road.

"Any sufficiently advanced technology is indistinguishable from magic." — Arthur C. Clarke

With the future of your business at stake, you need a new approach for solving your tough problems.  At Cognitect, we help teams break through preconceptions that hold them back. To envision systems unrestrained by the limits of traditional development tools, to design the right solution to grow your business. The results sometimes seem magical - our modern tech stack of Clojure and Datomic enables development of flexible cloud-based systems at significantly less cost than traditional approaches. Technologies now exist that enable small teams to build enterprise-grade solutions on schedules and budgets that not long ago really would have required a pointy hat and cloak.

As noted by former Chief Architect of Netflix’s Cloud Services Adrian Cockcroft, Clojure allows developers to produce "ridiculously sophisticated things in a very short time.” And immutable data - a hallmark of the Datomic database - grants complete auditability of values and transactions from any previous time, plus the ability to model potential scenarios without committing changes. Relive the past? Peer into the future? Datomic may not actually let you travel through time, but the results are just about indistinguishable.

You can attempt to solve your problem with the traditional approach. But are you planning the right solution? Or just what you can put together with the tools and ideas inside the barriers that have accreted across your organizational field of vision? Or will you forget what is and imagine what could be, without preconceived limitations and constraints? Don’t settle for a faster horse - demand a rocket ship. This may be the path less traveled, but it will make all the difference.

EuroClojure: June 25-26 in Barcelona

We’re pleased to announce that EuroClojure 2015 will be held June 25-26 in Barcelona, Spain. Thanks again to Marco and the Clojure community, and we’re looking forward to seeing you all there. Details including registration, sponsorship, and the call for presentations are forthcoming; you can check out euroclojure.org or @euroclojure for updates and of course we’ll update here as well.

EuroClojure Joins the Cognitect Family of Events

EuroClojure has been a great conference for Clojure for several years - big thanks to Marco Abis and the community for all of their hard work. To ensure the continued excellence and growth of the conference, we are excited that EuroClojure has joined the Cognitect ecosystem. Marco has been helping us and will continue to help make this conference awesome and importantly to preserve the unique style of EuroClojure. We want to thank him for creating the vibrant community event it has already become. EuroClojure now joins Clojure/conj (in the fall) and Clojure/West (April 20-22, Portland, OR) in our lineup.

We’re working on an exact date and location for EuroClojure 2015, and should be able to announce that within the week so stay tuned. Marco and the Cognitect folks are all excited about this and looking forward to seeing you all this summer.

Contact us at events@cognitect.com for questions or to learn more about this.

Our customers are hiring

Over the last year, it has been energizing to see a definite increase in the number of Clojure positions available in the marketplace. We are excited to announce that one of our clients, Dean & Company, is hiring Clojurists in the DC area. Dean & Co is interested in adding both junior and senior developers to its team. You can learn more and apply for the position here. If you have some Clojure production experience and are interested in a new challenge, we hope you will reach out to Dean. 

 

Two-day Datomic Training Course Now Available Online

We recorded Stu Halloway delivering a two day, in-depth training course on Datomic in Washington, D.C., and are happy to announce that the course is available online today for free. The course covers everything from an introduction to the design philosophy and principles behind Datomic, through detailed dives into the information, transaction, query and time models, to the operational characteristics of the system.

The course is split into 6 modules, totaling over 4 hours of content. You can either consume the entire course or pick the modules that are most relevant to you. You can also download the class and lab materials so you can follow along and get hands on.

We hope you enjoy the experience, and happy coding.

Story Points Must Die: A Spacetime Adventure

Long ago beyond the stars a civilization rose from dust and puddles to spread the gospel of “agile software development” across many worlds. Over time these worlds diverged into two distinct tribes, known as “Team A” and “Team B” (for they were truly unimaginative beings in the ways of names). Both tribes prospered, delivering software throughout the galaxy, but over many generations Team A grew to believe the source of their success was a mysterious force known as “Story Points”. Team A evolved an elaborate ritual that they performed during their traditional bi-weekly gatherings known as “Sprint Planning”.  Team A believed these rituals allowed them to accurately predict the future. Abandoning the process of deep thought and discussion, Team A eventually focused their entire development process on these “points”, which for some reason existed only in quantities of 1, 2, 3, 5, and (very rarely) 8.

While both tribes continued to ship software, fealty to this numeric master began to visibly distort Team A’s demeanor and appearance until travelers from other galaxies could easily tell which of the two tribes they had encountered. Those from Team A came to be known as victims of "Fibonacci’s Curse". 

Let us go now, across space and time in the blink of an eye to gaze upon two such parallel development efforts...

Clojure/conj 2014: The largest yet

Clojure/conj 2014 is in the books. This was the fifth Conj and by far the biggest, with 500 attendees and 21 speakers. In fact, the conference set some new bars. It was the first time:

  • the Conj has crested 500 attendees
  • the talk videos were posted same-day
  • opportunity grants were awarded
  • more than 60% of attendees were first-timers

Since the videos have gone online at ClojureTV they have been collectively viewed more than 36,000 times. 

I'd like to extend some thanks to people who made the event such a success.  First, Lynn and Alex, for planning, organizing and staffing the event.  Next, to the speakers: it isn't easy getting up in front of that crowd, and you did it with style, and aplomb.  Third, to the sponsors, whose support made so much of the event possible. And finally, to the attendees, without whom there is no event, and no purpose.  You *are* the show. 

We hope that everyone who attended found the content and the community they were expecting and some surprises in addition. For those who weren't able to attend, you can check out the videos online, and there is always Clojure/west and next year's Conj.  We hope to see you there!