<?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>I’m a hacker (not a hax0r) who writes about code, design, security, and startups.</description><title>accidental hacker</title><generator>Tumblr (3.0; @accidentalhacker)</generator><link>http://accidentalhacker.com/</link><item><title>5 Things You Should Know About Big Data</title><description>&lt;a href="http://blog.varonis.com/5-things-you-should-know-about-big-data/"&gt;5 Things You Should Know About Big Data&lt;/a&gt;: &lt;p&gt;A few byte-sized big data concepts (not just trivia) so that you can distinguish the substance from the hype.&lt;/p&gt;</description><link>http://accidentalhacker.com/post/21717417263</link><guid>http://accidentalhacker.com/post/21717417263</guid><pubDate>Tue, 24 Apr 2012 11:38:00 -0400</pubDate><dc:creator>rsobers</dc:creator></item><item><title>The State of Data Protection

While over 80% reported that they...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_m2qa65ltNJ1qb1cm8o1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://blog.varonis.com/the-state-of-data-protection-infographic?utm_campaign=state-of-data-protection&amp;utm_source=accidental-hacker"&gt;The State of Data Protection&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;While over 80% reported that they store data belonging to customers, vendors, and other business partners, only 26% reported being very confident that data stored within their organization is protected.&lt;/em&gt;&lt;/p&gt;</description><link>http://accidentalhacker.com/post/21378880198</link><guid>http://accidentalhacker.com/post/21378880198</guid><pubDate>Thu, 19 Apr 2012 09:15:40 -0400</pubDate><dc:creator>rsobers</dc:creator></item><item><title>nevver:

Social Media Explained (with donuts)</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_lyxwn8HNkP1qz6f9yo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://thisisnthappiness.com/post/17115675763/social-media-explained-with-donuts" class="tumblr_blog"&gt;nevver&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Social Media Explained (&lt;a href="http://copyranter.blogspot.com/2012/02/social-media-explained-with-donuts.html"&gt;with donuts&lt;/a&gt;)&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://accidentalhacker.com/post/20473843983</link><guid>http://accidentalhacker.com/post/20473843983</guid><pubDate>Wed, 04 Apr 2012 13:33:23 -0400</pubDate><dc:creator>rsobers</dc:creator></item><item><title>Giving Away Your Passwords</title><description>&lt;a href="http://blog.varonis.com/giving-away-your-passwords/"&gt;Giving Away Your Passwords&lt;/a&gt;: &lt;p&gt;The House voted down a bill this week that would prevent employers for asking for your Facebook password.&lt;/p&gt;

&lt;p&gt;Unfortunately, plenty of third-party websites ask for your Facebook, Twitter, and Google passwords, too.  This is called the Password Anti-Pattern, and it’s extremely dangerous.  Luckily, OAuth is becoming more common and is way more secure.&lt;/p&gt;</description><link>http://accidentalhacker.com/post/20169036612</link><guid>http://accidentalhacker.com/post/20169036612</guid><pubDate>Fri, 30 Mar 2012 09:44:00 -0400</pubDate><dc:creator>rsobers</dc:creator></item><item><title>7 Recommendations for Data Protection by Forrester’s Andras Cser</title><description>&lt;a href="http://blog.varonis.com/7-recommendations-for-data-protection-by-andras-cser-of-forrester/"&gt;7 Recommendations for Data Protection by Forrester’s Andras Cser&lt;/a&gt;: &lt;p&gt;If content is king, &lt;strong&gt;context is God&lt;/strong&gt;.  DLP solutions can tell you where data is exposed, but unless you have context, how do you know where to begin?  You have to be able to answer, among other things:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;What do I do first?&lt;br/&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;You have to know which sensitive data is over-exposed and most at risk.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Who can should make the access decisions about sensitive data?&lt;br/&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;Not IT, that’s for sure.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;How do I prevent this in the first place?&lt;br/&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;Ensure only the right people have access, that all data has an owner, and that owners periodically review who has access to their data.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://accidentalhacker.com/post/19395501156</link><guid>http://accidentalhacker.com/post/19395501156</guid><pubDate>Fri, 16 Mar 2012 09:19:56 -0400</pubDate><category>data protection</category><dc:creator>rsobers</dc:creator></item><item><title>Learning coding from boredom</title><description>&lt;a href="http://bitquabit.com/post/learning-coding-from-boredom/"&gt;Learning coding from boredom&lt;/a&gt;: &lt;p&gt;Great post by &lt;a href="http://bitquabit.com"&gt;Benjamin&lt;/a&gt; today.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Programmers like to program because they can do cool things.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The reason I learned to code at age 13 was so that I could automate slaying monsters in a &lt;a href="https://en.wikipedia.org/wiki/MajorMUD"&gt;text-based RPG&lt;/a&gt; that I loved.  Today, I code for a number of other reasons: to earn a living, to make tasks in my life easier, to impress the ladies, etc.&lt;/p&gt;

&lt;p&gt;Over the years I did eventually develop a deep passion for understanding data structures, algorithms, design patterns, and all the other “boring” aspects of software development.  But one thing is certain — you could never have lured me into programming by teaching me about the &lt;a href="https://en.wikipedia.org/wiki/Knapsack_problem"&gt;knapsack problem&lt;/a&gt; or the &lt;a href="https://en.wikipedia.org/wiki/Strategy_pattern"&gt;strategy pattern&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Give me monsters and robots, &lt;em&gt;then&lt;/em&gt; I’ll code&lt;/p&gt;</description><link>http://accidentalhacker.com/post/18384847755</link><guid>http://accidentalhacker.com/post/18384847755</guid><pubDate>Mon, 27 Feb 2012 12:35:40 -0500</pubDate><category>code</category><dc:creator>rsobers</dc:creator></item><item><title>parislemon: Path, Not Pathological</title><description>&lt;a href="http://parislemon.com/post/17277891027/path-not-pathological"&gt;parislemon: Path, Not Pathological&lt;/a&gt;: &lt;p&gt;&lt;a href="http://parislemon.com/post/17277891027/path-not-pathological" class="tumblr_blog"&gt;parislemon&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As an iOS lover and &lt;a href="http://parislemon.com/post/13535332878/a-new-path"&gt;Path champion&lt;/a&gt;, a number of folks have asked for my take on the &lt;a href="http://path.com"&gt;Path&lt;/a&gt; address book &lt;a href="http://www.techmeme.com/120208/p6#a120208p6"&gt;situation&lt;/a&gt; of yesterday and today. I’ve avoided weighing in for two reasons: first, I wanted to talk to some other actual developers about the situation. Second, the fact that &lt;a href="http://crunchfund.com"&gt;CrunchFund&lt;/a&gt; is…&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;MG Seigler is great at calling people out when they a.) do something shitty, or b.) try to bullshit us.  It’s one of the reasons I love reading him so much.  In this case, however, Path did something shitty and MG is bullshitting us.  It’s time to call him out on it.&lt;/p&gt;

