<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-24265677-1']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();


Trey Griffith: CTO and Co-Founder of Endorse.me. Node.js Developer.linkedin.com/in/treygriffith</description><title>The Rise of the Machines</title><generator>Tumblr (3.0; @tgriff3)</generator><link>http://tgriff3.com/</link><item><title>Unbundling the Big Ten: John McCain vs. Jim Delany</title><description>&lt;p&gt;&lt;a href="http://allthingsd.com/20130509/can-congress-blow-up-the-tv-bundle-john-mccain-is-going-to-try-again/"&gt;John McCain is trying to force cable tv providers to unbundle their channels&lt;/a&gt;, either into much smaller packages or even individual channels. A lot of powerful people make a lot of money on cable bundling, and &lt;a href="http://articles.latimes.com/2006/may/25/opinion/oe-mccain25"&gt;McCain has tried a similar bill in the past&lt;/a&gt;, so it&amp;#8217;s unlikely that this piece of legislation will the cause unbundling of TV. However, it seems only a matter of time until unbundling happens, either due to market pressure from consumers who would rather cut the cord than pay for channels they don&amp;#8217;t watch, or from legislation like the bill McCain proposed.&lt;/p&gt;
&lt;p&gt;As the linked AllThingsD article mentions, such unbundling will have wide reaching effects on the economics of content providers. The Big Ten is one such content provider &lt;a href="#unbundling-the-big-ten-ref-1"&gt;[1]&lt;/a&gt;, and to understand just how much unbundling could hurt the Big Ten, we need to take a look at the most recent conference realignment.&lt;/p&gt;
&lt;p&gt;We just finished the largest &lt;a href="http://en.wikipedia.org/wiki/2010%E2%80%9313_NCAA_conference_realignment"&gt;college sports conference realignment&lt;/a&gt; in history. The reasons for it are unsurprising: money and football money. But for conference expansion to work (i.e. be profitable for the existing member schools) the addition of an institution has to result in more revenue than the average existing member produced prior to the expansion. This can happen by bringing a larger, higher revenue-generating program into the fold, or by taking advantage of the &amp;#8220;whole is greater than the sum of its parts&amp;#8221; activities. In this light, the Big Ten&amp;#8217;s &lt;a href="http://sports.espn.go.com/ncaa/news/story?id=5276551"&gt;addition of Nebraska in 2010&lt;/a&gt; makes perfect sense - Nebraska&amp;#8217;s football product is historically better than the average Big Ten team &lt;a href="#unbundling-the-big-ten-ref-2"&gt;[2]&lt;/a&gt;, their fan base (and as a result the number of television viewers they bring to any given Big Ten matchup) is larger than the average Big Ten school, and with the expansion from 11 to 12 schools, the Big Ten was able to sponsor a football championship game &lt;a href="#unbundling-the-big-ten-ref-3"&gt;[3]&lt;/a&gt;, which is extraordinarily lucrative for conferences &lt;a href="#unbundling-the-big-ten-ref-4"&gt;[4]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But what about the Big Ten&amp;#8217;s more &lt;a href="http://espn.go.com/college-sports/story/_/id/8651934/maryland-terrapins-join-big-ten-rutgers-scarlet-knights-join-well-sources-say"&gt;recent additions of Maryland and Rutgers&lt;/a&gt;? On the surface, they don&amp;#8217;t provide any of the benefits that a school like Nebraska does - relatively small fan bases, historically less than stellar on-field performance &lt;a href="#unbundling-the-big-ten-ref-5"&gt;[5]&lt;/a&gt;, and no new events to air. The real key to understanding the addition of Maryland and Rutgers lies in understanding TV bundles.&lt;/p&gt;
&lt;p&gt;The Big Ten created the &lt;a href="http://en.wikipedia.org/wiki/Big_Ten_Network"&gt;Big Ten Network (BTN)&lt;/a&gt; in 2006 to air Big Ten events that didn&amp;#8217;t make it to air on traditional broadcast or cable networks. Market economics would suggest that if these events were popular enough to be on the air they already would be - but market economics hardly touches an oligopoly like cable TV. Instead, the Big Ten demonstrates to cable TV distributors that in a particular market, like Chicago/Cleveland/Columbus, a certain percentage of their clientele are Big Ten fans and would like access to BTN. The cable network then puts BTN into their basic or expanded basic package, and BTN takes a cut of every subscriber (about $0.70 - $1.00) &lt;a href="#unbundling-the-big-ten-ref-6"&gt;[6]&lt;/a&gt;. For subscribers outside of areas where the Big Ten has a large presence, BTN takes a much smaller cut (about $0.05 - $0.10) &lt;a href="#unbundling-the-big-ten-ref-6"&gt;[6]&lt;/a&gt;, and only of subscribers to a premium sports tier.&lt;/p&gt;
&lt;p&gt;BTN has shown itself to be a huge moneymaker for the conference &lt;a href="#unbundling-the-big-ten-ref-7"&gt;[7]&lt;/a&gt;. But based on the math of their subscriber fees, they stand to make a lot more money if they can get television markets outside of the 8 traditional Big Ten states to include BTN in the basic or expanded basic package - a huge boost in the number of subscribers, as well as the per-subscriber fee. The only way to convince cable providers to include BTN is to expand the Big Ten&amp;#8217;s footprint into new, populous television markets.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s where the Rutgers and Marlyand expansion comes in: they give the Big Ten access to the lucrative New York and DC television markets &lt;a href="#unbundling-the-big-ten-ref-8"&gt;[8]&lt;/a&gt;. Neither Rutgers nor Maryland are the dominant college sports team in those cities (if there even is one), but they allow the Big Ten to turn a small number of premium sports subscribers, at $0.10 a pop, into a huge number of basic cable subscribers at $1.00 each. And so the Big Ten&amp;#8217;s pie is expanded before being sliced for the new members.&lt;/p&gt;
&lt;p&gt;Problems for the Big Ten, however, lurk just around the corner; if cable unbundling happens, either due to legislation or market pressures, and BTN is sold a la carte, they lose the vast majority of the premium sports subscribers in markets outside the 8 Big Ten states, and in the newly expanded markets like DC and New York, they only have access to subscribers who are huge Marlyand or Rutgers fans - a tiny fraction of the number of basic cable subscribers. It&amp;#8217;s unclear whether the BTN would even be profitable under an a la carte system, let alone the cash cow it&amp;#8217;s proven to be so far.&lt;/p&gt;
&lt;p&gt;And so Jim Delany finds himself with an unlikely foe; if John McCain&amp;#8217;s bill passes, the economics of the BTN, which were the underpinnings of conference expansion, stop working, and the newly added members of the Big Ten only serve to dilute the quality of the football product of the nation&amp;#8217;s oldest conference.&lt;/p&gt;
&lt;p&gt;Even if content providers like the Big Ten get their way and defeat this bill, which is likely, it seems to be only a matter of time until cable unbundling happens. When it does, we&amp;#8217;ll likely be in for another round of conference shuffling as schools try to figure out how to finance costly cross-country sports programs that rely on huge payouts from conference TV networks.&lt;/p&gt;
&lt;div class="footnotes"&gt;
&lt;p&gt;&lt;a id="unbundling-the-big-ten-ref-1" name="unbundling-the-big-ten-ref-1"&gt;&lt;/a&gt;[1] The Big Ten is not alone here, they were just the primary instigator of the conference expansion. Both the Pac-10/12 and SEC are trying a similar play, with the &lt;a href="http://en.wikipedia.org/wiki/Pac-12_Network"&gt;Pac 12 creating their own television networks while cutting out a large equity partner like Fox.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a id="unbundling-the-big-ten-ref-2" name="unbundling-the-big-ten-ref-2"&gt;&lt;/a&gt;[2] &lt;a href="http://en.wikipedia.org/wiki/Nebraska_Cornhuskers_football"&gt;5 national championships, 10 undefeated seasons, 43 conference championships, 53 consensus All-Americans&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a id="unbundling-the-big-ten-ref-3" name="unbundling-the-big-ten-ref-3"&gt;&lt;/a&gt;[3] &lt;a href="https://web1.ncaa.org/LSDBi/exec/bylawSearch?bylawSearchSubmit=Get%20Selected%20Items&amp;amp;multiple=20695&amp;amp;division=1&amp;amp;adopted=0"&gt;NCAA rules&lt;/a&gt; stipulate that a conference has to have at least 12 members to have a championship game&lt;/p&gt;
&lt;p&gt;&lt;a id="unbundling-the-big-ten-ref-4" name="unbundling-the-big-ten-ref-4"&gt;&lt;/a&gt;[4] &lt;a href="http://espn.go.com/blog/bigten/post/_/id/49883/college-tv-rights-deals-undergo-makeovers"&gt;According to ESPN&lt;/a&gt;, Fox is paying $145m over six years for the Big Ten football championship game alone&lt;/p&gt;
&lt;p&gt;&lt;a id="unbundling-the-big-ten-ref-5" name="unbundling-the-big-ten-ref-5"&gt;&lt;/a&gt;[5] &lt;a href="http://en.wikipedia.org/wiki/Rutgers_Scarlet_Knights_football#Bowl_game_results"&gt;Rutgers is 5-8 in bowl games,and has never gone to a major bowl&lt;/a&gt;. It won a Big East Championship in 2012.&lt;a href="http://en.wikipedia.org/wiki/List_of_Maryland_Terrapins_bowl_games"&gt; Maryland is 1-4 in major bowls, and 11-11-2 in all bowls&lt;/a&gt;, with 2 national championships.&lt;/p&gt;
&lt;p&gt;&lt;a id="unbundling-the-big-ten-ref-6" name="unbundling-the-big-ten-ref-6"&gt;&lt;/a&gt;[6] Reported figures vary, and probably fluctuate by television market and provider, but the figures I&amp;#8217;ve seen are &lt;a href="http://www.post-gazette.com/stories/sports/pitt-big-east/big-ten-changes-could-have-seismic-effect-248138/"&gt;$0.88 and $0.05&lt;/a&gt;, &lt;a href="http://www.cbssports.com/collegefootball/story/13230366/lucrative-big-ten-network-could-be-driving-force-for-expansion"&gt;$0.70 and $0.10&lt;/a&gt;, &lt;a href="http://sportsillustrated.cnn.com/2012/writers/andy_staples/11/19/maryland-big-ten-realignment/index.html"&gt;$1.10 and $0.10&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a id="unbundling-the-big-ten-ref-7" name="unbundling-the-big-ten-ref-7"&gt;&lt;/a&gt;[7] &lt;a href="http://espn.go.com/blog/bigten/post/_/id/76205/big-tens-tv-revenue-keeps-climbing"&gt;It has contributed $42.5m to each member school&lt;/a&gt; since its inception in 2006&lt;/p&gt;
&lt;p&gt;&lt;a id="unbundling-the-big-ten-ref-8" name="unbundling-the-big-ten-ref-8"&gt;&lt;/a&gt;[8] &lt;a href="http://www.nielsen.com/content/dam/corporate/us/en/public%20factsheets/tv/nielsen-2012-local-DMA-TV-penetration.pdf"&gt;#1 and #8, respectively&lt;/a&gt;. Baltimore (#27) and New Jersey are also contributors.&lt;/p&gt;
&lt;/div&gt;</description><link>http://tgriff3.com/post/50032020671</link><guid>http://tgriff3.com/post/50032020671</guid><pubDate>Thu, 09 May 2013 16:13:52 -0400</pubDate></item><item><title>To the Cloud!</title><description>&lt;p&gt;&lt;object class="hark_player" height="25" width="100%"&gt;&lt;param name="movie" value="http://cdn.hark.com/swfs/player_bar.swf?pid=clzyxwkbsh"&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bits.blogs.nytimes.com/2013/05/07/sap-takes-it-all-to-the-cloud/"&gt;SAP is committing to the cloud&lt;/a&gt;. For those who don&amp;#8217;t know, SAP has a huge business of on-premises ERP software (something like 80% of the Fortune 500 run SAP). This software is customized and implemented by huge tech consulting firms, the largest of which are Deloitte, Accenture, and IBM. (I used to work for Deloitte doing SAP implementations.)&lt;/p&gt;
&lt;p&gt;The move of ERP software to the cloud was inevitable. Over the next decade we&amp;#8217;ll see more and more software, both enterprise and consumer, move to the cloud. The only question will be who is willing and able to disrupt their own business, as SAP is attempting to do here, and who gets replaced by newer products and companies that are entirely focused on cloud solutions, like Salesforce.com and Workday.&lt;/p&gt;
&lt;p&gt;Part of the promise of cloud-based software is the cost savings that result from elimination of customization. Enterprise customers all believe that their businesses are unique and beautiful snowflakes, and they pay out the nose to make sure that their software is too. That kind of customization is extremely lucrative for implementers and consultants, but extremely costly for the customer, both in the implementation and in ongoing maintenance.&lt;/p&gt;
&lt;p&gt;One of the most frustrating things about my time doing SAP implementations for Deloitte was that start-from-scratch approach to every project and client. The firm had implemented for nearly every kind of company in every industry, and yet every project was treated as a complete customization. Is Kraft&amp;#8217;s business so different from Nestle&amp;#8217;s that they require totally different software? Is John Deere so different from Caterpillar? &lt;a href="#to-the-cloud-ref-1"&gt;[1]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s part of the reason that I saw disruption from the cloud-based solutions coming from a mile away - there was just so much room for improvement, especially in areas that the cloud is so well-suited to handle: scalability &lt;a href="#to-the-cloud-ref-2"&gt;[2]&lt;/a&gt;, maintenance &lt;a href="#to-the-cloud-ref-3"&gt;[3]&lt;/a&gt;, and most of all reduced customization (also known as software that &amp;#8220;just works&amp;#8221; out of the box, er, browser).&lt;/p&gt;
&lt;p&gt;SAP has recognized the potential for cost-savings that comes with reduced customization. Vishal Sikka is quoted in the article as saying:&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;At some point in the future, complex implementations should go away.&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;With their purchase of SuccessFactors and this most recent announcement, SAP has stated their intention to cannibalize their own on-premises software business in order to save themselves in the long term. But with this move to the cloud, and the focus on more vanilla distributions of software, what happens to the integrators for whom these complex SAP implementations are a cash cow &lt;a href="#to-the-cloud-ref-4"&gt;[4]&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;When I posed this question to the head of Deloitte&amp;#8217;s SAP practice at a Q&amp;amp;A session for new analysts almost two years ago, he told me (paraphrased):&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;It doesn&amp;#8217;t matter. The economics for Deloitte don&amp;#8217;t change whether the software is on-premises or in the cloud.&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;Only time will tell.&lt;/p&gt;
&lt;div class="footnotes"&gt;
&lt;p&gt;&lt;a id="to-the-cloud-ref-1" name="to-the-cloud-ref-1"&gt;&lt;/a&gt;[1] I didn&amp;#8217;t perform implementations for these companies, and their businesses might indeed be very different from each other, but not so different that they can&amp;#8217;t have the same or substantially similar software.&lt;/p&gt;
&lt;p&gt;&lt;a id="to-the-cloud-ref-2" name="to-the-cloud-ref-2"&gt;&lt;/a&gt;[2] Anecdotally, I experienced scaling issues with SAP at my client that resulted in downtime on the project while they put more machines on it. This wouldn&amp;#8217;t be a big driver for most large enterprises, but it is an issue.&lt;/p&gt;
&lt;p&gt;&lt;a id="to-the-cloud-ref-3" name="to-the-cloud-ref-3"&gt;&lt;/a&gt;[3] Aside from the initial implementation, the big money for the tech consulting firms (and big expense for clients) is in upgrades to newer versions of SAP&lt;/p&gt;
&lt;p&gt;&lt;a id="to-the-cloud-ref-4" name="to-the-cloud-ref-4"&gt;&lt;/a&gt;[4] SAP alone made up around a quarter of Deloitte&amp;#8217;s technology consulting business when I was there. Oracle was roughly another 20-25%&lt;/p&gt;
&lt;/div&gt;</description><link>http://tgriff3.com/post/49939051363</link><guid>http://tgriff3.com/post/49939051363</guid><pubDate>Wed, 08 May 2013 12:06:00 -0400</pubDate></item><item><title>Impress: Express in the browser</title><description>&lt;p&gt;A couple of weeks ago a friend of mine and I were discussing the potential for sharing code between the front- and back-end when using Node.js. With the explosion in popularity both of Node and front-end Javascript frameworks, code-sharing across environments seems like a natural course of action to maximize developer happiness.&lt;/p&gt;
&lt;p&gt;Since we both use &lt;a href="http://expressjs.com"&gt;Express&lt;/a&gt; frequently, we started kicking around the possibility of using it in the browser - capturing all the actions that would normally lead to an HTTP request (clicks on links, form submissions) capturing them, and processing them the same way that Express does.&lt;/p&gt;
&lt;p&gt;Last weekend, I threw together &lt;a href="https://github.com/treygriffith/impress/"&gt;Impress&lt;/a&gt;, a front-end Javascript framework that has (very) stripped down Express functionality &lt;a href="#ref-1"&gt;[1]&lt;/a&gt;. With the help of my Node.js-style module-loading library &lt;a href="http://github.com/treygriffith/joules"&gt;Joules&lt;/a&gt;, you can build what looks like an Express application entirely on the front-end.&lt;/p&gt;
&lt;p&gt;In building that, I learned a lot about why this was a bad idea:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Rendering an entire response (the way that &lt;code&gt;res.render&lt;/code&gt; or &lt;code&gt;res.send&lt;/code&gt; does) doesn&amp;#8217;t make sense in the browser - you rarely want to refresh the entire screen if you don&amp;#8217;t have to.&lt;/li&gt;
&lt;li&gt;URL&amp;#8217;s are only useful as a way to tie together the front-end and back-end. If you&amp;#8217;re dealing with just the front-end, URL&amp;#8217;s are a very indirect way to define events (e.g. clicks, form submissions) and event handlers (e.g. &lt;code&gt;app.get&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;In order to really share code between the front- and back-end, you would have to maintain a different set of API endpoints for database access that both your front- and back-end talk to. CouchDB would be a good fit for this, but if you&amp;#8217;re using something like MongoDB/Mongoose, you&amp;#8217;re looking at defining an entirely separate set of routes to handle - not exactly minimizing work.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;In discovering why Express was a bad fit for the front-end, I began to wonder if it&amp;#8217;s really the best fit for the server. It &lt;em&gt;feels&lt;/em&gt; right, but I suspect that&amp;#8217;s mostly because it borrows paradigms from popular Ruby web frameworks (Sinatra and Rails).&lt;/p&gt;
&lt;p&gt;Javascript and Node.js are heavily event-driven, so I&amp;#8217;m beginning to think that it might be better to design the entire web server around event handling. In that case, a URL would just be one particular type of event. That mindset makes sense - when a user clicks a button it&amp;#8217;s because they want to &lt;em&gt;do something&lt;/em&gt;. Whether we listen for that event on the front-end (&lt;code&gt;button.on("click", handleButtonClick)&lt;/code&gt;) or the back-end (&lt;code&gt;app.get('/button/link/location', handleButtonClick)&lt;/code&gt;) we&amp;#8217;re really just interpreting and acting on user intent.&lt;/p&gt;
&lt;p&gt;If you know of any frameworks that work that way, &lt;a href="http://twitter.com/tgriff3"&gt;let me know on Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;a name="ref-1"&gt;&lt;/a&gt;1 - The biggest missing piece is the lack of support for middleware, which is probably the biggest benefit of using something like Express/Connect&lt;/p&gt;</description><link>http://tgriff3.com/post/49602767602</link><guid>http://tgriff3.com/post/49602767602</guid><pubDate>Sat, 04 May 2013 12:37:51 -0400</pubDate></item><item><title>Why isn't all email encrypted?</title><description>&lt;p&gt;More and more of our lives are online now, and more of our communication is happening online. The most ubiquitous communication mechanism is email, and, for better or worse, more people are putting more sensitive information into their emails every day.&lt;/p&gt;
&lt;p&gt;With HTTPS becoming a near standard for accessing popular websites (and for good reason) I got to thinking about email security. &lt;a href="http://en.wikipedia.org/wiki/STARTTLS"&gt;STARTTLS&lt;/a&gt; is used by most major email providers (like Gmail), but that only serves to encrypt messages from relay to relay - it doesn&amp;#8217;t provide true end-to-end encryption, from sender to recipient.&lt;/p&gt;
&lt;p&gt;With Google Apps taking over the nearly the entire University email client ecosystem, I think it&amp;#8217;s safe to say that in the near future, if not already, almost all email will be conducted through a cloud provider like Gmail. When it comes to sending unencrypted messages, you can choose to trust your cloud provider (and all the relays between them and your intended recipient), but I think that&amp;#8217;s a mistake because:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Providers have a profit motive that isn&amp;#8217;t always in your favor (e.g. contextual ads based on the contents of your messages)&lt;/li&gt;
&lt;li&gt;Cloud providers have a less than stellar security record&lt;/li&gt;
&lt;li&gt;Good security exists in layers&lt;/li&gt;
&lt;li&gt;Trust is not security&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Those wearing tinfoil hats right now won&amp;#8217;t see the problem because they already use PGP to encrypt all their emails. However PGP, with its near military-grade encryption available to the public, is not a mainstream solution in its current state. We need regular people - the same people who don&amp;#8217;t know what HTTPS is beyond a green indicator in the address bar - to be able to communicate securely.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://safegmail.com/"&gt;SafeGmail&lt;/a&gt; is an interesting take on this problem, and requires fairly seamless, strong security, but it requires sharing of a password of passphrase ahead of time, not exactly something that can happen every day.&lt;/p&gt;
&lt;p&gt;I think the reason our email remains unencrypted is that we don&amp;#8217;t have a scalable solution for person-to-person encryption. I think PGP is the answer, but we need to find a way to give everyone, including my grandmother, a PGP key that can encrypt and decrypt her communications effortlessly.&lt;/p&gt;</description><link>http://tgriff3.com/post/47790443813</link><guid>http://tgriff3.com/post/47790443813</guid><pubDate>Fri, 12 Apr 2013 13:12:32 -0400</pubDate></item><item><title>Login-less Apps</title><description>&lt;p&gt;Identity on the web is a big problem. We have logins for every website we visit, and only the most savvy among us use a password manager to make sure that the inevitable database leak doesn&amp;#8217;t burn us everywhere.&lt;/p&gt;
&lt;p&gt;There have been attempts to solve this problem - OpenID for one, Facebook Connect (as well as the similar services from Twitter and LinkedIn), and Mozilla&amp;#8217;s new Persona, which is the first real alternative to a traditional login system.&lt;/p&gt;
&lt;p&gt;But I saw today a really interesting paradigm - the login-less app. Emmanuel Bégué created &lt;a href="http://urgeous.com"&gt;Urgeous, a Posterous clone&lt;/a&gt;, which is primarily focused on post-by-email, one of Posterous&amp;#8217;s most interesting features.&lt;/p&gt;
&lt;p&gt;Since he was implementing post-by-email, and email is the default definition of identity, he &lt;a href="http://blog.medusis.com/p72t3aaa40h-mourning-posterous-how-and-why-i-built-urgeous"&gt;got rid of a login system altogether&lt;/a&gt;. Instead, everything sent from your email address is a post on your behalf. To edit posts you use a link with a unique code that is generated and sent to you when a post is published.&lt;/p&gt;
&lt;p&gt;This is a very specific scenario, and one in which you don&amp;#8217;t need to rely on a persistent state, but it brings up an interesting point - do we really need all these login systems? Does Quora really need me to login to read beyond the first answer?&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s almost reflex to include a login system when building a new web app, but we as developers would be wise to really consider the needs of our application before adding yet another layer of broken login systems onto our users.&lt;/p&gt;</description><link>http://tgriff3.com/post/46573033461</link><guid>http://tgriff3.com/post/46573033461</guid><pubDate>Fri, 29 Mar 2013 01:35:59 -0400</pubDate></item><item><title>My Problem With Javascript-only Apps</title><description>&lt;p&gt;I love Javascript. I code almost exclusively using Javascript. My startup&amp;#8217;s entire stack is Javascript (MongoDB + Node + jQuery + Hand-rolled front-end libs).&lt;/p&gt;
&lt;p&gt;But I hate apps that require Javascript to load content. I&amp;#8217;m looking at you Backbone.js/AngularJS/Ember.js.&lt;/p&gt;
&lt;p&gt;I understand that the increasing speeds of SpiderMonkey and V8 (and even Chakra) have turned the web into a place where you can build client-side web apps with much richer functionality. And I understand why that has led us to more and more &amp;#8220;single-page&amp;#8221; apps that load additional data and render it using on-page templates.&lt;/p&gt;
&lt;p&gt;What I don&amp;#8217;t understand is a reliance on Javascript to load &lt;em&gt;content&lt;/em&gt;. Not rich functionality, not drag-n-drop WYSIWYG editing, not even AJAX-y autocompletions, but plain old content. And not just as the primary choice to provide snappy responses once the page has been loaded once, but the &lt;em&gt;only&lt;/em&gt; way to load content.&lt;/p&gt;
&lt;p&gt;Earlier today, I was checking out the popular &lt;a href="https://news.ycombinator.com/item?id=5406857"&gt;article on Hacker News about Ember.js&amp;#8217;s Quick Start shortcomings&lt;/a&gt;. It was a &lt;a href="http://discuss.emberjs.com/t/getting-started-with-ember-js-is-easy-no-it-isn-t/559"&gt;forum post&lt;/a&gt; on the new &lt;a href="http://www.discourse.org/"&gt;Discourse&lt;/a&gt; platform from the Stack Exchange folks, which was itself built on &lt;a href="http://emberjs.com/"&gt;Ember.js&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s what I saw:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/e50411c698c211008a528e9a0d78506d/tumblr_inline_mjz1zhuFYM1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;A blank page.&lt;/p&gt;
&lt;p&gt;I checked the errors, and it looks like something failed to load.&lt;/p&gt;
&lt;p&gt;When I checked the source, I see that Discourse has some nice backwards-compatibility for people that don&amp;#8217;t have Javascript enabled &amp;#8212; they include the entire rendered HTML page in the &lt;code&gt;&amp;lt;noscript&amp;gt;&lt;/code&gt; tags. But for those of us that have javascript enabled, but for whatever reason it doesn&amp;#8217;t load properly? No forum for you.&lt;/p&gt;
&lt;p&gt;The irony to me, is when looking at &lt;a href="http://www.discourse.org/about/"&gt;Discourse&amp;#8217;s about page&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The state of forums has been unchanged for so long that forums are considered unworkable and undesirable; few sites &lt;em&gt;want&lt;/em&gt; forums any more because the software is so poor.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In my book, those old forums worked, as ugly as they were, and working and ugly is better than pretty and not working. All your fancy live-updates, inline editing, etc, simply don&amp;#8217;t matter when the content doesn&amp;#8217;t load. As has been said a million times before, Content Is King.&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t mean to pick on Discourse here. They built what is I&amp;#8217;m sure a great product, which is itself built on a great framework by very smart people.&lt;/p&gt;
&lt;p&gt;The problem is in the assumption that rich functionality and traditional HTML rendering have to be divorced. That if we want all the fancy rich-client stuff, we &lt;em&gt;can&amp;#8217;t &lt;/em&gt;deliver rendered content to the client, we &lt;em&gt;must&lt;/em&gt; render content client-side.&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t think that&amp;#8217;s true. I think you can build apps that deliver rendered HTML content to the browser, and add rich functionality on top of that, hopefully with appropriate fallbacks for the most important actions.&lt;/p&gt;
&lt;p&gt;Doing so provides a number of benefits:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Faster startup time&lt;/strong&gt; - &amp;#8220;&lt;a href="http://engineering.twitter.com/2012/05/improving-performance-on-twittercom.html"&gt;Time to first tweet&lt;/a&gt;&amp;#8221; is Twitter&amp;#8217;s benchmark, and the best way to ace such a benchmark is by delivering rendered HTML to the browser on first page load&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graceful failure&lt;/strong&gt; - No blank screens like that I one I got today at discuss.emberjs.com&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search engine friendliness&lt;/strong&gt; - The big crawlers are supposedly going to get better at rendering Javascript to index pages, but why would you make it harder to index your site?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smaller payloads&lt;/strong&gt; - With Discourse&amp;#8217;s &lt;code&gt;noscript&lt;/code&gt; tags, they are delivering both the data and the templates to the user&amp;#8217;s browser twice&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;When building a true &lt;em&gt;app, &lt;/em&gt;one in which the functionality instead of the content is most important, the exclusive reliance on client-side Javascript makes sense. But any web app for which content plays an important role, loading that content with Javascript is the wrong choice.&lt;/p&gt;</description><link>http://tgriff3.com/post/45849898558</link><guid>http://tgriff3.com/post/45849898558</guid><pubDate>Wed, 20 Mar 2013 15:10:00 -0400</pubDate></item><item><title>Fixing "Error: EMFILE, too many open files" in Node.js</title><description>&lt;p&gt;At &lt;a href="http://endorse.me"&gt;Endorse.me&lt;/a&gt;, we use Amazon S3 as a CDN for all our static assets - images, scripts, and css. To make sure that we&amp;#8217;re only uploading new assets to Amazon, and to make sure that we&amp;#8217;re always using the latest versions on the production site, we fingerprint all of our static assets.&lt;/p&gt;
&lt;p&gt;The result is that, using Node.js&amp;#8217;s asynchronous filesystem functions, we&amp;#8217;re opening nearly all of our static files at once to create hashes for the fingerprints. I recently ran up against OSX&amp;#8217;s default maxfiles setting of 256, which resulted in the descriptive &lt;code&gt;Error: EMFILE, too many open files&lt;/code&gt; error, crashing the Node process.&lt;/p&gt;
&lt;p&gt;I didn&amp;#8217;t find a good solution, either from the trusty StackOverflow, the Node.js docs, Google, or the #nodejs channel on IRC. It seems this isn&amp;#8217;t a common enough use case to warrant a best practice.&lt;/p&gt;
&lt;p&gt;Based on &lt;a href="http://stackoverflow.com/a/13675146/2146744"&gt;this StackOverflow answer&lt;/a&gt;, I created my own replacement for some of the most common &lt;code&gt;fs&lt;/code&gt; methods that avoids the EMFILE error. It does this by keeping track of the total number of files opened at once by the module, and queuing up those that will take us over a predefined limit (200 by default).&lt;/p&gt;
&lt;p&gt;A solution like this (as opposed to say, large batches) allows us to keep the maximum concurrency that the filesystem allows without changing the underlying pattern of opening, reading, and writing files using Node&amp;#8217;s built-in &lt;code&gt;fs&lt;/code&gt; module.&lt;/p&gt;
&lt;p&gt;Using my module, reading files from a directory looks the same, just without the crash:&lt;/p&gt;
&lt;pre&gt;var Filequeue = require('filequeue');
var fq = new Filequeue(200); // max number of files to open at once

