Ruby on Rails

92 results back to index


pages: 280 words: 40,881

JQuery UI by Eric Sarrion

Chuck Templeton: OpenTable:, Firefox, Ruby on Rails, web application

List of suggestions The input field is represented by an <input> whose ID is book: <script src = jquery.js></script> <script src = jqueryui/js/jquery-ui-1.8.16.custom.min.js></script> <link rel=stylesheet type=text/css href=jqueryui/css/smoothness/jquery-ui-1.8.16.custom.css /> <h3>Enter the name of the book:</h3> <input id=book /> <script> // array of items to be proposed in the list of suggestions var books = ["Web development with J2EE", "Practical CSS & JavaScript", "Practical Ruby on Rails", "Introduction to HTML & CSS", "jQuery UI"]; $("input#book").autocomplete ({ source : books }); </script> In the <script> tag of the HTML page, we need to indicate both the list of suggestions (var books) and that the input field must be observed in order to display the list of suggestions. To do this, simply indicate that the <input> field is managed by the jQuery UI autocomplete () method.

For example, if we modify the ui-menu-item class associated with <li> elements, we can change the font used for the list of suggestions, as shown in Figure 9-3: <script src = jquery.js></script> <script src = jqueryui/js/jquery-ui-1.8.16.custom.min.js></script> <link rel=stylesheet type=text/css href=jqueryui/css/smoothness/jquery-ui-1.8.16.custom.css /> <style type=text/css> li.ui-menu-item { font-size : 12px; font-family : georgia; } </style> <h3>Enter the name of the book:</h3> <input id=book /> <script> // array of items to be proposed in the list of suggestions var books = ["Web development with J2EE", "Practical CSS & JavaScript", "Practical Ruby on Rails", "Introduction to HTML & CSS", "jQuery UI"]; $("input#book").autocomplete ({ source : books }); </script> Figure 9-2. HTML code generated by the autocomplete () method Figure 9-3. Customized list of suggestions The autocomplete () Method The autocomplete () method can be used in two forms: $(selector, context).autocomplete (options) $(selector, context).autocomplete ("action", params) The autocomplete (options) Method The autocomplete (options) method declares that an <input> HTML element must be managed as an input field that will be displayed above a list of suggestions.

In this example, we set the list of suggestions to 400 pixels wide (see Figure 9-4): <script src = jquery.js></script> <script src = jqueryui/js/jquery-ui-1.8.16.custom.min.js></script> <link rel=stylesheet type=text/css href=jqueryui/css/smoothness/jquery-ui-1.8.16.custom.css /> <h3>Enter the name of the book:</h3> <input id=book /> <script> // array of items to be proposed in the list of suggestions var books = ["Web development with J2EE", "Practical CSS & JavaScript", "Practical Ruby on Rails", "Introduction to HTML & CSS", "jQuery UI"]; $("input#book").autocomplete ({ source : books, open : function (event) { var $ul = $(this).autocomplete ("widget"); $ul.css ("width", "400px"); } }); </script> The list corresponds to the <ul> (created automatically by jQuery UI when using the autocomplete (options) method).


pages: 190 words: 52,865

Full Stack Web Development With Backbone.js by Patrick Mulder

Airbnb, create, read, update, delete, Debian, functional programming, Kickstarter, MVC pattern, node package manager, Ruby on Rails, side project, single page application, web application, WebSocket

., when you work with a web server similar to Express.js), CommonJS modules, or CommonJS like require of modules, can be done with some simple configurations. For web servers based on Node.js, there are the package managers Stitch and Mincer, which are somewhat similar to the Sprockets asset manager for web servers in Ruby. If you come from Ruby on Rails, you probably have used Sprockets, the asset pipeline in Ruby on Rails. Sprockets is very similar to Stitch but supports its own require syntax. If you like that syntax, you might want to check out Mincer, a port of Sprockets to Node.js. To illustrate some ideas behind using a package manager and a manifest file, let’s walk through an example with Express.js and Stitch.

Hopefully this book can provide a bridge from client-side to server-side concepts and help you understand the advantages of the Backbone ecosystem. You can then adopt a mind-set for JavaScript applications in general, on the client or in combination with server-side JavaScript. Why I Wrote This Book Working as a Ruby on Rails developer, I observed the JavaScript and NodeJS develop‐ ments with some skepticism. After all, Ruby land created a lot of innovations that con‐ tribute to the happiness and productivity of developers and businesses. But as with any other framework or maturing application, code bases become harder to maintain, and it is difficult to redesign applications toward mobile clients and main‐ tain smooth interactions with data.

Addy’s book might be a good companion to this book, because it serves as more of a reference book, unlike this book’s more specialized approach that focuses on one particular application. Addy concentrates more on frontend development, while this book also includes ideas and concepts for backend development. Preface | xi Thoughtbot’s Backbone.js on Rails This self-published book is great from a Ruby on Rails perspective, because it in‐ cludes a lot of Ruby code examples that are necessary to drive a Backbone.js frontend in Rails. It also does a nice job in discussing Jasmine and Capybara for frontend testing. Building Backbone Plugins Consult this book written by Derick Bailey and Jerome Gravel-Niquet if you want to delve more into writing Backbone plug-ins and reusable code in general.


pages: 194 words: 36,223

Smart and Gets Things Done: Joel Spolsky's Concise Guide to Finding the Best Technical Talent by Joel Spolsky

Build a better mousetrap, David Heinemeier Hansson, functional programming, knowledge worker, linear programming, nuclear winter, Ruby on Rails, Sand Hill Road, Silicon Valley, sorting algorithm, Superbowl ad, the scientific method, type inference, unpaid internship

Or feel embarrassed about really liking 61 62 Smart and Gets Things Done what you do.”8 Elevating a web programming framework to a thing of “beauty, happiness, and motivation” may seem like hubris, but it’s very appealing and sure differentiates their company. In propagating the narrative of Ruby on Rails as Happiness, they’re practically guaranteeing that at least some developers out there will be looking for Ruby on Rails jobs. But 37signals is still new at this identity management campaign thing. They don’t hold a candle to Apple Computer, which, with a single Super Bowl ad in 1984, managed to cement their position to this day as the countercultural force of freedom against dictatorship, of liberty against oppression, of colors against black and white, of pretty women in bright red shorts against brainwashed men in suits.

Wanna rewrite that whole trading app in Ruby? Whatever. Just get me a goddamned cheeseburger. 59 60 Smart and Gets Things Done Some programmers couldn’t care less about what programming language they’re using, but most would just love to have the opportunity to work with exciting new technologies. Today that may be Python or Ruby on Rails; three years ago it was C# and before that Java. Now, I’m not telling you not to use the best tool for the job, and I’m not telling you to rewrite in the hot language-du-jour every two years, but if you can find ways for developers to get experience with newer languages, frameworks, and technologies, they’ll be happier.

As a recruiter, your job is to identify the idealistic aspects of your company, and make sure candidates are aware of them. Some companies even strive to create their own ideological movements. Chicago-area startup 37signals has strongly aligned themselves with the idea of simplicity: simple, easy to use apps like Backpack and the simple, easy to use programming framework Ruby on Rails. For 37signals, simplicity is an “-ism,” practically an international political movement. Simplicity is not just simplicity, oh no, it’s summertime, it’s beautiful music and peace and justice and happiness and pretty girls with flowers in their hair. David Heinemeier Hansson, the creator of Rails, says that their story is “one of beauty, happiness, and motivation.


pages: 82 words: 17,229

Redis Cookbook by Tiago Macedo, Fred Oliveira

Debian, full text search, loose coupling, Ruby on Rails, Silicon Valley, WebSocket

As you can see, using Redis from inside a Ruby script (or full-blown application) is quite trivial. In the next recipe, we’ll look into how we can build upon what we just learned to use Redis from a Ruby on Rails-based application. Using Redis with Ruby on Rails Problem You want to store and access data in Redis from a Ruby on Rails application. Solution Use Ezra Zygmuntowicz’s redis-rb library to access and manipulate Redis data from Ruby on Rails. Discussion If you already have a Ruby on Rails application, you can add Redis support to it by adding the following line to your Gemfile: gem 'redis' and by creating a file inside your config/initializers directory with the following initializer to connect your application to Redis: $redis = Redis.new This will create a global variable called $redis with which you can manipulate data and run commands on the engine.

You can pass the :host and :port options to the Redis.new method in order to connect to a specific host and port instead of the default localhost:6379. redis-rb also lets you connect to Redis by using a Unix socket by passing the parameter :path. Once these two steps are done, you are ready to start using Redis from Ruby on Rails. You can test out your setup by accessing and using the $redis variable from your Rails console by running: rails console and exploring Redis commands to get and set specific keys, hashes, sets, or lists. Adding Redis functionality to ActiveRecord models Let’s imagine you have a User model and a Book model and you wanted to store a list of books that person owns by using a Redis set, thus allowing you to do creative things like seeing books users have in common easily.


pages: 139 words: 35,022

Roads and Bridges by Nadia Eghbal

AGPL, Airbnb, Amazon Web Services, barriers to entry, Benevolent Dictator For Life (BDFL), corporate social responsibility, crowdsourcing, cryptocurrency, David Heinemeier Hansson, Debian, DevOps, en.wikipedia.org, Firefox, GnuPG, Guido van Rossum, Khan Academy, Kickstarter, Marc Andreessen, market design, Network effects, platform as a service, pull request, Richard Stallman, Ruby on Rails, side project, Silicon Valley, Skype, software is eating the world, Tragedy of the Commons, Y Combinator

Some open source contributors fear, perhaps justifiably, that money will introduce bloat into the system, with developers creating new projects simply to get funding, rather than because the solution is needed. David Heinemeier Hansson (also known as DHH), who created the popular software framework Ruby on Rails, warned in 2013 against mixing open source with money: Open source has been such an incredible force for quality and community exactly because it's not been defined in market terms. In market terms, most open source projects should never have had a chance. Take Ruby on Rails. [...] That's a monumental achievement of humanity! Thousands, collaborating for a decade, to produce an astoundingly accomplished framework and ecosystem available to anyone at the cost of zero.

Imgur was profitable, and Schaaf did not take any outside money for 5 years before raising $40 million from VC firm Andreessen Horowitz in 2014. [18] Venture capitalists and other institutional investors, in turn, have started writing smaller checks to companies, giving rise to new subsets of investing, including: Seed stage: Venture firms providing the first round of funding, rather than later-stage growth capital Micro VCs: Venture firms loosely defined as less than $50 million under management Accelerators: Firms that provide small amounts of capital, often less than $50,000, as well as advice and mentorship to early-stage companies $10M can fund a hundred companies today, compared to one or two in the 1990s. Free software made it easier for people of all demographics to learn to code, making technology accessible to the world. If you wanted to learn how to code at home today, you might start by learning Ruby on Rails. Rails is a popular software framework and Ruby is a programming language. Anyone with Internet access can install these tools on any computer for free. Because they are free, they are also very popular, which means there is plenty of information online to help you get started, from formal tutorials to question-and-answer forums.

For example, Django Girls has taught over 2,000 women to code, in 49 countries around the world. [21] Although the organization did not develop Django themselves, they are able to use Django, which students download and use for free, in their curriculum Dev Bootcamp teaches career switchers to code, preparing everyone from English teachers to military veterans to become professional software developers. The program costs $12-14,000. Dev Bootcamp teaches Ruby, JavaScript, Ruby on Rails and SQL, among other components. All of these components are free for students to download and use, and Dev Bootcamp does not have to pay to use these materials. Dev Bootcamp was recently acquired by Kaplan for an undisclosed sum in 2014. [22] If such critical pieces of software were not free, people from all walks of life would not be able to take part in today’s technology renaissance.


pages: 648 words: 108,814

Solr 1.4 Enterprise Search Server by David Smiley, Eric Pugh

Amazon Web Services, bioinformatics, cloud computing, continuous integration, database schema, domain-specific language, en.wikipedia.org, fault tolerance, Firefox, information retrieval, Ruby on Rails, web application, Y Combinator

• solrjs is an example of building a fully featured Solr Search UI using just JavaScript. • php is a barebones example of PHP integration with Solr. • solr-php-client is a richer example of integrating Solr results into a PHP based application. • myfaves is a Ruby on Rails application using acts_as_solr to search for music artists. • blacklightopac is a demonstration of a full featured faceted search UI in Ruby on Rails. SolrJ: Simple Java interface SolrJ is the simple Java interface to Solr that insulates you from the dirty details of parsing and sending messages back and forth between your application and Solr. Instead, you get to work in the familiar world of objects like SolrQuery, QueryResponse, and SolrDocument.

Acquia is currently evaluating many other enhancements to their service that take advantage of the strengths of the Drupal platform and the tight level of integration they are able to perform. So expect to see more announcements. You can learn more about what is happening here at http://acquia.com/products-services/acquia-search. Ruby on Rails integrations There has been a lot of churn in the Ruby on Rails world for adding Solr support, with a number of competing libraries and approaches attempting to add Solr support in the most Rails-native way. Rails brought to the forefront the idea of Convention over Configuration. In most traditional web development software, from ColdFusion, to Java EE, to .NET, the framework developers went with the approach that their framework should solve any type of problem and work with any kind of data model.

See term-suggest Auto-warming 280 automatic phrase boosting about 132, 133 configuring 133 phrase slop, configuring 134 AWStats 202 Download at Boykma.Com This material is copyright and is licensed for the sole use by William Anderson on 26th August 2009 4310 E Conway Dr. NW, , Atlanta, , 30327 B batchSize 78 bf parameter 117 Blacklight Online Public Access Catalog. See Blacklight OPAC, Ruby On Rails integrations Blacklight OPAC, Ruby On Rails integrations about 263 data, indexing 263-267 Boolean operators AND 100 AND operator, combining with OR operator 101 AND or && operator 101 NOT 100 NOT operator 101 OR 100 OR or || operator 101 bool element 92 boost functions boosting 137, 138 r_event_date_earliest field 138 boosting 70, 107 boost queries boosting 134-137 bq parameter(s) 134 bucketFirstLetter 148 buildOnCommit 174 buildOnCommit, spellchecker option 174 buildOnOptimize, spellchecker option 174 C caches tuning 281 CapitalizationFilterFactory filter 63 CCK 252 Chainsaw URL 204 characterEncoding, FileBasedSpellChecker option 175 CharFilterFactory 62 CI 128 classname 173 CM 197 CMS 250 Co-ordination Factor.


pages: 132 words: 31,976

Getting Real by Jason Fried, David Heinemeier Hansson, Matthew Linderman, 37 Signals

call centre, David Heinemeier Hansson, iterative process, John Gruber, knowledge worker, Merlin Mann, Metcalfe's law, performance metric, post-work, premature optimization, Ruby on Rails, slashdot, Steve Jobs, web application

Keep the lists to yourself or share them with others for easy collaboration. There's no easier way to get things done. Over 100,000 lists with nearly 1,000,000 items have been created so far. Ruby on Rails, for developers, is a full-stack, open-source web framework in Ruby for writing real-world applications quickly and easily. Rails takes care of the busy work so you can focus on your idea. Nathan Torkington of the O'Reilly publish ing empire said "Ruby on Rails is astounding. Using it is like watching a kung-fu movie, where a dozen bad-ass frameworks prepare to beat up the little newcomer only to be handed their asses in a variety of imaginative ways."

We've talked here in terms of programming languages, but the concept holds true for applications, platforms, and anything else. Choose the fuse that gets people excited. You'll generate excitement and motivation and a better product as a result. The kinds of engineers you want The number one reason I wanted to build our app using Ruby on Rails is that it is so elegant, productive, and beautifully designed. It tends to attract the kind of engineers who care about just those sort of things...those are exactly the kinds of engineers you want on your team because they create the kind of beautiful, elegant and productive software you need to win the market.