&lt;p&gt;MG’s main defense for Path stealing peoples’ address books is that they weren’t being shady, rather, they wanted to “ease the connection building process.”  That’s odd.  The whole point of Path is that it’s the anti-Facebook.  That is, you only share your Path with intimately close friends and family.  If I can’t pick them out of my address book myself, I’ve got problems a social app can’t solve.&lt;/p&gt;

&lt;p&gt;And, by the way, how the hell is Path going to look at my address book and distinguish my best friend from my plumber?  Maybe they’re stealing my phone call history, too.&lt;/p&gt;

&lt;p&gt;OK, so let’s pretend they Path &lt;em&gt;is&lt;/em&gt; completely benevolent (and I think they are, actually).  They were &lt;strong&gt;storing our address book data on their servers!&lt;/strong&gt;  What if they got hacked?  Most smart and security conscious developers would go out of their way &lt;strong&gt;not&lt;/strong&gt; to store personal data.  The minute you store personal data, you take on the responsibility for securing it.&lt;/p&gt;

&lt;p&gt;Seigler proceeds to tell us that we shouldn’t be freaking out about Path because so many other applications take advantage of the same API.  What?!  He also says that Path developers were simply utilizing an option put in front of them.  Browser developers have the option to grab our email passwords, but would they?  Windows developers have the option to log our keystrokes, but would they?  I guess some would.&lt;/p&gt;

&lt;p&gt;Just because I leave my keys on the counter doesn’t make it okay for everyone who comes into my house to snag them and make copies.  Path made a choice.  They chose to be the creepy repairman that copies your keys.&lt;/p&gt;

&lt;p&gt;Marco Arment wrote a &lt;a href="http://www.marco.org/2012/02/09/ios-address-book-should-prompt-users"&gt;terrific post&lt;/a&gt; about how his app, Instapaper, deals with the address book.  Marco gets it.  Could he swipe our data?  Yes, but he wouldn’t dare.&lt;/p&gt;

&lt;p&gt;Lastly, I love how MG calls it “weird” that Apple exposes your address book to developers.  If this were an Android story, I think the word would be “sinister.”  I’m just sayin’.&lt;/p&gt;

&lt;p&gt;Again, I love MG and I usually agree with what he says, but I think he’s letting his loyalties get in the way here, so much so that he’s willing to be hypocritical.&lt;/p&gt;</description><link>http://accidentalhacker.com/post/17408605520</link><guid>http://accidentalhacker.com/post/17408605520</guid><pubDate>Fri, 10 Feb 2012 23:20:34 -0500</pubDate><dc:creator>rsobers</dc:creator></item><item><title>Data Protection: It's Just the Right Thing To Do</title><description>&lt;a href="http://blog.varonis.com/data-protection-its-just-the-right-thing-to-do/"&gt;Data Protection: It's Just the Right Thing To Do&lt;/a&gt;: &lt;p&gt;&lt;img src="http://farm3.staticflickr.com/2731/4477539716_0d32d9800f.jpg" alt="Protection"/&gt;&lt;/p&gt;

&lt;p&gt;Too many business put data protection out of mind and, in the long-run, end up harming customers, partners, and shareholders.  Sadly, since moral obligation clearly is not enough to make most companies flinch, state legislators have been trying to force compliance with PCI-DSS and other standards.  Now the SEC is stepping in.&lt;/p&gt;</description><link>http://accidentalhacker.com/post/17209714126</link><guid>http://accidentalhacker.com/post/17209714126</guid><pubDate>Tue, 07 Feb 2012 09:35:43 -0500</pubDate><dc:creator>rsobers</dc:creator></item><item><title>The enterprise cloud is, well, cloudy</title><description>&lt;p&gt;Last night I watched a fantastic &lt;a href="http://thisweekin.com/thisweekin-startups/aaron-levie-of-box-on-this-week-in-startups-224/"&gt;episode of This Week in Startups&lt;/a&gt; with guest Aaron Levie of Box.net.  Aaron is a remarkable young CEO who really seems to understand and &lt;em&gt;care&lt;/em&gt; about enterprise software, which is a rare combination.&lt;/p&gt;

&lt;p&gt;One of the themes of the interview was that CIOs and IT departments at large organizations are starting to embrace the cloud.  Jason and Aaron discussed &amp;#8220;bottom up&amp;#8221; adoption of cloud-based software in the enterprise.  Essentially, lower-level employees start using their favorite applications like DropBox or Evernote at work and the apps become so widespread and integral to collaboration that IT managers and CIOs adopt the technology officially.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lyh4jhgvvV1qaex6z.png" alt="Cloud, cloud, cloud!"/&gt;&lt;/p&gt;

&lt;p&gt;They talked about how big Fortune 500 companies are starting to develop or acquire cloud solutions to put in their portfolios (e.g., Oracle buys RightNow, SAP buys SuccessFactors).  Cloud, cloud, cloud.&lt;/p&gt;

&lt;p&gt;Then, &lt;a href="http://www.youtube.com/watch?v=9s6x1uZ-YaM&amp;amp;list=SL&amp;amp;feature=sh_e_se#t=22m30s"&gt;about 23 minutes into the interview&lt;/a&gt;, the elephant in the room rears it&amp;#8217;s giant head: &lt;strong&gt;what about security?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even the most progressive enterprises, Aaron remarks, have the philosophy: use any device you want (Mac, PC, iPhones), use any software you want, but &lt;strong&gt;secure the data&lt;/strong&gt; at all costs.&lt;/p&gt;

&lt;p&gt;They&amp;#8217;d be foolish not to.  We&amp;#8217;re not talking about MP3s and funny cat photos.  We&amp;#8217;re talking about intellectual property, source code, patents, legal and HR documents, etc.&lt;/p&gt;