fq.readdir('/path/to/files/', function(err, files) {
    if(err) {
        throw err;
    }
    files.forEach(function(file) {
        fq.readFile('/path/to/files/' + file, function(err, data) {
            // do something besides crash
        }
    });
});
&lt;/pre&gt;
&lt;p&gt;The module, &lt;a href="https://github.com/treygriffith/filequeue"&gt;Filequeue&lt;/a&gt;, is available on &lt;a href="https://npmjs.org/package/filequeue"&gt;NPM&lt;/a&gt; and &lt;a href="https://github.com/treygriffith/filequeue"&gt;Github&lt;/a&gt;, and is MIT Licensed. Let me know if you have any questions or suggestions for improvement.&lt;/p&gt;</description><link>http://tgriff3.com/post/44864365776</link><guid>http://tgriff3.com/post/44864365776</guid><pubDate>Fri, 08 Mar 2013 11:10:00 -0500</pubDate></item><item><title>Versioning in Mongoose</title><description>&lt;p&gt;Today I encountered a interesting piece of the Mongoose internals added in v3. In a nutshell, Mongoose uses versioning to prevent you from accidentally updating the wrong element when editing a member of an Array.&lt;/p&gt;
&lt;p&gt;As &lt;a href="http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html"&gt;Aaron Heckmann explains&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To see how this could be problematic we need to take a closer look at the underlying operation used to update the comment. When &lt;code&gt;post.save()&lt;/code&gt; is executed, an &lt;code&gt;update&lt;/code&gt; is issued to MongoDB that looks like the following:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
&lt;div class="code"&gt;&lt;code&gt;posts.update({ _id: postId } , { $set: { 'comments.3.body': updatedText }})&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Notice &lt;code&gt;comments.3.body&lt;/code&gt;, this is called positional notation. This tells MongoDB to set the body of the comment in the comments array at index position 3 to the updated text.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If, for instance, while you were editing &lt;code&gt;comments.3&lt;/code&gt; in the example above, a new comment was added, then &lt;code&gt;comments.3&lt;/code&gt; would not be the correct comment, and your update would likely be successful, but not in the way you intended.&lt;/p&gt;
&lt;p&gt;Mongoose&amp;#8217;s solution to this problem is to add a version number the document that is incremented every time the array changes. If you try to update an array element using positional notation with the wrong version key, you&amp;#8217;ll get a nice &lt;code&gt;VersionError&lt;/code&gt;. The text of the error is &amp;#8220;No Matching Document Found&amp;#8221;, which isn&amp;#8217;t very helpful, but the ability to test for &lt;code&gt;instanceof mongooose.Error.VersionError&lt;/code&gt; is quite useful.&lt;/p&gt;
&lt;p&gt;In my case, I just test for the &lt;code&gt;VersionError&lt;/code&gt;, and re-fetch the document and re-update the array if I encounter one. I put a limit on the number of times this loop can continue so as to not accidentally melt my database.&lt;/p&gt;
&lt;p&gt;I can see how, at a huge scale, something like this might become an issue if you&amp;#8217;re adding and and updating a lot of subdocuments concurrently, but for my case, it works like a dream.&lt;/p&gt;</description><link>http://tgriff3.com/post/44230656391</link><guid>http://tgriff3.com/post/44230656391</guid><pubDate>Thu, 28 Feb 2013 13:58:00 -0500</pubDate></item><item><title>Email management treats the symptoms, not the disease</title><description>&lt;p&gt;I signed up for &lt;a href="http://www.mailboxapp.com/"&gt;Mailbox&lt;/a&gt; on the first day of its release and found myself sitting in line near position 280,000. As the number ahead of me has slowly wound down, and the number behind me has slowly grown, I&amp;#8217;ve had a quite a bit of time to think about Mailbox, and what it really means.&lt;/p&gt;
&lt;p&gt;There are more than three-quarters of a million people waiting for access to Mailbox. And since only a few people have actually used the app and can recommend it on the basis of its functionality, it seems that all those people are waiting in line for an idea, a cure for their email problem.&lt;/p&gt;
&lt;p&gt;I haven&amp;#8217;t used the app myself, but from &lt;a href="http://www.wired.com/gadgetlab/2013/02/mailbox-wont-fix-email/"&gt;what&lt;/a&gt; &lt;a href="http://pandodaily.com/2013/02/11/wham-bam-thank-you-mailbox/"&gt;I&amp;#8217;ve&lt;/a&gt; &lt;a href="http://www.theverge.com/2013/2/7/3961544/mailbox-app-for-iphone-inbox-unchained"&gt;heard&lt;/a&gt; it is a tool to formalize the usage of &lt;a href="http://inboxzero.com/"&gt;Inbox Zero&lt;/a&gt;. Inbox Zero is a management philosophy for incoming email. As Merlin Mann, creator of Inbox Zero, &lt;a href="http://www.43folders.com/2006/03/13/inbox-zero"&gt;explains&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Clearly, the problem of email overload is taking a toll on all our time, productivity, and sanity, mainly because most of us lack a cohesive system for processing our messages and converting them into appropriate actions as quickly as possible.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Inbox Zero proposes itself to be just that, a &amp;#8220;cohesive system for processing our messages&amp;#8221;, and Mailbox is the tool by which that system is accomplished. If Inbox Zero describes how to put together a house, Mailbox is the hammer and nails.&lt;/p&gt;
&lt;p&gt;But not everyone agrees that the problem with email is that we lack a cohesive system. Paul Graham, in his essay on &lt;a href="http://www.paulgraham.com/ambitious.html"&gt;Frighteningly Ambitious Startup Ideas&lt;/a&gt;, says that the way to replace email, is to replace the inbox with a better todo list.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Email was not designed to be used the way we use it now. Email is not a messaging protocol. It&amp;#8217;s a todo list. Or rather, my inbox is a todo list, and email is the way things get onto it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;One of his suggestions for email&amp;#8217;s replacement is that it should give more power to the recipient.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I want there to be more restrictions on what someone can put on my todo list. And when someone can put something on my todo list, I want them to tell me more about what they want from me. Do they want me to do something beyond just reading some text? How important is it?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We already have some of the infrastructure in place in email itself to support what Graham is asking for. Specifically the &amp;#8220;Importance&amp;#8221; and &amp;#8220;Reply-by&amp;#8221; headers exist as defined in &lt;a href="http://www.rfc-editor.org/rfc/rfc1327.txt"&gt;RFC 1327&lt;/a&gt;. As far as I can tell, those flags are largely unused. As &lt;a href="http://craphound.com/walh/Cory_Doctorow_-_With_a_Little_Help.txt"&gt;Cory Doctorow notes&lt;/a&gt; (albeit on a different topic) in &lt;em&gt;Epoch:&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;if you let a coder (or, ::shudder::, a user) specify the importance of her alert, give her a little pull-down menu that has choices ranging from &amp;#8220;nice to know&amp;#8221; to &amp;#8220;white-hot urgent,&amp;#8221; and nine times out of ten, she&amp;#8217;ll choose &amp;#8220;NOW NOW NOW URGENT ZOMGWEREALLGONNADIE!&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So, Boris from The Next Web took Graham&amp;#8217;s &lt;a href="http://thenextweb.com/voice/2013/02/08/inboxpro-com-structured-communications/"&gt;suggestion one step further&lt;/a&gt;, and he requested additional metadata from his senders via his own personal &lt;a href="http://inboxpro.com/"&gt;InboxPro&lt;/a&gt;. This data allows him to easily address certain types of emails, like Yes/No questions, without asking questions about the priority of the message.&lt;/p&gt;
&lt;p&gt;But do all these management systems and apps really solve the problem?&lt;/p&gt;
&lt;p&gt;Put another way, what exactly &lt;em&gt;is&lt;/em&gt; the problem?&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;Merlin Mann believes it is the lack of a cohesive system to manage incoming messages.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Paul Graham believes we&amp;#8217;re using a messaging protocol where a todo list protocol would be better.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Boris believes we don&amp;#8217;t have enough information about incoming messages before we manually parse them.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;But could the problem be the sheer volume of email itself? &lt;a href="http://theslowweb.com/"&gt;The Slow Web Movement&lt;/a&gt;, a reaction against the increasingly real-time nature of the Web, seems to indicate that there are people who value not being beholden to the real-time paradigm. More and more, it seems that email is turning into a constant stream of incoming messages, and while it&amp;#8217;s not real-time, it shares many of the same problems, and is antithetical to the Slow Web&amp;#8217;s philosophy: &amp;#8220;users should have a life.&amp;#8221;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Every new email management app, and every new email management system seems to be treating a symptom of the disease rather than the disease itself. I&amp;#8217;m not sure if the disease is the increasing amount of email, but I can be fairly certain that the disease is not the lack of a management system, nor a todo list communicated through messages.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Before we try to &amp;#8220;fix email&amp;#8221;, let&amp;#8217;s figure out what&amp;#8217;s wrong with it. Let&amp;#8217;s diagnose the disease.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description><link>http://tgriff3.com/post/43006479036</link><guid>http://tgriff3.com/post/43006479036</guid><pubDate>Wed, 13 Feb 2013 11:14:13 -0500</pubDate></item><item><title>MongoDB: find a document that matches any element in an array</title><description>&lt;p&gt;I recently ran into a problem while developing some of our advanced search capabilities on &lt;a href="http://endorse.me"&gt;Endorse.me&lt;/a&gt;: I wanted to find all the documents in our MongoDB database that had at least one of a number of elements as a property. This is fairly easy to do using MongoDB&amp;#8217;s &amp;#8216;$in&amp;#8217; operator when the property is a primitive, like a string:&lt;/p&gt;
&lt;p class="gist"&gt;&lt;a href="https://gist.github.com/4599048"&gt;&lt;a href="https://gist.github.com/4599048"&gt;https://gist.github.com/4599048&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But what if one of our toys has multiple colors, listed in an array? I searched around for a some sort of $any operator before looking again at the &lt;a href="http://docs.mongodb.org/manual/reference/operator/in/#_S_in"&gt;MongoDB documentation for $in&lt;/a&gt;. Turns out, if the field has an array, it behaves exactly how I was hoping it would!&lt;/p&gt;
&lt;p class="gist"&gt;&lt;a href="https://gist.github.com/4599072"&gt;&lt;a href="https://gist.github.com/4599072"&gt;https://gist.github.com/4599072&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://tgriff3.com/post/41223932022</link><guid>http://tgriff3.com/post/41223932022</guid><pubDate>Tue, 22 Jan 2013 17:15:06 -0500</pubDate><category>Node.js</category><category>MongoDB</category><category>Mongoose</category></item><item><title>"The managerial attendees were, in every case, decked out with multiple high tech gadgets while the..."</title><description>“The managerial attendees were, in every case, decked out with multiple high tech gadgets while the technical types all used pen and paper for note taking.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;&lt;a href="http://twitter.com/fogus"&gt;Fogus&lt;/a&gt;&lt;span&gt;, on &lt;/span&gt;&lt;a href="http://news.ycombinator.com/item?id=5005174"&gt;a Hacker News discussion on Pen &amp; Paper&lt;/a&gt;&lt;/em&gt;</description><link>http://tgriff3.com/post/39660271676</link><guid>http://tgriff3.com/post/39660271676</guid><pubDate>Fri, 04 Jan 2013 10:47:19 -0500</pubDate></item><item><title>"Your house is not an asset. It is a hedge."</title><description>&lt;a href="http://thezikomoletter.com/2012/12/10/you-are-naturally-short-housing/"&gt;"Your house is not an asset. It is a hedge."&lt;/a&gt;: &lt;p&gt;I don’t completely agree with the analogy that you are naturally “short” housing, it’s probably more accurate to say that you have a natural exposure to housing prices since they are an essential input for your life (although I would have to revisit my college Investment Theory class to say that with real conviction).&lt;/p&gt;
&lt;p&gt;This article does rightly point out though that your house does not act as an asset for you, it simply reduces your exposure to housing prices by locking in a fixed price of housing. &lt;/p&gt;
&lt;p&gt;I don’t agree that you shouldn’t consider it a part of your total assets (it most certainly is, as are futures contracts purchased as hedges) but you should also consider your yearly need for housing as a definite liability. Better yet, you should create a retirement plan with an investment professional.&lt;/p&gt;</description><link>http://tgriff3.com/post/37722152655</link><guid>http://tgriff3.com/post/37722152655</guid><pubDate>Tue, 11 Dec 2012 12:42:00 -0500</pubDate><category>finance</category></item><item><title>Two Things About Conditionals In Javascript</title><description>&lt;a href="http://rmurphey.com/blog/2012/12/10/js-conditionals/"&gt;Two Things About Conditionals In Javascript&lt;/a&gt;: &lt;p&gt;The first “thing” in this post is the most interesting: in Javascript, there is no “else if”. After working in Ruby for awhile, where they use the almost-english symbol “elsif”, I was wondering why “else if” in Javascript was two symbols instead of one. Turns out, it’s not an “else if” symbol, it’s merely an “else”, with no curly brace, followed by an “if” block.&lt;/p&gt;
&lt;p&gt;You learn something new every day. (As is to be expected, this is &lt;a href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/if...else#Description"&gt;well-documented on MDN&lt;/a&gt;. But when something works the way you expect it to, you don’t always look into why.)&lt;/p&gt;</description><link>http://tgriff3.com/post/37692631500</link><guid>http://tgriff3.com/post/37692631500</guid><pubDate>Mon, 10 Dec 2012 23:12:28 -0500</pubDate><category>javascript</category></item><item><title>Photo</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_mefnfq7VuM1qkjmlko1_400.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://tgriff3.com/post/37081771236</link><guid>http://tgriff3.com/post/37081771236</guid><pubDate>Sun, 02 Dec 2012 21:11:49 -0500</pubDate><category>Unicode</category></item><item><title>Accidental Denial-of-Service</title><description>&lt;p&gt;When pushing a bug fix to the &lt;a href="http://endorse.me"&gt;Endorse.me&lt;/a&gt; servers this morning, I noticed that the site was responding extraordinarily slowly. A quick check in the logs showed that we were being flooded with requests from a single IP address for a single resource (a Flash/SWF file that we use to allow users to copy text to the clipboard) that was hogging almost an entire web process on Heroku.&lt;/p&gt;
&lt;p&gt;I quickly spun up another dyno on Heroku (cloud computing FTW) and looked a little bit deeper into the issue. I emailed the user who&amp;#8217;s account seemed to be the source, but received no response. Some light googling didn&amp;#8217;t reveal any easy ways to block specific IP addresses using Heroku/Node.js (I found some ways using Rack), and I started considering just how bad it would be to continue to throw new dynos at the problem.&lt;/p&gt;
&lt;p&gt;I moved the SWF file to our CDN, where it should have been all along. For convenience in development, I had kept it local, thinking &amp;#8220;what&amp;#8217;s the worst that could happen with ONE static asset?&amp;#8221; Sigh.&lt;/p&gt;
&lt;p&gt;Eventually I signed us up for &lt;a href="https://www.cloudflare.com/"&gt;CloudFlare&lt;/a&gt; which routes all of our traffic through their network, allowing me to block specific IP&amp;#8217;s. Their sign-up process was completely painless aside from the DNS propagation which is unavoidable.&lt;/p&gt;
&lt;p&gt;As soon as we were set up, I blocked the IP, and everything went back to normal. I was able to scale our Heroku setup back down again, and actually read my logs.&lt;/p&gt;
&lt;p&gt;Now, I&amp;#8217;m inclined to think that this whole thing was an accident for a few reasons:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;The User Agent string indicated it was from Chrome&lt;/li&gt;
&lt;li&gt;The requests were for a SWF file (which seems like it could be a bug, it wasn&amp;#8217;t even a big file)&lt;/li&gt;
&lt;li&gt;While there were a lot of requests, it wasn&amp;#8217;t even close to actually crippling us or taking us down. &lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;If anyone else has run into this issue before and knows a better long term fix without blocking an IP, please let me know.&lt;/p&gt;</description><link>http://tgriff3.com/post/35727376577</link><guid>http://tgriff3.com/post/35727376577</guid><pubDate>Wed, 14 Nov 2012 16:58:43 -0500</pubDate><category>DoS</category><category>Heroku</category><category>Node.js</category><category>CloudFlare</category></item><item><title>A Founder’s Constant State of Rejection</title><description>&lt;a href="http://founderdating.com/a-founders-constant-state-of-rejection/"&gt;A Founder’s Constant State of Rejection&lt;/a&gt;: &lt;p&gt;Articles like this help you cope with the almost bipolar state of mind of being a founder. Just knowing that there are other people out there going through the exact same violent swings of fate that you are helps keep you sane.&lt;/p&gt;
&lt;p&gt;As I’ve come to saying lately, there are great days, and there are terrible days. In a start up, instead of “two steps forward, one step back,” it’s often times “two jumps forward, one haymaker to the face.” But you have to stay in the ring to win the fight.&lt;/p&gt;</description><link>http://tgriff3.com/post/35642972285</link><guid>http://tgriff3.com/post/35642972285</guid><pubDate>Tue, 13 Nov 2012 12:41:18 -0500</pubDate></item><item><title>minming: A billion dollar software tech company is founded every 3 months *in U.S.</title><description>&lt;a href="http://blog.minming.net/post/35553963889/a-billion-dollar-software-tech-company-is-founded-every"&gt;minming: A billion dollar software tech company is founded every 3 months *in U.S.&lt;/a&gt;: &lt;p&gt;&lt;a class="tumblr_blog" href="http://blog.minming.net/post/35553963889/a-billion-dollar-software-tech-company-is-founded-every"&gt;lominming&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ron Conway once said: “There’s a billion company created every 3 months. Now, it is every 2 months”. I finally got the chance compile “The Billion Dollar” list. I tried to limit this list to only software tech companies. I also included a couple of near billion dollar companies (~0.7 B and above).&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://tgriff3.com/post/35570010920</link><guid>http://tgriff3.com/post/35570010920</guid><pubDate>Mon, 12 Nov 2012 12:12:37 -0500</pubDate></item><item><title>Photo</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_mcd09kPKSV1qkjmlko1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://tgriff3.com/post/34175640910</link><guid>http://tgriff3.com/post/34175640910</guid><pubDate>Tue, 23 Oct 2012 14:48:56 -0400</pubDate><category>economy</category></item><item><title>Survivorship Bias in Startups</title><description>&lt;p&gt;Confluence, from Hacker News, makes a great argument for why all advice given by successful startup founders should be taken with a grain of salt - statistical variability. Humans tend to create narratives around events, thereby turning random outcomes into events with perceived predictability.&lt;/p&gt;
&lt;p&gt;I myself have been guilty of reading and listening to startup founders tell their stories to try to find a pattern that I can emulate for success (Jim Collins is a guilty pleasure). But the truth is probably closer to what confluence is preaching - there is a very limited set of commonalities in startup founders, and a lot of what we interpret as skill or foresight is more likely luck.&lt;/p&gt;
&lt;p&gt;It is a must-read comment for anyone involved in startups. A choice quote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[Taking lessons from successful startup founders is] like taking lessons from survivors of the Titanic on how to survive the sinking of a ship. It&amp;#8217;s quite simple - be a young female child with a life vest and rich parents (or in startup land - a young upper-middle class male living in California during a venture bubble, a cyclical investment in the Valley with a convergence of secondary technologies, above average intelligence and a college degree from a reputable university).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://news.ycombinator.org/item?id=4685928"&gt;&lt;a href="http://news.ycombinator.org/item?id=4685928"&gt;http://news.ycombinator.org/item?id=4685928&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://tgriff3.com/post/34168153628</link><guid>http://tgriff3.com/post/34168153628</guid><pubDate>Tue, 23 Oct 2012 11:55:45 -0400</pubDate><category>Startups</category><category>Hacker News</category></item><item><title>Bukowski: People Simply Empty Out</title><description>&lt;a href="http://www.lettersofnote.com/2012/10/people-simply-empty-out.html"&gt;Bukowski: People Simply Empty Out&lt;/a&gt;: &lt;p&gt;An excerpt from Bukowski’s letter to his publisher 15 years after leaving the workforce at age 49:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;And what hurts is the steadily diminishing humanity of those fighting to hold jobs they don’t want but fear the alternative worse. People simply empty out. They are bodies with fearful and obedient minds. The color leaves the eye. The voice becomes ugly. And the body. The hair. The fingernails. The shoes. Everything does.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;As a young man I could not believe that people could give their lives over to those conditions. As an old man, I still can’t believe it. What do they do it for? Sex? TV? An automobile on monthly payments? Or children? Children who are just going to do the same things that they did?&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://www.lettersofnote.com/2012/10/people-simply-empty-out.html"&gt;Full Letter&lt;/a&gt;&lt;/p&gt;</description><link>http://tgriff3.com/post/33910587254</link><guid>http://tgriff3.com/post/33910587254</guid><pubDate>Fri, 19 Oct 2012 16:33:55 -0400</pubDate></item></channel></rss>
