<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jessenoller.com &#187; Technology</title>
	<atom:link href="http://jessenoller.com/category/technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://jessenoller.com</link>
	<description>python, programming and other things</description>
	<lastBuildDate>Wed, 11 Jan 2012 19:01:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Python Debugging; Embarrassment, Contracts and Nothing is private</title>
		<link>http://jessenoller.com/2011/05/31/python-debugging-embarrassment-contracts-and-nothing-is-private/</link>
		<comments>http://jessenoller.com/2011/05/31/python-debugging-embarrassment-contracts-and-nothing-is-private/#comments</comments>
		<pubDate>Tue, 31 May 2011 12:41:20 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[motivation]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jessenoller.com/?p=932</guid>
		<description><![CDATA[
(photo courtesy of Sean MacEntee via flickr)
Some interesting bits and pieces (leftovers) from the weekend - I have a tendency to queue up a pile of "read later" stuff or emailing myself a pile of things to talk about/link to/etc. Sometimes, I actually get to go through it all. Today - I get to ...]]></description>
			<content:encoded><![CDATA[<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://jessenoller.com/wp-content/uploads/2011/05/random_links.jpg" border="0" alt="Random links" width="240" height="80" /></p>
<p style="text-align: center;">(photo courtesy of <a href="http://www.flickr.com/photos/smemon/5144379598/">Sean MacEntee via flickr</a>)</p>
<p>Some interesting bits and pieces (leftovers) from the weekend — I have a tendency to queue up a pile of “read later” stuff or emailing myself a pile of things to talk about/link to/etc. Sometimes, I actually get to go through it all. Today — I get to share it to!</p>
<p>First up — <a href="https://twitter.com/#!/voidspace">Michael Foord</a> (fuzzyman) did two excellent posts — <a href="http://www.voidspace.org.uk/python/weblog/arch_d7_2011_05_28.shtml#e1214">the first is on privacy in Python</a> — not big-P privacy, but rather the programming/object privacy. It’s a good read because it reenforces the point that even if you think you’re being clever and hiding something in a closure to make it private, you can still get access to it. Remember too — dunders (__foo) are just name-mangling. In Python, nothing is private (insert bad tasting joke about Python being facebook here).</p>
<p><a href="http://www.voidspace.org.uk/python/weblog/arch_d7_2011_05_28.shtml#e1215">Michael’s second post</a> is on the NamedTuple kerfluffle that was stirred up <a href="http://blog.ccpgames.com/kristjan/2011/05/28/namedtuple-and-exec/">Kristjan Valur’s post on the use of exec() and namedtuple</a> (short version: namedtuple creates a string defining the class and then calls exec to create the object. I think Michael is spot on — I think exec() gets a bad rap frankly, sure — it’s something of a hand-grenade, if you use it wrong, you’re going to get hurt, but in this case I have to agree with Raymond in his comment on <a href="http://bugs.python.org/issue3974">bug 3974</a> — the current implementation is clear and maintainable. I don’t like the sternness of the reply — but he is right. Kristjan’s use-case is an interesting one, but I don’t think it’s one that warrants the removal of the existing implementation. I’m wondering if a “fallback if exec doesn’t exist” is worth inclusion.</p>
<p>Then again, I’ve spoken to people who refuse to use namedtuples because they now know how the sausage is made. I still think the sausage is <em>delicious</em>.</p>
<p>Next is a pretty <a href="http://news.ycombinator.com/item?id=2599652">interesting discussion</a> on a presentation that came out of <a href="http://blog.protoshare.com/2011/04/getting-over-embarrassment-and-getting-done/">Pixar on getting over embarrassment in order to get things done</a> — I don’t have much to add above the comments on hacker news, except to say I think the same mental blocks they talk about for animators apply to programmers, writers, etc. We hide from code reviews, we hide our writing until we think it’s “Pitch Perfect” — when in reality, we shouldn’t. We should be sharing, discussing and collaborating earlier, more frequently and more often.</p>
<p>Share and Ship early and often — see also “<a href="http://www.codinghorror.com/blog/2008/06/dont-go-dark.html">Don’t Go Dark</a>”.</p>
<p>Finally, I was happy to see the “<a href="http://jeetworks.org/node/99">Quick and Easy Debugging in Python</a>” post from Jeet Sukumaran — it’s always nice to evolve past sprinkling print fairy dust all over your code for debugging — even if we all still do it despite knowing or using PDB. Just to add to his post, if you want to increase your PDB-Fu, I recommend this “<a href="http://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/">Debugging in Python</a>” post by Steve Ferg, and the <a href="http://docs.python.org/library/pdb.html">official documentation</a> for PDB. We should really add a <a href="http://docs.python.org/howto/index.html">HOWTO</a> for this.</p>
<p>p.s. For additional good-reading, check out “<a href="http://www.43folders.com/node/47671/322109">Priorities Don’t Exist in a Vacuum</a>” and “<a href="http://www.43folders.com/2010/02/05/first-care">First Care</a>”- while not germane to what’s I’ve already written about, they’re a good essays on priorities. Thanks to the latest “<a href="http://5by5.tv/b2w/17">Back to Work</a>” podcast.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2011/05/31/python-debugging-embarrassment-contracts-and-nothing-is-private/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting to do what you love, with people that are awesome.</title>
		<link>http://jessenoller.com/2011/05/01/getting-to-do-what-you-love-with-people-that-are-awesome/</link>
		<comments>http://jessenoller.com/2011/05/01/getting-to-do-what-you-love-with-people-that-are-awesome/#comments</comments>
		<pubDate>Sun, 01 May 2011 12:12:42 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jessenoller.com/?p=883</guid>
		<description><![CDATA[On Friday of last week, a new post I wrote for my employer (Nasuni) went up - "Encryption Keys, User Data and Subpoenas". In that post, I got to outline, in clear "non slippery" language how my employer manages encryption keys, what data they have access to, etc. One of my favorite quotes:

If a ...]]></description>
			<content:encoded><![CDATA[<p>On Friday of last week, a new post I wrote for my employer (<a href="http://www.nasuni.com/">Nasuni</a>) went up — “<a href="http://www.nasuni.com/news/nasuni-blog/encryption-keys-user-data-and-subpoenas/">Encryption Keys, User Data and Subpoenas</a>”. In that post, I got to outline, in clear “non slippery” language how my employer manages encryption keys, what data they have access to, etc. One of my favorite quotes:</p>
<blockquote>
<p>If a customer has provided their own encryption key(s) — Nasuni, or the cloud provider, do not have those keys, and can not provide them as part of a subpoena or other legal process. We can not decrypt or access your data. We can not supply a key which we do not have. This is not policy or trust level protection: It’s impossible.</p>
<p>We offer auto-generated and escrowed keys as a convenience to the user — the benefits of having this feature outweigh the cost. A user or company who knows nothing about encryption keys and key escrow can still have strong data security and instantaneous disaster recovery, they can install a Filer in minutes and immediately be up and running.</p>
</blockquote>
<p><span id="more-883"></span></p>
<p>Not only was I able to work with the team to get this post up — for those of you wondering how many layers of approval, legal cleansing or other “typical filtering” it went through — the answer is “none” (or close to it). We value honesty and being forthright above just about everything else, and so posts like this — or ones in the past on “<a href="http://www.nasuni.com/news/nasuni-blog/dirty-secrets-5-weaknesses-of-cloud-storage-gateways/">5 Weaknesses of Cloud Storage Gateways</a>”, “<a href="http://www.nasuni.com/news/nasuni-blog/cloud-storage-isnt-cheap-how-the-price-of-cloud-storage-compares-to-traditional-storage/">Cloud Storage Isn’t Cheap: How the Price of Cloud Storage Compares to Traditional Storage</a>”, “<a href="http://www.nasuni.com/news/nasuni-blog/whats-the-cost-of-a-gb-in-the-cloud/">What’s the Cost of a GB in the Cloud?</a>” which are brutally honest and frankly, would probably never see the light of day in larger companies are actually encouraged, not discouraged. Does that mean that every little thing that could be controversial goes up? Obviously not, but we, as a team, have no problems  being honest with ourselves, our users and doing what we feel is the Right Thing.</p>
<p>It’s one of those posts that makes me exceedingly proud to be part of a team that continually surprises me. Hence the actual subject of this post. I’m one of those lucky people who get to do something I really do love — actually, multiple things — with a team that surprises me on a daily basis. Of course we’re a VC backed startup which means we’re smaller and more intimate then most companies many people work for, and in turn means our interpersonal relationships are that much more amplified and intensified. You don’t get into bed with a startup unless you know and trust the people (or at least a few of them people) involved — trust is an fundamentally critical component — it’s akin to getting married.</p>
<p>I know — you’ve probably heard stuff like this before echoing from the west coast / silicon valley area — about how startups are magical lands of unicorns and fairies and how you’re going to get a bajillion dollars data mining the social relationships of some poor floor waxing guy in south dakota — but these “families” — these startups where you can have these solid relationships with those you work with, and do multiple things exist well outside the silicon valley echo chamber (for example, we’re Massachusetts based). You just have to look.</p>
<p>Sure, there’s a lot of hype in tech about startups and getting rich quick — but having worked through the dot-com bubble, I’ve found that I value the team (the family) and the project much more than chasing down the latest IPO. The fact is, despite being at a startup that could <em>fail at any moment</em> (and many do) I feel more secure in my role, and with my paycheck than I would filed away in a cube at MegaCorp. I feel more secure in that I am not just another cog in a machine, and that it is within my power to change the face and direction of the company <em>every single day</em>.</p>
<p>Considering I’ve worked mainly for startups since I was 18 (some of which got acquired into <strong>much</strong> bigger companies) I have a bit of confirmation bias, admittedly. Sure, I could also find potentially even more freedom and go freelance, and build relationships that way, and sure — there’s tons of people very happy working for massive companies, but right now, despite having one kid, and another on the way — I’m just not that type of person. I thrive on being able to go into work and find a new challenge every day, I thrive on trying on different roles, branching out into new things. Startups — especially ones where you trust those you work with, and those people support you and work with you are an excellent place to do these things.</p>
<p>For example — for some time now I’ve been leading the User Interface project for the product — we have an embedded web-based UI that allows for the management and administration of the device we sell (a data protection/storage device). Over two years ago, I was primarily focused on concurrency and parallel programming (fast is better) on a different team (this is when I was most active on multiprocessing) — now I’m writing a web application and a lot of middleware/management stuff on a device that has a much smaller amount of RAM and cores in most deployments. Before that, I was working on what is now called the HCP (Hitachi Content Platform) which is a ultra-large, highly scalable and distributed storage system (object store) which could be construed as a parent of the current cloud storage systems (it was originally built by Archivas).</p>
<p>Before that? I was doing work for Allaire/Macromedia on the ColdFusion and Flex teams.</p>
<p>You see, these startups, each in turn, has allowed me an amount of freedom to go places and learn things I don’t think I would have otherwise had the opportunity to do. Sure, it’s not all roses — there are hard times, layoffs, and sometimes outright failures. You know this (or you better know this) going into it.</p>
<p>I mention all this because as I was sitting here sipping my morning cup of coffee (only allowed one a day) — I was reading yet another visual design site and updating my list of books on my <a href="http://amzn.com/w/1Y2VPFANQ40D9">Amazon wish list</a> and in looking at it, it struck me how much I, as a person and I, as an employee have changed due to the opportunities and challenges given to me. I get, on one hand, to learn UI/UX (and drool at the skills of someone like <a href="http://www.scribd.com/doc/32311867/Design-for-Developers">Idan Gazit</a>). I get to think about distributed storage systems, <a href="http://www.nasuni.com/news/nasuni-blog/designing-a-file-system-for-the-cloud/">CAP theorem</a>, blocks versus files/objects, and the “cloud” every day — but then I get to sit down and work on images, CSS, user interface, experience and think about what analogies and abstractions work best for our users.</p>
<p>In less than two years, I went from “oh hai concurrency” to debating shades of blue and typography with <a href="http://gregnewman.org/">Greg Newman</a>. How awesome is that? That’s not to say that the UI I’m leading/building/hacking on is a solo effort — it’s not, we’re a team, nor is to to say it’s perfect (I’m still learning). It’s just to show that a lot can change, and when you have a team you trust, management you trust and you work for a small, agile company you <strong>really can</strong> do just about anything. Our UI has clunky elements, and things we should clean up — but that is part of what’s so great — I have the <strong>opportunity</strong> to do that. I can walk into my boss’ office tomorrow and simply ask him “do you mind if I change X to Y, and here’s why”, and if it’s a sound technical argument, about two minutes later I’ll be doing it.</p>
<p>And that change will show up on every one of our customer and trial users boxes in pretty rapid succession. Did I mention I’ve also gotten to learn I enjoy writing a lot more than I thought I did before, and also — marketing is actually pretty damned interesting, and not such a filthy word as most hackers and programmers think (The joke is that I’m some sort of weird programming/marketing hybrid — not sure if it’s an insult or not)? Yeah, I’ve gotten to do writing, UI/UX, learn web programming, and help out in marketing (and even sales and market strategy to a much lesser extent). It’s a rocket sled flying through a forest of cool things to do and be a part of.</p>
<p>Interestingly, as an aside — this change of roles/changing of focus has also changed my focus and contributions in the Python Community — being part of the <a href="http://www.python.org/psf/records/board/history/#id2">PSF Board</a>, <a href="http://pythonsprints.com/">spinning up sprints/outreach</a>, working on explaining <a href="http://jessenoller.com/2011/04/17/explaining-the-python-software-foundation-psf-part-1/">what the PSF is</a>, <a href="http://pythonmentors.com/">mentorship</a> — taking on PyCon management — all of these things reflect a change in what my life is focused on, and it’s pretty awesome.</p>
<blockquote>
<p>Choose a job you love, and you will never have to work a day in your life. - Confucius</p>
</blockquote>
<p>Find the right team — the team you trust, that knows what they’re doing and where they’re going (and that trusts you). Accept that you will probably fail — meaning, you will run out of money, or not get traction (and run out of money) but build that family, that team and have blast trying your best and just accepting all the new challenges and opportunities that come up. Find people who won’t <strong>not</strong> challenge you — who won’t ask you to adapt to new times and technology. Accept that you’re no safer at MegaCorp because they literally only view you as a <em>human resource</em> and not as an individual.</p>
<p>Most of all — Find something you love doing, and do it with awesome people.</p>
<p>FWIW, here are some good design reads since I’m on the topic (feel free to mention ones you love):</p>
<ul>
<li><a href="http://www.kadavy.net/blog/posts/design-for-hackers-why-you-dont-use-garamond-on-the-web/">Design For Hackers: Why you don’t user Garamond on the web</a></li>
<li><a href="http://www.kadavy.net/blog/posts/d4h-color-theory/">Design for Hackers: Why Monet Never Used Black, &amp; Why You Shouldn’t Either</a></li>
<li><a href="http://www.visualmess.com/">Clean up your mess: A guide to visual design for Everyone</a></li>
<li><a href="http://designingfortheweb.co.uk/book/index.php">Designing for the web</a></li>
<li><a href="http://www.informationarchitects.jp/en/the-web-is-all-about-typography-period/">The web is all about typography</a></li>
</ul>
<p class="wp-flattr-button"></p> <p><a href="http://jessenoller.com/?flattrss_redirect&amp;id=883&amp;md5=84dc5d7095f80d3a35cfe7f468c4faee" title="Flattr" target="_blank"><img src="http://jessenoller.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2011/05/01/getting-to-do-what-you-love-with-people-that-are-awesome/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How can you compete with Google?</title>
		<link>http://jessenoller.com/2010/10/14/how-can-you-compete-with-google/</link>
		<comments>http://jessenoller.com/2010/10/14/how-can-you-compete-with-google/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 14:15:20 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jessenoller.com/?p=801</guid>
		<description><![CDATA[The official announcement (well, the addition of a website for it) of Google's goo.gl URL shortening service’s new website and features on the 11th got me thinking really hard about competition, and Google. Specifically - how do you compete against the biggest technological behemoth ever seen by man? Something I’m sure is on a ...]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://mashable.com/2010/09/30/goo-gl-url-shortener/">official announcement</a> (well, the addition of a website for it) of Google’s goo.gl URL shortening service’s new website and features on the 11th got me thinking really hard about competition, and Google. Specifically — how do you compete against the biggest technological behemoth ever seen by man? Something I’m sure is on a lot of peoples’ minds at an increasing rate.</p>
<p>To be honest, many of these thoughts can probably be applied to many incumbents in the tech industry (including “enterprise” software/hardware giants), Google is an easy target for these thoughts though, because they are simply so bad at some of this. This is part rant, part thought experiment – it’s entirely possible I am entirely wrong.</p>
<p>What drove me to thinking about this (for well over a week) is a base terror I felt about the vague possibility of being in a market Google might whimsically enter at one point. Like, say I was <a href="http://bit.ly/">bit.ly</a> — and happily the most popular URL shortening and analytics firm with thousands of customers, millions of shortened links, etc, etc. How would I feel if Google coughed and suddenly entered an already tight (some would say artificial) market with all salvos aimed right at my business (bit.ly <a href="http://techcrunch.com/2009/12/14/bit-ly-pro-google-suck-it/">seems game</a>)? Can an ecosystem of startups survive if Google pops into the room – can they still get VCs or Angel investors to listen and invest in them? (See also: <a href="http://whatifgoogledoesit.com/">whatifgoogledoesit.com</a>).</p>
<p>It’s not that Google suddenly came out with a “better” thing then bit.ly — Google simply came out with something which “does the job” to the technical specifications they think are superior, sitting on Google’s nearly unbeatable infrastructure and then threw the weight of their brand behind it.</p>
<p>Does it have all the pretty analytics Bit.ly has? No. Does it have custom URLs? No. Does it need all of that? No, because it’s made by Google. The UI is perfectly functional, but nothing to write home to mom about. Millions of people will flock to the new service and happily use it because it is Google. Bit.ly could very well now be on life support, and will quickly run out of oxygen when/if Google ever decided to give preference to goo.gl within their sites and applications (see the <a href="http://techcrunch.com/2010/09/30/googlegoo-gl-is-a-go-the-stablest-most-secure-and-fastest-url-shortener-on-the-web/">security argument in the announcements </a>– how long until the other shorteners are deemed “too insecure”?).</p>
<p>The very thought of this possibility happening on something I work on terrifies me. I’m pretty confident on the technical prowess of the teams I work with and of the products we make, but I’ll be damned if Google couldn’t wipe us out with a “product” with 25% of the features we have, simply because of who they are. Maybe we could scratch by – maybe we already have an established user base. Maybe Google would kill their implementation in a few months – who knows.</p>
<p>But Google has a flaw, several, in fact.</p>
<p>Competing with Google on a technological level is incredibly hard — it’s not impossible, just hard. They have more PHDs and engineers per square foot than just about anyone. I think that breathing the Googleplex air alone probably increases your IQ. I don’t know – I have some of the air on order. It’s easy for Google to build something fifty percent of the way and release it, therefore sucking the air out of the room. They don’t even need to “finish” it — the very fact they’ve made it and put it everywhere is enough to make a market dry up and users to flock to it. It will have enough functionality — and just enough — to get the job done (“perfectly functional, albeit Spartan”).</p>
<p>Google is good at raw functionality and utility. They solve a problem in normally the most efficient way possible, and Google is going to probably go down as the most successful technology company in history.</p>
<p>Where Google fails — time and again — is being human.</p>
<p>No one invites Vulcans from Star Trek to come and decorate cakes or entertain them at a party. No one accuses Vulcans of having “really good empathy and customer service skills”. No, people call Vulcans when they need to figure out a hard problem, or need some objective analysis. They don’t expect balloon animals and a Dora cake from them.</p>
<p>Google is a utility/commodity technology company (an exceedingly shrewd and powerful one) — but Android wins market share because it’s on more phones, not because the experience is better but simply because it’s everywhere – it’s on more and more phones every day. Plenty of the manufacturers who have adopted it spent millions designing UIs that sit on top of the default Android UI and make it “more friendly”. Every market they touch they fundamentally change the economics and expectations of.</p>
<p>Google has become top dog for a reason — their technology. It is really top notch and their search engine and adwords system changed the market (for the better), but it all shares the cold robotic embrace of the other Google products. Their technical skills are beyond reproach, but they still lose in many cases against smaller, “richer” applications and sites because they fail at being human.</p>
<p>Experience Matters.</p>
<p>To Google; you are a statistical note — something to be tracked, categorized and profiled. Why? Not though malice or ill intent — not even slightly — rather, it is how they aim their real business at you: Advertising. Google is not malicious, nor is it evil. Google is the logical robot who will tell you you’ve got cancer while asking for the time and not even blink. They continue interesting projects which could change humanity – but with the bedside manner of a toaster (note though — the cold, calculating nature of the projects doesn’t diminish the value).</p>
<p>When a competing company’s users are statistics: show those statistics love and a human face and they will follow you to the ends of the earth. Incite passion – give them a relationship. A wise man once told me “the only way you can succeed against an entrenched player is by loving your users to death”.</p>
<p>Love your customers — say you make a code hosting service — it’s hard to beat free (as is Google Code) and it’s hard to beat the fact that, yeah, they have all the basic features a code host should have — but you compete where Google can’t. You beat them in the User Interface department — you beat them with warm, inviting documentation and a well designed, inviting website. You beat them by hiring a support staff that actually answers emails and picks up the phone. (See also: “<a href="http://www.readwriteweb.com/biz/2010/10/google-gets-a-c--from-better-business-bureau.php">Google Gets a C– from the Better Business Bureau</a>”)</p>
<p>You compete against them by not being a cold, Spartan feature robot. You make your thing usable, you make it pleasant. You make it so that users want to come back to you again and again because each time they do they don’t feel like they just got a hug from a Craftsman workbench. You make them feel like Mom just gave them a warm hug on a Christmas day every time they use your product. Not like making out with a socket set.</p>
<p>But, you say, Google can make a UI, right? Not quite — Google Wave may have been the best thing in the history of earth: but no one except a few people could figure out how to really use it. Technologically, it was awesome, usability? Not so much. It was a bag of technically accurate features – but not a human interface. It was a “social network” put together by Vulcans.</p>
<p>The biggest thing, in my opinion, that Google has brought to the human side of the technological table is that it has helped in recent years by bringing back a wave of minimalism, simplicity of interface and speed to web application design as a whole. In the right hands, minimalism and simplicity are powerful tools. When they’re not in the right hands — well, hugs from a Craftsman bench.</p>
<p>So — in order to compete with Google, you attack them on design – on engagement. You make your social features and good customer service into the barbs of loyalty. You pick up that phone and let them know there’s someone else at the end of the line willing to hear them out at 3am when everything goes to hell and they’re all alone. Even if that customer is crazy, you show them the respect they deserve as people.</p>
<p>Get vocal, passionate users and build a loyal community — that alone will help you succeed against Google. Make sure your customers know you love them, know that you support them and want them to succeed. Don’t just enable them to do something, enable them to connect.</p>
<p>Build a brand against Google. Don’t be content with doing something — make sure you’re not just “the guys that did that thing” — or “those guys who came out with that thing”. Make your name synonymous with that thing. Make it so that the first thing people think of when considering that thing is you.</p>
<p>Make it so that Google could come out with — say a video sharing site — tomorrow, and while it could be the best, most distributed video thing ever (the better technological choice) make it so that your users are so fiercely loyal that Google has to buy you and extinguish the flames of the passion you’ve incited just to get the announcement for their new thing two minutes of air time.</p>
<p>You can only do these things — building a brand — and building a “cult” by doing the things Google — given its robotic failings — cannot do. Love your users, infect them with your passion — not just your technical prowess or ability to scale or release new web codecs, or give them the right search results, or giving away source – infect them with your passion for what you do. Support them, respond to them — even if you’re giving it away for free — after all, nothing is free.</p>
<p>Passion, compassion — connecting with other humans, people are always looking for a place that accepts them and makes them feel welcome. They want to get real support instead of emails that get sent to unknown voids and are never answered. Making things warm, inviting both in language and in the feel.</p>
<p>Just remember — Google is a fantastic, nearly unbeatable technical powerhouse. You’ve got to be fast, high quality and better where it counts the most.</p>
<p>“What about Don’t Be Evil?”, you say. Again, this is not an accusation of Google being evil – they’re not. They’re being coldly logical in the way humans dealing with other humans aren’t. When Eric Schmidt, the CEO, stands up on stage and talks about privacy being dead in the age we live in (the age of Facebook, and Twitter), or the refuge for criminals – he’s not “being evil”. He’s representing the coldly logical, algorithm based view of a search engine, and advertisement company. (Check out <a href="http://duckduckgo.com/">duckduckgo.com</a>)</p>
<p>In the age of blogs, Facebook, Twitter, MySpace and online medical records and a million other things, the logical extension is that, yes – privacy will be dead in a matter of years. Look at the train wreck the buzz rollout was – they shipped with the logical, auto-following and auto-public settings and features.</p>
<p>However, nuking years of email or delisting someone’s website with no human recourse is evil, and therefore, can be used as a competitive advantage against them. Be more private, be available to your customers. I know it’s expensive – but it’s how you can win. First mover advantage counts for a lot, but it doesn’t count for anything if you fail your community and users.</p>
<p>I use lots — and I do mean lots — of Google projects. I live in the lap of Google luxury as they give me free things that have “enough” features to sate my needs and requirements. They’re pretty enough — sort of like my code editor. I’m not passionate about them, they’re functional utilities (albeit incredibly useful ones) — and at this point I’d probably been inoperable without a few of them. Google is a verb — JGI (Just Google it) leaves my mouth an innumerable number of times through the day. I have lots of friends who work at Google. Google has released an amazing amount of open source software, and continue to work on changing the face of the Internet, and society as a whole.</p>
<p>But would I say their UIs are beautiful? No. Would I ever be convinced that sending an email about my account being broken or disabled to Google’s support line would be met with anything but metallic robot silence? Do I think pleas to relist my website in their index or reinstate an adwords account would be any more effective then yelling at my garbage disposal? No.</p>
<p>No, none of these are true. Github (despite it being git) and bitbucket are the better UIs for code hosting — WordPress and others are better hosted blogging systems then Blogger, and so on, and so on. These services probably don’t scale as well, or they can’t calculate the velocity of an unladen swallow if you hit control-m-x-y-*, but they compete with Google where it counts.</p>
<p>Compete with Google where it hurts the most: <a href="http://techcrunch.com/2010/08/31/gmail-permanent-failure/">Being Human</a>.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2010/10/14/how-can-you-compete-with-google/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Miscellanea — Python Sprints, Nasuni, etc.</title>
		<link>http://jessenoller.com/2010/07/30/miscellanea-python-sprints-nasuni-etc/</link>
		<comments>http://jessenoller.com/2010/07/30/miscellanea-python-sprints-nasuni-etc/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 17:34:19 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jessenoller.com/?p=783</guid>
		<description><![CDATA[I've obviously been quiet here on my personal blog - as everyone who reads regularly knows I'm neck-deep in a pretty exciting startup call Nasuni as well as doing other projects, like the PSF Sponsored sprints thing. That combined with twitter means my time for other additional long-form content is minimal. So here's a ...]]></description>
			<content:encoded><![CDATA[<p>I’ve obviously been quiet here on my personal blog — as everyone who reads regularly knows I’m neck-deep in a pretty exciting startup call Nasuni as well as doing other projects, like the PSF Sponsored sprints thing. That combined with twitter means my time for other additional long-form content is minimal. So here’s a small roundup of interesting things:</p>
<h3>Nasuni</h3>
<p>Yup, still running Python and Django! We’re actually pretty proud to be a sponsor for <a href="http://djangocon.us/">DjangoCon 2010</a> coming up in September — I’ll be attending, so I hope to see all the familiar Django faces I know, and meet some new ones.</p>
<p>I’ve been blogging semi-regularly for the Nasuni blog itself — my posts are focused on product-things more than anything else. Here’s a small list of posts which I’ve done:</p>
<ul>
<li><a href="http://www.nasuni.com/news/nasuni-blog/the-road-to-release-feature-previews/">The Road to Release — Feature Previews</a> — this is actually my latest one, and the first in a series where I’ll be showing off some of the new features we’re adding in the latest release.</li>
<li><a href="http://www.nasuni.com/news/nasuni-blog/looking-at-openstack-a-rackspace-and-nasa-initiative/">Looking at OpenStack, a Rackspace and NASA initiative</a> — For those of you who don’t know, Rackspace and NASA announced <a href="http://openstack.org/">OpenStack</a> — the awesome part? It’s <strong>all python</strong> — I had the swift component (which powers Rackspace’s cloudfiles system) of OpenStack running pretty quickly. I’d recommend snagging the <a href="https://launchpad.net/openstack/">code from launchpad</a> and taking a look. Swift (the storage component) uses eventlet — and Nova (the compute part) uses Tornado and Twisted.</li>
<li><a href="http://www.nasuni.com/news/nasuni-blog/storage-switzerland-test-drives-the-filer/">Storage Switzerland Test Drives the Filer</a> — This is a response to an article written about the product — I actually used it to preview some of the work going into the next release of the Filer.</li>
<li><a href="http://www.nasuni.com/news/nasuni-blog/thanks-to-django/">Thanks to Django</a> — This piece goes into some detail about our use of Django, it’s one of our ways of saying thanks. I still need to rework it so we can send it over for the <a href="http://code.djangoproject.com/wiki/DjangoSuccessStories">Django Success Stories</a> page.</li>
<li><a href="http://www.nasuni.com/news/nasuni-blog/thanks-to-the-supporting-cast/">Thanks to the Supporting Cast</a> — This is an earlier thank you post — but to the other people who have helped out a ton, including Greg Newman, Lincoln Loop, and Revsys.</li>
<li><a href="http://www.nasuni.com/news/nasuni-blog/the-donut-solution-nasunis-new-ui/">The Donut Solution</a> — This was a fun one, mainly to show that yes — we’re listening hard to customer feedback, and we’re improving/iterating quickly. Also, I get to show off UI improvements.</li>
<li><a href="http://www.nasuni.com/news/nasuni-blog/the-nasuni-blog-team/">Finally — The Nasuni Blog team</a> — this is the rosetta stone for the authors of the blog, describing who we are. I didn’t write this piece, but it’s good reading to figure out who is who.</li>
</ul>
<p>If you’re interested in Nasuni — or cloud storage in general — I’d encourage you to <a href="http://feeds.nasuni.com/nasuni">sign up for the RSS feed</a>. We’re trying to keep the information useful outside of “just us” (despite my urge and predilection to churning out completely product-related posts) — and if you ever have feedback, drop us a line.</p>
<h3 style="font-size: 1.17em;">PSF Sponsored Sprints</h3>
<p>The project continues on — we’ve funded two sprints so far, and have several more coming down the pike. We’re always in need of volunteers to help us do things like the manuals and site maintenance/content authoring. Here’s some highlights:</p>
<ul>
<li><a href="http://pythonsprints.com/2010/07/8/call-applications-now-open/">The call for applications is open</a> — The call for applications is open — and now I suspect we <strong>won’t be closing it</strong>. Originally, I thought we’d have to do things in waves of apply-approve. As time has progressed, I no longer think this is the case.</li>
<li><a href="http://pythonsprints.com/2010/07/10/montreal-python-packaging-sprint-wrapup/">Montreal Python Packaging sprint wrap up</a> — the wrap up report for our first sprint!</li>
<li><a href="http://pythonsprints.com/2010/07/27/europython-2010-core-sprint-report/">Europython core sprint report </a>- another wrap up report for the core sprint we provided funds to.</li>
<li><a href="http://pythonsprints.com/2010/07/27/just-added-locations-page/">Just added the locations page</a> — we now have people/companies offering up space for sprinters! Check it out!</li>
<li>Finally - <a href="http://pythonsprints.com/2010/07/29/sprints-pyohio/">Sprints at PyOhio</a> — PyOhio is going on this weekend, if you’re in the area you should really go check it out! Catherine has gone above and beyond with the entire “become a contributor” effort going on.</li>
</ul>
<p>Please! If you’re thinking about holding a sprint - <strong>send us an application</strong>! Heck, even if we’re not sponsoring it, we’ll help promote you via the blog, and the sprint calendar we have up. A little fact? The sprints we’ve funded so far, and that are on deck for funding are all <strong>outside</strong> of the US, which is both awesome, and surprising!</p>
<h3>PSF Board</h3>
<p>Some of you probably know that I’m currently on the board of directors for the PSF — things progress well here, but I mainly wanted to call out the <a href="http://pyfound.blogspot.com/">excellent blog</a> Doug Hellmann has been authoring for PSF news. You should <strong>really</strong> be watching that because yes — we do do things, and hopefully over the next year, we’ll be doing more awesome things.</p>
<p>I’ve actually got a bigger post in the works for what <strong>I think</strong> the ultimate mission of the PSF is/should be as well as “how do you get money from us” as well. Must find the time!</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2010/07/30/miscellanea-python-sprints-nasuni-etc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Say Hello — Nasuni Launches Today!</title>
		<link>http://jessenoller.com/2010/02/09/say-hello-nasuni-launches-today/</link>
		<comments>http://jessenoller.com/2010/02/09/say-hello-nasuni-launches-today/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 13:35:03 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Storage]]></category>

		<guid isPermaLink="false">http://jessenoller.com/?p=752</guid>
		<description><![CDATA[ The company I've worked for since July of last year - Nasuni Corporation (a startup in Massachusetts) has gone live! This is the culmination of a lot of hard, but exceedingly fun and exciting work over the past months.

The Nasuni team is an excellent one - and one I am very, very proud ...]]></description>
			<content:encoded><![CDATA[<p><img src="http://jessenoller.com/wp-content/uploads/2010/02/nasuni_final.png" alt="nasuni_final.png" border="0" width="226" height="62" align="right"/> The company I’ve worked for since July of last year — <a href="http://www.nasuni.com" target="_blank">Nasuni Corporation</a> (a startup in Massachusetts) has gone live! This is the culmination of a lot of hard, but exceedingly fun and exciting work over the past months.</p>
<p>The Nasuni team is an excellent one — and one I am very, very proud to be a part of. Our product is called the Nasuni Filer — a simple-to-use, versioned, encrypted and cloud-storage backed virtual NAS (network attached storage) server (click <a href="http://www.nasuni.com/product/product-overview/" target="_blank">here</a> for more information).</p>
<p>Without going into all of the features, our goal in making this was to make cloud storage <b>simple</b>, <b>accessible</b> and <b>secure</b> — and I know we’ve accomplished all three. All you do is download it, boot it and start using it — once you do so you have access to truly unlimited storage. It’s an unlimited filesystem for the cloud. Here’s the elevator pitch:</p>
<blockquote><p>
Nasuni has developed a virtual file server, called the Nasuni Filer, that delivers unlimited file storage and complete file protection for businesses. Working in partnership with leading cloud storage vendors, the Nasuni Filer leverages the vast capacity of the cloud to store and protect company files offsite, while retaining the local functionality and performance of a traditional NAS.</p>
<p>This technology allows businesses to use the cloud provider of their choice as a replacement for traditional primary storage. Snapshots, file versioning, and offsite storage are integrated into the file server itself — ensuring business file are safe and secure at all times. No need to manage complex backup and DR schemes — if the file server is running, files are protected.
</p></blockquote>
<p>We’ve launched the <a href="http://www.nasuni.com/free-trial/free-trial-registration/" target="_blank">Beta of the product</a> today — anyone can sign up, download and use it. Anyone can give us feedback and suggestions — I encourage all of you who might need something like this to download and give it a try. If you want — go check out the videos we’ve put together <a href="http://www.nasuni.com/support/how-videos/" target="_blank">showcasing the Filer</a> (and better yet — check out the awesome animated cartoon we have on the <a href="http://www.nasuni.com/" target="_blank">front page</a>).</p>
<p>Most of you know that my blog is mainly Python oriented. Suffice it to say, Nasuni — and the Nasuni Filer make use of Python for a wide range of tasks. We use Python, Django and as much of the Python ecosystem as we can to drive everything from the website, to the GUI on the appliance itself — Python is part of the DNA of the company, and it has served us well. Without Open Source and Python — I don’t think it would have been possible to build what we have built in as little time as we have.</p>
<p>We have a strong dedication to not just Python, but open source in general (and a fair number of us will be at PyCon this month).  As time progresses, now that we’re exiting stealth mode we plan on possibly open sourcing stuff we feel would benefit the community. Some of us already push patches back where and when we can, but as I said — as time progresses this involvement will only increase.</p>
<p>So not only am I proud to announce the product, be part of this team and to see what we’ve made, I’m also happy to thank so many people in the Python and OSS community which have helped us reach this point.</p>
<p>So go — <a href="http://www.nasuni.com/" target="_blank">check it out</a>, let us know what you think.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2010/02/09/say-hello-nasuni-launches-today/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Django, mod_wsgi, Apache and OS X — do it.</title>
		<link>http://jessenoller.com/2009/07/24/django-mod_wsgi-apache-and-os-x-do-it/</link>
		<comments>http://jessenoller.com/2009/07/24/django-mod_wsgi-apache-and-os-x-do-it/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 18:40:17 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://jessenoller.com/?p=655</guid>
		<description><![CDATA[So, I'm one of those people where I don't like running things "too far" from what a production setup might look like (I code on OS/X, deploy to Linux). This is why I jump(ed) through various hoops on my OS X system to get Apache/Django/mod_wsgi/etc all up and running and happy (not for serving ...]]></description>
			<content:encoded><![CDATA[<p><img src="http://jessenoller.com/wp-content/uploads/2009/07/whut-2.jpg" alt="whut_2.jpg" border="5" width="108" height="117" align="right" />So, I’m one of those people where I don’t like running things “too far” from what a production setup might look like (I code on OS/X, deploy to Linux). This is why I jump(ed) through various hoops on my OS X system to get Apache/Django/mod_wsgi/etc all up and running and happy (not for serving the site; just developing).</p>
<p>Since I like simple/succinct guides, I thought I’d post what I did so others can follow in my stead. </p>
<p><b>Note:</b> These instructions work with the python 2.5 version which ships with Leopard, or a self-compiled version of 2.6 (which is what I prefer) — see the <a href="http://code.google.com/p/modwsgi/wiki/InstallationOnMacOSX" target="_blank">InstallationOnMacOSX</a> mod_wsgi page. Additionally, see the “Missing Code For Architecture” section for possible work-arounds if you find yourself needing 32 bit execution of Apache; I think the “Forcing 32 Bit Execution” are preferred over the “thinning” of the Apache binary.</p>
<p>First, download and install mod_wsgi on leopard, this is as easy as (on Leopard):</p>
<pre>
curl -o mod_wsgi.tgz http://modwsgi.googlecode.com/files/mod_wsgi-2.5.tar.gz
tar -xzf mod_wsgi.tgz
cd mod_wsgi-2.5
./configure
make
sudo make install
</pre>
<p>Now, edit (via sudo) /etc/apache2/httpd.conf and add the line:</p>
<pre>
LoadModule wsgi_module libexec/apache2/mod_wsgi.so
</pre>
<p>After the rest of the LoadModule lines. Cool.</p>
<p>Invariably all of my directions play with virtualenv/virtualenvwrapper and pip:</p>
<pre>
mkvirtualenv django
cdvirtualenv
easy_install pip
pip install http://media.djangoproject.com/releases/1.1/Django-1.1-rc-1.tar.gz
django-admin.py startproject mysite
django-admin.py startapp myapp
cd mysite
mkdir apache
mkdir media
</pre>
<p>Now, that just sets up the skeleton — the meat of the wsgi configuration goes in apache/ in the mysite/apache directory. The first file is named mysite.wsgi:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p655code1'); return false;">View Code</a> PYTHON</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6551"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p655code1"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">sys</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#Calculate the path based on the location of the WSGI script.</span>
apache_configuration = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>__file__<span style="color: black;">&#41;</span>
project = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>apache_configuration<span style="color: black;">&#41;</span>
workspace = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>project<span style="color: black;">&#41;</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>workspace<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'DJANGO_SETTINGS_MODULE'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'mysite.settings'</span>
<span style="color: #ff7700;font-weight:bold;">import</span> django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>
application = django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>.<span style="color: black;">WSGIHandler</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>This does the needed wsgi project magic for the Django application — don’t worry about the interpreter path; we’ll do that next.</p>
<p>Next up is a file named apache_django_wsgi.conf, this looks like this:</p>
<pre>
# mod_wsgi configuration directives - I like having stdout access, the other two
# options run mod_wsgi in daemon mode - more on this in a minute.
WSGIPythonHome /&lt;path to virtualenv&gt;
WSGIRestrictStdout Off
WSGIDaemonProcess django
WSGIProcessGroup django

#
# This should be the path of the /mysite/media directory
# for example "/Users/jesse/mysite/media/"
#
Alias /site_media/ "&lt;PATH TO&gt;/mysite/media/"
&lt;Directory "&lt;PATH TO&gt;/mysite/media"&gt;
Order allow,deny
Options Indexes
Allow from all
IndexOptions FancyIndexing
&lt;/Directory&gt;

#
# Directory path to the admin media, for example:
#

Alias /media/ "&lt;PATH TO&gt;/virtualenv/site-packages/django/contrib/admin/media/"
&lt;Directory "&lt;PATH TO&gt;/virtualenv/site-packages/django/contrib/admin/media"&gt;
Order allow,deny
Options Indexes
Allow from all
IndexOptions FancyIndexing
&lt;/Directory&gt;

#
# Path to the mysite.wsgi file, for example:
# "/Users/jesse/mysite/apache/mysite.wsgi"
#

WSGIScriptAlias / "&lt;PATH TO&gt;/mysite/apache/mysite.wsgi"

&lt;Directory "&lt;PATH TO&gt;/mysite/apache"&gt;
Allow from all
&lt;/Directory&gt;
</pre>
<p>The apache_django_wsgi.conf file is the meat-and-potatoes here. This sets up all the paths/permissions, and is in Apache httpd.conf format. You can pretty much logjam any apache configuration directive here that you like.</p>
<p>Your final step is to once again edit (via sudo) /etc/apache2/httpd.conf and add a line like this at the verrrrry bottom:</p>
<pre>
Include "/path to/mysite/apache/apache_django_wsgi.conf"
</pre>
<p>And then run “sudo apachectl restart”</p>
<p>You should now be able to hit http://127.0.0.1/ and see the friendly and inviting django welcome page. Note, that if you are using sqlite as your database, you should chmod a+rw the file, so that processes which are not you can mess with it.</p>
<p>There’s a final piece to this though. Normally, if you run mod_wsgi in embedded mode, you’re going to need to restart apache every single time you make a change to your django app.</p>
<p>Ah! But we’re running in daemon mode. This means all you need to do when you change a file is:</p>
<pre>
touch mysite/apache/mysite.wsgi
</pre>
<p>This will trigger a reload and magic happens. Me being as lazy as I am (ask my wife) ended up snagging Bruno Bord’s <a href="http://github.com/brunobord/tdaemon/tree/master" target="_blank">tdaemon</a> script, and hacking it up a bit. The tdaemon script will watch a directory and run tests. Well, I wanted it to watch a directory (and let me filter sub directories) and then run that touch command. So I reused my watcher.py (<a href="http://bitbucket.org/jnoller/snippets/src/tip/watcher.py" target="_blank">here</a>) — I used this to monitor my sphinx tree and run builds as well (and other stuff). Here’s how I’d use this:</p>
<pre>
workon django
cdvirtualenv
cd mysite
python ~/.slash/bin/watcher.py --command "touch apache/mysite.wsgi" -f media
</pre>
<p>This will auto-fire the touch command whenever it detects a file change (including svn updates). </p>
<p><b>You can also do this another way</b><br />
In my rush to reuse a tool I use a bit (watcher) I skipped past the mod_wsgi document section on code reloading that shows how to setup a monitor which will watch .py file changes and kill the wsgi daemon, <a href="http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode" target="_blank">here</a>. If you scroll down a bit, you’ll see the “Monitoring For Code Changes” section. All you need to do here is copy the code from the wiki into a module on your PYTHONPATH — in my case, I wrote it to mysite/apache/wsgi_monitor.py (just for this example! you should put it someplace else!) and then changed the mysite.wsgi file to import it, and set it up:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p655code2'); return false;">View Code</a> PYTHON</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6552"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code" id="p655code2"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">sys</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#Calculate the path based on the location of the WSGI script.</span>
apache_configuration = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>__file__<span style="color: black;">&#41;</span>
project = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>apache_configuration<span style="color: black;">&#41;</span>
workspace = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>project<span style="color: black;">&#41;</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>workspace<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>apache_configuration<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># you probably shouldn't do this.</span>
<span style="color: #ff7700;font-weight:bold;">import</span> wsgi_monitor
wsgi_monitor.<span style="color: black;">start</span><span style="color: black;">&#40;</span>interval=<span style="color: #ff4500;">1.0</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'DJANGO_SETTINGS_MODULE'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'ui.settings'</span>
<span style="color: #ff7700;font-weight:bold;">import</span> django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>
application = django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>.<span style="color: black;">WSGIHandler</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>This method — once you reload apache — will watch the project for changes and then kill the wsgi daemon (forces a reload). So there you go — two ways of doing it.</p>
<p>The nice thing about this setup is that I can make production version of the wsgi scripts and check them in, but keep local “my copies” (ala local_settings.py) additionally, I don’t have to jump through hoops to get static media and content served up via the django development server. </p>
<p>Additional reading:</p>
<ul>
<li> <a href="http://code.djangoproject.com/wiki/django_apache_and_mod_wsgi" target="_blank">http://code.djangoproject.com/wiki/django_apache_and_mod_wsgi</a>
<li> <a href="http://ericholscher.com/blog/2008/jul/8/setting-django-and-mod_wsgi/" target="_blank">http://ericholscher.com/blog/2008/jul/8/setting-django-and-mod_wsgi/</a>
<li> <a href="http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango" target="_blank">http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango</a>
</ul>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2009/07/24/django-mod_wsgi-apache-and-os-x-do-it/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Steve Yegge hits a homer: Your requirements are stupid.</title>
		<link>http://jessenoller.com/2008/08/12/steve-yegge-hits-a-homer-your-requirements-are-stupid/</link>
		<comments>http://jessenoller.com/2008/08/12/steve-yegge-hits-a-homer-your-requirements-are-stupid/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 15:44:47 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Comedy]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jessenoller.com/?p=292</guid>
		<description><![CDATA[Lately, I've been ruminating on requirements and requirements management (also known as disaster control). I was actually typing something up on this, but Steve Yegge hit the nail on the head - then he rammed it through the board and into the house next door:
Anyway, there you have it: the slightly expanded version of ...]]></description>
			<content:encoded><![CDATA[<p>Lately, I’ve been ruminating on requirements and requirements management (also known as disaster control). I was actually typing something up on this, but <a href="http://steve-yegge.blogspot.com/2008/08/business-requirements-are-bullshit.html" target="_blank">Steve Yegge hit the nail on the head</a> — then he rammed it through the board and into the house next door:</p>
<blockquote><p>Anyway, there you have it: the slightly expanded version of the email I sent that CEO guy. Gathering business requirements is hokum. Hooey. Horseshit. Call it what you want, but it’s a sign of organizational (or individual) cluelessness. If you don’t already know exactly what to build, then you’re in the wrong business. At the very least, you should hire someone who does know. Don’t gather business requirements: hire domain experts.</p></blockquote>
<p>Also, FWIW, here’s the <a href="http://news.ycombinator.com/item?id=273887" target="_blank">hackernews</a> discussion. <a href="http://kerneltrap.org/node/5725" target="_blank">Here is a link</a> from one of the comments pointing to something Linus once said about specs:<br />
<blockquote>they’re dangerously wrong. Reality is different, and anybody who thinks specs matter over reality should get out of kernel programming NOW. When reality and specs clash, the spec has zero meaning. Zilch. Nada. None.
</p></blockquote>
<p>I think one of the comments also added something spectacular — noting that “building something for yourself” is why so many open source projects flourish. If you’re building something useful for yourself — there’s a high chance that someone else is going to want to A&gt;Use it B&gt;Buy it — “building for yourself” is also in some ways, “keeping the vision clear”</p>
<p>One of the key concepts which seems to be the undercurrent to what he talk about is <b>vision</b>. You need someone who can stand up and say “this is what the product is, does and where it is going”. You need that visionary who can clearly outline what itch you are trying to scratch. In open source — that’s the project “core” — in business, it’s the CTO or founder. It’s always the person that had the itch, they’ve “walked a mile in the shoes” so to speak.</p>
<p>That vision has to be the core of both the product, and all of the requirements — this “clarity of vision” (some might say “simplicity of vision”) is what makes so many projects and products successful.</p>
<p>Sure — as you grow you’ll add features: You don’t want to stagnate — but those features have to <b>make sense</b> — they have to mesh with the core vision of the product. You don’t add a source code management service to say, twitter. </p>
<p>Why? Because even if 1 customer thinks “that it would be AWESOME” — you’re going to spend $X hours of engineering time gluing a volvo on the side of your battleship, and unless those $X hours are compensated by the amount of money the customer is willing to pay (it never is) you’ve wasted time, and muddied the functionality and philosophy of the product. It’s about as useful as a screen-door on a submarine.</p>
<p>When you’re thinking about requirements ask yourself this: If at the start, you can not describe <b>exactly</b> what your product does in under a minute — you’ve already got a problem. If adding this feature makes it even harder to describe/encapsulate the vision and capabilities of the product you’re rapidly running towards wronger-than-wrong.</p>
<p>If you yourself would not use the feature: Does it really make sense? When a customer requests a feature — does it make sense for anyone outside of them? Would you be better served by providing an API and an SDK?</p>
<p>This is the beauty of things like a clean API — you can keep the philosophy and core of the product/project clean and empower your users to build any number of things they want on <b>top</b> of your product. Keep it simple, keep it clean. Empower your users to “mashup” as they need or want to.</p>
<p>Think of it terms of cooking: If you wouldn’t eat it yourself, in all likelihood your customers won’t like it, at best it will be mediocre. The best chefs taste and consume what they cook.</p>
<p>Right now I’m wishing Brian Fitzpatrick’s keynote from pycon: “You *can* Fool All of the People All of the Time” was online in video form.</p>
<p><b>See also</b>:<a href="http://homepage.mac.com/s_lott/iblog/architecture/C412398194/E20080815211111/index.html" target="_blank"> THE TECHNOLOGY OBSESSION</a> by S. Lott</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2008/08/12/steve-yegge-hits-a-homer-your-requirements-are-stupid/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Invites for Evernote, Jaiku</title>
		<link>http://jessenoller.com/2008/06/02/invites-for-evernote-jaiku/</link>
		<comments>http://jessenoller.com/2008/06/02/invites-for-evernote-jaiku/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 00:43:48 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jessenoller.com/?p=270</guid>
		<description><![CDATA[Yup. I just keep generating fountains of useful things. I have 15 Jaiku invites, and 5 Evernote invites. I recommend both, although right now I use more of twitter until I can convince people to move over to Jaiku cause it's more stable.

And evernote is awesome.

And, as before - leave me a comment or ...]]></description>
			<content:encoded><![CDATA[<p>Yup. I just keep generating fountains of useful things. I have 15 <a href="http://jaiku.com/" target="_blank">Jaiku</a> invites, and 5 <a href="http://www.evernote.com" target="_blank">Evernote</a> invites. I recommend both, although right now I use more of twitter until I can convince people to move over to Jaiku cause it’s more stable.</p>
<p>And evernote is awesome.</p>
<p>And, as before — leave me a comment or send me an email for an invite — I will need your email address to send it/them to you. Let me say that again: <b>I need your email address</b>. I promise I won’t send you <a href="http://www.youtube.com/watch?v=yCS5ZQ_67Fw" target="_blank">wacky Japanese game show youtube links</a>.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2008/06/02/invites-for-evernote-jaiku/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>The damning of the OLPC: Sic Transit Gloria Laptopi</title>
		<link>http://jessenoller.com/2008/05/13/the-damning-of-the-olpc-sic-transit-gloria-laptopi/</link>
		<comments>http://jessenoller.com/2008/05/13/the-damning-of-the-olpc-sic-transit-gloria-laptopi/#comments</comments>
		<pubDate>Wed, 14 May 2008 01:11:36 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jessenoller.com/?p=264</guid>
		<description><![CDATA[Ivan KrstiÄ‡ just posted an entry named "Sic Transit Gloria Laptopi".

Without commenting on the problems of the OLPC project, which - for some time - has seemed to be rapidly pushing itself into oblivion - I completely agree on Ivan's points on open source and frankly, everything else he says.

It's saddening that the project ...]]></description>
			<content:encoded><![CDATA[<p>Ivan KrstiÄ‡ just posted an entry named “<a href="http://radian.org/notebook/sic-transit-gloria-laptopi" target="_blank">Sic Transit Gloria Laptopi</a>”.</p>
<p>Without commenting on the problems of the OLPC project, which — for some time — has seemed to be rapidly pushing itself into oblivion — I completely agree on Ivan’s points on open source and frankly, everything else he says.</p>
<p>It’s saddening that the project which thrilled me — due to the ideas outline by Ivan — now disgusts me and so many others.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2008/05/13/the-damning-of-the-olpc-sic-transit-gloria-laptopi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evernote invites.</title>
		<link>http://jessenoller.com/2008/04/30/evernote-invites/</link>
		<comments>http://jessenoller.com/2008/04/30/evernote-invites/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 12:36:56 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jessenoller.com/2008/04/30/evernote-invites/</guid>
		<description><![CDATA[Just a quick note - I've got 10 Evernote invites - if you don't know what Evernote is, check out the Ars review here. Post in the comments if you'd like to test drive it. I'm going to need an email address.

So far, I'm loving it - but I'm also someone with about 500+ ...]]></description>
			<content:encoded><![CDATA[<p>Just a quick note — I’ve got 10 <a href="http://evernote.com/" target="_blank">Evernote</a> invites — if you don’t know what Evernote is, check out the Ars review <a href="http://arstechnica.com/journals/apple.ars/2008/04/29/areview-of-evernote-with-invites-exclusive-iphone-preview" target="_blank">here</a>. Post in the comments if you’d like to test drive it. I’m going to need an email address.</p>
<p>So far, I’m loving it — but I’m also someone with about 500+ bookmarks in Safari, a ton of “to read” stuff saved on my hard drive, and over 100 RSS feeds in NetNewsWire. So something to help me archive/save/search everything is key.</p>
<p>Now I just want PDF indexing support.</p>
<p><strong>Ok, I have 10 more left!</strong></p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2008/04/30/evernote-invites/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Object Caching 1528/1775 objects using disk: basic

Served from: jessenoller.com @ 2012-02-07 03:01:22 -->