&lt;p&gt;As the definition of &amp;#8220;secure&amp;#8221; evolves, every company is faced with hard decisions.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Alice:&lt;/strong&gt; &amp;#8220;All of our critical data must stay within the company&amp;#8217;s walls.&amp;#8221;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bob:&lt;/strong&gt; &amp;#8220;But we if we can&amp;#8217;t share and collaborate, the value of the data decreases substantially.&amp;#8221;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alice:&lt;/strong&gt; &amp;#8220;OK, we have a VPN.  Nothing leaves the VPN!&amp;#8221;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bob:&lt;/strong&gt; &amp;#8220;But we need to email a contract to our lawyers, print this business plan for our VCs, and grant temporary access to our web agency.&amp;#8221;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alice:&lt;/strong&gt; &amp;#8220;Fuuuuuuuu!&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;So what&amp;#8217;s the solution?  We have to have a security model that fits today&amp;#8217;s distributed work model.  We can&amp;#8217;t lock everything down lest we destroy efficiency.&lt;/p&gt;

&lt;p&gt;Levie goes on:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We have to redefine what it means to be secure and what it means to manage security. Then you move more into this category where &lt;strong&gt;visibility is security&lt;/strong&gt;.  If I have far more visibility into where my data is, who&amp;#8217;s using it, every access, every event on it &amp;#8212; maybe it&amp;#8217;s a little more open, but people will use the product and I&amp;#8217;ll actually see what&amp;#8217;s going on with the data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lyh6007xFq1qaex6z.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.varonis.com/collaboration-without-choas.html"&gt;Secure collaboration&lt;/a&gt; is something &lt;a href="http://www.varonis.com"&gt;Varonis&lt;/a&gt; (the company I now work for) has been focused on for years.  If you have complete visibility into who &lt;strong&gt;can&lt;/strong&gt; access data and who &lt;strong&gt;is&lt;/strong&gt; accessing data at all times, then you can facilitate collaboration while avoiding the front page of Wikileaks.&lt;/p&gt;

&lt;p&gt;Complete visibility is not a trivial accomplishment given the enormous growth and fragmentation of data:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The number one challenge is actually the sprawl that gets created with organizations &amp;#8212; the amount of apps and data that people are now consuming and interacting with and how unmanageable that is for IT.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Varonis has been the saving grace for many of the world&amp;#8217;s biggest enterprises when it comes to securing unstructured data.  Varonis monitors every single event across your entire IT infrastructure: every file open, rename, delete, copy.  Every email sent, received, marked as unread, etc.  This &lt;a href="http://blog.varonis.com/why-you-need-an-audit-trail/"&gt;audit trail&lt;/a&gt; enables us to answer all sorts of critical questions (and helps us sleep at night):&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Who is looking at sensitive data?&lt;/li&gt;
&lt;li&gt;What data is stale and should be archived?&lt;/li&gt;
&lt;li&gt;Where can I reduce access?&lt;/li&gt;
&lt;li&gt;Who moved my files?&lt;/li&gt;
&lt;li&gt;Who&amp;#8217;s abusing their access?&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The biggest question I have for Aaron, Jason, and everyone else is &lt;strong&gt;how do you get visibility if your data is in the cloud?&lt;/strong&gt;  How do you audit access?  How do you get visibility into who is accessing what data? Are Google and Amazon going to let us install Varonis on their infrastructure?  When it comes to security the cloud is very, well, cloudy.&lt;/p&gt;

&lt;p&gt;Photo credit: &lt;a href="http://mp5gosu.deviantart.com/art/Cloudy-stormy-day-47828616"&gt;http://mp5gosu.deviantart.com/art/Cloudy-stormy-day-47828616&lt;/a&gt;&lt;/p&gt;</description><link>http://accidentalhacker.com/post/16614268248</link><guid>http://accidentalhacker.com/post/16614268248</guid><pubDate>Mon, 30 Jan 2012 12:08:00 -0500</pubDate><dc:creator>rsobers</dc:creator></item><item><title>Please don't learn to code</title><description>&lt;p&gt;I remember stumbling upon &lt;a href="http://tryruby.org"&gt;tryruby.org&lt;/a&gt; a few years back.  It was this neat little web-based shell that helped teach Ruby in a fun and interactive way.&lt;/p&gt;

&lt;p&gt;The site lowered the barrier to entry for newcomers: you didn&amp;#8217;t have to download anything; you didn&amp;#8217;t need an editor or an interpreter; you didn&amp;#8217;t even have to know what a shell was.  You would simply read the instructions on the screen, type some commands, hit enter, and immediately see the results.  In mere seconds, you were coding.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lxz9fvQIwk1qaex6z.jpg" alt="Try Ruby"/&gt;&lt;/p&gt;

&lt;p&gt;This was just one of &lt;a href="http://en.wikipedia.org/wiki/Why_the_lucky_stiff"&gt;why the lucky stiff&amp;#8217;s&lt;/a&gt; many whimsical creations aimed at spreading the joy of coding.  Nowadays, there are dozens of interactive code tutorial sites trying to do the same thing, mostly for profit.  Some have even &lt;a href="http://techcrunch.com/2011/10/27/codecademy-raises-2-5-million-to-teach-you-how-to-code/"&gt;raised millions in venture capital&lt;/a&gt; to fuel their efforts.&lt;/p&gt;

&lt;p&gt;One site in particular, Codecademy, reportedly hauled in 1,000,000 users due largely to their well-timed &lt;a href="http://codeyear.com/"&gt;Code Year&lt;/a&gt; initiative, which delivers weekly programming lessons to people who have resolved to learn to code in 2012.  Last week, they announced a &lt;a href="http://blog.codecademy.com/announcing-meetups-and-our-partnership-with-t"&gt;partnership with the White House&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The response has been overwhelmingly positive: writers, VCs, accountants, lawyers all learning to code!  But someone has to be the bearer of bad news:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We&amp;#8217;re not all going to be programmers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ly3qrsd2iB1qaex6z.png" alt="Hipster Puppy"/&gt;&lt;/p&gt;

&lt;p&gt;I promise I&amp;#8217;m not trying to cut anyone down or dig a moat around my pristine programming castle.    Those who know me know that I&amp;#8217;ll happily teach programming to anyone who will give me the time of day.  I&amp;#8217;ve personally use sites like &lt;a href="http://www.codeschool.com"&gt;codeschool.com&lt;/a&gt; and &lt;a href="http://www.udemy.com"&gt;udemy.com&lt;/a&gt;.  I also don&amp;#8217;t believe you have to switch professions in order to justify learning and enjoying the craft.&lt;/p&gt;

&lt;p&gt;Confused yet?  Let me try to explain where I&amp;#8217;m coming from.&lt;/p&gt;

&lt;p&gt;On a &lt;a href="http://5by5.tv/hypercritical/47"&gt;recent episode&lt;/a&gt; of my favorite podcast&amp;#8212;Hypercritical&amp;#8212;John Siracusa talks about &lt;a href="http://www.loper-os.org/?p=568"&gt;the death of HyperCard&lt;/a&gt;.  HyperCard was an application on early MacOS that let you make your own programs, or &lt;em&gt;stacks&lt;/em&gt;, via Lego-block-style programming.  HyperCard made it super-easy for normal people to build their very own programs.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ly148or2141qaex6z.png" alt="HyperCard"/&gt;&lt;/p&gt;

&lt;p&gt;The nerds thought: of course everyone wants to write their own computer programs!  Why else would people want a computer &lt;em&gt;in their house?&lt;/em&gt;  &lt;strong&gt;We just have to make it easy enough for them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;John mentions other attempts at lowering the coding bar: AppleScript, Logo for kids, and Automator made programming more natural, fun, and easy.  These platforms did, without question, make programming more accessible, but they never took off the way we geeks hoped and expected they would.&lt;/p&gt;

&lt;p&gt;Siracusa explains (paraphrasing):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;You could build up a pretty powerful system by composing all of these pieces that you didn&amp;#8217;t write and you didn&amp;#8217;t have to understand.  But in all of these cases&amp;#8212;HyperCard, AppleScript, Automator&amp;#8212;the harsh reality is that anything that lowers the bar for people to do powerful things inevitably leads to Programming with a capital P.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These abstractions were &lt;a href="http://joelonsoftware.com/articles/LeakyAbstractions.html"&gt;leaky&lt;/a&gt;.  The minute you try to do anything that is even slightly off the rails, you very quickly find yourself doing actual programming: conditionals, loops, composition, abstraction.  These concepts aren&amp;#8217;t natural to most people, so they stop right there. They won&amp;#8217;t ever make the leap, no matter how easy or fun you make it.&lt;/p&gt;

&lt;p&gt;If CPA firms had ping pong tables and Friday beer bashes, I might be tempted to learn accounting.  And I would love it if there were a fun and easy way to go about it.  But in the end, I could never  be passionate about double-entry bookkeeping the way I&amp;#8217;m passionate about JavaScript, because you can&amp;#8217;t teach passion.&lt;/p&gt;

&lt;p&gt;The percentage of the population that can engineer great software is so minuscule, and that number won&amp;#8217;t change dramatically.  HyperCard couldn&amp;#8217;t change it; Visual Basic couldn&amp;#8217;t change it; and no amount of instructional videos and interactive code challenges can change it.  We might be able to nudge the number upward by making things easier, &lt;strong&gt;but there is a hard limit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I would love to see more people from all walks of life learn to code, but I think we need to calibrate our expectations so we&amp;#8217;re not shocked or disappointed when the dust settles and it&amp;#8217;s just us nerds hunched over our laptops hacking away at 3am because we just can&amp;#8217;t help ourselves.&lt;/p&gt;</description><link>http://accidentalhacker.com/post/16116466587</link><guid>http://accidentalhacker.com/post/16116466587</guid><pubDate>Thu, 19 Jan 2012 10:11:00 -0500</pubDate><dc:creator>rsobers</dc:creator></item><item><title>Why I Hate Android</title><description>&lt;p&gt;Is Google sleeping with the enemy?&lt;/p&gt;

&lt;p&gt;&lt;a href="http://parislemon.com/post/15604811641/why-i-hate-android" class="tumblr_blog"&gt;parislemon&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;img height="306" src="https://lh4.googleusercontent.com/-2WOrrM5-0R8/Twu6f6210JI/AAAAAAAAKLw/MCHn6znOkj4/s600/ss.png" width="600"/&gt;&lt;/p&gt;
&lt;p&gt;Why do I hate Android? It’s definitely one of the questions I get asked most often these days. And most of those that don’t ask probably assume it’s because I’m an iPhone guy. People see negative take after negative take about the operating system and label me as “unreasonable” or “biased” or worse.&lt;/p&gt;
&lt;p&gt;I should probably explain.&lt;/p&gt;
&lt;p&gt;Believe it or not, I actually don’t hate Android. That is to say, I don’t hate the &lt;em&gt;concept&lt;/em&gt; of Android — in fact, at one point, I loved it. What I hate is what Android has become. And more specifically, what Google has done with Android.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://parislemon.com/post/15604811641/why-i-hate-android"&gt;Read More&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://accidentalhacker.com/post/15618895399</link><guid>http://accidentalhacker.com/post/15618895399</guid><pubDate>Tue, 10 Jan 2012 09:27:00 -0500</pubDate><dc:creator>rsobers</dc:creator></item><item><title>Using Mercurial Subrepositories</title><description>&lt;p&gt;Code reuse is important. As developers, we don’t want to keep reinventing   the wheel over and over again. We should leverage code that we’ve already   written, and use open source libraries and frameworks where appropriate.&lt;/p&gt;



&lt;p&gt;Having the source code of a library that your project depends on is very   beneficial.  You can browse through it, debug into it, and make changes   to it.  But what is the most efficient way to store and track a piece of   code that is shared across dozens of projects? Should you simply copy and   paste the library’s source code into a lib folder within each project’s   repository? Or should you store the library in its own repository and   reference it externally?&lt;/p&gt;



&lt;p&gt;The copy/paste method makes propagating changes a real nightmare, and the   external reference approach has its own drawbacks:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;How is this extra step communicated?  Is it in a wiki document   somewhere? &lt;/li&gt;&#13;
&lt;li&gt;Should you write a script to fetch the dependencies or some build   tool? &lt;/li&gt;&#13;
&lt;li&gt;What &lt;em&gt;version&lt;/em&gt; of the library should you clone? &lt;/li&gt;&#13;
&lt;li&gt;Where on my disk does the library need to live? &lt;/li&gt;&#13;
&lt;li&gt;Does the build server know about all this? &lt;/li&gt;&#13;
&lt;/ul&gt;&lt;p&gt;That’s a lot of question marks. They’re not intractable issues by any   stretch, but you do have to think about them. You don’t want to have to   think, you want to write code and get things done.&lt;/p&gt;



&lt;h2&gt;Subrepositories to the rescue&lt;/h2&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;Subrepositories let you treat a collection of repositories as a group.   For example, when you clone a repo, Mercurial will recursively clone all   of its subrepositories as well, so the developer (or build server)   doesn’t need to know about the dependencies — the source control system   handles it all.&lt;/p&gt;



&lt;p&gt;When you create (or update) a subrepository, Mercurial takes a snapshot   of the subrepo’s state and stores it in the parent repository’s   &lt;code&gt;.hgsubstate&lt;/code&gt; file. This means that multiple projects can   point to a single shared subrepository, yet each one can independently   decide which revision of the shared repository to rely on.&lt;/p&gt;



&lt;p&gt;Further, the subrepository can be anywhere — on your local disk, in Kiln,   on a co-worker’s machine, etc. Heck, it can even be a &lt;em&gt;Subversion&lt;/em&gt; repository!&lt;/p&gt;



&lt;p&gt;Let’s see an example that illustrates exactly how to use them.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Before you get your hands dirty, if you’re using   subrepos, you almost certainly want to have the following lines in your   &lt;code&gt;.hgrc&lt;/code&gt; or &lt;code&gt;Mercurial.ini&lt;/code&gt; file (thanks to &lt;a href="http://twitter.com/#!/wolever/" target="_new"&gt;David Wolever&lt;/a&gt; for this   tip).&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;[ui]&#13;
commitsubrepos = false&lt;/code&gt;&#13;
&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;h2&gt;A Tale of Two Résumés: A Case Study in Subrepositories&lt;/h2&gt;



&lt;p&gt;Fog Creek is always looking to hire great people. In fact, I’m proud to   announce our two most recent hires — we just poached Darth Vader from   Microsoft and Cthulhu from Facebook (sorry, Zuck).&lt;/p&gt;



&lt;p&gt;Whenever someone new joins the team, one of the first things we have them   do is create a personal résumé site that showcases their skills. I   provide them with a standard HTML template and they fill in all the   content. Each team member has their own repository in Kiln.&lt;/p&gt;



&lt;p&gt;Here’s what the project looks like right now:&lt;/p&gt;



&lt;p&gt;&lt;img class="outline" src="http://media.tumblr.com/tumblr_lxifgcq7Oh1qaex6z.png"/&gt;&lt;/p&gt;



&lt;p&gt;Vader and Cthulhu have very similar sites at this point — both contain a   single static HTML page, CSS, and some images. There aren’t any external   dependencies.&lt;/p&gt;



&lt;p&gt;Have a look inside Cthulhu’s repo:&lt;/p&gt;



&lt;p&gt;&lt;img class="outline" src="http://media.tumblr.com/tumblr_lxifhbZkgs1qaex6z.png"/&gt;&lt;/p&gt;



&lt;p&gt;The résumés look nice and clean, albeit plain:&lt;/p&gt;



&lt;p&gt;&lt;img class="outline" src="http://media.tumblr.com/tumblr_lxifigwS9R1qaex6z.png"/&gt;&lt;/p&gt;



&lt;h2&gt;Creating a subrepository&lt;/h2&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;I’ve been spending my days on Hacker News reading about how all the   JavaScript ninjas are writing jQuery plugins to enhance their websites.   So, naturally, I wrote a jQuery plugin that everyone can use to add   awesome &lt;a href="http://mothereffingtextshadow.com/"&gt;text shadows&lt;/a&gt; to   their résumés. The plugin is aptly named &lt;strong&gt;awesomejs&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;I checked &lt;a href="https://rob.kilnhg.com/Repo/Subrepo-Demo/Libraries/awesomejs/History/d5e13195590d" target="_new"&gt;my code&lt;/a&gt; into Kiln so my team can grab it.&lt;/p&gt;



&lt;p&gt;&lt;img class="outline" src="http://media.tumblr.com/tumblr_lxiflkFckz1qaex6z.png"/&gt;&lt;/p&gt;



&lt;p&gt;Now, don’t tell Cthulhu, but Vader is my favorite co-worker. His ability   to dominate a galaxy is truly unmatched. Vader happens to be out of the   office at the moment. While he’s gone, I’m going to make his résumé just   a little more awesome.&lt;/p&gt;



&lt;p&gt;First I’ll clone Vader’s repo down to my machine.&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;c:\code&amp;gt;hg clone &lt;a href="https://rob.kilnhg.com/Repo/Subrepo-Demo/Websites/vader"&gt;https://rob.kilnhg.com/Repo/Subrepo-Demo/Websites/vader&lt;/a&gt;&#13;
destination directory: vader&#13;
adding changesets&#13;
adding manifests&#13;
adding file changes&#13;
added 1 changesets with 4 changes to 4 files&#13;
updating to branch default&#13;
4 files updated, 0 files merged, 0 files removed, 0 files unresolved&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;Then, from &lt;em&gt;within&lt;/em&gt; the &lt;strong&gt;vader&lt;/strong&gt; repo, I’ll clone   &lt;strong&gt;awesomejs&lt;/strong&gt; so that it becomes a nested subdirectory.&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;c:\code&amp;gt;cd vader&#13;
&#13;
c:\code\vader&amp;gt;hg clone &lt;a href="https://rob.kilnhg.com/Repo/Subrepo-Demo/Libraries/awesomejs"&gt;https://rob.kilnhg.com/Repo/Subrepo-Demo/Libraries/awesomejs&lt;/a&gt;&#13;
destination directory: awesomejs&#13;
requesting all changes&#13;
adding changesets&#13;
adding manifests&#13;
adding file changes&#13;
added 1 changesets with 1 changes to 1 files&#13;
updating to branch default&#13;
1 files updated, 0 files merged, 0 files removed, 0 files unresolved&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;Now I have two nested Mercurial repositories, but &lt;strong&gt;they are not   linked&lt;/strong&gt; in any way and I can’t operate on them in tandem…yet.&lt;/p&gt;



&lt;p&gt;To achieve full-subrepo goodness I have to create the &lt;code&gt;.hgsub&lt;/code&gt; file in the &lt;strong&gt;vader&lt;/strong&gt; repository’s root directory.   &lt;code&gt;.hgsub&lt;/code&gt; is a plain text file with one line per subrepository.   On left-hand side of the equals sign is the local directory name where   the subrepo will reside. On the right-hand side is where that repo lives.&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;c:\code\vader&amp;gt;echo awesomejs = &lt;a href="https://rob.kilnhg.com/Repo/Subrepo-Demo/Libraries/awesomejs"&gt;https://rob.kilnhg.com/Repo/Subrepo-Demo/Libraries/awesomejs&lt;/a&gt; &amp;gt; .hgsub&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;I save the file, add it, and commit it just like I would any other file.   I can tell by the output that Mercurial knows I’m making a subrepo when I   commit &lt;code&gt;.hgsub&lt;/code&gt;. Further, it automatically creates a   &lt;code&gt;.hgsubstate&lt;/code&gt; file where it records a snapshot of the   subrepo’s state.&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;c:\code\vader&amp;gt;hg add&#13;
adding .hgsub&#13;
&#13;
c:\code\vader&amp;gt;hg commit -m "adding subrepository awesomejs"&#13;
committing subrepository awesomejs&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;With my new subrepo in place, I’m ready to share my changes, so, from   within the &lt;strong&gt;vader&lt;/strong&gt; repo, I push my changeset to Kiln.&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;c:\code\vader&amp;gt;hg push&#13;
pushing to &lt;a href="https://rob.kilnhg.com/Repo/Subrepo-Demo/Websites/vader"&gt;https://rob.kilnhg.com/Repo/Subrepo-Demo/Websites/vader&lt;/a&gt;&#13;
pushing subrepo awesomejs to &lt;a href="https://rob.kilnhg.com/Repo/Subrepo-Demo/Libraries/awesomejs"&gt;https://rob.kilnhg.com/Repo/Subrepo-Demo/Libraries/awesomejs&lt;/a&gt;&#13;
searching for changes&#13;
searching for changes&#13;
no changes found&#13;
searching for changes&#13;
searching for changes&#13;
remote: kiln: successfully pushed one changeset&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;Notice how issuing &lt;code&gt;hg push&lt;/code&gt; from the parent repository   automatically pushed the subrepo as well (though, in our case, there   happened not to be any changes in the subrepo). Mercurial will   automatically push all subrepositories when the parent repository is   being pushed. This ensures new subrepository changes are available when   referenced by top-level repositories.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; not all Mercurial commands will automatically   recurse into subrepos. For instance, &lt;code&gt;hg status&lt;/code&gt; does not   recurse unless the &lt;code&gt;-S&lt;/code&gt; option is specified, and &lt;code&gt;hg   pull&lt;/code&gt; will not act on subrepositories at all. Type &lt;code&gt;hg help   subrepos&lt;/code&gt; for more on this.&lt;/p&gt;



&lt;p&gt;Now, if I look at the Vader website in Kiln I can see my new changeset.   And if I switch to the file browser I can see a little visual cue next to   &lt;strong&gt;awesomejs&lt;/strong&gt; to indicate that there’s a subrepo present.&lt;/p&gt;



&lt;p&gt;&lt;img class="outline" src="http://media.tumblr.com/tumblr_lxiflxYR021qaex6z.png"/&gt;&lt;/p&gt;



&lt;p&gt;If I click on the &lt;strong&gt;awesomejs&lt;/strong&gt; folder, I can see that I   don’t have a copy of the &lt;strong&gt;awesomejs&lt;/strong&gt; files within the   &lt;strong&gt;vader&lt;/strong&gt; repository; rather, I have a link to the   &lt;strong&gt;Subrepo Demo -&amp;gt; Libraries -&amp;gt; awesomejs&lt;/strong&gt; repository.   What’s more, Kiln knows exactly which revision of   &lt;strong&gt;awesomejs&lt;/strong&gt; to show me based on the data in   &lt;code&gt;.hgsubstate&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;&lt;img class="outline" src="http://media.tumblr.com/tumblr_lxifmnffNz1qaex6z.png"/&gt;&lt;/p&gt;



&lt;p&gt;If I were to peer inside the &lt;code&gt;.hgsubstate&lt;/code&gt; file in the   &lt;strong&gt;vader&lt;/strong&gt; repo, I would see that it simply contains the   changeset hash of the revision that it expects &lt;strong&gt;awesomejs&lt;/strong&gt; to be locked on:&lt;/p&gt;



&lt;p&gt;&lt;img class="outline" src="http://media.tumblr.com/tumblr_lxifnl4ZQv1qaex6z.png"/&gt;&lt;/p&gt;



&lt;h2&gt;Applying some awesomeness&lt;/h2&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;Now that I have my subrepo relationship established, I’ll actually make   use of the plugin. I will edit &lt;code&gt;index.html&lt;/code&gt; and, right above   the closing &amp;lt;body&amp;gt; tag, add references to jQuery and awesomejs, and   call the plugin.&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;&amp;lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"&amp;gt;&amp;lt;/script&amp;gt;&#13;
&amp;lt;script src="awesomejs/awesome.js"&amp;gt;&amp;lt;/script&amp;gt;&#13;
&amp;lt;script&amp;gt;&#13;
    // make all the h1 and dt tags awesome.&#13;
    $(document).ready(function () {&#13;
        $('h1, dt').makeAwesome();&#13;
     });&#13;
&amp;lt;/script&amp;gt;&#13;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;Much better:&lt;/p&gt;



&lt;p&gt;&lt;img class="outline" src="http://media.tumblr.com/tumblr_lxifokvQ5e1qaex6z.png"/&gt;&lt;/p&gt;



&lt;h2&gt;Cthulhu’s turn&lt;/h2&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;Cthulhu decided that, not only is he going to use   &lt;strong&gt;awesomejs&lt;/strong&gt; for his own resume, he’s going to contribue   some changes to the plugin to make it better. He noticed that I   hard-coded the color magenta right into &lt;code&gt;awesome.js&lt;/code&gt; and   thought it might be better if it were &lt;a href="https://rob.kilnhg.com/Repo/Subrepo-Demo/Libraries/awesomejs/History/e281bb75e574"&gt; passed as a parameter to the plugin instead&lt;/a&gt;. This way, each engineer   can use their own personalized color scheme.&lt;/p&gt;



&lt;p&gt;To make this change, first Cthulhu clones his repo and repeats the same   steps I did to create the subrepository (i.e., hg clone awesomejs, create   &lt;code&gt;.hgsub&lt;/code&gt;, hg add, hg commit). Then, within the subrepository   folder, Cthulhu makes his changes to &lt;strong&gt;awesomejs&lt;/strong&gt;. Lastly,   Cthulhu updates &lt;code&gt;index.html&lt;/code&gt; within the   &lt;strong&gt;cthulhu&lt;/strong&gt; repository to referenence and call the plugin.   &lt;a href="https://rob.kilnhg.com/Repo/Subrepo-Demo/Websites/cthulhu/History/90ccac8e4a0b"&gt; He likes cyan.&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;img class="outline" src="http://media.tumblr.com/tumblr_lxifovDCji1qaex6z.png"/&gt;&lt;/p&gt;



&lt;p&gt;Now he’s ready to commit the changes in both repositories. Note, however,   that when you call &lt;code&gt;hg status&lt;/code&gt; from within the parent repo,   you won’t see your changes to any subrepos. If you want to see what’s   changed in a subrepo, you’ll need to use &lt;code&gt;hg status -S&lt;/code&gt; instead. Here’s what &lt;code&gt;hg status -S&lt;/code&gt; looks like at this point:&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;c:\code\cthulhu&amp;gt;hg status -S&#13;
M awesomejs\awesome.js&#13;
M index.html&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IMPORTANT POINT!&lt;/strong&gt; When he commits, he must do so &lt;em&gt;from   within the parent repository&lt;/em&gt;, otherwise Mercurial will NOT update   its &lt;code&gt;.hgsubstate&lt;/code&gt;. As a result, when the next developer comes   along and clones the Cthulhu website, they’d get the hard-coded magenta   version of &lt;strong&gt;awesomejs&lt;/strong&gt; with it, and that’s &lt;a href="http://kiln.stackexchange.com/questions/1066/problems-using-sub-repositories-subrepos"&gt; not what we want.&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;First he commits the change to &lt;strong&gt;awesomejs&lt;/strong&gt;:&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;c:\code\cthulu&amp;gt;hg commit -m "make the color a parameter instead of hard-coding it to 'magenta'" awesomejs&#13;
committing subrepository awesomejs&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;Then the change to &lt;code&gt;index.html&lt;/code&gt; in &lt;strong&gt;vader&lt;/strong&gt;:&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;c:\code\cthulu&amp;gt;hg commit -m "make use of the awesomejs plugin.  I like cyan." index.html&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;And here’s the log:&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;c:\code\cthulhu&amp;gt;hg log&#13;
changeset:   3:90ccac8e4a0b&#13;
tag:         tip&#13;
user:        Rob Sobers&#13;
date:        Thu Mar 17 14:42:26 2011 -0400&#13;
summary:     make use of the awesomejs plugin.  I like cyan.&#13;
&#13;
changeset:   2:71e8c78d1f59&#13;
user:        Rob Sobers&#13;
date:        Thu Mar 17 14:42:04 2011 -0400&#13;
summary:     make the color a parameter instead of hard-coding it to 'magenta'&#13;
&#13;
changeset:   1:7f699cdf3208&#13;
user:        Rob Sobers&#13;
date:        Thu Mar 17 14:24:43 2011 -0400&#13;
summary:     adding awesomejs subrepository&#13;
&#13;
changeset:   0:3517279c43fd&#13;
user:        Rob Sobers&#13;
date:        Tue Mar 15 23:45:15 2011 -0400&#13;
summary:     new resume site&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;Cthulhu can now push these changes up to Kiln (remember, push is   recursive) and carry on…right?&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Wait a minute!&lt;/em&gt; Cthulhu changed the signature to the   &lt;code&gt;makeAwesome&lt;/code&gt; function without regard for anyone else! What is   that going to do to Vader’s site? Vader isn’t passing a color name, so   his shadow color will be &lt;code&gt;undefined&lt;/code&gt;, which I’m pretty sure   isn’t a valid HTML color. Vader is expecting his drop shadows to be   magenta.&lt;/p&gt;



&lt;p&gt;No worries! The change Cthulhu made to the subrepo is &lt;em&gt;available&lt;/em&gt; to Vader, but not automatically &lt;em&gt;forced&lt;/em&gt; on him. Here’s what’s in   Vader’s subrepo:&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;C:\code\vader\awesomejs&amp;gt;hg tip&#13;
changeset:   0:d5e13195590d&#13;
tag:         tip&#13;
user:        Rob Sobers&#13;
date:        Tue Mar 15 23:37:48 2011 -0400&#13;
summary:     creating new jQuery plugin&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;And here’s the incoming changeset, should he choose to pull it:&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;C:\code\vader\awesomejs&amp;gt;hg in&#13;
&#13;
comparing with &lt;a href="https://rob.kilnhg.com/Repo/Subrepo-Demo/Libraries/awesomejs"&gt;https://rob.kilnhg.com/Repo/Subrepo-Demo/Libraries/awesomejs&lt;/a&gt;&#13;
searching for changes&#13;
changeset:   1:e281bb75e574&#13;
tag:         tip&#13;
user:        Rob Sobers&#13;
date:        Thu Mar 17 14:42:04 2011 -0400&#13;
summary:     make the color a parameter instead of hard-coding it to 'magenta'&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;When Vader is ready, he can pull the above change, update, and commit the   parent repo to record the new version in &lt;code&gt;.hgsubstate&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;And that’s the beauty of subrepositories — they give you the benefit of   working on a single shared repository across multiple projects while   letting you lock each project at a specific version.&lt;/p&gt;



&lt;p&gt;All of the code from this tutorial is available for you to play with in a   public Kiln repo: &lt;a href="https://rob.kilnhg.com/"&gt;&lt;a href="https://rob.kilnhg.com"&gt;https://rob.kilnhg.com&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h5&gt;Credits:&lt;/h5&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;Cthulhu résumé and HTML template by Chris Coyier: &lt;a href="http://css-tricks.com/one-page-resume-site/"&gt;&lt;a href="http://css-tricks.com/one-page-resume-site"&gt;http://css-tricks.com/one-page-resume-site&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Darth Vader résumé details: &lt;a href="http://www.giraffecvs.co.uk/darth-vader-cv"&gt;&lt;a href="http://www.giraffecvs.co.uk/darth-vader-cv"&gt;http://www.giraffecvs.co.uk/darth-vader-cv&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h5&gt;Other resources:&lt;/h5&gt;

