background preloader

Algorithms and Design Patterns

Facebook Twitter

ImmutableServer. Continuous delivery · build scripting tags: Automated configuration tools (such as CFEngine, Puppet, or Chef) allow you to specify how servers should be configured, and bring new and existing machines into compliance.

ImmutableServer

This helps to avoid the problem of fragile SnowflakeServers. Such tools can create PhoenixServers that can be torn down and rebuilt at will. What is a Service Delivery Platform? Learn REST in 18 Slides - O Beautiful Code. Big-O Algorithm Complexity Cheat Sheet. Google's Clean Code Talks. What Is Clean Code? - DZone Agile. Recently, I helped facilitate some discussion workshops on the topic of clean code.

What Is Clean Code? - DZone Agile

Data Structure Visualization. Formal Verification Creates Hacker-Proof Code. In the summer of 2015 a team of hackers attempted to take control of an unmanned military helicopter known as Little Bird.

Formal Verification Creates Hacker-Proof Code

The helicopter, which is similar to the piloted version long-favored for U.S. special operations missions, was stationed at a Boeing facility in Arizona. Guide: Writing Testable Code. To keep our code at Google in the best possible shape we provided our software engineers with these constant reminders.

Guide: Writing Testable Code

Now, we are happy to share them with the world. Many thanks to these folks for inspiration and hours of hard work getting this guide done: Also thanks to Blaine R Southam who has turned it into a pdf book. Flaw #1: Constructor does Real Work Warning Signs. Dictionary of Algorithms and Data Structures. The Stony Brook Algorithm Repository. This WWW page is intended to serve as a comprehensive collection of algorithm implementations for over seventy of the most fundamental problems in combinatorial algorithms.

The Stony Brook Algorithm Repository

The problem taxonomy, implementations, and supporting material are all drawn from my book The Algorithm Design Manual. Since the practical person is more often looking for a program than an algorithm, we provide pointers to solid implementations of useful algorithms, when they are available. Because of the volatility of the WWW, we provide local copies for many of the implementations. We encourage you to get them from the original sites instead of Stony Brook, because the version on the original site is more likely to be maintained. Sequoia - Innovate or Die: The Rise of Microservices. Software has emerged as the critical differentiator in every industry, from financial services to fashion, as “technology first” startups disrupt global markets.

Sequoia - Innovate or Die: The Rise of Microservices

To stay alive, some of the biggest global enterprises we know are making a radical change in how they build and deliver software. The new model is called microservices, an approach where large applications are broken down into small, loosely coupled and composable autonomous pieces. Edit Distance Reveals Hard Computational Problems. At first glance, the big news coming out of this summer’s conference on the theory of computing appeared to be something of a letdown.

Edit Distance Reveals Hard Computational Problems

For more than 40 years, researchers had been trying to find a better way to compare two arbitrary strings of characters, such as the long strings of chemical letters within DNA molecules. The most widely used algorithm is slow and not all that clever: It proceeds step-by-step down the two lists, comparing values at each step. If a better method to calculate this “edit distance” could be found, researchers would be able to quickly compare full genomes or large data sets, and computer scientists would have a powerful new tool with which they could attempt to solve additional problems in the field.

But researchers aren’t quite ready to record the time of death. One significant loophole remains. Recursion Explained with the Flood Fill Algorithm (and Zombies and Cats) The source code of everything in this article can be downloaded here: floodfill_src.zip Consider the Lazy Zombie.

Recursion Explained with the Flood Fill Algorithm (and Zombies and Cats)

Genetic Programming: Evolution of Mona Lisa. [EDIT] Added FAQ here: Gallery here: This weekend I decided to play around a bit with genetic programming and put evolution to the test, the test of fine art :-) I created a small program that keeps a string of DNA for polygon rendering.

Genetic Programming: Evolution of Mona Lisa

The procedure of the program is quite simple: 0) Setup a random DNA string (application start) Sorting algorithm visualisation. 15 Sorting Algorithms in 6 Minutes. Learn Design Patterns with Video Courses and Tutorials from lynda. Object Oriented Design. Is Design Dead? For many that come briefly into contact with Extreme Programming, it seems that XP calls for the death of software design.

Is Design Dead?

Not just is much design activity ridiculed as "Big Up Front Design", but such design techniques as the UML, flexible frameworks, and even patterns are de-emphasized or downright ignored. In fact XP involves a lot of design, but does it in a different way than established software processes. API Design. One of the development tasks I do most often is designing the API for a reusable component. The components are usually for iOS (though sometimes they’re for OS X), and are invariably GUI controls or views of some kind. I’ve designed literally dozens of component APIs over the years, including for clients like Apple, and I’ve learned quite a bit about the process.

I periodically release open source components too, and the feedback I’ve had has helped me put together a set of guidelines for API design that I’d like to share with you. Ultimate Guide to API Design. So you need to design an API. Where do you start? Far too often internal services slowly turn into APIs. An Introduction to APIs. About This Course Have you ever wondered how Facebook is able to automatically display your Instagram photos? How about how Evernote syncs notes between your computer and smartphone? If so, then it’s time to get excited! In this course, we walk you through what it takes for companies to link their systems together. Most Code Is an Ugly Mess. Here’s How to Make It Beautiful. Courtesy The Daily WTF This is what ugly code looks like. It’s a dependency diagram—a representation of interdependence or coupling (the black lines) between software components (the grey dots) within a program.

A high degree of interdependence means that changing one component inside the program could lead to cascading changes in all the other connected components, and in turn to changes in their dependencies, and so on. Programs with this kind of structure are brittle, and hard to understand and fix. Dasgupta-Papadimitriou-Vazirani.pdf. MIT6_042JF10_notes.pdf. Data Structures and Algorithms Tutorials.

Data Structures and Algorithms - CodeChef Discuss. Running Time Graphs. The graph below compares the running times of various algorithms. Linear -- O(n) Quadratic -- O(n2) Cubic -- O(n3) Logarithmic -- O(log n) Exponential -- O(2n) Square root -- O(sqrt n) Comparison of algorithms in terms of the maximum problem size they can handle: MORAL: Cheaper, faster computers mean bigger problems to solve.Bigger problems to solve mean efficiency is more important.

The basic shape of a polynomial function is determined by the highest valued exponent in the polynomial (called the order of the polynomial). Multiplicative constants do not affect the fundamental shape of a curve. Linear Family Quadratic Family Cubic Family Only the dominant terms of a polynomial matter in the long run. The best sorting algorithms (such as mergesort) run in O(n log n) time. Polynomial curves will always overtake logarithmic curves eventually, when the problem size gets big enough, regardless of the multiplicative constants involved. Hill Climbing Algorithm & Artificial Intelligence - Computerphile. A Visual Introduction to Machine Learning.