March 23rd, 2015

The most important election in the history of Israel

Interesting:

I’m not interested in debating the normative side of the election, or various peace plans, right now. What I find striking is how unready many critics are to confront what has happened, not just in the “Plan B” sense but also rhetorically. The possibility that civil rights progress, peace progress, and self-governance and democratic progress simply have stopped, and won’t be back any time soon, is before us. If anything, matters might become worse yet, especially once ...

March 23rd, 2015

Does not globally pollute Array, Hash, Object or AR::Base.

Kaminari is Clean. That is listed as its top feature. What does “clean” mean?

“Does not globally pollute Array, Hash, Object or AR::Base.”

Sure this is an argument against Object Oriented Programming? Doesn’t this make plain data structures seem wonderful?

Oh but wait, it fails the “clean” test in one big way:

Modern

The pagination helper outputs the HTML5 tag by default. Plus, the helper supports Rails 3 unobtrusive Ajax.

Embededed HTML! Fun times! Let’s party like its 1999!

Source

March 23rd, 2015

ActiveRecord scopes

I knew this once, but forgot during the time I have not worked with Rails:

scope(name, body, &block) Link

Adds a class method for retrieving and querying objects. A scope represents a narrowing of a database query, such as where(color: :red).select(‘shirts.*’).includes(:washing_instructions).

class Shirt < ActiveRecord::Base scope :red, -> { where(color: ‘red’) } scope :dry_clean_only, -> { joins(:washing_instructions).where(‘washing_instructions.dry_clean_only = ?’, true) } end

The above calls to scope define class methods Shirt.red and Shirt.dry_clean_only. Shirt.red, in effect, represents the query Shirt.where(color: ‘red’).

You should ...

March 23rd, 2015

Constraints on routes in Rails

I did not know this:

4.2 Specifying Constraints

You can use the :constraints option to specify a required format on the implicit id. For example: resources :photos, constraints: { id: /[A-Z][A-Z][0-9]+/ }

This declaration constrains the :id parameter to match the supplied regular expression. So, in this case, the router would no longer match /photos/1 to this route. Instead, /photos/RR27 would match.

You can specify a single constraint to apply to a number of routes by using the block form:

constraints(id: /[A-Z][A-Z][0-9]+/) do resources ...

March 23rd, 2015

You can’t take my pretty adjectives, damn you

In Strunk and White’s book Elements Of Style we are told that adjectives are bad. But here’s a book that says they are all liars:

http://languagelog.ldc.upenn.edu/nll/?p=18345

They also say that we should not start sentences with “but”. But I look them straight in the eye and say “Make me.”

Source

March 22nd, 2015

I hate dependencies

As an example, I’ll talk about Nokogiri. For years now, every time I have to setup up a Rails project on a new machine, I struggle with the installation of Nokogiri. I usually only do this once or twice a year, which is just enough time for me to forget the details, so I have to go through all the pain again.

Error installing nokogiri Failed to build gem native extension. mkmf.rb can’t find header files ...

March 18th, 2015

Ruby mixins are powerful

A reminder of Ruby’s mixins powers:

I loosely modeled the BigInteger and Number classes after the Java versions. The BigInteger class defines one constructor and directly inherits one method from the Number base class. To mix in the methods implemented in the Stringify and Math modules with the BigInteger class you will note the usage of the include and extend methods, respectively.

# Create a new object bigint1 = BigInteger.new(10) # Call a method inherited from the base class puts bigint1.intValue # ...

March 16th, 2015

The cost of failure

I was sick from 1994 to 2000, so I can relate to this:

Back when I made comics, I lived in a forest. I was poor. I had few options in life. I avoided the topic of college because I didn’t know what I wanted to “do with the rest of my life,” and I didn’t have the money to pay for it. It was much easier to tell myself I wanted to “do what I love, make comics for ...

March 16th, 2015

When strongly stated opinions bring out defensive anger in computer programmers

This reminds me of the reactions I got when I wrote my essay “Object Oriented Programming is an expensive disaster which must end”.

Then he started by banging on everything that didn’t conform to His Way of Doing Things: his process, his tools. Everything else was “stupid,” “dumb,” “moronic.”

I got the impression he was hiding his own fear of inadequacy behind a wall of disapproval and smack talk. I know this method. I used to use it myself, when I ...

March 16th, 2015

PHP is adding types without breaking backwards compatibility

This remark is very true:

If I were a Python developer (of the language itself), I would be paying very close attention to how PHP has handled deprecation and breaking changes.

and:

There’s been an effort with PHP 7 to try and avoid a Python 2/3-style situation. The PHP 5 to 7 jump should be much smaller than from 4 to 5.

and this about PHP:

I think of it as the English language of programming. Picking and choosing all of the best ...

March 16th, 2015

CSS media rules for iPads and iPhones

Interesting rules for screening for iPads and iPhones:

/* default styles here for older browsers. I tend to go for a 600px – 960px width max but using percentages */ @media only screen and (min-width:960px){ /* styles for browsers larger than 960px; */ } @media only screen and (min-width:1440px){ ...

March 16th, 2015

What Rails asset pipeline looks like

It’s interesting to actually look at the paths being managed.

Rails.application.config.assets.paths => [ "/Users/lkrubner/projects/pasha/magstore/app/assets/images",

"/Users/lkrubner/projects/pasha/magstore/app/assets/javascripts",

"/Users/lkrubner/projects/pasha/magstore/app/assets/stylesheets",

"/Users/lkrubner/projects/pasha/magstore/vendor/assets/javascripts",

"/Users/lkrubner/projects/pasha/magstore/vendor/assets/stylesheets",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms_membership-cd49cac06a43/app/assets/images",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms_membership-cd49cac06a43/app/assets/javascripts",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms_membership-cd49cac06a43/app/assets/stylesheets",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms_membership-cd49cac06a43/vendor/assets/javascripts",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/gems/refinerycms-wymeditor-1.0.6/app/assets/images",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/gems/refinerycms-wymeditor-1.0.6/app/assets/javascripts",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/gems/refinerycms-wymeditor-1.0.6/app/assets/stylesheets",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/gems/jquery-ui-rails-5.0.3/app/assets/images",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/gems/jquery-ui-rails-5.0.3/app/assets/javascripts",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/gems/jquery-ui-rails-5.0.3/app/assets/stylesheets",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/core/app/assets/images",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/core/app/assets/javascripts",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/core/app/assets/stylesheets",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/core/vendor/assets/javascripts",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/gems/refinerycms-i18n-3.0.0/app/assets/images",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/gems/jquery-rails-3.1.2/vendor/assets/javascripts",

"/Users/lkrubner/projects/pasha/magstore/vendor/bundle/ruby/2.1.0/gems/coffee-rails-4.0.1/lib/assets/javascripts" ]

Source

March 16th, 2015

Functional design patterns

Interesting:

A good talk (~45 min) on this topic by Stuart Sierra:

http://www.infoq.com/presentations/Clojure-Design-Patterns

Not necessarily binding and authoritative, but I recognized a number of his examples from my own experience using FP for data analysis.

Examples written in Clojure, but likely applicable to any FP language. The names he gives to the patterns he covers are:

State/Event Consequences Accumulator Reduce/Combine Recursive Expansion Pipeline ...

March 16th, 2015

The tech industry reaction against cloud computing

Interesting:

When Matt and Quin founded Swiftype in 2012, they chose to build the company’s infrastructure using Amazon Web Services. The cloud seemed like the best fit because it was easy to add new servers without managing hardware and there were no upfront costs.

Unfortunately, while some of the services (like Route53 and S3) ended up being really useful and incredibly stable for us, the decision to use EC2 created several major problems that plagued the team during our first year.

Swiftype’s ...

March 16th, 2015

Now when confirmation validations fail, the error will be attached to :#{attribute}_confirmation instead of attribute.

Upgrading to Rails 4. I am not sure what this means, so I will leave this note to myself, and come back and read more later.

5.6 Active Model

Rails 4.0 has changed how errors attach with the ActiveModel::Validations::ConfirmationValidator. Now when confirmation validations fail, the error will be attached to :#{attribute}_confirmation instead of attribute.

Rails 4.0 has changed ActiveModel::Serializers::JSON.include_root_in_json default value to false. Now, Active Model Serializers and Active Record objects have the same ...

March 16th, 2015

Rails adds a lot to the $LOAD_PATH I guess I knew this but I was still surprised to look and see how many paths there are in one small Rails project. bundle exec rails c Loading development environment (Rails 4.1.8) irb(main):001:0> puts$LOAD_PATH

/Users/lkrubner/projects/pasha/fiit/lib

/Users/lkrubner/projects/pasha/fiit/vendor

/Users/lkrubner/projects/pasha/fiit/app/assets

/Users/lkrubner/projects/pasha/fiit/app/controllers

/Users/lkrubner/projects/pasha/fiit/app/decorators

/Users/lkrubner/projects/pasha/fiit/app/helpers

/Users/lkrubner/projects/pasha/fiit/app/mailers

/Users/lkrubner/projects/pasha/fiit/app/models

/Users/lkrubner/projects/pasha/fiit/app/controllers/concerns

/Users/lkrubner/projects/pasha/fiit/app/models/concerns

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms_membership-cd49cac06a43/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms_membership-cd49cac06a43/vendor

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms_membership-cd49cac06a43/app/assets

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms_membership-cd49cac06a43/app/controllers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms_membership-cd49cac06a43/app/decorators

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms_membership-cd49cac06a43/app/helpers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms_membership-cd49cac06a43/app/mailers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms_membership-cd49cac06a43/app/models

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/refinerycms-settings-3.0.0/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/refinerycms-settings-3.0.0/app/controllers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/refinerycms-settings-3.0.0/app/helpers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/refinerycms-settings-3.0.0/app/models

/Users/lkrubner/projects/pasha/fiit/vendor/extensions/videos/lib

/Users/lkrubner/projects/pasha/fiit/vendor/extensions/videos/app/controllers

/Users/lkrubner/projects/pasha/fiit/vendor/extensions/videos/app/models

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/refinerycms-wymeditor-1.0.6/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/refinerycms-wymeditor-1.0.6/app/assets

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/refinerycms-wymeditor-1.0.6/app/controllers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/refinerycms-wymeditor-1.0.6/app/decorators

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/refinerycms-acts-as-indexed-2.0.1/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/refinerycms-acts-as-indexed-2.0.1/app/decorators

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/quiet_assets-1.1.0/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/seo_meta-2.0.0.rc.1/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/seo_meta-2.0.0.rc.1/app/models

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/pages/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/pages/app/controllers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/pages/app/helpers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/pages/app/models

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/pages/app/presenters

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/resources/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/resources/app/controllers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/resources/app/models

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/images/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/images/app/controllers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/images/app/helpers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/images/app/models

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/authentication/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/authentication/app/controllers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/authentication/app/mailers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/authentication/app/models

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/devise-3.4.1/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/devise-3.4.1/app/controllers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/devise-3.4.1/app/helpers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/devise-3.4.1/app/mailers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/jquery-ui-rails-5.0.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/jquery-ui-rails-5.0.3/app/assets

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/core/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/core/vendor

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/core/app/assets

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/core/app/controllers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/core/app/helpers

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/core/app/models

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/core/app/presenters

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/refinerycms-i18n-3.0.0/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/refinerycms-i18n-3.0.0/app/assets

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/jquery-rails-3.1.2/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/jquery-rails-3.1.2/vendor

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/coffee-rails-4.0.1/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/actionview-4.1.8/lib/action_view/vendor/html-scanner

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/extensions/x86_64-darwin-11/2.1.0/unicorn-4.8.3

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/unicorn-4.8.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/uglifier-2.7.0/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/extensions/x86_64-darwin-11/2.1.0/therubyracer-0.12.1

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/therubyracer-0.12.1/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/therubyracer-0.12.1/ext

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/extensions/x86_64-darwin-11/2.1.0/sqlite3-1.3.10

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/sqlite3-1.3.10/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/spring-1.3.0/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/sdoc-0.4.1/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/webrat-0.7.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/bundler/gems/refinerycms-11f8d1eeb45e/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/will_paginate-3.0.7/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/truncate_html-0.9.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/sass-rails-4.0.5/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/sass-3.2.19/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/routing-filter-0.4.0.pre/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/ref-1.0.5/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/rdoc-4.2.0/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/extensions/x86_64-darwin-11/2.1.0/raindrops-0.13.0

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/raindrops-0.13.0/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/rails-i18n-4.0.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/rails-4.1.8/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/sprockets-rails-2.2.4/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/sprockets-2.12.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/tilt-1.4.1/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/protected_attributes-1.0.8/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/extensions/x86_64-darwin-11/2.1.0/nokogiri-1.5.11

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/nokogiri-1.5.11/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/extensions/x86_64-darwin-11/2.1.0/libv8-3.16.14.7

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/libv8-3.16.14.7/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/libv8-3.16.14.7/ext

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/extensions/x86_64-darwin-11/2.1.0/kgio-2.9.3

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/kgio-2.9.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/jbuilder-2.2.6/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/hike-1.2.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/globalize-4.0.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/friendly_id-5.0.5/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/dragonfly-1.0.7/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/multi_json-1.10.1/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/warden-1.2.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/responders-1.1.2/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/decorators-2.0.0/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/railties-4.1.8/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/thor-0.19.1/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/coffee-script-2.3.0/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/execjs-2.3.0/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/coffee-script-source-1.9.0/lib

/usr/local/lib/ruby/gems/2.1.0/gems/bundler-1.8.5/lib/gems/bundler-1.8.5/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/extensions/x86_64-darwin-11/2.1.0/bcrypt-3.1.10

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/bcrypt-3.1.10/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/babosa-1.0.2/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/awesome_nested_set-3.0.2/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/acts_as_indexed-0.8.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/activerecord-4.1.8/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/arel-5.0.1.20140414130214/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/activemodel-4.1.8/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/actionmailer-4.1.8/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/mail-2.6.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/mime-types-2.4.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/actionpack-4.1.8/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/rack-test-0.6.3/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/rack-1.5.2/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/actionview-4.1.8/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/erubis-2.7.0/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/builder-3.2.2/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/activesupport-4.1.8/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/tzinfo-1.2.2/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/minitest-5.5.1/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/extensions/x86_64-darwin-11/2.1.0/json-1.8.2

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/json-1.8.2/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/i18n-0.7.0/lib

/Users/lkrubner/projects/pasha/fiit/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib

/usr/local/lib/ruby/gems/2.1.0/gems/bundler-1.8.5/lib

/usr/local/lib/ruby/site_ruby/2.1.0

/usr/local/lib/ruby/site_ruby/2.1.0/x86_64-darwin11.0

/usr/local/lib/ruby/site_ruby

/usr/local/lib/ruby/vendor_ruby/2.1.0

/usr/local/lib/ruby/vendor_ruby/2.1.0/x86_64-darwin11.0

/usr/local/lib/ruby/vendor_ruby

/usr/local/Cellar/ruby/2.1.5/lib/ruby/2.1.0

/usr/local/Cellar/ruby/2.1.5/lib/ruby/2.1.0/x86_64-darwin11.0

Source

March 16th, 2015

A shell script which turns your OS X laptop into an awesome web development machine

Interesting:

What it sets up

Bundler for managing Ruby libraries Exuberant Ctags for indexing files for vim tab completion Foreman for managing web processes gh for interacting with the GitHub API Heroku Toolbelt for interacting with the Heroku API Homebrew for managing operating system libraries ImageMagick for cropping and resizing images Node.js and NPM, for running ...

March 14th, 2015

Redis for microservices with Clojure

This is a very good explanation of a microservices system with Clojure and Redis:

I drew a picture of how I wanted to break apart a monolithic application and instead run different parts of the application in separate processes / separate JVMs. The idea was to have a single client for the connection to the Twitter Streaming API and the persistence of the received Tweets in ElasticSearch, plus multiple machines to serve WebSocket connections to the client. For the communication ...

March 14th, 2015

Rubinius X as the future of Ruby

Interesting:

The internet has caused a fundamental change in general computing, yet many programming languages are solidly centered in the Windows 3.0 era, providing their equivalent to the Windows for Workgroups add-on to enable networking. Unfortunately, Ruby is one of those languages.

To be relevant today, a programming language must provide simple yet powerful facilities for composition and collaboration. A language does not need general immutable state, purely pure functions, or complex type systems, no matter how inferred.

Rubinius X is an ...

March 14th, 2015

Ruby reinvented to look like Clojure

To be clear, I like everything about Thomas Reynolds “Weird Ruby”:

# The standard "record" that contains information about a file on disk. SourceFile = Struct.new :relative_path, :full_path, :directory, :types # Find a file given a type and path. # # @param [Symbol] type The file "type". # @param [String] path The file path. # @param [Boolean] glob If the path contains wildcard ...

March 14th, 2015

Ruby concurrency needs microservices but not Elixir

I was initially confused by this essay because of its emphasis on Elixir. The writers just happen to like Elixir, which is fine. I have previously said that Erlang is a work of genius, and the Erlang VM is a work of genius. Building a dynamic language on top of that VM is a great idea, and I would like to work with Elixir in the future.

However, you don’t need Elixir to add concurrency to Ruby. Any concurrency oriented ...

March 14th, 2015

Teaching yourself computer programming is morally correct

Interesting:

I have come to learning Haskell in an unusual way. I have a master’s degree in linguistics and some background in logic (due to a BA in philosophy). I have no background in either math or computer programming. At all. I was persuaded, somehow, to learn Haskell by a friend with a notable fervor for Haskell advocacy, and because he got me sort of excited about natural language processing, I decided to give it a whirl. He is a person ...

March 14th, 2015

What to use for Ruby background tasks?

Interesting:

Essentially all three perform the same task, executing background jobs, but go about it differently:

delayed_job uses your SQL database for storage and processes jobs in a single-threaded process. It’s simple to set up but the performance and scalability aren’t great. I would not use delayed_job for systems processing 100,000s of jobs/day.

resque uses redis for storage and processes messages in a single-threaded process. The redis requirement makes it a little more difficult ...

March 13th, 2015

Kate Heddleston on argument culture

Interesting:

In a perfect world, people win arguments through the use of logic, facts, and better information. In reality, most people are pretty terrible at using logic, facts, and information. People make decisions from a place of emotion. We know this because if the emotional centers of a person’s brain are damaged, they become incapable of making even the most basic decisions [4]. Arguments are inherently emotional interactions where the goal is winning, and if we have learned anything from ...

March 13th, 2015

Tardigrades can not be destroyed

Interesting:

If you go into outer space without protection, you’ll die.

The lack of pressure would force the air in your lungs to rush out. Gases dissolved in your body fluids would expand, pushing the skin apart and forcing it to inflate like a balloon. Your eardrums and capillaries would rupture, and your blood would start to bubble and boil. Even if you survived all that, ionising radiation would rip apart the DNA in your cells. Mercifully, you would be unconscious in ...

March 12th, 2015

Relentless sexual assault in tech

I wish I could say this surprised me, but my own female friends have told me stories like this:

Here’s a non-comprehensive litmus test for if your workplace equality efforts are working or not: do they try to give the impression that workplace inequality is “under control?” Everything I have read and seen says sexism is not under control in tech, and that it is in fact wildly out of control. Sexism in tech is not a thing to be kept ...

March 12th, 2015

Netflix monitors its micro-services

Interesting:

The ability to decompose where time is spent both within and across the fleet of microservices can be a challenge given the number of dependencies. Such information can be leveraged to identify the root cause of performance degradation or identify areas ripe for optimization within a given microservice. Our Mogul utility consumes data from Netflix’s recently open-sourced Atlas monitoring framework, applies correlation between metrics, and selects those most likely to be responsible for changes in demand ...

March 12th, 2015

Mike MacHenry: Object-oriented programming has one major flaw which is that no one agrees what it really is

Mike MacHenry sums up the problems of OOP. Interesting:

Object-oriented programming has one major flaw which is that no one agrees what it really is. Everyone’s definition seems to be a collection of completely orthogonal ideas, most of which belong equally to some other, non-OOP paradigm. It makes it impossible to to get a clear answer to questions about the topic. To the best of my knowledge, through extensive reading, the best answer I can come up with for what object-oriented ...

March 12th, 2015

Just 18 elite universities produce half of all computer science professors

Interesting:

The evidence is not only anecdotal. A recent study by Aaron Clauset, Samuel Arbesman, and Daniel B. Larremore shows that “a quarter of all universities account for 71 to 86 percent of all tenure-track faculty in the U.S. and Canada in these three fields. Just 18 elite universities produce half of all computer science professors, 16 schools produce half of all business professors, and eight schools account for half of all history professors.” This study follows the discovery ...

March 12th, 2015

Women’s drinking peaks at age 40

Basically, women drink more and more every year until the worries about age-related health begin to influence their behavior. Interesting:

Source

March 12th, 2015

Contracts in Ruby are part of the new style

Much more than PHP or Python, the Ruby community is constantly pulling in new ideas from other programming language, and we see the emergence of new Ruby styles:

# The standard “record” that contains information about a file on disk. SourceFile = Struct.new :relative_path, :full_path, :directory, :types

# Find a file given a type and path. # # @param [Symbol] type ...

March 12th, 2015

Bad female boss suddenly understand mothers now that she has a kid

Interesting:

I secretly rolled my eyes at a mother who couldn’t make it to last minute drinks with me and my team. I questioned her “commitment” even though she arrived two hours earlier to work than me and my hungover colleagues the next day.

I didn’t disagree when another female editor said we should hurry up and fire another woman before she “got pregnant.”

...

March 12th, 2015

Object-oriented Programming cannot save us anymore

Obviously, I agree with this. See what I wrote earlier todayIs Erlang an Object Oriented Language?.

That promised time when we’d have applications running distributed and concurrently finally has come. Unfortunately, we are not ready: our “current” (i.e., most used) model for concurrency and parallelism, even though might solve the problem, it adds a lot of complexity.

For a better applications, we need a simple and reliable manner to do it. Do you remember above-mentioned features of FP? Pure Functions and ...

March 12th, 2015

Oracle is completely incompetent

True:

From the release notes: “The old syntax was meant to be only deprecated, but it was accidentally completely removed.”

How could Oracle have possibly “accidentally completely removed” the old syntax for setting a password even though it “was meant to be only deprecated”, without being completely incompetent?

I can not in my wildest imagination come up with a scenario in which a competent developer could possibly “accidentally remove” something like that. If they made such a huge “accident” with that security feature, ...

March 12th, 2015

Let’s disagree with Micro-Services

I like this:

Anybody who tried to get a number of teams in a large organization to agree on a common technology can sympathize with this. We are all human, and tend to have passionate and strong opinions on technologies we like and hate. Put enough of these strong opinions together, and they tend to cancel each other out, leaving no common ground. This is bad news for the poor architect that needs to pick an approach for a large ...

March 12th, 2015

9 different package managers

Interesting:

Pros

The artifacts are signed!

It simplifies the dependency definition of maven.

It’s easy to publish new artifacts.

It’s easy to learn how it works.

It allows to reuse Java artifacts from other maven repositories.

Cons

It violates the “Single Responsibility” pattern. Same as Maven.

Licenses are not mandatory.

No Mirrors.

I’ve wasted countless hours dealing with version conflicts and dependencies. I want a package manager to get things working, and I don’t care about what that requires. The semantic versioning, in terms of developing a lock ...

March 12th, 2015

At a certain scale you have to give up on the single, normalized, canonical database

I am surprised this article by Yorick Peterse, attacking MongoDB, got so much attention. The company used to use MySQL and MongoDB, but now they just use PostGres for everything. PostGres is a great technology, and I would always prefer to MySQL. I question the intelligence of a company that uses MySQL, when PostGres is such a good choice. But if a writer tries to compare PostGres and MongoDB, then I have to question their intelligence, since the 2 technologies ...

March 12th, 2015

Is Erlang an Object Oriented language?

A lot of people have read my essay from October 7th, 2014, “Object Oriented Programming is an expensive disaster which must end“. Many people like the essay, and many people hate the essay. The people who hate the essay often raise the possibility that I am a troll. They also feel that the whole essay should be dismissed based on its mistakes.

I have been meaning to write a second version that fixes all the mistakes of the first. The ...

March 12th, 2015

Are you sure objects are an improvement of procedural programming?

Interesting:

This question is an endless source of flame wars. Ruby is better than Java because it has dynamic typing, which in turn allows for short, concise source code. Yeah, right, the Java guys say, your programs read fine, but they crash at your customer’s because type checking is left to the runtime. You’ve got it all wrong, the followers of LISP and Clojure say. Object Oriented Programming is an expensive disaster which must end. Don’t you see it’s all about ...

March 9th, 2015

If you measure something intermediate, be sure it also contributes to your end goals

Interesting:

In 1962, what’s now known as the Perry Preschool Study started in Ypsplanti, a blue-collar town near Detroit. It was a randomized trial, resulting in students getting either no preschool or two years of free preschool. After two years, students in the preschool group showed a 15 point bump in IQ scores; other early education studies showed similar results.

In the 60s, these promising early results spurred the creation of Head Start, a large scale preschool program designed to help economically ...

March 8th, 2015

Financial speculation in games teaches us about financial speculation in real life

Interesting:

There I managed to buy the factories in a key star hub and set up shop. I produced the first Mammoths (a massive transport ship critical to trade) in the game, and also the first Minmatar battleships. I would have loved to expand my production but within days of the retail launch all factories had been bought up and idled by speculators who were charging $300 to$400 per factory, without any way of knowing if they really owned the ...

March 6th, 2015

The company transition from one big group to many groups

Interesting:

Everyone doesn’t know what’s going on anymore.

When you all fit around a single table (or a single Google Hangout) it’s easy for everyone to feel like they know what’s going on. Most people were probably wearing multiple hats and in constant communication as you focused on a single, core thing your business tries to do well.

But now things, have changed. Not only do people wear fewer hats, you probably even have multiple people to do many of the jobs.

Gone are ...

March 6th, 2015

Job interviews for computer programmers are full of bias

Interesting:

Confidence bias selects for candidates who are good at interviewing.

There are people who have the social skills to actively listen to someone else’s technical points, to guide a discussion with questions of their own, or to spot opportunities to redirect a tough question back to familiar territory. Those people build impressive resumes. They effortlessly pass “culture fit” tests. And a lot of them can’t code.

Confidence bias excludes candidates who don’t interview well.

For every genuinely competent and effective developer who ...

March 6th, 2015

Customization killed MySpace

From GeoCities to MySpace to Facebook the trend has been to less customization. Perhaps this is specialization: if you want a website, then go get a website, but if you want social, then let’s stick with a standard UI so that folks can focus on the social bits.

Could they have avoided losing out to Facebook? I think if they created MySpace 2.0 without all the crap (essentially what Facebook did) and made it easy to migrate your accounts and ...

March 6th, 2015

The end of the globalization consensus

After 1945, the USA lead the effort to establish a liberal zone of less restricted trade, an effort to step away from the protectionism of 1914-1945. And for awhile the leadership of the USA was unified on the need for this effort. But consensus is dying:

Summers’s ascendance is a reflection of the abandonment by much of the party establishment of neo-liberal thinking, premised on the belief that unregulated markets and global trade would produce growth beneficial to worker and C.E.O. ...

March 6th, 2015

Women stealing happiness from women

Interesting:

“You know Weil hired Lauren? She just got her letter yesterday.”

It was Emma, smiling at me as though there was no one else she’d rather see.

“I guess they’re less fixated on first-year grades than they pretend,” she said, “because Lauren’s first year grades were”–here she made a soft clicking noise that made me want to strangle her.

“Incoming,” hissed Emma’s best friend, another girl who was notable mostly because her parents owned one of New York’s most expensive restaurants. And ...

March 6th, 2015

The professionalization of childhood sports is child abuse

Interesting:

“It’s definitely child abuse,” Dohrmann said in an interview with ThinkProgress.

Dohrmann said that LeBron James Jr. might be an example of a rare kid with the support system that will allow him to survive the maw of youth basketball. He has a father who understands the system, is used to the attention and doesn’t need the money. He’s likely to get a coach who understands the game and even if he doesn’t he has his dad, one of the greatest ...

March 6th, 2015

The countryside is out of fashion

The reasons why the college failed:

Sweet Briar officials cited overarching challenges that the college has been unable to handle: the lack of interest from female high school students in attending a women’s college like Sweet Briar, declining interest in liberal arts colleges generally and declining interest in attending colleges in rural areas. Sweet Briar is in the foothills of the Blue Ridge Mountains in Virginia. “We are 30 minutes from a Starbucks,” said James F. Jones Jr., president of ...

March 3rd, 2015

What is the right way to use micro-services?

Interesting:

What I find over and over again is that micro-services appeal to leadership more than the developers. This is a somewhat confusing revelation considering micro-services are considered an architectural approach, and project managers are not supposed to fall in love with an architecture (at best, they are weary of it because ‘architecture’ is typically a code word for more boxes and increased cost and time to delivery). And yet.

…Beyond solving the sheer size problem, micro-services promise to solve the ‘different ...

March 3rd, 2015

I don’t get the zombie craze

All the zombie movies — I am not clear why this genre is so popular now. Typically when Sci-Fi has some popular breakthrough its because of events happening elsewhere in society. Invasion of the Body Snatchers was a hit when Anti-Communist hysteria was at its peak. Star Trek was a hit when the USA government was actually trying to get to the moon. Planet Of The Apes was a hit when white America no longer felt free to speak openly ...

March 3rd, 2015

If mid-level managers are useless, then why do they exist?

At this point I think I can reasonably say that I’ve read thousands of stories about the stupid incompetence of mid-level managers. And I’m beginning to wonder if this genre of story is teaching us an important truth. I used to think the answer was “yes” but now I’m wondering, why do companies continue to have mid-level managers, given the endless number of these stories that have been brought up, at least since the 1960s, if not earlier?

A company ...

March 3rd, 2015

Europe has seen a surge in voluntary childlessness

Interesting:

Europe has also seen a surge in “child-free” adults—voluntary childlessness. The proportion of childless 40-something women is one in five for Sweden and Switzerland, and one in four for Italy. In Berlin and in the German city-state of Hamburg, it’s nearly one in three, and rising swiftly. Europe’s most rapidly growing family type is the one-person household: the home not only child-free, but partner- and relative-free as well. In Western Europe, nearly one home in three (32%) is already a ...

March 2nd, 2015

Men ask Sarah Lacy to think of the children

This is awesome:

One of the highest profile positive symbols of the new generation of empowered women is Lena Dunham. I am avowedly not a fan of the TV show “Girls,” which I thought meant I wasn’t a fan of its creator. But my respect for Dunham just keeps growing with every interview with her I’ve read.

Last month, in the airport on the way to Nashville, I picked up a copy of Elle magazine which had Dunham on the cover. It ...

March 1st, 2015

The problem with the ActiveRecord, as a pattern

Interesting:

The pattern (or one might say the way it is implemented) has several issues:

It (seriously) violates SRP. In a typical implementation of the pattern you will have the following set of methods and properties in every class: Getting the data from database. Instantiating a new instance in memory for inserting it into the database. Saving changes to the database. Loading related entities. Validation. Usually loads of methods (inherited from the base framework class) to deal with all the complexity involved with the above-mentioned methods. Column related ...

March 1st, 2015

PostgreSQL is great and ORMs suck

Over the last 10 years I think I’ve heard all the arguments for Database Abstractions Layers (DBAL) and I’ve come to hate them. I’ve twice seen data moved from one database to another (from Oracle to MySQL and from MySql to PostGres) but in all cases I was able to write the import/export script in a day or two, so DBAL was never needed. More so, DBAL means giving up on what makes a database unique, and so you throw ...

March 1st, 2015

Anita Sarkeesian hopes to see game culture change

Interesting:

The metal detectors, and the overall heightened security presence at Sarkeesian’s talk, were impossible not to notice. I heard a few attendees mutter about this being necessary or finding it absurd that a talk about women in gaming, of all things, required this kind of presence. An NYU rep told me they hadn’t set up metal detectors for any Game Center talks before. The people who make Dragon Age didn’t get this kind of security.

Sarkeesian never acknowledged the security, and ...

March 1st, 2015

The good and the bad of data-types

Interestingly honest to hear someone admit that types are important but not a cure all — this is my few as well:

Not distinguishing abstraction from checking

This is my number-one beef. Almost all languages offer data abstraction. Some languages proceed to build a static checking system on top of this. But please, please, don’t confuse the two.

We see this equivocation used time and time again to make an entirely specious justification of one language or other. We see it used to ...

March 1st, 2015

How does ActiveRecord work?

Interesting:

Because find(id) is such a common query, the ActiveRecord developers have special-cased it to bypass a lot of the work that would have to be done if you were chaining together conditions or doing more elaborate queries. You can see at line 147 that this simple query is actually cached, and that this cache is checked to see if the query has been executed before.

If not, the query construction begins at line 149, with the chaining of a where clause ...

March 1st, 2015

What is object oriented programming?

Interesting:

Here is an a la carte menu of features or properties that are related to these terms; I have heard OO defined to be many different subsets of this list.

Encapsulation – the ability to syntactically hide the implementation of a type. E.g. in C or Pascal you always know whether something is a struct or an array, but in CLU and Java you can hide the difference.

Protection – the inability of the client of a type to detect its implementation. ...

March 1st, 2015

Message passing in computers is flawed because messages can not be trusted

Interesting:

First of all, if you call a random object to ask it a question of any kind, you can get a denial of service in the form of nontermination. This can be mitigated by using an asychronous send or resource limitation, in which case you may get no information about the object.

But it’s worse than this. Even if you ignore DOS and timeout, you might think you could do challenge/response for authentication = “type check” or brand predication. Let’s ...

March 1st, 2015

The weaker reasons for hating object oriented programming

Interesting:

I didn’t think you were such an OO partisan. If you are, then you will probably find my reasons for despising it (other than the above) to be very touchy-feely, and they are. I think comprehensive OO (occasional OO is fine) is a very poor metaphor for the world, a poor tool for problem solving, and an unnatural way to think. Here are some particulars off the top of my head:

- It accounts poorly for symmetric interaction, such as chemical reactions ...

March 1st, 2015

Object Oriented Programming is a moving target

OOP zealots are liars. This is the point I made in “Object Oriented Programming is an expensive disaster that must end“:

Because OO is a moving target, OO zealots will choose some subset of this menu by whim and then use it to try to convince you that you are a loser.

Source

March 1st, 2015

You can call yield in Ruby without an explicit block declared

Very interesting:

Given this:

def a(&block) yield end

def b yield end

Running a {1+1} is 4x slower than running b {1+1}. I didn’t even know you could yield in a method without an explicit &block parameter. I’ll guess I’ll change my ways then, although I like having the block declared in the method signature so I know ...

March 1st, 2015

The mania for object oriented programming

Paul Graham says there are 5 reasons why people like object oriented programming, and 3 and half of them are wrong:

I think there are five reasons people like object-oriented programming, and three and a half of them are bad:

Object-oriented programming is exciting if you have a statically-typed language without lexical closures or macros. To some degree, it offers a way around these limitations. (See Greenspun’s Tenth Rule.)

Object-oriented programming is popular in big companies, because it suits the way they ...

March 1st, 2015

Is static type checking important in software for a bank?

Interesting.

One attitude:

I always thought critical applications like banking needed compile time type checking. Clojure is neat and all, but it’s dynamic.

The counter-argument:

They need quality, trustworthy software. Compile time type checking is a tool that can be used to help get there (but how useful it is in getting there depends on how robust the type system is, and Java’s is not particularly robust).

Clear and concise code that is readily understood, avoids visual noise so that the programmer can focus on ...

March 1st, 2015

I like this:

When I quit my job to pursue my startup, I moved into a co-working space in Brooklyn and sat across a real estate broker. One day, he told me he wanted to have a website that his clients could log into and view available properties to rent over a map based layout. He talked to some development shops and got quoted for $X.$X turned out to be significantly greater than his budget and twice as much ...

March 1st, 2015

When will WordPress die?

It seems to keep going, but I find it difficult to accept any explanation of why it keeps going:

It won’t happen overnight, but WP-API will dramatically reduce the amount of active PHP code in WordPress, starting with the admin back-end. It will become a JavaScript app that talks to the WP-API sooner than anyone suspects.

Front-end (read: theme) development will change at a slower pace, because rendering HTML on the server side is still the right thing to do for ...

March 1st, 2015

What makes Buzzfeed good?

Interesting:

Where the Buzzfeed crew distinguish themselves from older media organizations, and even many of their contemporary online competitors, is in their lack of quality control, which borders on an actual rejection of the notion that “quality” ought to be an important factor in determining whether or not to publish something.

That’s Buzzfeed’s crucial differentiating factor. Combine it with their killer CMS (which encourages the rapid creation of exactly the sort of content we imagine when we think of lazy Buzzfeed ...

March 1st, 2015

The short version of Kino Haruki Murakama

I think this story has too many words. This is my version, with less words:

Kino remembered the first time the man had come to his bar. His appearance had immediately caught Kino’s eye—the bluish shaved head, the thin build yet broad shoulders, the keen glint in his eye, the prominent cheekbones and wide forehead. He looked to be in his early thirties, and he wore a long gray raincoat, though it wasn’t raining.

The man sat in the back ...

March 1st, 2015

Lying is good for you

Lying is an important social skill:

The ability to lie is adaptive. When kids start lying when they’re younger, they’re essentially supposed to. It’s a good developmental sign their brain is working correctly when they become aware both that you actually can’t see everything they do and also that you can’t read their minds. Sure, they may not be that good at lying yet by our standards—my 4 year old recently insisted she was turning flips right in front of ...

March 1st, 2015

How can anyone remember where they saw a movie 25 years ago?

I am confused how anyone can remember these details:

My first time with James Cameron’s sci-fi war movie was a great filmgoing experience. I saw “Aliens” at the NorthPark 1 and 2 theater at NorthPark Mall in my hometown of Dallas, with a high school classmate who was, at that time, my regular action movie-watching buddy: Gabe Michaels. We drove to NorthPark to catch the 11 a.m. show on opening day and got in line a couple of hours early. ...

February 26th, 2015

Interesting:

I dated a guy once whose father was quite wealthy and worked in finance. He often told me things straight-faced that, I—someone who had grown up on food stamps—found preposterous. He’d say that the couple grand he received as allowance each month was not very much money, and that his family was extremely careful not to show off their wealth too much, which he told me while we sipped booze on his dad’s $80,000 speedboat. We went to restaurants where a ... Read More Source February 25th, 2015 No Comments Fashion freedom in Britain I agree, famous women in Britain seem to me to be under less pressure to minimize fashion risks, and therefore can dress in more interesting ways: I am constantly hammering this point because it’s true: British fashion right now is, on the whole, so much more creative and interesting than American fashion. That’s certainly true on the runway, but it’s also true on the red carpet, even moreso with musicians, because on the whole British women aren’t as bananas about ... Read More Source February 25th, 2015 No Comments Does the visitor design pattern need to exist? What does this sound like to you? The pattern should be used when you have distinct and unrelated operations to perform across a structure of objects. Wait a minute, isn’t that… a function? In a language where functions can take functions, I would simply send in a function, right? Maybe a multimethod. I wouldn’t need an interface for the “visitor”, except maybe the interface of the multimethod, right? The fact that these metaphors are so tortured is certainly a bad sign: ... Read More Source February 25th, 2015 No Comments The angry argument against design patterns The rant: I tend to come across a lot of code written by people who read up on design patterns and than think they should use them all over the place and the result is the actual code gets buried under tons of interfaces, wrappers and layers and pretty hard to read. That’s a wrong approach to design patterns. Design patterns exist so that you have a repertoire of useful idioms handy when you come across a problem. But you should ... Read More Source February 25th, 2015 No Comments The best argument for design patterns I do like this: Given the few items we can hold in working memory simultaneously, it’s no wonder that programming is hard; any interesting programming problem has a multitude of fine-grained parameters and possible alternatives. One way around this limitation is a process known as chunking. Chunking is an encoding strategy where individual elements are grouped into higher-level groups, chunks. While the limit on the number of units still apply, each unit now holds more information. Patterns are a sophisticated form of ... Read More Source February 25th, 2015 No Comments The Leiningen eco-system This is a nice write up of some of the plugins one can use with Leiningen Cljfmt At long last, Clojure finally has its own gofmt-like tool, thanks to the ever-industrious @weavejester. Cljfmt both checks (lein cljfmt check) and formats (lein cljfmt fix) your code nicely in adherence to the generally accepted Clojure style rules, and has options for configuration in case you have your own feelings on the subject. Eastwood Eastwood is a Clojure linter, invoked with lein eastwood. As a general request, ... Read More Source February 25th, 2015 No Comments Computers, patterns, humbleness The most obvious case for patterns: One such strategy is to share knowledge and base our solutions on what has been known to work well in the past. Since few designs are really novel we often find that previous solutions, at least on a conceptual level, apply to our new problem too… Patterns incorporate both of these strategies. As software developer and author of a technical book on patterns I obviously find value in the pattern format. And as a psychologist I ... Read More Source February 25th, 2015 No Comments What do standard OOP patterns look like in Haskell? Interesting: Most software developers are familiar with the OOP motto “everything is an object.” People accustomed to C++ classes often find the Haskell concept of type classes difficult to grasp. Why is it so different? C++ classes pack functions together with data, which makes it convenient to represent and consume data. Use of interfaces (abstract classes) allow classes to interact by contract, instead of directly manipulating the data in the other class. There exist alternative ways in C++ to accomplish such ... Read More Source February 25th, 2015 No Comments What is the difference between depression and procrastination? This sounds like depression: You are too old to learn, they said. At your age it is impossible to change behavioral patterns, they concluded. “They” being these voices I have been hearing in my head lately — a side-effect of the isolation that comes with being a slave to/freelancer on the Internet. A couple of days ago I would have agreed. Honestly, I would have agreed to anything. I felt done. Depressed. If somebody would have told me that I would never ... Read More Source February 25th, 2015 No Comments Best practice is a misnomer Interesting: As one data point on the curve, at any rate, if you were to compete with ITA and chose to write your software in C, they would be able to develop software twenty times faster than you. If you spent a year on a new feature, they’d be able to duplicate it in less than three weeks. Whereas if they spent just three months developing something new, it would be five years before you had it too. And you know what? ... Read More Source February 25th, 2015 No Comments We lack a good theory for depression Interesting: The problem is that we’ve never had an adequate theory of what depression is, and the evidence seems to be that it is far more complex and situational than any one-pill-fixes-all approach could ever attack. The author is correct, but hardly novel or prescient, in noting that there are serious issues with the long-term efficacy of SSRIs and SNRIs (and most other classes of psychoactive drugs). The problems of discontinuation of drug therapy, especially for long-term users, and that the ... Read More Source February 25th, 2015 No Comments What is the argument for design patterns? Interesting: Paul Graham’s essay Revenge of the Nerds is a nearly pornographic love letter to Lisp. If you can manage to read all the way to the end, there’s an interesting footnote buried at the bottom: Peter Norvig found that 16 of the 23 patterns in Design Patterns were “invisible or simpler” in Lisp. He should have opened the essay with that evidence, because it strengthens his conclusion considerably: In the OO world you hear a good deal about “patterns”. When I see patterns ... Read More Source February 25th, 2015 No Comments How much of Gamergate is simply mental illness Hitler believed that the Jews controlled the world and were working to destroy Germany. Racism that extreme is an obvious sign of mental illness. And likewise with misogyny. Where exactly is the line that divides banal everyday misogyny from mental illness? And how do we limit the damage that the mentally ill can do, while getting them the help they need? Several of the more extreme Gamergate men seem to be suffering from mental illness, Jace Connors being the obvious ... Read More Source February 25th, 2015 No Comments The most popular resist-sexual-assault training manual is out of date Interesting: Universities across the country have been eating this program up since 1989, and no wonder: R.A.D. is a perfect slice of patriarchal fear-cake, studded with nuggets of bad advice and thickly frosted with condescension. Take, for example, these “Risk Reduction Strategies”: HOME: Try “casing” your own home, at night and/or during the day. Attempt to gain access when locked and “secure.” If possible, invite a security survey from your local Police Department. Drapes and Shades: Draw the drapes and pull the shades. ... Read More Source February 25th, 2015 No Comments Pair programming is exhausting This is true. When I work with another programmer, I suddenly have to focus 100%, and interact with someone too, straining the limits of both my technical abilities and my social skills. I can do this for 30 minutes, but if I had to do it all day, everyday, I would be utterly exhausted. What about the downsides? It’s not all peaches and cream of course – pairing all the time does have some downsides. Tiring Pairing can be exhausting. Not everybody thinks ... Read More Source February 25th, 2015 No Comments The hollowness of the neutral meditation promoted by business This is very good: When I read about the general spread of mindfulness, I’m gladdened and encouraged. It is a simple thing, available as freely as breath to practically every human, that can steady our faltering steps on the path of life. I would not begrudge anyone their mindfulness practice, no matter what form it takes. When I read about mindfulness in the business world, though, I’m left with uneasy questions. Apparently, I’m not the only one. In their review of ... Read More Source February 25th, 2015 No Comments Are polyhedra of equal volume equidecomposable? Interesting: Just as any pair of polygons of equal area can be decomposed and reassembled into the same square, can any pair of polyhedra of equal volume be decomposed and reassembled into the same cube? Are polyhedra of equal volume equidecomposable? Are they equicomplementable? By the end of the nineteenth century there were several examples of equalvolume polyhedra that were both equidecomposable and equicomplementable, but there was no general solution. One simple example is prisms with the same height and equal area ... Read More Source February 22nd, 2015 No Comments Online bullying intensifies the attacks against women Interesting: It’s a point that I’ve been making for much of the last year about women in tech and Silicon Valley. We are in a strange place where there is both more opportunity for women than ever before, but also more disgusting and overt hate, whether it’s from anonymous trolls or senior executives and founders of the largest most powerful companies in the Valley. Worse are the excuses the industry makes for those in power, whether they’re justifications that being ... Read More Source February 21st, 2015 No Comments Communism and corporatism are the same This is interesting: Following publication of the Short Course, which gave the author as “A commission of the ACP(b) Central Committee,” Stalin explained: “We were presented with … a draft text and we fundamentally revised it.” The Soviet leader’s deployment of the “royal we” suggests that he suffered from what Koestler called the “shamefacedness about the first person singular which the Party had inculcated in its disciples.” (Once a young department head—and Stalin’s future son-in-law—dared to speak for the party ... Read More Source February 20th, 2015 No Comments Strings in Python have the wrong number of bytes It’s an interesting dive into bytes and strings: The width of a Unicode string differs from the number of characters in it. Fortunately, we can use the POSIX standard function wcswidth to calculate the display width of a Unicode string. We can use this function to rebuild our basic formatting functionality. Source February 18th, 2015 In Business No Comments 8,000 computer programmers at General Motors? They make it sound like they need 8,000 programmers to run a website. Even Google doesn’t have that many engineers. I sure hope that the reporter got the story wrong. Otherwise this sounds like waste on a staggering scale. Two years ago, Chief Information Officer Randy Mott ended GM’s$3 billion a year outsourcing deal with Hewlett-Packard Co. , replacing it and others with about 8,000 GM software engineers, up from 1,400 previously. “Because we brought the [information technology] work ...

February 18th, 2015

If we sample from a population using a sufficiently large sample size, the mean of the samples will be normally distributed

Interesting:

Suppose that we are interested in estimating the average height among all people. Collecting data for every person in the world is impractical, bordering on impossible. While we can’t obtain a height measurement from everyone in the population, we can still sample some people. The question now becomes, what can we say about the average height of the entire population given a single sample.

The Central Limit Theorem addresses this question exactly. Formally, it states that if we sample from ...

February 18th, 2015

All GUI toolkits are old

Interesting:

Cocoa is from the 1980s. Qt is from 1991. MFC is from 1992, building upon older technology. AWT is from 1995. Swing is from 1996. GTK+ is from 1997. SWT and wxWidgets just build upon these old toolkits. Windows Forms is maybe the newest, from the early 2000s.

There hasn’t been a widely used UI toolkit created in the past decade, if not longer. The best we’ve seen since then are half-assed UIs built using HTML/CSS/JS, and limited mobile UIs ...

February 18th, 2015

How to pull in patches from foreign repos

Interesting:

GitHub provides a special pulls remote “namespace” on the upstream repo, so you can add it as a fetch pattern to your .git/config like so:

[remote "upstream"] url = https://github.com/neovim/neovim.git fetch = +refs/heads/*:refs/remotes/upstream/* fetch = +refs/pull/*/head:refs/pull/upstream/*

Then when you git fetch –all, you will have ALL pull requests available in your local repo in the local pull/ namespace. To check out PR ...

February 17th, 2015

Odious behavior from George Washington

Gross and disgusting behavior from the First President. Maybe he wasn’t the rapist that Jefferson was, but Washington was still gross.

The act began dismantling slavery, eventually releasing people from bondage after their 28th birthdays. Under the law, any slave who entered Pennsylvania with an owner and lived in the state for longer than six months would be set free automatically. This presented a problem for the new president.

Washington developed a canny strategy that would protect his property and allow ...

February 16th, 2015

A very bad awful way to ask for help with your startup

Because I have posted my cell phone number on my website, random strangers often reach out to me for advice about their startup ideas. 99% of the time they are very innocent and inexperienced, so I have no desire to work with them, but I am usually happy to give advice. Some of them seem reasonably smart, and others seem utterly clueless.

Last night at 2:30 AM someone started text me. This was our conversation:

THEM: Hi there. I found your ...

February 15th, 2015

Sleep paralysis is heredity?

I sometimes get sleep paralysis, so I find this surprising. Neither of my parents had sleep paralysis, so I wonder how far back it goes?

Sleep paralysis often occurs during the rapid eye movement (REM) stage of sleep, when people are usually dreaming. In REM, the muscles are nearly paralyzed — possibly to prevent people from acting out their dreams, scientists say. Some people who suffer from sleep paralysis experience hallucinations of a terrifying figure pressing down on them and ...

February 14th, 2015

Being extorted by a non-profit

I think the word “negging” came from the world of pickup artists (PUAs) but now is just a general tactic for being awful to people:

So I just got a call from a guy claiming to be the director of Software in the Public Interest. Which I guess is a non-profit organization. But it felt like a really aggressive sales call. He started off with some very heavy negging and I was just trying to get him to explain what ...

February 14th, 2015

Premature deindustrialisation in the developing world

Interesting:

As developed economies have substituted away from manufacturing towards services, so too have developing countries – to an even greater extent. Such sectoral change may be premature for economies that never fully industrialised in the first place. This column presents evidence that countries with smaller manufacturing sectors substitute away from manufacturing to a larger extent, suggesting a trade channel through which falling international relative prices of manufacturing lead price-taking developing economies to substitute accordingly.

Mention ‘deindustrialisation’ and the image comes to ...

February 14th, 2015

A successful movie

Apparently the movie 50 Shades Of Grey is a huge success on its opening weekend. That must be because of reviews like this:

A movie based on one of the worst books in the history of the English language ought to change a hell of a lot if it wants any hope of being a movie that doesn’t top next year’s Razzie Award list. If the film’s directors and editors and producers hadn’t omitted certain scenes, the film would play like ...

February 13th, 2015

革命的非モテ同盟

Kind of sort of hilarious, but sort of sad:

On February 14th, Kakumei-teki himote doumei (革命的非モテ同盟) — literally, “Revolutionary Alliance of Men That Woman Are Not Attracted To”– will gather in Shibuya, an area of Tokyo popular with young couples, to protest Valentine’s Day and its roots in what they call “romantic capitalist oppression.”

Source

February 12th, 2015

Why self publish?

Interesting:

In terms of why I self-published, there are a handful of reasons, but the two main ones were this:

1) I wanted more creative control over the entire process: what I was writing, how it was presented to the market, and so forth.

2) I wanted a greater royalty share.

In terms of how it’s going, it’s going way better than my wildest predictions. I’m a spreadsheet kind of girl, so I can actually look at my wildest predictions, and yes, they were ...

February 12th, 2015

Women learning Python

Interesting. Poland is on the list more than any other country. Why is that?

Source

February 12th, 2015

A family’s story of life in the video game industry

This is emotionally intense:

My husband has worked in the video game industry for just about 14 years. It was always his dream to make video games, and it was a goal he’s worked towards since he began learning to program at 12 years old. One day on a whim, he applied to a major console game developer, and three weeks later our family of five was moving to California.

The company my husband was working for was really great. The benefits ...

February 12th, 2015

When Paul Krugman stepped outside this morning

This is good:

There are actually multiple revelations in that article. For one thing, it attacks not just QE2, which was about to commence, but QE1 — the Fed’s intervention during the chaotic post-Lehman period — which is generally considered to have been quite effective. Their evidence to the contrary? “QE1 failed to strengthen the economy, which has remained in a high-unemployment, low-growth slump.” Also, when I stepped outside this morning, it was cold, so I put on a coat — ...

February 11th, 2015

Drinking water in the Middle Ages

Interesting:

People in the time certainly knew the difference between bad and good water. Pliny, in discussing drinking water, says: “It is a fault also in water, not only to have a bad smell, but to have any flavour at all, even though it be a flavour pleasant and agreeable in itself…. Speaking in general terms, water, to be wholesome, should have neither taste nor smell.”. Centuries later, Paulus Aeginata (seventh c.) wrote: “of all things water is of most ...

February 11th, 2015

The growing importance of doulas during birth

Interesting:

Doulas are a growing force in the ever-changing culture of maternity, at once a manifestation of the growing demand for personal service (the doorman, the yoga teacher, Amazon Prime) and a backlash against the perceived overmedicalization of birth, with its high rates of cesarean sections.

But because of resistance from the medical profession and lack of insurance reimbursement, they are still a small part of the system. A recent report estimated that there are as many as 400 doulas working ...

February 10th, 2015

How to think about your exercise regime

Interesting:

Let’s clarify something: When I say lazy, I’m not talking about physical laziness. In fact, I encourage trainees to do the minimum amount required for results. This might mean taking the elevator if you hate stairs.

When I say failure, I am not talking about setbacks. On your fitness journey, you will have continuous setbacks, like an accidental binge or feeling too unmotivated to go to the gym. That’s okay. By “failure,” I mean it in the sense of throwing in ...

February 10th, 2015

The Compulsory Vaccination Act of 1853

Interesting:

At the time, there existed no obligation to vaccinate in England. Physicians and health reformers encouraged vaccination and, in 1840, successfully convinced Parliament to make the shot free of charge. But the public continued to spin fears about the vaccine’s effects, and in doing so, continued to catch smallpox. It became increasingly clear that simply suggesting vaccination to the public was not enough.

In 1853, those same reformers convinced lawmakers that “smallpox posed a serious danger to the national community,” and ...

February 9th, 2015

Is this dependency injection?

Interesting. Assume a Python system that works like this:

###################################################################### ## ## DEMO ## ######################################################################

# ——————————————————————————— # Some python module defines a Bar component and states the dependencies # We will assume that # – Console denotes an object with a method WriteLine(string) # – AppTitle denotes a string that represents the current application name # – CurrentUser denotes a string that represents the current user name #

class Bar(Component): con = RequiredFeature(‘Console’, HasMethods(‘WriteLine’)) title = RequiredFeature(‘AppTitle’, IsInstanceOf(str)) user = RequiredFeature(‘CurrentUser’, IsInstanceOf(str)) ...

February 9th, 2015

How should we separate HTML from its content?

Interesting:

The framework of the future should make us think only about the data and only about the markup. Nothing in between. We don’t want to deal with loading HTML strings or passing data to special functions. We want to apply values to variables and get the DOM updated. The popular two-way data binding should not be a feature, but a must-have core functionality.

In fact, AngularJS is close to the desired behavior. It reads the template from the provided page’s ...

February 9th, 2015

Managing dependencies in Javascript

All this work just to avoid calling “new”? This should be read as a criticism of the object oriented paradigm. Interesting:

AngularJS goes a little bit further by giving us something called factory. We register our dependencies there, and they are magically available in our controllers. For example:

myModule.factory(‘greeter’, function($window) { return { ‘greet’: function(text) { alert(text); } }; }); function MyController($scope, greeter) { $scope.sayHello = function() { greeter.greet(‘Hello World’); }; } In general, this approach simplifies our job. We don’t have to use a function like require to fetch the dependency. All we ... Read More Source February 9th, 2015 No Comments Um Interesting: Liberman has been studying these so-called “filled pauses” for almost a decade, and he has made a rather curious discovery. “As Americans get older, they use ‘uh’ more,” he says. “And at every age, men use ‘uh’ more than women.” If you look at “um”, exactly the opposite is true. Younger people say “um” more often than older people. And no matter the age, women say “um” more than men. Nobody, not even the linguists, were expecting this result; until they studied ... Read More Source February 9th, 2015 No Comments How to maintain software? Karolina Szczur writes about frontend systems we can maintain: Practices are often built without targeting the crucial aspect of collaboration—the human factor. The secret lies in understanding of good patterns and mindfully applying them (and we’ve elaborated on that a little bit here). A starting point for building up effective collaboration is to create resources than can serve as learning and reference materials. One of the ways to do so is to have a style guide (see Github, MailChimp, The Guardian and A ... Read More Source February 9th, 2015 No Comments This is not fun anymore I have had 2 good friends of mine, both working as frontenders for many years, tell me that the work is not as fun as it used to be. 10 years ago, or even 5 years ago, working on the frontend meant doing creative worked that intermingled artistic design concerns and some technical cleverness for making the design real. But over the last 3 or 4 years, with the rise of the pure Javascript frontends, being a frontender has increasingly ... Read More Source February 9th, 2015 No Comments Possible new Javascripts Such a wealth of options indicates the industry is feeling real pain, and no one knows what the solution is: * SoundScript (Google) * SaneScript (Google) * TypeScript (Microsoft) * ECMAScript 4 (Dead) * AtScript (Google) * Flow (Facebook) * Closure Compiler Strict Mode (Google) * Asm.js (Mozilla) * Dart (Google) * ... Read More Source February 9th, 2015 No Comments Goals of Kythe Interesting. How to get different tools to work together, via some common specification? This sounds a bit like a new approach to the problems that the industry failed to solve 10 years ago with the insane WebServices approach. The best way to view Kythe is as a “hub” for connecting tools for various languages, clients and build systems. By defining language-agnostic protocols and data formats for representing, accessing and querying source code information as data, Kythe allows language analysis and ... Read More Source February 9th, 2015 No Comments Gradual typing for Javascript Here is an interesting proposal that goes beyond what TypeScript does for Javascript: Source February 9th, 2015 No Comments A standardized ontology of Javascript types? Interesting. This reminds me of the effort 10 years ago to develop standardizes ontologies for XML or RDF. interface VimeoParams { name:string; value:any; } interface VimeoPlayerAPI { (method: string): any; (method: string, callback: (value: any, player_id: any) =>void ): any; (method: string, value: any): any; (method: string, value: VimeoParams[]): any; } interface VimeoPlayer { api: VimeoPlayerAPI; addEvent(eventName: string, callback: (e: any) =>void ): any; removeEvent(eventName: string): void; postMessage(method: string, params:VimeoParams[], ... Read More Source February 9th, 2015 No Comments The spread of gradual/optional typing Typesafe brings gradual/optional typing to Javascript: Type annotations in TypeScript are lightweight ways to record the intended contract of the function or variable. In this case, we intend the greeter function to be called with a single string parameter. We can try changing the call greeter to pass an array instead: function greeter(person: string) { return “Hello, ” + person; } var user = [0, 1, 2]; document.body.innerHTML = greeter(user); Open in Playground Re-compiling, you’ll now see an error: greeter.ts(7,26): Supplied parameters do not ... Read More Source February 9th, 2015 No Comments 400,000 lines of CSS at Etsy Wow: When Etsy announces their switch to SCSS to make their styles more maintainable the finding should not be “SASS beats CSS”, but it would be interesting to learn what lead to over 400,000 lines of CSS in over 2000 files for an actually not that complex site in the first place. The article is very interesting and shows some great differences in people dealing with code: CSS enthusiasts love the fact that CSS doesn’t stop executing when it encounters errors — it ... Read More Source February 9th, 2015 In Business No Comments Most USA companies have too many meetings Every company I have worked at has had too many meetings, with too many people in the meetings. You can tell too many people are in the meetings because if you look around the room you can see that most people are bored, most have started to daydream, some are texting on their phones. As I see it, if you are manager, all your interactions are of 1 of 2 types: 1.) You need to talk to a human being, either ... Read More Source February 9th, 2015 No Comments Javascript should not be used for everything Interesting: One of the great things about JavaScript is that you can do everything with it: you can do computations, you can create HTML, you can dynamically style elements, you can manipulate images, play and create music, video, and nowadays do all the HTTP work of an app, too. JavaScript is not only the leatherman of the client-side web any longer, it now took over the server, too. That is also one of the terrible things about JavaScript. Just because you can ... Read More Source February 9th, 2015 In Business No Comments What left parties mean for Europe Interesting: I’ve long believed that Matthew Yglesias hit on something really important when he noted that small-country politicians generally have personal incentives to go along with troika demands even if they are against their nation’s interests: Normally you would think that a national prime minister’s best option is to try to do the stuff that’s likely to get him re-elected. No matter how bleak the outlook, this is your dominant strategy. But in the era of globalization and EU-ification, I think ... Read More Source February 9th, 2015 No Comments The assumption that programmers are men Julia Evans calls out some comments on her blog that assume she is a man: When this happens, when people implicitly assume that a Technical Thing On The Internet must be written by a man, I find it confusing. I didn’t grow up with the idea that I was worse at math or programming than the men around me (because, well, I wasn’t!) And I didn’t grow up with the idea that it was weird for me to write programs ... Read More Source February 9th, 2015 No Comments The 4 levels of bugs Interesting: So it seems like there are a few different levels of bug difficulty: It’s immediately obvious to you what’s wrong You Google the exception, read some documentation or Stack Overflow, and then it’s immediately obvious what’s wrong You don’t know what’s wrong, but you know more or less where in the (open source) library code you’re using to look, and you can read the code to figure it out You’re missing some bigger-picture of knowledge about the code you’re running that you need ... Read More Source February 8th, 2015 No Comments ElasticSearch is amazing We are suddenly drowning in a wealth of options when it comes to document stores. 5 years ago the default choice would have been MongoDB. But Riak is amazing, and ElasticSearch is amazing. Honestly, I don’t know how I’ll make a choice between these 3 in the future. For making dashboards, the ELK stack is a powerful option: We have followed the evolution of Elasticsearch from a search-specific platform to one whose power can also be leveraged for analytics. The ... Read More Source February 8th, 2015 No Comments The benefits of testosterone Interesting: So he went to Cenegenics, a medical start-up that trains physicians to run their own “age management” practices. They updated his diet, put him on a new workout regimen, and started giving him testosterone. Within six months, his body fat was down to nine percent. “That’s pretty hard to maintain—I’m closer to 12 percent now,” he humblebrags. After his personal success, Cenegenics asked if he’d like to take their training course, so he did, and quickly, he found himself ... Read More Source February 8th, 2015 No Comments Does denormalization make a linked list better? Obviously you wouldn’t typically use the word “denormalize” when you are talking about a linked list. “Denormalize” means you are allowing a database table to accumulate redundant data. The best reason to denormalize a database is that it speeds up your software. If you embed all the records you want in one database table, then you can all the info you need with 1 query. It’s like doing a JOIN statement, but instead of doing the JOIN at the time ... Read More Source February 8th, 2015 No Comments Problems with the schools in the USA There is this: My Son just recently graduated High School and now is in his first year of college for dual major in Aviation Science (to be an air traffic controller) and Business. His high school (Valhalla High School in El Cajon California) gave him a test to determine his aptitude that said he should go into “building maintenance” (being a Janitor more or less) and wouldn’t move up his classes to more difficult ones so he was in classes with ... Read More Source February 8th, 2015 In Business No Comments How not to do a BSDM movie The press tour for 50 Shades Of Grey is a disaster: Because 50 Shades of Grey is a sex movie, Dakota Johnson and Jamie Dornan have routinely been asked about sex. Because Dakota Johnson and Jamie Dornan seem to dislike at least this specific sort of sex (fake sex, with a person they hate, in a movie they made for a job they regret), they routinely display discomfort (ranging from wide-eyed confusion to intense aversion) when talking about sex, in ... Read More Source February 8th, 2015 No Comments Good British manners at a brothel A British woman, with good manners, goes to a brothel in Nevada to get a naked massage. This bit of dialogue is priceless: “Now. Would you like a little tongue action on those nipples?” she asked. “If it’s no bother,” started my very English reply, “yes please.” From Vice. Source February 8th, 2015 No Comments Azithromycin and mitochondrial biogenisis Interesting: The effects of a variety of oxazolidinones, with different antibacterial potencies, including linezolid, on mitochondrial protein synthesis were determined in intact mitochondria isolated from rat heart and liver and rabbit heart and bone marrow. The results demonstrate that a general feature of the oxazolidinone class of antibiotics is the inhibition of mammalian mitochondrial protein synthesis. Inhibition was similar in mitochondria from all tissues studied. Further, oxazolidinones that were very potent as antibiotics were uniformly potent in inhibiting mitochondrial protein ... Read More Source February 8th, 2015 No Comments Can antibiotics kill cancer? Interesting: Here, we propose a new strategy for the treatment of early cancerous lesions and advanced metastatic disease, via the selective targeting of cancer stem cells (CSCs), a.k.a., tumor-initiating cells (TICs). We searched for a global phenotypic characteristic that was highly conserved among cancer stem cells, across multiple tumor types, to provide a mutation-independent approach to cancer therapy. This would allow us to target cancer stem cells, effectively treating cancer as a single disease of “stemness”, independently of the tumor tissue ... Read More Source February 7th, 2015 No Comments The perfect Javascript framework Interesting: We all like simple tools. Complexity kills. It makes our work difficult and gives us much steeper learning curve. Programmers need to know how things work. Otherwise, they feel insecure. If we work with a complex system, then we have a big gap between “I am using it” and “I know how it works”. For example, code like this hides complexity: var page = Framework.createPage({ ‘type’: ‘home’, ‘visible’: true }); Let’s say that this is a real framework. Behind the scenes, createPage generates a ... Read More Source February 7th, 2015 In Business No Comments The problems in Europe This is very good: “Third, it makes no sense to blame the recipients of the capital inflows for causing the crisis. If enough money is sloshing around willing to invest in any stupid idea, you shouldn’t be too surprised that a lot of stupid ideas get funded. When, for example, Wolfgang Schaeuble, Germany’s finance minister, says: “The reasons for Greece’s problems can be attributable only to Greece and not to actors outside the country, and certainly not in Germany.” As he ... Read More Source January 30th, 2015 No Comments Do you think mothers play an important role during birth? If I asked you “Do you think mothers are important to birth?” you would probably regard that as a stupid question, and you would regard it as a stupid question because the answer seems so blindingly obvious. And, indeed, you would probably agree that mothers play an important role during birth, unless you happen to be in charge of the USA medical system, in which case mothers are the last thing that you ever worry about. This says it well: ... Read More Source January 29th, 2015 No Comments Using gulp-diff to discover which of your Javascript won’t minify I am astounded that the tech industry thinks this is a problem worth having. Do we really need any more evidence that HTTP and HTML and Javascript have failed and should be replaced with a new protocol? Unfortunately, this is a generic problem with minifying code in JavaScript. Because JavaScript is untyped, it is easy to introduce errors in minification like this when variable names are counted on not changing. I personally think programming like this is an ... Read More Source January 29th, 2015 No Comments When is dependency injection a bad thing? Interesting: Basically, dependency injection makes some (usually but not always valid) assumptions about the nature of your objects. If those are wrong, DI may not be the best solution: First, most basically, DI assumes that tight coupling of object implementations is ALWAYS bad. This is the essence of the Dependency Inversion Principle: “a dependency should never be made upon a concretion; only upon an abstraction”. This closes the dependent object to change based on a change to the concrete implementation; a class depending ... Read More Source January 28th, 2015 No Comments Immutability changes everything, part CXXVIII Interesting: If I had to give a single reason to use Clojure, it would be this: immutability is awesome. It protects you from yourself in ways that aren’t immediately obvious at first, but become more apparent over time. The argument that follows is particularly catered to the world of web development, but remains applicable in other contexts as well. In short: application state is a source of complexity, and unwarranted complexity is a developer’s worst enemy. This is true on the basic level ... Read More Source January 26th, 2015 No Comments Groupon is not a joke I went to lunch today with some folks who work at Second Life. It was kind of amazing to remember that Second Life still exists, and people still log in there. (And likewise, MySpace still exists.) Alot of forgotten companies keep going, and apparently Groupon is doing fairly well: But it didn’t take long for the wheels to fall off: By June 2012, the company was valued below Google’s proposed acquisition price. The following March, founding CEO Andrew Mason was ... Read More Source January 26th, 2015 No Comments Depression and sex Interesting: You’re probably not a doctor. Even if you are, you are not your reader’s doctor. You should at no point be doling out medical advice. You should not be offering diagnoses and the phrase “talk to your doctor” should come into play. And please, for the love of god, do not tell people which medications they should or should not be taking. I keep hearing “why don’t you just take______?” in relation to Orgasm Quest and, it’s incredibly inappropriate ... Read More Source January 26th, 2015 No Comments A girl gets propositioned Interesting story over at Vice: So after dinner, he drove me home, and then just handed me £500 in cash. I clearly looked very confused, and insulted, and he just said, “Oooh, you haven’t done this kind of thing before?” Of course, I jumped to conclusions and was like, “I’m not going to have sex with you!” And I actually gave the cash back to him. But he just said, “Look, I’m not delusional—you’re a smart, pretty, young girl. ... Read More Source January 22nd, 2015 No Comments How do you enforce the integrity of your system? I had a long conversation today with a very smart engineer. We have different views about things such as types and immutable data. It occurred to me that, in some sense, we both want the same thing: some sort of integrity check for our systems. And yet, we prefer to put these constraints in different places. His preferences: 1.) the dependency injector loads things in an order that ensures correctness 2.) the database does some (but not all) integrity checks (they ... Read More Source January 19th, 2015 No Comments The unnecessary complexity of Ruby Interesting: Some imported code could be modifying methods on built-in classes. You can never be sure exactly what will happen when this Ruby code executes. He’s right about that. “Readable” isn’t the word I’d use though: Ruby isn’t “reason-aboutable.” You can’t be completely sure what it’s going to do without running it. (No wonder Rubyists are such good testers.) Tom agreed that Ruby could be good at expressing the intent of the programmer. This is a different goal from knowing exactly how it ... Read More Source January 19th, 2015 No Comments The flexibility (and ease of debugging) of optional types in Clojure Jessica Kerr has a post about optional typing in Clojure. This is related to my post How ignorant am I, and how do I formally specify that in my code? Obviously I agree with this: It’s hard to find the difference because the difference isn’t content: it’s type. I expected a vector of a map, and got a list of a vector of a map. Joy. I went back and added a few schemas to my functions, and the error changed to ... Read More Source January 19th, 2015 No Comments How much should gender figure in a story about women fighting in Afghanistan? Interesting: Percy sets the stage with what might be called “disarming candor.” A mere three weeks after arriving in Afghanistan, she hears about this woman who runs a militia, sees a photo of her, and boom, we’re off to see the warlord–in Percy’s foggy notion, Mistuh Kurtz in a chador: “I’d been living in Afghanistan three weeks when my guide…showed me a photograph of the country’s only known female warlord, Bibi Ayisha, nom de guerre Commander Pigeon…In the photograph, she looked ... Read More Source January 18th, 2015 No Comments Stuff I do when I am burned out I’ve noticed these are the things I do when I am depressed and burned out: 1.) read newspapers 2.) watch television 3.) watch movies on/from Netflix 4.) read weblogs 5.) read novels or history books 6.) sleep If I am very depressed and burned out: 7.) post comments on websites, in response to things I’ve read When I had my own business, 2002-2008, I was so excited about my work that I rarely did any of the above. I recall, at one point, I went 6 months without ... Read More Source January 18th, 2015 In Business No Comments Jimmy Carter deregulated venture capital Interesting: Money had been pouring into venture capital since a 1978 change in regulations allowed pension funds to consider it a “prudent” investment. The$2.5 billion managed by venture capital firms in 1977 quintupled by 1983 to $12 billion2. New money committed per year rose 16x over five years, from$218 million in 1978 to $3.6 billion in 19833. The number of venture funds grew from 47 in 1980, to 71 in 1982, to 113 in 1983. The number of investment ... Read More Source January 18th, 2015 No Comments Why men love war Interesting: War is an escape from the everyday into a special world where the bonds that hold us to our duties in daily life–the bonds of family, community, work, disappear. In war, all bets are off. It’s the frontier beyond the last settlement, it’s Las Vegas. The men who do well in peace do not necessarily do well at war, while those who were misfits and failures may find themselves touched with fire. U. S. Grant, selling firewood on the streets ... Read More Source January 18th, 2015 In Business No Comments Constraining competition Interesting: Yet another threat to start-ups comes from state legislatures, in the form of increasingly cumbersome employment regulations. Historically, technical workers such as mechanics and engineers moved freely from job to job, spreading new technologies across the industry. Today, however, a variety of regulations limit that mobility. Some states—Florida and Massachusetts, for instance—have made it easy for employers to enforce noncompete agreements, which prohibit employees from leaving one company to join or start another in the same industry. According to research ... Read More Source January 18th, 2015 No Comments The heyday of the Romans ended with a crash The Classical World hit its peak fairly early. For Greek science, the peak was from 300 BC to 150 BC, mostly in Alexandria. The system was in trouble from 88 BC on, with occasional revivals. Somehow the system in the West lasted until 415 BC. It was very long collapse, from a good era much earlier: Dr Philip Kay of Wolfson College Oxford has produced the most detailed analysis of Rome’s economic development in the late Republic period and this ... Read More Source January 18th, 2015 No Comments The unique suffering of being rich This: Michael M. Thomas, a former investment banker and a novelist of Wall Street manners, said that if he were ever to write a book about his own privileged upbringing, he would title it “Orphans With Parents.” Meaning that despite the private clubs, the best schools and all the many things that money can buy, there has always been for those born into this world a sense of acute loneliness that can strain ties with parents and mark a child forever. is ... Read More Source January 18th, 2015 In Business No Comments The Hemingway Law of Motion: Gradually, then Suddenly Perhaps because I read Hemingway long before I heard of Dornbusch, I have often thought of the Hemmingway quote, every time I hear of the Dornbusch quote. Ernest Hemingway’s 1926 novel The Sun Also Rises, which is available various places around the web like here, includes the following snippet of dialogue: “How did you go bankrupt?” Bill asked. “Two ways,” Mike said. “Gradually and then suddenly.” Many economists will recognize this as a version of an apercu offered a number of times over ... Read More Source January 16th, 2015 No Comments Use an obvious alias to teach newcomers about a language I like this comment very much, as this is something that I remember struggling with: The examples are fairly easy to follow. Many of the examples use require to alias dependent namespaces. I think this is key when presenting Clojure examples. Having to prefix calls to library functions causes them to stand out from uses of core Clojure functions. It also lets readers know from which library each function comes from. I would have liked to see all of the examples ... Read More Source January 15th, 2015 No Comments Why I love immutability I love Clojure. I love immutability. Why? Maybe I lack self-discipline, or maybe my co-workers lack self-discipline (not my current co-workers, who are very talented, but people I’ve worked with in the past). I am tired of dealing with mutable variables in loops, which allow us to many easy mistakes like this: howMuchPrizeMoney = 0; arrayOfMoneyPerCategory =[]; for (i=0; i < users.length; i++) { u = users[i]; howMuchPrizeMoney += u.prize_money; } for (i=0; i < contests.length; i++) { ... Read More Source January 14th, 2015 No Comments Basecamp caches HTML to go fast Interesting: Stacker can only make things appear so fast. If actions still take 500ms to render, it’s not going to have that ultra snappy feel that Basecamp Next does. To get that sensation, your requests need to take less than 100ms. Once our caches are warm, many of our requests take less than 50ms and some even less than 20ms. The only way we can get complex pages to take less than 50ms is to make liberal use of caching. We ... Read More Source January 14th, 2015 No Comments Async difference between blocking and parking Interesting: There are two varieties of waiting: parking and blocking. Blocking is the kind of waiting you’re familiar with: a thread stops execution until a task is complete. Usually this happens when you’re performing some kind of I/O. This kind of waiting keeps the thread alive, doing no work, so that if you want your program to continue doing work you have to create a new thread. In the last chapter, you learned how to do this with future. Parking moves the ... Read More Source January 14th, 2015 No Comments A Pythonista reacts to Clojure’s immutability Interesting: Although the functional language purists will have other criteria (functions as first class values (python is already fine on this count)) the functional programming ethos is what is of interest to me: the idea of describing data transformations and piping the data through these transformations. Thats the essential, practical take-home message of functional programming and reproducibility. In pursuing these goals, we see the incorporation of some great libraries for R that allow piping and laziness, facilitating the easy composition of ... Read More Source January 14th, 2015 No Comments Maintain acceptance test suites Very interesting notes from Jakub Holý How to Create Maintainable Acc. T. Suites Good acceptance criteria (“INVEST” – especially valuable to users, testable) Layered implementation: Acceptance criteria (Given/When/Then) – as xUnit tests or with Concordion/FitNesse/… Test implementation – it’s crucial that they use a (business) domain-specific language (DSL), no direct relation to UI/API, which would make it brittle Application driver layer – translates the DSL to interactions with the API/UI, extracts and returns results Take care to keep test implementation efficient and well factored, especially wrt. ... Read More Source January 14th, 2015 No Comments How to set up project.clj for a Clojure project This looks great: Some development tools, such as lein-test-refresh, are useful to have across most of your Clojure projects. Rather nicely, Leiningen supports adding global profiles to ~/.lein/profiles.clj. These profiles are available in all your projects. {:user {:plugin-repositories [["private-plugins" {:url "private repo url"}]] :dependencies [[pjstadig/humane-test-output "0.6.0"]] :injections [(require 'pjstadig.humane-test-output) ... Read More Source January 14th, 2015 No Comments Assertions in dynamic languages give you the benefits of static type safety, with less code and ceremony Interesting: Well engineered non-trivial systems written in dynamic languages embrace runtime assertions especially near public interfaces. For example here’s a snippet of code from React.js that does exactly that: _renderValidatedComponent: function() { /* ... */ invariant( renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent), '%s.render(): A valid ReactComponent must be returned. You may have ' + ... Read More Source January 13th, 2015 No Comments The Internet Protocol is out of date, can RINA save us? Interesting: There is, of course, one clear layer violation that NAT has to deal with, but that’s not NAT’s fault either. Some application protocols put an IP address inside the application layer header. These have to be modified by NAT, so a NAT has to understand the syntax of all of these layer violating applications that it supports. The original application that did this was FTP, going back to the very early ARPANET days. FTP did this because – remember, this was a ... Read More Source January 11th, 2015 No Comments Dependency Injection in Python and Javascript To start with, consider this quote from Martin Fowler writing about Rake: This is a somewhat skewed story. I’m not trying to write a tutorial on Rake – I’m going to concentrate on things I find interesting rather than give a complete coverage. I’m not going to assume you know Ruby, Rake, or indeed any other build language. I’ll explain relevant bits of Ruby as I go along. Hopefully if you’ve done any messing with these, or are just interested in ... Read More Source January 11th, 2015 No Comments Encouraging new developers Interesting: Let me give an example — say a new coder had somehow, impossibly, in their first month of coding, created an app that would save the planet, plunging us into a permanent state of world peace and 100% clean energy. What’s the first thing that you as a senior developer would say to that person before seeing or testing their project? Let me guess — you’re thinking, “Is it responsive?” To put this in perspective, someone who knew ... Read More Source January 11th, 2015 No Comments How should a programmer grow? Interesting: Software wants to be a meritocracy, but the sad reality is that effectiveness of an individual programmer depends on the environment. Drop a 1.8+ engineer into a Visitor-infested Java codebase and he turns into a bumbling idiot, in the same way that an incompetent player at a poker table can fluster experts (who may not be familiar with that particular flavor of incompetence). The result of this is that detecting who the good programmers are, especially for a non-programmer ... Read More Source January 11th, 2015 No Comments Clojure tessers Interesting: Tesser.core looks a lot like the Clojure seq API, and many of its functions have similar names. Their semantics differ, however: Tesser folds do not preserve the order of inputs, and when executed, they run in parallel. Applying a fold using tesser.core/tesser uses mutiple threads proportional to processor cores. Unlike reducers, we don’t use the Java forkjoin pool, just plain old threads. I’ve seen too many weird performance issues compared to regular threads. (require '[tesser.core :as t]) (t/tesser [[1 2 3] [4 5 ... Read More Source January 9th, 2015 No Comments The dictatorship of the GIL keeps you safe and makes you slow But in jRuby there is no GIL, so you can go fast, and you can also hurt yourself: Source January 8th, 2015 No Comments Women in economics Interesting: Today, women in economics face a Catch-22, where speaking up can easily make them look like a shrew, while not speaking up robs them of legitimate power. There may be some loopholes in this Catch-22, but women starting out in economics need to be shown the ropes. And with so few senior female professors in economics, who can show a female graduate student how to promote herself gracefully, and break into predominantly male conversations without raising hackles? Somehow, that question ... Read More Source January 7th, 2015 No Comments The Tracy-Widom distribution Apparently phase shifts follow a unique distribution: The Tracy-Widom distribution is an asymmetrical statistical bump, steeper on the left side than the right. Suitably scaled, its summit sits at a telltale value: √2N, the square root of twice the number of variables in the systems that give rise to it and the exact transition point between stability and instability that May calculated for his model ecosystem. The transition point corresponded to a property of his matrix model called the “largest eigenvalue”: ... Read More Source January 7th, 2015 No Comments Peer-to-peer health This is a great example of peers helping peers: Humans of New York (HONY) is a blog and Facebook page that features portraits of New Yorkers, each paired with a caption in the subject’s own words. With over 11 million followers, HONY is adept at bringing into focus the experiences that shape people’s lives. A recent post made me stop in my tracks and think. The subject said: My children’s father was physically and emotionally abusive, so by the time I left ... Read More Source January 7th, 2015 No Comments Cloxp Interesting: Clojure comes with a set of qualities that shape how programmers can interact with the language and runtime environment. To a large part this is derived from the powerful yet simple ideas and concepts Clojure builds on. Properties such as homoiconicity (your code is nothing special, “just” data) enable several versatile features: Meta-programming based on code transformations (macros). Documentation and other meta-data that becomes part of the actual system. Structural editing and inspection because, well, code is just data! Clojure is ... Read More Source January 7th, 2015 No Comments Why is modularity such a struggle in Javascript? Surely it is suspicious that this is being so often discussed among Javascripters? Doesn’t that suggest that Javascript is being pushed to do things that it can not do? JavaScript Modularity Shaming: Pete Hunt of React fame recently got into an online discussion about the pros and cons of Webpack vs. Browserify. In the discussion he inadvertently coins a hilarious term for a form of rhetoric in some circles of the JavaScript community – “Modularity Shaming”. React itself has been on ... Read More Source January 7th, 2015 No Comments Is there any point to dependency injection frameworks in dynamic languages? 2 essays, attacking dependency injection in Ruby and Python: Python: Dependency injection is a good idea a lot of the time. You don’t need a class to inject dependencies into, either. Every time you pass something to a free function as a parameter, instead of having the function call another function to get the information, you’re basically doing the same thing: inversion of control. Python also lets you treat modules similarly to classes in a lot of ways (certainly more ... Read More Source January 5th, 2015 No Comments Defending Python’s Pyramid design choices Interesting: A canon of Python popular culture is “TIOOWTDI” (“there is only one way to do it”, a slighting, tongue-in-cheek reference to Perl’s “TIMTOWTDI”, which is an acronym for “there is more than one way to do it”). Pyramid is, for better or worse, a “TIMTOWTDI” system. For example, it includes more than one way to resolve a URL to a view callable: via url dispatch or traversal. Multiple methods of configuration exist: imperative configuration, configuration decoration, and ZCML (optionally via ... Read More Source January 5th, 2015 No Comments Handling HTTP routes in Python and Clojure Very interesting: Route handling 2 HTTP verbs in Flask (Python): import flask @flask.route('/user/', methods=['GET', 'POST']) def user(uid): if flask.request.method == 'GET': return db.get_user_by_id(uid) return db.create_user(flask.request, uid) Instead of using Compojure, my simple API servers used the underlying route matcher utility, clout. This was partly because my application needed one or two simple routes and so the additional power and complexity of Compojure was unnecessary. By using clout directly, the surface area ... Read More Source January 5th, 2015 No Comments Jakub Holý: Start with the simplest version you can Jakub Holý has an interesting post: Once upon time, there was a webshop portal with hundreds of partner webshops displayed on the front page. Potential users wanted to find out if their favorite webshops or a particular type of goods were available, existing users wanted to find a shop quickly. Therefore it was decided to implement search. But how to do that? [a section about the first attempt] Alternative 2: Minimal viable feature growing iteratively After the original diversion, I have focused on ... Read More Source January 5th, 2015 No Comments (Computer) Language is culture I find it remarkable that each computer language has such a strongly unique culture. I notice that in Python-land it is common to profile the heroes of Python-land. There is no other language community that does anything like this: This week we welcome Dr. Margherita DI LEO as our PyDev of the Week. She is our first PyLady in this series! Let’s spend some time getting to know her! madi Can you tell us a little about yourself (hobbies, education, etc): I come ... Read More Source January 5th, 2015 No Comments Kevin Drum expects more of the same Kevin Drum has an article where he basically predicts all current trends will continue for the next 30 years. The article reminds me very much of all the articles written during the 1960s that basically said “5% annual growth will continue forever and 100 years from now we will all be super wealthy and no one will ever work and everything will be perfect”, and then 1973 came a long and the post-war boom ended and we suddenly had increasing ... Read More Source January 5th, 2015 No Comments Why is gender still an issue? I was a small child in the 1970s, and my mom subscribed to Mz. magazine. I recall reading some articles about women being ignored or underestimated by men. I assumed this was a problem that merely needed to be pointed out, and then it would go away. Apparently it is still an issue, almost 40 years later. Why is that? Germaine Greer, in 1971, at a debate in New York filmed in Town Bloody Hall, spoke of “having to confront ... Read More Source January 4th, 2015 No Comments The power of the double-linked list This gave me a completely new appreciation for a data structure that I have rarely thought much about: – First we mark the node deleted – We walk our prev chain backwards until we find a live node, and we walk our next chain forwards until we find a live node – We then set the next of our predecessor and the prev of our successor to each other, unconditionally – We leave the pointers of the deleted node untouched Now, if deletes occur ... Read More Source January 4th, 2015 No Comments What does statistical over-fitting look like? I like how clear this makes the mistake of over-fitting: The model explains over 99% of the variance in the data. Like I said, not a typical data set. View the estimates of the coefficients, and the p-values of their t-tests (:coefs lm) (:t-probs lm) The values for coefficients b0, … b10 are (0.878 0.065 -0.066 -0.016 0.037 0.003 -0.009 -2.8273E-4 9.895E-4 1.050E-5 -4.029E-5), and the p-values are (0 0 0 1.28E-5 0 0.083 1.35E-12 0.379 3.74E-8 0.614 2.651E-5). All the coefficients are significant except ... Read More Source January 4th, 2015 No Comments Asian films worth seeing I want to see this: “The Golden Era” (China/Hong Kong) Director Ann Hui won best director at last month’s Golden Horse Awards for her three-hour literary epic depicting the troubled life and tumultuous relationships of novelist Xiao Hong, one of China’s most-prominent women writers whose work emerged during in the 1930s. The film employs the unusual technique of characters breaking the fourth wall to address the audience with their recollections of Xiao Hong. Actress Tang Wei (who will be seen next ... Read More Source January 4th, 2015 No Comments The Linux system calls worth knowing Very interesting: Here are the steps that the process involves: fwrite, together with the rest of the C standard library, is implemented in glibc*, which is one of the core components of the Linux operating system. fwrite is essentially a wrapper for the write library call. write will load the system call ID (which is 1 for write) and arguments into the processor registers, and then cause the processor to switch to kernel level. The way this is done depends on the processor ... Read More Source January 4th, 2015 No Comments Object Oriented Programming is often defended with examples of Anthropomorphism Gone Wrong So true: The school principal is standing in front of fresh students, who need to go to their respective classrooms. Only the students don’t know which classroom yet. How can we get each student to their assigned classroom? …When pushed too far, analogies break down. And we have pushed this one way too far. The reasons why it is better for the principal to just tell students where to go are rather specific: First, it makes the whole process a lot faster: ... Read More Source January 3rd, 2015 In Business No Comments The many penalties for writing about sex Violet Blue lists the problems she faces because she writes about sex. Since I’m working on software for midwives, it strikes me there is some common theme here. Writing about sex faces outright censorship, whereas trying to get information to pregnant women faces a different kind of censorship, the legal prohibition against giving medical advice unless you are a doctor — a seemingly reasonable limit until you realize how many women are desperately frustrated with their doctor and unable to ... Read More Source December 31st, 2014 No Comments Accessing Columns in SqlAlchemy A reminder to myself: The MetaData object contains all of the schema constructs we’ve associated with it. It supports a few methods of accessing these table objects, such as the sorted_tables accessor which returns a list of each Table object in order of foreign key dependency (that is, each table is preceded by all tables which it references): >>> for t in metadata.sorted_tables: ... print t.name user user_preference invoice invoice_item In most cases, individual Table objects have been explicitly declared, and these objects are typically ... Read More Source December 30th, 2014 No Comments Always git diff HEAD before committing Know what you’re about to push up. Source December 30th, 2014 No Comments We need to stop using HTTP for software Regarding the conversation on Hacker News, I strongly agree with “the entire stack is more less broken”. Back in 1989 Sir Tim Berners-Lee put a lot of careful thought into the design of a protocol for sharing documents using IP/TCP. However, when Ajax and Web 2.0 got going circa 2004, the emphasis was on offering software over TCP, and for that the HTTP protocol was poorly suited. Rather than carefully rethink the entire stack, and ideally come up with a ... Read More Source December 30th, 2014 No Comments How to convert Sqlite to Postgres I spent some hours trying to convert a Sqlite database to Postgres, and in the end, I failed. Or rather, I decided that it was no longer worth the time. I thought this would cost me 30 minutes, but hours went by and I was unable to make progress. For those using Ruby On Rails there is a good article about how to do it. I was not using any framework. Some of the problems that I ran into: ... Read More Source December 30th, 2014 No Comments The lack of expressiveness in Go This is the strongest attack I’ve ever read about Go: Deduping elements of a slice happens the following way in go: package main import “fmt” func main() { // Given the following list: xs := []int{8, 6, 8, 2, 4, 4, 5, 9} // For loop is the only generic way to traverse slices, you we have to write the following: index := map[int]struct{}{} for _, x := range xs { index[x] = struct{}{} } // We can “easily” acquire the deduped slice by using a for loop again… deduped := []int{} for ... Read More Source December 30th, 2014 No Comments Mae Keane, swallowed radium, died at age 107 Interesting that she lived to be 107 despite the radiation exposure. This is possibly in the same category of story as the apartment building in Taiwan that was accidentally built with weakly radioactive steel, and the people who lived there had lower than average cancer. There might be some very low level of radiation that does more harm than good. After all, we use it as the main form of therapy against cancer. In the 1920s, a young working-class woman ... Read More Source December 29th, 2014 No Comments Worse is Better is often worse Interesting: There’s nothing inherently wrong with making tradeoffs like C++ did. And since C++ we’ve seen many instances of these sorts of tradeoffs in the software world. Scala is another recent example–a powerful functional language which makes compromises to retain easy interoperability with Java. What I want to deconstruct is the culture that has come along to rationalize these sorts tradeoffs without the need for serious justification. That is, we do not merely calculate in earnest to what extent tradeoffs are ... Read More Source December 29th, 2014 No Comments It’s hard to preserve programmer intent across all stages down to the silicon Interesting: All modern and advanced compilers convert source code through various stages and representation into an internal data-flow representation, usually a variant of SSA. The compiler backend converts that back to an imperative representation, i.e. machine code. That entails many complicated transforms e.g. register allocation, instruction selection, instruction scheduling and so on. Lots of heuristics are used to tame their NP-complete nature. That implies missing some optimization opportunities, of course. OTOH a modern CPU uses super-scalar and out-of-order execution. So the first thing it has to do, is to perform ... Read More Source December 29th, 2014 No Comments Quality should be the responsibility of one person The stuff about quality is interesting. The rest is a misguided rant that gets all of its historical facts wrong. Unix fractured in the 90s? Good lord! It was fractured a long time before that. One of Brooks’s many excellent points is that quality happens only if somebody has the responsibility for it, and that “somebody” can be no more than one single person—with an exception for a dynamic duo. I am surprised that Brooks does not cite Unix as ... Read More Source December 29th, 2014 No Comments Which module should we use for RESTful APIs in Python? In Python we have a great many HTTP modules to choose from: urllib2 httplib httplib2 pycurl requests Balthazar offers a good overview of the modules and concludes: requests Finally, let’s see how to create a Github repo with requests. import requests, json github_url = "https://api.github.com/user/repos" data = json.dumps({'name':'test', 'description':'some test repo'}) r = requests.post(github_url, data, auth=('user', '*****')) print r.json Wait, is that it? No CreateManagerWithExtraLargeName() method call? No manual credential sending? Well, no. requests was designed to be an HTTP high level API, supporting all HTTP methods, SSL encryption, proxies, redirection, caching, etc. I ... Read More Source December 29th, 2014 No Comments How to imitate the Flask app.route() decorator Interesting: Now we’re almost there! But what use is that dictionary of routes if there’s no way to access the view functions inside of it? Lets add a method serve(path), which gives us the result of running a function for a given route if it exists or raises an exception if the route has not been registered yet. class NotFlask(): def __init__(self): self.routes = {} def route(self, route_str): ... Read More Source December 27th, 2014 In Business No Comments The changing focus of MBA programs MBA programs are adding more digital courses. Isn’t it surprising that this is happening now and not in, say for instance, 1999? Or is this perhaps an evergreen story that is being recycled (because I seem to recall similar articles almost 15 years ago)? About this: “That’s because the degree suggests a person steeped in finance and corporate strategy rather than in the digital-age arts of speed and constant experimentation — and in skills like A/B testing, rapid prototyping and data-driven decision ... Read More Source December 27th, 2014 No Comments When rational thinking is correlated with intelligence the correlation is modest I consider myself smart and rational, so I was surprised that I stumbled on many of the test questions. I got this one wrong, though you would think, having been programming computers for 15 years, I surely should have gotten this one right: Jack is looking at Anne, but Anne is looking at George. Jack is married, but George is not. Is a married person looking at an unmarried person? A) Yes B) No C) Cannot be determined Oddly enough, I feel that if this ... Read More Source December 27th, 2014 In Business No Comments If you miss the boom, your business will decline Interesting: Retail historians date the start of [Montgomery Ward’s] decline to the postwar boom of the 1950’s, when its rival, Sears, Roebuck & Company, moved aggressively into the then nascent suburbs, while Ward, under the steely leadership of its then chief executive, Sewell Avery, hoarded cash and waited for a second Great Depression. Source December 27th, 2014 In Business No Comments Real Simple is real complicated Reverse marketing works sometimes. When Caesar Augustus made himself dictator of Rome, he claimed he was restoring the Roman Republic. Likewise, RealSimple is about the hassle of orchestrating complicated social relations and calculations of social status: Then there are hostesses who meet our approval, like Auntie Mame, who glides about her apartment in a boozy and stylish haze. Like Clarissa Dalloway, she has servants to help (and eventually, her young nephew Patrick to mix martinis), but her skill seems to ... Read More Source December 26th, 2014 No Comments Boring is good in Python’s __init__ Interesting: You might notice that these three observations I’ve made all sound a bit negative. You might conclude that I think this is an antipattern to be avoided. If so, feel free to give yourself a pat on the back at this point. But if this is an antipattern, is there a pattern to use instead? I think so. I’ll try to explain it. The general idea behind the pattern I’m going to suggest comes in two parts. The first part is ... Read More Source December 26th, 2014 In Business No Comments When age and marriage and kids forces entrepreneurs to get a job Interesting: Yet, I still struggle with the fact that I’m no better off financially than I was when I started on this journey. In fact, it’s worse. I now have a wife, three kids, two dogs and a mortgage. All of that meaning that I can no longer take big risks. I need health insurance. I need a salary — and that salary needs to cover my family expenses. And, because I’ve ran so lean for the past 10 years, there ... Read More Source December 24th, 2014 No Comments Get SqlAlchemy to call CREATE SCHEMA to keep PostGres happy Someone asks: I have a SqlAlchemy model with a schema argument like so: Base = declarative_base() class Road(Base): __tablename__ = “roads” __table_args__ = {‘schema’: ‘my_schema’} id = Column(Integer, primary_key=True) When I use Base.metadata.create_all(engine) it correctly issues a CREATE TABLE with the schema name on the front like so “CREATE TABLE my_schema.roads (” but Postgresql rightly complains that the schema doesn’t exist. Am I missing a step to get SqlAlchemy to issue the CREATE SCHEMA my_schema or do I have to call this ... Read More Source December 24th, 2014 No Comments Generate Python models from an SQL schema Just a reminder to myself, this is how we should generate Python models for our SQL: from sqlalchemy import create_engine, MetaData, Table, Column, ForeignKey engine = create_engine("sqlite:///mydatabase.db") # produce our own MetaData object metadata = MetaData() # we can reflect it ourselves from a database, using options # such as 'only' to limit what tables we look at... metadata.reflect(engine, only=['user', 'address']) # ... or just define our own Table objects with it (or combine both) Table('user_order', metadata, ... Read More Source December 24th, 2014 In Business No Comments Why are people willing to give Facebook so much power? There is the related issue, going back to the beginning of the human race, regarding the deference that humans grant one another. Should we allow others to judge us? If so, how much? But now there is the more modern issue of allowing a for-profit corporation to moderate much of that calculation of social status. Personally, I shut down my Facebook account in 2011. And therein lies the problem. Facebook largely sets its own rules for what its rules are. ... Read More Source December 24th, 2014 No Comments .tgz file- tar: Unrecognized archive format I got this error during a build: .tgz file- tar: Unrecognized archive format Turned out I was working against a mirror that was no longer being updated. I had read instructions telling me to set a particular URL for a mirror in my .zshrc file, but the mirror was out of date to whatever was downloaded was wrong. This was a tough bug. Source December 24th, 2014 In Business No Comments Why Wikipedia succeeded Interesting: One answer, which seems obvious only in retrospect: Wikipedia attracted contributors because it was built around a familiar product – the encyclopedia. Encyclopedias aren’t just artifacts; they’re also epistemic frames. They employ a particular – and, yet, universal – approach to organizing information. Prior to Wikipedia, online encyclopedias tried to do what we tend to think is a good thing when it comes to the web: challenging old metaphors, exploding analog traditions, inventing entirely new forms…Another intriguing finding: Wikipedia ... Read More Source December 24th, 2014 No Comments Why callback hell is hell This is great: In the example above, it’s disturbing that simple and intuitively harmless changes introduced such drastic errors. Experientially, it’s kind of like executing print 2 + 2 and seeing 5. What was it about that logging API that turned us into such bad programmers? The specification of a typical callback-based API is simple: pass in any function and it will get called when the relevant event happens. Unfortunately, this simple specification doesn’t reflect reality. You can’t just call any function ... Read More Source December 24th, 2014 In Business No Comments Financing the “Humanisation” of Birth The ultimate paradox of how our species currently reproduces itself is that we have managed to make human birth an inhuman medical experience. Think how strange it is that policy-makers even need this advice: Policy makers who wish to achieve clinically important improvements in maternity care, particularly around normalising and humanising birth and preventing preterm birth should consider midwife-led continuity models of care and consider how financing of midwife-led services can be reviewed to support this. The USA has stumbled into ... Read More Source December 24th, 2014 In Business No Comments The increasing rigidity of Wikipedia Interesting: The basic cause of the decline is the English Wikipedia’s increasingly narrow attitude as to what are acceptable topics and to what depth those topics can be explored, combined with a narrowed attitude as to what are acceptable sources, where academic & media coverage trumps any consideration of other factors. I started as an anon, making occasional small edits after I learned of WP from Slashdot in 2004. I happened to be a contributor to Everything2 at the time, and when ... Read More Source December 24th, 2014 No Comments git pull –rebase Tried to push to git and got ref errors? A reminder to myself: If the GitHub repo has seen new commits pushed to it, while you were working locally, I would advice for: git pull –rebase git push The full syntax is: git pull –rebase origin master git push origin master That way, you would replay (the –rebase part) your local commits on top of the newly updated origin/master (or origin/yourBranch: git pull origin yourBranch). See a more complete example in the chapter 6 Pull with rebase ... Read More Source December 21st, 2014 No Comments Guido van Rossum agrees with me When I wrote How ignorant am I, and how do I formally specify that in my code? I said: For decades, computer programmers have argued with each other over the issue of strict data-type enforcement, versus dynamic data-type unenforcement. And after 16 years of computer programming, I have come down firmly in the middle: I like optional typing. Clojure allows me to work dynamically, but to type hint when I want to, so I can get the performance benefits of type ... Read More Source December 21st, 2014 No Comments Marriage peaked in 1958 Interesting: That was also the peak year of male participation in the economy and it was the best year for the wage-to-rent ratio. Source December 20th, 2014 No Comments Gamer culture and the demeaning of teen girl culture Interesting: It’s also the sort of following that makes it easy to see why people would make so much fun of him. As I argued in my piece about the Kim Kardashian: Hollywood game which is also popular with young girls, society loves to tell teen girls that their interests are stupid, vapid, and not worthy of respect. It’s not just teen girls, really. The internet has made a sport of mocking teens growing up on the internet. It’s easy to ... Read More Source December 20th, 2014 No Comments 110 year old lizard has children with 80 year old lizard Interesting: Henry, a tuatara who, as far as curators at Southland Museum in New Zealand know, had never mated before, hooked up with Mildred, a younger woman of about 80, in March. In July she laid 11 healthy eggs and, this week, all 11 of them hatched — the last one on Wednesday. “Eleven out of eleven,” curator Lindsay Hazley said Friday morning. “Bloody brilliant. We had a champagne breakfast to celebrate.” Henry was the oldest tuatara ever to mate at the museum, ... Read More Source December 20th, 2014 No Comments Academics are poor Interesting: ON the first day of the fall semester, I left campus from an afternoon of teaching anxious college freshmen and headed to my second job, serving at a chain restaurant off Las Vegas Boulevard. The switch from my professional attire to a white dress shirt, black apron and tie reflected the separation I attempt to maintain between my two jobs. Naturally, sitting at the first table in my section was one of my new students, dining with her parents. This scene ... Read More Source December 20th, 2014 No Comments Metaphors for bad code Interesting: I “write” a Call Option when I sell someone the right, but not the obligation, to buy in the future an agreed quantity of something at an price that is fixed now. So, for a payment now, I agree to sell you 10,000 chocolate santas[1] at 56 pence each, at any time up to 10th December. You’re prepared to pay the premium because you want to know that you’ll have santas in your stores at a price you can ... Read More Source December 20th, 2014 No Comments Which is better, MongoDB or Postgres? I am very impressed with the new JSON features in Postgres 9.4. So can Postgres completely replace MongoDB? There are some grouping and aggregate functions that MongoDB has that Postgres does not have. More so, at the Mongo shell I have access to the entire Javascript language, whereas Postgres only gives me SQL plus some cool extensions. I recently found out about “WITH” statements in Postgres. From the point of view of SQL, this is the coolest thing ever. From ... Read More Source December 20th, 2014 No Comments An outside perspective on SqlAlchemy Interesting: For starters, as you might expect from the difference in Ruby vs. Python cultures, SQLAlchemy is more explicit than ActiveRecord. SQLAlchemy has what is called a “declarative” mode where you define your class and your table all at once (within a class that inherits from SQLAlchemy’s declarative_base class). But you can also explicitly create, edit, and inspect an explicit metadata object which defines the table. Then you can define a Python class for your object – and then use SQLAlchemy’s ... Read More Source December 19th, 2014 No Comments The big Python surprise: a culture of composable libraries, like Clojure It is well known that Clojure has a culture best summarized as “Clojure developers prefer to assemble their own stack from small, composable libraries.” I have been working with Python lately. I am surprised by that it also has a culture of using small libraries. There have been 2 attempts at monolithic frameworks in Python: Zope and Django (maybe Pylons, though it is done as separate libraries, sort of like Symfony2 in PHP). But for the most part, Python goes for ... Read More Source December 19th, 2014 No Comments What happens if you introduce a new pattern in your software but never replace the old? This is very good: Each new design and technology choice never completely replaced the one that went before. The application has archaeological layers revealing it’s history and the different technological fashions taken up successively by Laurence, Bruce, Ina and Gordy. If you look along the Version 4 line, you can see that there are four different ways of doing the same thing scattered throughout the code base. Each successive lead developer acted in good faith. They genuinely wanted to improve the application ... Read More Source December 19th, 2014 No Comments If a disease drives you crazy, then you are crazy but you are also having a physical issue Very interesting story, about people driven crazy by their condition, and then being dismissed as crazy, when in fact, the craziness might be merely one symptom of the underlying illness: WE NEED EXPLANATIONS. We need certainty. And certainty is precisely what I have been seeking over the last few weeks. Are Morgellons sufferers mad? Are they sane? Are they the one? Or the other? I never considered the possibility that they might be both. And, in this, I wonder if I ... Read More Source December 18th, 2014 No Comments How to install Postgres By coincidence, I installed Postgres 9.3 yesterday and today they released 9.4 so I’m doing it all over again. This was a good setup guide. Source December 16th, 2014 No Comments Is PostGreSQL text search good enough? Some interesting commentary: As much as I would like it to be ‘good enough’, Postgres’ full text search lacks the feature set to be a reasonable solution to most search use cases. Background: I wrote a product search engine for a company called iTrackr using Postgres full text search, and later wrote the product search for milo.com using Solr. I also designed a simple (but very effective) algorithm to boost search rankings based on historical user click data, by generalizing click data ... Read More Source December 16th, 2014 In Business No Comments The CEO of Playboy admits that he’s clueless Considering how much money the modern CEO is paid, I find it frustrating that so many of them are incompetent, so much so that they are willing to be entirely honest about their incompetence. With so much free porn oozing from the Internet today, why would anyone look at a tame, old brand like Playboy — online or in print? Scott Flanders, 57, the first Playboy Enterprises Inc. CEO not to share DNA with its 88-year-old founder and figurehead Hugh Hefner, ... Read More Source December 15th, 2014 No Comments Logging activity can be expensive Scaling issues. Source December 15th, 2014 No Comments dtrace: error on enabled probe ID 5 (ID 992: io:mach_kernel:buf_strategy:start): illegal operation in action #3 at DIF offset 0 If I run “iotop” I see this error: I looked into it and found this on StackOverflow: I’ve looked into it a bit deeper and it does seem that it’s MySQL causing these heavy pulsing writes. When a table has an entry added or updated, does it have to re-write the entire table to disk or could it append/modify existing data? We are using MyISAM tables. We are also using SELECT queries with ORDER BY and TEXT fields, which of course require ... Read More Source December 15th, 2014 No Comments Why are dance friends so rare? I was recently talking to a friend. Over the last 5 years, she and I have gone out dancing maybe a total of 6 or 7 times, in New York City and in Berlin. Not very often, and she is my only real dance friend. She and I were talking about it recently, why are dance friends so rare? It seems difficult to find friends to go dancing with. The person you can go out to a club and dance ... Read More Source December 15th, 2014 In Business No Comments Making money as a public trust Andrew Montalenti comments on the fall of The New Republic: Take note, journalistas. This is how your readers view your stuff — not as a “public trust”, “a voice”, or “a cause”, as TNR was described by the exiting editors in their resignation letter. For better or worse, readers view your stuff as a product. And a product, to be bought, let alone used, needs to be useful. I disagree with that view. It is possible to sustain oneself as a “public trust”, ... Read More Source December 9th, 2014 No Comments 1 returns 1 as its identity, but how? In math, we take identity for granted. But this is really very complex. I am willing to believe that 1 knows it is 1, but how does it communicate that the function that calls it? This is something that I’ve been thinking about a lot lately. Or maybe I am wrong about what it knows. How does 1 know it is 1? Does it engage in self-reflection? If so, how? Wouldn’t self-reflection be a function? But how can a function ... Read More Source December 3rd, 2014 No Comments Java gave me a choice that I didn’t need, and I made the wrong choice Interesting story: I made a bug once, and I need to tell you about it. So, in 2001, I wrote a reference library for JSON, in Java, and in it, I had this line private int index that created a variable called “index” which counted the number of characters in the JSON text that we were parsing, and it was used to produce an ... Read More Source November 30th, 2014 In Business No Comments When the crowds leave, some parts of the Internet get better Interesting to think that after The Great Newbie Flood of the 1990s, some people gave up on IRC and now it is better than it was: IRC today is the opposite of http://en.wikipedia.org/wiki/Eternal_September. People who still use IRC are mostly well-mannered, skillful and welcoming of others, and things only seem to get better day-by-day. People who are unresponsive to email, Tweets and other means of communication can be very responsive on IRC. More signal less noise, I quess. and: Yes, compared to ... Read More Source November 30th, 2014 No Comments Perpetual immaturity is the price of immortality I am unable to agree with much of this post, but this in particular is a surprising viewpoint: Your perspective on current events changes. Take the news media. Everything new is old after a time: you see the large-scale similarities across decades even without becoming a student of history. Today’s invasion or oil crisis is just like the one before last. Our current political leadership are stuck in the same ideological monkey’s-paw trap as their predecessors the last time their party ... Read More Source November 30th, 2014 No Comments Why use Java? This article is called “Java For Everything” and it makes a good case for re-using the same language over and over again, but it does not make any case for Java. This makes clear of using the language that you know best: And finally, I went to write a simple program that put up a web interface. I considered using Python, but this would have required me to figure out how to serve pages from its library. I had already ... Read More Source November 30th, 2014 No Comments Letting others write your Emacs config This is an interesting attitude: After a long time of maintaining my own configuration I took the decision a few years ago to outsource it to people who really care about this stuff. I started with the Emacs Prelude (http://batsov.com/prelude/) which introduced me to some great tools. I recently switched to Vim bindings (evil-mode) and a week ago switched to Spacemacs (https://github.com/syl20bnr/spacemacs) which integrates better with evil-mode . So far I’m really liking the Spacemacs approach. tl;dr: Just use one of the ... Read More Source November 29th, 2014 No Comments peerinvalid The package mocha does not satisfy its siblings’ peerDependencies requirements! Setting up a new complicated system. I got to the point where “make build” completed. But I run into trouble with “make run”. I don’t know why this error exists: npm ERR! peerinvalid The package mocha does not satisfy its siblings’ peerDependencies requirements! npm ERR! peerinvalid Peer karma-mocha@0.1.9 wants mocha@* npm ERR! peerinvalid Peer mocha-as-promised@2.0.0 wants mocha@>= 1.8.0 Source November 29th, 2014 No Comments nixd is an automation framework to build your application environment I am not clear why this is better than running a VM but this is an interesting attempt to fix the problem of setting up complex systems on machine: nixd is an automation framework to build your application environment for development and production. It sits between build tools and configuration management engines, and lets you write simple shell scripts with hooks that will reliably get you from pristine source to running code in one command, and make every attempt to ... Read More Source November 29th, 2014 No Comments We need a unified abstraction for apps to discover each others formats Myself and a friend exchanged some email regarding the article “The Future of Asynchronous IO in Python”. My friend wrote: Seems like he wants zmq/nanomsg embedded inside Python. I am not really sure why. I responded: I think what he is suggesting is more interesting: a single, unified way of speaking to all protocols (MySql, MongoDB, Redis, Kafka, etc). When he says “protocol” I think he means “byte format”. He points out that each app generally has its own method of ... Read More Source November 29th, 2014 No Comments The Krugman diet I do this too, or at least, try to: Some people can do sustained self-discipline, eating healthy limited portions all the time; sorry, I need to drown my sorrows in red wine and pasta. Mark Bittman’s vegan before 6 works for some people I know. But what has worked for me is severe caloric restriction two days a week. In case you’re wondering, it’s actually very unpleasant. But periodic suffering seems to suit my personality. On the tracking issue: I use a ... Read More Source November 27th, 2014 No Comments Slingshot cleans up its “catch any exception or object” syntax Personally, I am pleased to see Slingshot improve this, as it is has long been a source of confusion. Paul Stadig writes a long comment that is critical of this change, but I disagree with his assumptions, especially here: “It is confusing to have a class selector that selects against the wrapped object instead of the wrapper.” In other words (catch RuntimeException e …) selects against the wrapper object that is thrown whereas (catch Object o …) selects against ... Read More Source November 27th, 2014 No Comments Why use Github and also Google Groups for an open source project? This seems to be a universal pattern, where an open source project has both a Github account and a Google Groups mailist, but is the mailist really needed? Why not just use the tools offered by Github (issues, the wiki, etc). I like that Monger introduced a Feature Request label on Github: From Google Groups Source November 27th, 2014 No Comments Flask uses assertions Assertions don’t seem to be used very often in Python, but they are used in Flask: eugene-eeo started the conversation: eugene-eeo commented 10 hours ago I was browsing through the source and found it weird that asserts were used instead of normal exceptions. untitaker replied: Alright. Because Flask is using assert-statements exactly as usually recommended. The Python wiki explains the meaning of assertion errors: Assertions are not a substitute for unit tests or system tests, but rather a complement. Because assertions are a ... Read More Source November 27th, 2014 No Comments Can Gunicorn die if bash quits before forking is done? A very intersting bug: Sly010 does some epic digging to find out why Gunicorn sometimes dies on startup: Did a bit more digging: # relevant section from daemonize() in util.py if os.fork(): os._exit(0) os.setsid() ... # (added 3 prints) # 3 out of 5 times this prints “1″ then silence. No gunicorn. # There is no error message and nothing in the logs. if os.fork(): print "1" os._exit(0) print "2" os.setsid() print "3" ... # (added an extra sleep) # This prints 1,2,3 (but I would ... Read More Source November 27th, 2014 No Comments The effects of signal() in a multithreaded process are unspecified I did not know this, and I find this very surprising: Continuing reading the manual page, the very first note under the NOTES section is this: The effects of signal() in a multithreaded process are unspecified. This is called Unspecified Behavior. What it means is that standard does not say anything as for how the function should behave in a multi-threaded environment. Therefore, it may exhibit a different behavior on different systems including different versions of the same system, at discretion of ... Read More Source November 27th, 2014 No Comments Why I don’t use classes or protocols in Clojure This post on Github sums it up very well. For almost every situation where, in an object oriented language, I would reach for interfaces and classes, in Clojure I tend to just use multi-methods. The key issue is polymorphism. All of us want to work in a language that gives us powerful forms of polymorphism. All of the major languages offer us some types of polymorphism, but let us ask, which gives us the most powerful and flexible forms? ... Read More Source November 27th, 2014 No Comments Returning an object from eval() in Javascript I did not know this: eval parses its argument in statement context. You have to put parentheses around an object literal if you want eval to return an object: > eval(‘{ foo: 123 }’) 123 > eval(‘({ foo: 123 })’) { foo: 123 } Source November 27th, 2014 No Comments A basic skeleton for python decorators This is a nice resource that I will almost certainly come back to: ### Example usage ### class PrintDebugDecorator(Decorator): def _call(self, *args, **kwargs): print 'calling', self._f, 'with', args, 'and', kwargs return self._f(*args, **kwargs) class ModuloDecorator(Decorator): def _init(self, n=None): self.__n = n if n else 42 def _call(self, *args, **kwargs): ... Read More Source November 27th, 2014 No Comments Protecting against JSON attacks in Flask Interesting debate. So where should Flask enforce safety for the handling of JSON? dghubble commented 18 hours ago My understanding is that the previous behavior (always converting the args to a dict) was sufficient to always prevent a top level json list, but blocked the legitimate use case of jsonify’ing an object for which one has written a custom JSONEncoder. This PR seems to enable that ability, while still protecting against top level json lists. Whether json lists are considered a vulnerability Flask ... Read More Source November 27th, 2014 No Comments Top level arrays in Javascript are dangerous: Register callback on Javascript Array setters Interesting attack: So now what happens if a clever hacker is embedding this to his website and social engineers a victim to visiting his site: <script type=text/javascript> var captured = []; var oldArray = Array; function Array() { var obj = this, id = 0, capture = function(value) { obj.__defineSetter__(id++, capture); if (value) captured.push(value); }; capture(); } </script> <script type=text/javascript src=http://example.com/api/get_friends.json></script> <script type=text/javascript> Array = oldArray; // now we have all the data in the ... Read More Source November 27th, 2014 No Comments Weird that under Python 3.4 runtime you can import from 2.7 Interesting: Weird that under Python 3.4 runtime you can import from 2.7. That should not be possible for all those sanity reasons. Because allowing that means: Thanks. I might miss something obvious but when using gunicorn MYPROJECT.wsgi:application i get: File “/virtualenv/lib/python3.4/site-packages/django/utils/timezone.py”, line 13, in import pytz File “/virtualenv/lib/python3.4/site-packages/pytz/__init__.py”, line 37, in from pytz.lazy import LazyDict, LazyList, LazySet File “/virtualenv/lib/python3.4/site-packages/pytz/lazy.py”, line 3, in from UserDict import DictMixin File “/usr/lib/python2.7/UserDict.py”, line ... Read More Source November 26th, 2014 No Comments Prepare for broken builds Funny: Source November 26th, 2014 No Comments Every programming language has its own culture It is interesting to note that this article about decorators in Python does not use the “word” closure, even though that would be the obvious way of talking about these, were we discussing a language like Javascript, where discussion of closures has been central to the culture since Doug Crockford first discussed them back in 2001. Only in the comments does someone ask about closures: So, decorators are an application of closures, i.e. closures applied to functions? Could you explain the ... Read More Source November 26th, 2014 No Comments Ugly mutable parts of Python I like Python more than PHP, but the mutable parts of Python are as ugly as PHP. This function is an exampe: def transform_words(content, targets, transform): """Return a string based on *content* but with each occurrence of words in *targets* replaced with the result of applying *transform* to it.""" result = '' for word in content.split(): if word ... Read More Source November 25th, 2014 In Business No Comments Is 0% growth for 90% a successful economic model? Such a fantastic title. Just 9 words, yet it packs so much in. I am especially curious why people become defensive when this issue is raised: While most people express initial concerns about recent trends of increasing inequality, there tends to be a negative reaction about accepting that this is indeed a failure of our current economic model and most become very defensive when that argument is being made. Why be defensive? Why not just work to end it? Source November 24th, 2014 No Comments What its like to have an illness with no name During the 1990s I was sick for 6 years, from 1994 to 2000. The doctors guessed what I had, but they were never sure. When you have an illness with no name, then you don’t get the social support that you might get if you have cancer. So I 100% relate to what this guy is saying: It Hasn’t Got A Name This, right away, is the big problem. I’ve been through enough to know that the best way to survive something ... Read More Source November 24th, 2014 No Comments Python and its discontents Python started off as a clean procedural language, with some immutable objects that would have allowed it to evolve into a beautiful functional language, but instead, with version 3, it veered in the direction of classic object oriented programming. I disappointed by this and so I have some interest in the various disappointments expressed by others: By far my biggest problem with the language is the stupid slot system. I do not mean the __slots__ but the internal type slots for ... Read More Source November 24th, 2014 No Comments An abundance of file watchers in Clojure This is a good overview of the file watchers in Clojure. I had no idea there were so many: Typically file watchers are implemented using either one of two patterns: verb based – (add-watch directory callback options) noun based – (start (watcher callback options)) The difference is very subtle and really centers around the verb start. If the verb start does not exist, we can treat the file-watch as an action on the file object. However if it does exist, we can treat ... Read More Source November 24th, 2014 No Comments Instant dashboard with the ELK stack? I need to build some dashboards for a business. I am impressed with Riak but I would have to find some way to build the dashboard. In theory, the ELK stack gives an almost instant dashboard. I am not at all interested in Logstash, but the rest of this sounds interesting: We’ve built a data analysis and dashboarding infrastructure for one of our clients over the past few weeks. They collect about 10 million data points a day. Yes, that’s ... Read More Source November 24th, 2014 No Comments How to write errors to the terminal while booting a daemon A very clever trick from Unicorn, which can probably be used everywhere: And then there’s the ready_pipe Unicorn uses, which is actually quite an amazing trick. See, if you want to daemonize a process under Unix, you need to call fork(2) two times (and do some other things) so the process is completely detached from the controlling terminal and the shell thinks is the process is done and gives you a new prompt. What Unicorn does when you tell it to run ... Read More Source November 24th, 2014 No Comments Using Emacs Eshell as the ultimate shell Very interesting idea, I am tempted to try it: File Selection If all you were doing was renaming a single file, or changing access permissions on all files in a directory, you’d hardly need a flexible shell, as dired or even Finder is sufficient for those tasks. A shell comes in handy when selecting a subset of files based on a pattern, and EShell really shines here, because of its filters.$ ls -al *.mp3(^U) # Show songs I don’t own

If ...

November 23rd, 2014

The Tracy-Widom distribution

Interesting:

The Tracy-Widom distribution is an asymmetrical statistical bump, steeper on the left side than the right. Suitably scaled, its summit sits at a telltale value: √2N, the square root of twice the number of variables in the systems that give rise to it and the exact transition point between stability and instability that May calculated for his model ecosystem.

The transition point corresponded to a property of his matrix model called the “largest eigenvalue”: the greatest in a series of ...

November 23rd, 2014

Why strict encyclopedias are strong

Back in 1994 LR Iannaccone wrote “Why strict churches are strong” and the gist of the argument was:

The strength of strict churches is neither a historical coincidence nor a statistical artifact. Strictness makes organizations stronger and more attractive because it reduces free riding. It screens out members who lack commitment and stimulates participation among those who remain. Rational choice theory thus explains the success of sects, cults, and conservative denominations without recourse to ...

November 23rd, 2014

Setting up a daemon to run automatically at startup

If I sudo to root and run:

ls -alh /etc/rc2.d/

I see something like this:

Apparently, on Ubuntu, the creation of these links is managed by update-rc.d

DESCRIPTION update-rc.d updates the System V style init script links /etc/rcrunlevel.d/NNname whose target is the script /etc/init.d/name. These links are run ...

November 23rd, 2014

Controlling the aggressiveness of swap

Interesting:

sysctl is similar ulimit: It allows to configure kernel parameters at runtime. If you wish to keep settings persistent across reboots you should edit /etc/sysctl.conf – be aware that wrong settings may break things in unforeseen ways.

Code Listing 4: Exploring sysctl variables # sysctl -a … vm.swappiness = 60 …

The list of variables is quite long (367 lines on my system), but I picked out vm.swappiness here. It controls how aggressive swapping will be, the higher it is (with a maximum of ...

November 23rd, 2014

Escort for command line utilities in Ruby

This looks awesome:

A lot of the existing CLI making libraries delegate to OptionParser for actually parsing the option string, while OptionParser is nice it doesn’t allow things like specifying the same option multiple times (e.g. like CURL -H parameter) which I like and use quite often. Trollop handles this case nicely, so a Trollop-based CLI tool is superior.

Also a lot of the other CLI libraries in an attempt to be extra terse and DRY make their syntax a little ...

November 23rd, 2014

Login into remote server with one word alias

I need to remind myself of this every time:

The SSH config file is a set of key-value pairs. One type of setting is a Host keyword with other attributes. Thus, an appropriate Host entry might be:

$cat .ssh/config Host annoying HostName annoying.hostname.example.org User admin Port 22022 Now the previous examples become:$ ssh annoying … $scp some-file annoying: … Finally, the last step is to take advantage of alias in your shell. In your .profile (or .bash_profile, etc):$ grep alias .profile alias annoying=’ssh annoying’; The end result is what one ...

November 23rd, 2014

Some Unix commands that I am finding useful

This is a note to myself. I am getting to know a new server topology at a new company. I find these commands useful:

(some of these are specific to Ubuntu — initctl, ncat, etc)

find

locate

ps

pstree

top

htop

netstats (in particular netstats -pl)

lsof

grep

du -h

df -h

ls (in particular “ls -alh” and “ls -alhrt”)

cd

screen

strace (as in “strace -c -f -p 19363″)

more

less

fuser (especially “fuser -v -n tcp 80″)

ncat (such as “ncat -lvp 4444″ I test to be sure I can send a message to a ...

November 23rd, 2014

A 23 line web server in Ruby

Part of the Ruby philosophy is to rely on Unix as much as possible. That is, in theory, what makes Unicorn so great. Here is an example of how simple it can be to build a server:

At the heart of everything that has to do with networking under Unix are sockets. You want to read a website? You need to open a socket first. Send something to the logserver? Open a socket. Wait for incoming connections? Open a socket. ...

November 23rd, 2014

Stream Control Transmission Protocol

I did not know about the existence of this kind of socket:

Similar to TCP and UDP, SCTP provides some features of both. It is message-oriented, and provides a reliable sequenced delivery of messages. SCTP supports multi-homing, i.e., multiple IPs on both sides of the connection. So it is called an association instead of a connection, as a connection involves communication between two IPs, while an association refers to communication between two systems that may have multiple IPs.

SCTP can provide ...

November 23rd, 2014

You don’t need to normalize a reporting database, because it’s read-only

I am about to create a reporting database, so this is a healthy reminder to myself:

A reporting database has a number of advantages:

The structure of the reporting database can be specifically designed to make it easier to write reports.

You don’t need to normalize a reporting database, because it’s read-only. Feel free to duplicate data as much as needed to make queries and reporting easier.

The development team can refactor the operational database without needing to change the reporting database.

Queries run ...

November 23rd, 2014

Older brains learn differently than young brains

Older people show plasticity in white matter, whereas young people showed plasticity in their brain’s cortex:

Individuals varied, but older subjects were just as likely on average as younger ones to make substantial progress in discriminating the small patch’s different texture. But the researchers weren’t just interested in whether learning occurred. They also scanned the brains of the volunteers at the beginning and the end of the week using magnetic resonance imaging, which can indicate plasticity in the cortex, and using ...

November 23rd, 2014

Female MBAs lose out to their husbands

More news on the gender front, this time comparing female MBAs with their husbands:

The male graduates were much more likely to be in senior management positions and have more responsibility and more direct reports than their female peers. But why? It’s not because women are leaving the workforce en masse. The authors found, definitively, that the “opt-out” explanation is a myth. Among Gen X and baby boomers they surveyed, only 11 percent of women left the workforce to be ...

November 23rd, 2014

The Hindenberg was the largest airship ever built

I did not know this:

The 1990s were a time of wild commercial optimism, driven by the end of the cold war, rapidly burgeoning public access to the internet, and deregulation of financial and banking controls. All of these came with an eventual crash and an ugly hangover in the following decade, but at the time funds managers poured money into whatever high-tech startup sounded good with a cocaine high. Roton, the fully reusable surface-to-orbit helicopter, got funding. VCs lined up ...

November 23rd, 2014

The toilet paper scare of 1973

Interesting:

Like most scares, the toilet paper fiasco all started with an unsubstantiated rumor. In November of 1973, several news agencies reported a tissue shortage in Japan. Initially, the release went unnoticed and nobody seemed to put much stock in it — save for one Harold V. Froelich. Froelich, a 41-year-old Republican congressman, presided over a heavily-forested district in Wisconsin and had recently been receiving complaints from constituents about a reduced stream of pulp paper. On November 16th, he released his ...

November 23rd, 2014

Automatic conflict resolution in a distributed database?

Clearly, a lot of careful thought has gone into Riak:

A pure key/value store is completely agnostic toward the data stored within it. Any key can be associated with values of any conceivable type, from short strings to large JSON objects to video files. Riak began as a pure key/value store, but over time it has become more and more aware of the data stored in it through features like secondary indexes and Search.

In version 2.0, Riak continued this evolution ...

November 22nd, 2014

How should biologists define sex?

Here is an interesting creature that manages to do the gene-swapping of sex while being asexual, and it therefore raises the question of whether sex should be re-defined:

Indeed, bdelloids appear to have adopted an evolutionary strategy similar to that of bacteria, a highly successful class of organisms that also lack conventional sex. “Researchers working on the evolutionary significance of sex often tended to overlook the fact that bacteria have been doing very well without sex for millions of years,” said ...

November 22nd, 2014

What is a vector clock?

Interesting:

Like dotted version vectors, vector clocks are a means of tracking a events in distributed systems. Unlike normal clocks, vector clocks have no sense of chronological time, i.e. they don’t care if something happened at 6 pm today or back in 1972. They care only about sequences of events. More specifically, they keep track of who—i.e. which actor in the system—has modified an object and how many times they’ve done so.

In a distributed system like Riak, multiple replicas of ...

November 22nd, 2014

Denormalizing a variety of data-types to a standard type for display

What is Riak good for? I get that we developers often denormalize a database to gain speed. I am not sure I totally get this, but I think this talk from developers at Yammer is about denormalizing data to a standard format, so that you can also get a simplicity and speed when you display it. In this graph they have “notifications” on the left, and then they start dividing it by status and by specific properties, which is strange, ...

November 22nd, 2014

Does anyone want to die?

I don’t know anyone who wants to die, and yet the public has shown no interest in funding the kind of science research that might some day lead to a cure for stuff like cancer. The USA had a good upward trend line in science spending up until 1970, but it has dropped off since. In some sense, people are acting as if they want to die, which someone justifies this comment on Hacker News:

Well, that’s another data point ...

November 22nd, 2014

The denormalized Materialized Path

When you have to do self-joins, but you don’t know how many to do, to build a hierarchical tree out of data in the database:

In this approach each record stores the whole path to the root. In our previous example, lets assume that KING is a root node. Then, the record with ename = ‘SCOTT’ is connected to the root via the path SCOTT->JONES->KING. Modern databases allow representing a list of nodes as a single value, but since materialized path ...

November 22nd, 2014

Kenya was the first country in Sub-Saharan Africa to deploy a completely online national HIS in September 2011

I note this mostly in surprise, as I realize how many efforts there are now ongoing to modernize health systems all over the world:

Kenya was the first country in Sub-Saharan Africa to deploy a completely online national HIS in September 2011. All districts and selected health facilities are connecting to the DHIS 2 national server using Mobile Internet (dongles/usb modems) on their computers. Kenya allows self-registration of personal user accounts.

After 1 year of country-wide use the national reporting rates for ...

November 22nd, 2014

Gravidity

The word comes from Latin, meaning heavy or burdened:

In human medicine, “gravidity” refers to the number of times a woman has been pregnant,[1] regardless of whether the pregnancies were interrupted or resulted in a live birth.

The term “gravida” can be used to refer to a pregnant woman.

A “nulligravida” is a woman who has never been pregnant.

A “primigravida” is a woman who is pregnant for the first time or has been pregnant one time.

A “multigravida” or “secundogravida” is a woman ...

November 21st, 2014

Why doesn’t protein send information to RNA?

I find this puzzling:

The enzymes that transcribe DNA, and turn it into RNA, are proteins, and if they are damaged, then a type of information would move from protein to RNA, and yet the above graph suggests there is no feedback from protein to RNA. Why?

From here:

The focus of proteomics is a biological group called the proteome. The proteome is dynamic, defined as the set of proteins expressed in a specific cell, given a particular set of ...

November 21st, 2014

The Haplotype Map

Interesting:

The International HapMap Project is a collaboration among researchers at academic centers, non-profit biomedical research groups and private companies in Canada, China, Japan, Nigeria, the United Kingdom, and the United States. It officially started with a meeting on October 27 to 29, 2002, and was expected to take about three years. It comprises two phases; the complete data obtained in Phase I were published on 27 October 2005. The analysis of the Phase II dataset was published in October 2007. ...

November 21st, 2014

The data that Uber hides

Uber has deleted some blog posts, in particular this one:

Recently, I have come to understand that some of you may have—and I’m not pointing any fingers here or anything—on occasion found love that you might immediately regret upon waking up the morning after. Let’s talk about that. In times of yore you would have woken up in a panic, scrambling in the dark trying to find your fur coat or velvet smoking jacket or whatever it is you cool ...

November 21st, 2014

Government science projects: i2b2

I said this before, but it is an interesting trend: the last 20 years has seen the growth of a great many data silos in every industry, both governmental and private-sector, and now there seems to be great value in seeking integration. I noticed this during the summer, when I was working at LaunchOpen: they were integrating private sector databases such as Moodle and Blackboard, with those databases maintained by the Department Of Education. Now I notice the same thing ...

November 21st, 2014

What good can come from childbirth?

The headline was too good to pass up. This is from Amy Romano’s latest essay on innovative models of caring for mothers and children:

It almost seems ludicrous to ask what good can come from childbirth, since birth results in a new human being, an event celebrated across every culture. But it is a worthy question to consider in the context of healthcare. When we talk about birth outcomes, the framework is usually morbidity and mortality: preterm birth, birth injury, ...

November 21st, 2014

The SQL relational model fails at hierarchical trees

This is a very good point:

Since we don’t know the number of levels between the two, we can’t tell how many times to selfjoin emp, so that the task can’t be solved in traditional SQL.

Which is from here:

Relational databases are universally conceived of as an advance over their predecessors network and hierarchical models. Superior in every querying respect, they turned out to be surprisingly incomplete when modeling transitive dependencies. Almost every couple of months a question about how to ...

November 21st, 2014

How many errors are needed to make a model false?

Interesting comment, in response to criticism of an essay about probability:

Are you saying that one statistical error in a probabilistic model makes the entire model wrong? Then you’d equally have to say that one logical error in a categorical model makes it equally wrong. And manifestly, there are many logical errors in all grammars. So I’m not sure what your point is here.

I’m interested to know: I quoted Chomsky: “That’s a notion of [scientific] success that’s very novel. I ...

November 21st, 2014

¡Yo!

I just got done reading Julia Alvarez’s novel ¡Yo!

There was a lot I liked about this novel, but first I will list a few things I did not like.

Julia Alvarez is clearly very intelligent, and yet none of the characters in the book come across as especially intelligent. The main character, Yo, is a writer and a professor, and so we can assume that she is probably very smart. However, the text mostly brings out her failings and ...

November 21st, 2014

Preeclampsia studies should segregate data regarding how many births a woman has had

I am now working on women’s health/pregnancy issues, so this was interesting: “Mixing Nulliparous and Multiparous Women in Randomised Controlled Trials of Preeclampsia Prevention Is Debatable: Evidence from a Systematic Review”

Nulliparous means a woman has never been pregnant.

Multiparous means a woman has been pregnant several times.

Their conclusion:

Main Results

88 randomised controlled trials were identified, representing 83,396 included women. In 58 of the 88 articles identified (65.9%), preeclampsia was the primary outcome. In 31 of these (53.4%), the investigation combined ...

November 21st, 2014

The woman at the bank

Sad story. I went to my bank (Chase bank). I am visiting my mom in New Jersey, so this is out in the suburbs. I wanted to get some spending/travel money, so I was there to make a withdrawal. I arrived at the slow part of the day, before lunch. There was only 1 teller. There was only 1 other customer, a woman, who was before me in line. She looked very tired, and I guessed her age was between ...

November 20th, 2014

Why is declarative programming so limited?

Interesting idea, though strange that this has not caught on decades ago:

Today’s computers don’t have enough contextual knowledge to make me a sandwich but there are lots of domains where this approach excels. The classic example is SQL databases. Rather than specifying exact data-structures and operations, the user specifies a high-level schema and sends descriptions of queries. It is the responsibility of the database to choose storage types, manage concurrent changes and generate query plans. It makes these decisions based ...

November 20th, 2014

Python encourages tinkering

I already linked to this, but it really is interesting. I don’t think this is possible in Ruby or PHP or script languages in general, but you can do crazy things in Python:

Above we did an in-place modification of a value in a numpy array. This is easy, because a numpy array is simply a data buffer. But might we be able to do the same thing for a list? This gets a bit more tricky, because lists store ...

November 20th, 2014

Is conservative-versus-liberal a proxy for rare-big-loss-versus-rare-big-win

Interesting:

Consider some jobs that lean conservative: soldier, police, doctor, religious worker, insurance broker. These seem to be jobs where there are rare big bad things that can go wrong, and you want workers who can help keep them from happening. That explanation can also makes some sense of these other conservative jobs: grader & sorter, electrical contractor, car dealer, trucker, coal miner, construction worker, gas service station worker, non-professor scientist. Conservatives are more focused on fear of bad things, and ...

November 20th, 2014

Marc Andreessen on diversity in the tech industry

Marc Andreessen makes a good point about the diversity of males in the tech industry. But there are some racial groups that are left out of the industry, in particular, blacks and hispanics. The tech industry is one of the few industries that is fast growing and high paying, so it is important that groups that have been historically discriminated against, in the USA, be included. Also, Andreessen’s point mostly applies to men, not women.

I think the critique that ...

November 18th, 2014

Software transactional memory in Python

Interesting:

Python has a GIL, right? Not quite – PyPy STM is a python implementation without a GIL, so it can scale CPU-bound work to several cores. PyPy STM is developed by Armin Rigo and Remi Meier, and supported by community donations. You can read more about it in the docs.

Although PyPy STM is still a work in progress, in many cases it can already run CPU-bound code faster than regular PyPy, when using multiple cores. Here we will see how ...

November 18th, 2014

Rapid intake and output of data, with control over the scale of the failures

Two new and interesting libraries:

s3-logging:

At first, we used the Hadoop S3 client, which we had used in some lightweight use cases before. Unfortunately, it ended up coping poorly. Each server had a sustained throughput of about 10 megabytes of compressed data per second, and every so often S3 would hiccup and stop accepting data for a few minutes. When this happened, Hadoop’s client would simply buffer the data in-memory until all the memory was exhausted, at which point the process ...