That post made the rounds and got thousands and thousands of page views (to this day it's doing huge traffic). The post worked on both an educational and a promotional level. A lesson was learned and a lot of people who never would have known about our products were exposed to them. Another example: During our development of Ruby on Rails, we decided to make the infrastructure open source. It turned out to be a wise move. We gave something back to the community, built up goodwill, garnered recognition for our team, received useful feedback, and began receiving patches and contributions from programmers all over the world. Teaching is all about good karma.


pages: 145 words: 40,897

Gamification by Design: Implementing Game Mechanics in Web and Mobile Apps by Gabe Zichermann, Christopher Cunningham

airport security, future of work, game design, Ian Bogost, lateral thinking, minimum viable product, pattern recognition, Ruby on Rails, social graph, social web, urban planning, web application

The next two chapters are clearly more technically oriented than the rest of the book, but don’t despair if you’re a non-programmer! You can use this chapter to think through the logic of implementing a gamified experience, skipping over the code if it’s not your core strength. As a starting point, we’ll use an easy-to-set-up open source Ruby on Rails project, called Altered Beast (http://github.com/courtenay/altered_beast). Altered Beast is a well-coded, no-frills forums application that includes extendable basic user functionalities such as account creation and forums participation. In short, it’s a perfect place to begin a gamification tutorial (see Figure 7-1).

We’ll begin with an ActiveRecord migration to add these fields to the user table: class AddScoreAndLevelToUsers < ActiveRecord::Migration def self.up add_column :users, :score, :integer, :default => 0 add_column :users, :level_id, :integer end def self.down remove_column :users, :score remove_column :users, :level_id end end This gives us a place to track the player’s score and to assign a current level. We set the default score to zero so that we don’t have to worry about dealing with nil scores in our arithmetic. Next, we’ll define our model relationships. Since we’ve already defined a levels table with an id column, and since we added the foreign key level_id to the user table, Ruby on Rails makes it easy to define our table relationships. To do this, we’ll add one line of code to both the User class and the Level class: class User belongs_to :level ... class Level < ActiveRecord::Base has_many :users ... This describes the “User has many Levels” relationship so that we can access attributes in a very readable way—for example, by writing things like user.level.display_name.

In the model class, we need to define the “belongs to user” relationship. And for convenience, we’ll also define a default sort order for events so that recent events will show up first in any listing: class Event < ActiveRecord::Base belongs_to :user default_scope :order => 'created_at DESC' end That takes care of the Event model. To take advantage of Ruby on Rails’ ActiveRecord code for simple lookups, we need to define the “each user has many events” relationship in the User model: class User has_many :events, :dependent => :destroy ... The only things we’re missing now are methods awarding points to the player and updating her score. Extending the User Model to Scores and Levels Whenever we add points to the player’s score, we’ll need to check whether the player has achieved a new level.


pages: 120 words: 19,624

git internal by Scott Chacon

Debian, en.wikipedia.org, loose coupling, pull request, Ruby on Rails

I will focus on some interesting features of a commercial service called GitHub (http://github.com) here, but there is also an open source project called Gitorious (http://gitorious.com) that has many of the same features. One of the compelling features of GitHub is the ability to create a private repository and share it with only a few developers. However, the complete source to Gitorious is available as a Ruby on Rails application. It could be modified to run on your company’s server if your project needs to remain private. GitHub hosts many popular projects featured in the PeepCode series, including Ruby on Rails (http://github.com/rails/rails/tree/master), Merb (http://github.com/wycats/merb-core/tree/master), RSpec (http://github.com/ dchelimsky/rspec/tree/master), and Capistrano (http://github.com/jamis/capistrano/tree/master).

Though originally used for just the Linux kernel, the Git project spread rapidly, and quickly became used to manage a number of other Linux projects, such as the X.org, Mesa3D, Wine, Fedora and 8 Samba projects. Recently it has begun to spread outside the Linux world to manage projects such as Rubinius, Merb, Ruby on Rails, Nu, Io and many more major open source projects. 9 Understanding Git chapter 2 In this section, we will go over what Git was built for and how it works, hopefully laying the groundwork to properly understand what it is doing when we run the commands. The first commit message for the Git project was ‘initial version of “git”, the information manager from hell’ – Linus, 4/7/05 When I learned Git, as many people do, I learned it in the context of other SCMs I had used – Subversion or CVS.

It works completely offline or with hundreds of remote repositories that can push to and/ or fetch from each other over several simple and standard protocols. Efficiency Git is very efficient. Compared to many popular SCM systems, it seems downright unbelievably fast. Most operations are local, which reduces unnecessary network overhead. Repositories are generally packed very efficiently, which often leads to surprisingly small repo sizes. The Ruby on Rails Git repository download, which includes the full history of the project – every version of every file, weighs in at around 13M, which is not even twice the size of a single checkout of the project (~9M). The Subversion server repository for the same project is about 115M. Git also is efficient in its network operations – the common Git transfer protocols transfer only packed versions of only the objects that have changed.


pages: 982 words: 221,145

Ajax: The Definitive Guide by Anthony T. Holdener

AltaVista, Amazon Web Services, business process, centre right, Colossal Cave Adventure, create, read, update, delete, database schema, David Heinemeier Hansson, en.wikipedia.org, Firefox, full text search, game design, general-purpose programming language, Guido van Rossum, information retrieval, loose coupling, MVC pattern, Necker cube, p-value, Ruby on Rails, slashdot, sorting algorithm, web application

The large available class library and the GUI for designing site pages allow more rapid deployment of Ajax web applications than traditional coding. Ruby on Rails Ruby on Rails (RoR or just Rails), which David Heinemeier Hansson developed while he was working on Basecamp (http://www.basecamphq.com/), is a web-based project collaboration tool. It is an open source framework that is based on the MVC pattern, and you can find it at http://www.rubyonrails.org/. It is considered to be a full-stack framework, meaning that all the components in the framework are integrated, so you don’t have to set anything up manually. Ruby on Rails’ marketing claims that a web programmer can develop 10 times faster than a programmer working from scratch without Rails.

It does this by having the process use a multithreading technique that allows it to poll different connections virtually at the same time. Unfortunately, as with CGI, FastCGI sees its best performance when the program is written in a high-level language such as C or C++. Yes, you can use it with any scripting language, and you can use it with frameworks such as Ruby on Rails and Django. I simply do not see the Web moving in this direction, though. Because Ruby on Rails, Django, and others (as you will see later in the chapter) can also use embedded interpreters, and because there are other methods of delivering dynamic content The Web Server | 37 from the server, this is not as likely to pick up much steam.

This is just what Rails does, and these libraries are set up to work within the MVC pattern. Read the articles and blogs on Ruby on Rails, and almost all of them will talk about the ActiveRecord library. ActiveRecord makes communicating with a database just plain easy, something anyone trying to build a database-driven web application wants to hear. ActiveRecord acts as the model of the MVC pattern. Rails also has the Action Pack, which consists of two libraries: ActionController and ActionView. ActionController takes care of the pattern’s controller needs, and ActionView handles the view. Frameworks and Languages | 59 Ruby on Rails allows a web developer to focus on what he needs to: the application’s functionality.


pages: 220

Startupland: How Three Guys Risked Everything to Turn an Idea Into a Global Business by Mikkel Svane, Carlye Adler

Airbnb, Ben Horowitz, Burning Man, business process, call centre, Chuck Templeton: OpenTable:, cloud computing, credit crunch, David Heinemeier Hansson, Elon Musk, housing crisis, Jeff Bezos, Kickstarter, Menlo Park, remote working, Ruby on Rails, Sand Hill Road, Silicon Valley, Silicon Valley startup, Skype, software as a service, South of Market, San Francisco, Steve Jobs, subscription business, Tesla Model S, web application

See investors W Williams, Evan, 122 working from home, 34–35 Working from Home Wednesdays, 34 Y Yammer, 129 Yellurkar, Devdutt, 81–82, 86, 87, 88, 93, 106 epilogue, 182 Z Zendesk, 3–4 acquiring customers, 47–53 application to TechCrunch, 42–45 awarded Sexiest Enterprise Startup, 112 building the product, 27–30 customer support from the inside, 103 early financial struggles, 35–39 going live, 45 inception, 19–26 incorporation, 26–27 IPO, 7–8, 167–178 legal and tax challenges of relocating to America, 92–93 loft office, 31–33 moving the company to Boston, 87–88, 90–91 naming the company, 39–42 popularity after investment from CRV, 105–107 preparing for IPO, 158–160 relocating to San Francisco, 112–124 Ruby on Rails, 26 Ruby on Rails framework, 14 shifting strategy, 152–154 200 Want to connect? Subscribe to our newsletter josseybass.com/email Follow us on Twitter twitter.com/josseybassbiz Like us on Facebook facebook.com/JosseyBassBiz Go to our Website josseybassbusiness.com WILEY END USER LICENSE AGREEMENT Go to www.wiley.com/go/eula to access Wiley’s ebook EULA.

I had to let go of people whom I considered very good friends—people whom I felt had built the company with me. And decisions about whom to let go relied more on where we could save most, rather than on what made the most sense for the business. Ironically, one of the über-talented guys I had to let go was David Heinemeier Hansson—who later became the father of Ruby on Rails, the framework we later built Zendesk on, and a cofounder of 37signals (now Basecamp), which became an inspiration for a whole generation of software startups, including Zendesk. Letting people go wasn’t even the worst part. There were many tough things about being in charge of the business. One time, one of our employees didn’t show up for work for several days and we couldn’t understand why.

Initially it felt like I had ended up with the short end of the stick. But I’m probably also the kind of guy who likes to make stuff happen quickly, and therefore, on some level, I was not totally unhappy with the setup. Alex was a PC guy, entrenched in the world of Microsoft. Morten was from the Apple and Java world. And they built the software entirely on Ruby on Rails, which was new, and which they taught themselves. It was a big learning experience. 26 Page 26 Svane c01.tex V3 - 10/24/2014 8:14 P.M. The Honeymoon As Morten and Alex got more and more entrenched in coding, my role became more about being a sounding board and partner in the product management process and preparing for the product’s launch and go-to-market strategy.


pages: 292 words: 81,699

More Joel on Software by Joel Spolsky

a long time ago in a galaxy far, far away, barriers to entry, Black Swan, Build a better mousetrap, business process, call centre, Danny Hillis, David Heinemeier Hansson, failed state, Firefox, fixed income, functional programming, George Gilder, Larry Wall, low cost airline, low cost carrier, Mars Rover, Network effects, Paul Graham, performance metric, place-making, price discrimination, prisoner's dilemma, Ray Oldenburg, Ruby on Rails, Sand Hill Road, Silicon Valley, slashdot, social software, Steve Ballmer, Steve Jobs, Superbowl ad, The Great Good Place, Tragedy of the Commons, type inference, unpaid internship, wage slave, web application, Y Combinator

Or feel embarrassed about really liking what you do” (www.loudthinking.com/ arc/2006_08.html). Elevating a web programming framework to a thing of “beauty, happiness, and motivation” may seem like hubris, but it’s very appealing and sure differentiates their company. In propagating the narrative of Ruby on Rails as Happiness, they’re practically guaranteeing that at least some developers out there will be looking for Ruby on Rails jobs. 32 More from Joel on Software But 37signals is still new at this identity management campaign thing. They don’t hold a candle to Apple Computer, which, with a single Superbowl ad in 1984, managed to cement their position to this day as the countercultural force of freedom against dictatorship, of liberty against oppression, of colors against black and white, of pretty women in bright red shorts against brainwashed men in suits.

Wanna rewrite that whole trading app in Lisp? Whatever. Just get me a goddamned cheeseburger. Some programmers couldn’t care less about what programming language they’re using, but most would just love to have the opportunity to work with exciting new technologies. Today that may be Python or Ruby on Rails; three years ago it was C# and before that Java. Now, I’m not telling you not to use the best tool for the job, and I’m not telling you to rewrite in the hot language-du-jour every two years, but if you can find ways for developers to get experience with newer languages, frameworks, and technologies, they’ll be happier.

As a recruiter, your job is to identify the idealistic aspects of your company and make sure candidates are aware of them. Some companies even strive to create their own ideological movements. Chicago-area startup 37signals has strongly aligned themselves with the idea of simplicity: simple, easy to use apps like Backpack and the simple, easy-to-use programming framework Ruby on Rails. For 37signals, simplicity is an “-ism,” practically an international political movement. Simplicity is not just simplicity, oh no, it’s summertime, it’s beautiful music and peace and justice and happiness and pretty girls with flowers in their hair. David Heinemeier Hansson, the creator of Rails, says that their story is “one of beauty, happiness, and motivation.


pages: 278 words: 70,416

Smartcuts: How Hackers, Innovators, and Icons Accelerate Success by Shane Snow

3D printing, Airbnb, Albert Einstein, attribution theory, augmented reality, barriers to entry, conceptual framework, correlation does not imply causation, David Heinemeier Hansson, deliberate practice, disruptive innovation, Elon Musk, Fellow of the Royal Society, Filter Bubble, Google X / Alphabet X, hive mind, index card, index fund, Isaac Newton, job satisfaction, Khan Academy, Kickstarter, lateral thinking, Law of Accelerating Returns, Lean Startup, Mahatma Gandhi, meta-analysis, pattern recognition, Peter Thiel, popular electronics, Ray Kurzweil, Richard Florida, Ronald Reagan, Ruby on Rails, Saturday Night Live, self-driving car, side project, Silicon Valley, Steve Jobs, superconnector

So DHH built a layer on top of Ruby to automate all the repetitive tasks and arbitrary decisions he didn’t want taking up his time. (It didn’t really matter what he named his databases.) His new layer on top of programming’s pavement became a set of railroad tracks that made creating a Ruby application faster. He called it Ruby on Rails. Rails helped DHH build his project—which 37signals named Basecamp—faster than he could have otherwise. But he wasn’t prepared for what happened next. When he shared Ruby on Rails on the Internet, programmers fell in love with it. Rails was easier than regular programming, but just as powerful, so amateurs downloaded it by the thousands. Veteran coders murmured about “real programming,” but many made the switch because Rails allowed them to build their projects faster.

If you’re really hungry, the books in this list will keep you going for a while: “A Reading List for the Self-Taught Computer Scientist,” Reddit, http://www.reddit.com/r/books/comments/ch0wt/a_reading_list_for_the_selftaught_computer/ (accessed February 16, 2014). 85 He called it Ruby on Rails: For more information on Ruby on Rails, see http://rubyonrails.org/. 85 a couple of guys at a podcasting startup: For a thorough and dramatic history of Twitter, see Nick Bilton, Hatching Twitter: A True Story of Money, Power, Friendship, and Betrayal (Portfolio, 2013). 86 “standing on the shoulders of giants”: The common contemporary quotation comes from a line in one of Sir Isaac Newton’s letters to Robert Hooke: “If I have seen further, it is by standing on ye shoulders of Giants,” Newton, letter to Hooke, February 5, 1676, http://www.isaacnewton.org.uk/essays/Giants.

The mentality behind Rails caught on. People started building add-ons, so that others wouldn’t have to reinvent the process of coding common things like website sign-up forms or search tools. They called these “gems” and shared them around. Each contribution saved the next programmer work. Suddenly, people were using Ruby on Rails to solve all sorts of problems they hadn’t previously tackled with programming. A toilet company in Minnesota revamped its accounting system with it. A couple in New Jersey built a social network for yarn enthusiasts. Rails was so friendly that more people became programmers. In 2006 a couple of guys at a podcasting startup had an idea for a side project.


The Data Journalism Handbook by Jonathan Gray, Lucy Chambers, Liliana Bounegru

Amazon Web Services, barriers to entry, bioinformatics, business intelligence, carbon footprint, citizen journalism, correlation does not imply causation, crowdsourcing, David Heinemeier Hansson, eurozone crisis, Firefox, Florence Nightingale: pie chart, game design, Google Earth, Hans Rosling, information asymmetry, Internet Archive, John Snow's cholera map, Julian Assange, linked data, moral hazard, MVC pattern, New Journalism, openstreetmap, Ronald Reagan, Ruby on Rails, Silicon Valley, social graph, SPARQL, text mining, web application, WikiLeaks

— Cynthia O’Murchu, Financial Times The ability to write and deploy complex software as quickly as a reporter can write a story is a pretty new thing. It used to take a lot longer. Things changed thanks to the development of two free/open source rapid development frameworks: Django and Ruby on Rails, both of which were first released in the mid-2000s. Django, which is built on top of the Python programming language, was developed by Adrian Holovaty and a team working in a newsroom—the Lawrence Journal-World in Lawrence, Kansas. Ruby on Rails was developed in Chicago by by David Heinemeier Hansson and 37Signals, a web application company. Though the two frameworks take different approaches to the “MVC pattern,” they’re both excellent and make it possible to build even very complex web applications very quickly.

The project really required our combined skills: deep domain knowledge, an understanding of data best practices, design and coding skills, and so on. More importantly it required an ability to find the story in the data. It also took editing, not only for the story that went with it, but for the news app itself. For the data cleaning and analysis we used mostly Excel and cleaning scripts, as well as MS Access. The news app was written in Ruby on Rails and uses JavaScript pretty extensively. In addition to an overview story, our coverage included an interactive news application, which let readers understand and find examples within this large national dataset that related to them. Using our news app, a reader could find their local school—say, for example, Central High School in Newark, N.J.

A programmer skilled in Web scraping, parsing and normalizing data, and extracting data from PDFs into Excel spreadsheets. A statistician for conducting the data analysis and the different calculations. A designer for producing the interactive data visualizations. What Tools Did We Use? We used VBasic for applications, Excel Macros, Tableau Public, and the Junar Open Data Platform, as well as Ruby on Rails, the Google charts API, and Mysql for the Subsidies Explorer. The project had a great impact. We’ve had tens of thousands of views and the investigation was featured on the front page of La Nación’s print edition. The success of this first data journalism project helped us internally to make the case for establishing a data operation that would cover investigative reporting and provide service to the public.


pages: 224 words: 48,804

The Productive Programmer by Neal Ford

anti-pattern, business process, c2.com, continuous integration, database schema, domain-specific language, don't repeat yourself, Firefox, general-purpose programming language, knowledge worker, Larry Wall, Ruby on Rails, side project, type inference, web application, William of Occam

This is a great feature for developers, who typically set up certain desktops for specific purposes (development, documentation, debugging, etc.). * Download at 48 http://virtuedesktops.info/. CHAPTER 3: FOCUS FIGURE 3-4. Managing desktops with Virtual Desktop Manager One of my recent projects was a Ruby on Rails gig where we were pair-programming on Mac Minis (the little smaller-than-a-breadbox machines that you buy without a monitor or keyboard). They make surprisingly good development machines, especially with two keyboards, mice, and monitors. What made them great environments, though, were the virtual desktops.

Yet, for the source code to function correctly, it must rely on a certain version of the database schema and data. There are a couple of ways to solve this problem, one framework is specific and the other was designed to work across frameworks and languages. NOTE Always keep code and schemas in sync. Rake migrations One of the many cool things about the Ruby on Rails web development framework is the idea of migrations. A migration is a Ruby source file that handles versioning your database schemas, helping keep them in sync with your source code. Presumably, you’ll make database changes (both in schema and test data) at the same time you make code changes.

Building analysis tools for dynamic languages is more difficult because you don’t have the characteristics of the type system to lean upon. Most of the efforts in the dynamic language world center around cyclomatic complexity (which is universal in virtually every block-based language) and code coverage. For example, in the Ruby world, rcov is a commonly used code coverage tool. In fact, Ruby on Rails comes with rcov preconfigured (you can see an rcov report in Figure 15-1). For cyclomatic complexity, you can use the open source Saikuro.† † Download at 116 http://saikuro.rubyforge.org/. CHAPTER 7: STATIC ANALYSIS Because of the lack of “traditional” static analysis tools, Ruby developers have gotten clever.


pages: 1,136 words: 73,489

Working in Public: The Making and Maintenance of Open Source Software by Nadia Eghbal

Amazon Web Services, barriers to entry, Benevolent Dictator For Life (BDFL), bitcoin, Clayton Christensen, cloud computing, commoditize, continuous integration, crowdsourcing, cryptocurrency, David Heinemeier Hansson, death of newspapers, Debian, disruptive innovation, en.wikipedia.org, Ethereum, Firefox, Guido van Rossum, Hacker Ethic, Induced demand, informal economy, Jane Jacobs, Jean Tirole, Kevin Kelly, Kickstarter, Kubernetes, Mark Zuckerberg, Menlo Park, Network effects, node package manager, Norbert Wiener, pirate software, pull request, RFC: Request For Comment, Richard Stallman, Ronald Coase, Ruby on Rails, side project, Silicon Valley, Snapchat, social graph, software as a service, Steve Jobs, Steve Wozniak, Steven Levy, Stewart Brand, The Death and Life of Great American Cities, The Nature of the Firm, Tragedy of the Commons, transaction costs, two-sided market, urban planning, web application, wikimedia commons, Yochai Benkler, Zimmermann PGP

., https://opensource.guide/metrics/. 182 Eghbal, “Methodologies for Measuring Project Health.” 04 183 Kevin Kelly, “Immortal Technologies,” The Technium, February 9, 2006, https://kk.org/thetechnium/immortal-techno/. 184 Nathan Ensmenger, “When Good Software Goes Bad: The Surprising Durability of an Ephemeral Technology,” Indiana University, September 11, 2014, http://homes.sice.indiana.edu/nensmeng/files/ensmenger-mice.pdf. 185 Fergus Henderson, “Software Engineering at Google,” ArXiv, February 19, 2019, https://arxiv.org/pdf/1702.01715.pdf. 186 Alex Handy, “Ruby on Rails 3.0 Goes Modular,” SD Times, February 12, 2010, https://sdtimes.com/ruby-on-rails/ruby-on-rails-3-0-goes-modular. 187 Yehuda Katz, “Rails and Merb Merge,” Katz Got Your Tongue, December 23, 2008, https://yehudakatz.com/2008/12/23/rails-and-merb-merge/. 188 Byrne Hobart, “The Case for Subsidizing, or Banning, COBOL Classes,” Medium, March 29, 2019, https://medium.com/@byrnehobart/you-cant-reduce-all-economic-decisions-to-a-series-of-financial-bets-but-it-s-a-good-way-to-d40e88e89e17. 189 Chris Zacharias, “A Conspiracy To Kill IE6,” Chris Zacharias (blog), May 1, 2019, http://blog.chriszacharias.com/a-conspiracy-to-kill-ie6. 190 Jacob Friedmann, “SmooshGate: The Ongoing Struggle between Progress and Stability in JavaScript,” Medium, March 10, 2018, https://medium.com/@jacobdfriedmann/smooshgate-the-ongoing-struggle-between-progress-and-stability-in-javascript-2a971c1162dd. 191 Michael Ficarra (michaelficarra), “Rename Flatten to Smoosh,” Tc39 / Proposal-flatMap Pull Requests, GitHub, March 6, 2018, https://github.com/tc39/proposal-flatMap/pull/56. 192 Neal Stephenson, In the Beginning . . .

It explains the success of prominent open source projects built by big, decentralized communities, like the web application framework Ruby on Rails. Commons-based peer production also explains why some developers hold the view that money and open source don’t mix. If production runs on intrinsic motivation, money is an extrinsic motivator that is thought to interfere with an already well-coordinated system. Although the commons might not be as profitable as the firm, it’s also more resilient, because the currency of its transactions is the desire to participate, rather than money. David Heinemeier Hansson, who created Ruby on Rails, is a vocal advocate for a commons-based approach to open source production: External, expected rewards diminish the intrinsic motivation of the fundraising open-source contributor.


Terraform: Up and Running: Writing Infrastructure as Code by Yevgeniy Brikman

Amazon Web Services, cloud computing, DevOps, en.wikipedia.org, full stack developer, functional programming, general-purpose programming language, microservices, Ruby on Rails

The goal is to deploy the sim‐ plest web architecture possible: a single web server that can respond to HTTP requests, as shown in Figure 2-6. Deploy a single web server | 53 Figure 2-6. Start with a simple architecture: a single web server running in AWS that responds to HTTP requests In a real-world use case, you’d probably build the web server using a web framework like Ruby on Rails or Django, but to keep this example simple, let’s run a dirt-simple web server that always returns the text “Hello, World”:7 #!/bin/bash echo "Hello, World" > index.html nohup busybox httpd -f -p 8080 & This is a bash script that writes the text “Hello, World” into index.html and runs a tool called busybox (which is installed by default on Ubuntu) to fire up a web server on port 8080 to serve that file.

File layout | 83 • global: A place to put resources that are used across all environments, such as user management (e.g. S3, IAM). Within each environment, there are separate folders for each “component.” The com‐ ponents differ for every project, but the typical ones are: • vpc: The network topology for this environment. • services: The apps or microservices to run in this environment, such as a Ruby on Rails frontend or a Scala backend. Each app could even live in its own folder to isolate it from all the other apps. • data-storage: The data stores to run in this environment, such as MySQL or Redis. Each data store could even live in its own folder to isolate it from all other data stores. Within each component, there are the actual Terraform templates, which are organ‐ ized according to the following naming conventions: • vars.tf: Input variables. • outputs.tf: Output variables. • main.tf: The actual resources. • .terragrunt: Locking and remote state configuration for Terragrunt.

If you deploy this cluster using terragrunt apply, wait for the Instances to register in the ELB, and open the ELB URL in a web browser, you’ll see something similar to Figure 3-6. 94 | Chapter 3: How to manage Terraform state Figure 3-6. The web server cluster can programmatically access the database address and port Yay, your web server cluster can now programmatically access the database address and port via Terraform! If you were using a real web framework (e.g. Ruby on Rails), you could set the address and port as environment variables or write them to a config file so they could be used by your database library (e.g. ActiveRecord) to talk to the database. Conclusion The reason you need to put so much thought into isolation, locking, and state is that infrastructure as code (IAC) has different trade-offs than normal coding.


pages: 408 words: 63,990

Build Awesome Command-Line Applications in Ruby: Control Your Computer, Simplify Your Life by David B. Copeland

Chris Wanstrath, database schema, en.wikipedia.org, full stack developer, Ruby on Rails, web application

'gem help install')​ ​ gem server present a web page at​ ​ http://localhost:8808/​ ​ with info about installed gems​ ​ Further information:​ ​ http://rubygems.rubyforge.org​ This is just a small part of the very complete documentation available, and it’s all there, right from the command line. It’s clear that a lot of thought was put into making this tool polished; this was no one-off, hacky script. Much like the design philosophy of Ruby on Rails, there was clear care given to the user experience of the programmer. These tools aren’t one-off scripts someone pieced together; they are made for “real” work. What this told me was that the command line is far from the anachronism that Java tool vendors would have us believe; it’s here to stay.

Developers should be able to install all the gems they need with one command and get up and running as easily as possible. This will save you time in documenting the setup and make it easier for developers to contribute. We can specify these dependencies in the gemspec and manage their installation with Bundler.[42] Bundler was created to help manage the dependencies for Ruby on Rails projects, but it’s a general-purpose tool and will work great for us. It’s also what most seasoned Rubyists will expect. First, let’s specify our development dependencies. Although rake and RDoc are typically installed with Ruby, their inclusion is not guaranteed, and users might not necessarily have the versions of these tools that we require.

It might even be impossible. That’s why seasoned developers—including command-line application developers—write tests. Tests are the best tool we have to make sure our applications perform flawlessly, and the Ruby community is especially friendly to testing, thanks to the culture and tools established by Ruby on Rails. Command-line applications often interact with various systems and environments, which produces a unique set of challenges for testing. If you’ve done any web application development, you are probably accustomed to having different “tiers,” such as a development tier and a testing tier. These tiers are complete systems, often using many servers to provide an environment for isolated testing.


pages: 313 words: 75,583

Ansible for DevOps: Server and Configuration Management for Humans by Jeff Geerling

AGPL, Amazon Web Services, cloud computing, continuous integration, database schema, Debian, defense in depth, DevOps, fault tolerance, Firefox, full text search, Google Chrome, inventory management, loose coupling, microservices, Minecraft, MITM: man-in-the-middle, Ruby on Rails, web application

Ansible Examples Other resources Chapter 1 - Getting Started with Ansible Ansible and Infrastructure Management On snowflakes and shell scripts Configuration management Installing Ansible Creating a basic inventory file Running your first Ad-Hoc Ansible command Summary Chapter 2 - Local Infrastructure Development: Ansible and Vagrant Prototyping and testing with local virtual machines Your first local server: Setting up Vagrant Using Ansible with Vagrant Your first Ansible playbook Summary Chapter 3 - Ad-Hoc Commands Conducting an orchestra Build infrastructure with Vagrant for testing Inventory file for multiple servers Your first ad-hoc commands Discover Ansible’s parallel nature Learning about your environment Make changes using Ansible modules Configure groups of servers, or individual servers Configure the Application servers Configure the Database servers Make changes to just one server Manage users and groups Manage files and directories Get information about a file Copy a file to the servers Retrieve a file from the servers Create directories and files Delete directories and files Run operations in the background Update servers asynchronously, monitoring progress Fire-and-forget tasks Check log files Manage cron jobs Deploy a version-controlled application Ansible’s SSH connection history Paramiko OpenSSH (default) Accelerated Mode Faster OpenSSH in Ansible 1.5+ Summary Chapter 4 - Ansible Playbooks Power plays Running Playbooks with ansible-playbook Limiting playbooks to particular hosts and groups Setting user and sudo options with ansible-playbook Other options for ansible-playbook Real-world playbook: CentOS Node.js app server Add extra repositories Deploy a Node.js app Launch a Node.js app Node.js app server summary Real-world playbook: Ubuntu LAMP server with Drupal Include a variables file, and discover pre_tasks and handlers Basic LAMP server setup Configure Apache Configure PHP with lineinfile Configure MySQL Install Composer and Drush Install Drupal with Git and Drush Drupal LAMP server summary Real-world playbook: Ubuntu Apache Tomcat server with Solr Include a variables file, and discover pre_tasks and handlers Install Apache Tomcat 7 Install Apache Solr Apache Solr server summary Summary Chapter 5 - Ansible Playbooks - Beyond the Basics Handlers Environment variables Per-play environment variables Variables Playbook Variables Inventory variables Registered Variables Accessing Variables Host and Group variables group_vars and host_vars Magic variables with host and group variables and information Facts (Variables derived from system information) Local Facts (Facts.d) Variable Precedence If/then/when - Conditionals Jinja2 Expressions, Python built-ins, and Logic register when changed_when and failed_when ignore_errors Delegation, Local Actions, and Pauses Pausing playbook execution with wait_for Running an entire playbook locally Prompts Tags Summary Chapter 6 - Playbook Organization - Roles and Includes Includes Handler includes Playbook includes Complete includes example Roles Role scaffolding Building your first role More flexibility with role vars and defaults Other role parts: handlers, files, and templates Handlers Files and Templates Organizing more complex and cross-platform roles Ansible Galaxy Getting roles from Galaxy Using role requirements files to manage dependencies A LAMP server in six lines of YAML A Solr server in six lines of YAML Helpful Galaxy commands Contributing to Ansible Galaxy Summary Chapter 7 - Inventories A real-world web application server inventory Non-prod environments, separate inventory files Inventory variables host_vars group_vars Ephemeral infrastructure: Dynamic inventory Dynamic inventory with DigitalOcean DigitalOcean account prerequisites Connecting to your DigitalOcean account Creating a droplet with Ansible DigitalOcean dynamic inventory with digital_ocean.py Dynamic inventory with AWS Inventory on-the-fly: add_host and group_by Multiple inventory sources - mixing static and dynamic inventories Creating custom dynamic inventories Summary Chapter 8 - Ansible Cookbooks Highly-Available Infrastructure with Ansible Directory Structure Individual Server Playbooks Main Playbook for Configuring All Servers Getting the required roles Vagrantfile for Local Infrastructure via VirtualBox Provisioner Configuration: DigitalOcean Provisioner Configuration: Amazon Web Services (EC2) Summary ELK Logging with Ansible ELK Playbook Forwarding Logs from Other Servers Summary GlusterFS Distributed File System Configuration with Ansible Configuring Gluster - Basic Overview Configuring Gluster with Ansible Summary Mac Provisioning with Ansible and Homebrew Running Ansible playbooks locally Automating Homebrew package and app management Configuring Mac OS X through dotfiles Summary Docker-based Infrastructure with Ansible A brief introduction to Docker containers Using Ansible to build and manage containers Building a Flask app with Ansible and Docker Data storage container Flask container MySQL container Ship it! Summary Chapter 9 - Deployments with Ansible Deployment strategies Simple single-server deployments Provisioning a simple Ruby on Rails server Deploying a Rails app to the server Provisioning and Deploying the Rails App Deploying application updates Zero-downtime multi-server deployments Ensuring zero downtime with serial and integration tests Deploying to app servers behind a load balancer Capistrano-style and blue-green deployments Additional Deployment Scenarios Summary Chapter 10 - Server Security and Ansible A brief history of SSH and remote access Telnet rlogin, rsh and rcp SSH The evolution of SSH and the future of remote access Use secure and encrypted communication Disable root login and use sudo Remove unused software, open only required ports Use the principle of least privilege User account configuration File permissions Update the OS and installed software Automating updates Automating updates for RedHat-based systems Automating updates for Debian-based systems Use a properly-configured firewall Configuring a firewall with ufw on Debian or Ubuntu Configuring a firewall with firewalld on RedHat, Fedora, or CentOS Make sure log files are populated and rotated Monitor logins and block suspect IP addresses Use SELinux (Security-Enhanced Linux) or AppArmor Summary and further reading Chapter 11 - Automating Your Automation - Ansible Tower and CI/CD Ansible Tower Getting and Installing Ansible Tower Using Ansible Tower Other Tower Features of Note Tower Alternatives Jenkins CI Unit, Integration, and Functional Testing Debugging and Asserting Checking syntax and performing dry runs Automated testing on GitHub using Travis CI Setting up a role for testing Testing the role’s syntax Role success - first run Role idempotence Role success - final result Some notes about Travis CI Real-world examples Automated testing with test-runner Functional testing using serverspec Summary Appendix A - Using Ansible on Windows workstations Prerequisites Set up an Ubuntu Linux Virtual Machine Log into the Virtual Machine Install Ansible Summary Appendix B - Ansible Best Practices and Conventions Playbook Organization Write comments and use name liberally Include related variables and tasks Use Roles to bundle logical groupings of configuration YAML Conventions and Best Practices YAML for Ansible tasks Three ways to format Ansible tasks Shorthand/one-line (key=value) Structured map/multi-line (key:value) Folded scalars/multi-line (>) Using | to format multiline variables Using ansible-playbook Use Ansible Tower Specify --forks for playbooks running on > 5 servers Use Ansible’s Configuration file Summary Appendix C - Jinja2 and Ansible Summary Changelog Version 0.94 (2015-05-16) Version 0.92 (2015-04-09) Version 0.90 (2015-03-16) Version 0.89 (2015-02-26) Version 0.88 (2015-02-13) Version 0.87 (2015-02-01) Version 0.84 (2015-01-27) Version 0.81 (2015-01-11) Version 0.75 (2014-12-23) Version 0.73 (2014-12-09) Version 0.71 (2014-11-27) Version 0.70 (2014-11-16) Version 0.64 (2014-10-24) Version 0.62 (2014-10-07) Version 0.60 (2014-09-30) Version 0.58 (2014-08-01) Version 0.56 (2014-07-20) Version 0.54 (2014-07-02) Version 0.53 (2014-06-28) Version 0.52 (2014-06-14) Version 0.50 (2014-05-05) Version 0.49 (2014-04-24) Version 0.47 (2014-04-13) Version 0.44 (2014-04-04) Version 0.42 (2014-03-25) Version 0.38 (2014-03-11) Version 0.35 (2014-02-25) Version 0.33 (2014-02-20) Preface Growing up, I had access to a world that not many kids ever get to enter.

Simple single-server deployments The vast majority of small applications and websites are easily run on a single virtual machine or dedicated server. Using Ansible to provision and manage the configuration on the server is a no-brainer. Even though you only have to manage one server, it’s better to encapsulate all the setup so you don’t end up with a snowflake server. In this instance, we are managing a very simple Ruby on Rails site that allows users to perform CRUD operations on articles (very simple database records with a title and body). The code repository for this app is located on GitHub at https://github.com/geerlingguy/demo-rails-app. To make testing simple, we’ll begin by creating a new Vagrant VM using the following Vagrantfile: 1 # -*- mode: ruby -*- 2 # vi: set ft=ruby : 3 4 Vagrant.configure(2) do |config| 5 config.vm.box = "geerlingguy/ubuntu1404" 6 7 config.vm.provider "virtualbox" do |v| 8 v.name = "rails-demo" 9 v.memory = 1024 10 v.cpus = 2 11 end 12 13 config.vm.hostname = "rails-demo" 14 config.vm.network :private_network, ip: "192.168.33.7" 15 16 config.vm.provision "ansible" do |ansible| 17 ansible.playbook = "playbooks/main.yml" 18 ansible.sudo = true 19 end 20 21 end In this case, we have a very simple VM that will be accessible at the IP address 192.168.33.7, and when provisioned, it will run the Ansible playbook defined in playbooks/main.yml.

To make testing simple, we’ll begin by creating a new Vagrant VM using the following Vagrantfile: 1 # -*- mode: ruby -*- 2 # vi: set ft=ruby : 3 4 Vagrant.configure(2) do |config| 5 config.vm.box = "geerlingguy/ubuntu1404" 6 7 config.vm.provider "virtualbox" do |v| 8 v.name = "rails-demo" 9 v.memory = 1024 10 v.cpus = 2 11 end 12 13 config.vm.hostname = "rails-demo" 14 config.vm.network :private_network, ip: "192.168.33.7" 15 16 config.vm.provision "ansible" do |ansible| 17 ansible.playbook = "playbooks/main.yml" 18 ansible.sudo = true 19 end 20 21 end In this case, we have a very simple VM that will be accessible at the IP address 192.168.33.7, and when provisioned, it will run the Ansible playbook defined in playbooks/main.yml. Provisioning a simple Ruby on Rails server To prepare for our application deployment, we need to do the following: Install git (our application is version controlled in a git repository). Install Node.js (asset compilation requires it’s Javascript runtime). Install Ruby (our application requires version 2.2.0 or later). Install Passenger with Nginx (we need a fast web server to run our rails application).


pages: 470 words: 109,589

Apache Solr 3 Enterprise Search Server by Unknown

bioinformatics, continuous integration, database schema, en.wikipedia.org, fault tolerance, Firefox, full text search, functional programming, information retrieval, natural language processing, performance metric, platform as a service, Ruby on Rails, web application

For a list of all the companies offering hosted Solr search please visit http://wiki.apache.org/solr/SolrHostingProviders. Ruby on Rails integrations There has been a lot of churn in the Ruby on Rails world for adding Solr support, with a number of competing libraries attempting to support Solr in the most Rails-native way. Rails brought to the forefront the idea of Convention over Configuration, the principle that sane defaults and simple rules should suffice in most situations versus complex configuration expressed in long XML files. The various libraries for integrating Solr in Ruby on Rails applications establish conventions in how they interact with Solr.

In a hurry? There are many approaches to get data into Solr and you don't need to be well versed in all of them. The section on commit and optimize is important for everyone because it is universal. If you plan to use a Solr integration framework that handles indexing data, such as Sunspot for Ruby on Rails, then you can follow the documentation for that framework and skip this chapter for now. Otherwise, the DataImportHandler will likely satisfy your needs. Communicating with Solr There are quite a few options in communicating with Solr to import data. In this section we'll look at a few choices to be made, and then follow up with interaction examples.

solr-php-client is a richer example of integrating Solr results into a PHP based application. Solritas, a web search UI using template files in the /cores/mbtypes/conf/velocity directory. jquery_autocomplete is an example of using the jQuery Autocomplete library to provide search suggestions based on Solr searches. myfaves is a Ruby on Rails application using the Ruby Solr client library Sunspot to search for music artists. nutch is a simple example of the Nutch web crawler integrated with Solr. crawler is a more complex example of doing web crawling and indexing into Solr using the SolrJ Java client and Heritrix crawler. Solritas, the integrated search UI The contrib module velocity, nicknamed Solritas, is a simple template engine that lets you build user interfaces directly in Solr using Apache Velocity, a very simple macro language to generate the HTML.


pages: 102 words: 27,769

Rework by Jason Fried, David Heinemeier Hansson

call centre, Clayton Christensen, Dean Kamen, Exxon Valdez, fault tolerance, James Dyson, Jeff Bezos, Ralph Nader, risk tolerance, Ruby on Rails, Steve Jobs, Tony Hsieh, Y Combinator

Highrise, our contact manager and simple CRM (customer relationship management) tool, is used by tens of thousands of small businesses to keep track of leads, deals, and more than 10 million contacts. More than 500,000 people have signed up for Backpack, our intranet and knowledge-sharing tool. And people have sent more than 100 million messages using Campfire, our real-time business chat tool. We also invented and open-sourced a computer-programming framework called Ruby on Rails that powers much of the Web 2.0 world. Some people consider us an Internet company, but that makes us cringe. Internet companies are known for hiring compulsively, spending wildly, and failing spectacularly. That’s not us. We’re small (sixteen people as this book goes to press), frugal, and profitable.

Ta-da List www.tadalist.com Ta-da List makes it easy to create and share your to-do’s. Writeboard www.writeboard.com Writeboard is a collaborative writing tool. Getting Real gettingreal.37signals.com This book by 37signals will help you discover the smarter, faster, easier way to build a successful Web-based application. Ruby on Rails www.rubyonrails.org An open-source Web framework created by 37signals. Acknowledgments Very special thanks go to Matthew Linderman. Matt was 37signals’ first employee in 1999—and he’s still with the company today. This book wouldn’t have come together without Matt. In addition to writing original content, he helped merge the distinctly different writing styles of the coauthors into a focused, cohesive book.


pages: 323 words: 65,306

Programming in CoffeeScript by Mark Bates

don't repeat yourself, en.wikipedia.org, MVC pattern, node package manager, Ruby on Rails, single page application, web application

Nowadays, Mark spends his days cheating on Ruby with his new mistress, CoffeeScript. Always wanting to share his wisdom, or more correctly just wanting to hear the sound of his own voice, Mark has spoken at several high-profile conferences, including RubyConf, RailsConf, and jQueryConf. Mark has also taught classes on Ruby and Ruby on Rails. In 2009 Mark’s first (surprisingly not his last!) book, Distributed Programming with Ruby, was published by Addison-Wesley. Mark lives just outside of Boston with his wife, Rachel, and their two sons, Dylan and Leo. Mark can be found on the web at: http://www.markbates.com, http://twitter.com/markbates, and http://github.com/markbates.

To do this we are going to use the connect-assets NPM module by Trevor Burnham.3 This will provide a couple of hooks by which we automatically find our CSS and CoffeeScript files and add them into the HTML. In the case of CoffeeScript, it automatically converts them to JavaScript for us, saving us a step of compiling the files manually ourselves. * * * Tip For those of you familiar with the asset-pipeline in Ruby on Rails, the connect-assets module attempts to mimic that in an Express application. * * * For connect-assets to find our assets, we need to place them in a folder called assets at the root of our application. So let’s do that now, and while we’re at it, let’s place a little bit of CSS in there to help pretty up the HTML we’re going to write.

Now, the more observant of you might have noticed that we are actually using POST to send this data to the server when, in fact, our API requires that it be sent via PUT. There are a couple of reasons for this. The first is that historically not all browsers support HTTP verbs beyond GET and POST; the same holds true of jQuery. To get around this limitation, a lot of frameworks, such as Express and Ruby on Rails, have taken to looking for a specially named parameter, _method. The frameworks will then consider the request to be of whatever type is set on that parameter. In our case we are sending along the value of PUT for the _method parameter, so Express will consider this not as a POST request, but rather a PUT request.


pages: 98 words: 30,109

Remote: Office Not Required by Jason Fried, David Heinemeier Hansson

Broken windows theory, David Heinemeier Hansson, en.wikipedia.org, equal pay for equal work, Google Hangouts, job satisfaction, Kevin Kelly, remote working, Richard Florida, Ruby on Rails, Silicon Valley, Skype, The future is already here

From the operating system Linux to the MySQL database to the PHP language to Ruby on Rails, open source has spanked such behemoth commercial competitors as Microsoft, Oracle, and others. Compared to your average business or consumer software package, all these open source examples are endlessly more complex and involve far more people in their production. If people can manage to build world-class operating systems, databases, programming languages, web frameworks, and many other forms of software while working remotely, you’d probably be wise to look more closely at how it’s done. If you look, for example, at Ruby on Rails, the web framework we created at 37signals, we’ve managed to evolve the code base for over a decade and have kept adding features and improving code quality.


pages: 628 words: 107,927

Node.js in Action by Mike Cantelon, Marc Harter, Tj Holowaychuk, Nathan Rajlich

Amazon Web Services, Chris Wanstrath, create, read, update, delete, Debian, en.wikipedia.org, Firefox, Google Chrome, MITM: man-in-the-middle, MVC pattern, node package manager, p-value, pull request, Ruby on Rails, web application, WebSocket

6.5.2. Building a routing middleware component Routing is a crucial web application concept. Put simply, it’s a method of mapping incoming request URLs to functions that employ business logic. Routing comes in many shapes and sizes, ranging from highly abstract controllers used by frameworks like Ruby on Rails to simpler, less abstract, routing based on HTTP methods and paths, such as the routing provided by frameworks like Express and Ruby’s Sinatra. A simple router in your application might look something like listing 6.9. In this example, HTTP verbs and paths are represented by a simple object and some callback functions; some paths contain tokens prefixed with a colon (:) that represent path segments that accept user input, matching paths like /user/12.

The Express web framework (http://expressjs.com) is built on top of Connect, providing tools and structure that make writing web applications easier, faster, and more fun. Express offers a unified view system that lets you use nearly any template engine you want, plus simple utilities for responding with various data formats, transferring files, routing URLs, and more. In comparison to application frameworks such as Django or Ruby on Rails, Express is extremely small. The philosophy behind Express is that applications vary greatly in their requirements and implementations, and a lightweight framework allows you to craft exactly what you need and nothing more. Both Express and the entire Node community are focused on smaller, more modular bits of functionality rather than monolithic frameworks.

Jade could be mapped with the following call: var cons = require('consolidate'); app.engine('jade', cons.jade); For details and a list of supported template engines, visit the consolidate.js project repository at https://github.com/visionmedia/consolidate.js. C.1.3. Express extensions and frameworks You might be wondering what options are available for developers who use more structured frameworks, like Ruby on Rails. Express has several options for those situations. The Express community has developed several higher-level frameworks built on top of Express to provide directory structure, as well as high-level, opinionated features, such as Rails-style controllers. In addition to these frameworks, Express also sports a variety of plugins to extend its functionality.


pages: 936 words: 85,745

Programming Ruby 1.9: The Pragmatic Programmer's Guide by Dave Thomas, Chad Fowler, Andy Hunt

book scanning, David Heinemeier Hansson, Debian, domain-specific language, Jacquard loom, Kickstarter, p-value, revision control, Ruby on Rails, slashdot, sorting algorithm, web application

If you’re planning to use Ruby 1.8 and not Ruby 1.9, then I’d recommend putting this book down and instead looking at the second edition of Programming Ruby.1 But, before you run off, I’d also like you to stop for a second and consider switching to Ruby 1.9. As a language, and as a programming environment, it really is a step up from previous versions of Ruby. It runs faster, it is more expressive, and it enables even more programming paradigms. Most frameworks (including Ruby on Rails) are now compatible with Ruby 1.9. And some Ruby implementations (such as MacRuby—a version of Ruby that is integrated into the Objective C runtime on the Mac) run only 1.9 code. Why Ruby? When Andy and I wrote the first edition, we had to explain the background and appeal of Ruby. Among other things, we wrote, “When we discovered Ruby, we realized that we’d found what we’d been looking for.

A large number of methods have been added to the built-in classes and modules, and the size of the standard library (those libraries included in the Ruby distribution) has grown tremendously. The community now has a standard documentation system (RDoc), and RubyGems has become the system of choice for packaging Ruby code for distribution. We have a best-of-breed web application framework, Ruby on Rails, with others waiting in the wings. Ruby Versions This version of the PickAxe documents Ruby 1.9.2 Exactly what version of Ruby did I use to write this book? Let’s ask Ruby: % ruby -v ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-darwin9.6.0] This illustrates an important point. Most of the code samples you see in this book are actually executed each time I format the book.

Because class Person defines a to_s method, that method is called. If it hadn’t defined a to_s method, then Ruby looks for (and finds) to_s in Person’s parent class, Object. It is common to use subclassing to add application-specific behavior to a standard library or framework class. If you’ve used Ruby on Rails,2 you’ll have subclassed ActionController when writing your own controller classes. Your controllers get all the behavior of the base controller and add their own specific handlers to individual user actions. If you’ve used the FXRuby GUI framework,3 you’ll have used subclassing to add your own applicationspecific behavior to Fox’s standard GUI widgets.


Deep Work: Rules for Focused Success in a Distracted World by Cal Newport

8-hour work day, Albert Einstein, barriers to entry, Bluma Zeigarnik, business climate, Cal Newport, Capital in the Twenty-First Century by Thomas Piketty, Clayton Christensen, David Brooks, David Heinemeier Hansson, deliberate practice, disruptive innovation, Donald Knuth, Donald Trump, Downton Abbey, en.wikipedia.org, Erik Brynjolfsson, experimental subject, follow your passion, Frank Gehry, informal economy, information retrieval, Internet Archive, Jaron Lanier, knowledge worker, Mark Zuckerberg, Marshall McLuhan, Merlin Mann, Nate Silver, new economy, Nicholas Carr, popular electronics, remote working, Richard Feynman, Ruby on Rails, Silicon Valley, Silicon Valley startup, Snapchat, statistical model, the medium is the message, Watson beat the top human players on Jeopardy!, web application, winner-take-all economy, zero-sum game

If you want to become a superstar, mastering the relevant skills is necessary, but not sufficient. You must then transform that latent potential into tangible results that people value. Many developers, for example, can program computers well, but David Hansson, our example superstar from earlier, leveraged this ability to produce Ruby on Rails, the project that made his reputation. Ruby on Rails required Hansson to push his current skills to their limit and produce unambiguously valuable and concrete results. This ability to produce also applies to those looking to master intelligent machines. It wasn’t enough for Nate Silver to learn how to manipulate large data sets and run statistical analyses; he needed to then show that he could use this skill to tease information from these machines that a large audience cared about.

Less than a year later, ESPN and ABC News lured Silver away from the Times (which tried to retain him by promising a staff of up to a dozen writers) in a major deal that would give Silver’s operation a role in everything from sports to weather to network news segments to, improbably enough, Academy Awards telecasts. Though there’s debate about the methodological rigor of Silver’s hand-tuned models, there are few who deny that in 2012 this thirty-five-year-old data whiz was a winner in our economy. Another winner is David Heinemeier Hansson, a computer programming star who created the Ruby on Rails website development framework, which currently provides the foundation for some of the Web’s most popular destinations, including Twitter and Hulu. Hansson is a partner in the influential development firm Basecamp (called 37signals until 2014). Hansson doesn’t talk publicly about the magnitude of his profit share from Basecamp or his other revenue sources, but we can assume they’re lucrative given that Hansson splits his time between Chicago, Malibu, and Marbella, Spain, where he dabbles in high-performance race-car driving.


pages: 420 words: 79,867

Developing Backbone.js Applications by Addy Osmani

Airbnb, anti-pattern, create, read, update, delete, don't repeat yourself, Firefox, full text search, Google Chrome, Khan Academy, Kickstarter, loose coupling, MVC pattern, node package manager, pull request, Ruby on Rails, side project, single page application, web application

This fact creates a completely different context when compared to one of the operating systems on which many of the original MVC ideas were developed. The MVC implementation has to conform to the web context. An example of a server-side web application framework which tries to apply MVC to the web context is Ruby On Rails. At its core are the three MVC components we would expect - the Model, View and Controller architecture. In Rails: Models represent the data in an application and are typically used to manage rules for interacting with a specific database table. You generally have one table corresponding to one model with much of your application’s business logic living within these models.

Controllers In our Todo application, a Controller would be responsible for handling changes the user made in the edit View for a particular Todo, updating a specific Todo Model when a user has finished editing. It’s with Controllers that most JavaScript MVC frameworks depart from the traditional interpretation of the MVC pattern. The reasons for this vary, but in my opinion, JavaScript framework authors likely initially looked at server-side interpretations of MVC (such as Ruby on Rails), realized that the approach didn’t translate 1:1 on the client-side, and so re-interpreted the C in MVC to solve their state management problem. This was a clever approach, but it can make it hard for developers coming to MVC for the first time to understand both the classical MVC pattern and the “proper” role of Controllers in other JavaScript frameworks.

Since all persistence is handled by the Backbone.sync function, an alternative persistence layer can be used by simply overriding Backbone.sync with a function that has the same signature: Backbone.sync = function(method, model, options) { }; The methodMap below is used by the standard sync implementation to map the method parameter to an HTTP operation and illustrates the type of action required by each method argument: var methodMap = { 'create': 'POST', 'update': 'PUT', 'patch': 'PATCH', 'delete': 'DELETE', 'read': 'GET' }; If we wanted to replace the standard sync implementation with one that simply logged the calls to sync, we could do this: var id_counter = 1; Backbone.sync = function(method, model) { console.log("I've been passed " + method + " with " + JSON.stringify(model)); if(method === 'create'){ model.set('id', id_counter++); } }; Note that we assign a unique id to any created models. The Backbone.sync method is intended to be overridden to support other persistence backends. The built-in method is tailored to a certain breed of RESTful JSON APIs - Backbone was originally extracted from a Ruby on Rails application, which uses HTTP methods like PUT in the same way. The sync method is called with three parameters: method: One of create, update, patch, delete, or read model: The Backbone model object options: May include success and error methods Implementing a new sync method can use the following pattern: Backbone.sync = function(method, model, options) { function success(result) { // Handle successful results from MyAPI if (options.success) { options.success(result); } } function error(result) { // Handle error results from MyAPI if (options.error) { options.error(result); } } options || (options = {}); switch (method) { case 'create': return MyAPI.create(model, success, error); case 'update': return MyAPI.update(model, success, error); case 'patch': return MyAPI.patch(model, success, error); case 'delete': return MyAPI.destroy(model, success, error); case 'read': if (model.cid) { return MyAPI.find(model, success, error); } else { return MyAPI.findAll(model, success, error); } } }; This pattern delegates API calls to a new object (MyAPI), which could be a Backbone-style class that supports events.


pages: 252 words: 78,780

Lab Rats: How Silicon Valley Made Work Miserable for the Rest of Us by Dan Lyons

Airbnb, Amazon Web Services, Apple II, augmented reality, autonomous vehicles, basic income, bitcoin, blockchain, business process, call centre, Clayton Christensen, clean water, collective bargaining, corporate governance, corporate social responsibility, creative destruction, cryptocurrency, David Heinemeier Hansson, Donald Trump, Elon Musk, Ethereum, ethereum blockchain, full employment, future of work, gig economy, Gordon Gekko, greed is good, hiring and firing, housing crisis, impact investing, income inequality, informal economy, Jeff Bezos, job automation, job satisfaction, job-hopping, John Gruber, Joseph Schumpeter, Kevin Kelly, knowledge worker, Lean Startup, loose coupling, Lyft, Marc Andreessen, Mark Zuckerberg, McMansion, Menlo Park, Milgram experiment, minimum viable product, Mitch Kapor, move fast and break things, move fast and break things, new economy, Panopticon Jeremy Bentham, Paul Graham, paypal mafia, Peter Thiel, Plutocrats, plutocrats, precariat, prosperity theology / prosperity gospel / gospel of success, RAND corporation, remote working, RFID, ride hailing / ride sharing, Ronald Reagan, Rubik’s Cube, Ruby on Rails, Sam Altman, San Francisco homelessness, Sand Hill Road, self-driving car, shareholder value, Silicon Valley, Silicon Valley startup, six sigma, Skype, Social Responsibility of Business Is to Increase Its Profits, software is eating the world, Stanford prison experiment, stem cell, Steve Jobs, Steve Wozniak, Stewart Brand, super pumped, TaskRabbit, telemarketer, Tesla Model S, Thomas Davenport, Tony Hsieh, Toyota Production System, traveling salesman, Travis Kalanick, tulip mania, Uber and Lyft, Uber for X, uber lyft, universal basic income, web application, WeWork, Whole Earth Catalog, Y Combinator, young professional

To a woman who wrote that she works hard but also takes vacations and believes she can still build a successful company, Rabois sniped: “Keep telling yourself that fiction. It probably makes you feel good.” When someone pointed out that Hansson created Ruby on Rails, a software program that is used by more than a million websites, Rabois scoffed that Ruby on Rails actually isn’t very good technology. Fried and Hansson probably did not win over any workaholics, but they did accomplish something else. By drawing out Rabois, they exposed the kind of preposterous, egomaniacal assholes who hold power and influence in Silicon Valley, and offered a warning to young entrepreneurs: take money from a venture capitalist, and you’ll end up working for some smug, sarcastic, know-it-all prick like this guy, who will constantly tell you that you’re not working hard enough while he spends his days getting into arguments on Twitter.

As Hansson was writing Basecamp, he also created a web framework—a tool that helps coders save time when they are writing web applications, by providing standard ways to do certain tasks that most web apps have in common, like fetching information from a database. Hansson called his framework Ruby on Rails and made it available to anyone, free of charge, as an open-source product. The code was wildly successful and today runs on more than a million websites. It also made Hansson something of a legend among web developers. Fried created Basecamp originally for his own use but then recognized there could be a market for the product.


pages: 1,302 words: 289,469

The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws by Dafydd Stuttard, Marcus Pinto

call centre, cloud computing, commoditize, database schema, defense in depth, easy for humans, difficult for computers, Firefox, information retrieval, lateral thinking, MITM: man-in-the-middle, MVC pattern, optical character recognition, Ruby on Rails, Turing test, web application

See Chapter 19 for details on common defects arising in PHP applications. Ruby on Rails Rails 1.0 was released in 2005, with strong emphasis on Model-View-Controller architecture. A key strength of Rails is the breakneck speed with which fully fledged data-driven applications can be created. If a developer follows the Rails coding style and naming conventions. Rails can autogenerate a model for database content, controller actions for modifying it, and default views for the application user. As with any highly functional new technology, several vulnerabilities have been found in Ruby on Rails, including the ability to bypass a "safe mode," analogous to that found in PHP.

A few examples have been added of generic techniques for bypassing input validation defenses. Chapter 3, "Web Application Technologies," has been expanded with some new sections describing technologies that are either new or that were described more briefly elsewhere within the first edition. The topics added include REST, Ruby on Rails, SQL, XML, web services, CSS, VBScript, the document object model, Ajax, JSON, the same-origin policy, and HTML5. Chapter 4, "Mapping the Application," has received various minor updates to reflect developments in techniques for mapping content and functionality. Chapter 5, "Bypassing Client-Side Controls," has been updated more extensively.

Directory Names It is common to encounter subdirectory names that indicate the presence of an associated technology. For example: ■ servlet — Java servlets ■ pis — Oracle Application Server PL/SQL gateway ■ cfdocs or cfide — Cold Fusion ■ silverstream — The SilverStream web server ■ WebObjects or {function} .woa — Apple WebObjects ■ rails — Ruby on Rails Session Tokens Many web servers and web application platforms generate session tokens by default with names that provide information about the technology in use. For example: ■ jsessionid — The Java Platform ■ aspsessionid — Microsoft IIS server ■ asp . NET_sessionid — Microsoft ASP.NET ■ cfid/cftoken —ColdFusion ■ PHPSESSID — PHP Third-Party Code Components Many web applications incorporate third-party code components to implement common functionality such as shopping carts, login mechanisms, and message boards.


Pulling Strings With Puppet: Configuration Management Made Easy by James Turnbull

Debian, en.wikipedia.org, Kickstarter, revision control, Ruby on Rails, source of truth, SpamAssassin

Listed here are some of these examples: • Reductive Labs Puppet module page, which includes modules for xen, git, and ntp, among others: http://reductivelabs.com/trac/puppet/wiki/PuppetModules • Reductive Labs wiki page, which details module organization: http://reductivelabs.com/trac/puppet/wiki/ModuleOrganisation • Puppet Show—a Ruby on Rails tool for managing Puppet including nodes and configuration: http://reductivelabs.com/trac/puppet/wiki/PuppetShow • A CPAN-like way of distributing Puppet modules: http://reductivelabs.com/trac/puppet/wiki/PuppetRecipeManager • A collection of Puppet recipes for configuring a variety of resources, applications, and daemons: http://reductivelabs.com/trac/puppet/tags/puppet%2Crecipe Turnbull Using Puppet 120 • A Git repository containing a collection of modules: http://modules.reductivelabs.com/ • David Schmitt’s collection of Puppet configuration and modules: http://git.black.co.at/?

Puppet masters and clients using earlier versions do not correctly sign certificates. The Puppet master daemon, puppetmasterd, normally uses the WEBrick web server internally to connect clients, but Puppet also supports using Mongrel as an alternative web server. Mongrel is commonly used as a web server by Ruby on Rails applications, and you can learn more about it at http://mongrel.rubyforge.org/. With Mongrel integrated with Puppet, multiple puppetmasterd daemons can be run, each on a different port. A web server, in our case Apache, is placed in front of these instances, and the mod_proxy and mod_proxy_balancer modules are used to load balance connections to these instances.


Django Book by Matt Behrens

Benevolent Dictator For Life (BDFL), create, read, update, delete, database schema, distributed revision control, don't repeat yourself, en.wikipedia.org, Firefox, full text search, loose coupling, MITM: man-in-the-middle, MVC pattern, revision control, Ruby on Rails, school choice, slashdot, web application

You can think of it as the bridge between models and templates. If you’re familiar with other MVC Web-development frameworks, such as Ruby on Rails, you may consider Django views to be the “controllers” and Django templates to be the “views.” This is an unfortunate confusion brought about by differing interpretations of MVC. In Django’s interpretation of MVC, the “view” describes the data that gets presented to the user; it’s not necessarily just how the data looks, but which data is presented. In contrast, Ruby on Rails and similar frameworks suggest that the controller’s job includes deciding which data gets presented to the user, whereas the view is strictly how the data looks, not which data is presented.

Worse, PHP does little to protect programmers from security vulnerabilities, and thus many PHP developers found themselves learning about security only once it was too late. These and similar frustrations led directly to the development of the current crop of “third-generation” Web development frameworks. These frameworks – Django and Ruby on Rails appear to be the most popular these days – recognize that the Web’s importance has escalated of late. With this new explosion of Web development comes yet another increase in ambition; Web developers are expected to do more and more every day. Django was invented to meet these new ambitions. Django lets you build deep, dynamic, interesting sites in an extremely short time.

Anything that reads files without proper escaping is vulnerable to this problem. Views that write files are just as vulnerable, but the consequences are doubly dire. Another permutation of this problem lies in code that dynamically loads modules based on the URL or other request information. A well-publicized example came from the world of Ruby on Rails. Prior to mid-2006, Rails used URLs like http://example.com/person/poke/1 directly to load modules and call methods. The result was that a carefully constructed URL could automatically load arbitrary code, including a database reset script! The Solution If your code ever needs to read or write files based on user input, you need to sanitize the requested path very carefully to ensure that an attacker isn’t able to escape from the base directory you’re restricting access to.


Service Design Patterns: Fundamental Design Solutions for SOAP/WSDL and RESTful Web Services by Robert Daigneau

Amazon Web Services, business intelligence, business process, continuous integration, create, read, update, delete, en.wikipedia.org, fault tolerance, loose coupling, MITM: man-in-the-middle, MVC pattern, pull request, RFC: Request For Comment, Ruby on Rails, software as a service, web application

Therefore, an HTTP POST issued to http://acmeCorp.org might be interpreted as a request to retrieve customer data if the SOAPAction header contains GetCustomer. Once the handler has evaluated the request, it selects and instantiates a Command [GoF] object, which encapsulates the web service logic. Several web-oriented frameworks (e.g., Apache Struts, Ruby on Rails, ASP.NET MVC) strive to insulate the developer from the internal complexities of Front Controllers. The Rails framework, for example, lets developers maintain the rules that correlate requests with subcontrollers (i.e., commands) in a separate routing file. In a similar fashion, the ASP.NET MVC framework enables developers to define these rules in configuration files.

For more information, see Fielding in the Works Cited in the Bibliography. Reverse Proxy—Receives Internet traffic addressed to internal web servers. Provides Network Address Translation (NAT) which converts public addresses to private internal addresses, load balancing, caching capabilities, and data compression. Robustness Principle—See Postel’s Law Ruby on Rails—An open source web development framework http://rubyonrails.org/ SAX—See Simple API for XML (SAX) Scalability—The capacity of a “logical system” comprising one or more servers to maintain acceptable response times and throughput as load increases. Schematron—A rules-based meta-language which makes it possible to check an XML document’s structure and its conformance to complex business rules. www.schematron.com/ Secure Sockets Layer (SSL)—See Transport Layer Security (TLS) 289 290 G LOSSARY Serialize—The act of converting data from a local in-memory data structure (e.g., class) to a stream of bytes that can be transmitted over the network.

Request/Response pattern, 57 RPC API Asynchronous Response Handler pattern, 22 asynchrony, 22 binary coding, 23 blocking, avoiding, 22 considerations, 20–23 creating, code example, 23–26 creating flat APIs, 20–21 effects on web service evolution, 264 example, 58 increasing flexibility, 234–236 interacting with. See Service Connector Location Transparency, 22 location transparency, 22 overview, 13, 18–20 proxies, 21–22 Request/Acknowledge pattern, 22 service contracts, 20 service descriptors, 21–22. See also WSDL (Web Services Description Language) Service Proxies, 22 RPC controller, examples, 93 Ruby on Rails, 85, 289 S Safe operations, Resource API, 42–43 SAX (Simple API for XML), 290. See also JAXP (Java API for XML Processing) Scalability definition, 289 issues, 56 objects, effects of, 5–6 Schema. See XML Schema Schematron, 289 SCM (Software Configuration Management), 291. See also Governance Secure Sockets Layer (SSL), 289.


pages: 372 words: 89,876

The Connected Company by Dave Gray, Thomas Vander Wal

A Pattern Language, Albert Einstein, Amazon Mechanical Turk, Amazon Web Services, Atul Gawande, Berlin Wall, business cycle, business process, call centre, Clayton Christensen, commoditize, complexity theory, creative destruction, David Heinemeier Hansson, disruptive innovation, en.wikipedia.org, factory automation, Googley, index card, industrial cluster, interchangeable parts, inventory management, Jeff Bezos, John Markoff, Kevin Kelly, loose coupling, low cost airline, market design, minimum viable product, more computing power than Apollo, profit maximization, Richard Florida, Ruby on Rails, self-driving car, shareholder value, side project, Silicon Valley, skunkworks, software as a service, South of Market, San Francisco, Steve Jobs, Steven Levy, Stewart Brand, The Wealth of Nations by Adam Smith, Tony Hsieh, Toyota Production System, Vanguard fund, web application, WikiLeaks, Zipcar

As he worked, Heinemeier Hansson developed a series of libraries and frameworks that made it easier for him to do the work. At some point about halfway through the project, he realized that the tools he had created constituted a work environment that made it much easier to program web applications. So he decided to share it with other developers. He open-sourced the framework and called it Ruby on Rails. Rails was an immediate hit with programmers, because it allowed them to do more work more elegantly and efficiently than they could in any other language. The developer community that rallied around Rails helped build out and improve the framework, adding new functionality, fixing bugs, adding patches, and so on.

With this kind of approach, a company can avoid many of the conflicting constraints that come with growth. Complexity can be managed locally and doesn’t have to be controlled by the organization. Notes for Chapter Fifteen US MILITARY INTERNET PROTOCOL Next-Generation Internet Protocol to Enable Net-Centric Operations, US Department of Defense, news release no. 413–03, June 13, 2003. RUBY ON RAILS David Heinemeier Hansson, “Good Programming is Like Good Writing,” BigThink, August 3, 2010, http://bigthink.com/ideas/21598. PROPRIETARY TECHNOLOGIES Miriah Meyer, “Gamer cracks code, finds jewel,” The Chicago Tribune, August 28, 2006. Chapter 16. How connected companies learn You can’t make a recipe for something as complicated as surgery.

Cellular, Common Threads, Launch a Pilot Pod to Shift to a New Business Model Requisite Variety Law, The Law of Requisite Variety Research in Motion (RIM), Cascading Effects Can be Initiated by Senior Executives response principle, Three Principles of Network Power return on assets, Return on Assets is Dwindling revisionist history, Level One: How Entrepreneurs Learn RIM (Research in Motion), Cascading Effects Can be Initiated by Senior Executives risk-avoidant cultures, Risk-Avoidant Cultures risks in connected companies, Pod Failure, Platform Failure–Failure of Purpose, Over-Controlling the Platform, Over-Controlling the Platform, Over-Controlling the Platform–Customers First, Failure of Purpose, Customers First platform failure, Platform Failure–Failure of Purpose, Over-Controlling the Platform, Over-Controlling the Platform, Failure of Purpose pod failure, Pod Failure purpose failure, Over-Controlling the Platform–Customers First, Customers First Ritz-Carlton Hotel, Purpose Sets the Context for Organizations to Learn, Net Promoter at Apple, Absorbing Variety, Diversity, Too Much Autonomy Apple recruitment from, Net Promoter at Apple, Diversity customer issue resolution, Absorbing Variety employee autonomy, Too Much Autonomy purpose for, Purpose Sets the Context for Organizations to Learn Rosedale, Philip, Rely on Peer-to-Peer Reinforcement Whenever Possible Rothschild, Nathan, An Age of Abundance Ruby language, You don’t have to be Big Ruby on Rails framework, You don’t have to be Big–Well-Designed Platforms Absorb Variety, You don’t have to be Big, Well-Designed Platforms Absorb Variety Rudisin, Jerry, Self-Organizing Teams at Rational Software rules, The Problem with Procedures–The Front Line is not a Production Line, The Front Line is not a Production Line, Standards cultural standards and, Standards problem with, The Problem with Procedures–The Front Line is not a Production Line, The Front Line is not a Production Line S S&P 500, Fewer and Fewer Companies are Surviving in the Long Term Salah, George, Density Sarasvathy, Saras, Level One: How Entrepreneurs Learn SAS Airlines, Moments of Truth Sasser, W.


pages: 468 words: 233,091

Founders at Work: Stories of Startups' Early Days by Jessica Livingston

8-hour work day, affirmative action, AltaVista, Apple II, Bear Stearns, Brewster Kahle, business cycle, business process, Byte Shop, Danny Hillis, David Heinemeier Hansson, don't be evil, eat what you kill, fear of failure, financial independence, Firefox, full text search, game design, Googley, HyperCard, illegal immigration, Internet Archive, Jeff Bezos, Joi Ito, Justin.tv, Larry Wall, Maui Hawaii, Menlo Park, Mitch Kapor, nuclear winter, Paul Buchheit, Paul Graham, Peter Thiel, Richard Feynman, Robert Metcalfe, Ruby on Rails, Sam Altman, Sand Hill Road, side project, Silicon Valley, slashdot, social software, software patent, South of Market, San Francisco, Startup school, stealth mode startup, Steve Ballmer, Steve Jobs, Steve Wozniak, web application, Y Combinator

VisiCorp), 73, 76, 89–91 personnel decisions, 66–67 Phillips, 182, 199 Phoenix, 395 Phone Boy, 64 photographs, 259 Photoshop, 290 PLATO Notes, 103 podcasting company, 111 PointCast, 155 Polese, Kim, 155–156 pornography, 136 PostScript, 281, 287, 289 Powazek, Derek, 117 PR campaign, 21 President’s Award, 159 product development, 15, 154–155, 176 product distribution, 175 product naming, 8 Professor Jackson, 80 program guide, 196, 198 programmable gate array, 175 programmers, 166, 324–325 project management, 310 Pryor, Michael, 345 public relations, 137–138 Pyra Labs (Blogger.com), 111–126 Q QuickTime, 174 R Rackspace, 380 Rails (Ruby on Rails). See Ruby on Rails Rakuten, 215 Ramsay, Mike, 191–203 Red Hat, 341 Reddit, 450 Reese, John, 77 Regulation FD, 435–436, 442 reliability issues, 24 Replay, 200–201, 202 Request for Proposal bid, 300 Research In Motion, 141–151 Richman, Herb, 444 Rocketmail, 25, 135 Roizen, Heidi, 307 Rosen, Ben, 84, 96 Rosenfeld, Eric, 90 Ross, Blake, 395–404 Ruby on Rails, 309, 313–314, 359 Ryan, George, 301 Ryner, Brian, 396 S Sachs, Jonathan, 89, 95, 109 Saltzer, Jerry, 80 Sarbanes-Oxley, 442 464 Index scalability, 12 Schachter, Joshua, 223–232 Schwartz Communications, 215 Scott, Mike, 46 Scull, John, 287 search button deal, 69–71 search engine, 67 search feature, 162 search technology, 63 Season Pass, 200 second-system syndrome, 338 security, 1 security company, 10 Sega video games, 174 Senate, 270 Sequoia, 300 Server Fund Drive, 119 servers, 21 Sevin Rosen, 96 sex category, 136 Seybold Conference, 292 SGI, 193 Shanny, Nick, 361 Shareholder Direct service, 442–443 shareholder lawsuits, 159 Shareholder.com, 427–446 Shear, Emmett, 449 Shellen, Jason, 122 Shugart floppy controller, 53–54 Shugart floppy disk drive, 53 Signal vs.

Joel Spolsky 359 For example, Ruby on Rails is a framework that you can use with the Ruby programming language to access databases. It is the first framework that you can use from any programming language for accessing databases to realize that it’s OK to require that the names of the columns in the database have a specific format. Everybody else thought, “You need to be allowed to use whatever name you want in the database and whatever name you want in the application.” Therefore you have to create all this code to map between the name in the database and the name in the application. Ruby on Rails finally said, “It’s no big deal if you’re just forced to use the same name in both places.

C H A P T E 23 R David Heinemeier Hansson Partner, 37signals David Heinemeier Hansson helped transform 37signals from a consulting company to a product company in early 2004. He wrote the company’s first product, Basecamp, an online project management tool. He also wrote companion products Backpack, Ta-da List, and Campfire. In July 2004, he released the layer of software that underlies these applications as an open source web development framework. Ruby on Rails has since become one of the most popular tools among web developers and won Heinemeier Hansson the Hacker of the Year award at OSCON in 2005. In July 2006 (after this interview), 37signals president Jason Fried announced on the company’s blog that Jeff Bezos had made a minority private equity investment.


pages: 169 words: 56,250

Startup Communities: Building an Entrepreneurial Ecosystem in Your City by Brad Feld

barriers to entry, cleantech, cloud computing, corporate social responsibility, G4S, Grace Hopper, job satisfaction, Kickstarter, Lean Startup, minimum viable product, Network effects, paypal mafia, Peter Thiel, place-making, pre–internet, Richard Florida, Ruby on Rails, Silicon Valley, Silicon Valley startup, smart cities, software as a service, Steve Jobs, text mining, Y Combinator, zero-sum game, Zipcar

This worked, and we learned an important lesson: a small amount of structure could be used to help guide the event’s flow without disrupting the culture. We tried fancy Twitter walls and other services, but in the end, the simplicity of our hacked solution worked and is still used today. Toward the end of year two, the community was growing at a steady pace and was asking for more specific events like a Ruby on Rails Meetup or a JavaScript Meetup. Instead of trying to create and manage an events business, we added an announcement section to the beginning of the event. Anyone could promote any tech-related event. We were also getting regular requests for nametags. Surprisingly, the event still felt intimate, even though it was 40 percent new and averaged 250 people per month.

We had 11 other events each day for the full week. Each event was packed, and many of the public venues we had booked shut down their other business activities to accommodate the events. We had blogger, programmer, designer, marketer, and event organizer Meetups. The yoga session was a hit. The Ruby on Rails Meetup resulted in four job offers in one afternoon. The largest event was 1,350 people at Ignite Boulder; the smallest was 11 people who did the Easy Bike Tour of Boulder. Of the 55 events, 40 had a focus on technology. The week flew by and we watched the community double as hundreds of new people, many living in Boulder, discovered an amazing set of people to spend time with.


pages: 514 words: 111,012

The Art of Monitoring by James Turnbull

Amazon Web Services, anti-pattern, cloud computing, continuous integration, correlation does not imply causation, Debian, DevOps, domain-specific language, failed state, functional programming, Kickstarter, Kubernetes, microservices, performance metric, pull request, Ruby on Rails, software as a service, source of truth, web application, WebSocket

This helps catch regressions and performance issues, and helps ensure monitoring is a first-class requirement when building applications and services. Example is primarily a Linux environment, running recent versions of Red Hat Enterprise Linux and Ubuntu, and operates a number of customer-facing internal and external applications. Almost all of its applications are web based, with the stack including: Java and JVM-based applications Ruby on Rails LAMP-stack applications Their database stack is a mix of MySQL/MariaDB, PostgreSQL, and Redis. Much of the environment is managed with configuration management tools, and each environment has a Nagios server for monitoring. Lastly, Example is beginning to explore the use of tools like Docker, and SaaS products like GitHub, PagerDuty, and others.

The timing method creates a timer; in this case we're saying the app.timer took 30 seconds. The last method, gauge, creates a gauge with a value of 100. We're not going to manually create a client every time we want to log any metrics, so let's set up some utility code to do this for us. In the Ruby on Rails world, we'd generally add an initializer to create our StatsD client when Rails starts. Let's do that now by creating a statsd.rb file in the config/initializers directory containing: STATSD = Statsd.new("localhost", 8125) STATSD.namespace = "aom-rails.#{Rails.env}" Next we define a constant called STATSD by calling a new instance of Statsd.

Let's look at what our JSON encoded event might look like: [ { "time": 1449454008, "priority": "error", "event": "user_creation_failed", "user": "james@example.com" } ] Instead of a string we've got a JSON array containing a structured log entry: a time, a priority, an event identifier, and some rich data from that event: the user that our application failed to create. We're logging a series of objects that are now easily consumed by a machine rather than a string we need to parse. Adding structured logging to our sample application Let's see how we might extend our sample application with some structured log events. Remember, it's a Ruby on Rails application that allows us to create and delete users and not much else. We're going to add two structured logging libraries—the first called Lograge, and the second called Logstash-logger—to our application. The Lograge library formats Rails-style request logs into a structured format, by default JSON, but can also generate Logstash-structured events.


pages: 247 words: 71,698

Avogadro Corp by William Hertling

Any sufficiently advanced technology is indistinguishable from magic, cloud computing, crowdsourcing, Hacker Ethic, hive mind, invisible hand, natural language processing, Netflix Prize, private military company, Ray Kurzweil, recommendation engine, Richard Stallman, Ruby on Rails, standardized shipping container, technological singularity, Turing test, web application, WikiLeaks

When his first Avogadro search for ‘email to web service’ within seconds turned up an existing design posted by some IBM guys, his excitement grew. After reading through the design, he realized he could implement it all in a couple of hours. His other work forgotten, Pete started in on the project. He used the existing Internal Tools servers, and created a new Ruby on Rails web application that converted web pages to emails, and emails into web page form submissions. It was easier than expected, and by lunch he had a simple prototype running. He tried the prototype on the Internal Tools Request tool, and discovered some bugs. Puzzling over the details in his head, he mindlessly rushed down the hall to the coffee station for a refill

On the other hand, it worked, by golly! He tested it against the Internal Tools web service, the Procurement web application, and have a dozen other web sites. It seemed to work for everything. He drummed his thumbs excitedly against the desk. Using off the shelf libraries that other people had written for Ruby on Rails, his favorite programming environment, he had been able to glue together the relevant pieces quickly. The ability to do in hours what would have once taken weeks in an old language like Java was the magic of modern programming environments like Ruby. It was easy to understand why startups built products in a weekend now and were launched on shoestring budgets when they had such powerful tools.


pages: 77 words: 14,578

Manage Partitions With GParted (How-To) by Unknown

Debian, en.wikipedia.org, Ruby on Rails

About the Reviewers Andrew Bradford has been a developer on the Cross Linux From Scratch (http://cross-lfs.org) project and an active participant in the BeagleBoard.org community (http://beagleboard.org) since 2010. He's been using Linux since RedHat 7 and since then, except for 1 year with a Mac, has been running Linux on the desktop quite successfully. His current interests involve Debian, embedded Linux, flash memories, and Ruby on Rails. I'd like to thank my wife, Meghan, and my daughter, Erin. They're both amazing and they inspire me every day. Peter Wu is a Software Science student at the University of Technology at Eindhoven (The Netherlands). He is an enthusiastic supporter of open source software, helping other users and contributing code.


pages: 62 words: 15,274

Sass for Web Designers by Dan Cederholm

c2.com, don't repeat yourself, Firefox, Kickstarter, Ruby on Rails, web application

Compass.app Compass.app (http://bkaprt.com/sass/9/) is a little menu bar app for Mac, Windows, and Linux that watches and compiles Sass files for you (Fig 2.7). FIG 2.7: Compass.app’s menubar options. In addition to desktop apps, some development frameworks have built-in support for Sass. Ruby on Rails, for instance, will auto-compile Sass files into CSS files when the stylesheets are requested. Again, no command line required. So, you can see there are several options should you find yourself allergic to the command-line, though I hope it’s clear that the commands for running Sass are few and uncomplicated.


pages: 56 words: 16,788

The New Kingmakers by Stephen O'Grady

AltaVista, Amazon Web Services, barriers to entry, cloud computing, correlation does not imply causation, crowdsourcing, David Heinemeier Hansson, DevOps, Jeff Bezos, Khan Academy, Kickstarter, Marc Andreessen, Mark Zuckerberg, Netflix Prize, Paul Graham, Ruby on Rails, Silicon Valley, Skype, software as a service, software is eating the world, Steve Ballmer, Steve Jobs, The future is already here, Tim Cook: Apple, Y Combinator

Worse, there were more than a hundred standards, each with its own set of documentation—and the documentation for each standard often exceeded a hundred pages. What made sense from the perspective of a business made no sense whatsoever to the legions of developers actually building the Web. Among developers, the web services efforts were often treated as a punchline. David Heinemeier Hansson, the creator of the popular Ruby on Rails web framework, referred to them as the “WS-Deathstar.” Beyond the inherent difficulties of pushing dozens of highly specialized, business-oriented specifications onto an unwilling developer population, the WS-* set of standards had to contend with an alternative called Representational State Transfer (REST).


pages: 319 words: 72,969

Nginx HTTP Server Second Edition by Clement Nedelcu

Debian, fault tolerance, Firefox, Google Chrome, Ruby on Rails, web application

The first one is obviously PHP. According to a January 2013 Netcraft survey, nearly 40 percent of the World Wide Web is powered by PHP. The second one is Python. The reason being the way it's installed and configured to work with Nginx. The mechanism effortlessly applies to other applications such as Perl or Ruby on Rails. This chapter covers the following topics: • Discovering the CGI and FastCGI technologies • The Nginx FastCGI and similar modules • Load balancing via the Upstream module • Setting up PHP and PHP-FPM • Setting up Python and Django • Configuring Nginx to work with PHP and Python Introduction to FastCGI Before we begin, you should know that (as the name suggests) FastCGI is actually a variation of CGI.

• Since FastCGI is a socket-based protocol, it can be implemented on any platform with any programming language. Throughout this chapter, we will be setting up PHP and Python via FastCGI. Additionally, you will find the mechanism to be relatively similar in the case of other applications, such as Perl or Ruby on Rails. Designing a FastCGI-powered architecture is actually not as complex as one might imagine. As long as you have the web server and the processing application running, the only difficulty that remains is to establish the connection between both parties. The first step in that perspective is to configure the way Nginx will communicate with the FastCGI application.


pages: 243 words: 74,452

Do Over: Rescue Monday, Reinvent Your Work, and Never Get Stuck by Jon Acuff

Albert Einstein, fear of failure, Johann Wolfgang von Goethe, Kickstarter, Mark Zuckerberg, Ruby on Rails, Skype, Steve Jobs, Tony Hsieh

New jobs always require learning new skills, even if that just means learning a different way a new company prefers to do something. They file their time sheets in a way you’re not familiar with. Guess what, you have to learn a new skill. New skills always lead to better resumes. Having Ruby on Rails on your resume if you’re a developer will help you stand out in jobs that require Ruby on Rails skills. If you get them, that portion of the job market just opened up to you. If, on the other hand, you are confused why some lady named Ruby has a dangerous fascination with railroads, there’s a chance you won’t get that job. New skills lead to better opportunities at the job you already have.


pages: 258 words: 74,942

Company of One: Why Staying Small Is the Next Big Thing for Business by Paul Jarvis

Airbnb, big-box store, Cal Newport, call centre, corporate social responsibility, David Heinemeier Hansson, effective altruism, Elon Musk, en.wikipedia.org, endowment effect, follow your passion, gender pay gap, glass ceiling, Inbox Zero, independent contractor, index fund, job automation, Kickstarter, Lyft, Mark Zuckerberg, Naomi Klein, passive investing, Paul Graham, pets.com, remote work: asynchronous communication, remote working, Results Only Work Environment, ride hailing / ride sharing, Ruby on Rails, side project, Silicon Valley, Skype, Snapchat, software as a service, Steve Jobs, supply-chain management, Tim Cook: Apple, too big to fail, uber lyft, web application, Y Combinator, Y2K

That kind of hustling, putting work above everything else, is inconsistent with the mind-set of running a company of one—with working better instead of working more. A company of one who disagrees with this idea that workaholism is required to succeed in tech and big business alike is David Heinemeier Hansson, a Danish programmer who created the popular Ruby on Rails web framework and is a partner at the software development firm Basecamp. Hansson despises this paradigm of working more as the only way to be successful. He believes that the pressure to work more doesn’t just get passed down from leadership; rather, it’s amplified as it moves outward through a company.

See referrals RedBox, 177 referrals, 109, 149–50, 152–56 relationships, 180–97 authenticity in, 182 building a customer base, 202–7 colleagues and contractors, 194–97 customer retention, 190–94 one-to-many, 126, 129–31 social capital, 187–90 See also customers resilience, 10–14, 53, 57–58, 86 respect, 193 responsiveness. See adaptability Ressler, Cali, 15 retention, customer, 61–63, 106, 185, 190–94 retention, of employees, 6–7 ReWork (Fried), 90 Riley, Pat, 33 risk, 37–40, 221 ROWEs (Results-Only Work Environments), 15, 18 Rubel, Steve, 96–97 Ruby on Rails, 54–55 runway buffer, 211–12 S SaaS, 110, 131 salary, 125, 165, 208, 210–11 SalesForce Pardot, 115 Sandberg, Sheryl, 47 Satornino, Cinthia, 189 savings, 211–12 scalability, 124–34 collaboration, 132–34 communication, 126, 129–31 examples of, 124–27 product development, 127–29 Scarcity (Mullainathan and Shafir), 91 Schachter, Joshua, 20 scheduling, 89–92 scope of influence, 70–73 Sears, 177 self-awareness, 57 selling, 180 Semco Partners, 27 Semler, Ricardo, 27, 219 servant leadership, 48 service, 48, 105–7, 108–11 Seventh Generation, 78–79 Shafir, Eldar, 91 Sharp, 46 Sheldon, Jeff, 115–16, 154, 163–64, 169–70 “shinise”, 216–17 Shopify, 124, 158 Silver, Spencer, 8 simplicity, 20–23, 167–69 single-tasking, 88 Sivers, Derek, 100, 172–73 skills, 51–54 autonomy, 14–18 generalists, 17–18, 200–202 growth, 33 passion, 82, 86 success, 83 slow fashion, 128 small, as goal, 24–44 better vs. bigger, 24–30 career advancement, 70–73 envy, 42–44 growth drawbacks, 30–34 meaningful growth, 60–64 minimum viable profit, 164–66 profit vs. growth, 68–70 risk and, 37–40 vs. traditional approach, 34–40 upper bounds, 40–42 when starting a business, 64–68, 163–74 SmallBizTrends, on referrals, 109 Snapchat, 95 So Good They Can’t Ignore You (Newport), 82 social capital, 187–90 social media brand reputation, 192 mistakes and, 120 personality, 97–99 relationships, 115–16, 188, 189 scalability, 126 viral content, 159–60 social views on business growth, 4–5, 24–25 on leaders, 45–49 on work, 34–40 Socrates, 42 Sorenson, Olav, 171 Southwest Airlines, 40–42 spamvite, 183, 184 specialization, vs. generalist, 51–54 speed, 18–19 Staples, 181 Starbucks, 31–32 starting a business.


pages: 276 words: 78,094

Design for Hackers: Reverse Engineering Beauty by David Kadavy

Airbnb, complexity theory, en.wikipedia.org, Firefox, Isaac Newton, John Gruber, Paul Graham, Ruby on Rails, semantic web, Silicon Valley, Silicon Valley startup, Steve Jobs, TaskRabbit, web application, wikimedia commons, Y Combinator

Through this process, you can start to hone solutions that really fit your audience. Plenty of user experience resources recommend some very complex personas. I’ll just demonstrate with a very simple persona. You can create a decent persona in a matter of minutes. Name: Mike Occupation: Ruby on Rails web developer/entrepreneur Quote: “I want to use Twitter to have intelligent conversations with intelligent people, and to promote and get feedback for my many web products. Sometimes, when I’m troubleshooting something, I like to ask people on Twitter to see if they have any advice.” Needs: Keep track of conversations; easily scan lots of tweets So, there you have it: Mike is a smart web developer, who is experimenting with different startups.

Unfortunately, though, many designers worked for large corporations where they didn’t get the opportunity to experiment with new techniques, or had conservative clients who were reluctant to try designs that were anything unlike the rectilinear designs that were commonplace at the time. Fortunately for some of these designers, the Web 2.0 revolution was coming. Frameworks such as Ruby on Rails and Django, both released in 2005, were making it easier than ever for developers to create web applications that would bring Internet users the social experiences that they craved. Small teams of young developers flocked to Silicon Valley to start companies and try to secure funding. These teams included designers (myself included) who were eager to try out their new bag of tricks.


Elixir in Action by Saša Jurić

demand response, en.wikipedia.org, fault tolerance, finite state, functional programming, general-purpose programming language, place-making, Ruby on Rails, WebSocket

Table 1.1   Comparison of technologies used in two real-life web servers Technical requirement Server A Server B HTTP server Nginx and Phusion Passenger Erlang Request processing Ruby on Rails Erlang Long-running requests Go Erlang Server-wide state Redis Erlang Persistable data Redis and MongoDB Erlang Background jobs Cron, Bash scripts, and Ruby Erlang Service crash recovery Upstart Erlang About Erlang 7 Server A is powered by various technologies, most of them known and popular in the community. There were specific reasons for using these technologies: each was introduced to resolve a shortcoming of those already present in the system. For example, Ruby on Rails handles concurrent requests in separate OS processes.

Manning Publications Co. 20 Baldwin Road PO Box 761 Shelter Island, NY 11964 ISBN 9781617295027 Printed in the United States of America 1 2 3 4 5 6 7 8 9 10 – SP – 23 Development editor: Review editor: Project manager: Copy editor: Proofreader: Technical proofreader: Typesetter: Cover designer: 22 21 20 19 18 Karen Miller Aleksandar Dragosavljevic Vincent Nordhaus Andy Carrol Melody Dolab Riza Fahmi Happenstance Type-O-Rama Marija Tudor brief contents 1 2 3 4 5 6 7 8 9 10 11 12 13 ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ First steps 1 Building blocks 16 Control flow 63 Data abstractions 102 Concurrency primitives 129 Generic server processes 159 Building a concurrent system 179 Fault-tolerance basics 201 Isolating error effects 224 Beyond GenServer 251 Working with components 277 Building a distributed system 305 Running the system 334 v contents preface xiii acknowledgments xv about this book xvii about the author xxi about the cover illustration 1 First steps 1.1 xxii 1 About Erlang 1 High availability 3 Erlang concurrency 3 Server-side systems 5 The development platform ■ ■ 1.2 About Elixir 8 Code simplification 9 The big picture 13 1.3 ■ Composing functions 12 Disadvantages 13 Speed 2 7 Building blocks 14 ■ Ecosystem 14 16 2.1 The interactive shell 17 2.2 Working with variables 2.3 Organizing your code 20 18 Modules 20 Functions 21 Function arity 25 Function visibility 26 Imports and aliases 27 Module attributes 28 Comments 30 ■ ■ ■ ■ vii viii contents 2.4 Understanding the type system 30 Numbers 30 Atoms 31 Tuples 34 Lists 35 Immutability 38 Maps 41 Binaries and bitstrings 43 Strings 44 First-class functions 46 Other built-in types 49 Higher-level types 50 IO lists ■ ■ ■ ■ ■ ■ ■ ■ ■ 2.5 Operators 55 2.6 Macros 56 2.7 Understanding the runtime 57 Modules and functions in the runtime the runtime 59 3 Control flow 3.1 54 57 Starting ■ 63 Pattern matching 64 The match operator 64 Matching tuples 64 Matching constants 65 Variables in patterns 66 Matching lists 67 Matching maps 68 Matching bitstrings and binaries 69 Compound matches 71 General behavior 72 ■ ■ ■ ■ ■ 3.2 Matching with functions 72 Multiclause functions 73 Multiclause lambdas 78 3.3 ■ Guards 76 Conditionals 79 Branching with multiclause functions 79 Classical branching constructs 81 The with special form 83 ■ ■ 3.4 Loops and iterations 86 Iterating with recursion 87 Tail function calls 88 Higher-order functions 91 Comprehensions 95 Streams ■ ■ 4 Data abstractions 4.1 ■ 102 Abstracting with modules 104 Basic abstraction 104 Composing abstractions 106 Structuring data with maps 107 Abstracting with structs 108 Data transparency 112 ■ ■ ■ 4.2 Working with hierarchical data 114 Generating IDs 115 Updating entries 117 Immutable hierarchical updates 119 Iterative updates 121 Exercise: importing from a file 122 ■ ■ ■ 97 ix contents 4.3 Polymorphism with protocols 124 Protocol basics 124 Implementing a protocol Built-in protocols 126 ■ 5 Concurrency primitives 129 5.1 Concurrency in BEAM 5.2 Working with processes Creating processes 133 5.3 125 130 132 ■ Message passing Stateful server processes 134 139 Server processes 139 Keeping a process state 144 Mutable state 145 Complex states 148 Registered processes 152 ■ ■ ■ 5.4 ■ Runtime considerations 153 A process is sequential 153 Unlimited process mailboxes 155 Shared-nothing concurrency 156 Scheduler inner workings 157 ■ ■ 6 Generic server processes 6.1 159 Building a generic server process 160 Plugging in with modules 160 Implementing the generic code 161 Using the generic abstraction 162 Supporting asynchronous requests 164 Exercise: refactoring the to-do server 166 ■ ■ ■ 6.2 Using GenServer 166 OTP behaviours 167 Plugging into GenServer 168 Handling requests 169 Handling plain messages 170 Other GenServer features 172 Process lifecycle 175 OTP-compliant processes 176 Exercise: GenServer-powered to-do server 177 ■ ■ ■ ■ 7 Building a concurrent system 179 7.1 Working with the mix project 180 7.2 Managing multiple to-do lists 182 Implementing a cache 182 Writing tests Analyzing process dependencies 188 ■ 7.3 Persisting data 185 189 Encoding and persisting 189 Using the database 191 Analyzing the system 194 Addressing the process bottleneck 195 Exercise: pooling and synchronizing 198 ■ ■ 7.4 Reasoning with processes 199 x contents 8 Fault-tolerance basics 8.1 201 Runtime errors 202 Error types 203 8.2 Handling errors ■ Errors in concurrent systems Linking processes 208 8.3 ■ 204 207 Monitors 210 Supervisors 211 Preparing the existing code 213 Starting the supervisor process 214 Child specification 216 Wrapping the supervisor 218 Using a callback module 218 Linking all processes 219 Restart frequency 222 ■ ■ ■ ■ ■ 9 Isolating error effects 9.1 224 Supervision trees 225 Separating loosely dependent parts 225 Rich process discovery 228 Via tuples 230 Registering database workers 232 Supervising database workers 234 Organizing the supervision tree 237 ■ ■ ■ ■ 9.2 Starting processes dynamically 241 Registering to-do servers 241 Dynamic supervision 242 Finding to-do servers 243 Using temporary restart strategy 244 Testing the system 245 ■ ■ ■ ■ 9.3 “Let it crash” 246 Processes that shouldn’t crash 247 Handling expected errors 248 Preserving the state 249 ■ ■ 10 Beyond GenServer 10.1 Tasks 251 252 Awaited tasks 252 10.2 Agents ■ Non-awaited tasks 254 256 Basic use 256 Agents and concurrency 257 to-do server 259 Limitations of agents 260 ■ ■ Agent-powered ■ 10.3 ETS tables 263 Basic operations 265 ETS powered key/value store 268 Other ETS operations 271 Exercise: process registry 274 ■ ■ xi contents 11 Working with components 11.1 OTP applications 277 278 Creating applications with the mix tool 278 The application behavior 280 Starting the application 280 Library applications 281 Creating a to-do application 282 The application folder structure 284 ■ ■ ■ ■ 11.2 Working with dependencies 286 Adding a dependency 286 Visualizing the system 289 11.3 Building a web server ■ Adapting the pool 287 291 Choosing dependencies 291 Starting the server 292 Handling requests 293 Reasoning about the system 296 ■ ■ 11.4 Configuring applications 300 Application environment 300 Varying configuration 301 Config script considerations ■ ■ 12 Building a distributed system 12.1 Distribution primitives 303 305 307 Starting a cluster 307 Communicating between nodes Process discovery 311 Links and monitors 314 Other distribution services 315 ■ ■ 12.2 Building a fault-tolerant cluster 317 Cluster design 318 The distributed to-do cache 318 Implementing a replicated database 323 Testing the system 326 Detecting partitions 327 Highly available systems 329 ■ ■ ■ ■ 12.3 Network considerations 330 Node names 330 Cookies 331 Hidden nodes 331 Firewalls 332 ■ ■ 13 Running the system 334 13.1 Running a system with Elixir tools 335 Using the mix and elixir commands 335 Running scripts 337 Compiling for production 338 ■ ■ 309 xii contents 13.2 OTP releases 339 Building a release with distillery 340 Release contents 343 ■ Using a release 13.3 Analyzing system behavior 346 Debugging 347 Logging 348 system 348 Tracing 350 ■ ■ index 353 ■ Interacting with the 341 preface In 2010, I was given the task of implementing a system to transmit frequent updates to a few thousand connected users in near real time. My company at the time was mostly using Ruby on Rails, but I needed something more suitable for such a highly concurrent challenge. Following the suggestion of my CTO, I looked into Erlang, read some material, made a prototype, and performed a load test. I was impressed with the initial results and moved on to implement the whole thing in Erlang.


pages: 90 words: 17,297

Deploying OpenStack by Ken Pepple

Amazon Web Services, cloud computing, database schema, Infrastructure as a Service, Kickstarter, Ruby on Rails, web application, x509 certificate

The sync subcommand will upgrade the database scheme for new versions of Nova and the version will report the current version. Note Nova uses a database abstraction library called SQL-Alchemy to interact with its database. A complimentary package called sqlalchemy-migrate is used to manage the database schema. Inspired by Ruby on Rails’ migrations feature, it provides a programmatic way to handle database schema changes. For Nova administrators, this only applies when they are upgrading versions. To upgrade scheme versions, use the nova-manage db sync. This should be rarely used unless you are installing from source or upgrading your installation.


pages: 122 words: 19,807

Tmux: Productive Mouse-Free Development by Brian P. Hogan

en.wikipedia.org, Ruby on Rails, Skype, web application

Remove to use default socket​ ​rvm: 1.9.2@rails_project​ ​pre: sudo /etc/rc.d/mysqld start​ ​tabs:​ ​ - editor:​ ​ layout: main-vertical​ ​ panes:​ ​ - vim​ ​ - #empty, will just run plain bash​ ​ - top​ ​ - shell: git pull​ ​ - database: rails db​ ​ - server: rails s​ ​ - logs: tail -f logs/development.log​ ​ - console: rails c​ ​ - capistrano:​ ​ - server: ssh me@myhost​ This is an environment that a Ruby on Rails developer who works with Git might really appreciate. This creates a tmux session with eight windows. The first window is divided into three panes, using the main-vertical layout scheme. The rest of the windows launch various servers and consoles, as you can see in Figure 11, ​A Rails environment using tmuxinator's defaults​


pages: 302 words: 84,881

The Digital Party: Political Organisation and Online Democracy by Paolo Gerbaudo

Airbnb, barriers to entry, basic income, Bernie Sanders, bitcoin, call centre, centre right, creative destruction, crowdsourcing, disintermediation, disruptive innovation, Donald Trump, Edward Snowden, feminist movement, gig economy, industrial robot, Jaron Lanier, Jeff Bezos, jimmy wales, Joseph Schumpeter, Mark Zuckerberg, Network effects, Occupy movement, offshore financial centre, oil shock, post-industrial society, precariat, Ralph Waldo Emerson, Richard Florida, Richard Stallman, Ruby on Rails, self-driving car, Silicon Valley, Skype, Slavoj Žižek, smart cities, Snapchat, social web, software studies, Stewart Brand, technoutopianism, Thomas L Friedman, universal basic income, Vilfredo Pareto, WikiLeaks

Voting operations are supported by a software called Nvotes, previously known as Agora Voting, which self-describes as ‘a project for open source, cryptographically secure voting’, developed by the company Agora Voting, which offers a ‘block-chain-based digital voting solution for governments and organizations’.250 Significantly, some of the Agora Voting team, involving David Ruescas, Eduardo Robles and Lucas Cervera, hailed from hacker groups that were involved in the 15-M. The programme is written in Shell, with some components in Ruby on Rails, Python and Javascript. The main claim of this system is that it is tamper-proof, as it is based on mix-net and end-to-end encryption of voting operations, ensuring strong security. This system has been used several times for a number of purposes, including online primaries, election to party positions (e.g. secretary general) and internal referenda on policy and strategy.

This forum initially hosted on Reddit which lent Podemos the moniker of ‘Reddit party’, as proposed by the New Yorker.251 According to an article published in July 2014, soon after the European elections the forum had ‘two thousand subscribers and significant traffic. About two hundred people were visiting the page at any given time, and there were a million page views in the month of July alone’.252 More recently, the functionality moved to Plaza Podemos 2.0 supported by the Consul software written in Ruby on Rails and developed by the mayoralty of Madrid. Consul self-describes as ‘the most complete citizen participation tool for an open, transparent and democratic government’.253 It allows to open threads on various topics, thus permitting users to create separate ‘rooms’ in which people can discuss various issues of interest.


pages: 251 words: 80,831

Super Founders: What Data Reveals About Billion-Dollar Startups by Ali Tamaseb

"side hustle", 23andMe, additive manufacturing, Affordable Care Act / Obamacare, Airbnb, Anne Wojcicki, barriers to entry, Ben Horowitz, bitcoin, business intelligence, buy and hold, Chris Wanstrath, clean water, cloud computing, coronavirus, corporate governance, correlation does not imply causation, Covid-19, COVID-19, cryptocurrency, discounted cash flows, diversified portfolio, Elon Musk, game design, gig economy, high net worth, hiring and firing, index fund, Internet Archive, Jeff Bezos, Kickstarter, late fees, Lyft, Marc Andreessen, Mark Zuckerberg, Mitch Kapor, natural language processing, Network effects, nuclear winter, PageRank, Paul Buchheit, Paul Graham, peer-to-peer lending, Peter Thiel, QR code, remote working, ride hailing / ride sharing, robotic process automation, rolodex, Ruby on Rails, Sam Altman, Sand Hill Road, self-driving car, shareholder value, sharing economy, side project, Silicon Valley, Silicon Valley startup, Skype, Snapchat, software as a service, software is eating the world, sovereign wealth fund, Startup school, Steve Jobs, Steve Wozniak, survivorship bias, TaskRabbit, telepresence, the payments system, Tony Hsieh, Travis Kalanick, Uber and Lyft, Uber for X, uber lyft, ubercab, web application, WeWork, Y Combinator

I’d always dabbled in computers. So I started studying computer science, but I dropped out of college after my sophomore year to work for a startup. I taught myself through books, and I read and practiced. But I was always coding the whole time. I got into Ruby on Rails [a web-application framework]. I ended up moving to San Francisco to work for a company that was doing Ruby on Rails called Powerset, which was a search company trying to beat Google. It turns out that’s hard, but the company did get acquired by Microsoft. And I was employee number thirty-two there. So I got $10,000 or something out of it. It was a $100 million purchase by Microsoft, but I got, like, ten grand.


Data Wrangling With Python: Tips and Tools to Make Your Life Easier by Jacqueline Kazil

Amazon Web Services, bash_history, cloud computing, correlation coefficient, crowdsourcing, data acquisition, database schema, Debian, en.wikipedia.org, Firefox, Google Chrome, job automation, Nate Silver, natural language processing, pull request, Ronald Reagan, Ruby on Rails, selection bias, social web, statistical model, web application, WikiLeaks

However, most of the work in this book is aimed at backend processes and larger data processing. Python is more accessible, easier to learn, and has specific data processing libraries already created for data wrangling use. For that reason, we use Python. 420 | Appendix A: Comparison of Languages Mentioned Ruby and Ruby on Rails Versus Python You may have heard of Ruby on Rails, which is a popular web framework based on the Ruby language. There are many for Python—Flask, Django, Bottle, Pyramid, etc.—and Ruby is also often used without a web framework. We are using Python for its fast processing and data wrangling capabilities—not its web abilities.

., 420 range() function, 78 rate limits, 358 ratio function, 178 Read the Docs (website), 423 read-only files, 47 reader function, 54 regular expressions (regex), 96, 181-186 relational databases, 141-144 remove method, 156 removing files, 435 renaming files, 434 reports, automated uploading of, 409 requests, web page, 294-296 REST APIs advanced data collection from Twitter's, 364-367 simple data pull from Twitter's, 362-364 streaming APIs vs., 358 return statement, 102 rm command, 429 robots.txt file, 293, 355 Rollbar, 410 round-trip latency, 353 Ruby/Ruby on Rails, Python vs., 421 480 | Index Russia, data sources from, 134 S SaltStack, 397 scatter charts, 254 scatter method, 254 scientific datasets, 136 scope, 458 Scrapely, 342 Scrapy, 332-351 building a spider with, 332-341 crawl rules, 348-350 crawling entire websites with, 341-351 retry middleware, 351 screen reading, 313 scripting and network problems, 351-354 data cleanup, 196-212 documentation for, 198-209 search method, 183 Selenium and headless browsers, 324 refreshing content with, 351 screen reading with, 314-325 Selenium ActionChains, 324 Sentry, 410 separators, 38 setup advanced, 439-451 code editor, 15 directory for project-related content, 445 GCC installation, 439 Homebrew, 440-443 IPython, 16, 466 learning about new environment, 448-451 libraries (packages), 443 Mac, 8 pip, 14 Python, 7-11, 443 Python 2.7 installation, 443 sudo, 14 virtual environment testing, 447 virtualenv installation, 444 virtualenvwrapper installation, 445 virtualenvwrapper-win installation, 447 Windows, 7, 9-11 set_field_value method, 327 shortcuts, command-line, 442 slate library, 93-96 SleekXMPP, 408 slicing, 84 smell test, 128 SMS automation, 406 South America, data sources from, 134 Spark, 393 Spider class, 334 spiders, 331-351 building with Scrapy, 332-341 crawling entire websites with Scrapy, 341-351 defined, 277 SQLite, 145-146 Squarespace, 265 Stack Overflow (website), 423 stacked chart, 250 startproject command, 335 statistical libraries, 240 storytelling audience considerations, 248 avoiding pitfalls, 247-250 data-wrangling as, 1-4 deciding what story to tell, 248 improving your skills, 417 streaming APIs advanced data collection from Twitter's, 368-370 REST APIs vs., 358 strftime method, 167 string methods, 30 strings and addition, 32 data types, 18 format method, 162 storing numbers as, 19 strip method, 29 strptime method, 164 Sublime Text, 15 subtraction, 32 sudo command, 14, 430 syntax errors, 14 sys module, 385 system prompt, Python prompt vs., 12 T Tab key, autocompletion with, 97 table extraction exercise, 116-121 table functions (agate), 223-226 table joins, 230 Tabula, 122-124 tag attributes, 56, 304 tags, 55 target audience, identifying, 248 telephone messages, automating, 406 telephone, locating data via, 130 terminal development closing indented code blocks, 48 IPython, 468 text messages, automation for, 406 text, converting PDFs to, 96 time series data, 258 time-related data, 257 timeline data, 258 Timeline tabs, 286-288 token, API, 360-362 tools built-in, 34-38 dir, 35-36 help, 37 type, 34 touch command, 427 trademarks, 276 try block, 228 TSV, 44 tuples, 112 Twillo, 406 Twitter, 1 advanced data collection from REST API, 364-367 advanced data collection from streaming API, 368-370 creating API key/access token for, 360-362 simple data pull from REST API, 362-364 type checking, 461 type method, 34 U United Kingdom, data sources from, 133 unittest, 213 universities, datasets from, 135 unsupported code, 121 unzip command, 431, 436 upper method, 30 V Vagrant, 397 values, Python dictionary, 27 variables, 23-25, 461 Index | 481 version (Python), choosing, 6 Vi, 15 video, 263 Vim, 15 virtual environment learning about, 448-451 testing, 447 virtualenv, 444 virtualenvwrapper installation, 445 updating .bashrc, 446 virtualenvwrapper-win, 447 visualization of data, 250-264 charts, 250-257 images, 263 interactives, 262 maps, 258-262 time-related data, 257 video, 263 with illustrations, 263 with words, 263 voice message automation, 406 W web interfaces, 396 web page analysis, 278-294 and JavaScript console, 289-293 in-depth, 293 inspection of markup structure, 278-286 Timeline/Network tab analysis, 286-288 web pages reading with Beautiful Soup, 296-300 reading with LXML, 300-311 requests, 294-296 web scraping advanced techniques, 313-354 and network problems, 351-354 basics, 275-312 browser-based parsing, 313-331 ethical issues, 354 legal issues, 276, 354 reading web pages with Beautiful Soup, 296-300 482 | Index reading web pages with LXML, 300-311 screen reading with Ghost.py, 325-331 screen reading with Selenium, 314-325 simple text scraping, 276-278 web page analysis, 278-294 web page requests, 294-296 with Scrapy, 332-351 with spiders, 331-351 with XPath, 304-311 wget command, 430 where function, 224 whitespace, 38, 50-52, 453 Windows installing Python on, 7, 9-11 learning about new environment, 448-451 virtual environment testing, 447 virtualenv installation, 444 virtualenvwrapper-win installation, 447 Windows 8, 9-11 Windows command line, 432-437 executing files from, 435 modifying files from, 434 navigation, 433 online resources, 437 searching with, 435-437 Windows PowerShell, 435-437 Windows prompt (>), 12 WordPress, 265 wrapper libraries, 145 X xlrd library, 75-79 xlutils library, 75 xlwt library, 75 XML data, 55-70 XPath, 304-311 Z Zen of Python, 196 zip function, 105 zip method, for data cleanup, 155-162 About the Authors Jacqueline Kazil is a data lover.


pages: 304 words: 93,494

Hatching Twitter by Nick Bilton

4chan, Airbus A320, Burning Man, friendly fire, index card, Jeff Bezos, John Markoff, Kevin Kelly, Kickstarter, Mahatma Gandhi, Mark Zuckerberg, pets.com, rolodex, Ruby on Rails, Saturday Night Live, side project, Silicon Valley, Skype, social web, Steve Ballmer, Steve Jobs, Steven Levy, technology bubble, traveling salesman, US Airways Flight 1549, WikiLeaks

He finally wore Ev down, convincing him to fork over the money he needed to get started. Noah took off on the project, posting a freelance job listing for a start-up called Citizenware. A few e-mails started to trickle in from programmers applying for the gig, but one stood out. It was from a hacker who knew “Ruby on Rails,” a hip new programming language. After a few back-and-forth e-mails, an interview was arranged at a coffee shop in the Mission. The interviewee introduced himself as Rabble, even though his real name was Evan Henshaw-Plath. He was tall, his head and shoulders leaning forward slightly as a drunk slouches on a pole to keep from falling to the ground.

“Sleep” allowed people to pause updates they received. (Too unclear.) And a long list of other options were nixed. There were, of course, much bigger problems than the question of which verbs to use on Twitter. Since the site had been built as a prototype in two weeks using a relatively new programming language called Ruby on Rails, it was rife with shortcuts and code problems. It was as if someone had rushed to build a skyscraper and in the time crunch had chosen to put together the structure with cardboard, glue, and tape, rather than nails, wood, and concrete. Worse, people were now moving into the building before construction crews could replace the flimsy materials with real ones.


pages: 713 words: 93,944

Seven Databases in Seven Weeks: A Guide to Modern Databases and the NoSQL Movement by Eric Redmond, Jim Wilson, Jim R. Wilson

AGPL, Amazon Web Services, create, read, update, delete, data is the new oil, database schema, Debian, domain-specific language, en.wikipedia.org, fault tolerance, full text search, general-purpose programming language, Kickstarter, linked data, MVC pattern, natural language processing, node package manager, random walk, recommendation engine, Ruby on Rails, Skype, social graph, web application

We can inspect our work with this command to list all indexes in the schema: ​​book=# \di​​ It’s worth noting that when you set a FOREIGN KEY constraint, PostgreSQL will automatically create an index on the targeted column(s). Even if you don’t like using database constraints (that’s right, we’re looking at you, Ruby on Rails developers), you will often find yourself creating indexes on columns you plan to join against in order to help speed up foreign key joins. Day 1 Wrap-Up We sped through a lot today and covered many terms. Here’s a recap: Term Definition Column A domain of values of a certain type, sometimes called an attribute Row An object comprised as a set of column values, sometimes called a tuple Table A set of rows with the same columns, sometimes called a relation Primary key The unique value that pinpoints a specific row CRUD Create, Read, Update, Delete SQL Structured Query Language, the lingua franca of a relational database Join Combining two tables into one by some matching columns Left join Combining two tables into one by some matching columns or NULL if nothing matches the left table Index A data structure to optimize selection of a specific set of columns B-tree A good standard index; values are stored as a balanced tree data structure; very flexible Relational databases have been the de facto data management strategy for forty years—many of us began our careers in the midst of their evolution.

map = function(v) {​​ ​​ var parsedData = JSON.parse(v.values[0].data);​​ ​​ if(parsedData.country === 'CA')​​ ​​ return [{count : 1}];​​ ​​ else​​ ​​ return [{count : 0}];​​ ​​}​​ ​​​​ ​​reduce = function(mappedVals) {​​ ​​ var sums = {count : 0};​​ ​​ for (var i in mappedVals) {​​ ​​ sums[count] += mappedVals[i][count];​​ ​​ }​​ ​​ return [sums];​​ ​​}​​ In one way, mapreduce is the opposite of how we normally run queries. A Ruby on Rails system might grab data like this (via its ActiveRecord interface): ​​# Construct a Hash to store room capacity count keyed by room style​​ ​​capacity_by_style = {}​​ ​​rooms = Room.all​​ ​​for room in rooms​​ ​​ total_count = capacity_by_style[room.style]​​ ​​ capacity_by_style[room.style] = total_count.to_i + room.capacity​​ ​​end​​ Room.all runs an SQL query against the backing database similar to this: ​​SELECT * FROM rooms;​​ The database sends all of the results to the app server, and the app server code performs some action on that data.


pages: 319 words: 90,965

The End of College: Creating the Future of Learning and the University of Everywhere by Kevin Carey

Albert Einstein, barriers to entry, Bayesian statistics, Berlin Wall, business cycle, business intelligence, carbon-based life, Claude Shannon: information theory, complexity theory, David Heinemeier Hansson, declining real wages, deliberate practice, discrete time, disruptive innovation, double helix, Douglas Engelbart, Douglas Engelbart, Downton Abbey, Drosophila, Firefox, Frank Gehry, Google X / Alphabet X, informal economy, invention of the printing press, inventory management, John Markoff, Khan Academy, Kickstarter, low skilled workers, Lyft, Marc Andreessen, Mark Zuckerberg, meta-analysis, natural language processing, Network effects, open borders, pattern recognition, Peter Thiel, pez dispenser, ride hailing / ride sharing, Ronald Reagan, Ruby on Rails, Sand Hill Road, self-driving car, Silicon Valley, Silicon Valley startup, social web, South of Market, San Francisco, speech recognition, Steve Jobs, technoutopianism, transcontinental railway, uber lyft, Vannevar Bush

It doesn’t take tens of thousands of programmers to make great software; in fact, once you add too many cooks to the development kitchen, software tends to get worse. Michael Staton and his buddies speak with awe about coders like David Heinemeier Hansson, a thirty-four-year-old Danish wunderkind, the “Elvis of software engineers,” who created the popular Ruby on Rails Web development framework, races sports cars in his spare time, and is, they say, worth one hundred ordinary men. The cost of reproducing software is essentially zero, which means large profit margins on every copy you sell or every customer you add after the first one. And unlike hardware, which is always on the precipice of commodification, software becomes more valuable as more people adopt it—the first mover’s advantage.

., 90 NLS/Augment, 125 Nobel Prize, 3, 45, 59, 78, 80, 176 Northeastern University, 64 Northern Arizona University, 229–30 Health and Learning Center, 230 Northern Iowa, University of, 55 Norvig, Peter, 149, 170, 227–28, 232 Notre Dame (Paris), cathedral school at, 18 Nurkiewicz, Tomasz, 218 Obama, Barack, 2 Oberlin College, 46 O’Brien, Conan, 166 Oklahoma, University of, 90 Omdurman Islamic University, 88 oNLine system, 125–26 Open Badges, 207 Open source materials and software, 177, 205–6, 215, 223, 232 Organisation for Economic Co-operation and Development, 9, 224 Overeducated American, The (Freeman), 56 Oxford University, 19, 21, 23, 24, 92, 135 Packard, David, 123 Parkinson’s disease, 70 Paris, University of, 18–19, 21, 137 Pauli, Wolfgang, 176 Pauling, Linus, 70 Pausch, Randy, 71–72 Peace Corps, 125 Pellar, Ronald (“Doctor Dante”), 208 Pell Grant Program, 56 Penguin Random House, 146 Pennsylvania, University of, 23, 24, 31 Wharton Business School, 155 Pennsylvania State University, 53 People magazine, 57 Pez dispensers, 146 Phaedrus (Socrates), 20, 98 PhDs, 7, 55, 117, 141, 193, 237, 250, 254 adjunct faculty replacing, 252 college rankings based on number of scholars with, 59 regional universities and community colleges and, 60, 64, 253 as requirement for teaching in hybrid universities, 31–33, 35, 50, 60, 224 Silicon Valley attitude toward, 66 Philadelphia, College of, 23 Philip of Macedon, 92 Phoenix, University of, 114 Piaget, Jean, 84, 227 Piazza, 132 Pittsburgh, University of, 73–76 Pixar, 146 Planck, Max, 45 Plato, 16, 17, 21, 31, 44, 250–51 Portman, Natalie, 165 Powell, Walter, 50, 117 Princeton University, 1–2, 23, 112, 134, 161, 245 Principia (Newton), 190 Protestantism, 24 Public universities, 7, 55, 177, 224, 253 Purdue University, 96, 208 Puritans, 22–24 Queens College, 23 Quizlet, 133 Rafter, 131–32 Raphael, 16, 17 Reader’s Guide to Periodical Literature, 87 Reagan, Ronald, 56 Regional universities, 55, 60, 64 Reid, Harry, 42 Renaissance, 19 Rhode Island, College of, 23 Rhodes Scholarships, 2 Rice University, 204 RNA, 3 Rockstar Games, 230 Roksa, Josipa, 9, 36, 85, 244 Romans, ancient, 16 Roosevelt, Theodore, 165 Ruby on Rails Web development framework, 144 Rutgers University, 23 Sample, Steven, 64 Samsung, 146 San Jose State University, 177 Sandel, Michael, 177 SAT scores, 63, 136–37, 171, 195, 213 Saylor, Michael, 186–93, 199, 201 Saylor.org, 191, 223, 231 Schelling, Friedrich Wilhelm Joseph, 45 School of Athens, The (Raphael), 16 Schopenhauer, Arthur, 45 Science: The Endless Frontier (Bush), 51 Scientific American, 92, 155 Scientific Research and Development, U.S.


pages: 680 words: 157,865

Beautiful Architecture: Leading Thinkers Reveal the Hidden Beauty in Software Design by Diomidis Spinellis, Georgios Gousios

Albert Einstein, barriers to entry, business intelligence, business process, call centre, continuous integration, corporate governance, database schema, Debian, domain-specific language, don't repeat yourself, Donald Knuth, en.wikipedia.org, fault tolerance, Firefox, functional programming, general-purpose programming language, iterative process, linked data, locality of reference, loose coupling, meta-analysis, MVC pattern, peer-to-peer, premature optimization, recommendation engine, Richard Stallman, Ruby on Rails, semantic web, smart cities, social graph, social web, SPARQL, Steve Jobs, Stewart Brand, traveling salesman, Turing complete, type inference, web application, zero-coupon bond

Although there are many architectures that can meet functional requirements, only a subset of these will also satisfy quality requirements. Let’s go back to the web application example. Think of the many ways to serve up web pages—Apache with static pages, CGI, servlets, JSP, JSF, PHP, Ruby on Rails, or ASP.NET, to name just a few. Choosing one of these technologies is an architecture decision that will have significant impact on your ability to meet certain quality requirements. For example, an approach such as Ruby on Rails might provide the fast time-to-market benefit, but could be harder to maintain as both the Ruby language and the Rails framework continue to evolve rapidly. Or perhaps our application is a web-based telephone and we need to make the phone “ring.”

The studio managers always called the service desk for a verbal walkthrough when they executed the installs. Perhaps we could include SQL scripts in documents on the release CDs for them to type in or copy-and-paste. The prospect of dictating any command that starts with, “Now type mysqladmin –u root –p...” gives me cold sweats. Instead, we decided to automate database updates. Ruby on Rails calls these “database migrations,” but in 2005 it wasn’t a common technique. Updates as objects The studio server defines a bean called a database updater. It keeps a list of database update objects, each representing an atomic change to the database. Each database update knows its own version and how to apply itself to the database.


pages: 117 words: 30,538

It Doesn't Have to Be Crazy at Work by Jason Fried, David Heinemeier Hansson

8-hour work day, Airbnb, Atul Gawande, Community Supported Agriculture, David Heinemeier Hansson, Jeff Bezos, market design, remote work: asynchronous communication, remote working, Ruby on Rails, Silicon Valley, Stephen Hawking, web application

When it comes to business, he thinks things are simple until you make them complicated. And when it comes to life, we’re all just trying to figure it out as we go. DAVID HEINEMEIER HANSSON is the cofounder of Basecamp and the New York Times bestselling coauthor of REWORK and REMOTE. He’s also the creator of the software toolkit Ruby on Rails, which has been used to launch and power Twitter, Shopify, GitHub, Airbnb, Square, and over a million other web applications. Originally from Denmark, he moved to Chicago in 2005 and now divides his time between the US and Spain with his wife and two sons. In his spare time, he enjoys 200-mph race cars in international competition, taking cliché pictures of sunsets and kids, and ranting far too much on Twitter.


pages: 266 words: 38,397

Mastering Ember.js by Mitchel Kelonye

Firefox, MVC pattern, Ruby on Rails, single page application, web application, WebRTC, WebSocket

This also applies when defining routes. The second reason would be when a resource contains dynamic segments. For example, our contact resource handles contacts who should obviously have different URLs linking back to them. Ember.js uses URL pattern matching techniques used by other open source projects such as Ruby on Rails, Sinatra, and Express.js. Therefore, our contact resource should be defined as: this.resource('contact', {path: '/:contact_id'}, function(){ }); In the preceding snippet, /:contact_id is the dynamic segment that will be replaced by the actual contact's ID. One thing to note is that nested resources prefix their paths with those of parent resources.


pages: 193 words: 36,189

Html5 Boilerplate Web Development by Divya Manian

en.wikipedia.org, Firefox, Google Chrome, node package manager, pull request, Ruby on Rails, search engine result page

As with the .htaccess file, merely having it in the root folder of your website allows it to be recognized and used to configure an IIS7 server. lighttpd.conf As with the other configuration files, place it in the root folder for the Lighttpd server to configure the server. nginx.conf Nginx is a lightweight server popular with websites using the Ruby on Rails framework. As with the .htaccess file, place this file in the root folder of your website. In addition, make sure nginx-mime.types is also in the root folder. This file is required for Ngnix to make sure it sends each file with the right MIME type. node.js With the node.js configuration file, the usage is different.


pages: 999 words: 194,942

Clojure Programming by Chas Emerick, Brian Carper, Christophe Grand

Amazon Web Services, Benoit Mandelbrot, cloud computing, continuous integration, database schema, domain-specific language, don't repeat yourself, en.wikipedia.org, failed state, finite state, Firefox, functional programming, game design, general-purpose programming language, Guido van Rossum, Larry Wall, mandelbrot fractal, Paul Graham, platform as a service, premature optimization, random walk, Ruby on Rails, Schrödinger's Cat, semantic web, software as a service, sorting algorithm, Turing complete, type inference, web application

Now, rather than constantly defining them in their entirety, we can build queries incrementally and execute them when we like by using the exec function; this lets us reuse parts of queries and encapsulate query transformations in reusable functions, all ways to cut down on code repetition. The latest versions of Ruby on Rails’ venerable ActiveRecord (version 3.0 as of this writing) has moved to a very similar method of forming SQL queries using method calls on query objects. In Ruby on Rails, you might write something like this: employees = Person.where(:type => "employee") # ... later ... managers = employees.where(:role => "manager").order(:last_name) managers.all.each do |e| ... end Doing this with Korma is very similar: (def employees (where (select* employees) {:type "employee"})) ;; ... later ...

The result will be a simple URL-shortening HTTP service,[403] similar to bit.ly, tinyurl.com, and so on; such services allow users to specify and use shorter URLs that redirect to their canonical counterparts. To do this, we’ll use Compojure (https://github.com/weavejester/compojure), the most popular library for defining routes for Ring applications, and one that has taken cues from the URL routing features in many frameworks you may be familiar with already, including Ruby on Rails and Django. Let’s start a new REPL session with Compojure included in our project’s dependencies, which should now include both Compojure and Ring: [compojure "1.0.1"] [ring "1.0.1"] We should first consider what kind of model we should have for storing URLs and their shorter identifiers. We want to focus on building the web side of things, so let’s just keep this state in a map in memory using a reference type.[404] Which reference types should we use?


Python Web Development With Django by Jeff Forcier

create, read, update, delete, database schema, Debian, don't repeat yourself, en.wikipedia.org, Firefox, full text search, functional programming, Guido van Rossum, loose coupling, MVC pattern, revision control, Ruby on Rails, Silicon Valley, slashdot, web application

MochiKit: (mochikit.com) One of the more “Pythonic” JavaScript libraries, which has taken inspiration from sources such as Python and Objective-C. MooTools: (mootools.net) MooTools has an extremely modular download system, enabling for a very customizable library setup. Prototype: (prototypejs.org) Originated from the Ruby on Rails Web framework, but has since branched out to be a stand-alone library. 207 208 Chapter 9 Liveblog n Yahoo! User Interface (YUI): (developer.yahoo.com/yui) The best of Yahoo!’s recent and ongoing JavaScript UI work, packaged for community use. In our example application, we are using jQuery, although this is largely an arbitrary choice on the part of the authors.The simple Ajax functionality we use here would be possible in any of the previous frameworks.

Git Something of a rival to Mercurial, in that both tools vie with Bazaar for open-source DVC mindshare, is Git (http://git.or.cz).Written in C, by Linus Torvalds and other Linux kernel team members, Git is a Unix-inspired tool and was originally created to help deal 315 316 Appendix C Tools for Practical Django Development with the extremely complex source-control needs of the Linux kernel project, which uses it today. Git has also been embraced by the Ruby on Rails project and many other projects in Rails’ sphere of influence, in addition to the WINE project, X.org (the Linux graphics system), the Fedora Linux distribution, and others. Version Control for Your Project Here’s a basic walkthrough for the uninitiated of using version control on a Django project.


pages: 458 words: 135,206

CTOs at Work by Scott Donaldson, Stanley Siegel, Gary Donaldson

Amazon Web Services, Andy Carvin, bioinformatics, business intelligence, business process, call centre, centre right, cloud computing, computer vision, connected car, crowdsourcing, data acquisition, distributed generation, domain-specific language, functional programming, glass ceiling, orbital mechanics / astrodynamics, pattern recognition, Pluto: dwarf planet, QR code, Richard Feynman, Ruby on Rails, shareholder value, Silicon Valley, Skype, smart grid, smart meter, software patent, thinkpad, web application, zero day, zero-sum game

That tactically means managing several groups of engineers working on several products, some of which are externally facing, some of which are internally facing; sitting down and problem solving with those engineers, whether they have a technical problem or a people problem or a requirements problem; keeping communication flowing between business stakeholders, product managers, and the engineers doing the delivery. That's the bulk of my CTO responsibilities. Siegel: Could you give a specific example of what you just described? Ballard: Sure. Down to the technology level, just this week, I had to sit down with one of my engineers who was having trouble automating the installation of a Ruby on Rails app because he's never actually done it before. I helped him write a shell script and a make file in order to configure his environment. I help with very low-level programming detail, all the way up to thinking through product features. We've had conference calls and preparations for board meetings where we were talking about which product features we designed and are implementing in 2012, to a meeting I had with a product manager just yesterday talking about the workflow, to how and when we prioritize certain tasks.

You can use these modern data management products, for example MongoDB, to implement this fractal architecture. Let's say you're building an intranet portal application to search one of your proprietary databases. You can load MongoDB data in a full-text indexing package such as Apache Lucene. Let's say that you're using Ruby on Rails and Nginx. You can pack that all onto a single machine and then you have the benefit that the application doesn't incur any network latency internally. The web request comes in over the network and everything stays on the machine from there, and so you can have much lower latency, which is a quick and easy way to get much higher performance on an individual user basis.


Backbone.js Cookbook by Vadim Mirgorod

Airbnb, create, read, update, delete, en.wikipedia.org, Firefox, Google Chrome, MVC pattern, QR code, rolodex, Ruby on Rails, web application

See also HTML 5 canvas reference could be found at http://www.w3schools.com/html/html5_canvas.asp. 178 7 REST and Storage In this chapter, we will cover the following recipes: ff Architecting the REST API for the backend ff Prototyping a RESTful backend with MongoLab ff Synchronizing models and collections with a RESTful service ff Building a RESTful frontend with Backbone ff Using the polling technique to fetch data ff Working with local storage Introduction This chapter focuses on the way Backbone.js synchronizes models and collections with a RESTful backend, or stores them in the HTML5 local storage. We will learn how to design the REST API for our backend, which can be implemented with almost any programming framework, such as Symphony, Ruby on Rails, Django, or Node.js. Throughout the chapter, we will use MongoLab (http://mongolab.com), which is the cloud version of MongoDB, with a RESTful interface. We will also learn what tools to use to debug the RESTful service when the frontend app has not been built yet. Finally we will make the Backbone application communicate with the RESTful service, performing full set of CRUD operations supported by the REST server.


pages: 458 words: 46,761

Essential Sqlalchemy by Jason Myers, Rick Copeland

create, read, update, delete, database schema, microservices, Ruby on Rails, side project, web application

It also provides a high-level abstraction on top of the SQL Expression Language that enables the user to work in a more idiomatic way. You can mix and match use of the ORM with the SQL Expression Language to create very powerful applications. The ORM leverages a declarative system that is similar to the active-record systems used by many other ORMs such as the one found in Ruby on Rails. While the ORM is extremely useful, you must keep in mind that there is a difference between the way classes can be related, and how the underlying database relationships work. We’ll more fully explore the ways in which this can affect your implementation in Chapter 6. Choosing Between SQLAlchemy Core and ORM Before you begin building applications with SQLAlchemy, you will need to decide if you are going to primarly use the ORM or Core.


pages: 309 words: 54,839

Attack of the 50 Foot Blockchain: Bitcoin, Blockchain, Ethereum & Smart Contracts by David Gerard

altcoin, Amazon Web Services, augmented reality, Bernie Madoff, bitcoin, Bitcoin Ponzi scheme, blockchain, Blythe Masters, Bretton Woods, clean water, cloud computing, collateralized debt obligation, credit crunch, Credit Default Swap, credit default swaps / collateralized debt obligations, cryptocurrency, distributed ledger, Dogecoin, Ethereum, ethereum blockchain, Extropian, fiat currency, financial innovation, Firefox, Flash crash, Fractional reserve banking, functional programming, index fund, Internet Archive, Internet of things, Kickstarter, litecoin, M-Pesa, margin call, Network effects, peer-to-peer, Peter Thiel, pets.com, Ponzi scheme, Potemkin village, prediction markets, quantitative easing, RAND corporation, ransomware, Ray Kurzweil, Ross Ulbricht, Ruby on Rails, Satoshi Nakamoto, short selling, Silicon Valley, Silicon Valley ideology, Singularitarianism, slashdot, smart contracts, South Sea Bubble, tulip mania, Turing complete, Turing machine, WikiLeaks

It’s not just scamminess on the part of the proprietors, but sheer jawdropping incompetence: Bitomat, then the third-largest exchange, were keeping the whole site’s wallet file on an Amazon Web Services EC2 server in the cloud that didn’t have separate backups and was set to “ephemeral,” i.e., it would disappear if you restarted it. Guess what happened in July 2011? Whoops.81 Bitcoinica was its sixteen-year-old creator’s first serious PHP project. He read up on PHP, Ruby on Rails, personal finance and startups, and wrote an exchange.82 It collapsed in May 2012: “No database backups … Everyone had root.”83 The exchange’s remaining funds were lost in further hacks, after the administrators turned out to be using their (leaked) Mt. Gox password as their LastPass password.84 BitPay claimed to be fully insured.


pages: 559 words: 155,372

Chaos Monkeys: Obscene Fortune and Random Failure in Silicon Valley by Antonio Garcia Martinez

Airbnb, airport security, always be closing, Amazon Web Services, Burning Man, Celtic Tiger, centralized clearinghouse, cognitive dissonance, collective bargaining, corporate governance, Credit Default Swap, crowdsourcing, death of newspapers, disruptive innovation, drone strike, El Camino Real, Elon Musk, Emanuel Derman, financial independence, global supply chain, Goldman Sachs: Vampire Squid, hive mind, How many piano tuners are there in Chicago?, income inequality, information asymmetry, interest rate swap, intermodal, Jeff Bezos, Kickstarter, Malcom McLean invented shipping containers, Marc Andreessen, Mark Zuckerberg, Maui Hawaii, means of production, Menlo Park, minimum viable product, MITM: man-in-the-middle, move fast and break things, move fast and break things, Network effects, orbital mechanics / astrodynamics, Paul Graham, performance metric, Peter Thiel, Ponzi scheme, pre–internet, Ralph Waldo Emerson, random walk, Ruby on Rails, Sam Altman, Sand Hill Road, Scientific racism, second-price auction, self-driving car, Silicon Valley, Silicon Valley startup, Skype, Snapchat, social graph, social web, Socratic dialogue, source of truth, Steve Jobs, telemarketer, undersea cable, urban renewal, Y Combinator, zero-sum game, éminence grise

In tandem, the popularity of accelerators like Y Combinator, plus a general acceptance of entrepreneurship as a career, meant lots of very skilled engineers and product people were skipping the corporate trajectory and building exciting products. The emergence of turnkey, on-demand computation like Amazon Web Services, plus off-the-shelf Web-development frameworks like Ruby on Rails, meant that new ideas were easier than ever to test. Many entrepreneurs chose to build shovels rather than dig for gold, creating more complex software building blocks to underpin the innovation, such as back-end services like Parse, accelerating the startup explosion in an almost exponential way.

Somerset, 200 Mayer, Marissa, 78 Mayfield Capital, 154, 156, 159, 162–63 McAfee, 382 McCorvie, Ryan, 16–17 McDonald’s, 82, 450 McEachen, Matthew (“MRM”), 41, 46, 62–63 call to, 123 CEO position, 249 chaos monkey suggestion, 103 codebase and, 66, 73, 184, 234 coding, 146 comrade-in-arms, 91 as daredevil, 136–37 deal details and, 251–52 earnestness, 68 Facebook and, 223, 225 family, 135, 205 getting to know, 88 irritation, 102–3 lost with, 109 paying off mortgage, 494 as resourceful savior, 100–101 as steadfast, 67 McGarraugh, Charlie, 14–15 McLean, Malcom, 447 media publishers, 387 MediaMath, 390 Menlo Park, 84 bedroom community, 338 conferences, 119 headquarters, 469 moving to, 337 schools, 306 meritocracy, 74 Merkle, 384 mesothelioma, 81 Miami drug trade, 304 Michelangelo, 334 Microsoft Adchemy and, 153–54, 161–62 Atlas, 383, 453–55 calendar, 340 dogfooding, 43 monopolist, 286 program managers, 272 middle managers, 359 Miller, Arthur, 104 Miller, Frank, 434 Milton, John, 475 minimum viable product (MVP), 434 miracles, 51 misleading, offensive, or sexually inappropriate (MOSI), 310 Mixpanel, 62 mobile commerce, 484–89 mobile data, 382, 477, 484, 486 Mobile Marketing Association (MMA), 448 monetary value, 317–19 monetization bet, 4 data-per-pixel, 274 digital, 184 Facebook, 5, 209, 275, 278, 298, 318, 425, 444 folly, 361–72 Google, 186 growth, 141 influences, 9 savvy, 486–89 tug-of-war, 379 Twitter, 190 zero-sum game, 319 money fuck-you money, 102, 415–16 investors, 74 outside, 155 pre-money valuation, 212 seed, 96 of VCs, 174 Moore’s law, 25 MoPub, 476–77, 479–81 morality, 226, 256, 284 Morgenstern, Jared, 218 Morishige, Sara, 183 Morris, Robert Tappan, 60–61 Mortal Kombat 3, 178 Moscone, George, 181 Moskovitz, Dustin, 284 Motwani, Rajeev, 138 Museum of Natural History, 366 My Life as a Quant (Derman), 16 MySpace, 283–84 N00b, 269 Nanigans, 480–81 Narasin, Ben, 128–31, 143–44 NASDAQ, 405, 410 National Socialism, 356 native ad formats, 448–49 Neko, 482 Netflix, 83, 103, 328 Netscape Navigator, 286 Neustar, 384, 386 New Rich, 357 New York Times, 448, 486 New Zealand, 318 News Feed addictive, 482 ads, 482–84, 488, 492 click-through rates, 487 content, 309 creation, 2 distribution, 364 as magic real estate, 362 spamming users, 372 versions, 444 newspaper advertising, 36–37 Nielsen, 385 1984 (Orwell), 433 noncash valuation, 212 no-shop contract, 201 Nukala, Murthy crossing paths, 167–68 ego, 42–43 greed, 44 hazing by, 71 immigrant worker, 72 lecture from, 65–66 manipulative rage, 136 pep rally, 36 saying good-bye to, 73 self-preservation and, 162–63 tantrums, 45 as tyrant, 158 vindictiveness, 134 wooing by, 154 Obama, Barack, 299–300 obscenity, 268 OkCupid, 54 Olivan, Javier, 410 Omnicom, 437, 443 on-boarding, 260–67, 271 one shot, one kill motto, 298 one-on-one, 434, 457, 469 online dating, 54–55 Opel, John, 148 Open Graph, 280, 364 optimization, 276, 302 Oracle investors, 111 job at, 193 logo, 124 product shindigs, 181 recruiting, 70 Orkut, 379 Orrick, Herrington & Sutcliffe, 193, 203, 253 Orwell, George, 433 outside money, 155 Ovid, 316 Oxford English Dictionary, 80 Page, Larry, 112, 428, 431 Pahl, Sebastien, 119 Palantir, 272 Palihapitiya, Chamath, 265–66 Palo Alto bosom of, 116 climate, 123 downtown, 333, 338 East, 404 hub, 109 old, 112, 158 posh, 84 shuttles, 289, 339 Stanford grads, 63 Pamplona running of bulls, 106–7 Pan-Arabism, 356 Pansari, Ambar, 210 Paper, 283 Parse, 155 Patel, Satya, 249–50 Patton, 369 Payne, Jim, 476 PayPal, 78, 124 personal wealth, 415 personally identifiable information (PII), 395 photo sharing, 286, 490–91, 493 photo-comparison software, 310 Pickens, Slim, 102 Piepgrass, Brian, 374 pings, 188, 327, 422 PMMess, 347–51, 407, 409 poker playing, 396–97 polyandry, 483 Polybius, 172, 316, 336 Pong, 150 Ponzi scheme, 16 pornography, 167, 262, 268, 312, 314, 315 post-valuation, 212 pregnancy, 58–59 pre-money valuation, 212 La Presse, 37 privacy Facebook and, 316–29 Irish Data Privacy Audit, 278, 320–23 PRIZM Segments, 385 product development, 47, 94, 191, 220, 334, 370, 389 product managers (PMs) as Afghan warlords, 273 earning money, 302 everyday work, 294 Facebook, 4, 6–7, 10, 91, 97, 202, 210, 271–79 Google, 192 habitat, 341 high-value, 246 ideal, 219 information and, 295 internal and external forces and, 316–17 last on buck-passing chain, 327 managing, 276 stupidity, 313 tech companies, 272 tiebreaker role, 292 product marketing manager (PMM), 277, 366 product navigators, 272 production, 94 product-market fit, 175 programmatic media-buying technology, 38 Project Chorizo, 296 pseudorandomness, 75 publishers, 37, 39 Putnam, Chris, 284 Qualcomm, 70 quants, 16–18, 24, 29, 141, 207 Quick and Dirty Operating System (QDOS), 149 Rabkin, Mark, 3, 312, 389, 398, 435 Rajaram, Gokul, 8, 10 accepting offer from, 248 banter with, 472–73 as boss, 3 bribery, 471 FBX and, 435 go big or go home ethos, 300 in great debate, 459 influence, 202 insubordination toward, 465 interview with, 221–22 leadership, 309 loss of trust, 468 lot with, 373 management of, 434 middle manager, 463–64 one-on-one and, 469 as product leader, 276–77 riding by, 346 stripping of duties, 452 word of, 252 Ralston, Geoff, 93 Rapportive, 96–97, 106 real-time bidding (RTB), 40–41 real-time data synchronization, 38 Red Rock Coffee, 84 RedLaser, 51 Reesman, Ben, 308, 389, 399–400, 475, 477 relativity, 25 replicating portfolio, 247–48 retargeting, 9, 381, 395, 438, 461 return of advertising spend (ROAS), 81 revenue dashboards, 274–75, 295–96 Right Media, 37–38 The Road Warrior, 134 Roetter, Alex, 185, 190, 493–94 romantic liaisons, 55–56 Romper Stomper, 202 Rosenblum, Rich, 21–22 Rosenn, Itamar, 368 Rosenthal, Brian, 389, 390 Ross, Blake, 444 Rossetti, Dante Gabriel, 303 rounds, 156 routing system, 324 Rubinstein, Dan, 312–13 Ruby on Rails, 155 Russia, 375–76 Sacca, Chris, 128, 141, 143 acquisition advice, 187–88, 212–13, 245–47 on deals, 205–7 ignoring inquiries, 201 pseudoangel, 113, 117–19 wisdom, 202 Safari, 484 safe sex, 58 safeguarding role, 315 sailboat living, 307, 332, 337–38 salaries, 358 San Francisco Museum of Modern Art (SFMOMA), 181 Sandberg, Sheryl, 2, 10 data joining and, 465 gatekeeper, 4–5 intimates, 3–4 leadership, 410 managerial prowess, 311–13 meetings, 371, 382, 459 PowerPoint and, 7 recommendations to, 462 schmoozing, 367 wiles of, 408 Sarna, Chander, 67–68, 71, 72 sausage grinder, 296 scale, 300 Scalps@Facebook, 314 scavenging foray, 116 schadenfreude, 16–17 Schopenhauer, Arthur, 282 Schrage, Elliot, 3–4, 410 Schreier, Bryan, 123–25 Schrock, Nick, 400 Schroepfer, Mike, 2 Schultz, Alex, 374 scientific racism, 122 Scoble, Robert, 100 Scott, George C., 24, 369 security, 314–15 seed money, 96 Sequoia, 122–25, 130, 159 severance package, 470–71 severity-level-one bug (SEV1), 323 sexual molestation, 17 Shaffer, Justin, 219–21, 444 Shakespeare, William, 120, 427, 456 Shapiro, Scott, 378, 459 Shelly, Percy Bysshe, 337 Shockley, William, 122 shuttles, 289, 339 Siegelman, Russell, 146, 201, 213, 397 angel investor, 110–13 commitment, 141–43 negotiations, 116–17 Silicon Valley.


We Are the Nerds: The Birth and Tumultuous Life of Reddit, the Internet's Culture Laboratory by Christine Lagorio-Chafkin

4chan, Airbnb, Amazon Web Services, Bernie Sanders, big-box store, bitcoin, blockchain, Brewster Kahle, Burning Man, compensation consultant, crowdsourcing, cryptocurrency, David Heinemeier Hansson, disinformation, Donald Trump, East Village, game design, Golden Gate Park, hiring and firing, independent contractor, Internet Archive, Jacob Appelbaum, Jeff Bezos, jimmy wales, Joi Ito, Justin.tv, Kickstarter, Lean Startup, Lyft, Marc Andreessen, Mark Zuckerberg, medical residency, minimum viable product, natural language processing, Paul Buchheit, Paul Graham, paypal mafia, Peter Thiel, Plutocrats, plutocrats, QR code, recommendation engine, RFID, rolodex, Ruby on Rails, Sam Altman, Sand Hill Road, Saturday Night Live, self-driving car, semantic web, side project, Silicon Valley, Silicon Valley ideology, Silicon Valley startup, slashdot, Snapchat, social web, South of Market, San Francisco, Startup school, Stephen Hawking, Steve Bannon, Steve Jobs, Steve Wozniak, technoutopianism, uber lyft, web application, WeWork, WikiLeaks, Y Combinator

He had spent a lot of time researching AJAX, a method for organizing the underlying structure of a website that allows data to be retrieved from a server in the background while a user is viewing an apparently static site, and which was becoming more widely used at the time (Gmail, Kayak, and Delicious each employed it). Ruby on Rails, the soon-to-be common back-end framework for sites (Airbnb, Hulu, and Twitter were built on it), would not be released until months later. One night while working alone, Huffman left his desk and sat with the trusty graph-paper notebook on his bed. In it, he attempted to map out a sample structure of pages for links, and submitting, and the homepage.

He was beat up, from inside the company, from the press, from Reddit users. He was overtired. Everything started aching. “I was under enormous amounts of stress, and I was not really able to recognize and appreciate that,” he recalled later. The public criticism only mounted when news of the office consolidation leaked. David Heinemeier Hansson, a creator of the Ruby on Rails programming framework and a partner at the project management software firm Basecamp, got wind of Wong’s decision to move employees to San Francisco and called it a “shit sandwich” on his blog. In reporting on the limited notice employees were given to decide, he wrote, “Can you imagine a more serious fuck you from your supposedly hip employer?


pages: 203 words: 14,242

Ship It!: A Practical Guide to Successful Software Projects by Jared R. Richardson, William A. Gwaltney

continuous integration, David Heinemeier Hansson, Donald Knuth, index card, MVC pattern, place-making, Ruby on Rails, web application

. $29.95 Visit our secure online store: Facets of Ruby Series Learn how to use the popular Ruby programming language from the Pragmatic Programmers: your definitive source for reference and tutorials on the Ruby language and exciting new application development tools based on Ruby. The Facets of Ruby series includes the definitive guide to Ruby, widely known as the PickAxe book. Upcoming titles in this series feature the Ruby on Rails web application framework and other exciting new technologies. • The definitive guide for Ruby programmers. • Up-to-date and expanded for Ruby version 1.8. • Complete documentation of all built-in classes, modules, and methods. • Complete descriptions of all ninety-eight standard libraries. • 200+ pages of new content in this edition. • Learn more about Ruby’s web tools, unit testing, and programming philosophy.


pages: 207 words: 57,959

Little Bets: How Breakthrough Ideas Emerge From Small Discoveries by Peter Sims

Amazon Web Services, Black Swan, Clayton Christensen, complexity theory, David Heinemeier Hansson, deliberate practice, discovery of penicillin, endowment effect, fear of failure, Frank Gehry, Guggenheim Bilbao, Jeff Bezos, knowledge economy, lateral thinking, Lean Startup, longitudinal study, loss aversion, meta-analysis, PageRank, Richard Florida, Richard Thaler, Ruby on Rails, Silicon Valley, statistical model, Steve Ballmer, Steve Jobs, Steve Wozniak, theory of mind, Toyota Production System, urban planning, Wall-E

“Manifesto for Agile Software Development” can be found at: http://agilemanifesto.org/. Agile methods are not yet mainstream. Companies like Salesforce.com have had successful migrations, while other software companies struggle to implement them. Small teams are critical, as is training and experience with the methods of which there are many variations, including Scrum, Ruby on Rails, Lean Startup, Customer Development Model, and so on. In general, Silicon Valley Internet entrepreneurs use agile methods because they can, and often must given their constraints. Creativity research on problem finding versus problem solving: Interview with Dr. R. Keith Sawyer, Washington University.


Catalyst 5.8: The Perl MVC Framework by Antano Solar John, Jonathan Rockway, Solar John Antano

c2.com, create, read, update, delete, database schema, Debian, en.wikipedia.org, Firefox, MVC pattern, Ruby on Rails, social intelligence, web application

Other papers by Antano include "802.11 MAC Enhancements-Breaking Barriers of Wireless Speed" that was published in the IEEE Journal, "Learning to Develop in the Open Source World", and so on. Owing to his experience as a consultant and trainer, Antano has designed course structure and content for corporate learners at different levels on subjects such as Object Oriented Perl, Unix System Fundamentals, Shell basic, Ruby on Rails, and so on. In association with MaFoi Ranstad, Antano entirely designed and implemented a structured course for transitioning web designers into developers through a one-day blended learning program called "Learn". Antano has been keenly focusing on Accelerated Learning. He has conducted workshops at various reputed colleges and corporate events on how to learn quickly and effectively-technology languages and platforms using strategies that he has developed.


pages: 352 words: 64,282

MongoDB: The Definitive Guide by Kristina Chodorow, Michael Dirolf

create, read, update, delete, Debian, pattern recognition, Ruby on Rails, web application

Ruby Object Mappers and Using MongoDB with Rails There are several libraries written on top of the basic Ruby driver to provide things like models, validations, and associations for MongoDB documents. The most popular of these tools seem to be MongoMapper and Mongoid. If you’re used to working with tools like ActiveRecord or DataMapper, you might consider using one of these object mappers in addition to the basic Ruby driver. MongoDB also works nicely with Ruby on Rails, especially when working with one of the previously mentioned mappers. There are up-to-date instructions on integrating MongoDB with Rails on the MongoDB site. Custom Submission Forms: Ruby | 167 Real-Time Analytics: Python The Python driver for MongoDB is called PyMongo. In this section, we’ll use PyMongo to implement some real-time tracking of metrics for a web application.


pages: 274 words: 58,675

Puppet 3 Cookbook by John Arundel

Amazon Web Services, cloud computing, continuous integration, Debian, defense in depth, DevOps, don't repeat yourself, GnuPG, Larry Wall, place-making, Ruby on Rails, web application

Written in a simple, practical style by a professional systems administrator and Puppet expert, every recipe has detailed step-by-step instructions showing you the exact commands and configuration settings you need Please check www.PacktPub.com for information on our titles Instant Puppet 3 Starter ISBN: 978-1-78216-174-5 Paperback: 50 pages Gain complete consistency from your systems with minimal effort using Istant Puppet 3 Starter 1. Learn something new in an Instant! A short, fast, focused guide delivering immediate results 2. Learn how deterministic results can vastly reduce your workload 3. Deploy Puppet Server as a Ruby-on-Rails application to handle thousands of clients 4. Design your own module for complex configurations OpenStack Cloud Computing Cookbook ISBN: 978-1-84951-732-4 Paperback: 318 pages Over 100 recipes to successfully set up and manage your OpenStack cloud environments with complete coverage of Nova, Swift, Keystone, Glance and Horizon 1.


Exploring Everyday Things with R and Ruby by Sau Sheong Chang

Alfred Russel Wallace, bioinformatics, business process, butterfly effect, cloud computing, Craig Reynolds: boids flock, Debian, Edward Lorenz: Chaos theory, Gini coefficient, income inequality, invisible hand, p-value, price stability, Ruby on Rails, Skype, statistical model, stem cell, Stephen Hawking, text mining, The Wealth of Nations by Adam Smith, We are the 99%, web application, wikimedia commons

He has been active in programming with Ruby for the past 6 years and recently started with R for the past year. He is active in the local developer communities, especially in the Singapore Ruby Brigade. In April 2011 he co-organized the first and largest Ruby conferences in Southeast Asia, the RedDotRubyConf. He has published 2 books, the first in 2008 titled Ruby on Rails Mashup Projects and the second in 2010, titled Cloning Internet Applications with Ruby. Both books were published by Packt Publishing. Mr. Chang is currently the Director of Applied Research in HP Labs Singapore, with research focusing on cloud computing and big data. His previous roles include a stint as the CTO of a popular online gaming company and Director of Engineering for Yahoo!


Introducing Elixir by Simon St.Laurent, J. David Eisenberg

Debian, finite state, functional programming, Pluto: dwarf planet, Ruby on Rails, web application

(It’s sort of like learning a foreign language; there are phrases you may never have to say yourself, but you want to be able to understand them when someone says them to you.) When (Not) to Use Macros | 189 CHAPTER 15 Using Phoenix While it’s great to use Elixir from the command line, sometimes you’ll want to expose your work to the web as well. The Phoenix framework offers an Elixir-based toolkit, somewhat like Ruby on Rails, for building web applications. Phoenix is designed for robustness and scalability, building on macros, OTP, and Erlang’s Cowboy server. It wraps those powerful features, though, so you can get started building simple things without mastering those details. Skeleton Installation Once you have Elixir itself installed, installing just Phoenix isn’t difficult.


Realtime Web Apps: HTML5 WebSocket, Pusher, and the Web’s Next Big Thing by Jason Lengstorf, Phil Leggetter

Amazon Web Services, barriers to entry, don't repeat yourself, en.wikipedia.org, Firefox, Google Chrome, MVC pattern, Ruby on Rails, Skype, software as a service, web application, WebSocket

These companies provide a useful tool, utility, service, or other value to other developers for a fee. This allows us to use incredibly powerful new technologies without spending days—or weeks—trying to solve issues such as scalability and cross-browser support. In early 2010, cofounders Max Williams and Damien Tanner were running one of the most successful Ruby On Rails shops in the UK. When they saw the need to synchronize data between their team members, they built a small tool to utilize the new HTML5 WebSocket API. Once they realized how easy it was to create realtime applications using their infrastructure, they saw an opportunity that went beyond internal management tools.


pages: 504 words: 67,845

Designing Web Interfaces: Principles and Patterns for Rich Interactions by Bill Scott, Theresa Neil

A Pattern Language, anti-pattern, en.wikipedia.org, Firefox, recommendation engine, Ruby on Rails, Silicon Valley, web application

Expand/Collapse as Overlay A slight variation is to have content Expand/Collapse appear as an Overlay on the page. Instead of pushing content down or out of the way, the panels simply slide out from some part of the page into a layer above the rest of the items on the page. The panel slides out, anchored to the activating control. Five Runs is a Ruby on Rails application-monitoring tool. It provides a window into the inner workings of Rail's apps, helping IT groups track down system issues. The Five Runs web application uses slide-out panels for additional controls (Figure 11-6). Figure 11-6. Five Runs animates expanding and collapsing panels with additional controls as overlays to the interface Be careful to not overuse Expand.


pages: 821 words: 178,631

The Rust Programming Language by Steve Klabnik, Carol Nichols

anti-pattern, bioinformatics, business process, cryptocurrency, DevOps, Firefox, functional programming, Internet of things, iterative process, pull request, Ruby on Rails, type inference

While every precaution has been taken in the preparation of this work, neither the authors nor No Starch Press, Inc. shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in it. About the Authors Steve Klabnik leads the Rust documentation team and is one of Rust’s core developers. A frequent speaker and a prolific open source contributor, he previously worked on projects such as Ruby and Ruby on Rails. Klabnik works at Mozilla. Carol Nichols is a member of the Rust Core Team and co-founder of Integer 32, LLC, the world’s first Rust-focused software consultancy. Nichols organizes the Rust Belt Rust Conference. BRIEF CONTENTS Foreword by Nicholas Matsakis and Aaron Turon Acknowledgments Introduction Chapter 1: Getting Started Chapter 2: Programming a Guessing Game Chapter 3: Common Programming Concepts Chapter 4: Understanding Ownership Chapter 5: Using Structs to Structure Related Data Chapter 6: Enums and Pattern Matching Chapter 7: Using Modules to Reuse and Organize Code Chapter 8: Common Collections Chapter 9: Error Handling Chapter 10: Generic Types, Traits, and Lifetimes Chapter 11: Writing Automated Tests Chapter 12: An I/O Project: Building a Command Line Program Chapter 13: Functional Language Features: Iterators and Closures Chapter 14: More About Cargo and Crates.io Chapter 15: Smart Pointers Chapter 16: Fearless Concurrency Chapter 17: Object-Oriented Programming Features of Rust Chapter 18: Patterns and Matching Chapter 19: Advanced Features Chapter 20: Final Project: Building a Multithreaded Web Server Appendix A: Keywords Appendix B: Operators and Symbols Appendix C: Derivable Traits Appendix D: Macros Index CONTENTS IN DETAIL FOREWORD by Nicholas Matsakis and Aaron Turon ACKNOWLEDGMENTS INTRODUCTION Who Rust Is For Teams of Developers Students Companies Open Source Developers People Who Value Speed and Stability Who This Book Is For How to Use This Book Resources and How to Contribute to This Book 1 GETTING STARTED Installation Installing rustup on Linux or macOS Installing rustup on Windows Updating and Uninstalling Troubleshooting Local Documentation Hello, World!

Then you’ll move on to more advanced concepts, such as: • Ownership and borrowing, lifetimes, and traits • Using Rust’s memory safety guarantees to build fast, safe programs • Testing, error handling, and effective refactoring • Generics, smart pointers, multithreading, trait objects, and advanced pattern matching • Using Cargo, Rust’s built-in package manager, to build, test, and document your code and manage dependencies • How best to use Rust’s advanced compiler with compiler-led programming techniques You’ll find plenty of code examples throughout the book as well as three chapters dedicated to building complete projects designed to test your learning: a number guessing game, a Rust implementation of a command line tool, and a multithreaded server. ABOUT THE AUTHORS Steve Klabnik leads the Rust documentation team and is one of Rust’s core developers. A frequent speaker and prolific open source contributor, he previously worked on projects such as Ruby and Ruby on Rails. Klabnik works at Mozilla. Carol Nichols is a member of the Rust Core Team and co-founder of Integer 32, LLC, the world’s first Rust-focused software consultancy. Nichols organizes the Rust Belt Rust Conference. THE FINEST IN GEEK ENTERTAINMENT™ www.nostarch.com


pages: 536 words: 73,482

Programming Clojure by Stuart Halloway, Aaron Bedra

continuous integration, en.wikipedia.org, functional programming, general-purpose programming language, Gödel, Escher, Bach, Paul Graham, Ruby on Rails, type inference, web application

The :keys destructuring after defpage is dealing with the arguments passed in from the browser. session/remove! does exactly what you think it might do. The interesting bits start with session/flash-put!. This will add something to the session for the request immediately following to consume, and then it will disappear. It is similar to the Ruby on Rails flash method. Finally, the render function calls the route with the arguments that follow. With just a few modifications, we will be ready to give the game a try. Our / route needs to be able to accept the arguments that it is passed via the call to render that we just wrote. Let’s fix that.


pages: 924 words: 196,343

JavaScript & jQuery: The Missing Manual by David Sawyer McFarland

Firefox, framing effect, functional programming, HyperCard, information retrieval, Ruby on Rails, Steve Jobs, web application

A version specifically for JavaScript developers is also available (www.eclipse.org/downloads/packages/eclipse-ide-javascript-web-developers/indigor), as well as Eclipse plug-ins to add autocomplete for jQuery (http://marketplace.eclipse.org/category/free-tagging/jquery). Aptana Studio (Windows, Linux, Mac; www.aptana.org) is a powerful, free coding environment with tools for working with HTML, CSS, JavaScript, PHP, and Ruby on Rails. Commercial Software Commercial website development programs range from inexpensive text editors to complete website construction tools with all the bells and whistles: EditPlus (Windows, www.editplus.com) is an inexpensive ($35) text editor that includes syntax-coloring, FTP, auto-completion, and other wrist-saving features.

UP TO SPEED: The Client Side vs. the Server Side JavaScript is a client-side language, which (in English) means that it works inside a web browser. The alternative type of web programming language is called a server-side language, which you’ll find in pages built around PHP, .NET, ASP, ColdFusion, Ruby on Rails, and other web server technologies. Server-side programming languages, as the name suggests, run on a web server. They can exhibit a lot of intelligence by accessing databases, processing credit cards, and sending email around the globe. The problem with server-side languages is that they require the web browser to send requests to the web server, forcing visitors to wait until a new page arrives with new information.


pages: 282 words: 81,873

Live Work Work Work Die: A Journey Into the Savage Heart of Silicon Valley by Corey Pein

23andMe, 4chan, affirmative action, Affordable Care Act / Obamacare, Airbnb, Amazon Mechanical Turk, Anne Wojcicki, artificial general intelligence, bank run, barriers to entry, Benevolent Dictator For Life (BDFL), Bernie Sanders, bitcoin, Bitcoin Ponzi scheme, Build a better mousetrap, California gold rush, cashless society, colonial rule, computer age, cryptocurrency, data is the new oil, disruptive innovation, Donald Trump, Douglas Hofstadter, Elon Musk, Extropian, gig economy, Google bus, Google Glasses, Google X / Alphabet X, hacker house, hive mind, illegal immigration, immigration reform, independent contractor, Internet of things, invisible hand, Isaac Newton, Jeff Bezos, job automation, Kevin Kelly, Khan Academy, Law of Accelerating Returns, Lean Startup, life extension, Lyft, Mahatma Gandhi, Marc Andreessen, Mark Zuckerberg, Menlo Park, minimum viable product, move fast and break things, move fast and break things, mutually assured destruction, obamacare, passive income, patent troll, Paul Graham, peer-to-peer lending, Peter H. Diamandis: Planetary Resources, Peter Thiel, platform as a service, Plutocrats, plutocrats, Ponzi scheme, post-work, Ray Kurzweil, regulatory arbitrage, rent control, RFID, Robert Mercer, rolodex, Ronald Reagan, Ross Ulbricht, Ruby on Rails, Sam Altman, Sand Hill Road, Scientific racism, self-driving car, sharing economy, side project, Silicon Valley, Silicon Valley startup, Singularitarianism, Skype, Snapchat, social software, software as a service, source of truth, South of Market, San Francisco, Startup school, stealth mode startup, Steve Bannon, Steve Jobs, Steve Wozniak, TaskRabbit, technological singularity, technoutopianism, telepresence, too big to fail, Travis Kalanick, tulip mania, Uber for X, uber lyft, ubercab, upwardly mobile, Vernor Vinge, X Prize, Y Combinator

I reinterpreted my failure as a character-building experience. But something else was going on with this self-guided tutelage. I wasn’t just changing careers and jumping on the “learn to code” bandwagon. I was being steadily indoctrinated in a specious ideology. As proud as I was of having learned “valuable” new skills—I could deploy a Ruby on Rails application! I could manage a virtual server!—I didn’t understand that the only way to turn those skills into a livelihood was to embrace the economy of the digital world, where giant corporations wrote the rules. As an eager website proprietor and aspiring journopreneur, I was like a stockyard calf who thought he owned the farm.


pages: 315 words: 85,791

Technical Blogging: Turn Your Expertise Into a Remarkable Online Presence by Antonio Cangiano

23andMe, Albert Einstein, anti-pattern, bitcoin, bounce rate, cloud computing, en.wikipedia.org, John Gruber, Kickstarter, Lean Startup, Network effects, revision control, Ruby on Rails, search engine result page, slashdot, software as a service, web application

Instead of listing articles, come up with a main theme for your blog, then list ten relevant topics that you are passionate about and have some degree of expertise in. For example, if you’re dealing with a blog about web development as your main theme, you might write down the following topics: Ruby on Rails HTML5/CSS3 JavaScript/CoffeeScript Ajax Deployment Scaling web applications Security issues NoSQL databases UI/UX/Usability Using and creating RESTful APIs As you can see, these are very broad topics, each of which would roughly correspond to different categories for your blog.


pages: 296 words: 83,254

After the Gig: How the Sharing Economy Got Hijacked and How to Win It Back by Juliet Schor, William Attwood-Charles, Mehmet Cansoy

1960s counterculture, Airbnb, Amazon Mechanical Turk, American Legislative Exchange Council, back-to-the-land, barriers to entry, carbon footprint, cleantech, collaborative consumption, collaborative economy, Community Supported Agriculture, Covid-19, COVID-19, creative destruction, crowdsourcing, deskilling, en.wikipedia.org, financial independence, future of work, George Gilder, gig economy, global supply chain, global village, haute cuisine, income inequality, independent contractor, information asymmetry, Intergovernmental Panel on Climate Change (IPCC), Jean Tirole, Jeff Bezos, jitney, job satisfaction, Kevin Kelly, Lyft, Marshall McLuhan, Mason jar, mass incarceration, Mitch Kapor, Network effects, new economy, New Urbanism, Occupy movement, peer-to-peer rental, Post-Keynesian economics, precariat, profit maximization, profit motive, race to the bottom, regulatory arbitrage, rent-seeking, ride hailing / ride sharing, Ruby on Rails, selection bias, sharing economy, Silicon Valley, Silicon Valley ideology, Skype, smart cities, Stewart Brand, TaskRabbit, technoutopianism, Telecommunications Act of 1996, The Nature of the Firm, the payments system, Tragedy of the Commons, transaction costs, transportation-network company, Travis Kalanick, two-sided market, Uber and Lyft, Uber for X, uber lyft, urban planning, wage slave, walking around money, Whole Earth Catalog, women in the workforce, working poor, Yochai Benkler, Zipcar

But, he explained, it’s “absolutely mentally exhausting to keep up all these projects and this farce about my living situation.” Josh felt that TaskRabbit is “actually really a race to the bottom.” He recounted one of his clients telling him, “It’s almost exploitative the things she can get people to do for ten dollars.” Josh had big plans for his future. He was going to learn the software program Ruby on Rails, which he was counting on to allow him to “walk right into a minimum $80,000 a year job. Which solves all of my problems.” His optimism for the future belied the riskiness of the life he had been living: “It’s like I’m going to die because I’m not going to buy food, or I’m going to freeze to death in the wintertime. . . .


pages: 282 words: 85,658

Ask Your Developer: How to Harness the Power of Software Developers and Win in the 21st Century by Jeff Lawson

Airbnb, AltaVista, Amazon Web Services, barriers to entry, big data - Walmart - Pop Tarts, big-box store, bitcoin, business process, call centre, Chuck Templeton: OpenTable:, cloud computing, coronavirus, Covid-19, COVID-19, create, read, update, delete, cryptocurrency, David Heinemeier Hansson, DevOps, Elon Musk, financial independence, global pandemic, global supply chain, Internet of things, Jeff Bezos, Lean Startup, loose coupling, Lyft, Marc Andreessen, Mark Zuckerberg, microservices, minimum viable product, Mitch Kapor, move fast and break things, move fast and break things, Paul Graham, peer-to-peer, ride hailing / ride sharing, risk tolerance, Ruby on Rails, side project, Silicon Valley, Silicon Valley startup, Skype, software as a service, software is eating the world, sorting algorithm, Startup school, Steve Ballmer, Steve Jobs, Telecommunications Act of 1996, Toyota Production System, transaction costs, transfer pricing, Uber and Lyft, uber lyft, ubercab, web application, Y Combinator

A great example of how to do this is Basecamp, a small but thriving software company in Chicago with about sixty employees. Jason Fried and his cofounder, David Heinemeier Hansson, run Basecamp almost like a laboratory dedicated to studying new ways of working that will make employees happy and enable them to do their best work. David, known as DHH, is a software developer who became famous after creating Ruby on Rails, a widely used web development framework. But he and Jason also do a lot of thinking and writing about the subject of work itself. Together, they’ve published two books about software development and three books about the modern workplace, titled Remote, Rework, and It Doesn’t Have to Be Crazy at Work.


Seeking SRE: Conversations About Running Production Systems at Scale by David N. Blank-Edelman

Affordable Care Act / Obamacare, algorithmic trading, Amazon Web Services, backpropagation, bounce rate, business continuity plan, business process, cloud computing, cognitive bias, cognitive dissonance, commoditize, continuous integration, crowdsourcing, dark matter, database schema, Debian, defense in depth, DevOps, domain-specific language, en.wikipedia.org, fault tolerance, fear of failure, friendly fire, game design, Grace Hopper, information retrieval, Infrastructure as a Service, Internet of things, invisible hand, iterative process, Kubernetes, loose coupling, Lyft, Marc Andreessen, microaggression, microservices, minimum viable product, MVC pattern, performance metric, platform as a service, pull request, RAND corporation, remote working, Richard Feynman, risk tolerance, Ruby on Rails, search engine result page, self-driving car, sentiment analysis, Silicon Valley, single page application, Snapchat, software as a service, software is eating the world, source of truth, the scientific method, Toyota Production System, web application, WebSocket, zero day

How to Apply SRE Principles Without Dedicated SRE Teams Björn Rabenstein and Matthias Rampke, SoundCloud Ltd. Often, mid-sized organizations find themselves in a position in which a relatively small number of engineers must develop and run a relatively large number of diverse features. SoundCloud has grown into exactly that situation. With each new feature added to the original monolithic Ruby on Rails code base, adding the next feature became more difficult. So around 2012, we began a gradual move to a microservices architecture. SoundCloud engineers have talked a lot about the various challenges that needed to be tackled for such a move to succeed.1 In this chapter, we explore lessons learned from reliably running hundreds of services at SoundCloud with a much smaller number of engineers.

As part of the Systems and Production Engineering teams, he has been operating, debugging, and frequently restarting the glue that holds SoundCloud together since 2013. 1 The SoundCloud backstage blog is a good starter to learn more. 2 Site Reliability Engineering: How Google Runs Production Systems, Chapter 11. 3 Ibid., Introduction (p. 125). 4 Ibid., Chapter 5 5 Because of our background in Ruby, we chose Chef for configuration management early on. Ruby services were usually deployed using Capistrano. As we began experimenting with alternatives to the Ruby on Rails monolith, many more technologies and methods came into play. 6 Site Reliability Engineering: How Google Runs Production Systems, Figure 3-1. 7 Site Reliability Engineering: How Google Runs Production Systems, Chapter 15. 8 Site Reliability Engineering: How Google Runs Production Systems, Chapters 1 and 3. 9 Site Reliability Engineering: How Google Runs Production Systems, Chapter 1 (p. 7). 10 Ben Treynor in Site Reliability Engineering: How Google Runs Production Systems, Chapter 1 Chapter 7.


pages: 332 words: 93,672

Life After Google: The Fall of Big Data and the Rise of the Blockchain Economy by George Gilder

23andMe, Airbnb, Alan Turing: On Computable Numbers, with an Application to the Entscheidungsproblem, Albert Einstein, AltaVista, Amazon Web Services, Asilomar, augmented reality, Ben Horowitz, bitcoin, Bitcoin Ponzi scheme, blockchain, Bob Noyce, British Empire, Brownian motion, Burning Man, business process, butterfly effect, carbon footprint, cellular automata, Claude Shannon: information theory, Clayton Christensen, cloud computing, computer age, computer vision, crony capitalism, cross-subsidies, cryptocurrency, Danny Hillis, disintermediation, distributed ledger, don't be evil, Donald Knuth, Donald Trump, double entry bookkeeping, Elon Musk, Erik Brynjolfsson, Ethereum, ethereum blockchain, fault tolerance, fiat currency, Firefox, first square of the chessboard, first square of the chessboard / second half of the chessboard, floating exchange rates, Fractional reserve banking, game design, George Gilder, Google Earth, Google Glasses, Google Hangouts, index fund, inflation targeting, informal economy, Internet of things, Isaac Newton, iterative process, Jaron Lanier, Jeff Bezos, Joan Didion, John Markoff, John von Neumann, Julian Assange, Kevin Kelly, Law of Accelerating Returns, Marc Andreessen, Mark Zuckerberg, means of production, Menlo Park, Metcalfe’s law, Money creation, money: store of value / unit of account / medium of exchange, move fast and break things, move fast and break things, Network effects, new economy, Norbert Wiener, Oculus Rift, PageRank, pattern recognition, Paul Graham, peer-to-peer, Peter Thiel, Ponzi scheme, prediction markets, quantitative easing, random walk, ransomware, Ray Kurzweil, Renaissance Technologies, Robert Mercer, Robert Metcalfe, Ronald Coase, Ross Ulbricht, Ruby on Rails, Sand Hill Road, Satoshi Nakamoto, Search for Extraterrestrial Intelligence, self-driving car, sharing economy, Silicon Valley, Silicon Valley ideology, Silicon Valley startup, Singularitarianism, Skype, smart contracts, Snapchat, software is eating the world, sorting algorithm, South Sea Bubble, speech recognition, Stephen Hawking, Steve Jobs, Steven Levy, Stewart Brand, stochastic process, telepresence, Tesla Model S, theory of mind, Tim Cook: Apple, transaction costs, tulip mania, Turing complete, Turing machine, Vernor Vinge, Von Neumann architecture, Watson beat the top human players on Jeopardy!, WikiLeaks, Y Combinator, zero-sum game

Likewise, all the other blockchain or hashchain prophets—from Dan Larimer at EOS to David Sønstebø at IOTA to Leemon Baird at Hashgraph and Mike Hearn at R3—deploy trusted third parties, elected “witnesses,” delegated stakeholders, “reputable institutions,” corporate consortia, mining pools, righteous regulators, or intervening “coordinators” somewhere to make the system work. Stinchcombe points out that “smart contracts” merely move the point of trust from lawyers writing quasi-English sentences in small print to software engineers on GitHub writing unintelligible code in one of scores of exotic languages. Solidity, anyone? Ruby-on-Rails? PHP? Haskell? Python? Except to an elite of crypto punk coders (you know them, those super-smart guys with pony tails, conspiratorial maze-minds, and a dazed belief that the world may well be an alien simulation), smart contracts are the ultimate in opacity. To everyone but the coders, “open source” is merely a fancy form of extremely secret sauce.


pages: 309 words: 96,168

Masters of Scale: Surprising Truths From the World's Most Successful Entrepreneurs by Reid Hoffman, June Cohen, Deron Triff

23andMe, 3D printing, Airbnb, Anne Wojcicki, Ben Horowitz, bitcoin, Broken windows theory, Burning Man, call centre, chief data officer, clean water, collaborative consumption, Covid-19, COVID-19, crowdsourcing, desegregation, Elon Musk, financial independence, gender pay gap, hockey-stick growth, Internet of things, knowledge economy, late fees, Lean Startup, lone genius, Mark Zuckerberg, minimum viable product, move fast and break things, move fast and break things, Network effects, Paul Graham, Peter Thiel, polynesian navigation, race to the bottom, remote working, RFID, Ronald Reagan, Rubik’s Cube, Ruby on Rails, Sam Altman, Silicon Valley, Silicon Valley startup, Steve Jobs, TaskRabbit, the scientific method, Tim Cook: Apple, Travis Kalanick, two and twenty, Y Combinator, zero day, Zipcar

It’s not that there wasn’t e-commerce software, but it was just all basically user-hostile database editors, at best. It was so clear that no one who’s ever run a retail business had had any part in building these pieces of software.” Tobi decided that the best option was to just build his own software from scratch. “I found Ruby on Rails, a new technology which I really liked, and did the day-and-night thing, probably working sixteen hours a day for a couple months,” he says. Tobi coded the entire website from the ground up, and finally launched his snowboard store. “It ended up working really, really well. I started selling all across the United States and Canada, and some to Europe as well,” he recalls.


pages: 361 words: 107,461

How I Built This: The Unexpected Paths to Success From the World's Most Inspiring Entrepreneurs by Guy Raz

"side hustle", Airbnb, Apple II, barriers to entry, Bear Stearns, Ben Horowitz, big-box store, call centre, Clayton Christensen, commoditize, Credit Default Swap, crowdsourcing, East Village, El Camino Real, Elon Musk, fear of failure, glass ceiling, housing crisis, inventory management, iterative process, James Dyson, Jeff Bezos, Justin.tv, Kickstarter, low cost airline, Lyft, Marc Andreessen, Mark Zuckerberg, move fast and break things, move fast and break things, Nate Silver, Paul Graham, Peter Thiel, pets.com, rolodex, Ronald Reagan, Ruby on Rails, Sam Altman, Sand Hill Road, Silicon Valley, software as a service, South of Market, San Francisco, Steve Jobs, Steve Wozniak, The Signal and the Noise by Nate Silver, Tony Hsieh, Uber for X, uber lyft, Y Combinator, Zipcar

“All the offers were conditional on moving the company to Silicon Valley,” Tobi said. This was a nonstarter for reasons wholly unrelated to the bus­iness. “I am fundamentally suspicious of orthodoxy,” Tobi said. A claim evidenced in his decision a few years earlier to build e‑com­merce software from scratch, and then to abandon Java for Ruby on Rails as the programming language with which to build it. “I don’t react very well to people telling me what to do,” Tobi said of the various VC offers he’d received, “so I pretty much tried to figure out a way to not have to move.” That probably sounds like an epic level of stubbornness, considering that for about six months out of the year, Ottawa is not what one might call a fun, easy place to live.


pages: 461 words: 106,027

Zero to Sold: How to Start, Run, and Sell a Bootstrapped Business by Arvid Kahl

"side hustle", business process, centre right, Chuck Templeton: OpenTable:, continuous integration, coronavirus, Covid-19, COVID-19, crowdsourcing, domain-specific language, financial independence, functional programming, Google Chrome, hockey-stick growth, if you build it, they will come, information asymmetry, information retrieval, inventory management, Jeff Bezos, job automation, Kubernetes, minimum viable product, Network effects, performance metric, post-work, premature optimization, risk tolerance, Ruby on Rails, sentiment analysis, Silicon Valley, software as a service, source of truth, statistical model, subscription business, sunk-cost fallacy, supply-chain management, trickle-down economics, web application

You'll have to frantically correct the change manually. Under stress, this can lead to errors from which you may not be able to recover. Having migration logic in place that can go both ways makes it possible to release database-related changes very safely. Many web development frameworks like Ruby on Rails and Elixir/Phoenix have this feature built-in, but you need to know how to use it. Making bidirectional migrations a part of your release flow from the start will save you from a lot of potential trouble further down the road. Automate the process. You will benefit immensely from removing manual steps from the release process.


pages: 373 words: 112,822

The Upstarts: How Uber, Airbnb, and the Killer Companies of the New Silicon Valley Are Changing the World by Brad Stone

Affordable Care Act / Obamacare, Airbnb, Amazon Web Services, Andy Kessler, autonomous vehicles, Ben Horowitz, Boris Johnson, Burning Man, call centre, Chuck Templeton: OpenTable:, collaborative consumption, East Village, fixed income, Google X / Alphabet X, hockey-stick growth, housing crisis, inflight wifi, Jeff Bezos, Justin.tv, Kickstarter, Lyft, Marc Andreessen, Mark Zuckerberg, Menlo Park, Mitch Kapor, Necker cube, obamacare, Paul Graham, peer-to-peer, Peter Thiel, race to the bottom, rent control, ride hailing / ride sharing, Ruby on Rails, San Francisco homelessness, Sand Hill Road, self-driving car, semantic web, sharing economy, side project, Silicon Valley, Silicon Valley startup, Skype, South of Market, San Francisco, Startup school, Steve Jobs, TaskRabbit, Tony Hsieh, transportation-network company, Travis Kalanick, Uber and Lyft, Uber for X, uber lyft, ubercab, Y Combinator, Y2K, Zipcar

To understand the spark that finally ignited the Airbnb inferno, it’s imperative to explore the background of Nathan Blecharczyk, the tall, seemingly unflappable engineer of the group, the co-founder who always stayed behind while his partners traveled the world. Blecharczyk was twenty-four at this point but was already a technical wizard. He had coded the entire site himself, using what was then a new open-source programming language called Ruby on Rails. He devised a flexible, global payment system that allowed Airbnb to collect fees from guests and then remit them to hosts, minus the company’s commission, using a variety of online services such as PayPal. He had also presciently hosted the site on the nascent Amazon Web Services, a division of the e-commerce giant that allowed companies to rent remote Amazon servers via the internet only when they needed them, a huge cost savings and efficiency advantage that would power an entire wave of new businesses.


pages: 394 words: 118,929

Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software by Scott Rosenberg

A Pattern Language, Benevolent Dictator For Life (BDFL), Berlin Wall, Bill Atkinson, c2.com, call centre, collaborative editing, conceptual framework, continuous integration, Donald Knuth, Douglas Engelbart, Douglas Engelbart, Douglas Hofstadter, Dynabook, en.wikipedia.org, Firefox, Ford paid five dollars a day, Francis Fukuyama: the end of history, functional programming, George Santayana, Grace Hopper, Guido van Rossum, Gödel, Escher, Bach, Howard Rheingold, HyperCard, index card, Internet Archive, inventory management, Jaron Lanier, John Markoff, John von Neumann, knowledge worker, Larry Wall, life extension, Loma Prieta earthquake, Menlo Park, Merlin Mann, Mitch Kapor, new economy, Nicholas Carr, Norbert Wiener, pattern recognition, Paul Graham, Potemkin village, RAND corporation, Ray Kurzweil, Richard Stallman, Ronald Reagan, Ruby on Rails, semantic web, side project, Silicon Valley, Singularitarianism, slashdot, software studies, source of truth, South of Market, San Francisco, speech recognition, stealth mode startup, stem cell, Stephen Hawking, Steve Jobs, Stewart Brand, Ted Nelson, Therac-25, thinkpad, Turing test, VA Linux, Vannevar Bush, Vernor Vinge, web application, Whole Earth Catalog, Y2K

But in the course of building Basecamp, Hansson had written some useful and innovative code that streamlined and simplified the basic chores that all Web applications had to perform in the course of storing and retrieving data. After Basecamp’s launch, he and 37 Signals decided to take that work and release it as an open source platform called Ruby on Rails. Rails, as it came to be called, made writing Web applications easier, in part by limiting the programmer’s options. “Flexibility is overrated. Constraints are liberating,” Hansson says. And Rails was ready-made for the AJAX-style interface enhancements that were making those Web-based programs credible competition to their desktop equivalents.


pages: 960 words: 125,049

Mastering Ethereum: Building Smart Contracts and DApps by Andreas M. Antonopoulos, Gavin Wood Ph. D.

Amazon Web Services, bitcoin, blockchain, continuous integration, cryptocurrency, Debian, Dogecoin, domain-specific language, don't repeat yourself, Edward Snowden, en.wikipedia.org, Ethereum, ethereum blockchain, fault tolerance, fiat currency, Firefox, functional programming, Google Chrome, intangible asset, Internet of things, litecoin, move fast and break things, move fast and break things, node package manager, peer-to-peer, Ponzi scheme, prediction markets, pull request, QR code, Ruby on Rails, Satoshi Nakamoto, sealed-bid auction, sharing economy, side project, smart contracts, transaction costs, Turing complete, Turing machine, Vickrey auction, web application, WebSocket

/contracts/Faucet.sol... Compiling ./contracts/Migrations.sol... Writing artifacts to ./build/contracts Truffle migrations — understanding deployment scripts Truffle offers a deployment system called a migration. If you have worked in other frameworks, you may have seen something similar: Ruby on Rails, Python Django, and many other languages and frameworks have a migrate command. In all those frameworks, the purpose of a migration is to handle changes in the data schema between different versions of the software. The purpose of migrations in Ethereum is slightly different. Because Ethereum contracts are immutable and cost gas to deploy, Truffle offers a migration mechanism to keep track of which contracts (and which versions) have already been deployed.


pages: 468 words: 124,573

How to Build a Billion Dollar App: Discover the Secrets of the Most Successful Entrepreneurs of Our Time by George Berkowski

Airbnb, Amazon Web Services, barriers to entry, Black Swan, business intelligence, call centre, crowdsourcing, disruptive innovation, en.wikipedia.org, game design, Google Glasses, Google Hangouts, Google X / Alphabet X, iterative process, Jeff Bezos, Jony Ive, Kickstarter, knowledge worker, Lean Startup, loose coupling, Marc Andreessen, Mark Zuckerberg, minimum viable product, MITM: man-in-the-middle, move fast and break things, move fast and break things, Network effects, Oculus Rift, Paul Graham, QR code, Ruby on Rails, self-driving car, Silicon Valley, Silicon Valley startup, Skype, Snapchat, social graph, software as a service, software is eating the world, Steve Jobs, Steven Levy, Travis Kalanick, ubercab, Y Combinator

If you use these guys to develop your app you will have no control over your app architecture, the quality of code and much else. Pointless if you’re trying to build a technology company. And very expensive. DEVELOPMENT AGENCIES. These are the interesting agencies. In effect they specialise in delivering software. They are usually focused on specific technology platforms, such as Ruby on Rails, PHP and Android development. They will help you on all levels: from architecture and database design, to API development, to app development and testing. They can be useful to fill in technology or skill gaps – but, as we’ve seen, they need strong direction. There are truly spectacular companies in the UK – such as Thoughtworks – that charge truly eye-popping day rates, but the further you voyage, the more cost-effective they can be.


pages: 499 words: 144,278

Coders: The Making of a New Tribe and the Remaking of the World by Clive Thompson

2013 Report for America's Infrastructure - American Society of Civil Engineers - 19 March 2013, 4chan, 8-hour work day, Ada Lovelace, AI winter, Airbnb, algorithmic bias, Amazon Web Services, Asperger Syndrome, augmented reality, Ayatollah Khomeini, backpropagation, barriers to entry, basic income, Bernie Sanders, bitcoin, blockchain, blue-collar work, Brewster Kahle, Brian Krebs, Broken windows theory, call centre, cellular automata, Chelsea Manning, clean water, cloud computing, cognitive dissonance, computer vision, Conway's Game of Life, crowdsourcing, cryptocurrency, Danny Hillis, David Heinemeier Hansson, disinformation, don't be evil, don't repeat yourself, Donald Trump, dumpster diving, Edward Snowden, Elon Musk, Erik Brynjolfsson, Ernest Rutherford, Ethereum, ethereum blockchain, Firefox, Frederick Winslow Taylor, game design, glass ceiling, Golden Gate Park, Google Hangouts, Google X / Alphabet X, Grace Hopper, Guido van Rossum, Hacker Ethic, hockey-stick growth, HyperCard, Ian Bogost, illegal immigration, ImageNet competition, Internet Archive, Internet of things, Jane Jacobs, John Markoff, Jony Ive, Julian Assange, Kickstarter, Larry Wall, lone genius, Lyft, Marc Andreessen, Mark Shuttleworth, Mark Zuckerberg, Menlo Park, microservices, Minecraft, move fast and break things, move fast and break things, Nate Silver, Network effects, neurotypical, Nicholas Carr, Oculus Rift, PageRank, pattern recognition, Paul Graham, paypal mafia, Peter Thiel, pink-collar, planetary scale, profit motive, ransomware, recommendation engine, Richard Stallman, ride hailing / ride sharing, Rubik’s Cube, Ruby on Rails, Sam Altman, Satoshi Nakamoto, Saturday Night Live, self-driving car, side project, Silicon Valley, Silicon Valley ideology, Silicon Valley startup, single-payer health, Skype, smart contracts, Snapchat, social software, software is eating the world, sorting algorithm, South of Market, San Francisco, speech recognition, Steve Wozniak, Steven Levy, TaskRabbit, the High Line, Travis Kalanick, Uber and Lyft, Uber for X, uber lyft, universal basic income, urban planning, Wall-E, Watson beat the top human players on Jeopardy!, WeWork, WikiLeaks, women in the workforce, Y Combinator, Zimmermann PGP, éminence grise

But it certainly isn’t hard to find stories of flat-out sexism and boiler-room boys’-club behavior, either. There was the female coder who told me of being assaulted in the offices of a well-known, bold-face tech firm. There’s the penchant coders have for including porn in their presentations—like the Ruby on Rails coder who put porn images in his slide deck. There was the Ubuntu lead coder who said in a speech that he was excited about their new software release because “we’ll have less trouble explaining to girls what we actually do.” There was the guy who, in a seminar on database queries, illustrated how to optimize queries with the example of ranking women by “hotness”—“WHERE sex=‘F’AND hotness>0 ORDER BY age LIMIT 10.”


pages: 579 words: 160,351

Breaking News: The Remaking of Journalism and Why It Matters Now by Alan Rusbridger

accounting loophole / creative accounting, Airbnb, Andy Carvin, banking crisis, Bernie Sanders, Boris Johnson, centre right, Chelsea Manning, citizen journalism, cross-subsidies, crowdsourcing, David Attenborough, David Brooks, death of newspapers, Donald Trump, Doomsday Book, Double Irish / Dutch Sandwich, Downton Abbey, Edward Snowden, Etonian, Filter Bubble, forensic accounting, Frank Gehry, future of journalism, G4S, high net worth, invention of movable type, invention of the printing press, Jeff Bezos, jimmy wales, Julian Assange, Mark Zuckerberg, Menlo Park, natural language processing, New Journalism, offshore financial centre, oil shale / tar sands, open borders, packet switching, Panopticon Jeremy Bentham, pre–internet, ransomware, recommendation engine, Ruby on Rails, sexual politics, Silicon Valley, Skype, Snapchat, social web, Socratic dialogue, sovereign wealth fund, speech recognition, Steve Bannon, Steve Jobs, The Wisdom of Crowds, Tim Cook: Apple, traveling salesman, upwardly mobile, WikiLeaks, Yochai Benkler

You might think you understood data, only to learn it was now all about structured data. You’d crack your platform strategy only for Mark Zuckerberg to change his mind. Joanna Geary,10 whom we’d hired in 2011 to look after social media, posted on Facebook in late 2017: About 10 years ago I thought I might need to learn Ruby on Rails [to build web apps] to understand what’s going on in journalism. Then, about 5 years after that, I thought I might need an MBA. Now, the qualifications I need are probably in: Computer Science Data Science Natural Language Processing Graph Analysis Advanced Critical Thinking Anthropology Behavioural Sciences Product Management Business Administration Social Psychology Coaching & People Development Change Management I think I need to lie down . . .


pages: 834 words: 180,700

The Architecture of Open Source Applications by Amy Brown, Greg Wilson

8-hour work day, anti-pattern, bioinformatics, c2.com, cloud computing, collaborative editing, combinatorial explosion, computer vision, continuous integration, create, read, update, delete, David Heinemeier Hansson, Debian, domain-specific language, Donald Knuth, en.wikipedia.org, fault tolerance, finite state, Firefox, friendly fire, functional programming, Guido van Rossum, linked data, load shedding, locality of reference, loose coupling, Mars Rover, MITM: man-in-the-middle, MVC pattern, peer-to-peer, Perl 6, premature optimization, recommendation engine, revision control, Ruby on Rails, side project, Skype, slashdot, social web, speech recognition, the scientific method, The Wisdom of Crowds, web application, WebSocket

This would not be possible in traditional open source projects, where most conversation takes place on IRC and mailing lists and the wiki (if present) is only used for documentations and links to development resources. For a newcomer, it's much more difficult to reconstruct context from unstructured IRC logs and mail archives. 19.8.3. Embrace Time Zone Differences David Heinemeier Hansson, creator of Ruby on Rails, once remarked on the benefit of distributed teams when he first joined 37signals. "The seven time zones between Copenhagen and Chicago actually meant that we got a lot done with few interruptions." With nine time zones between Taipei and Palo Alto, that was true for us during SocialCalc's development as well.


pages: 671 words: 228,348

Pro AngularJS by Adam Freeman

business process, create, read, update, delete, en.wikipedia.org, Google Chrome, information retrieval, inventory management, MVC pattern, place-making, premature optimization, revision control, Ruby on Rails, single page application, web application

Some of the fine detail of the original MVC pattern was tied to Smalltalk-specific concepts, such as screens and tools, but the broader ideas are still applicable to applications, and they are especially well-suited to web applications. The MVC pattern first took hold in the server-side end of web development, through toolkits like Ruby on Rails and the ASP.NET MVC Framework. In recent years, the MVC pattern has been seen as a way to manage the growing richness and complexity of client-side web development as well, and it is in this environment that AngularJS has emerged. The key to applying the MVC pattern is to implement the key premise of a separation of concerns, in which the data model in the application is decoupled from the business and presentation logic.


PostGIS in Action by Regina O. Obe, Leo S. Hsu

call centre, crowdsourcing, database schema, Debian, domain-specific language, en.wikipedia.org, Firefox, functional programming, Google Earth, job automation, McMansion, Mercator projection, Network effects, openstreetmap, planetary scale, profit maximization, Ruby on Rails, Skype, South of Market, San Francisco, traveling salesman, web application

EnterpriseDB one-click installers will work for any desktop Linux system (32-bit and 64-bit), Windows 32-bit and 64-bit systems (2000, XP, 2003, 2008), and Mac OS X. The installer comes with the following prepackaged goods: PostgreSQL Server pgAdmin III (GUI database administration tool) Application StackBuilder—Allows you to install PostgreSQL add-ons such as PostGIS, JDBC, and ODBC, plus application development environments such as Apache and Ruby on Rails, the PostgreSQL Tuning Wizard (to help you quickly configure memory and other settings for your desired profile), and the MySQL Migration Wizard (requires Java to be installed) Turn off User Account Control If you run into issues installing on Windows, try turning off User Account Control (UAC) located in Control Panel > User Accounts.


Engineering Security by Peter Gutmann

active measures, algorithmic trading, Amazon Web Services, Asperger Syndrome, bank run, barriers to entry, bitcoin, Brian Krebs, business process, call centre, card file, cloud computing, cognitive bias, cognitive dissonance, combinatorial explosion, Credit Default Swap, crowdsourcing, cryptocurrency, Daniel Kahneman / Amos Tversky, Debian, domain-specific language, Donald Davies, Donald Knuth, double helix, en.wikipedia.org, endowment effect, fault tolerance, Firefox, fundamental attribution error, George Akerlof, glass ceiling, GnuPG, Google Chrome, iterative process, Jacob Appelbaum, Jane Jacobs, Jeff Bezos, John Conway, John Markoff, John von Neumann, Kickstarter, lake wobegon effect, Laplace demon, linear programming, litecoin, load shedding, MITM: man-in-the-middle, Network effects, Parkinson's law, pattern recognition, peer-to-peer, Pierre-Simon Laplace, place-making, post-materialism, QR code, race to the bottom, random walk, recommendation engine, RFID, risk tolerance, Robert Metcalfe, Ruby on Rails, Sapir-Whorf hypothesis, Satoshi Nakamoto, security theater, semantic web, Skype, slashdot, smart meter, social intelligence, speech recognition, statistical model, Steve Jobs, Steven Pinker, Stuxnet, sunk-cost fallacy, telemarketer, text mining, the built environment, The Death and Life of Great American Cities, The Market for Lemons, the payments system, Therac-25, too big to fail, Tragedy of the Commons, Turing complete, Turing machine, Turing test, web application, web of trust, x509 certificate, Y2K, zero day, Zimmermann PGP

OpenBSD, a BSD distribution that concentrates specifically on security, has a policy of “no useless buttons” (unfortunately documented only in developer folklore) meaning that if a particular setting is secure and works for 95% of users then that’s what gets used. FreeBSD developer (and originator of the term “bikeshedding” [143]) Poul-Henning Kamp makes the same point in the specific case of security interfaces, pointing out that “each configuration setting or attribute offers the opportunity for user error, which must be minimised” [144]. The Ruby on Rails crowd call this “opinionated software” [145]. User Conditioning 23 Similar philosophies have been adopted by other open-source projects like Gnome, with freedesktop.org founder Havoc Pennington pointing out that the fault with much open-source software is that it’s “configurable so that it has the union of all features anyone’s ever seen in any equivalent application on any other historical platform” [146], something that’s often evident in products arising from design-bycommittee [147].

Now obviously no correctly-implemented web service will be designed to take encrypted data provided by an attacker, decrypt it, and return the decrypted result to the attacker, but although the server may not have been deliberately designed to do this it can often be abused to do so. One examination of the effectiveness of these types of attacks found that a number of popular web development frameworks and web sites, including Ruby on Rails and the Open Web Application Security Project (OWASP) Enterprise Security API (ESAPI), exhibited this problem, allowing an attacker to iteratively recover data encrypted with even the strongest encryption algorithms a block at a time [424][425]. This was later extended to a fairly devastating attack against ASP.NET [426][427][428], and no doubt affects numerous other, less-visible implementations as well.


pages: 496 words: 174,084

Masterminds of Programming: Conversations With the Creators of Major Programming Languages by Federico Biancuzzi, Shane Warden

Benevolent Dictator For Life (BDFL), business intelligence, business process, cellular automata, cloud computing, commoditize, complexity theory, conceptual framework, continuous integration, data acquisition, domain-specific language, Douglas Hofstadter, Fellow of the Royal Society, finite state, Firefox, follow your passion, Frank Gehry, functional programming, general-purpose programming language, Guido van Rossum, HyperCard, information retrieval, iterative process, John von Neumann, Larry Wall, linear programming, loose coupling, Mars Rover, millennium bug, NP-complete, Paul Graham, performance metric, Perl 6, QWERTY keyboard, RAND corporation, randomized controlled trial, Renaissance Technologies, Ruby on Rails, Sapir-Whorf hypothesis, Silicon Valley, slashdot, software as a service, software patent, sorting algorithm, Steve Jobs, traveling salesman, Turing complete, type inference, Valgrind, Von Neumann architecture, web application

There’s a lot of truism to this dream of domain-specific languages, yet we somehow have not found the right vehicle to implement them, I feel like. Yet. So that does remain a challenge. Right now, we’re seeing this interesting resurgence of dynamic programming languages. I actually feel it is really in spite of the languages being dynamic and more because they have great metaprogramming capabilities. Like if you look at Ruby on Rails, it’s all powered by Ruby’s metaprogramming capabilities, not so much the fact that it’s dynamic. It just so happens that eval and metaprogramming are a lot easier in a dynamic language than in a static language. On the other hand, it’s a high price to pay to give up your statement completion and your compile-time error checking and so forth.


pages: 1,201 words: 233,519

Coders at Work by Peter Seibel

Ada Lovelace, Bill Atkinson, bioinformatics, cloud computing, Conway's Game of Life, domain-specific language, don't repeat yourself, Donald Knuth, fault tolerance, Fermat's Last Theorem, Firefox, functional programming, George Gilder, glass ceiling, Guido van Rossum, HyperCard, information retrieval, Larry Wall, loose coupling, Marc Andreessen, Menlo Park, Metcalfe's law, Perl 6, premature optimization, publish or perish, random walk, revision control, Richard Stallman, rolodex, Ruby on Rails, Saturday Night Live, side project, slashdot, speech recognition, the scientific method, Therac-25, Turing complete, Turing machine, Turing test, type inference, Valgrind, web application

Norvig: I think that's true and that's certainly something I see in the younger programmers that are coming out now. Another difference between now and then is it seems like it's much more assembling pieces now rather than writing everything from scratch. Now, for a school assignment, someone says, “OK, I needed a website, so I used Ruby on Rails for this, and I used Drupal for that part, and then I had this Python script, and then I downloaded this statistical routine,” and it's all scripting to put together these pieces rather than writing everything from scratch. So I think understanding interfaces and how they go together is more important than all the details of the insides of these packages.


PostGIS in Action, 2nd Edition by Regina O. Obe, Leo S. Hsu

call centre, crowdsourcing, database schema, Debian, domain-specific language, en.wikipedia.org, Firefox, functional programming, Google Earth, job automation, McMansion, megacity, Mercator projection, Network effects, openstreetmap, planetary scale, profit maximization, Ruby on Rails, Skype, South of Market, San Francisco, traveling salesman, web application

EnterpriseDB one-click installers will work for any desktop Linux system (32-bit and 64-bit), Windows 32-bit and 64-bit systems (2000, XP, 2003, 2008), and Mac OS X. The installer comes with the following prepackaged goods:  PostgreSQL Server  pgAdmin III (GUI database administration tool)  Application StackBuilder—Allows you to install PostgreSQL add-ons such as PostGIS, JDBC, and ODBC, plus application development environments such as Apache and Ruby on Rails, the PostgreSQL Tuning Wizard (to help you quickly configure memory and other settings for your desired profile), and the MySQL Migration Wizard (requires Java to be installed) Turn off User Account Control If you run into issues installing on Windows, try turning off User Account Control (UAC) located in Control Panel > User Accounts.