&lt;p&gt;&#13;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://nerdwords.blogspot.com/2010/10/understanding-mercurial-subrepositories.html"&gt; &lt;a href="http://nerdwords.blogspot.com/2010/10/understanding-mercurial-subrepositories.html"&gt;http://nerdwords.blogspot.com/2010/10/understanding-mercurial-subrepositories.html&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;&lt;a href="http://kiln.stackexchange.com/questions/2685/how-does-fog-creek-or-other-users-use-sub-repositories"&gt; &lt;a href="http://kiln.stackexchange.com/questions/2685/how-does-fog-creek-or-other-users-use-sub-repositories"&gt;http://kiln.stackexchange.com/questions/2685/how-does-fog-creek-or-other-users-use-sub-repositories&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;&lt;a href="http://kiln.stackexchange.com/questions/1066/problems-using-sub-repositories-subrepos"&gt; &lt;a href="http://kiln.stackexchange.com/questions/1066/problems-using-sub-repositories-subrepos"&gt;http://kiln.stackexchange.com/questions/1066/problems-using-sub-repositories-subrepos&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;&lt;a href="http://mercurial.aragost.com/kick-start/en/subrepositories"&gt;&lt;a href="http://mercurial.aragost.com/kick-start/en/subrepositories"&gt;http://mercurial.aragost.com/kick-start/en/subrepositories&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://accidentalhacker.com/post/15551408069</link><guid>http://accidentalhacker.com/post/15551408069</guid><pubDate>Mon, 21 Mar 2011 23:18:00 -0400</pubDate><dc:creator>rsobers</dc:creator></item><item><title>Sticky notes with CSS3</title><description>&lt;p&gt;I’ve been working on a pretty cool wall-mounted status board as one of my projects at Fog Creek. It’s a webapp that runs on a vertically mounted LCD screen in our office. It displays a bunch of interesting information like tech support calls, staff vacations, tweets about FogBugz, and more.&lt;/p&gt;
&lt;p&gt;I’ve been incrementally adding features and improving the UI whenever I have spare cycles. The other night, I decided to redesign the Kanban board widget, which is a list of the top N things that the customer team needs from engineering. I decided to go with a sticky note UI that mimics a &lt;a href="http://farm3.static.flickr.com/2562/3726484920_f21d793c99_o.jpg" title="Real-life Kanban board" target="_blank"&gt;real-life Kanban board&lt;/a&gt;, which typically consists of a giant white board filled with a bunch of sticky notes.&lt;/p&gt;
&lt;p&gt;My initial design used the classic yellow sticky notes, which I thought looked pretty neat. I showed my co-worker Rich who suggested that we make the notes look like the FogBugz and Kiln notepads that are laying around the office. Awesome idea! Way better.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lxfrl7qIeg1qaex6z.png"/&gt;&lt;/p&gt;
&lt;p&gt;Click &lt;a href="http://jsfiddle.net/rsobers/a9eFX/150/" title="Edit in jsfiddle" target="_blank"&gt;here&lt;/a&gt; to play around with the code yourself on jsFiddle. As you can see, the implementation is pretty simple. CSS3 is really nifty. No images necessary (aside from the kiwi and dodo logos).&lt;/p&gt;
&lt;p&gt;Here’s the markup:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;link href='http://fonts.googleapis.com/css?family=Reenie+Beanie&amp;amp;amp;subset=latin' rel='stylesheet' type='text/css'&amp;gt;

&amp;lt;ul id="notes"&amp;gt;
    &amp;lt;li&amp;gt;
        &amp;lt;p&amp;gt;Push new feature to Kiln for code review&amp;lt;/p&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li class="kiln"&amp;gt;
        &amp;lt;p&amp;gt;Browse hacker news for a bit&amp;lt;/p&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;
        &amp;lt;p&amp;gt;Read JavaScript: The Good Parts by Douglas Crockford&amp;lt;/p&amp;gt;
    &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice that I’m pulling in the handwriting-style font right from the &lt;a href="http://code.google.com/webfonts" title="Google CDN" target="_blank"&gt;Google CDN&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now for the CSS3 magic:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;body {
    background: #B2CCCC;
}

#notes li {
    position: relative;
    width: 300px;
    min-height: 100px;
    margin: 25px auto;
    padding: 60px 15px 15px 15px;
    background: #fff url(&lt;a href="http://our.fogbugz.com/images/tbKiwiLogo.gif"&gt;http://our.fogbugz.com/images/tbKiwiLogo.gif&lt;/a&gt;) no-repeat 4px 8px;
    -webkit-box-shadow: 0 2px 12px rgba(0,0,0,.5);
    -moz-box-shadow: 0 2px 12px rgba(0,0,0,.5);
    box-shadow: 0 1px 2px #000;
    -webkit-transform: rotate(-.5deg);
    -moz-transform: rotate(-.5deg);
    -o-transform: rotate(-.5deg);
}

#notes li:nth-child(even) {
    -webkit-transform: rotate(.5deg);
    -moz-transform: rotate(.5deg);
    -o-transform: rotate(.5deg);
}

#notes li.kiln
{
    background-image: url(&lt;a href="https://rob.kilnhg.com/Content/Images/kiln_focus.gif"&gt;https://rob.kilnhg.com/Content/Images/kiln_focus.gif&lt;/a&gt;);
}

#notes li p {
    text-align: center;
    font: normal normal normal 40px/48px 'Reenie Beanie', Helvetica, Arial, sans-serif;
    color: #000;
    text-shadow: white 1px 1px 0px;
    overflow:hidden;
}

#notes li::before {
    content: ' ';
    display: block;
    position: absolute;
    left: 115px;
    top: -15px;
    width: 75px;
    height: 25px;
    z-index: 2;
    background-color: rgba(243,245,228,0.5);
    border: 2px solid rgba(255,255,255,0.5);
    -webkit-box-shadow: 0 0 5px #888;
    -moz-box-shadow: 0 0 5px #888;
    box-shadow: 2px 2px 2px #000;
    -webkit-transform: rotate(-6deg);
    -moz-transform: rotate(-6deg);
    -o-transform: rotate(-6deg);
}

#notes li:nth-child(even)::before {
    -webkit-transform: rotate(6deg);
    -moz-transform: rotate(6deg);
    -o-transform: rotate(6deg);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each note has a &lt;a href="http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-understanding-css3-gradients/" title="background gradient" target="_blank"&gt;background gradient&lt;/a&gt; to give it the sticky note color. The note is rotated ever-so-slightly with a &lt;a href="http://24ways.org/2009/going-nuts-with-css-transitions" title="transform" target="_blank"&gt;transform&lt;/a&gt; and decorated with a little &lt;a href="http://www.css3.info/preview/box-shadow/" title="box-shadow" target="_blank"&gt;box shadow&lt;/a&gt; for a 3D effect.&lt;/p&gt;
&lt;p&gt;The tape is inserted using &lt;a href="https://developer.mozilla.org/en/CSS/:before" title="::before" target="_blank"&gt;::before&lt;/a&gt; and is absolutely positioned with a box shadow, slight rotation, and a semi-transparent background color (using &lt;a href="http://css-tricks.com/rgba-browser-support/" title="rgba notation" target="_blank"&gt;rgba notation&lt;/a&gt; to set alpha transparency).&lt;/p&gt;
&lt;p&gt;I hope you found this little technique useful. I’m going to be posting more about the big board soon. Stay tuned.&lt;/p&gt;</description><link>http://accidentalhacker.com/post/15521210350</link><guid>http://accidentalhacker.com/post/15521210350</guid><pubDate>Tue, 23 Nov 2010 05:42:00 -0500</pubDate><dc:creator>rsobers</dc:creator></item></channel></rss>

