Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://kevin.scaldeferri.com/blog/index.rss

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <rss version="2.0">
  3.  <channel>
  4.    <title>Kevin's Weblog</title>
  5.    <link>http://kevin.scaldeferri.com/blog/</link>
  6.    <description>Yet another intersection of technology and politics.</description>
  7.    <language>en</language>
  8.    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  9.    <generator>blosxom/2.1.1</generator>
  10.  
  11. <item>
  12.  <title>Speeding up a Rails request by 150ms by changing 1 line</title>
  13.  <link>http://kevin.scaldeferri.com/blog/2009/05/08/RailsRackResponse.html</link>
  14.  <description>&lt;p&gt;We’re pretty obsessed with performance at &lt;a
  15.    href=&quot;http://www.gilt.com/&quot;&gt;Gilt Groupe&lt;/a&gt;.  You can get a taste
  16.  for what we’re dealing with, and how we’re dealing with it, from our
  17.  recent &lt;a
  18.    href=&quot;http://en.oreilly.com/rails2009/public/schedule/detail/8505&quot;&gt;presentation at RailsConf&lt;/a&gt;.&lt;/p&gt;
  19. &lt;p&gt;One of the techniques we’re using is to precompute what certain
  20.  high-volume pages will look like at a given time in the future, and
  21.  store the result as static HTML that we serve to the actual users at
  22. that time.  For ease of initial development, and because there’s still
  23.  a fair bit of business logic involved in determining &lt;em&gt;which
  24.  version&lt;/em&gt; of a particular page to serve, this was done inside our
  25.  normal controller actions which look for a static file to serve,
  26.  before falling back to generating it dynamically.&lt;/p&gt;
  27. &lt;p&gt;We’re now running on Rails 2.3 and, of course, Rails Metal is the
  28.  new hotness in 2.3.  I spent the last couple days looking into how
  29.  much improvement in static file serving we would see by moving it
  30.  into the Metal layer.  Based on most of what I’ve read, I expected
  31.  we might shave off a couple milliseconds.  This expectation turned
  32.  out to be dramatically wrong.&lt;/p&gt;
  33. &lt;p&gt;Metal components operate outside the realm of the usual Rails
  34.  timing and logging components, so you don’t get any internal
  35.  measurements of page performance.  Instead, I fired up &lt;a
  36.    href=&quot;http://httpd.apache.org/docs/2.0/programs/ab.html&quot;&gt;ab&lt;/a&gt; to measure
  37. the serving times externally.  What I found for the page I was
  38.  benchmarking was that the Metal implementation took about 5ms.  The
  39.  old controller action took 170ms.  But, wait... the Rails logs were
  40.  only reporting 8ms for that action.  Something was fishy.&lt;/p&gt;
  41. &lt;p&gt;I started inserting timers at various places in the Rails stack,
  42.  trying to figure out where the other 160ms was going.  A little bit
  43.  was routing logic and other miscellaneous overhead, but even setting
  44. a timer around the very entry points into the Rails request serving
  45.  path, I was only seeing 15ms being spent.  This was getting really
  46.  puzzling, because at this point where a Rack response is returned to
  47. the web server, I expected things to look identical between Metal and
  48.  ActionController.  However, looking more closely at the response
  49.  objects I discovered the critical difference.  The Metal response
  50.  returns an &lt;code&gt;[String]&lt;/code&gt;, while the controller returned an
  51.  ActionController::Response.&lt;/p&gt;
  52. &lt;p&gt;I went into the Rails source and found the &lt;code&gt;each&lt;/code&gt; method
  53. for ActionController::Response.  Here it is:&lt;/p&gt;
  54. &lt;pre&gt;
  55.   def each(&amp;callback)
  56.     if @body.respond_to?(:call)
  57.       @writer = lambda { |x| callback.call(x) }
  58.       @body.call(self, self)
  59.     elsif @body.is_a?(String)
  60.       @body.each_line(&amp;callback)
  61.     else
  62.       @body.each(&amp;callback)
  63.     end
  64.  
  65.     @writer = callback
  66.     @block.call(self) if @block
  67.   end
  68. &lt;/pre&gt;
  69. &lt;p&gt;The critical line is the case where the body is a String.  The code
  70. iterates over each line in the response.  Each line is written
  71.  individually to the network socket.  In the case of the particular
  72.  page I was looking at, that was 1300 writes.  Ouch.&lt;/p&gt;
  73. &lt;p&gt;To confirm this was the problem, I changed that line to&lt;/p&gt;
  74. &lt;pre&gt;
  75.      yield @body
  76. &lt;/pre&gt;
  77. &lt;p&gt;With the whole body being sent in a single write, ab reported 15ms
  78.  per request, right in line with what I measured inside Rails.&lt;/p&gt;
  79. &lt;p&gt;1 line changed.  150ms gained.  Not too bad.&lt;/p&gt;
  80. &lt;p&gt;This sort of performance pessimization we uncovered is particularly insidious
  81.  because it’s completely invisible to all the usual Rails
  82.  monitoring tools.  It doesn’t show up in your logged response time;
  83.  you won’t see it in NewRelic or TuneUp.  The only way you’re going
  84.  to find out about it is by running an external benchmarking tool.
  85.  Of course, this is always a good idea, but it’s easy to forget to do
  86.  it, because the tools that work inside the Rails ecosystem are so
  87.  nice.  But the lesson here is, if you’re working on performance
  88.  optimizations, make sure to always get a second opinion.&lt;/p&gt;
  89.  
  90.  &lt;p&gt;&lt;a
  91.  href="http://kevin.scaldeferri.com/blog/2009/05/08/RailsRackResponse.html#comments"&gt;Comments&lt;/a&gt;&lt;p&gt;
  92.  </description>
  93. </item>
  94.  
  95. <item>
  96.  <title>Technical Difficulties</title>
  97.  <link>http://kevin.scaldeferri.com/blog/2009/05/02/TechnicalDifficulties.html</link>
  98.  <description>&lt;p&gt;I took a bit of a blogging hiatus.  Not particularly that I ran out
  99. of things to say, but rather there were technical difficulties.  The
  100.  short version, because I’m sure nobody cares, is this: last fall I
  101.  retired my last non-Intel Mac.  My blogging workflow involves Emacs
  102.  PSGML mode, and makes use of a couple obscure corners of that
  103.  package.  Somehow on Intel Macs, one of those corners was busted.
  104.  Don’t ask me why.  I vaguely intended to try to debug the problem,
  105.  but never got around to it.  Last week, I decided I had something
  106.  valuable enough to say that I would — the horrors — undertake to
  107.  write valid XHTML without editor support.  And, low and behold,
  108.  everything worked perfectly again.  I haven’t updated Emacs.  I’m
  109.  speculating something in some software update fixed something that
  110.  was the root cause of this rather obscure problem.  But, yeah, I
  111.  really don’t know.  But, I’m back!&lt;/p&gt;
  112.  
  113.  &lt;p&gt;&lt;a
  114.  href="http://kevin.scaldeferri.com/blog/2009/05/02/TechnicalDifficulties.html#comments"&gt;Comments&lt;/a&gt;&lt;p&gt;
  115.  </description>
  116. </item>
  117.  
  118. <item>
  119.  <title>Alpha Male Programmers &lt;em&gt;Are&lt;/em&gt; Driving Women Out</title>
  120.  <link>http://kevin.scaldeferri.com/blog/2009/04/28/AlphaProgrammersAndWomen.html</link>
  121.  <description>&lt;p&gt;Yesterday, DHH made an argument that &lt;a
  122.    href=&quot;http://www.loudthinking.com/posts/40-alpha-male-programmers-arent-keeping-women-out&quot;&gt;alpha
  123.  male programmers aren’t keeping women out&lt;/a&gt; of the tech field.
  124.  I’m of the opinion that he’s wrong and that his argument is flawed,
  125.  and in a moment I’ll explain why, but let me get a few things out of
  126. the way so they don’t distract from the rest of my argument.&lt;/p&gt;
  127. &lt;p&gt;First, I don’t think that “alpha males” or the “rockstar” mentality
  128. are the only causes of under-representation of women in technology. As
  129. far as I can tell, the causes are many, varied, generally difficult to
  130.  deal with, and in one or two cases may even be valid reasons why we
  131.  might ultimately accept some degree of imbalance in the
  132.  field. Second, this is not strictly a gender issue.  Some men are
  133.  also driven away by this behavior, although I think women are more
  134.  likely to be; and also some “alpha males” happen to be female.
  135.  Third, this is not a personal attack on DHH or any other individual,
  136. although some people might read parts of it in that way.  But my goal
  137.  here is that the range of individuals who find themselves
  138.  uncomfortably reflected in what I say, but don’t simply reject it
  139.  all out of hand, might view that discomfort as an opportunity for
  140.  personal growth.  Finally, I am certainly not claiming that I am
  141.  perfect in this regard.  I’ve made mistakes in the past; I will make
  142. them again.  I simply hope that my friends will be kind enough to
  143.  point out my mistakes to me, so that I can try to do better.&lt;/p&gt;
  144. &lt;p&gt;Okay, now that that’s all out of the way...&lt;/p&gt;
  145. &lt;p&gt;I first claim that DHH is wrong.  My proof is empirical and
  146.  anecdotal, but fortunately for me, I’m on the side of this debate
  147.  that gets to use those techniques.  I.e., I’m asserting existence of
  148. a phenomenon, rather than non-existence.  I know numerous women who
  149.  have been driven away by alpha male behavior.  In some cases, they
  150.  simply moved to a different team, or a different company.  In other
  151.  cases, they switched to non-programmer roles.  And some left the
  152.  industry entirely.  I know this because they told me.  They
  153.  described specific individuals and specific behaviors which drove
  154.  them away.&lt;/p&gt;
  155. &lt;p&gt;With some frequency in these debates, male programmers
  156.  will claim that they don’t know any women who have left the field
  157.  for this reason (or who have experienced sexism in the field, or who
  158.  were offended by the example under discussion, or even just the
  159.  milder claim that DHH makes, that no one has any idea what to do).
  160.  I can explain this in only one of two ways: either they don’t know
  161.  any women in the field to begin with or don’t talk with them beyond
  162.  the minimal professional requirements, or women are not telling them
  163. because they are part of the problem.  Perhaps it would be more
  164.  effective if these women directly confronted the people causing the
  165.  problem, but the fact of the matter is that most people, men and
  166.  women, dislike conflict.  We’re much more comfortable griping to a
  167.  sympathetic friend than to the cause of our unhappiness.  So
  168.  consider me something akin to an anonymizing proxy.  Without
  169.  revealing names or too many of the specifics, please trust me when I
  170. say that almost every woman in the field experiences and complains
  171.  about this.&lt;/p&gt;
  172. &lt;p&gt;Now I also said that DHH’s argument is flawed, and I will spend the
  173. rest of this post pointing out the various flaws I see.&lt;/p&gt;
  174. &lt;p&gt;DHH claims alpha males cannot be a problem in programming because
  175.  the average male programmer is “meek, tame, and introverted”
  176.  compared to other fields.  First off, “alpha males” are by definition
  177. not average; they are the most dominant individuals of a group.  And,
  178.  it may even be possible that the general meekness or introversion of
  179. programmers makes it easier for a small set of individuals to dominate
  180. the interaction, rather than reaching a condition of detente between a
  181. group of uniformly assertive individuals.  Second, presumably DHH does
  182. not interact with these people from other fields in a professional
  183.  context.  A point repeatedly stressed in this recent “pr0n star”
  184.  controversy is that it’s not an issue of people being anti-sex or anti-porn; it’s
  185.  about what’s appropriate in the workplace, or in a professional
  186.  context.  Standards for behavior in a social context are different.
  187. Third, he speaks in terms of whether these other men are more or less
  188.  “R-rated”.  This is not the point.  Women are just as “R-rated” as
  189.  men.  They curse.  They talk about sex (often more explicitly than
  190.  men).  The issue is not about whether we say or do adult things,
  191.  it’s about whether we respect each other as human beings and whether
  192. we understand the societal norms of what is and is not appropriate in
  193.  particular contexts.  In fact, in this regard, I’ll defend DHH.
  194.  Saying “fuck” (in the exclamatory, non-sexual usage) in the course
  195.  of a technical presentation is not problematic in this day and age
  196.  within the technology community.  I think most of us swear freely in
  197. the course of struggling with a nasty bug or production problem.  This
  198. is a normative expression of frustration within our community, and it
  199.  does not oppress or disrespect other members of the community.  (As
  200.  far as I know.  It’s possible that people just aren’t telling me
  201.  that it upsets them when I curse at my monitor.  If that’s the case,
  202.  I hope someone will tell me.)  Finally, DHH observes that these
  203.  other fields have a more even mix of men and women.  What he misses
  204.  is that when the distribution is relatively equal it is generally
  205.  easier and more comfortable for men to be men and women to be
  206.  women.  It is perhaps counterintuitive, but environments which are
  207.  heavily skewed call for greater sensitivity to gender or other
  208.  cultural differences simply because it is so easy to
  209.  unintentionally create an oppressive or exclusionary atmosphere.&lt;/p&gt;
  210. &lt;p&gt;In the final paragraphs of his post, DHH suggests that somehow by
  211.  respecting women we are squashing some other sort of “edge” and
  212.  diversity in the community.  I’m a little puzzled by what he means
  213.  by this, and I’m sort of afraid that he thinks that being a
  214.  heterosexual male who likes to look at scantily-clad women (or who
  215.  openly admits as much) is somehow “edgy”.  It’s not.  By
  216.  definition, hetero males like women; and it’s well established that
  217.  men tend to be visually oriented.  Pointing out that you fall in
  218.  this category does not make you “diverse”, it makes you a completely
  219.  typical representative of your gender and orientation.  No one needs
  220. to be reminded of it.&lt;/p&gt;
  221. &lt;p&gt;Moreover, it might be true that maximal gains are had by pushing
  222.  the edges (although I don’t think that one should naively assume
  223.  that analogy from physics or economics applies to social
  224.  endeavors), but for this to be work there has to be negative
  225.  feedback when boundaries are crossed.  If the edge-walkers want
  226.  society to accept their behavior, they must be prepared to
  227.  apologize, to make reparations, and to correct their course when
  228.  they go over the line.  This is the difference between a
  229.  trend-setter and a sociopath.&lt;/p&gt;
  230. &lt;p&gt;There’s quite a bit more that I could say on this issue, but I fear
  231. this may be becoming too long already, and I think it’s probably best
  232.  to focus only on the arguments presented in this particular post at
  233.  the moment.  To summarize things in a couple of sentences, the
  234.  phenomenon of women being discouraged by alpha male behavior is
  235.  real.  You merely need to talk, and listen, to women in the field to
  236. verify this.  (But you might have to earn some trust first.)
  237.  Comparisons with men in other fields in non-professional settings do
  238. not have much relevance to the matter at hand.  Claims that respecting
  239. the feelings and experiences of a minority group is damaging to the
  240.  community overall are extraordinary and require extraordinary
  241.  support.  Being a thought leader and being offensive are two very
  242.  different things.&lt;/p&gt;
  243. &lt;p&gt;It’s really quite discouraging that so much of this discussion
  244.  still seems mired in the question of whether a problem even exists,
  245.  or whether it is desirable and possible to address the problem.
  246.  This lack of acceptance leads both to the explicit refusals to
  247.  acknowledge the validity of the complaints of the offended, as well
  248.  as the phenomena of false apologies and insincere claims that “I
  249.  would help if only I knew how (and if it doesn’t require any actual
  250.  change of behavior on my part)”.  Male programmers need to pull
  251.  their heads out of the sand.  The evidence, both hard statistical
  252.  data and anecdotal, is overwhelming.  It also is not hard to find
  253.  advice about what can be done differently.  The hard part is moving
  254.  from a vague desire for diversity and balance to serious,
  255.  meaningful, sometimes painful self-examination and commitment to
  256.  change and improvement.  It’s not easy to admit flaws in yourself,
  257.  to acknowledge when you’ve hurt another person, or to make a true
  258.  apology.  Change doesn’t happen overnight or simply because you say
  259.  that you want it to.  It takes work, but it’s an important part of
  260.  being a human being and being a member of a community.&lt;/p&gt;
  261.  
  262.  &lt;p&gt;&lt;a
  263.  href="http://kevin.scaldeferri.com/blog/2009/04/28/AlphaProgrammersAndWomen.html#comments"&gt;Comments&lt;/a&gt;&lt;p&gt;
  264.  </description>
  265. </item>
  266.  
  267. <item>
  268.  <title>A Rails 2.3 Performance Gotcha</title>
  269.  <link>http://kevin.scaldeferri.com/blog/2009/04/27/Rails23MemcachedPerformance.html</link>
  270.  <description>&lt;p&gt;Recently we upgraded to Rails 2.3 at work.  Upon doing so, we saw
  271.  our application take an aggregate performance hit of about 50%.
  272.  Spending a little quality time with ruby-prof, one thing that stood
  273.  out as peculiar was an awful lot of time being spent creating and
  274.  tending to Ruby Thread objects.  Tracing up the call stack, these
  275.  were coming from inside the memcached client.&lt;/p&gt;
  276. &lt;p&gt;Buried in the Rails 2.3 release notes is the innocuous looking
  277.  statement:&lt;/p&gt;
  278. &lt;blockquote&gt;
  279.  &lt;p&gt;The bundled memcached client has been updated to version 1.6.4.99.&lt;/p&gt;
  280. &lt;/blockquote&gt;
  281. &lt;p&gt;What this fails to tell you is that this upgrade added a timeout
  282.  option to the client which, as the RDoc will happily inform you, “is
  283.  a major performance penalty in Ruby 1.8”.  Moreover, the default
  284.  value for the timeout is 0.5s, rather than nil.&lt;/p&gt;
  285. &lt;p&gt;Our application makes heavy use of caching, so we were getting
  286.  massacred by this.  To add insult to injury, our most heavily
  287.  optimized pages were hit the hardest, since they used memcached the
  288.  most.  Adding &lt;code&gt;:timeout =&gt; nil&lt;/code&gt; to our cache layer
  289.  immediately restored the previous performance.&lt;/p&gt;
  290. &lt;p&gt;Lessons from this story: if you’re a Rails developer using
  291.  memcached, go add that option to your code; if you’re a library
  292.  author adding an option with significant performance costs, default
  293.  to the old behavior; if you’re on the Ruby core team, please add an
  294.  interface to &lt;code&gt;select&lt;/code&gt; so that people don’t do silly
  295.  things like use Threads to implement timeouts on socket reads.&lt;/p&gt;
  296.  
  297.  &lt;p&gt;&lt;a
  298.  href="http://kevin.scaldeferri.com/blog/2009/04/27/Rails23MemcachedPerformance.html#comments"&gt;Comments&lt;/a&gt;&lt;p&gt;
  299.  </description>
  300. </item>
  301.  
  302. <item>
  303.  <title>Emotional Design</title>
  304.  <link>http://kevin.scaldeferri.com/blog/2008/11/14/EmotionalDesign.html</link>
  305.  <description>&lt;p&gt;I’m a huge fan of Norman’s previous book &lt;a
  306.    href=&quot;http://www.amazon.com/dp/0465067107/ref=no_sim/tag=kevinshome-20&quot;&gt;The
  307.    Design of Everyday Things&lt;/a&gt; and I highly recommend it to anyone
  308.  who builds things, physical or virtual.  This book takes on some of
  309.  the aspects of design beyond the functional or behavior, and
  310.  discusses the other aspects of why people are attracted to certain
  311.  objects.  It’s quite interesting for the first 2/3s of the book or
  312.  so, but then takes a strange hard left into a discussion of robots
  313.  and why robots will need to have emotions too.  Very strange.  But,
  314.  I would still recommend reading the earlier parts of the book.&lt;/p&gt;
  315.  
  316.  &lt;p&gt;&lt;a
  317.  href="http://kevin.scaldeferri.com/blog/2008/11/14/EmotionalDesign.html#comments"&gt;Comments&lt;/a&gt;&lt;p&gt;
  318.  </description>
  319. </item>
  320.  
  321. <item>
  322.  <title>A New Day in America</title>
  323.  <link>http://kevin.scaldeferri.com/blog/2008/11/05/ObamaWins.html</link>
  324.  <description>&lt;p&gt;It’s been a year and a half since my last political post.  I’m a
  325.  little surprised that it’s been quite that long, but not entirely
  326.  shocked.  I spent nearly all of this election cycle somewhat
  327.  withdrawn from the whole thing; feeling disenfranchised from years
  328.  of being told that my dissent was unpatriotic, and being
  329.  disgusted by the amount of ugly politics-as-usual that was going
  330.  on.  I wasn’t spellbound by Obama like so many of my friends and
  331.  neighbors, but slowly gained respect for his thoughfulness, general
  332.  positivity, sense of context, and willingness to confront real,
  333.  serious issues that most politicians shirk from.&lt;/p&gt;
  334. &lt;p&gt;So, it wasn’t until yesterday that I really started to feel a
  335.  nervous excitement that maybe we really would see a change this
  336.  year.  By 5PM, I was compulsively reloading web pages, and when the
  337.  counts hit 200 electoral votes with only the east coast reporting I
  338.  got that “OMG it’s really happening” feeling.  Around 7, I headed
  339.  down to the Green Dragon with a friend to watch on the TV there.  I
  340.  think I started vibrating at some point shortly before they called
  341.  it.&lt;/p&gt;
  342. &lt;p&gt;The whole room was silent for Obama’s speech.  I’m pretty sure most
  343.  of us cried.  I think over the last couple years I’d resigned myself
  344.  to only being able to have an effect on my local community.  His
  345.  speech inspired me to again turn my efforts to a larger sphere.  My
  346.  community will still be my primary, day-to-day focus; but I’ll
  347.  definitely be more engaged at the national level as well.  What
  348.  Obama said is true: this election doesn’t change anything by itself,
  349.  it just gives us the opportunity to change.  This is a difficult
  350.  time for our country, and it’s going to take hard work by many
  351.  people to solve these problems.  But there’s a huge population of
  352.  people like me that had all but given up and are now re-energized,
  353.  and I think we can really make some improvements.&lt;/p&gt;
  354. &lt;p&gt;Closing thoughts... To Obama: live your rhetoric and remember that
  355.  you now represent all Americans, not just your supporters.  To
  356.  McCain: you won back some of my respect with your concession speech;
  357.  please let this be a return to your old, pre-election self. To
  358.  supporters of both: be as gracious in victory and defeat as your
  359.  candidates were last night. Talk and listen to people you don’t
  360.  agree with, and realize that your goals are largely the same, even
  361.  when your methods differ.  Find the places where you can work
  362.  together.&lt;/p&gt;
  363. &lt;p&gt;Stay hopeful.&lt;/p&gt;
  364.  
  365.  &lt;p&gt;&lt;a
  366.  href="http://kevin.scaldeferri.com/blog/2008/11/05/ObamaWins.html#comments"&gt;Comments&lt;/a&gt;&lt;p&gt;
  367.  </description>
  368. </item>
  369.  
  370. <item>
  371.  <title>Using the Useful</title>
  372.  <link>http://kevin.scaldeferri.com/blog/2008/09/12/UsingTheUseful.html</link>
  373.  <description>&lt;p&gt;It shouldn’t need to be pointed out, but the root of ‘useful’ is
  374.  ‘use’.  If you don’t actually use an object, regardless of whether
  375.  you abstractly feel it to be useful, perhaps it isn’t.  There is a
  376.  particular risk with objects that are both beautiful and useful
  377.  that we fail to use them, whether because we feel they are too
  378.  expensive or unique and irreplaceable to risk damage, or because we
  379.  put them on display as works of art but then fail to reach for them
  380.  when the need arises, or whatever excuse there may be.&lt;/p&gt;
  381. &lt;p&gt;Recently there are a handful of objects I’ve been treating this
  382.  way: my pocket knives and my fountain pen.  Yesterday, I actually
  383.  did take the intentional action of putting a knife in my pocket,
  384.  along with my wallet and keys, before heading out the door.  Today I
  385. did some paperwork with my fountain pen.  Hopefully this marks a
  386.  return to these habits.&lt;/p&gt;
  387.  
  388.  &lt;p&gt;&lt;a
  389.  href="http://kevin.scaldeferri.com/blog/2008/09/12/UsingTheUseful.html#comments"&gt;Comments&lt;/a&gt;&lt;p&gt;
  390.  </description>
  391. </item>
  392.  
  393. <item>
  394.  <title>Thoughts on the OSCON move</title>
  395.  <link>http://kevin.scaldeferri.com/blog/2008/09/12/SJ2009.html</link>
  396.  <description>&lt;p&gt;It’s now official that OSCON is leaving Portland and moving to San
  397.  Jose next year.  There’s a lot of unhappiness around here about it
  398.  and a definite feeling that the stated reason (rising travel costs)
  399.  isn’t the whole story.&lt;/p&gt;
  400. &lt;p&gt;Personally, I don’t think it’s clear that making the conference local for more
  401.  people is a good thing.  I’ve noted two years running
  402. that I felt like it was a very different experience to be living in
  403.  Portland and attending the conference — you’re much less immersed in
  404. the conference.  Increasing the number of people who are there for the
  405. sessions but don’t stick around for the evening social activities
  406.  won’t necessarily improve the conference.&lt;/p&gt;
  407. &lt;p&gt;ZDNet thinks “&lt;a
  408.    href=&quot;http://blogs.zdnet.com/open-source/?p=2886&quot;&gt;Portland just
  409.    doesn’t have the facilities to house a fast-growing conference
  410.    covering a global audience&lt;/a&gt;”, but I’d like to hear more
  411.  justification for that claim.  OSCON doesn’t come close to filling
  412.  the whole Oregon Convention Center.&lt;/p&gt;
  413. &lt;p&gt;Personally, this feels like the usual Silicon Valley bubble
  414.  mentality, combined with a touch of corporate greed.  I also have a
  415.  fear, possibly unjustified, that this may also trigger a slip
  416.  backwards on the “women in tech” front.  My impression is that
  417.  Portland has one of the best environments for trying to increase the
  418. participation of women in technology and open source, and I also have
  419.  the impression that the Valley has one of the worst.&lt;/p&gt;
  420. &lt;p&gt;I’m trying really hard to look at this beyond the personal
  421.  impact on me (because it certainly did just get less likely that
  422.  I’ll be able to attend next year), and I’m hearing a lot of the same
  423. unhappiness from people outside Portland as well.  I guess what I’d
  424.  like is a bit more openness from O’Reilly about this.
  425.  Because, really, openness is what OSCON is all about, right?&lt;/p&gt;
  426.  
  427.  &lt;p&gt;&lt;a
  428.  href="http://kevin.scaldeferri.com/blog/2008/09/12/SJ2009.html#comments"&gt;Comments&lt;/a&gt;&lt;p&gt;
  429.  </description>
  430. </item>
  431.  
  432. <item>
  433.  <title>A New Project: Beautiful or Useful</title>
  434.  <link>http://kevin.scaldeferri.com/blog/2008/09/11/BeautifulOrUserful.html</link>
  435.  <description>&lt;blockquote&gt;&lt;p&gt;Have nothing in your house that you do not know to be
  436.    useful, or believe to be beautiful.&lt;br /&gt;&lt;cite&gt;William
  437.      Morris&lt;/cite&gt;&lt;/p&gt;&lt;/blockquote&gt;
  438. &lt;p&gt;I’ve been reading &lt;a href=&quot;http://www.amazon.com/Emotional-Design-Love-Everyday-Things/dp/0465051367/ref=nosim/?tag=kevinshome-20&quot;&gt;Emotional Design&lt;/a&gt;, and the inclusion of this
  439.  quote inspired me to try to take an inventory of my house using this
  440. criterion.  Of course, ideally I’d have only objects that are both
  441.  beautiful &lt;em&gt;and&lt;/em&gt; useful, but initially I’ll just make it my
  442.  goal to be rid of things that fail both and make some notes for
  443.  future improvements.&lt;/p&gt;
  444. &lt;p&gt;This morning I tackled the easy rooms: the living room and dining
  445.  room.  No surprises there.  Most things are both beautiful and
  446.  useful, except for my futon and folding chairs which are only
  447.  useful, and the plants and artwork which are only beautiful.&lt;/p&gt;
  448. &lt;p&gt;Now I wonder if I should make the kitchen or the office the next
  449.  room.  Either way, it’s going to be a much bigger task.&lt;/p&gt;
  450.  
  451.  &lt;p&gt;&lt;a
  452.  href="http://kevin.scaldeferri.com/blog/2008/09/11/BeautifulOrUserful.html#comments"&gt;Comments&lt;/a&gt;&lt;p&gt;
  453.  </description>
  454. </item>
  455.  
  456. <item>
  457.  <title>More Erlang Beust Challenge Results (incl. HiPE)</title>
  458.  <link>http://kevin.scaldeferri.com/blog/2008/09/04/BeustChallenge2.html</link>
  459.  <description>&lt;p&gt;I’ve been tinkering a little more with the Beust Challenge,
  460.  following up on my &lt;a
  461.    href=&quot;/blog/2008/09/02/BeustChallenge.html&quot;&gt;previous post&lt;/a&gt;.
  462.  There are a couple significant new developments to report.&lt;/p&gt;
  463. &lt;p&gt;First, Hynek (Pichi) Vychodil wrote a &lt;a
  464.    href=&quot;http://pichis-blog.blogspot.com/2008/09/beust-challenge-in-erlang.html&quot;&gt;faster
  465.    version using a permutation generator&lt;/a&gt;.&lt;/p&gt;
  466. &lt;p&gt;Second, I also ported the first “CrazyBob” solution using a bit
  467.  mask to Erlang.&lt;/p&gt;
  468. &lt;p&gt;Third, I discovered that my overly literal ports were actually
  469.  slowing things down.  The CrazyBob code uses an unspecified Listener
  470. class that receives the numbers in the series, and presumably computes
  471. the actual results from there.  (Aside, I cannot actually benchmark
  472.  against the Java code because I haven’t found what this
  473.  implementation is.)  I fudged this in my original ports by simply
  474.  spawning a process, which then discarded all the messages it
  475.  received.  After I noticed that the code was pegging &lt;i&gt;both&lt;/i&gt; of
  476.  my CPUs, though, I realized that message passing might actually be
  477.  the bottleneck in my code.  Turns out this was the case, and
  478.  removing the listener process and just computing the results in the
  479.  main process actually sped things up substantially.&lt;/p&gt;
  480. &lt;p&gt;Finally, I got access to a machine with HiPE enabled.&lt;/p&gt;
  481. &lt;p&gt;So... here’s the results.  First on my MacBook Pro, without
  482.  HiPE:&lt;/p&gt;
  483. &lt;table&gt;
  484.  &lt;tr&gt;
  485.    &lt;th&gt;log(Max)&lt;/th&gt;
  486.    &lt;th&gt;&lt;a href=&quot;/dist/beust.erl&quot;&gt;Original&lt;/a&gt;&lt;/th&gt;
  487.    &lt;th&gt;&lt;a href=&quot;/dist/bitmask2.erl&quot;&gt;bitmask&lt;/a&gt;&lt;/th&gt;
  488.    &lt;th&gt;&lt;a href=&quot;/dist/fastbeust2.erl&quot;&gt;crazybob&lt;/a&gt;&lt;/th&gt;
  489.    &lt;th&gt;&lt;a href=&quot;http://pichis-blog.blogspot.com/2008/09/beust-challenge-in-erlang.html&quot;&gt;pichi&lt;/a&gt;&lt;/th&gt;
  490.  &lt;/tr&gt;
  491.  &lt;tr&gt;&lt;td&gt;4      &lt;/td&gt;&lt;td&gt;8ms     &lt;/td&gt;&lt;td&gt;2ms     &lt;/td&gt;&lt;td&gt;3ms    &lt;/td&gt;&lt;td&gt;3ms   &lt;/td&gt;&lt;/tr&gt;
  492.  &lt;tr&gt;&lt;td&gt;5      &lt;/td&gt;&lt;td&gt;65ms    &lt;/td&gt;&lt;td&gt;11ms    &lt;/td&gt;&lt;td&gt;13ms   &lt;/td&gt;&lt;td&gt;14ms   &lt;/td&gt;&lt;/tr&gt;
  493.  &lt;tr&gt;&lt;td&gt;6      &lt;/td&gt;&lt;td&gt;632ms   &lt;/td&gt;&lt;td&gt;52ms    &lt;/td&gt;&lt;td&gt;69ms   &lt;/td&gt;&lt;td&gt;62ms  &lt;/td&gt;&lt;/tr&gt;
  494.  &lt;tr&gt;&lt;td&gt;7      &lt;/td&gt;&lt;td&gt;6.7s    &lt;/td&gt;&lt;td&gt;253ms   &lt;/td&gt;&lt;td&gt;303ms  &lt;/td&gt;&lt;td&gt;272ms   &lt;/td&gt;&lt;/tr&gt;
  495.  &lt;tr&gt;&lt;td&gt;8      &lt;/td&gt;&lt;td&gt;72s     &lt;/td&gt;&lt;td&gt;1.0s    &lt;/td&gt;&lt;td&gt;1.0s   &lt;/td&gt;&lt;td&gt;945ms   &lt;/td&gt;&lt;/tr&gt;
  496.  &lt;tr&gt;&lt;td&gt;9      &lt;/td&gt;&lt;td&gt;18m     &lt;/td&gt;&lt;td&gt;4.7s    &lt;/td&gt;&lt;td&gt;3.6s   &lt;/td&gt;&lt;td&gt;2.8s    &lt;/td&gt;&lt;/tr&gt;
  497.  &lt;tr&gt;&lt;td&gt;10     &lt;/td&gt;&lt;td&gt;(3h)    &lt;/td&gt;&lt;td&gt;13s     &lt;/td&gt;&lt;td&gt;7.8s   &lt;/td&gt;&lt;td&gt;5.3s    &lt;/td&gt;&lt;/tr&gt;
  498. &lt;/table&gt;
  499. &lt;p&gt;The bitmask solution starts out the fastest, but loses out in the
  500.  end to the more clever solutions.  pichi edges out the
  501.  crazybob solution by about a third.&lt;/p&gt;
  502. &lt;p&gt;Now on Linux 2.6 with HiPE:&lt;/p&gt;
  503. &lt;table&gt;
  504.  &lt;tr&gt;
  505.    &lt;th&gt;log(Max)&lt;/th&gt;
  506.    &lt;th&gt;&lt;a href=&quot;/dist/beust.erl&quot;&gt;Original&lt;/a&gt;&lt;/th&gt;
  507.    &lt;th&gt;&lt;a href=&quot;/dist/bitmask2.erl&quot;&gt;bitmask&lt;/a&gt;&lt;/th&gt;
  508.    &lt;th&gt;&lt;a href=&quot;/dist/fastbeust2.erl&quot;&gt;crazybob&lt;/a&gt;&lt;/th&gt;
  509.    &lt;th&gt;&lt;a href=&quot;http://pichis-blog.blogspot.com/2008/09/beust-challenge-in-erlang.html&quot;&gt;pichi&lt;/a&gt;&lt;/th&gt;
  510.  &lt;/tr&gt;
  511.  &lt;tr&gt;&lt;td&gt;4      &lt;/td&gt;&lt;td&gt;4ms     &lt;/td&gt;&lt;td&gt;&amp;lt;1ms &lt;/td&gt;&lt;td&gt;1ms    &lt;/td&gt;&lt;td&gt;2ms   &lt;/td&gt;&lt;/tr&gt;
  512.  &lt;tr&gt;&lt;td&gt;5      &lt;/td&gt;&lt;td&gt;50ms    &lt;/td&gt;&lt;td&gt;1ms     &lt;/td&gt;&lt;td&gt;6ms    &lt;/td&gt;&lt;td&gt;7ms   &lt;/td&gt;&lt;/tr&gt;
  513.  &lt;tr&gt;&lt;td&gt;6      &lt;/td&gt;&lt;td&gt;608ms   &lt;/td&gt;&lt;td&gt;7ms     &lt;/td&gt;&lt;td&gt;34ms   &lt;/td&gt;&lt;td&gt;37ms  &lt;/td&gt;&lt;/tr&gt;
  514.  &lt;tr&gt;&lt;td&gt;7      &lt;/td&gt;&lt;td&gt;6.9s    &lt;/td&gt;&lt;td&gt;35ms    &lt;/td&gt;&lt;td&gt;160ms  &lt;/td&gt;&lt;td&gt;174ms  &lt;/td&gt;&lt;/tr&gt;
  515.  &lt;tr&gt;&lt;td&gt;8      &lt;/td&gt;&lt;td&gt;78s     &lt;/td&gt;&lt;td&gt;147ms   &lt;/td&gt;&lt;td&gt;619ms  &lt;/td&gt;&lt;td&gt;563ms  &lt;/td&gt;&lt;/tr&gt;
  516.  &lt;tr&gt;&lt;td&gt;9      &lt;/td&gt;&lt;td&gt;(18m)   &lt;/td&gt;&lt;td&gt;460ms   &lt;/td&gt;&lt;td&gt;1.8s   &lt;/td&gt;&lt;td&gt;1.4s   &lt;/td&gt;&lt;/tr&gt;
  517.  &lt;tr&gt;&lt;td&gt;10     &lt;/td&gt;&lt;td&gt;(3h)    &lt;/td&gt;&lt;td&gt;1.1s    &lt;/td&gt;&lt;td&gt;4.2s   &lt;/td&gt;&lt;td&gt;2.4s   &lt;/td&gt;&lt;/tr&gt;
  518. &lt;/table&gt;
  519. &lt;p&gt;And our new winner is... bitmask!  HiPE barely helps the original
  520.  brute-force solutions at all, while crazybob and pichi gain about a
  521.  factor of two.  bitmask, on the other hand, picks up an order of
  522.  magnitude, and is now only a factor of 3 slower than the posted
  523.  results for the Java crazybob solution (with unknown differences in
  524.  hardware).&lt;/p&gt;
  525. &lt;p&gt;Conclusion: Erlang doesn’t suck!&lt;/p&gt;
  526.  
  527.  &lt;p&gt;&lt;a
  528.  href="http://kevin.scaldeferri.com/blog/2008/09/04/BeustChallenge2.html#comments"&gt;Comments&lt;/a&gt;&lt;p&gt;
  529.  </description>
  530. </item>
  531.  
  532.  </channel>
  533. </rss>
  534.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//kevin.scaldeferri.com/blog/index.rss

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda