<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-23700903</id><updated>2008-11-21T11:30:37.295-05:00</updated><title type='text'>The road less traveled</title><subtitle type='html'>A blog about one man's thoughts on startups, economics, social issues, and college life.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/index.php'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sam.bluwiki.com/blog/atom.xml'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>68</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-23700903.post-2321769861459246917</id><published>2008-10-31T12:25:00.002-05:00</published><updated>2008-10-31T12:29:08.387-05:00</updated><title type='text'>Dear apple</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { }.flickr-frame { float: right; text-align: center; margin-left: 15px; margin-bottom: 15px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt; &lt;a href="http://www.flickr.com/photos/25798010@N05/2989762434/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3187/2989762434_afb384d1c1_t.jpg" class="flickr-photo" alt="Picture 1" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;span class="flickr-caption"&gt;  &lt;a href="http://www.flickr.com/photos/25798010@N05/2989762434/"&gt;Apple Receipt&lt;/a&gt;,&lt;br /&gt; originally uploaded by &lt;a href="http://www.flickr.com/people/25798010@N05/"&gt;odiosam&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;Please stop sending me receipts for free downloads from the app store.  They're clogging my inbox.&lt;br /&gt;&lt;br /&gt;While you're at it, you might as well not require that I input my account password to download them as well.  It's a hassle on the tiny keyboard, and pointless (somebody's going to steal my phone and rack up charges downloading &lt;i&gt;free&lt;/i&gt; software?)&lt;br clear="all" /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/2321769861459246917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23700903&amp;postID=2321769861459246917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/2321769861459246917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/2321769861459246917'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/10/dear-apple.php' title='Dear apple'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-7244846590232486445</id><published>2008-10-22T12:57:00.004-05:00</published><updated>2008-10-22T13:00:58.078-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Using Gmail with Django</title><content type='html'>It's easy to set up django to send emails through Gmail.  Just use the following settings:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DEFAULT_FROM_EMAIL = 'user@gmail.com'&lt;br /&gt;EMAIL_HOST = 'smtp.gmail.com'&lt;br /&gt;EMAIL_HOST_USER = 'user@gmail.com'&lt;br /&gt;EMAIL_HOST_PASSWORD = 'password'&lt;br /&gt;EMAIL_USE_TLS = True&lt;br /&gt;EMAIL_PORT = 25&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Gmail supports other ports, which you can use as well.  This is important if you're running thee server on your local machine, and your ISP blocks port 25.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/7244846590232486445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/7244846590232486445'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/10/using-gmail-with-django.php' title='Using Gmail with Django'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-5522770834983661614</id><published>2008-10-21T15:28:00.003-05:00</published><updated>2008-10-21T15:31:40.157-05:00</updated><title type='text'>testing out twitter feed.</title><content type='html'>I've been trying to integrate all my online "personalities" and I think I've finally got it.&lt;br /&gt;&lt;br /&gt;Here's what I have:&lt;br /&gt;- Startup twitter feed (divvyshot)&lt;br /&gt;- Personal twitter feed (sodio)&lt;br /&gt;- This blog&lt;br /&gt;- The divvyshot blog (coming soon)&lt;br /&gt;- Friendfeed&lt;br /&gt;- Facebook&lt;br /&gt;- Linked in&lt;br /&gt;&lt;br /&gt;What I'm doing is using &lt;a href="http://twitterfeed.com"&gt;twitterfeed&lt;/a&gt; to repost my blog posts on their respective twitter feeds.  Then I'm using FriendFeed to aggregate the two twitter feeds, along with LinkedIn.  I think have installed the facebook FriendFeed plugin, which should aggregate all that data on my fb wall.&lt;br /&gt;&lt;br /&gt;We'll see how it all goes...</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/5522770834983661614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/5522770834983661614'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/10/testing-out-twitter-feed.php' title='testing out twitter feed.'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-846673145106662180</id><published>2008-09-26T12:26:00.002-05:00</published><updated>2008-09-26T12:46:22.528-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><title type='text'>taking quick notes</title><content type='html'>I usually email myself stuff I want to remember.  That's nothing new - I'm sure most of heard of it before.&lt;br /&gt;&lt;br /&gt;But what about quick notes that don't merit an email, or even a post-it?&lt;br /&gt;&lt;br /&gt;For example, whenever I'm on the phone with some company I get a confirmation number... they're usually worthless but sometimes can come in handy.  I don't want to clutter my inbox or my desk with these confirmation numbers.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Instead, I google them.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;For example, I just talked to USPS about an address delivery problem.  They gave me a confirmation number, which I promptly googled: "usps confirmation #CO329235921"  There's a google bar in most browsers these days... so and I leave my browser running throughout the day so this is pretty convenient.  Then if I ever need to talk to them again, I hit CMD-Y (for history), and search "usps conf..."&lt;br /&gt;&lt;br /&gt;Of course google searches aren't 100% private - so be sure to only google stuff you can afford to publicize. &lt;br /&gt;&lt;br /&gt;Another tip: I set my browser to keep a 120-day history  (I find I'm always looking for stuff I visited several months ago, and storage is cheap, so why not).  You may want to consider changing your default expiration if you think you're going to need your notes for longer than a month.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/846673145106662180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/846673145106662180'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/09/taking-quick-notes.php' title='taking quick notes'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-5569047864528565180</id><published>2008-09-18T10:40:00.004-05:00</published><updated>2008-09-18T13:33:16.713-05:00</updated><title type='text'>Tried change_stage in module django.contrib.admin.views.main. Error was: 'module' object has no attribute 'change_stage'</title><content type='html'>Another Django upgrade hint:&lt;br /&gt;&lt;blockquote&gt;Tried change_stage in module django.contrib.admin.views.main. Error was: 'module' object has no attribute 'change_stage'&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Your forgot to update urls.conf as follows:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;# OLD:&lt;br /&gt;from django.conf.urls.defaults import *&lt;br /&gt;&lt;br /&gt;urlpatterns = patterns('',&lt;br /&gt;    (r'^admin/', include('django.contrib.admin.urls')),&lt;br /&gt;)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;# NEW:&lt;br /&gt;from django.conf.urls.defaults import *&lt;br /&gt;from django.contrib import admin&lt;br /&gt;&lt;br /&gt;admin.autodiscover()&lt;br /&gt;&lt;br /&gt;urlpatterns = patterns('',&lt;br /&gt;    (r'^admin/(.*)', admin.site.root),&lt;br /&gt;)&lt;br /&gt;&lt;/blockquote&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/5569047864528565180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/5569047864528565180'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/09/tried-changestage-in-module.php' title='Tried change_stage in module django.contrib.admin.views.main. Error was: &apos;module&apos; object has no attribute &apos;change_stage&apos;'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-4497106263574843792</id><published>2008-09-18T10:40:00.001-05:00</published><updated>2008-09-18T10:42:00.672-05:00</updated><title type='text'>Note to self</title><content type='html'>This is an excellent post about being a web entrepreneur:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.krisjordan.com/2008/09/17/jason-fried-10-things-weve-learned-at-37signals/"&gt;Jason Fried - 10 Things We’ve Learned at 37Signals&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/4497106263574843792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/4497106263574843792'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/09/note-to-self.php' title='Note to self'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-4810146034856770796</id><published>2008-07-24T09:35:00.001-05:00</published><updated>2008-07-24T09:37:04.738-05:00</updated><title type='text'>Django: Error while importing URLconf 'django.contrib.admin.urls': No module named urls</title><content type='html'>I didn't see a lot on google about this error so I thought I'd post something.  If you're getting it, it's likely you updated to the latest Django SVN release, and haven't upgraded your admin site's configuration.&lt;br /&gt;&lt;br /&gt;Read more here: http://code.djangoproject.com/wiki/NewformsAdminBranch</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/4810146034856770796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/4810146034856770796'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/07/django-error-while-importing-urlconf.php' title='Django: Error while importing URLconf &apos;django.contrib.admin.urls&apos;: No module named urls'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-8943637899362887816</id><published>2008-07-03T09:39:00.006-05:00</published><updated>2008-07-04T13:03:05.294-05:00</updated><title type='text'>One button sign up (continued)</title><content type='html'>There have been a number of comments about my previous post a &lt;b&gt;&lt;a href="http://sam.bluwiki.com/blog/2008/07/one-button-sign-up.php"&gt;one button sign up&lt;/a&gt;&lt;/b&gt;.  I thought I'd re-post them here and clarify.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;OpenID is easier: http://openid.net/&lt;/blockquote&gt;&lt;br /&gt;OpenID is easier and it's not mutually exclusive to what I'm suggesting here.  OpenID or not, many websites will still need to collect additional information.  The idea is not to force the user to give you that information in order to use basic site functionality.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;If a user sees an auction ending in 1 minute but is then required to jump through some hoops before bidding - thats just as bad an experience.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;You're right - so maybe eBay should require accounts just to browse listings?  Obviously, that idea doesn't make sense.  You shouldn't force the user to sign up early just so that in the off chance they want to bid on an item that's ending soon, they can.&lt;br /&gt;&lt;br /&gt;Instead, I'm suggesting you give the user as much access to the site as possible, as soon as possible.  Prompt the user for additional information with messages like "Update your address for quick bidding."  If your users decide to wait, that's their decision - don't make it for them.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;I want to feel involved. Plus, if I'm using a website to the extent that I'm going to want a username and password I pretty much expect that I may have to fill out more information upon registration so it is not as bothersome.&lt;/blockquote&gt;&lt;br /&gt;I disagree.  Long and tedious registration forms are a horrible way of involving the user.  The less information a user needs to enter for the same functionality, the better.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;By giving people random user names, you force them to do more work long term.&lt;br /&gt;&lt;br /&gt;Step 1: Click the one button and get my user name Step 2: Go write it down somewhere Step 3: Cookie expires/is cleaned - now user forgets the random user name or email. Step 4: Go look it up, enter info&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The user should never actually see (or need to remember) their random username.  What I was referring to is simply a unique backend identifier. Tracking a user without a username isn't that radical - even Amazon does it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold; font-size=120%"&gt;Amazon (and other stores) do one button sign ups&lt;/span&gt;&lt;br /&gt;&lt;img src="http://bluwiki.com/images/c/cf/Amazon_2.png" align=right&gt;&lt;br /&gt;When I first visit Amazon, the site gives me as much functionality as possible.  I can look at products and even add them to my cart - &lt;span style="font-weight:bold;"&gt;without logging in&lt;/span&gt;.  Like I was suggesting - Amazon &lt;i&gt;does&lt;/i&gt; upsell for more information, prompting you with messages like "Sign in to turn on 1-Click ordering."&lt;br /&gt;&lt;br /&gt;After I've visited a product page, I'm in Amazon's database.  In this example, simply viewing a product is the equivalent of  "signing up" - even though the user doesn't realize that.  That's great. Sign up buttons don't always have to be big and green. Ideally, the first step of the sign up process should occur transparently.&lt;br /&gt;&lt;br /&gt;Every time I return to the site, Amazon recognizes who I am and suggests similar products to ones I've already viewed:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://bluwiki.com/images/d/db/Amazon.png"&gt;&lt;br /&gt;&lt;br /&gt;Now, if I choose (or am required) to create a login, Amazon seamlessly associates it with all my previous "anonymous" data.  For example, I still have my previous browse history:&lt;br /&gt;&lt;img src="http://bluwiki.com/images/9/94/Amazon_3.png"&gt;&lt;br /&gt;&lt;br /&gt;By making it as easy as possible to start using the site, creating a "transparent user" to track my history, and up-selling to gather more information in order to gain additional functionality, Amazon is doing almost exactly what I described in the previous post.&lt;br /&gt;&lt;br /&gt;But why limit this process to online stores which by their nature must collect most user information during checkout? &lt;span style="font-weight:bold;"&gt;Every site should collect as little information as feasible and do it as late in the user experience as possible.&lt;/span&gt;  That's the whole premise behind one button sign ups.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/8943637899362887816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/8943637899362887816'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/07/one-button-sign-up-continued.php' title='One button sign up (continued)'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-6537956210938464341</id><published>2008-07-02T16:06:00.009-05:00</published><updated>2008-07-04T13:01:52.177-05:00</updated><title type='text'>One button sign up</title><content type='html'>&lt;img src="http://bluwiki.com/images/e/e3/Sign_up.png" align="left"&gt; I've stumbled across a new sign-up process: one button.  &lt;b&gt;That's it.&lt;/b&gt;  From now on, the user will only have to click a button on all of my new projects to sign up.&lt;br /&gt;&lt;br /&gt;"But Sam," you might ask, "How will you collect user information?"&lt;br /&gt;&lt;br /&gt;Easy. &lt;i&gt;Ask for it when you need it&lt;/i&gt;.  If you only ask for the user's address when the user wants to do something that requires their address, then you have a carrot to encourage the user to give you that information.&lt;br /&gt;&lt;br /&gt;If you ask for the address up front, then not only does the user have little incentive to give it to you, but you discourage the user from &lt;i&gt;signing up at all&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Take, for example, ebay's registration form:&lt;br /&gt;&lt;img src="http://bluwiki.com/images/7/78/Ebay.png"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Does ebay really need my address if I just want to watch an item?  Requiring me to fill out all this information just to preform basic actions (like watching an item or searching closed auctions) discourages me from using the site at all.&lt;br /&gt;&lt;br /&gt;Why not not create a "one button" sign up with a default user account and random username?  Allow me to use as much of the site as possible, while asking for (but not requiring) information to gain additional access.&lt;br /&gt;&lt;br /&gt;"But Sam", you counter again, "what if the user forgets their random username?"&lt;br /&gt;&lt;br /&gt;That's easy, authenticate with cookies and/or a unique URL (see craigslist).  At the same time, prompt the user (maybe at the top of every page) for a unique username or email address for logins.&lt;br /&gt;&lt;br /&gt;EDIT: I've continued this discussion in my next post, &lt;b&gt;&lt;a href="http://sam.bluwiki.com/blog/2008/07/one-button-sign-up-continued.php"&gt; One button sign up (continued)&lt;/a&gt;&lt;/b&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/6537956210938464341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/6537956210938464341'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/07/one-button-sign-up.php' title='One button sign up'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-3588817569462469473</id><published>2008-06-23T22:41:00.004-05:00</published><updated>2008-06-26T11:00:44.227-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>Free Mohammed Maree</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { }.flickr-frame { float: right; text-align: center; margin-left: 15px; margin-bottom: 15px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt; &lt;a href="http://www.flickr.com/photos/lancerlord/2449032062/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3128/2449032062_ac9d089ed7_t.jpg" class="flickr-photo" alt="Student 'Twitters' his way out of Egyptian jail" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;span class="flickr-caption"&gt;  &lt;a href="http://www.flickr.com/photos/lancerlord/2449032062/"&gt;Student 'Twitters' his way out of Egyptian jail&lt;/a&gt;,&lt;br /&gt; originally uploaded by &lt;a href="http://www.flickr.com/people/lancerlord/"&gt;LCLD&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;By now, you've all probably heard of James Buck - a &lt;a href="http://www.cnn.com/2008/TECH/04/25/twitter.buck/index.html"&gt;university student jailed in egypt&lt;/a&gt;.  After twittering that he was arrested, friends, journalists, bloggers and many in the online community rallied for his release. &lt;br /&gt;&lt;br /&gt;While it's nice to see the world unite behind such a good cause it's unfortunate that James' friend (Mohammed) hasn't received the same level of attention.&lt;br /&gt;&lt;br /&gt;Needless to say he's still in some Egyptian jail, having endured several weeks of torture: &lt;a href="http://jameskarlbuck.com/?p=61"&gt;http://jameskarlbuck.com/&lt;/a&gt;&lt;br clear="all" /&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;Interested in helping?  &lt;a href="http://jameskarlbuck.com/?p=46"&gt;Check out James' blog&lt;/a&gt;&lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/3588817569462469473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23700903&amp;postID=3588817569462469473' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/3588817569462469473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/3588817569462469473'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/06/free-mohammed-maree.php' title='Free Mohammed Maree'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-3091715746948908882</id><published>2008-06-18T20:36:00.004-05:00</published><updated>2008-06-18T20:42:33.007-05:00</updated><title type='text'>Well I cancelled embarq... and I now have a new ISP</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { }.flickr-frame { float: right; text-align: center; margin-left: 15px; margin-bottom: 15px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt; &lt;a href="http://www.flickr.com/photos/25798010@N05/2591764122/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3259/2591764122_b91077bae6_t.jpg" class="flickr-photo" alt="My new ISP" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;span class="flickr-caption"&gt;  &lt;a href="http://www.flickr.com/photos/25798010@N05/2591764122/"&gt;My new ISP&lt;/a&gt;,&lt;br /&gt; originally uploaded by &lt;a href="http://www.flickr.com/people/25798010@N05/"&gt;odiosam&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;I've had embarq for about 2 years, and I think I'm fed up with them.  I was paying ~$200/mo for business class DSL with a few static IPs.  For that price, the connection should be FAST and rock solid.&lt;br /&gt;&lt;br /&gt;It wasn't.&lt;br /&gt;&lt;br /&gt;After about a weekend of downtime (which caused a permanent 35% decrease in BluWiki's traffic) - I was done.  Here's my solution: I'm hosting my servers on slicehost for ~$130 / month, and for my personal internet, well, I'm using my friends' connections :)&lt;br /&gt;&lt;br /&gt;In the attached photo, you see what I came up with to facilitate doing that.&lt;br /&gt;Parts include:&lt;br /&gt;- DLB 2300 Deliberant AP (no longer sold, had this laying around)&lt;br /&gt;- Buffalo WHR-G125 (not sold in the US, you have to buy it off ebay)&lt;br /&gt;- &lt;a href="http://www.hyperlinktech.com/item.aspx?id=1123"&gt;U.FL to RP-SMA adapter&lt;/a&gt; (for the buffalo's antenna)&lt;br /&gt;- Hawking Hi-Gain Directional Corner Antenna 15db&lt;br /&gt;- &lt;a href="http://www.hyperlinktech.com/productfamily.aspx?id=312"&gt;Yagi 2.4GHz 14.5dBi&lt;/a&gt; &lt;br /&gt;- 4 port switch&lt;br /&gt;- Power strip&lt;br /&gt;- Cheap tripod&lt;br /&gt;&lt;br /&gt;Basically, I followed the instructions over at i-hacked (www.i-hacked.com/content/view/261/42/), except I substituted the WHR-G125 for the router and the 90 degree corner antenna instead of the yagi.  This setup will scan within a 90 degree radius for the strongest open network.&lt;br /&gt;&lt;br /&gt;I then use the DLB 2300 in WISP mode to aim the Yagi antenna at the network and repeat it on the switch.&lt;br /&gt;&lt;br /&gt;I've decided against repeating the network wirelessly to eliminate any WIFI interference.&lt;br /&gt;&lt;br /&gt;It works pretty well :)&lt;br clear="all" /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/3091715746948908882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23700903&amp;postID=3091715746948908882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/3091715746948908882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/3091715746948908882'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/06/well-i-cancelled-embarq-and-i-now-have.php' title='Well I cancelled embarq... and I now have a new ISP'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-53366499845568516</id><published>2008-06-04T23:21:00.005-05:00</published><updated>2008-06-04T23:30:36.079-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediawiki'/><category scheme='http://www.blogger.com/atom/ns#' term='bluwiki'/><category scheme='http://www.blogger.com/atom/ns#' term='terminal'/><title type='text'>Error creating thumbnail: /path/to/wiki/bin/ulimit.sh: xrealloc: ../bash/subst.c:514: cannot reallocate 512 bytes</title><content type='html'>MediaWiki's software was giving me this error, and I couldn't find a solution on google.  I thought I'd post one.&lt;br /&gt;&lt;br /&gt;I was able to fix the problem by moving the bin folder to bin.bak, downloading a new copy of mediawiki, and copying the bin folder from the new installation.&lt;br /&gt;&lt;br /&gt;I suspect that the error occurs when you set the permissions on ulimit.sh to global read-write (777).  The ulimit.sh in the new bin directory was set with limited permissions: &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;total 20K&lt;br /&gt;-rwxr-xr-x 1 root root 88 Jun  5 04:18 svnstat&lt;br /&gt;-rwxr-xr-x 1 root root 52 Jun  5 04:18 ulimit-tvf.sh&lt;br /&gt;-rw-r--r-- 1 root root 53 Jun  5 04:18 ulimit.sh&lt;br /&gt;-rwxrwxrwx 1 root root 53 Jun  2 01:54 ulimit.sh.bak&lt;br /&gt;-rwxr-xr-x 1 root root 48 Jun  5 04:18 ulimit4.sh&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Correcting the error may be as easy as changing the permissions, but if that doesn't work, you can follow the steps I outlined above.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/53366499845568516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/53366499845568516'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/06/error-creating-thumbnail.php' title='Error creating thumbnail: /path/to/wiki/bin/ulimit.sh: xrealloc: ../bash/subst.c:514: cannot reallocate 512 bytes'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-2338949386736057560</id><published>2008-05-27T01:54:00.006-05:00</published><updated>2008-05-27T02:20:09.209-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='terminal'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>a quick tip: the disk "name-here" is in use and could not be ejected</title><content type='html'>Under Leopard I seem to get this error relatively often when I'm trying to eject my external disks.  Even after quitting all my applications, the error doesn't go away.  I never want to disconnect my drive without unmounting it (maybe it's an OCD thing).  Here's my solution:  &lt;br /&gt;&lt;br /&gt;First, get the device name of the drive:  Disk utility &gt; Select volume &gt; Click Info &gt; Then note the disk identifier.&lt;br /&gt;&lt;br /&gt;Open up terminal to check which applications are using this drive (substitute your drive name):&lt;br /&gt;&lt;blockquote&gt;lsof /dev/disk2s10&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Quit (or kill) all the processes that are using the resource.  If nothing is returned (as is frequently the case with me), then force umount the drive (substitute your drive mount point):&lt;br /&gt;&lt;blockquote&gt;sudo umount -f /Volumes/Backup&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I'm adding this because the man page on umount doesn't document the force (-f) option.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/2338949386736057560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/2338949386736057560'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/05/quick-tip-disk-name-here-is-in-use-and.php' title='a quick tip: the disk &quot;name-here&quot; is in use and could not be ejected'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-4676733612285395621</id><published>2008-05-17T11:48:00.011-05:00</published><updated>2008-06-12T22:27:17.561-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='how-to'/><title type='text'>Extending the user model: profiles in Django</title><content type='html'>I think the documentation about using profiles &amp; the &lt;b&gt;get_profile()&lt;/b&gt; function isn't as clear and/or elegant as it could be.  The problem with django's recommended implementation of profiles is that when a user is created, a user's profile isn't automatically created - it's not part of the same model.  Managing the two can be tricky - if you mess up, you're bound to get ObjectDoesNotExist errors.&lt;br /&gt;&lt;br /&gt;My solution was to never use get_profiles() directly - but instead add a helper method where any ObjectDoesNotExist errors are caught and resolved:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;First, create a profile class in &lt;b&gt;models.py&lt;/b&gt;:&lt;br /&gt;&lt;blockquote&gt;from django.db import models&lt;br /&gt;from django.contrib.auth.models import User&lt;br /&gt;     &lt;br /&gt;class UserProfile(models.Model):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;karma = models.IntegerField(default=1, core=True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url = models.URLField(default="", core=True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user = models.ForeignKey(User, unique=True)&lt;/blockquote&gt;&lt;br /&gt;Note, if you want to be able to create profiles using the Django admin interface, change the last line to the following:&lt;br /&gt;&lt;blockquote&gt;user = models.ForeignKey(User, unique=True, edit_inline=models.TABULAR, num_in_admin=1,min_num_in_admin=1, max_num_in_admin=1,num_extra_on_change=0)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Add this line to &lt;b&gt;settings.py&lt;/b&gt;:&lt;br /&gt;&lt;blockquote&gt;AUTH_PROFILE_MODULE = 'core.UserProfile'&lt;/blockquote&gt;&lt;br /&gt;(change your line to 'appname.ModelName'  - note, do NOT include your project name or &lt;i&gt;anything else&lt;/i&gt;.  Just your application name and model name (the model name is UserProfile, unless you change it).&lt;br /&gt;&lt;br /&gt;Finally, add to &lt;b&gt;views.py:&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;from django.contrib.auth.models import User&lt;br /&gt;from project.core.models import UserProfile&lt;br /&gt;from django.core.exceptions import ObjectDoesNotExist&lt;br /&gt;&lt;br /&gt;def get_or_create_profile(user):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;profile = user.get_profile()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except ObjectDoesNotExist:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#create profile - CUSTOMIZE THIS LINE TO OYUR MODEL:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;profile = UserProfile(karma='1', url='http://example.org', user=user)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;profile.save()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return profile&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now, in views.py, to access a user's profile, you only need two lines:&lt;br /&gt;&lt;blockquote&gt;user = User.objects.get(pk = user_id)&lt;br /&gt;user.userprofile = get_or_create_profile(user)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;And, say if you wanted to change a value:&lt;br /&gt;&lt;blockquote&gt;user.userprofile.karma += 1&lt;br /&gt;user.userprofile.save()&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Easy, eh?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/4676733612285395621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/4676733612285395621'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/05/extending-user-model-profiles-in-django.php' title='Extending the user model: profiles in Django'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-2074627701505344757</id><published>2008-05-14T22:11:00.002-05:00</published><updated>2008-05-14T22:18:51.077-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sicp'/><category scheme='http://www.blogger.com/atom/ns#' term='arc'/><title type='text'>SICP and promises</title><content type='html'>A few days ago I &lt;a href="http://sam.bluwiki.com/blog/2008/05/working-through-sicp-in-arc.php"&gt;blogged about be working through SICP in ARC&lt;/a&gt;.  I was going to track my progress on &lt;a href="http://bluwiki.com/go/User:Sam_Odio/SCIP_in_Arc"&gt;bluwiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My personal goal was to make some progress every day.  That hasn't happened.&lt;br /&gt;&lt;br /&gt;I'm thinking about abandoning ARC, and just working through SICP in scheme.  Scheme &amp; ARC are remarkably similar, it seems the only difference is semantics.  It'd be a lot easier scheme, since I wouldn't have to translate all the problems.  Also, the language is more mature - so I suspect the libraries are more robust.&lt;br /&gt;&lt;br /&gt;We'll see - I'm going to take a crack on SICP 1.2 and 1.3 this weekend, and I'll make a decision after that.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/2074627701505344757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/2074627701505344757'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/05/sicp-and-promises.php' title='SICP and promises'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-7487192655946060068</id><published>2008-05-13T18:02:00.011-05:00</published><updated>2008-09-26T12:49:02.820-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='startups'/><category scheme='http://www.blogger.com/atom/ns#' term='how-to'/><title type='text'>One concrete tip for the self-employed programmer (that procrastinates)</title><content type='html'>I just read &lt;a href="http://news.ycombinator.com/item?id=188932"&gt;an article about procrastination&lt;/a&gt; that I found interesting (mostly because I agree with it).  Procrastination is great - as I explained in the comments:&lt;br /&gt;&lt;blockquote&gt;... procrastination paid my way through school. When you don't start studying for tests until a few hours before, you suddenly find yourself with a lot of time on your hands.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Procrastination teaches you how to work efficiently under pressure - a very important skill to have.   The experienced procrastinator becomes a pro at putting out fires, and ironically, quickly getting things done.  So why do procrastinators fail at life?  Partially because there isn't enough that &lt;i&gt;absolutely&lt;/i&gt; needs to get done.  Procrastinators need pressure.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So what's a procrastinator to do? &lt;b&gt;Start fires.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In software development this translates to setting artificial deadlines.  Make promises - and judge your performance by whether you keep them.  Here are some examples:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Promise your mom that you'll blog at least once per week (I do).&lt;br /&gt;&lt;li&gt;Promise a new feature on your website by a specified date.&lt;br /&gt;&lt;li&gt;Make promises on your blog, to whomever will listen (if you don't keep your promise, publicly apologize too).&lt;br /&gt;&lt;li&gt;Promise your clients you'll have respond to their emails within 12 hours.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;And here's my favorite example: find someone important to you &lt;b&gt;and make them your boss&lt;/b&gt; (I've chosen my girlfriend).  At the beginning of every week spend an hour with that person and explain to them what you're going to do in the next week.  Make promises.  Then, check in with them throughout the week, and at the end of the week, conduct a "performance review."  It helps if you can create some sort of incentive to meet your targets (you can be creative here... ).</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/7487192655946060068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/7487192655946060068'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/05/one-concrete-tip-for-procrastinating.php' title='One concrete tip for the self-employed programmer (that procrastinates)'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-1454078657878940052</id><published>2008-05-12T01:57:00.003-05:00</published><updated>2008-05-14T22:20:53.608-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>My first attempt at a python/django application</title><content type='html'>You know that "a-ha" moment when yo finally get something?  I think I might've just had it today.  I've built my first (working) python / django application - and I think I'm actually starting to understand django &amp; OO programming.  I still have a long way to go, but it's a relief to get the hang of things.&lt;br /&gt;&lt;br /&gt;Here it is: &lt;b&gt;&lt;a href="http://webidealist.com/blacklisted/"&gt;b l a c k l i s t e d&lt;/a&gt;&lt;/b&gt; - it's a fun little search box that will tell you if your name appears on a government watch-list.  Pretty basic, but hey, what do you expect?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/1454078657878940052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/1454078657878940052'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/05/my-first-attempt-at-pythondjango.php' title='My first attempt at a python/django application'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-2224190524003745695</id><published>2008-05-10T23:19:00.006-05:00</published><updated>2008-05-27T02:31:06.787-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='y combinator'/><title type='text'>Now using DISQUS for blog comments</title><content type='html'>I've switched this blog to DISQUS for the comment system.  Going forward, you might want a &lt;a href="http://disqus.com/profile/"&gt;disqus account&lt;/a&gt; to post a comment (but it's not required!).  For posts previous to this one, you'll be able to add comments either through Blogger or disqus.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/2224190524003745695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/2224190524003745695'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/05/now-using-disqus-for-blog-comments.php' title='Now using DISQUS for blog comments'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-4396178288781664868</id><published>2008-05-08T12:46:00.001-05:00</published><updated>2008-05-08T12:46:43.438-05:00</updated><title type='text'>(re)discovering IRC</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { }.flickr-frame {	float: right; text-align: center; margin-left: 15px; margin-bottom: 15px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt;	&lt;a href="http://www.flickr.com/photos/thowi/45753596/" title="photo sharing"&gt;&lt;img src="http://farm1.static.flickr.com/30/45753596_dfdd6ff6c9_t.jpg" class="flickr-photo" alt="Analog IRC" /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;span class="flickr-caption"&gt;		&lt;a href="http://www.flickr.com/photos/thowi/45753596/"&gt;Analog IRC&lt;/a&gt;,&lt;br /&gt; originally uploaded by &lt;a href="http://www.flickr.com/people/thowi/"&gt;thowi&lt;/a&gt;.	&lt;/span&gt;&lt;/div&gt;I've rediscovered IRC.  I love doing this, there's a wealth of information on there.  It's so much easier to get help if google isn't giving you any love.  One word of caution: just don't abuse those who help you, and try to help others when you can :)&lt;br /&gt;&lt;br /&gt;Here are the channels I currently hang out on, feel free to stop by &amp; say hi:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;#bluwiki&lt;br /&gt;#elc&lt;br /&gt;#startups&lt;br /&gt;#python&lt;br /&gt;#django&lt;br /&gt;#arc&lt;br /&gt;#gentoo&lt;br /&gt;#debian&lt;br /&gt;#bash&lt;br /&gt;#rubycodejam&lt;br /&gt;#lighttpd (these guys are especially friendly)&lt;br /&gt;#friendly-coders&lt;br /&gt;#gcj&lt;/blockquote&gt;&lt;br clear="all" /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/4396178288781664868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23700903&amp;postID=4396178288781664868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/4396178288781664868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/4396178288781664868'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/05/rediscovering-irc.php' title='(re)discovering IRC'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-7135336534624104210</id><published>2008-05-08T12:32:00.001-05:00</published><updated>2008-05-08T12:32:11.367-05:00</updated><title type='text'>If You Put That Picture On The Internet I'll Call My Lawyer</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { }.flickr-frame {	float: right; text-align: center; margin-left: 15px; margin-bottom: 15px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt;	&lt;a href="http://www.flickr.com/photos/jeremybrooks/2473047860/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2005/2473047860_07b7be6cc9_t.jpg" class="flickr-photo" alt="If You Put That Picture On The Internet I'll Call My Lawyer" /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;span class="flickr-caption"&gt;		&lt;a href="http://www.flickr.com/photos/jeremybrooks/2473047860/"&gt;If You Put That Picture On The Internet I'll Call My Lawyer&lt;/a&gt;,&lt;br /&gt; originally uploaded by &lt;a href="http://www.flickr.com/people/jeremybrooks/"&gt;Jeremy Brooks&lt;/a&gt;.	&lt;/span&gt;&lt;/div&gt;Awesome.  I hope somebody recognizes this guy and tells him he's all over the 'net.&lt;br clear="all" /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/7135336534624104210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23700903&amp;postID=7135336534624104210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/7135336534624104210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/7135336534624104210'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/05/if-you-put-that-picture-on-internet-i.php' title='If You Put That Picture On The Internet I&amp;#39;ll Call My Lawyer'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-8289740894079971982</id><published>2008-05-08T11:51:00.005-05:00</published><updated>2008-05-14T22:22:38.870-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>how to dive into web programming</title><content type='html'>I'm just starting to get serious about web programming, and I've done a decent amount of research about how to master it.  I quickly articulated this advice in an email to a friend, and I thought I'd post it here:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Her question:&lt;br /&gt;&lt;blockquote&gt;From:  AM&lt;br /&gt;To:  Sam Odio&lt;br /&gt;Subject:  hi i'm curious..&lt;br /&gt;&lt;br /&gt;Hi,&lt;br /&gt; &lt;br /&gt;I saw that you're doing SCIP - so then I looked up what a functional programming language was, and according to wikipedia functional languages "have largely been emphasized in academia rather than in commercial software development." But it notes that you can use it for commercial use as well. So are you doing it just to learn or is to serve some future practical purpose?&lt;br /&gt; &lt;br /&gt;I was just wondering b/c I always want to know what the best language to learn is (not that I have much of an intention of learning any sort of functional programming after getting extremely confused by your progress tracking on bluwiki) and I also know that this is all based largely on personal preference, but i'm still curious....&lt;br /&gt; &lt;br /&gt; AM.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;My response:&lt;br /&gt;&lt;blockquote&gt;From:  Sam Odio&lt;br /&gt;To:  AM&lt;br /&gt;Subject:  Re: hi i'm curious..&lt;br /&gt;&lt;br /&gt;my suggestion:&lt;br /&gt;&lt;br /&gt;1) learn an object oriented language &amp; framework (I'm doing pything w/ djano, you can also do ruby/rails or php/symfony)&lt;br /&gt;2) learn functional programming w/ SICP if you want to get good (CLisp, scheme, arc)&lt;br /&gt;&lt;br /&gt;#2 will take a lot of time, and yield few direct results.  But it'll help you understand what is capable w/ programming.  Long-term results, not short-term.  If you want ONLY short-term results, learn php/symfony.  PHP is not completely object oriented, but quick &amp; dirty.&lt;br /&gt;&lt;br /&gt;-s&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;What does everyone think? did I give her the right advice?</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/8289740894079971982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23700903&amp;postID=8289740894079971982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/8289740894079971982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/8289740894079971982'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/05/how-to-dive-into-web-programming.php' title='how to dive into web programming'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-984596728531176190</id><published>2008-05-07T17:02:00.004-05:00</published><updated>2008-05-07T21:16:12.974-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sicp'/><category scheme='http://www.blogger.com/atom/ns#' term='arc'/><title type='text'>Working through SICP... in arc</title><content type='html'>I've decided to work through the classic functional programming book, &lt;span style="font-weight:bold;"&gt;Structure and Interpretation of Computer Programs&lt;/span&gt;.  The book is well reviewed, and supposedly a "must-read" for anyone getting into programming - especially functional programming.  It served as the basis for MIT's intro programming course for several decades.&lt;br /&gt;&lt;br /&gt;Well I thought I would add a twist by doing all the examples in arc, instead of scheme.  I have no idea if this is wise, or even practical, but it's worth a shot.&lt;br /&gt;&lt;br /&gt;I'm going to attempt every exercise in the book, first rewriting it into arc (if applicable), and then solving it.  You can follow my progress here: &lt;a href="http://bluwiki.com/go/User:Sam_Odio/SCIP_in_Arc"&gt;http://bluwiki.com/go/User:Sam_Odio/SCIP_in_Arc&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/984596728531176190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23700903&amp;postID=984596728531176190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/984596728531176190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/984596728531176190'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/05/working-through-sicp-in-arc.php' title='Working through SICP... in arc'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-2566463711860254754</id><published>2008-04-22T22:54:00.003-05:00</published><updated>2008-04-22T22:59:11.049-05:00</updated><title type='text'>Hacked up a friendfeed widget with Feedburner</title><content type='html'>Paul Buchheit has a really nice friendfeed widget on his &lt;a href="http://paulbuchheit.blogspot.com/"&gt;blog&lt;/a&gt;.  I couldn't find any public source for the API, so I hacked up a quick one of my own.&lt;br /&gt;&lt;br /&gt;It's not nearly as nice, but it does the trick.  I imported my friendfeed RSS feed into feedburner, then set up a BuzzBoost widget which I incorporated into my blog's theme.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I modified the default BuzzBoost layout to look a little nicer, here's the CSS if anyone's interested (looking at the HTML of this blog might also help, I used my own div container and header div):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;/* FriendFeed&lt;br /&gt;----------------------------------------------- */&lt;br /&gt;.friendfeed-border {&lt;br /&gt; border: 2px solid #A7C5EA;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.friendfeed-header{&lt;br /&gt; background-color: #A7C5EA;&lt;br /&gt; width: 100%;&lt;br /&gt; height: 1.4em;&lt;br /&gt;  background-image: url('http://friendfeed.com/static/images/logo-mini.png');&lt;br /&gt;  background-repeat: no-repeat;&lt;br /&gt; text-align: right;&lt;br /&gt; color: #333;&lt;br /&gt;   font:1.4em "Trebuchet MS",Trebuchet,Arial,Verdana,Sans-serif;&lt;br /&gt; padding: 0.25em 0 0 0;&lt;br /&gt; margin: 0 0 10px 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.friendfeed-header a {&lt;br /&gt;  color:#444;&lt;br /&gt;  text-decoration:none;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;.friendfeed-header a:visited {&lt;br /&gt;  color:#444;&lt;br /&gt;  text-decoration:none;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;.friendfeed-header a:hover {&lt;br /&gt;  color:#444;&lt;br /&gt;  text-decoration:underline;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;.feedburnerFeedBlock {&lt;br /&gt; padding: 0 .25em .25em .25em;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;.feedTitle {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;.feedburnerFeedBlock li {&lt;br /&gt; background-image: url('http://friendfeed.com/static/images/icons/internal.png');&lt;br /&gt; background-repeat: no-repeat;&lt;br /&gt; padding: 0em 0em 0em 0em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.feedburnerFeedBlock div {&lt;br /&gt; margin: 0 20px 0 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.headline {&lt;br /&gt; font-weight: bold;&lt;br /&gt; margin: 0 0 0 22px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.enclosure{&lt;br /&gt; margin: 0 0 0 25px;&lt;br /&gt; font-size: 50%;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.date{&lt;br /&gt; padding: 0 0 0 0;&lt;br /&gt; margin: 0 0 0 0;&lt;br /&gt; font-size: 65%;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/2566463711860254754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23700903&amp;postID=2566463711860254754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/2566463711860254754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/2566463711860254754'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/04/hacked-up-friendfeed-widget-with.php' title='Hacked up a friendfeed widget with Feedburner'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-6901219849743093582</id><published>2008-04-20T00:43:00.008-05:00</published><updated>2008-05-14T22:21:54.592-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>MacBook security</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { }.flickr-frame { float: right; text-align: center; margin-left: 15px; margin-bottom: 15px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt; &lt;a href="http://www.flickr.com/photos/25798010@N05/2427101388/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2245/2427101388_1e78582d5b_t.jpg" class="flickr-photo" alt="wakeup photo" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;span class="flickr-caption"&gt;  &lt;a href="http://www.flickr.com/photos/25798010@N05/2427101388/"&gt;wakeup photo&lt;/a&gt;,&lt;br /&gt; originally uploaded by &lt;a href="http://www.flickr.com/people/25798010@N05/"&gt;odiosam&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;A while back I found this howto on flickr: &lt;a href="http://www.flickr.com/photos/omegastation/292845901/"&gt;http://www.flickr.com/photos/omegastation/292845901/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's pretty useful - every time your mac wakes up from sleep, it takes a photo and emails it to you (or &lt;a href="http://www.flickr.com/account/uploadbyemail/"&gt;to flickr&lt;/a&gt;!). That's cool, but I'd also like to record the internal / external IP address as well.  That way, if my macbook is ever stolen, I have a photo of who's using it, AND their IP address.&lt;br /&gt;&lt;br /&gt;This is what you'll need, if you want to do the same:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;My workflow, to start with: http://sam.bluwiki.com/sam/take_picture_on_wake.zip &lt;li&gt;wget &lt;li&gt;A server to rsync into &lt;li&gt;Ability to set up password-less ssh for your server (see this &lt;a href="http://www.linuxproblem.org/art_9.html"&gt;howto&lt;/a&gt; &lt;li&gt;&lt;a href="http://slappingturtle.com/home/index.php?option=com_content&amp;task=view&amp;id=20&amp;Itemid=58"&gt;camcapture&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.bernhard-baehr.de/"&gt;sleepwatcher&lt;/a&gt;&lt;/ul&gt; &lt;br /&gt;&lt;br /&gt;1)Download my workflow&lt;br /&gt;&lt;br /&gt;2) I put everything into ~/Stuff/Surveillance - you can put it wherever, but be sure to modify the workflow.&lt;br /&gt;&lt;br /&gt;3) Download camcapture, and copy the binary into ~/Stuff/Surveillance&lt;br /&gt;&lt;br /&gt;4) If you want to upload your photos to flickr, get a flickr account and read &lt;a href="http://www.flickr.com/account/uploadbyemail/"&gt;this&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;5) Test the workflow&lt;br /&gt;&lt;br /&gt;6) Save it as an application (I saved my into ~/Stuff)&lt;br /&gt;&lt;br /&gt;7) Download camcapture&lt;br /&gt;&lt;br /&gt;8) Download &amp; install sleepwatcher  9)Open terminal and &lt;b&gt;vim ~/.wakeup&lt;/b&gt; (Make sure you change the location of take_picture_on_wake.app to the directory that you saved it into):&lt;br /&gt;&lt;blockquote&gt;#!/bin/sh&lt;br /&gt;/usr/bin/automator /Users/so/Stuff/take_picture_on_wake.app&lt;/blockquote&gt;&lt;br /&gt;Make it executable: &lt;blockquote&gt;chmod +x ./.wakeup&lt;/blockquote&gt;&lt;br /&gt; 10) Restart and test!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt;  Most users would be better off using automator to download a copy of http://ipchicken.com / http://whatismyip.com for an internal IP address, using automator to create an archive of all the files (index.html with External IP, ipdata with internal IP, iSight.jpg, and then emailing all the files to an account they can check over the web (like gmail).  This will eliminate the need to use wget / rsync.&lt;br clear="all" /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/6901219849743093582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23700903&amp;postID=6901219849743093582' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/6901219849743093582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/6901219849743093582'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/04/macbook-security.php' title='MacBook security'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23700903.post-128984653419027106</id><published>2008-04-18T22:20:00.011-05:00</published><updated>2008-07-22T19:22:02.097-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='lighttpd'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Django + Python + PHP(optional) + Lighttpd on Debian etch</title><content type='html'>Couldn't find any great howto, so here's how I did it:&lt;br /&gt;&lt;br /&gt;It's a good idea to update apt-get:&lt;br /&gt;&lt;blockquote&gt;apt-get update&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I didn't want apache running on my system:&lt;br /&gt;&lt;blockquote&gt;apache2ctl stop&lt;br /&gt;update-rc.d -f apache2 remove&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Install lighttpd:&lt;br /&gt;&lt;blockquote&gt;apt-get install lighttpd&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Uncomment these lines from &lt;span style="font-weight:bold;"&gt;/etc/lighttpd/lighttpd.conf:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;server.pid-file            = "/var/run/lighttpd.pid"&lt;br /&gt;"mod_fastcgi",&lt;br /&gt;"mod_rewrite",&lt;/blockquote&gt;&lt;br /&gt;(you may have to add mod_fastcgi in)&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;If you want PHP support:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;apt-get install php5-cgi&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Add this line to the bottom of &lt;span style="font-weight:bold;"&gt;/etc/php5/cgi/php.ini&lt;/span&gt; &lt;br /&gt;&lt;blockquote&gt;cgi.fix_pathinfo = 1&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Add this to the bottom of vim /etc/lighttpd/lighttpd.conf:&lt;br /&gt;&lt;blockquote&gt;fastcgi.server = (&lt;br /&gt;        ".php" =&gt; ((&lt;br /&gt;                "bin-path" =&gt; "/usr/bin/php5-cgi",&lt;br /&gt;                "socket" =&gt; "/tmp/php.socket"&lt;br /&gt;        ))&lt;br /&gt;)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;And add index.php if it's not already there:&lt;br /&gt;&lt;blockquote&gt;index-file.names           = ( "index.php", "index.html",&lt;br /&gt;                               "index.htm", "default.htm" )&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Python / Django support:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I like python 2.5.1:&lt;br /&gt;&lt;blockquote&gt;apt-get install python2.5-dev&lt;br /&gt;which python&lt;br /&gt;cd to location of python binary&lt;br /&gt;ls -lh (make sure python is a symlink)&lt;br /&gt;rm python&lt;br /&gt;ln -s python2.5 python&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;subversion to get django (also just a useful tool to have)&lt;br /&gt;&lt;blockquote&gt;apt-get install subversion&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Make a dir to hold all your install files:&lt;br /&gt;&lt;blockquote&gt;mkdir /var/installers&lt;br /&gt;cd /var/installers&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Download &amp; install:&lt;br /&gt;&lt;blockquote&gt;wget http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;python ez_setup.py&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Get flup for python support:&lt;br /&gt;&lt;blockquote&gt;wget http://www.saddi.com/software/flup/dist/flup-0.5-py2.5.egg&lt;br /&gt;easy_install flup-0.5-py2.5.egg&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Django:&lt;br /&gt;&lt;blockquote&gt;svn co http://code.djangoproject.com/svn/django/trunk/ ./django-trunk/&lt;br /&gt;cd ./django-trunk&lt;br /&gt;python setup.py install&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Edit /etc/lighttpd/lighttpd.conf and change fastcgi.server to:&lt;br /&gt;&lt;blockquote&gt;fastcgi.server = (&lt;br /&gt;        ".php" =&gt; ((&lt;br /&gt;                "bin-path" =&gt; "/usr/bin/php5-cgi",&lt;br /&gt;                "socket" =&gt; "/tmp/php.socket"&lt;br /&gt;        )),&lt;br /&gt;        "django.fcgi" =&gt; (&lt;br /&gt;                "main" =&gt; (&lt;br /&gt;                        "host" =&gt; "127.0.0.1",&lt;br /&gt;                        "port" =&gt; 9090, #set the port numbers to what-eva you want&lt;br /&gt;                ),&lt;br /&gt;        ),&lt;br /&gt;        "admin.fcgi" =&gt; (&lt;br /&gt;                "admin" =&gt; (&lt;br /&gt;                        "host" =&gt; "127.0.0.1",&lt;br /&gt;                        "port" =&gt; 9091,&lt;br /&gt;                )&lt;br /&gt;        )&lt;br /&gt;)&lt;/blockquote&gt;&lt;br /&gt;(notice php support - that's optional)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Add rewrite rules to lighttpd.conf:&lt;br /&gt;&lt;blockquote&gt;url.rewrite-once = (&lt;br /&gt;    "^(/media.*)$" =&gt; "$1",&lt;br /&gt;    "^(/static.*)$" =&gt; "$1",&lt;br /&gt;    "^/favicon\.ico$" =&gt; "/media/favicon.ico",&lt;br /&gt;    "^(/admin/.*)$" =&gt; "/admin.fcgi$1",&lt;br /&gt;    "^(/.*)$" =&gt; "/django.fcgi$1"&lt;br /&gt;)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now make blank dummy files to prevent Lighttpd 404 errors:&lt;br /&gt;&lt;blockquote&gt;vim /var/www/django.fcgi&lt;br /&gt;vim /var/www/admin.fcgi&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now make a django project directory (www):&lt;br /&gt;&lt;blockquote&gt;mkdir /var/django&lt;br /&gt;cd /var/django&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;make a test project:&lt;br /&gt;&lt;blockquote&gt;django-admin.py startproject testproject&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;start the project:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;cd ./testproject&lt;br /&gt;python manage.py runfcgi method=prefork host=127.0.0.1 port=9090 pidfile=django.pid&lt;/blockquote&gt;&lt;br /&gt;Note - using port 127.0.0.1 for runfcgi doesn't limit lighttpd to only that interface.  It's used for communication between lighttpd &amp; runfcgi &lt;br /&gt;&lt;br /&gt;now test!&lt;br /&gt;http://your_server_ip&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Mysql support&lt;/span&gt; (haven't tested to see if this works):&lt;br /&gt;I run my database on a separate server, if you don't, you'll need to set up mysql server as well.  There are plenty of HOWTOS on that, try googling around.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;apt-get install mysql-client&lt;/blockquote&gt;&lt;br /&gt;(will add config instructions later, once I do them)&lt;br /&gt;&lt;br /&gt;Install MySQLdb, which lets python easily talk to mysql (haven't yet tested/configured this):&lt;br /&gt;&lt;blockquote&gt;apt-get install python-mysqldb&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/128984653419027106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23700903&amp;postID=128984653419027106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/128984653419027106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23700903/posts/default/128984653419027106'/><link rel='alternate' type='text/html' href='http://sam.bluwiki.com/blog/2008/04/django-python-phpoptional-lighttpd-on.php' title='Django + Python + PHP(optional) + Lighttpd on Debian etch'/><author><name>Sam Odio</name><uri>http://www.blogger.com/profile/16065540890829360379</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>