<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

    <title>Bartek Ciszkowski</title>
    <link href="http://bart.whahay.net/atom.xml" rel="self" />
    <link href="http://bart.whahay.net" />
    <updated>2010-01-16T13:10:45-08:00</updated>
    <id>http://bart.whahay.net</id>
    <author>
        <name>Bartek Ciszkowski</name>
        <email>bart.ciszk@gmail.com</email>
    </author>

    
    <entry>
        <title>Django Admin actions are simple and powerful.</title>
        <link href="http://bart.whahay.net/blog/2009/06/16/django-admin-actions-simple.html" />
        <updated>2009-06-16T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2009/06/16/django-admin-actions-simple</id>
        <content type="html">&lt;p&gt;Django admin actions are a great new feature available in the development version which allows you to easily extend the admin interface for doing bulk actions.&lt;/p&gt;
&lt;p&gt;The basic workflow for the django admin in the past has always been &amp;#8220;Select an object, then change it.&amp;#8221; &amp;#8212; Now, we have the ability to do bulk edits, deletes or whatever custom utility floats our boat. The official documentation explains admin actions in extreme detail very well, but I will run through a quick example!&lt;/p&gt;
&lt;h3&gt;Sending out bulk emails to users using Django admin actions.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Within admin.py, we define our admin class and custom action&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;python&quot;&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ProfileAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ModelAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;actions&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;#39;send_verify_email&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;send_verify_email&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;queryset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;sd&quot;&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;sd&quot;&gt;        Loop through all objects the user has selected and call our custom function.&lt;/span&gt;
&lt;span class=&quot;sd&quot;&gt;        &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;queryset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;Profile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;objects&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;send_verify_email&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message_user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%s&lt;/span&gt;&lt;span class=&quot;s&quot;&gt; users were successfully emailed for re-verification&amp;quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;queryset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;send_verify_email&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;short_description&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;Verify Email Addresses&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;To summarize the code, here&amp;#8217;s what&amp;#8217;s important:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;We have a list named `actions` in which we define any custom actions we have created.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol&gt;
	&lt;li&gt;You can create your action outside of the ModelAdmin class, but since this one is only for the scope of my ProfileAdmin, I put it in the class.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol&gt;
	&lt;li&gt;queryset is very powerful. You can loop through it, or do one-line mass edits, e.g: &lt;strong&gt;queryset.update(status=&amp;#8216;p&amp;#8217;)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ol&gt;
	&lt;li&gt;Profile.objects.send_verify_email is simply a manager function I define elsewhere. You can do whatever you wish here.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol&gt;
	&lt;li&gt;self.message_user displays the well-known notes within the django admin near the top after you have submitted data. Just a nice touch&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And that&amp;#8217;s it! With this and some code within my manager function, I can now send out bulk emails to my users with a few clicks. Of course, this is just a simple example and I totally recommend &lt;a href=&quot;http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#writing-action-functions&quot;&gt;reading the admin actions documentation&lt;/a&gt;&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Twists and turns take over my life in the past month.</title>
        <link href="http://bart.whahay.net/blog/2009/06/01/back-at-it.html" />
        <updated>2009-06-01T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2009/06/01/back-at-it</id>
        <content type="html">&lt;p&gt;It has been quite a while since I wrote something and I will keep this short, but I have this small urge deep down to get some things out of my brain:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;I am no longer moving to Montreal (for now). After negotiations with my current company, I agreed to stay for the time being. I don&amp;#8217;t know how long I will stay but I am pretty happy with the changes made and currently have no plans to move away. With this in mind, my previous post about geting my job is now nullified.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;I kind of crashed after the decision to stay was finalized. A lot of stress over staying or going built up and now it&amp;#8217;s all been kind of released over the past few weeks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Regardless, I&amp;#8217;m going to get back into things hopefully write some interesting software related posts and maybe work on a new project or two. Android has me really interested even after months of following it and the various &amp;#8220;Desktop apps in your browser!&amp;#8221; frameworks are really showing off some cool stuff. That&amp;#8217;s about it, hope you&amp;#8217;re having a good day!&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Setting up nginx to reduce load and memory usage for your Django / Python website.</title>
        <link href="http://bart.whahay.net/blog/2009/04/06/setting-up-nginx-django.html" />
        <updated>2009-04-06T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2009/04/06/setting-up-nginx-django</id>
        <content type="html">&lt;p&gt;&lt;em&gt;(Using &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;? I will be writing an nginx + &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; guide shortly. Stay tuned!)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;nginx is an &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; server and mail proxy that has been around for a few years and has been recently getting some attention for its ability to work well with low memory machines, proxy setups, load balancing and easy interfacing with FastCGI and other modules to serve various types of content.&lt;/p&gt;
&lt;p&gt;I came into a situation where my 256mb Slice was constantly using swap and having trouble stay afloat. I was using Apache with a mix of mod_python and mod_php to serve content for about 6 websites. You may find yourself in a similar situation, so let&amp;#8217;s get started on setting up nginx!&lt;/p&gt;
&lt;p&gt;In this tutorial, I will be setting up nginx as a front end to serve plain html and pass Django / Python related requests to a &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt; process from Apache. This will help take a huge load off Apache and allow it to be only used when required.&lt;/p&gt;
&lt;p&gt;For this write up, I am assuming you have Apache2 installed already. If you do not, it&amp;#8217;s easy to install:&lt;/p&gt;
&lt;pre&gt;
    $ sudo aptitude install apache2
&lt;/pre&gt;
&lt;p&gt;And now our essentials:&lt;/p&gt;
&lt;pre&gt;
    $ sudo aptitude install nginx
    $ sudo aptitude install libapache2-mod-wsgi
&lt;/pre&gt;
&lt;p&gt;It is also recommended to build nginx &lt;a href=&quot;http://nginx.net/&quot;&gt;from source&lt;/a&gt;.  As of this writing, the Ubuntu repository&amp;#8217;s package is a bit out of date but still fully functional. If you are on a Debian system, you should be fine with nginx from the repo. (For this tutorial, I am assuming you installed from the repository, so if you installed from source, your paths may be different.)&lt;/p&gt;
&lt;p&gt;All your nginx configuration will be done under the &lt;strong&gt;/etc/nginx&lt;/strong&gt; folder. First thing you will want to open up is &lt;strong&gt;/etc/nginx/nginx.conf&lt;/strong&gt; to understand some basic variables; It should look something like this:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    user www-data;
    worker_processes  2;

    error_log  /var/log/nginx/error.log;
    pid        /var/run/nginx.pid;
    
    events {
        worker_connections  1024;
    }
   
    http {
       include       /etc/nginx/mime.types;
       default_type  application/octet-stream;
     
       access_log  /var/log/nginx/access.log;
    
       sendfile        on;
       tcp_nopush     on;
    
       keepalive_timeout  65;
       tcp_nodelay        on;
     
       gzip  on;
     
       include /etc/nginx/conf.d/*.conf;
       include /etc/nginx/sites-enabled/*;
    }
&lt;/code&gt;
&lt;/pre&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;worker_processes&lt;/strong&gt; is the number of processes to spawn. A worker is similar to a child process in Apache. A simplified way to look at this is to set the number of worker_processes to two(2) or the number of CPU&amp;#8217;s your server has. In my case, I have four CPU&amp;#8217;s but I am not doing anything heavy with &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; or the like so I keep it as two (2) to keep my load down. Your mileage may vary so you may have to expirement.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;worker_connections&lt;/strong&gt; is simply the number of connections a single child (worker_process) can handle. So by default you have 1024 * 2 = 2048. That&amp;#8217;s a lot! For the average person running some small to medium sized sites this will be sufficient and can be left as default.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;listen&lt;/strong&gt; is not included in my config but you may want to change the port nginx listens on before deploying and replacing Apache as the front.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;include /etc/nginx/sites-enabled/&lt;/strong&gt;* is a nice throwback to how Apache does VirtualHosts and will keep us converts comfortable. You place your virtual hosts under /etc/nginx/sites-available/ and then link them when you want to enable, just like you would with Apache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The rest of the configuration is pretty straight forward. You can read more about it from the &lt;a href=&quot;http://wiki.nginx.org/NginxConfiguration&quot;&gt;official nginx wiki&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you made any changes, restart nginx:&lt;/p&gt;
&lt;pre&gt;
    $  sudo /etc/init.d/nginx restart
&lt;/pre&gt;
&lt;p&gt;And let&amp;#8217;s test if nginx is running correctly:&lt;/p&gt;
&lt;pre&gt;
    $ curl 127.0.0.1
&lt;/pre&gt;
&lt;p&gt;Should return a similar page:&lt;/p&gt;
&lt;pre&gt;
    &amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Welcome to nginx!&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body bgcolor=&quot;white&quot; text=&quot;black&quot;&amp;gt;
    &amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;Welcome to nginx!&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;
    &amp;lt;/body&amp;gt;
    &amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;h3&gt;Setup our new site under nginx.&lt;/h3&gt;
&lt;p&gt;nginx configuration is insanely simple so first, let&amp;#8217;s create a new entry for our site under &lt;strong&gt;/etc/nginx/sites-available/&lt;/strong&gt; and fill in some basic information:&lt;/p&gt;
&lt;pre&gt;
    $ sudo vim /etc/nginx/sites-available/mysite.com

    server {
        listen 199.99.999.999:80; # Modify this to be your servers ip address.
        server_name www.mysite.com;
        rewrite ^/(.*) http://mysite.com/$1 permanent;
    }

    server {
        listen 199.99.999.999:80;
        server_name mysite.com;

        access_log /var/log/nginx/mysite.com.access.log;
        error_log /var/log/nginx/mysite.com.error.log;

    }
&lt;/pre&gt;
&lt;p&gt;Viola, with this simple config our site is now listening for requests. We use the simple rewrite rule to send requests for www.mysite.com to mysite.com. You don&amp;#8217;t have to do this, and can just add both variations of your domain to the server_name variable but we&amp;#8217;re cool and not fans of the www prefix.&lt;/p&gt;
&lt;p&gt;Now, you will notice this is just for static content. It&amp;#8217;s a good template to save and use as a base for your other sites but let&amp;#8217;s add some functionality to our Django site!&lt;/p&gt;
&lt;p&gt;Open up the file again and add the following within your primary server block (the second one!):&lt;/p&gt;
&lt;pre&gt;
    location / {
        proxy_pass http://127.0.0.1:80/;
        include /etc/nginx/proxy.conf;
    }

    location /static {
        root    /home/admin/domains/mysite.com;
        expires 24h;
    }
&lt;/pre&gt;
&lt;p&gt;We&amp;#8217;ve got two important entries here and one variable to note:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;In &lt;strong&gt;location /&lt;/strong&gt;, we tell nginx that for this site, send &lt;span class=&quot;caps&quot;&gt;ALL&lt;/span&gt; requests under / (so basically, any page on our site) through a proxy_pass to http://127.0.0.1:80. Why port 80 on the local host? We&amp;#8217;re going to setup Apache to listen on this port in about 5 minutes!&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;expires is a great way to do some super-simple caching. In this case, we cache our /static directory for 24 hours. Of course, you can remove this or change it in a &lt;a href=&quot;http://wiki.nginx.org/NginxHttpHeadersModule#expires&quot;&gt;variety of ways&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;We use &lt;strong&gt;include /etc/nginx/proxy.conf&lt;/strong&gt;. This keeps nginx.conf clean and sets up some essentials for the proxy. I won&amp;#8217;t go into much detail on this, but here&amp;#8217;s a basic proxy.conf which you will want to save as the file you included:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 90;
    proxy_send_timeout 90;
    proxy_read_timeout 90;
    proxy_buffers 32 4k;
&lt;/pre&gt;
&lt;ul&gt;
	&lt;li&gt;Finally, we set &lt;strong&gt;location /static&lt;/strong&gt; to point to our media/static directory. This basically tells nginx that for anything under /static, don&amp;#8217;t do anything special with it and just serve it. The one key here is to place your static directory&amp;#8217;s &lt;span class=&quot;caps&quot;&gt;PARENT&lt;/span&gt; dir as the root, and not the static dir itself.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Save your virtual host and enable it, we&amp;#8217;re done with nginx here:&lt;/p&gt;
&lt;pre&gt;
    $ sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx-sites-enabled/mysite.com
    $ sudo /etc/init.d/nginx restart
&lt;/pre&gt;
&lt;h3&gt;Now, let&amp;#8217;s switch Apache to run on the local host&lt;/h3&gt;
&lt;p&gt;In this case, we want to keep Apache around to serve the python code for our Django site. There are other methods to do this (like FastCGI), but the one we&amp;#8217;re using is pretty straight forward and uses the great mod_wsgi module from Apache.&lt;/p&gt;
&lt;p&gt;Open up the Apache ports.conf file and edit the following so we&amp;#8217;re listening only on the local host.&lt;/p&gt;
&lt;pre&gt;
    $ sudo vim /etc/apache2/ports.conf

    NameVirtualHost 127.0.0.1:80
    Listen 127.0.0.1:80
&lt;/pre&gt;
&lt;p&gt;And restart Apache:&lt;/p&gt;
&lt;pre&gt;
    $ sudo apache2ctl graceful
&lt;/pre&gt;
&lt;p&gt;Assuming you had no enabled sites, Apache should have not complained about any ports being taken up. At this point, nginx is running on port 80 for clients (users of our websites) and Apache is running locally on the same port, but is only accessible through instances ran internally. Great!&lt;/p&gt;
&lt;p&gt;We&amp;#8217;re almost done. As you may remember, we sent requests to Apache but we need to actually do something with those requests. With this in mind, we create a virtual host within Apache with some information to create a &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt; instance. Here&amp;#8217;s how the file should look like:&lt;/p&gt;
&lt;pre&gt;
    $ sudo vim /etc/apache2/sites-available/mysite.com

    &amp;lt;VirtualHost 127.0.0.1:80&amp;gt;
    ServerName www.mysite.com
    ServerAlias mysite.com

    &amp;lt;Directory /home/admin/domains/mysite.com/&amp;gt;
        Order deny, allow
        Allow from all
    &amp;lt;/Directory&amp;gt;

    LogLevel warn
    CustomLog /var/log/apache2/mysite.com.access.log combined
    ErrorLog /var/log/apache2/mysite.com.error.log

    WSGIDaemonProcess mysite.com user=www-data group=www-data threads=25
    WSGIProcessGroup mysite.com
    WSGIScriptAlias / /home/admin/domains/mysite.com/mysite.wsgi
    &amp;lt;/VirtualHost&amp;gt;
&lt;/pre&gt;
&lt;p&gt;This is a lot to deal with but if you&amp;#8217;re familiar with Apache it&amp;#8217;s pretty basic. We setup a VirtualHost to listen on our localhost, setup some logs, and then create the &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt; Daemon process we will need. The major thing to note here is the &lt;strong&gt;WSGIScriptAlias&lt;/strong&gt; which says for all requests under /, use the &lt;strong&gt;mysite.wsgi&lt;/strong&gt; file to handle them. We&amp;#8217;ll get to creating that file in a second.&lt;/p&gt;
&lt;p&gt;Enable the virtual host as we are now done here:&lt;/p&gt;
&lt;pre&gt;
    $ sudo ln -s /etc/apache2/sites-available/mysite.com /etc/apache2/sites-enabled/mysite.com
&lt;/pre&gt;
&lt;p&gt;And now, let&amp;#8217;s create our &lt;strong&gt;mysite.wsgi&lt;/strong&gt; file:&lt;/p&gt;
&lt;pre&gt;
    $ vim /home/admin/domains/mysite.com/mysite.wsgi

    ALLDIRS = ['/usr/lib/python2.5/site-packages']
    # the above directory depends on the location of your python installation.
    # if using virtualenv, it will need to match your projects locale.
    import os
    import sys 
    import site

    prev_sys_path = list(sys.path)

    for directory in ALLDIRS:
        site.addsitedir(directory)
        new_sys_path = []
        for item in list(sys.path):
            if item not in prev_sys_path:
                new_sys_path.append(item)
                sys.path.remove(item)
                sys.path[:0] = new_sys_path

    # change this depending on your project.
    sys.path.append('/home/admin/domains/mysite.com')

    os.environ['PYTHON_EGG_CACHE'] = '/home/admin/.python-eggs'
    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
    import django.core.handlers.wsgi
    application = django.core.handlers.wsgi.WSGIHandler()
&lt;/pre&gt;
&lt;p&gt;This is a very basic &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt; implementation for a Django app but sets all the necessary environment variables and gets things going. Make sure to modify the paths to match your own projects.&lt;/p&gt;
&lt;pre&gt;
    $ sudo apache2ctl graceful
&lt;/pre&gt;
&lt;p&gt;And now, everything is essentially setup. To re-iterate, here&amp;#8217;s what we did:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Installed nginx and mod_wsgi for Apache 2&lt;/li&gt;
	&lt;li&gt;Setup nginx to run in place of Apache, and made Apache run only on localhost.&lt;/li&gt;
	&lt;li&gt;Told nginx to proxy_pass all requests to mod_wsgi in Apache, except for our /static directory.&lt;/li&gt;
	&lt;li&gt;Setup a virtual host within Apache to spawn new &lt;span class=&quot;caps&quot;&gt;WSGI&lt;/span&gt; processes.&lt;/li&gt;
	&lt;li&gt;Create a mysite.wsgi file in our projects directory.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With everything running, you should notice a huge improvement in memory usage. My 256mb slice went from constantly paging and basically crashing at peak hours to rarely paging during peak hours. Apache is a great server and it has its uses but when you are dealing within a low memory environment, a server like nginx is a great way to take a good portion of the load off Apache.&lt;/p&gt;
&lt;p&gt;I hope you enjoyed this guide and that everything made sense. If you are having trouble getting something working, feel free to contact me and I will be glad to help you out or fix any errors within this text.&lt;/p&gt;
&lt;p&gt;Useful nginx resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://wiki.nginx.org/NginxConfiguration&quot;&gt;The official nginx wiki&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/modwsgi/&quot;&gt;mod_wsgi homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://calomel.org/nginx.html&quot;&gt;a pretty great writeup on nginx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
    
    <entry>
        <title>Take over my wonderful Django / Startup job in Waterloo</title>
        <link href="http://bart.whahay.net/blog/2009/03/27/take-my-job.html" />
        <updated>2009-03-27T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2009/03/27/take-my-job</id>
        <content type="html">&lt;p&gt;As of today, it is official; I will no longer be with the wonderful company that is &lt;a href=&quot;http://www.wesellit.ca&quot;&gt;WeSellit&lt;/a&gt;. We will begin the process looking for a full time replacement next week for when I leave on June 22nd, but I&amp;#8217;m starting it today on my little blog here.&lt;/p&gt;
&lt;p&gt;This means there is now a job opening (yes, even in this economy!) for a great startup in Waterloo but first, let me regail you with some feel-good background story.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve been with WeSellit for several years, starting at the company while still in college. We went from being a consignment store for people to drop off their antiques and various hilarious goods like a door with the Mother Mary engraved in it to a full fledged online retailer with three websites selling thousands of product every month that we source ourselves through dealers all across the world.&lt;/p&gt;
&lt;p&gt;The company has morphed countless times, but has finally settled down into a viable business model that has been doing very well even in today&amp;#8217;s economy and I can only see huge success for WeSellit in the future.&lt;/p&gt;
&lt;p&gt;Why am I leaving? The company has little to do with that. I&amp;#8217;ve had an itch to try something different for a while now, and that itch is being scratched by moving to Montreal, a city 8 times the size of my current home town of Kitchener. If I could have it my way, I&amp;#8217;d work at WeSellit from Montreal in some capacity, but the dynamic nature of the business prevents that.&lt;/p&gt;
&lt;p&gt;So this is where we stand now. WeSellit needs someone to replace my primary duties and I need a new job in Montreal!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What cool things will you be able to do at WeSellit?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Create websites and tools using Python, Django, &lt;span class=&quot;caps&quot;&gt;XHTML&lt;/span&gt;, Javascript and mySQL. If you want to use something else, then no problem! As long as you produce results, it&amp;#8217;s all good.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Work with a great team. You have two bosses who know their stuff and how to grow a company. They are also very reasonable and extremely nice. You can&amp;#8217;t beat that. There are two other staff on the team as well, and those guys are awesome.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Continue to help grow a business in Waterloo with your own creativity and ideas. There is very little &amp;#8220;red tape and bullshit&amp;#8221; at WeSellit.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Create videos for our products (See all the ones I made &lt;a href=&quot;http://www.youtube.com/user/wesellitca&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.youtube.com/user/bgniado&quot;&gt;here&lt;/a&gt;), help out with customer phone calls / walk-ins if you&amp;#8217;re tired of programming, or unload a truck full of saunas if you&amp;#8217;re feeling strong.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Really tired? Play with the office golden retriever, Wesley.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are many more benefits of working at WeSellit, but simply sitting there on your butt won&amp;#8217;t tell you more. Interested? &lt;a href=&quot;mailto:bgniado@wesellit.ca&quot;&gt;Send me an email&lt;/a&gt; with your resume and we can begin discussing!&lt;/p&gt;
&lt;p&gt;Of course, now I need a new job. I didn&amp;#8217;t write this post to beg or plead for a job (I&amp;#8217;ll do that later!), but I will make a note that I am looking for one in the Montreal area. I am extremely passionate about my work and focus a huge amount of my knowledge and energy towards my job. I really believe in doing your best every day at the work place and not taking shortcuts because that simply breeds the best kinds of business environments.&lt;/p&gt;
&lt;p&gt;If you are a small (or large) business looking for a passionate programmer / designer / general IT fellow who is fluent in a variety of languages and is always willing to learn more, &lt;a href=&quot;/static/resume.pdf&quot;&gt;check out my resume&lt;/a&gt; and send me a shout. I&amp;#8217;d love to hear from you!&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>About time for a new blog</title>
        <link href="http://bart.whahay.net/blog/2009/03/12/a-new-blog.html" />
        <updated>2009-03-12T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2009/03/12/a-new-blog</id>
        <content type="html">&lt;p&gt;I kind of dissapeared for 3 months from my blog there. Let&amp;#8217;s just say that life has been hectic, here&amp;#8217;s a quick run down of what&amp;#8217;s new:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;I am now a Ciszkowski (as you can clearly see). My old last name of Gniado is no longer attached to me. Reason for the change? &amp;#8220;Gniado&amp;#8221; belonged o some dude who is my biological father, which my mother divorced ages ago. I think that relationship has something to do with the reason why we live in Canada, but who knows!&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;I told my boss I am quitting my current job at &lt;a href=&quot;http://www.wesellit.ca&quot;&gt;WeSellit&lt;/a&gt; in which I am the &lt;span class=&quot;caps&quot;&gt;CTO&lt;/span&gt;. This is a huge change for me as I have been there for several years and have been able to do some amazing things with the company.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;I&amp;#8217;m moving to Montreal with my wonderful girflriend Miranda! This is pretty much the reason why I had to quit my job. We are hoping to move in July if everything goes alright.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;I&amp;#8217;m looking for a job! Well that just makes sense doesn&amp;#8217;t it? Apart from learning French, looking for an apartment, and doing the usual daily activities I have to fit finding a job somewhere in there. So far, I haven&amp;#8217;t spent enough time on it. Please hire me? :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;#8217;ll be writing regurarly again now that I&amp;#8217;m sorting things out and getting cleaned up. This new blog isn&amp;#8217;t anything special but I figured a change would be nice. I&amp;#8217;ll have to slowly re-add some of my more popular posts in the near future.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>100 Things Meme.</title>
        <link href="http://bart.whahay.net/blog/2008/12/23/100-things-meme.html" />
        <updated>2008-12-23T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/12/23/100-things-meme</id>
        <content type="html">&lt;p&gt;Relaxing a bit as I&amp;#8217;m now on my Holidays. Catching up with some reading before I get busy with family things and working on some hobby projects.&lt;/p&gt;
&lt;p&gt;In the mean time, I&amp;#8217;m doing this 100 things meme. You highlight the things you have done. Got this from &lt;a href=&quot;http://blog.michaeltrier.com/2008/12/23/100-things&quot;&gt;Empty Thoughts&lt;/a&gt;, who got it from &lt;a href=&quot;http://leahculver.vox.com/&quot;&gt;Leah Culver&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Started your own blog *&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. Slept under the stars (This is actually a really fun and relaxing thing to do. Highly recommended)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. Played in a band (I do have a guitar though, yay?)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;4. Visited Hawaii&lt;/p&gt;
&lt;p&gt;5. Watched a meteor shower&lt;/p&gt;
&lt;p&gt;6. Given more than you can afford to charity (But I have given)&lt;/p&gt;
&lt;p&gt;7. Been to Disneyland&lt;/p&gt;
&lt;p&gt;&lt;b&gt;8. Climbed a mountain (Nothing large though)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;9. Held a praying mantis (What kid hasn&amp;#8217;t?)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;10. Sang a solo (uh kind of)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;11. Bungee jumped&lt;/p&gt;
&lt;p&gt;12. Visited Paris&lt;/p&gt;
&lt;p&gt;&lt;b&gt;13. Watched a lightning storm&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;14. Taught yourself an art from scratch *&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;15. Adopted a child&lt;/p&gt;
&lt;p&gt;&lt;b&gt;16. Had food poisoning (some kind of fish)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;17. Walked to the top of the Statue of Liberty (didn&amp;#8217;t have time for it when I went to &lt;span class=&quot;caps&quot;&gt;NYC&lt;/span&gt; :( )&lt;/p&gt;
&lt;p&gt;&lt;b&gt;18. Grown your own vegetables&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;19. Seen the Mona Lisa in France&lt;/p&gt;
&lt;p&gt;20. Slept on an overnight train&lt;/p&gt;
&lt;p&gt;&lt;b&gt;21. Had a pillow fight&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;22. Hitch hiked&lt;/p&gt;
&lt;p&gt;&lt;b&gt;23. Taken a sick day when you&amp;#8217;re not ill (duh!)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;24. Built a snow fort (Even an igloo once)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;25. Held a lamb (I .. think)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;26. Gone skinny dipping&lt;/p&gt;
&lt;p&gt;&lt;b&gt;27. Run a Marathon (I really want to this year as I&amp;#8217;m more in shape)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;28. Ridden in a gondola in Venice&lt;/p&gt;
&lt;p&gt;&lt;b&gt;29. Seen a total eclipse&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;30. Watched a sunrise or sunset&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;31. Hit a home run (couldn&amp;#8217;t play paid sports as a child, but with friends .. sure)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;32. Been on a cruise&lt;/p&gt;
&lt;p&gt;&lt;b&gt;33. Seen Niagara Falls in person&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;34. Visited the birthplace of your ancestors (soon!)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;35. Seen an Amish community&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;36. Taught yourself a new language (Not born English, but I am learning French at the moment :)&lt;/b&gt;)&lt;/p&gt;
&lt;p&gt;37. Had enough money to be truly satisfied&lt;/p&gt;
&lt;p&gt;38. Seen the Leaning Tower of Pisa in person&lt;/p&gt;
&lt;p&gt;&lt;b&gt;39. Gone rock climbing&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;40. Seen Michelangelo&amp;#8217;s David&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;41. Sung karaoke *&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;42. Seen Old Faithful geyser erupt&lt;/p&gt;
&lt;p&gt;43. Bought a stranger a meal at a restaurant&lt;/p&gt;
&lt;p&gt;44. Visited Africa&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;45. Walked on a beach by moonlight *&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;46. Been transported in an ambulance&lt;/p&gt;
&lt;p&gt;47. Had your portrait painted&lt;/p&gt;
&lt;p&gt;&lt;b&gt;48. Gone deep sea fishing&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;49. Seen the Sistine Chapel in person&lt;/p&gt;
&lt;p&gt;50. Been to the top of the Eiffel Tower in Paris&lt;/p&gt;
&lt;p&gt;51. Gone scuba diving or snorkeling&lt;/p&gt;
&lt;p&gt;&lt;b&gt;52. Kissed in the rain&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;53. Played in the mud&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;54. Gone to a drive-in theater (We were going to one day but we COULDN&amp;#8217;T find it!)&lt;/p&gt;
&lt;p&gt;55. Been in a movie&lt;/p&gt;
&lt;p&gt;56. Visited the Great Wall of China&lt;/p&gt;
&lt;p&gt;57. Started a business (Not really, just hobby projects)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;58. Taken a martial arts class&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;59. Visited Russia&lt;/p&gt;
&lt;p&gt;&lt;b&gt;60. Served at a soup kitchen&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;61. Sold Girl Scout Cookies&lt;/p&gt;
&lt;p&gt;62. Gone whale watching (oh god want to so badly)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;63. Got flowers for no reason&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;64. Donated blood, platelets or plasma&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;65. Gone sky diving&lt;/p&gt;
&lt;p&gt;66. Visited a Nazi Concentration Camp&lt;/p&gt;
&lt;p&gt;67. Bounced a check&lt;/p&gt;
&lt;p&gt;68. Flown in a helicopter&lt;/p&gt;
&lt;p&gt;&lt;b&gt;69. Saved a favorite childhood toy&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;70. Visited the Lincoln Memorial&lt;/p&gt;
&lt;p&gt;&lt;b&gt;71. Eaten caviar&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;72. Pieced a quilt&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;73. Stood in Times Square *&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;74. Toured the Everglades&lt;/p&gt;
&lt;p&gt;75. Been fired from a job&lt;/p&gt;
&lt;p&gt;76. Seen the Changing of the Guards in London&lt;/p&gt;
&lt;p&gt;77. Broken a bone&lt;/p&gt;
&lt;p&gt;78. Been on a speeding motorcycle&lt;/p&gt;
&lt;p&gt;79. Seen the Grand Canyon in person&lt;/p&gt;
&lt;p&gt;80. Published a book&lt;/p&gt;
&lt;p&gt;81. Visited the Vatican&lt;/p&gt;
&lt;p&gt;82. Bought a brand new car&lt;/p&gt;
&lt;p&gt;83. Walked in Jerusalem&lt;/p&gt;
&lt;p&gt;84. Had your picture in the newspaper&lt;/p&gt;
&lt;p&gt;85. Read the entire Bible&lt;/p&gt;
&lt;p&gt;86. Visited the White House&lt;/p&gt;
&lt;p&gt;87. Killed and prepared an animal for eating&lt;/p&gt;
&lt;p&gt;88. Had chickenpox&lt;/p&gt;
&lt;p&gt;89. Saved someone&amp;#8217;s life&lt;/p&gt;
&lt;p&gt;90. Sat on a jury&lt;/p&gt;
&lt;p&gt;&lt;b&gt;91. Met someone famous&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;92. Joined a book club&lt;/p&gt;
&lt;p&gt;&lt;b&gt;93. Lost a loved one&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;94. Had a baby&lt;/p&gt;
&lt;p&gt;95. Seen the Alamo in person&lt;/p&gt;
&lt;p&gt;96. Swam in the Great Salt Lake&lt;/p&gt;
&lt;p&gt;97. Been involved in a law suit&lt;/p&gt;
&lt;p&gt;&lt;b&gt;98. Owned a mobile phone&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;99. Been stung by a bee&lt;/p&gt;
&lt;p&gt;&lt;b&gt;100. Read an entire book in one day (Nothing lengthy obviously)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Looking at my list, makes me realize how much I have not travelled, mostly to my home continent (Europe). I will, but not yet .. still young :)&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Quick Django Tip: Safe and easy database data conversion</title>
        <link href="http://bart.whahay.net/blog/2008/12/11/quick-django-tip-safe-and-easy-database-data-conversion.html" />
        <updated>2008-12-11T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/12/11/quick-django-tip-safe-and-easy-database-data-conversion</id>
        <content type="html">&lt;p&gt;One thing that you may find yourself doing is migrating your old projects to Django. Sometimes, this can be fairly complex but if it&amp;#8217;s a case of moving data from an old database to your Django models it&amp;#8217;s pretty simple.&lt;/p&gt;
&lt;p&gt;In this example, I am taking data from a mySQL database that held data for a &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; application and converting it to Django models. What I do is run the data through a ModelForm so that I can test for validation:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/p&gt;
&lt;pre&gt;

# We use the MySQLdb module to connect to a different database to get our old data.

db = MySQLdb.connect(user=&quot;me&quot;, passwd=&quot;password&quot;, db=&quot;mydatabase&quot;)

c = db.cursor(DictCursor)&amp;lt;/code&amp;gt;



c.execute(&quot;SELECT field1, field2, FROM some_table&quot;)

rows = c.fetchall()



for r in rows:

     form = AddItemForm(r)

     if form.is_valid():

         obj = Item(**form.cleaned_data)

         obj.save()

     else:

         # You probably want to log here instead of using print

         # form.errors will contain the errors, which you can log as well.

         print(&quot;Could not add Item %s&quot; % r['field1'])

&lt;/pre&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And that&amp;#8217;s it! This is of course a very crude and simple example but it gets the job done and I find it much better then simply passing in data to my model. With the form, it allows me to catch the errors that the end-user may hit when they actually use the form in the application so it&amp;#8217;s a win-win.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Creating My Django Server.</title>
        <link href="http://bart.whahay.net/blog/2008/12/07/creating-my-django-server.html" />
        <updated>2008-12-07T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/12/07/creating-my-django-server</id>
        <content type="html">&lt;p&gt;&lt;em&gt;(Note: This article is essentially a walk through of what I did to setup Django on a basic Ubuntu Intrepid server. Any comments or suggestions on improving my setup are more then welcome as I do not claim to be an expert at setting up web servers, just a tinkerer)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Whether you&amp;#8217;re writing your application in Python, Ruby, or even &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; (Yes, even &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;) it feels good to know what&amp;#8217;s exactly powering your software. Earlier this week I put together the setup for one of my Django sites and this guide will go through the process. The services are running off a 256mb slice from &lt;a href=&quot;http://www.slicehost.com&quot;&gt;Slicehost&lt;/a&gt;, which I highly recommend.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What we&amp;#8217;re running here:&lt;/strong&gt; The end result is an Ubuntu Intrepid server using Apache2 with mod_python to serve Django, and lighttpd to serve media/static files. Memcache is used as a caching backend and mySQL 5.0 is our primary database. This is a very common Django setup and you will find similar guides all over the net. This is just my take :)&lt;/p&gt;
&lt;h3&gt;Getting the packages we need.&lt;/h3&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;SSH&lt;/span&gt; to your server, authenticate and run the following commands to install our necessary packages:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
    $ sudo aptitude install apache2 apache2.2-common apache2-utils

    $ sudo aptitude install libapache2-mod-python

    $ sudo aptitude install python-setuptools # You need this for a few python modules we need to install

    $ sudo aptitude install mysql-server mysql-client libmysqlclient15-dev

    $ sudo aptitude install memcached

    $ sudo aptitude install python-mysqldb

    $ sudo aptitude install lighttpd&amp;lt;/code&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;
&lt;h3&gt;Setting up MySQL.&lt;/h3&gt;
&lt;p&gt;Setting up mySQL is rather simple. You already supplied a root password when you were initially installing the packages so all we really need to do now is create a database and grant access to a non-root user. This is very simple:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ mysql -uroot -p

    mysql&amp;gt; CREATE DATABASE mysite;

    mysql&amp;gt; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON mysite.* TO 'foo'@'localhost'  IDENTIFIED BY 'password';
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;As I said, very simple. We create an initial database and then use &lt;span class=&quot;caps&quot;&gt;GRANT&lt;/span&gt; to give us a user/password combo we can connect with. If you have an existing set of mysql data, you can now dump it into your database.&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t fancy myself an expert in mySQL user permissions so I recommend viewing the &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/adding-users.html&quot;&gt;mySQL 5 Grant Documentation&lt;/a&gt; for more information. You may also want to take a look at your /etc/mysql/my.cnf configuration file to modify mySQL settings depending on your sites load.&lt;/p&gt;
&lt;h3&gt;Configure &amp;amp; run memcached as a daemon&lt;/h3&gt;
&lt;p&gt;Installing memcached is optional as you may not need or want caching, but it&amp;#8217;s generally good practice to have it with your Django sites. To run it, we are going to execute this command:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ memcached -u www-data -p 11211 -m 32 -d
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;What this does is tells memcached to run under the user &lt;em&gt;www-data&lt;/em&gt; which is the user Apache runs under on Ubuntu. We run it on port 11211 (default), and give it 32mb of memory. You can adjust this memory to be larger or smaller depending on your machine and traffic of websites. As I only have 256mb of &lt;span class=&quot;caps&quot;&gt;RAM&lt;/span&gt; and a single (small) site, this is sufficient. Finally, the -d flag runs it as a daemon.&lt;/p&gt;
&lt;p&gt;Now we have to install some memcached python bindings. &lt;a href=&quot;http://gijsbert.org/cmemcache/&quot;&gt;cmemcache&lt;/a&gt; is a popular choice but I can&amp;#8217;t get it to work when installing memcached from a package (only from source, which we didn&amp;#8217;t do), so we opt for the second best: python-memcached. Simply grab it and install it:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ wget ftp://ftp.tummy.com/pub/python-memcached/python-memcached-latest.tar.gz

    $ tar -zxvf python-memcached-latest.tar.gz

    $ cd python-memcached-1.43

    $ sudo python setup.py install
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;That&amp;#8217;s pretty much it for memcached! The rest of the work is involved within your Django application which you can &lt;a href=&quot;http://docs.djangoproject.com/en/dev/topics/cache/#topics-cache&quot;&gt;read all about from the official Django documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Setup Django.&lt;/h3&gt;
&lt;p&gt;Of course, we actually need to get Django! You can fetch it in a variety of ways from &lt;a href=&quot;http://www.djangoproject.com/download/&quot;&gt;the download page&lt;/a&gt;. Personally, I enjoy using the &lt;span class=&quot;caps&quot;&gt;SVN&lt;/span&gt; trunk as it&amp;#8217;s pretty stable while having the benefit of new features and bug fixes as soon as they are done. I like setting up Django in /home and then linking it to site-packages. This allows me to not worry much about permissions and everything just seems easier. Plus I love the ~ accessibility :)&lt;/p&gt;
&lt;p&gt;First, let&amp;#8217;s give our www-data user (see above, it&amp;#8217;s our Apache user) access to our files.&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ sudo gpasswd -a www-data yourusername # In my case, it's admin

    $ chmod g+w ~
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Now, let&amp;#8217;s get Django from trunk and setup some directories for our projects.&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ cd ~

    $ mkdir projects

    $ mkdir apps # This is not used in the tutorial, but this is where I place my portable django apps

    $ svn co http://code.djangoproject.com/svn/django/trunk/ django

    $ sudo ln -s `pwd`/django/django /usr/lib/python2.5/site-packages&amp;lt;/code&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;That&amp;#8217;s it for that. Django is now recognized as a package in Python&amp;#8217;s sys.path&lt;/p&gt;
&lt;h3&gt;Setting up your project with Apache.&lt;/h3&gt;
&lt;p&gt;We&amp;#8217;re almost there! Now, we finally need to tell Apache and mod_python that we have a Django project we want them to serve. If you have an existing project, simply fetch it from your f&lt;a href=&quot;http://www.github.com&quot;&gt;avourite&lt;/a&gt; &lt;a href=&quot;http://beanstalkapp.com&quot;&gt;version&lt;/a&gt; &lt;a href=&quot;http://launchpad.net&quot;&gt;control&lt;/a&gt; service. If not, you can start your own project quite simply:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ cd ~/projects

    $ ~/django/django/bin/django-admin.py startproject myproject
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;If you are starting from scratch, you will need to modify your settings.py file to match our setup of a mySQL database and the usage of memcached. There&amp;#8217;s no point in me iterating over this, as the &lt;a href=&quot;http://docs.djangoproject.com/en/dev/&quot;&gt;Django docs&lt;/a&gt; explain it quite well. So let&amp;#8217;s get right down to it and setup our domain in Apache.&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ sudo vim /etc/apache2/sites-available/myproject.tld
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;And then paste the following, modifying as needed:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    &amp;lt;VirtualHost *&amp;gt;
        ServerName www.myproject.com
        ServerAlias myproject.com

        DocumentRoot /var/www/myproject.com

        CustomLog /var/log/apache2/myproject.com.access.log combined
        ErrorLog /var/log/apache2/myproject.com.error.log

        SetHandler python-program
        PythonHandler django.core.handlers.modpython
        SetEnv DJANGO_SETTINGS_MODULE myproject.settings
        PythonDebug On
        PythonPath &quot;['/path/to/my/projects/parent_dir'] + sys.path&quot;

        &amp;lt;Location &quot;/media&quot;&amp;gt;
            SetHandler None
        &amp;lt;/Location&amp;gt;

    &amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Some quick notes:&lt;/p&gt;
&lt;p&gt;- Replace /path/to/my/projects/parent_dir and myproject.settings to the relative values. The path is to your projects &lt;span class=&quot;caps&quot;&gt;PARENT&lt;/span&gt; directory. So in my case, it would be /home/bartek/projects&lt;/p&gt;
&lt;p&gt;- /media is the directory where our django&amp;#8217;s admin media will be linked to.&lt;/p&gt;
&lt;p&gt;- Depending on your &lt;span class=&quot;caps&quot;&gt;DNS&lt;/span&gt; settings, you may need to adjust the wildcard on the VirtualHost declaration.&lt;/p&gt;
&lt;p&gt;Finally, let&amp;#8217;s enable the site and setup the admin media link:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ sudo ln -s /etc/apache2/sites-available/myproject.com /etc/apache2/sites-enabled/myproject.com

    $ sudo ln -s ~/django/django/contrib/admin/media /var/www/myproject.com/

    $ sudo apache2ctl restart # Restart Apache
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;#8230;&amp;#8230;.And if you did everything right you should see either your Django project running or the default &amp;#8220;It works!&amp;#8221; Django page. Congrats!&lt;/p&gt;
&lt;h3&gt;Setting up lighttpd&lt;/h3&gt;
&lt;p&gt;Lighttpd setup is optional, but is highly recommended. It&amp;#8217;ll keep your site running smoothly and doesn&amp;#8217;t bog down Apache/mod_python trying to serve both Django and media.&lt;/p&gt;
&lt;p&gt;First, you&amp;#8217;ll have to edit Lighttpd&amp;#8217;s settings to run on a different port. The default is 80, which is what our Apache setup is running on:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ sudo vim /etc/lighttpd/lighttpd.conf
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Uncomment the server.port line (around line 70)&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    server.port               = 81
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Next, enable the mod_evhost module. Simply uncomment it in the server.modules variable near the top of the config file. mod_evhost allows you to use a different directory for the static media depending on the domain name. Now, add the following line which basically says requests for &lt;em&gt;myproject.com&lt;/em&gt; should look in this directory. I did this on the 124th line, right after the evhost patterns.&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $HTTP[&quot;host&quot;] =~ &quot;myproject\\.com&quot; {
        evhost.path-pattern = &quot;/home/admin/projects/myproject/static/&quot;
    }
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Just so you&amp;#8217;re not confused, I generally place my media in my project directory like I did above but you can have it anywhere you want. A commonplace is under /var/www/myproject.com&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; If you are under Debian/Ubuntu and your site has a &amp;#8220;images&amp;#8221; directory, the default lighttpd config may not serve this. Some Debian/Ubuntu configurations reference &amp;#8220;images&amp;#8221; as a dir for the Debian policy and all your images will be broken unless you remove this reference. I found it at around line 160.&lt;/p&gt;
&lt;p&gt;Start lighttpd:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ sudo /etc/init.d/lighttpd start
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;And verify it is working by visiting http://myproject.com:81. You should see either your Apache or Lighttpd placeholder page.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configure Apache to use Lighttpd&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To serve files using Lighttpd from Apache we need to enable proxy on Apache. There are other methods of doing this, but I&amp;#8217;ve found this the best documented, and hey &amp;#8212; it works great!&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/

    $ ln -s /etc/apache2/mods-available/proxy_connect.load /etc/apache2/mods-enabled/

    $ ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Or just as easily type &lt;em&gt;sudo a2enmod proxy proxy_connect proxy_httpd&lt;/em&gt; if you are under Ubuntu. Finally, unsecured proxies are used by spammers so we want to configure ours to only accept local connections. Simply do this:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ sudo vim /etc/apache2/mods-available/proxy.conf
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;And modify the wildcard in &amp;lt;VirtualHost&amp;gt; to state the local host like so:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
    AddDefaultCharset off

    Order deny,allow

    Deny from all

    Allow from 127.0.0.1
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Finally, configure the VirtualHost to use the Proxy&lt;/strong&gt;&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
    $ sudo vim /etc/apache2/sites-available/myproject.com
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Add this somewhere in your &amp;lt;VirtualHost&amp;gt; declaration&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    ProxyRequests Off

    ProxyPreserveHost On

    ProxyPass /static http://127.0.0.1:81/

    ProxyPassReverse / http://127.0.0.1:81/
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;And with that setup, reload and restart Apache and Lighttpd should now be serving your static media!&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ sudo /etc/init.d/apache2 reload

    $ sudo /etc/init.d/apache2 restart
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;To double check if it is, you can use the lovely Firebug plugin and just look under the &amp;#8220;Net&amp;#8221; tab or just use curl:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
    $ curl -I http://myproject.com

    $ curl -I http://myproject.com:81
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Curl will send back a response on what is serving it. You&amp;#8217;ll see the first one shows Apache/mod_python, and the second line should return a lighttpd reference.&lt;/p&gt;
&lt;h3&gt;It works!&lt;/h3&gt;
&lt;p&gt;And that about wraps it up! There are many things you can do to customize the services running your software but this is a basic setup that works great for small and medium-scale sites. From here, you can extend this by setting up &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; for other apps, and securing your server. I recommend the &lt;a href=&quot;http://articles.slicehost.com&quot;&gt;articles on Slicehost&lt;/a&gt; for some great walk throughs on securing your server.&lt;/p&gt;
&lt;h3&gt;References &amp;amp; Credits:&lt;/h3&gt;
&lt;p&gt;Of course, there are many people who have done this long before me and I got a lot of information from. These posts outline what I did, but in their own manner and some have other useful information. I recommend checking them all out as they are great at what they do:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;http://ventanazul.com/webzine/trackback/124&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://lethain.com/entry/2007/jul/13/creating-my-dream-server-django/&quot;&gt;http://lethain.com/entry/2007/jul/13/creating-my-dream-server-django/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.inerciasensorial.com.br/2007/06/10/perils-of-software-development/lighttpd-with-apache/&quot;&gt;http://www.inerciasensorial.com.br/2007/06/10/perils-of-software-development/lighttpd-with-apache/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://articles.slicehost.com/&quot;&gt;http://articles.slicehost.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;Thanks for reading!&lt;/div&gt;</content>
    </entry>
    
    <entry>
        <title>I became a headliner. In one sense of the word</title>
        <link href="http://bart.whahay.net/blog/2008/11/06/i-became-a-headliner-in-one-sense-of-the-word.html" />
        <updated>2008-11-06T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/11/06/i-became-a-headliner-in-one-sense-of-the-word</id>
        <content type="html">&lt;p&gt;Growing up I was always interested in discovering new things, researching what I already knew and just keeping my mind busy in general.&lt;/p&gt;
&lt;p&gt;With the coming of things like syncdicated content on the web, where I can get an account and use Google Reader, to easily read content from across the web, my mind freakin&amp;#8217; exploded. I fell in love with this, and have been an avid reader for a few years now.&lt;/p&gt;
&lt;p&gt;There is however, one problem. Over the course of this time, I began adding more and more feeds to my list. I didn&amp;#8217;t &lt;em&gt;want&lt;/em&gt;, I &lt;strong&gt;needed&lt;/strong&gt; input. I craved it. I managed to rack up an impressive amount of feeds that I would read daily. I got my routine down. Once in the morning, once around lunch, and once in the evening&lt;/p&gt;
&lt;p&gt;It worked well, but I began noticing a horrible trend.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I became a headline reader.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;All this content coming in and half of what I was reading was just headlines. New species found in the Ocean? Cool, but I would not go past that. Bombs in Syria? Damn, that sucks. But what more do I know? Not much.&lt;/p&gt;
&lt;p&gt;This became a problem. I began reading all this, not really taking it in. I almost felt like a drone at times. Pressing J for the next story, J, J, J. Ok phew, done. Can go back to other things now.&lt;/p&gt;
&lt;p&gt;Once I realized what was happening I changed my ways. I removed some feeds that contained mostly noise, and kept the good ones. Then, I added some new ones that looked very interesting and I once again began &lt;strong&gt;reading&lt;/strong&gt;. Really, actually reading. Line for line, word by word. No more headlines.&lt;/p&gt;
&lt;p&gt;Now, I am still doing the same. I&amp;#8217;m actually reading, and it feels good. Basically, what advice I can give is try not to feed yourself all the information possible. You can&amp;#8217;t be great and knowledgeable about everything, but you sure can be awesome at a handful of things. The same applies in this scenario. Take the time to truly read the stories, comment on them, engage yourself and you will find that you are getting back a lot more then if you&amp;#8217;re just scrolling through the headlines.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Xclip - Using the clipboard from the command line</title>
        <link href="http://bart.whahay.net/blog/2008/10/09/xclip-using-the-clipboard-from-the-command-line.html" />
        <updated>2008-10-09T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/10/09/xclip-using-the-clipboard-from-the-command-line</id>
        <content type="html">&lt;p&gt;Today I was setting up an account on &lt;a href=&quot;http://www.github.com&quot;&gt;Github&lt;/a&gt; and I needed to supply them with my ssh public key. The recommended method was to use something like pbcopy, which is on Mac OS X to copy the contents of &lt;span class=&quot;caps&quot;&gt;STDIN&lt;/span&gt; to your clipboard. This was to make sure you don&amp;#8217;t have any extra lines or spaces when you do your copy to the clipboard as public keys need to be exact.&lt;/p&gt;
&lt;p&gt;This is where &lt;strong&gt;xclip&lt;/strong&gt; comes in. xclip allows you to pipe content into your clipboard directly from the command line as well as outputting your clipboard. In terms of my example, it&amp;#8217;s as simple as this:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;cat id_rsa.pub | xclip&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s only one problem with this example. Piping simply to xclip will only fill the clipboard you can use via xclip &lt;del&gt;o itself. Not your usual CTRL+V, or Right Click&lt;/del&gt;&amp;gt;Paste board. So how do you do that?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;cat id_rsa.pub | xclip -selection c&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now when I go into Firefox or anywhere else, hitting CTRL+V I get the contents of id_rsa.pub. You can do this with &lt;span class=&quot;caps&quot;&gt;ANY&lt;/span&gt; standard input to your terminal. File listings, file diff&amp;#8217;s, drive space, etc .. you are not very limited.&lt;/p&gt;
&lt;p&gt;Since I never plan to use xclip -o, I made a simple alias so I don&amp;#8217;t have to constantly type -selection c, like so:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;alias xclip=&amp;#8216;xclip -selection c&amp;#8217; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now whenever I use the xclip pipe like I did in the first example it goes straight to my regular clipboard.&lt;/p&gt;
&lt;p&gt;You may need to install xclip as it does not come default with Ubuntu. The xclip manual (man xclip) has a variety of other information I did not cover in my post, but this is all I personally need from it.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Best run of configure ever</title>
        <link href="http://bart.whahay.net/blog/2008/10/08/best-run-of-configure-ever.html" />
        <updated>2008-10-08T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/10/08/best-run-of-configure-ever</id>
        <content type="html">&lt;p&gt;Normally when you have to build from source and run a ./configure it&amp;#8217;s usually boring old work, maybe a few fun options you have to set for your environment but eh, not my cup of tea. Thankfully, the guys at &lt;a href=&quot;http://nmap.org/&quot;&gt;nmap&lt;/a&gt; made my morning just that much brighter by ending the configure with this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://bart.whahay.net/wp-content/uploads/2008/10/best-config-ever.jpg&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-174&quot; title=&quot;best-config-ever&quot; src=&quot;http://bart.whahay.net/wp-content/uploads/2008/10/best-config-ever.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Love it. Made me chuckle, first time I&amp;#8217;ve ever noticed something like this (to be fair I generally don&amp;#8217;t build from source unless I need to)&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Two simple techniques to make your Django projects ultra portable</title>
        <link href="http://bart.whahay.net/blog/2008/10/03/two-simple-techniques-to-make-your-django-projects-ultra-portable.html" />
        <updated>2008-10-03T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/10/03/two-simple-techniques-to-make-your-django-projects-ultra-portable</id>
        <content type="html">&lt;p&gt;After moving around my Django projects between Windows and Linux boxes and different mySQL setups I spent some time looking for the best solution on making my project portable so I can throw it around wherever I want without much worry. Both these solutions are some-what known as I got them from the #django irc room (a super awesome resource!) but not much documentation is out on them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1) Setting a ROOT_DIR and using it in settings.py&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is very simple. You want to setup a ROOT_DIR variable that basically consists of Python code that figures out what directory the file is in. The code is very simple:&lt;/p&gt;
&lt;address&gt;&lt;span style=&quot;line-height: 18px; white-space: pre; font-family: 'Courier New';&quot;&gt;&lt;span style=&quot;line-height: 19px; white-space: normal; font-family: 'Lucida Grande';&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;i&lt;/span&gt;&lt;/span&gt;&lt;em&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;mport os&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/address&gt; &lt;address&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;ROOT_DIR = os.path.dirname(&lt;i&gt;file&lt;/i&gt;)&lt;/span&gt;&lt;/address&gt;&lt;address&gt;
&lt;p&gt;&lt;/address&gt; &lt;address&gt;&lt;/address&gt; &lt;address&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;Place this on top of your projects settings.py and then include it in the various variables later in the file, like TEMPLATE_DIRS will have an entry &lt;em&gt;ROOT_DIR + &amp;#8216;/templates&amp;#8217; &lt;/em&gt;or you can drop the hard-coded &amp;#8216;/&amp;#8217; and do something like &lt;em&gt;os.path.join(ROOT_DIR, &amp;#8216;templates&amp;#8217;)&lt;/em&gt; which takes out a tiny worry of including, or not including a slash in your paths.&lt;/span&gt;&lt;/address&gt;&lt;address&gt;&lt;/p&gt;
&lt;p&gt;&lt;/address&gt; &lt;address&gt; &lt;/address&gt; &lt;address&gt;(Thanks to SmileyChris in the comments for optimizing my implementation on this, as well as adding an additional tip .. check below for it!)&lt;/p&gt;
&lt;p&gt;&lt;/address&gt;&lt;strong&gt;2) Using a local_settings.py for easy moving around between environments&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Another very simple but super useful trick. This allows you to over-ride any variables in settings.py for that specific machine. A simple use case for this would be that I have my development environment here on my Ubuntu machine but when I commit my project to &lt;span class=&quot;caps&quot;&gt;SVN&lt;/span&gt; on the Debian server the mySQL details are different as it&amp;#8217;s an entirely different server. So what I do is at the bottom of settings.py:&lt;/p&gt;
&lt;address&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;try:&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/address&gt; &lt;address&gt;&lt;span style=&quot;font-style: normal;&quot;&gt; from local_settings import *&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/address&gt; &lt;address&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;except ImportError, exp:&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/address&gt; &lt;address&gt;&lt;span style=&quot;font-style: normal;&quot;&gt; pass # You can do something here, like write to a log if  you wish, but it&amp;#8217;s not necessary&lt;/span&gt;&lt;/address&gt;&lt;p&gt;Then, setup settings.py so it matches your production environments settings (In this case, my Debian server) and create a new file called local_settings.py in the same directory. In this file, you can just place whatever vairables you want to over-ride. I have variables over-riding my MySQL and &lt;span class=&quot;caps&quot;&gt;DEBUG&lt;/span&gt; settings to fit my local development (Ubuntu) environment. The key here is to not commit/send local_settings.py to production.&lt;/p&gt;
&lt;p&gt;And that&amp;#8217;s about it. Those two small changes make it very easy for my projects to move around. It makes it very nice to be able to commit even settings.py to your production environment and not worry about values not being correct.&lt;/p&gt;
&lt;p&gt;If you know of any other good portability techniques I&amp;#8217;d be glad to hear them in the comments section below, I&amp;#8217;m still learning Django!&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Sending HTML emails to multiple subscribers via Django</title>
        <link href="http://bart.whahay.net/blog/2008/09/24/sending-html-emails-to-multiple-subscribers-via-django.html" />
        <updated>2008-09-24T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/09/24/sending-html-emails-to-multiple-subscribers-via-django</id>
        <content type="html">&lt;p&gt;(&lt;strong&gt;Update&lt;/strong&gt;: Please note I do not advocate spamming or any tomfoolery at all. See the comments below for some great discussion on sending out bulk emails correctly via setting up your &lt;span class=&quot;caps&quot;&gt;DNS&lt;/span&gt; and &lt;span class=&quot;caps&quot;&gt;SMTP&lt;/span&gt; Servers correctly)&lt;/p&gt;
&lt;p&gt;Today I had the fun little project of building a very simple message sending system in Django that would fetch emails from a database of subscribers, check for the latest message in the queue, and send it out.&lt;/p&gt;
&lt;p&gt;Sounds easy? Well yes, it is. But there&amp;#8217;s a few things that Django can do to make the email sending much smarter.&lt;/p&gt;
&lt;p&gt;First off, sending &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; emails in Django requires you to set an alternate content type. This is easily done using the &lt;em&gt;django.core.mail.EmailMultiAlternatives &lt;/em&gt;class which is very similar to using the EmailMessage class but provides a few more options for &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; emails. Here&amp;#8217;s a simple code snippet using this:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;
&lt;pre&gt;&amp;lt;span class=&quot;n&quot;&amp;gt;subject&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;n&quot;&amp;gt;from_email&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;n&quot;&amp;gt;to&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;o&quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;s&quot;&amp;gt;'Say Hello to our new website!'&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;s&quot;&amp;gt;'service@mycompany.com'&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;,&amp;lt;/span&amp;gt; &lt;/pre&gt;

&lt;pre&gt;&amp;lt;span class=&quot;s&quot;&amp;gt;                                          'someuser@gmail.com'&amp;lt;/span&amp;gt;

&amp;lt;span class=&quot;n&quot;&amp;gt;text_content&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;o&quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;s&quot;&amp;gt;'This is an important message.'&amp;lt;/span&amp;gt;

&amp;lt;span class=&quot;n&quot;&amp;gt;html_content&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;o&quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;s&quot;&amp;gt;'&amp;amp;lt;p&amp;amp;gt;This is an &amp;amp;lt;strong&amp;amp;gt;important&amp;amp;lt;/strong&amp;amp;gt; message.&amp;amp;lt;/p&amp;amp;gt;'&amp;lt;/span&amp;gt;

&amp;lt;span class=&quot;n&quot;&amp;gt;msg&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;o&quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;n&quot;&amp;gt;EmailMultiAlternatives&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;n&quot;&amp;gt;subject&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;n&quot;&amp;gt;text_content&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;n&quot;&amp;gt;from_email&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;p&quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;n&quot;&amp;gt;to&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;])&amp;lt;/span&amp;gt;

&amp;lt;span class=&quot;n&quot;&amp;gt;msg&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;o&quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;n&quot;&amp;gt;attach_alternative&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;n&quot;&amp;gt;html_content&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;s&quot;&amp;gt;&quot;text/html&quot;&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;)&amp;lt;/span&amp;gt;

&amp;lt;span class=&quot;n&quot;&amp;gt;msg&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;o&quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;n&quot;&amp;gt;send&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This very simple example sends an email to someuser@gmail.com with an alternative minetype for html. What this allows is for people who have &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;-enabled email clients they receive the full on &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; view, while people who are stuck with text based emails simply get a nice clean cut text email instead of html garble.&lt;/p&gt;
&lt;p&gt;Django offers another class that makes it extremely efficient on sending emails to mass amounts of users. Now there is little documentation on this so I do not know how far you can stretch this (hundreds, or thousands of emails?) but it has worked well for me.&lt;/p&gt;
&lt;p&gt;It is the &lt;em&gt;SMTPConnection&lt;/em&gt; class also found in &lt;em&gt;django.core.mail&lt;/em&gt;. With it, you can store all your EmailMessage()&amp;#8216;s or your EmailMultiAlternatives()&amp;#8217;s in a list of data and then send them all using one single connection instead of re-connecting each time. This is similar to using &lt;em&gt;send_mass_mail&lt;/em&gt; but that is just a thin wrapper that does not support alternative mimetypes like &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; and other goodies. Here&amp;#8217;s a simple code snipper:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre&gt;&amp;lt;span class=&quot;c&quot;&amp;gt;# If you do not provide any connection settings, it uses the default found in settings.py&amp;lt;/span&amp;gt;&lt;/pre&gt;

&lt;pre&gt;&amp;lt;span class=&quot;n&quot;&amp;gt;connection&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;o&quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;n&quot;&amp;gt;SMTPConnection&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;()&amp;lt;/span&amp;gt;

&amp;lt;span class=&quot;n&quot;&amp;gt;connection&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;o&quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;n&quot;&amp;gt;send_messages&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;n&quot;&amp;gt;messages&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;p&quot;&amp;gt;) # messages can be a list of EmailMessage objects&amp;lt;/span&amp;gt;&lt;/pre&gt;
&lt;p&gt;So those are two great classes that make email sending just that much simpler in Django. How would you put this all together? Here&amp;#8217;s a simple example script that fetches an email message from a model named &lt;em&gt;Message&lt;/em&gt;, some subscribers, and then sends out a mass email to them. In this script, Message is a model that holds the actual &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; email and Subscribers is a list of our subscribers. To keep it simple, we only work with their email&lt;/p&gt;
&lt;pre&gt;from django.core.mail import  EmailMultiAlternatives, SMTPConnection&lt;/pre&gt;

&lt;pre&gt;from mysite.email_app.models import Subscriber, Message&lt;/pre&gt;

&lt;pre&gt;message = Message.objects.order_by('-id')[:1][0] # Fetch latest message in our list of emails&lt;/pre&gt;

&lt;pre&gt;if not message.is_sent:&lt;/pre&gt;

&lt;pre&gt;      subscribers = Subscriber.objects.all()&lt;/pre&gt;

&lt;pre&gt;      emails_to_send = []&lt;/pre&gt;

&lt;pre&gt;      for s in subscribers:&lt;/pre&gt;

&lt;pre&gt;           msg = EmailMultiAlternatives(message.subject, message.body_text, 'myemail@foo.com', &lt;/pre&gt;

&lt;pre&gt;                                                                     [s.email])&lt;/pre&gt;

&lt;pre&gt;           # Attach the html version of our email to the email&lt;/pre&gt;

&lt;pre&gt;           msg.attach_alternative(message.body_html, &quot;text/html&quot;)&lt;/pre&gt;

&lt;pre&gt;           emails_to_send.append( msg )&lt;/pre&gt;

&lt;pre&gt;      # Setup a single SMTPConnection to send all emails instead of re-connecting each time&lt;/pre&gt;

&lt;pre&gt;      connection = SMTPConnection()&lt;/pre&gt;

&lt;pre&gt;      connection.send_messages(emails_to_send)&lt;/pre&gt;

&lt;pre&gt;      message.is_sent = True&lt;/pre&gt;

&lt;pre&gt;      message.save()&lt;/pre&gt;
&lt;p&gt;That&amp;#8217;s just a very simple example and if you know any ounce of Django I hope you can understand it. You could also add something like a send_time to your Message model and then run a daily cron script to check if an email has to go out to your user base. This is basically the setup I have now at the office and it works great.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;For a full reference, see: &lt;a href=&quot;http://docs.djangoproject.com/en/dev/topics/email/&quot;&gt;Django | Sending e-amil&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre&gt; &lt;/pre&gt;</content>
    </entry>
    
    <entry>
        <title>Blog to watch: Kitchener - Waterloo Conscience + Veg Van!</title>
        <link href="http://bart.whahay.net/blog/2008/09/21/blog-to-watch-kitchener-waterloo-conscience-veg-van.html" />
        <updated>2008-09-21T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/09/21/blog-to-watch-kitchener-waterloo-conscience-veg-van</id>
        <content type="html">&lt;p&gt;Great blog discovery today that is just starting off but looks good for us Kitchener Waterloo folks who just love all that alternative energy goodness.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.greenwannabe.blogspot.com/&quot;&gt;Kitchener &amp;#8211; Waterloo Conscience&lt;/a&gt; is the name, and it&amp;#8217;s devoted to following a green life style and &amp;#8220;conscience&amp;#8221;, specifically focusing on the K-W Region. His latest take, on the new Bay in Conestoga Mall is a great look at what they have done to really promote the green attitude. I didn&amp;#8217;t even know there was also some solar panels!&lt;/p&gt;
&lt;p&gt;While browsing through this blog, I discovered this man, Ian, is also the driver of the &lt;a href=&quot;http://www.vegvan.ca/vegvan/Welcome.html&quot;&gt;Veg Van&lt;/a&gt;! Doesn&amp;#8217;t get much better then a creepy looking blue box van that&amp;#8217;s running on grease. It&amp;#8217;s definitely an interesting look into something totally different.&lt;/p&gt;
&lt;p&gt;I also don&amp;#8217;t plug my good friend Corey enough, who recently &lt;a href=&quot;http://www.wallofscribbles.com/&quot;&gt;redesigned his blog&lt;/a&gt; and is focusing on some interesting writing lately. I recommend you check it out, he will be posting a neat short story this Monday.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Switching from iTunes to the new Songbird</title>
        <link href="http://bart.whahay.net/blog/2008/09/16/switching-from-itunes-to-the-new-songbird.html" />
        <updated>2008-09-16T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/09/16/switching-from-itunes-to-the-new-songbird</id>
        <content type="html">&lt;p&gt;Over the past few months I&amp;#8217;ve slowly gotten more and more annoyed by iTunes. The interface is so slow it makes me want to buy a Mac and all the latest iTunes updates have been met with some &lt;a href=&quot;http://fireglo.wordpress.com/2008/09/09/itunes-8-review-genius-bar-ipod-touch-firmware-21/&quot;&gt;mixed&lt;/a&gt; &lt;a href=&quot;http://www.webmonkey.com/blog/ITunes_8_s_Genius_Playlists_Aren_t_as_Smart_as_They_Could_Be&quot;&gt;responses&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enter Songbird. &lt;a href=&quot;http://www.getsongbird.com&quot;&gt;Songbird&lt;/a&gt; is an open source music player that is labeled the Firefox for music players. Why? Because It&amp;#8217;s doing a good job of giving me what I want and oh it has those precious addons we Firefox users love so much.&lt;/p&gt;
&lt;p&gt;Songbird makes me feel quite at home because it &lt;em&gt;looks&lt;/em&gt; like iTunes, almost. It has the same structure and nearly the same style making the switch pretty easy on the UI-centered part of my brain.&lt;/p&gt;
&lt;p&gt;Out of the box, it invites you to try out some of the features like its built-in concert finder which is simply powered by &lt;a href=&quot;http://www.songkick.com/&quot;&gt;Songkick&lt;/a&gt; (Unfortunately, not available in Canada!) as well as Last.fm support, which as an avid user I am a huge fan of. You can extend the power of Songbird quite easily with addons like &lt;a href=&quot;http://addons.songbirdnest.com/addon/73&quot;&gt;mashTape&lt;/a&gt; which not only function great, but are super easy to install!&lt;/p&gt;
&lt;p&gt;The real reason I decided to try it out was beause iTunes was slow slow slow. Songbird is actually pretty fast. Importing my entire library of 5,000+ songs took only about 5 minutes and moving around in the player itself is pretty quick. No random lag and weird UI glitches like iTunes for Windows. Oh, did I mention Songbird is available for Windows, Mac, &lt;span class=&quot;caps&quot;&gt;AND&lt;/span&gt; Linux? Hell yeah, you guys rock.&lt;/p&gt;
&lt;p&gt;Of course, Songbird is still in development and not even in 1.0 status yet. Adding Podcasts (Subscriptions) was a bit wonky and I&amp;#8217;m still having some trouble with a few that I want to subscribe to and video isn&amp;#8217;t quite there yet. These guys are working hard however to get new updates out make a name for themselves in the music player community. You can follow them on &lt;a href=&quot;http://twitter.com/songbirdteam&quot;&gt;Twitter&lt;/a&gt; to get a bit more insight into their day-to-day workings&lt;/p&gt;
&lt;p&gt;Overall, I am so far very happy with Songbird. It does what I need it to do with minimal hassle and the importing of my iTunes library made it quick and easy to switch. Once a few more bugs are squashed and a few features are tightened up it should be one hell of a killer music player.&lt;/p&gt;
&lt;p&gt;P.S &amp;#8211; Songkick, please get some Canadian support for your listings!&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Saving Money Tip: Showering yourself with money</title>
        <link href="http://bart.whahay.net/blog/2008/09/12/saving-money-tip-showering-yourself-with-money.html" />
        <updated>2008-09-12T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/09/12/saving-money-tip-showering-yourself-with-money</id>
        <content type="html">&lt;p&gt;I&amp;#8217;ve found one of the most effective ways to save money, especially as a younger guy who is constantly buying things, going out for dinners, and not worrying about pinching pennies is to have multiple sources of savings.&lt;/p&gt;
&lt;p&gt;This plays on the same idea that having multiple sources of income, even if those extra sources are little in comparison to your main source, it still adds up.&lt;/p&gt;
&lt;p&gt;For example, for my short-term (non retirement) savings, I save money in three ways:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Using automatic deposits into a high interest savings account like my &lt;a href=&quot;http://www.ingdirect.ca&quot;&gt;&lt;span class=&quot;caps&quot;&gt;ING&lt;/span&gt; Account&lt;/a&gt;. Every week, &lt;span class=&quot;caps&quot;&gt;ING&lt;/span&gt; takes out a set amount of dollars from my chequing into my savings. This is most people&amp;#8217;s first step to savings and it works great, because you end up budgeting around the weekly deposits.&lt;/li&gt;
	&lt;li&gt;Saving your change adds up too. With my girlfriend, we fill up a huge pickle jar with change. Once every 4-5 months it gets full. Our last take out, we cleared well over $200 on change we would have never thought of using.&lt;/li&gt;
	&lt;li&gt;Don&amp;#8217;t just save your change, save your dollars and bills. A&lt;a href=&quot;http://www.boston.com/news/local/articles/2008/07/20/with_a_bit_of_creative_savings_5_can_get_you_at_least_12000/&quot;&gt; woman from Boston saved $12,000&lt;/a&gt; just by collecting her $5 dollar bills. I&amp;#8217;ve begun to start doing this slowly and it&amp;#8217;s a nice companion to saving change.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Basically, it&amp;#8217;s the same stuff you already know. A little bit adds up to a lot but it&amp;#8217;s nice to try and practice it, by doing a bunch of small things, you don&amp;#8217;t feel too restricted by your savings and you may still have the freedom to go out for dinners and the movies while not worrying too much about if you&amp;#8217;re meeting your savings goal.&lt;/div&gt;</content>
    </entry>
    
    <entry>
        <title>Dropbox makes online backup and sync almost too easy</title>
        <link href="http://bart.whahay.net/blog/2008/09/08/dropbox-makes-online-backup-and-sync-almost-too-easy.html" />
        <updated>2008-09-08T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/09/08/dropbox-makes-online-backup-and-sync-almost-too-easy</id>
        <content type="html">&lt;p style=&quot;text-align: left;&quot;&gt;Online backup, sync and sharing has been all the rage for ages and for awhile now a very quiet startup named &lt;a href=&quot;http://www.getdropbox.com&quot;&gt;Dropbox&lt;/a&gt; has been working on making it very simple, useful and sexy.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;img class=&quot;size-full wp-image-165&quot; title=&quot;dropbox-2&quot; src=&quot;http://bart.whahay.net/wp-content/uploads/2008/09/dropbox-2.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;249&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Dropbox is pretty straight forward. You install an app on your pc and a certain root folder is designated as your &lt;em&gt;dropbox&lt;/em&gt;! Whatever you place in this folder, or in subfolders you create, it is automatically uploaded to your dropbox. Additionally, using the web UI you can upload files that will end up being synced to your pc. Lovely.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;So why do I like Dropbox?&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
	&lt;li&gt;It&amp;#8217;s simple. Even the most novice of the novice could get this. It functions like a regular folder on your computer, but just has some nice magic working behind it. The web interface is also very clean and simple to use (Although currently being in beta, it still has a bit to go)&lt;/li&gt;
	&lt;li&gt;Multiple computers can hook up to a single account. This is very useful, as I can now sync certain media files between my work and home PC. I could do this already yes, but the point is dropbox takes away a ton of hassle and just makes it seamless.&lt;/li&gt;
	&lt;li&gt;Great integration between the web and pc client. The activity stream is almost instant, and file upload notifications are very fast. It&amp;#8217;s a small thing, but it feels good to see a web interface that relies on an outside source working so nicely.&lt;/li&gt;
	&lt;li&gt;2GB of free storage for all users. If you read their blog, you&amp;#8217;ll realize this will last even when they are launched. They will of course, introduce payment plans for more space and premium features once they are closer to launch (&lt;a href=&quot;http://blog.getdropbox.com/?p=4&quot;&gt;See their blog&lt;/a&gt; for some details.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;aligncenter&quot; src=&quot;http://dl.getdropbox.com/u/103581/cats.PNG&quot; alt=&quot;Obligatory image uploaded via Dropbox&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Obligatory file uploaded using Dropbox.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;To sum it all up, Dropbox has been around for awhile and they&amp;#8217;ve been polishing up their product and it&amp;#8217;s almost to the point where it&amp;#8217;s ready for the primetime. I&amp;#8217;ve been using it for a few days and am enjoying how easy it is.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://www.getdropbox.com&quot;&gt;Dropbox&lt;/a&gt;, as far as i know will be launching this week at the &lt;a href=&quot;http://www.techcrunch50.com/2008/conference/&quot;&gt;TechCrunch50&lt;/a&gt; conference in San Fransisco.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Quick Tip: Firefox Favourites Icon Bar</title>
        <link href="http://bart.whahay.net/blog/2008/09/06/quick-tip-firefox-favourites-icon-bar.html" />
        <updated>2008-09-06T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/09/06/quick-tip-firefox-favourites-icon-bar</id>
        <content type="html">&lt;p style=&quot;text-align: left;&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-163 aligncenter&quot; title=&quot;ff-bookmarks&quot; src=&quot;http://bart.whahay.net/wp-content/uploads/2008/09/ff-bookmarks.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;26&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;This is a simple trick that gives you way more bookmark real estate. As you already know, Firefox has a bookmarks bar right above the tabs in which you can throw stuff you commonly visit onto.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;A neat way to get more out of it is when you add a link to your favourite site, right click and select the Properties of the bookmark and simply wipe out the &amp;#8220;Name&amp;#8221; field. This will leave you with just an icon on your toolbar.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Most sites have a favourite icon, and it has served me well for the past several months so if you&amp;#8217;re aching for some more bookmark space, try this!&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;(P.S: If you can guess what all those sites are in my list, minus the one empty page you are a true internet hero)&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Finding the best deals in your area with Yahoo Pipes</title>
        <link href="http://bart.whahay.net/blog/2008/08/26/finding-the-best-deals-in-your-area-with-yahoo-pipes.html" />
        <updated>2008-08-26T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/08/26/finding-the-best-deals-in-your-area-with-yahoo-pipes</id>
        <content type="html">&lt;p&gt;Today while twittering away &lt;a href=&quot;http://twitter.com/spaetzel/statuses/899592142&quot;&gt;spaetzel showed off&lt;/a&gt; a very cool Yahoo Pipe of his. This pipe basically took all the deals from the Kitchener / Waterloo region and created one big listing out of it. Via the power of &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; feeds, it automatically updates and does all the work for you.&lt;/p&gt;
&lt;p&gt;So what is Yahoo Pipes? In about one sentence: It&amp;#8217;s a way to combine a variety of data from the web into one seamless stream of useful information, tailored to your needs.&lt;/p&gt;
&lt;p&gt;Enough chit chat &amp;#8211; Let&amp;#8217;s begin. Point your browser to &lt;a href=&quot;http://pipes.yahoo.com/pipes/&quot;&gt;http://pipes.yahoo.com/pipes/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Get into your Yahoo! account and hit &amp;#8220;Create a Pipe&amp;#8221;. In this simple Example we are going to take data from Kijiji, Craigslist, add some filters based on our needs, and then add it to our &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; Reader.&lt;/p&gt;
&lt;p&gt;So you&amp;#8217;re now in a big window, telling you to &amp;#8220;drag modules here&amp;#8221; Scary! I know. Not a problem. Let&amp;#8217;s start by going to the left and clicking on and dragging the &amp;#8220;Fetch Feed&amp;#8221; module over to the center panel. It&amp;#8217;ll take a second to create, but now you should have your first Yahoo Pipes module up!&lt;/p&gt;
&lt;p&gt;Now, we need this to do something. Let&amp;#8217;s head on over to &lt;a href=&quot;http://www.kijiji.ca/&quot;&gt;Kijiji&lt;/a&gt;, pick your city and then select a category. We could get very broad, but there&amp;#8217;s no point just yet. I&amp;#8217;ve &lt;a href=&quot;http://kitchener.kijiji.ca/f-buy-and-sell-video-games-consoles-W0QQCatIdZ141&quot;&gt;selected the video games&lt;/a&gt; category. Once on that page, you should see the ever-familiar Orange &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; Feed icon in your browser (For Firefox, it&amp;#8217;s on the top right). Click it, and you should get the address for the &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; Feed of the video games section. It looks something like this for me:&lt;/p&gt;
&lt;blockquote&gt;&lt;em&gt;&lt;span&gt;&lt;a class=&quot;a&quot; href=&quot;http://kitchener.kijiji.ca/f-SearchAdRss?CatId%5Cx3d141&quot;&gt;http://kitchener.kijiji.ca/f-SearchAdRss?CatId=141&lt;/a&gt;&lt;/span&gt;&lt;/em&gt;&lt;/blockquote&gt;
&lt;p&gt;Take that address, go back to your Yahoo Pipe and put it into the &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; Field on the module you placed. You should notice the icon change to the Kijiji icon.&lt;/p&gt;
&lt;p&gt;Now let&amp;#8217;s make it work for us! Click on the small circle connector near the bottom of the module you placed. You should see it stretch out. Bring the connector to the connecting piece on the module labeled &amp;#8220;Output&amp;#8221;. Now if you look at the bottom, in the Debugger panel you should see a bunch of text. Basically, that is a very simplied version of our output. In mine, I see a bunch of entries for PS3, Xbox, etc. You may see something different, depending on what you added as your category.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://bart.whahay.net/wp-content/uploads/2008/08/pipes-1.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-157&quot; title=&quot;pipes-1&quot; src=&quot;http://bart.whahay.net/wp-content/uploads/2008/08/pipes-1.jpg&quot; alt=&quot;&quot; width=&quot;452&quot; height=&quot;236&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ok, this is nice and all, but we could use some more!&lt;/p&gt;
&lt;p&gt;Go back and add another &amp;#8220;Fetch Feed&amp;#8221; module. Head on over to Craigslist this time and repeat the process we just did, respectively on your newly placed module. Now, we&amp;#8217;ve run into one small snag. We can&amp;#8217;t link two modules to the Output. Output only has one connector. What do we do? We add a &lt;strong&gt;Union&lt;/strong&gt;. On your left menu, you should see a category titled &amp;#8220;Operators&amp;#8221;. Open that up and drag a Union module onto your screen. You should now see the Union module has 5 connectors on top with one on the bottom. If you have more then 5 feeds being fetched, you&amp;#8217;ll just have to add more unions, it&amp;#8217;s that simple!&lt;/p&gt;
&lt;p&gt;You should now notice your Output has a lot more variety and quantity of items being returned.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://bart.whahay.net/wp-content/uploads/2008/08/pipes-2.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-158&quot; title=&quot;pipes-2&quot; src=&quot;http://bart.whahay.net/wp-content/uploads/2008/08/pipes-2.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;235&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Finally, let&amp;#8217;s add one more step. Let&amp;#8217;s add some filters so we only get what we want. For this example, let&amp;#8217;s say I am highly interested in everything that is PS3. In your left menu, head over to Operators and select and drag the &lt;strong&gt;Filter&lt;/strong&gt; module onto your panel. Adjust your modules so your Union leads to the Filter, and the Filter now leads to the Output.&lt;/p&gt;
&lt;p&gt;In a filter, you have two options. Block and Permit. I&amp;#8217;ll use Permit for this example. Now, as I said I am interested in all things PS3 so I&amp;#8217;m going to add a few keywords.&lt;/p&gt;
&lt;blockquote&gt;&lt;em&gt;ps3, playstation&lt;/em&gt;&lt;/blockquote&gt;
&lt;p&gt;In the first field, you can select what field of data you want to match. In our basic case, it&amp;#8217;s going to be item.title. Essentially I am looking for any items that contain the words &lt;em&gt;ps3&lt;/em&gt; and &lt;em&gt;playstation&lt;/em&gt;. Very simple.&lt;/p&gt;
&lt;p&gt;Now, I can move forward and add some more filters like &lt;em&gt;xbox&lt;/em&gt;, or &lt;em&gt;ninja&amp;#8217;s&lt;/em&gt; or whatever else I want. I can also create a second filter module and set it to &amp;#8220;Block&amp;#8221; incase I do not ever want to see things containing &lt;em&gt;nintendo&lt;/em&gt; or &lt;em&gt;werewolves&lt;/em&gt;. (To be honest I am a big fan of both) In the end, your Pipe should look something like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://bart.whahay.net/wp-content/uploads/2008/08/pipes-3.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-159&quot; title=&quot;pipes-3&quot; src=&quot;http://bart.whahay.net/wp-content/uploads/2008/08/pipes-3.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;333&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once this is complete, you can Save the Pipe and add it to your favourite &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; Reader, or simply bookmark the Pipe page if you are not a fan of rss readers.&lt;/p&gt;
&lt;p&gt;Of course, as I said you can do all sorts of crazy and cool things to extend on this simple setup but this is just the tip of the iceberg. Try adding all the feeds you know, some filters, and play around with all the operators. You&amp;#8217;ll be surprised just how complex you can get with something that looks like so much fun!&lt;/p&gt;
&lt;p&gt;You can find some great video tutorials and examples on the &lt;a href=&quot;http://pipes.yahoo.com/pipes/&quot;&gt;Yahoo Pipes web page.&lt;/a&gt;&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>How hackers mess up your blog without you knowing it</title>
        <link href="http://bart.whahay.net/blog/2008/08/19/how-hackers-mess-up-your-blog-without-you-knowing-it.html" />
        <updated>2008-08-19T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/08/19/how-hackers-mess-up-your-blog-without-you-knowing-it</id>
        <content type="html">&lt;p&gt;Earlier today I was updating one of my older blogs to a new version of Wordpress. With the update, came a small change in my blogs template. As I opened up the template editor I noticed something strange&lt;/p&gt;
&lt;p&gt;Literally &lt;em&gt;&lt;strong&gt;thousands upon thousands&lt;/strong&gt;&lt;/em&gt; of links to various spam-related subjects.&lt;/p&gt;
&lt;p&gt;But how come I didn&amp;#8217;t see them when I visited my blog?! Very simple actually. A lot of spammers now inject all these hidden links, but they only show up, and literally cover your page when you are visting your blog from a search engine, or another specified referer. A direct non-referal visit to your blog yields no links and your page looks perfectly normal.&lt;/p&gt;
&lt;p&gt;This happened simply because my Wordpress install was very old, which was prone to exploits. Yes, despite the awesome and easy update process of a Wordpress blog I got lazy on that one :)&lt;/p&gt;
&lt;p&gt;Really the best solution to this is to just keep up to date on your Wordpress installations and periodically check your source. It&amp;#8217;s as simple as Viewing Source and you will quickly notice any strange quirks.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Great Cheat Sheets for Programming, Design, and more</title>
        <link href="http://bart.whahay.net/blog/2008/08/16/great-cheat-sheets-for-programming-design-and-more.html" />
        <updated>2008-08-16T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/08/16/great-cheat-sheets-for-programming-design-and-more</id>
        <content type="html">&lt;div dir=&quot;ltr&quot;&gt;Found a great little site that has a nice selection of well made cheat sheets for various platforms, languages, and even World of Warcraft for you gamers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.addedbytes.com/cheat-sheets/&quot;&gt;Cheat Sheets by Added Bytes&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I personally have grabbed the Subversion and mySQL cheat sheets just because sometimes I get flaky on those. Browsing the Python Google Group I saw he&amp;#8217;s also working on a &lt;a href=&quot;http://groups.google.co.uk/group/added-bytes-cheat-sheets/browse_thread/thread/2b9e988dfc66c590&quot;&gt;Python cheat sheet&lt;/a&gt; which looks to be a good one :)&lt;/div&gt;</content>
    </entry>
    
    <entry>
        <title>Going Green (In Kitchener Waterloo)</title>
        <link href="http://bart.whahay.net/blog/2008/08/13/going-green-in-kitchener-waterloo.html" />
        <updated>2008-08-13T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/08/13/going-green-in-kitchener-waterloo</id>
        <content type="html">&lt;p&gt;Going green is so chic right now it hurts, but it&amp;#8217;s also so good for the environment!&lt;/p&gt;
&lt;p&gt;There are many ways you can help the environment, and there&amp;#8217;s &lt;a href=&quot;http://www.treehugger.com/&quot;&gt;plenty&lt;/a&gt; of &lt;a href=&quot;http://green-blog.org/&quot;&gt;good&lt;/a&gt; &lt;a href=&quot;http://greenertrends.com/&quot;&gt;blogs&lt;/a&gt; to check out on the subject, but I would like to focus on a few ways any fellow Kitchener Waterloo residents can help out.&lt;/p&gt;
&lt;p&gt;The Kitchener Waterloo area is a city that works well for going green. We&amp;#8217;re sorrounded by farm land, we have a well developed public transport system that just keeps getting better and we&amp;#8217;re not too spread apart.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Farmers Market!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I know, this isn&amp;#8217;t exactly going green but in a sense it is. But what helps more so, is you are supporting local farmers and getting some high quality foods out of it. I can buy beans from the market that&amp;#8217;ll last in my fridge for 2 weeks, while beans from Zehrs will last 5 days. Of course, that is just one example of many.&lt;/p&gt;
&lt;p&gt;I go to the market every Saturday morning. Did you know Kitchener &lt;a href=&quot;http://www.kitchenermarket.ca/&quot;&gt;has a market&lt;/a&gt;? Yes, St. Jacobs isn&amp;#8217;t the only one and the Kitchener one works just as well. Set in the heart of downtown Kitchener it&amp;#8217;s just a 5 minute walk from the central bus terminal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alternative Transportation: eBikes, Buses, and Biking&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;- eBikes &lt;/strong&gt;are all the rage now a days and although as of this writing the season is nearing an end, it&amp;#8217;s still something to look at. As technology gets better we get more power and life out of batteries. Next generation eBikes that should cost under $2000 will soon have lithium ion batteries. eBikes are just like bycicles, requiring no insurance, license or registration &amp;#8212; making it perfectly suitable for someone with a small commute who doesn&amp;#8217;t want to go through the costs and hassles of owning a car.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.wesellit.ca&quot;&gt;WeSellit&lt;/a&gt; easily keeps the best stock of ebikes in all of Kitchener-Waterloo. See &lt;a href=&quot;http://www.wesellit.ca/product/listing/ebikes&quot;&gt;here&lt;/a&gt; for their current listing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;- The bus system&lt;/strong&gt; in Kitchener/Waterloo is all interconnected. The central hub is located in downtown Kitchener just off Charles St. with another good sized hub at Conestoga Mall. The city has done a great job of introducing new features like Express buses that run every 15 minutes during peak hours, as well as informative displays in hubs to let you know when you should be ready for the next bus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;- Biking &lt;/strong&gt;is a great way to keep fit and still get to your destination pretty quickly. I travel to work on my bike in the summer and it&amp;#8217;s a blast. A good tool to use before figuring out your route is the &lt;a href=&quot;http://www.gmap-pedometer.com/&quot;&gt;Google Maps Pedometer&lt;/a&gt;. This tool allows you to map out a route but most importantly, you can check out the elevation levels. With it, I was able to see my bike ride to work is almost entirely up hill.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Green Bag&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most super markets now sell &amp;#8220;Green&amp;#8221; Bags that you can re-use. Zehrs has quality ones, but they are tiny. If you are looking for some quality ones you should stop by Sobey&amp;#8217;s and pick some up. They are larger, have great handles, and one bag can fit all the groceries I need from a Saturday market run. At a couple bucks a pop they make a great investment.&lt;/p&gt;
&lt;p&gt;That about wraps up this small summary of how you can help out. Of course, in addition to these suggestions there are thousands more but that&amp;#8217;s why I linked some of those blogs on top!&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>All moved in! </title>
        <link href="http://bart.whahay.net/blog/2008/07/04/all-moved-in.html" />
        <updated>2008-07-04T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/07/04/all-moved-in</id>
        <content type="html">&lt;p&gt;So I&amp;#8217;ve been kind of quiet as I was moving. For a young couple we have &lt;strong&gt;a lot&lt;/strong&gt; of stuff but we are now basically moved into our new place. Minus a few boxes of books that I do not have a shelf for at the moment. Here&amp;#8217;s some pics because I took them and wouldn&amp;#8217;t want to just not share them (har)&lt;/p&gt;
&lt;p&gt;We&amp;#8217;re going to get some more things filled up, like the walls .. too bare for now, and I got a few more things to hang up and all but there is no rush. Also a TV right beside my desk. That is coming in a few weeks once I am ready to buy it (Instead of putting it on credit I&amp;#8217;m waiting for my auto savings account to hit the price of the TV, which then I&amp;#8217;ll go get it)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3166/2636910868_08c210463d.jpg?v=0&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;375&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3186/2636911008_e0e1e2aba4.jpg?v=0&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;375&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3137/2636910940_0ba58a5a07.jpg?v=0&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;375&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Bonus: Blinky did &lt;span class=&quot;caps&quot;&gt;NOT&lt;/span&gt; approve of the move. He was a bit grumpy early on but after a few days he&amp;#8217;s been settling in and being his playful young self.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3088/2636910764_263607c5c5.jpg?v=0&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;375&quot; /&gt;&lt;/p&gt;
&lt;p&gt;And that&amp;#8217;s that!&lt;/p&gt;
&lt;p&gt;I really want to start up my online video podcast of my cooking show and I should be able to start it soon. It will be focusing on alternative cooking for people who have to be on different diets (Vegan, Gluten-free, Dairy-free, Diabetes, etc ..) I am not a master chef but I think it&amp;#8217;ll be a fun learning experience for myself and hopefully enjoyable to people who are watching it!&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Food Online</title>
        <link href="http://bart.whahay.net/blog/2008/06/22/food-online.html" />
        <updated>2008-06-22T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/06/22/food-online</id>
        <content type="html">&lt;p&gt;Online video is exploding. I&amp;#8217;ve been watching &lt;a href=&quot;http://www.ted.com&quot;&gt;quality&lt;/a&gt; &lt;a href=&quot;http://www.discovery.com&quot;&gt;videos&lt;/a&gt; &lt;a href=&quot;http://nationalgeographic.com&quot;&gt;online&lt;/a&gt; for awhile now and am looking for more in an effort to basically never have to purchase cable.&lt;/p&gt;
&lt;p&gt;Todays mission for myself was to find some shows online all about Food. Tips &amp;amp; Tricks, Science of Food, Recipes, and whatever else.&lt;/p&gt;
&lt;p&gt;Unfortunately, the internet is &lt;strong&gt;plauged&lt;/strong&gt; with boring and un-imaginative videos from people all over the world telling you how to cook something awesome. Don&amp;#8217;t get me wrong, I thank you for trying and being different but seriously, yawn.&lt;/p&gt;
&lt;p&gt;However! There is good news. There are many interesting and well produced cooking shows out there that only took me a bit of looking around to find.&lt;/p&gt;
&lt;p&gt;First, I found the best sources of quality online food shows to be from: &lt;a href=&quot;http://www.blip.tv&quot;&gt;blip.tv&lt;/a&gt;,&lt;a href=&quot;http://itunes.com&quot;&gt; iTunes directory&lt;/a&gt;, and &lt;a href=&quot;http://www.vimeo.com&quot;&gt;vimeo.com&lt;/a&gt;. I recommend you check out those sites and do your own looking around for what interests you, but here&amp;#8217;s some of my top picks from what I found. Since there is no direct url for these shows, I will put in brackets where I found them:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Epicurious: Food &amp;amp; Drink: (iTunes) &lt;/strong&gt;These are small 2-3 minutes tips and tricks and simple recipes. Epicurious is a great site for recipes and the guys from there have done some high quality, well produced and enjoyable videos. If you&amp;#8217;re looking to learn some neat tricks or need to figure out how to make a sauce or syrup, searching through it&amp;#8217;s massive episode directory will help you out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Food Science: (iTunes)&lt;/strong&gt; Neat show that has 5-8 minute clips about how food and science go together. Let&amp;#8217;s you truly understand why bread rises, why sauces thicken, and so on.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le Gourmet TV: (iTunes) &lt;/strong&gt;Fancy! A nice show with quality hosts that is not as snobby as the title may percieve. They do a mix of recipes, reviews, and tips/tricks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Restaurant Food Fast: (blip.tv)&lt;/strong&gt; Not the highest quality in terms of playback but pretty good. From what I have seen, he purely does recipes and they are generally very simple. Good if you&amp;#8217;re looking for something basic and fun to do&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hands on Food: (blip.tv) &lt;/strong&gt;Only a few episodes in but looks promising. Well done videos and very simple recipes. The host seems like an enjoyable guy to hang out with and is usually pretty excited when doing his videos. I like this, as it&amp;#8217;s not common in the videos I&amp;#8217;ve seen.&lt;/p&gt;
&lt;p&gt;That covers a few unique and interesting cooking shows I&amp;#8217;ve found online so far. I&amp;#8217;m still looking, but the free stuff is very limited in quantity and quality!&lt;/p&gt;
&lt;p&gt;Online video intrigues me greatly and I&amp;#8217;ve been contemplating doing it myself. With my allergies, I have to expirement constantly with different recipes and I may try my hand on some videos to hopefully help people out. But that won&amp;#8217;t be for another month or so until I settle down in my new place later this month.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Make this product: Filtered RSS Feeds</title>
        <link href="http://bart.whahay.net/blog/2008/06/13/make-this-product-filtered-rss-feeds.html" />
        <updated>2008-06-13T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/06/13/make-this-product-filtered-rss-feeds</id>
        <content type="html">&lt;p&gt;I love &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; feeds. They have totally changed the way I do things. I used to have tons of bookmarks and visit a huge bunch of sites everyday and it took up so much time. With &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt;, I have it all centralized and I get content from all my sites with ease.&lt;/p&gt;
&lt;p&gt;As my feeds have grown, I went from using news aggreagators like Digg, Google News, Reddit, and so on t get down to specific blogs like TechCrunch, Mashable, Signal vs. Noise, and so on. I subscribe to over 70 blogs now.&lt;/p&gt;
&lt;p&gt;One problem with this is, that I still trudge through a lot of unwanted content. I will use Mashable in this example. I subcribe to Mashable and love it, but they constantly promote and announce new events across the country.&lt;/p&gt;
&lt;p&gt;Unfortunately for me, I simply can&amp;#8217;t go to these as I am not anywhere near the proposed locations. I wish I simply didn&amp;#8217;t get these in my feed as all they do is make me a sad panda for not being able to attend.&lt;/p&gt;
&lt;p&gt;The solution? Allow me to have some form of middleware, that will read through my feeds and simply dump anything that matches specific filters (Similar to what you would do for email setup).&lt;/p&gt;
&lt;p&gt;Push all my filtered stuff into a hidden category that I could check up if I really wanted to, but most of the time I wont. A good, but not quite there yet example of this is what &lt;a href=&quot;http://www.friendfeed.com&quot;&gt;FriendFeed&lt;/a&gt; does. They allow me to hide entries based on a few specifications and then they show a &amp;#8220;Hidden entries&amp;#8221; link on the bottom of each page. I rarely check the hidden entries as I know what&amp;#8217;s there is stuff I really don&amp;#8217;t care for.&lt;/p&gt;
&lt;p&gt;So basically, that is my proposal. Create something like this that I could plug right into Google Reader without slowing me down and I, and I&amp;#8217;m sure others will be very happy.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>StartupCampWaterloo - We're small but we've got cool stuff!</title>
        <link href="http://bart.whahay.net/blog/2008/06/04/startupcampwaterloo.html" />
        <updated>2008-06-04T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/06/04/startupcampwaterloo</id>
        <content type="html">&lt;p&gt;This morning marks the aftermath of StartupCampWaterloo #3. I stumble out of my bed, dazed and confused as to what happened last night, panties hanging from the fan. Then I actually wake up and realize none of that happened and I simply went to StartupCampWaterloo with &lt;a href=&quot;http://www.wallofscribbles.com&quot;&gt;Corey&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Last night&amp;#8217;s question was a simple one: &lt;strong&gt;Why Start a Startup?&lt;/strong&gt; We were met with different answers from the panel which included a mix of experienced names as well as newer kids on the block. Essentially, you should start a startup if you want freedom of creativity but at the (early, or more depending on how successful you are) loss of money, sleep, and job benefits. Would many people give up all that just to enjoy their jobs and be creative? Hell yeah! Why the hell do you think I work where I currently work, for the money? No. For the joy of coming into the office and not dreading the next 8 hours. For the cool bonuses, for the creative freedom, for an environment where everyone is my friend, &lt;strong&gt;for my own push in the company&lt;/strong&gt;. That my friends, is what being in a startup is all about. &lt;a href=&quot;http://www.spaetzel.com&quot;&gt;Spaetzel&lt;/a&gt;, an attendee actually took some audio of the panel which you can &lt;a href=&quot;http://tinyurl.com/65ze3m&quot;&gt;listen here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The presentations we got to see last night had a good variation from overly ambitious to just plain out cool. I don&amp;#8217;t want to give a detailed analysis on each one as that would take ages so here&amp;#8217;s a few words for each of them:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.clutterme.com/&quot;&gt;ClutterMe&lt;/a&gt;: Sorry guys but the idea is ok, but the execution was poor. Trying to make a &amp;#8220;customized&amp;#8221; home page but it&amp;#8217;s been &lt;a href=&quot;http://www.google.com&quot;&gt;done&lt;/a&gt; &lt;a href=&quot;http://www.netvibes.com&quot;&gt;very&lt;/a&gt; &lt;a href=&quot;http://www.pageflakes.com&quot;&gt;well&lt;/a&gt; already&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://letscube.com/&quot;&gt;Let&amp;#8217;s Cube&lt;/a&gt;: An interesting concept that was mostly mocked (&lt;span class=&quot;caps&quot;&gt;HEY&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;GUYS&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;EVER&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;HEARD&lt;/span&gt; OF &lt;span class=&quot;caps&quot;&gt;DELICIOUS&lt;/span&gt;?) but they are taking a slightly different route. I talked to the dude running it and they plan to launch in a week. If they fix some design issues I will definitely give them a look.&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://ubietylab.net/ubigraph/index.html&quot;&gt;Ubigraph&lt;/a&gt;: Freakin&amp;#8217; cool man. Now, think of a business model and you got yourself something. Make it more easy to use (fun version?) and I&amp;#8217;ll pay $10 to just &lt;strong&gt;play&lt;/strong&gt; with this thing.&lt;/li&gt;
	&lt;li&gt;InvigoFire: I think that was the name. His idea was an ambitious one to basically do what some of the multi-billion dollar companies like Google and Yahoo are doing now. Mix of OpenID, DataPortability and OpenSocial. Sorry bud, but you need to &lt;a href=&quot;http://www.techmeme.com&quot;&gt;keep&lt;/a&gt; &lt;a href=&quot;http://www.techcrunch.com&quot;&gt;up&lt;/a&gt; &lt;a href=&quot;http://www.mashable.com&quot;&gt;more&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;AdvertisingShowDown.com: No website, no slides, just a guy talking about his idea. Idea&amp;#8217;s are nice but execution is what matters. Also, I have a print ad that I&amp;#8217;m almost done for work and you didn&amp;#8217;t convince me that your service would be interesting for me to use.&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://semacode.com/&quot;&gt;Semacode&lt;/a&gt;: Very cool, and has potential to be useful. Would like to see some more real-world, useful applications of this though.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That about covers all the ones I could remember. StartupCamp was definitely something neat to check out and it&amp;#8217;s cool to see some people with ideas that could become huge. The &lt;a href=&quot;http://barcamp.org/DemoCampGuelph6&quot;&gt;next one is in Guelph&lt;/a&gt; and is a DemoCamp which should provide some more fleshed out ideas!&lt;/p&gt;
&lt;p&gt;To end this summary, my favourite word of the night is &amp;#8220;&lt;em&gt;Obsession&lt;/em&gt;&amp;#8221;. That&amp;#8217;s what being part of creating a startup is all about. The obsession to create and grow something unique. Best of luck to all who presented last night, I&amp;#8217;ll definitely be keeping my eye on all of them.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>My VIM Config file</title>
        <link href="http://bart.whahay.net/blog/2008/06/02/my-vim-config-file.html" />
        <updated>2008-06-02T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/06/02/my-vim-config-file</id>
        <content type="html">&lt;p&gt;Hello Monday! Taking a quick break from all the work duties to share my &lt;span class=&quot;caps&quot;&gt;VIM&lt;/span&gt; config file.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve only been using &lt;span class=&quot;caps&quot;&gt;VIM&lt;/span&gt; for a few months and am still learning the tricks of the trade but I&amp;#8217;ve setup a configuration file that works well for me. It has custom color scheme/font, essential tab and line setups, some backup configuration as well as some mappers.&lt;/p&gt;
&lt;p&gt;The color scheme is based off of &lt;a href=&quot;http://blog.infinitered.com/entries/show/2&quot;&gt;this one&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://bart.whahay.net/media/.gvimrc&quot;&gt;Check out my .gvimrc&lt;/a&gt; and if you have any cool tips or ways to improve it some more for sure let me know!&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Shop, dine and enjoy the local</title>
        <link href="http://bart.whahay.net/blog/2008/06/01/shop-dine-and-enjoy-the-local.html" />
        <updated>2008-06-01T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/06/01/shop-dine-and-enjoy-the-local</id>
        <content type="html">&lt;p&gt;As we grow up and become useful people in society we go out for dinner, see movies, and party. We do it in all sorts of venues and locations. We shop at the large Walmart, the Zellers, go see movies at the large Empire Cinema, and so on.&lt;/p&gt;
&lt;p&gt;But many cities have a not-so-hidden culture that just shines with &lt;strong&gt;awesome.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A huge part of our society is drilled to shop for food at the big stores. Walmart in many cities now carries food of many varieties as well as pretty much everything else. We have several large super market chains in my (somewhat) small city of 200,000 people. Don&amp;#8217;t get me wrong; Shopping at these stores is not wrong, infact I do it all the time but there is so much out there that many people do not use!&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m talking about local farmers markets, small european deli&amp;#8217;s, coffee shops and so on. Of course, these stores are fine as many in my area have been around for &lt;em&gt;years&lt;/em&gt; so bringing in the cash is no problem. However, what I&amp;#8217;ve found is for the extra &amp;#8220;hassle&amp;#8221; of traveling to another deli or market for other goods I need is very much worth it! Perhaps it is my Polish/European bias but I simply find deli from my local European deli much, much more enjoyable (and usually somewhat cheaper) then big chain stores.&lt;/p&gt;
&lt;p&gt;In many cities, you will also find your more &lt;a href=&quot;http://www.princesscinema.com&quot;&gt;smaller&lt;/a&gt;, &lt;a href=&quot;http://www.cinemark.ca/theatre/The+Bookshelf/BOOKSHELF&quot;&gt;independent&lt;/a&gt; theaters. These theaters generally play great movies from Festivals like Sundance, Toronto, and many more that simply did not make it into the larger chained theaters. Although I do enjoy many movies that have made it into the mainstream, you are missing out on a good chunk of &lt;a href=&quot;http://www.imdb.com/title/tt0802948/&quot;&gt;really&lt;/a&gt; &lt;a href=&quot;http://www.imdb.com/title/tt0845046/&quot;&gt;amazing&lt;/a&gt; &lt;a href=&quot;http://www.imdb.com/title/tt0808417/&quot;&gt;movies&lt;/a&gt; and &lt;a href=&quot;http://www.imdb.com/title/tt0419887/&quot;&gt;acting&lt;/a&gt;. (Some of these movies, like &lt;a href=&quot;http://www.imdb.com/title/tt0449059/&quot;&gt;Little Miss Sunshine&lt;/a&gt; make it big as well!)&lt;/p&gt;
&lt;p&gt;It doesn&amp;#8217;t stop there. Where have I found my coolest furniture, and neatest gifts, kitchen accessories and oh so much more? Well you guessed it, small independent stores in my area that specialize in getting neat stuff from all around the world!&lt;/p&gt;
&lt;p&gt;Basically, my point is: If you have not taken a deeper look at your city and tried to see what it has to offer then get out there. Park your car or other mobile unit downtown or uptown and begin exploring! Many flourishing and growing cities have a downtown that is either very nice, or being renovated right at this moment. Besides, it makes a great date! Go explore, find out what&amp;#8217;s new, and get some ice-cream that isn&amp;#8217;t from Baskin Robbins :)&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Everyday is Caturday</title>
        <link href="http://bart.whahay.net/blog/2008/06/01/everyday-is-caturday.html" />
        <updated>2008-06-01T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/06/01/everyday-is-caturday</id>
        <content type="html">&lt;p&gt;&lt;strong&gt;(&lt;em&gt;Do you have a pet or more? Write about it and post a link in the comments! I love hearing about other peoples pets.)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;It&amp;#8217;s Sunday, but today I am going to write a bit about my two cats because everyone loves cats, and they are oh-so adorable.&lt;/p&gt;
&lt;p&gt;I have two cats. They are named Dapper and Blinky. They love to sleep.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3130/2354232359_d6ab0f7542.jpg?v=0&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;375&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The sofa is their favourite place to sleep, not counting my bed which I no longer am allowed to put them on because Miranda sneezes lots and lots and that&amp;#8217;s just no good! Dapper and Blinky will spend most of their day sleeping and decide it&amp;#8217;s best to be wide awake during 5-7 when I am trying to make dinner and 12am-7am when I am trying to sleep and get ready for the day.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2105/2269034859_51c27386e6.jpg?v=0&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;375&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Dapper and Blinky are best buds. They are brothers afterall! Born on the same day they&amp;#8217;ve known each other for quite some time (About 8 months as of this writing!)&lt;/p&gt;
&lt;p&gt;Owning cats is not for everyone, because just like most animals, every cat has its own personality and sometimes that may just be a bit too much!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2152/2532982650_bef3121736.jpg?v=0&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;375&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dapper&lt;/strong&gt;. He is the special one of the family. When we first picked him up in his younger months (Well, weeks!) he was much slower, and cross eyed but very adorable and fluffy for his young age.&lt;/p&gt;
&lt;p&gt;Dapper has grown over the past few months to be faster, more playful and less cross-eyed. He used to have a hard time jumping down things and would usually kind of splat on the floor but that is no more! He even beats Blinky sometimes to the laser pointer.&lt;/p&gt;
&lt;p&gt;Dapper loves going into the bathroom sink every morning after my shower when it has warmed up and generated some moisture from the shower. He enjoys relaxing by the balcony side and watching the out doors for hours on end and loves letting me know when he wants his belly rubbed by rolling over and awaiting my action.&lt;/p&gt;
&lt;p&gt;We have been told by our vet that Dapper will grow to be even more fluffy and large and I cannot wait to see him grow up into a cuter furball.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2024/2354232301_e4a907efef.jpg?v=0&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;375&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Blinky.&lt;/strong&gt; What can I say about my favourite cat? Blinky is agile, a spaz, and a suck all in one. He is part-Siamese and shows it pretty well.&lt;/p&gt;
&lt;p&gt;When we received Blinky, he was tiny and very skinny. We thought possibly he would be the runt of the litter. In a few weeks time he grew very fast and we learned that was definitely not the case! With growth, Blinky showed off his agility and speed; The laser pointer and any toys have nothing on Blinky as he chases them at lightning speeds and jumps really, &lt;strong&gt;really&lt;/strong&gt; high to try and catch them.&lt;/p&gt;
&lt;p&gt;Blinky has recently taken up climbing and can jump up and slowly crawl up brick walls, screen meshes, and &amp;#8230; I definitely need to buy him a huge ten foot scratching pole.&lt;/p&gt;
&lt;p&gt;Apart from being one of the most agile cats I&amp;#8217;ve ever witnessed, Blinky is simply a suck. At night, he will meow at my bedroom wanting me to play with him some more and in the mornings he&amp;#8217;s ready and waiting sharp at 7:05am for me to get out. If I don&amp;#8217;t get out by then, I hear the meows come as I tussle around in my bed. Blinky enjoys rubbing his face over everything and loves going inside pretty much anything (Hampers, Pants, Bags) in an attempt to rub his face and entire body in them.&lt;/p&gt;
&lt;p&gt;I love my cats, and I couldn&amp;#8217;t ask for two more interesting and unique guys to be part of my humble household. Their personalities grow with you and it&amp;#8217;s amazing to see how cats, and any pet will grow up and change and end up having very specific habits that we normally could not imagine such simpler creatures to have.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Google AdWords Trick: Tracking Keywords</title>
        <link href="http://bart.whahay.net/blog/2008/05/17/google-adwords-trick-tracking-keywords.html" />
        <updated>2008-05-17T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/05/17/google-adwords-trick-tracking-keywords</id>
        <content type="html">&lt;p&gt;Here&amp;#8217;s a neat trick I learned that doesn&amp;#8217;t seem to have much documentation: Using Keywords in your Google Ads. There are actually two methods you can use these.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; #1 Within your ad&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This allows you to have &amp;#8220;dynamic&amp;#8221; ads, as it will take the keyword the user actually typed, and place it in your ad. For example, let&amp;#8217;s say you have an ad like so:&lt;/p&gt;
&lt;address&gt;&lt;em&gt;Great Games!&lt;/em&gt;&lt;/address&gt;&lt;address&gt;&lt;em&gt;At this awesome game site&lt;/em&gt;&lt;/address&gt;&lt;address&gt;&lt;em&gt;www.games.com&lt;/em&gt; &lt;/address&gt;&lt;p&gt;Your site has a variety of games, so you want to show that to the searcher. What you can do, is setup a Keyword in your ad so they&amp;#8217;d get whatever they searched for, like so:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Great {Keyword:Games}! &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;What would this do? If the user searched for &amp;#8220;&lt;em&gt;adventure games&amp;#8221;&lt;/em&gt; in Google, your ad would now display &lt;em&gt;&amp;#8220;Great Adventure Games!&amp;#8221;&lt;/em&gt; The &amp;#8220;Games&amp;#8221; portion after the keyword is the default, incase their search was too long and couldn&amp;#8217;t fit in your ad space.&lt;/p&gt;
&lt;p&gt;Now, remember this phrase: It&amp;#8217;s all in the keyword. What does that mean? Well, depending on how you type &amp;#8220;Keyword&amp;#8221; it will modify your ad text. For example:&lt;/p&gt;
&lt;address&gt;{KeyWord:The Title} will show as The Title&lt;br /&gt;
&lt;br /&gt;
{keyword:The Title} will show as the title&lt;br /&gt;
&lt;br /&gt;
{KEYWORD:The Title} will show as &lt;span class=&quot;caps&quot;&gt;THE&lt;/span&gt; TITLE  &lt;/address&gt;&lt;p&gt; With this, you can get some significant increase in click rate as your ad will be more focused on the search, plus you&amp;#8217;ll get the bolding benefits of a keyword match! Now of course, use this carefully as it can turn into wasted clicks if your campaign isn&amp;#8217;t setup correctly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;#2 Logging the keyword&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is a simple but useful trick if you are more tech-savvy. Add the following:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;?kw={keyword}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;to the end of your ad url (You can also append something like  &lt;em&gt;/{keyword} &lt;/em&gt;then write up some .htaccess ReWrite Rules). With this, you can figure out the exact keyword the user typed when they were seeing your ad. This is useful if you are using a lot of broad matches in your campaign and want to figure out what keywords people are using (Effectively, saving you money by adding the more obscure words)&lt;/p&gt;
&lt;p&gt;So that&amp;#8217;s it ! Two very neat and useful Adwords tricks that will easily save you a boatload of money regardless of what you are doing.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>A startup to look at: Clickpass.com</title>
        <link href="http://bart.whahay.net/blog/2008/04/09/a-startup-to-look-at-clickpasscom.html" />
        <updated>2008-04-09T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/04/09/a-startup-to-look-at-clickpasscom</id>
        <content type="html">&lt;p&gt;Startups launch left and right (Hell I plan to launch my own in the next few months!) but a lot of them don&amp;#8217;t stick out. Clickpass.com is one of those that sticks out for me, but has been kind of flying under the radar lately.Clickpass allows you to use a single login for all your sites. It&amp;#8217;s basically OpenID, but they&amp;#8217;ve done it right and have actually made OpenID very easy to use. Even a few of my friends who could never &amp;#8220;get&amp;#8221; OpenID because it was just a hassle to work with, loved ClickPass.&lt;/p&gt;
&lt;p&gt;So far with Clickpass, I am only using it on HackerNews which makes it kind of pointless for me as I am still having to log in, but currently no other sites I frequently use Clickpass, which is one downfall of it. Adoption for it is slow, but hopefully it picks up.&lt;/p&gt;
&lt;p&gt;What&amp;#8217;s great about Clickpass is once I&amp;#8217;m logged in, all I have to do is click the &amp;#8220;Clickpass Enter&amp;#8221; button on any supported site and I will be logged in, no need to retype information. Additionally, I can mange my details and avatar straight from Clickpass without having to deal with multiple sites.&lt;/p&gt;
&lt;p&gt;Unfortunately, as I mentioned above the adoption is slow. Despite a story on TechCrunch and some initial media, it&amp;#8217;s now kind of flying under the radar. I haven&amp;#8217;t seen any sites added to the supported sites list in the past few weeks and I hope that they get some more adopters.&lt;/p&gt;
&lt;p&gt;Needless to say, I know when I launch my own user-oriented site, I will be supporting Clickpass. It makes sense from a user standpoint and as long as the user isn&amp;#8217;t confused, which Clickpass does very well in not doing, then it works very well.&lt;/p&gt;
&lt;p&gt;Either way, check out Clickpass.com and see what they have to offer. You can also integrate it into your own blog (I will when I actually update to Wordpress 2.5)!&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>How to learn a programming language</title>
        <link href="http://bart.whahay.net/blog/2008/04/08/how-to-learn-a-programming-language.html" />
        <updated>2008-04-08T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/04/08/how-to-learn-a-programming-language</id>
        <content type="html">&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;LEARN&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;JAVA&lt;/span&gt; IN 24 &lt;span class=&quot;caps&quot;&gt;HOURS&lt;/span&gt;!!! Sadly, it won&amp;#8217;t be this fast but there are some ways you can speed up the process of learning a programming language.&lt;/p&gt;
&lt;p&gt;Just like with anything, learning something new is best done when it&amp;#8217;s not crammed, you interact, and you basically dwelve yourself into it. Without further ado, here are 3 ways you can promote the speed and depth of your learning. For my post, I will be using Python as an example as it was my most recent learning.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Read. Read. Read&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Do you like reading books? Well that&amp;#8217;s great, because for the next while you&amp;#8217;re going to be reading about list comprehensions, variable casting, and data control and not about wizards and dragons. Reading online documentation is great, but sometime it just doesn&amp;#8217;t do it. I &lt;span class=&quot;caps&quot;&gt;LOVE&lt;/span&gt; getting a well written book on a language/system and getting into it. Reading &amp;#8220;&amp;#8221;http://www.amazon.com/Python-Nutshell-OReilly-Alex-Martelli/dp/0596100469/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1207663853&amp;amp;sr=8-1&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Python in a Nutshell&lt;/a&gt;&amp;quot; was a great experience because the book was well written and I was able to learn a lot. Plus I now have a bookmarked and tagged (old school sticky note tagging!) book for reference. It is of course important, to find the right book or it may become a mind numbing experience.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Get Involved.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Python has an &lt;span class=&quot;caps&quot;&gt;IRC&lt;/span&gt; channel, Google news group, and much more. In these, you and others are free to ask and answer questions. One of the best ways I&amp;#8217;ve found to learn was to sit in these channels and simply watch as the questions and answers come in. Sometimes I will have my own, and sometimes as I become more informed in the language I too can answer my own questions. It is a &lt;strong&gt;great feeling&lt;/strong&gt; to go from being a totally novice to answering a question for someone, and I find it to be one of my greatest motivators to keep pushing and learning.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://irc.freenode.net&quot;&gt;irc.freenode.net&lt;/a&gt; is a great &lt;span class=&quot;caps&quot;&gt;IRC&lt;/span&gt; network filled with various channels for open source platforms and projects. &lt;a href=&quot;http://groups.google.com&quot;&gt;Google Groups&lt;/a&gt; is also a great reference and has groups for nearly everything. You are also very likely to find Googlers and the guys who are part of the core on their posting :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Just code already!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Reading is nice and all, but it makes me feel like a university student sitting in a lecture. Every time you have gained new knowledge of something, apply it! Write a small app, or extend your current one with your new findings. A good example of this is I learned Python list comprehensions and I was able to modify a lot of my code to make it more readable and smaller.&lt;/p&gt;
&lt;p&gt;There is no point in learning a new language and then not updating your application(s) with your new findings, it may seem like more work, to have to re-write things now and then, but it allows you to look back at your code, make it cleaner, faster, find oddities that you didn&amp;#8217;t notice before, and ship a better product in the end.&lt;/p&gt;
&lt;p&gt;And that about wraps it up. Most of it this is common knowledge, but sometimes it needs to be drilled into your head. Hopefully it has helped!&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>MLSE can kiss my ass.</title>
        <link href="http://bart.whahay.net/blog/2008/04/02/mlse-can-kiss-my-ass.html" />
        <updated>2008-04-02T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/04/02/mlse-can-kiss-my-ass</id>
        <content type="html">&lt;p&gt;This is by far the worst un-subscription for a newsletter I&amp;#8217;ve ever dealt with.&lt;/p&gt;
&lt;p&gt;So I am subscribed to a newsletter from MLSEFans.com. Why? Because I bought tickets from Ticketmaster for some event and it automatically subscribed me.&lt;/p&gt;
&lt;p&gt;So I click un-subscribe on the bottom of the email (Click below to see the long ass form)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://bart.whahay.net/wp-content/uploads/2008/04/unsubscribe.jpg&quot; title=&quot;ff&quot;&gt;&lt;img src=&quot;http://bart.whahay.net/wp-content/uploads/2008/04/unsubscribe.thumbnail.jpg&quot; alt=&quot;ff&quot; width=&quot;300&quot; height=&quot;350&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At the bottom of the form is a place to check a box:&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#ff0000&quot;&gt;&lt;strong&gt;Please remove me from your database&lt;/strong&gt; &amp;#8211; By checking this box, I understand that I will cease&lt;/p&gt;
&lt;p&gt;receiving  marketing information, offers and communications from Maple Leaf Sports &amp;amp; Entertainment Ltd. and its related sports properties and entertainment facilities.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;I click that box, thinking I can skip all that form bullshit and what happens?&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://bart.whahay.net/wp-content/uploads/2008/04/unsubscribe_wtf.jpg&quot; alt=&quot;wtf&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;HAHAHAHAHAH&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;YAH&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;RIGHT&lt;/span&gt;. Fuck you guys. Reported as Spam in my Gmail. Good luck having me see anymore of your shit ever again&lt;/p&gt;
&lt;p&gt;I hate this kind of shit.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>seriously the best music I've ever listened to</title>
        <link href="http://bart.whahay.net/blog/2008/03/27/seriously-the-best-music-ive-ever-listened-to.html" />
        <updated>2008-03-27T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/03/27/seriously-the-best-music-ive-ever-listened-to</id>
        <content type="html">&lt;p&gt;I&amp;#8217;m a big fan of &lt;a href=&quot;http://en.wikipedia.org/wiki/Godspeed_You!_Black_Emperor&quot;&gt;GodSpeed You! Black Emperor&lt;/a&gt;. I&amp;#8217;ve listened to all their albums many, many times over. When I found out that they were pretty much done with, I became so, so sad.&lt;/p&gt;
&lt;p&gt;Then I discovered A Silver Mt. Zion, or now known as &lt;strong&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/A_Silver_Mt._Zion&quot;&gt;Thee Silver Mt. Zion Memorial Orchestra &amp;amp; Tra-la-la band&lt;/a&gt;. &lt;/strong&gt;The bandis headed by 3 members of Godspeed, plus some other talent and the chemistry of all these talents combined is &amp;#8230; like liquid sex.&lt;/p&gt;
&lt;p&gt;Since discovering them abuot 2 weeks ago, I have not been able to stop listening to them. I&amp;#8217;ve already bought tickets for their Toronto show in &lt;span class=&quot;caps&quot;&gt;JUNE&lt;/span&gt; (A bit ways away!) and I simply cannot wait. They have 5 albums out, some really depressing, some powerful, but all very beautiful.&lt;/p&gt;
&lt;p&gt;Also if you are contemplating suicide, do not listen to the first album (He has left us alone, but shafts of light sometmies grace the corner of our rooms). It is fucking depressing.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;On silver mount zion&lt;/p&gt;
&lt;p&gt;All buried in ruins&lt;/p&gt;
&lt;p&gt;We was dancing the hora&lt;/p&gt;
&lt;p&gt;Until we vomited blood&lt;/p&gt;
&lt;p&gt;Spinning like crazy&lt;/p&gt;
&lt;p&gt;Shoshana was jonesing&lt;/p&gt;
&lt;p&gt;The towers had fallen&lt;/p&gt;
&lt;p&gt;And the wind called out&lt;/p&gt;
&lt;p&gt;My grandfather&amp;#8217;s name&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s kill first the banker&lt;/p&gt;
&lt;p&gt;With his professional demeanour&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s televise and broadcast&lt;/p&gt;
&lt;p&gt;The raping of kings&lt;/p&gt;
&lt;p&gt;Let our crowds be fed on&lt;/p&gt;
&lt;p&gt;Teargas and plate-glass&lt;/p&gt;
&lt;p&gt;&amp;#8217;Cause a people united&lt;/p&gt;
&lt;p&gt;Is a wonderful thing&lt;/p&gt;
&lt;p&gt;I know that you&amp;#8217;re dying&lt;/p&gt;
&lt;p&gt;And i know i&amp;#8217;m unwell&lt;/p&gt;
&lt;p&gt;And together we sashay&lt;/p&gt;
&lt;p&gt;Thru variations of hell&lt;/p&gt;
&lt;p&gt;And as you walk through valleys of fear&lt;/p&gt;
&lt;p&gt;The lure of my bed is ever near&lt;/p&gt;
&lt;p&gt;Oh, don&amp;#8217;t be afraid, though the parade&lt;/p&gt;
&lt;p&gt;Will not pass our way&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s nobler to never get paid&lt;/p&gt;
&lt;p&gt;Than to bank on shit and dismay &lt;/em&gt;&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>The ultimate internet TV box</title>
        <link href="http://bart.whahay.net/blog/2008/03/22/the-ultimate-internet-tv-box.html" />
        <updated>2008-03-22T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/03/22/the-ultimate-internet-tv-box</id>
        <content type="html">&lt;p&gt;I&amp;#8217;ve been playing around with various online tv providers lately. It&amp;#8217;s a huge growing market, with &lt;a href=&quot;http://www.hulu.com&quot;&gt;Hulu&lt;/a&gt; being a huge player (But U.S only!) and &lt;a href=&quot;http://www.getmiro.com&quot;&gt;Miro&lt;/a&gt;, a free, open source, available everywhere player that focuses on &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; feeds to fetch episodes across the net.&lt;/p&gt;
&lt;p&gt;Despite all these advances in trying to push major and freelance broadcasting online, the mass market simply isn&amp;#8217;t going for it. Sure, us geeks and early adopters can enjoy these services, but most people like good old fashioned T.V.&lt;/p&gt;
&lt;p&gt;However, with all these services we have all the shows we usually watch, but whenever we want, with pause, rewind, forwarding, no commercials, social features, and much more. Why hasn&amp;#8217;t there been a huge adoption of these services?&lt;/p&gt;
&lt;p&gt;Simply put, people like to be able to sit down and channel surf. People do not want to watch their favourite shows on a 20&amp;quot; &lt;span class=&quot;caps&quot;&gt;LCD&lt;/span&gt; 3 feet away from them. They want a comfy couch, a remote, and a lot of variety. So how can we get this?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bring something like Miro, to a set-top box&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.getmiro.com&quot;&gt;Miro&lt;/a&gt; is in my opinion the best idea so far when it comes to internet T.V. You subscribe to channels (Like you would in any regular cable package). It automatically downloads new episodes of the shows to your library and you can watch them whenever you want. To make it easy for you, it also by default deletes old episodes you&amp;#8217;ve watched after 5 days (You have the option to keep them).&lt;/p&gt;
&lt;p&gt;Now that you know a bit more about Miro, why not bring this to a set-top box? A small computer running, simply downloading and displaying the content. Miro is very good at doing this for all the various free video casts out there, but how do we get the major networks on it?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A monthly subscription service, like we pay now would work perfectly.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I would be more then happy to pay a set fee each month to get my favourite T.V shows. If Hulu.com can be free, why not do almost the same idea but on the T.V with a monthly fee? Let me create a package of T.V Shows, Series, or Channels. Let&amp;#8217;s say I&amp;#8217;m a big fan of House, Family Guy, The Simpsons, and Lost. Toss this together for me in a package, throwing in any extras and charge me a small monthly fee of say $5 for just those shows. Let&amp;#8217;s say I want episodes from the Space Channel, History, and Discovery. Charge me $10 /month to have a good stream of episodes from these networks and I&amp;#8217;d be more then happy to pay that.&lt;/p&gt;
&lt;p&gt;All the shows would arrive onto my box, via a subscription like service. Create a model that makes it &lt;strong&gt;very easy&lt;/strong&gt; for me to subscribe to more T.V Shows or channels.&lt;/p&gt;
&lt;p&gt;Of course, the problem here lies that we have hundreds of channels, all from different corporations and a bunch of legal issues come in hand. This is why I am loving free internet T.V. (Mostly) quality content produced by people who simply love what they are doing. No legal issues, no fees, just entertainment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We won&amp;#8217;t get this in the near future.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately, knowing all the restrictions and legal hassles involved in getting the major t.v broadcasting to other locales, I do not see something like this coming any time soon. In the mean time, I am building a small $200 P.C that will incorporate services like Miro to get free internet T.V on my television so I can watch shows on the comfort of my couch.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>I was all hacked up!</title>
        <link href="http://bart.whahay.net/blog/2008/03/18/i-was-all-hacked-up.html" />
        <updated>2008-03-18T00:00:00-07:00</updated>
        <id>http://bart.whahay.net/blog/2008/03/18/i-was-all-hacked-up</id>
        <content type="html">&lt;p&gt;A few days ago the server that this blog runs on got hacked. It was from a vulnerbility in a file uploader we run on GamingW.net. The hacker decided to delete a few things but backups saved most things.&lt;/p&gt;
&lt;p&gt;For some reason though, my blog did not live! The database was fine but I have lost my template. I will have to modify to something but for now I&amp;#8217;m stuck with this ugly default one.&lt;/p&gt;
&lt;p&gt;Anyways will be writing something most likely on small business soon. Also, starting a herb garden :)&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>How to get your customer excited, Or: Why WoW is better then LOTRO</title>
        <link href="http://bart.whahay.net/blog/2008/03/03/how-to-get-your-customer-excited-or-why-wow-is-better-then-lotro.html" />
        <updated>2008-03-03T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/03/03/how-to-get-your-customer-excited-or-why-wow-is-better-then-lotro</id>
        <content type="html">&lt;p&gt;Before I begin this post: This is not about the gaming experience from either World of Warcraft or Lord of the Rings online, this is about what happens before all the gaming. Getting the thing installed!&lt;/p&gt;
&lt;p&gt;I had some free time in the mornings this weekend to just relax. I decided I would do so by installing Lord of the Rings online and play my free trial. I had the CD&amp;#8217;s that I had purchased about 5 months ago in my desk and plopped those into my CD drive.&lt;/p&gt;
&lt;p&gt;The installation got going, kind of a cheesy interface but whatever, it was working. While installing, I downloaded a full patch from 1.0 to the current Book 11 patch so I could be ready for that. The installer finished with no quirks and I opened up the patcher. After about 20 minutes of patching it was nearing the end when all of a sudden&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#8220;Cannot purge data files!&amp;#8221; &lt;/strong&gt;at 99% of patching this showed up. What? Ok, shit happens, I look up the error and most suggest to re-install Lord of the Rings online and re-patch. I do that again, wasting another good hour or so.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cannot purge data files!&lt;/strong&gt; .. Yup, it happened again, at 99% again. Ok, now this is annoying. I do more research and find out that some people who bought the game early had issues and had to download the huge 5gb client from the web to be able to play. Great customer experience so far. The CD&amp;#8217;s I bought don&amp;#8217;t even fucking work.&lt;/p&gt;
&lt;p&gt;So I download the client, surprisingly it&amp;#8217;s going fast (550kb/sec average) .. wow! That made me slightly happy. The client downloads and once again, I run the patching tool.&lt;/p&gt;
&lt;p&gt;Patching is taking awhile, you&amp;#8217;d think they would offer a some-what patched client from their official site but I guess not. I&amp;#8217;m nearing 100% in patching .. it&amp;#8217;s getting close, when all of a sudden&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3073/2304334933_cf3b328421_o.jpg&quot; height=&quot;589&quot; width=&quot;725&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;YOU&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;HAVE&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;GOT&lt;/span&gt; TO BE &lt;span class=&quot;caps&quot;&gt;SHITTING&lt;/span&gt; ME&lt;/strong&gt;. Yup, my patcher went &lt;span class=&quot;caps&quot;&gt;PAST&lt;/span&gt; 100% and kept going. You know where it finished? 360% It also took very long, probably another hour to finish.&lt;/p&gt;
&lt;p&gt;Finally .. &lt;span class=&quot;caps&quot;&gt;LOTRO&lt;/span&gt; was installed. I loaded the game up, moved around for a bit, and fucking deleted this piece of shit game and threw my CD&amp;#8217;s away.Â  &lt;strong&gt;I invested about 5 hours to get this shit running and I was too angry at it to even want to play after that.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A day passed,&lt;/strong&gt; and I was hanging out with my brother helping my girlfriend move in. Off and on we got talking about WoW and I decided I&amp;#8217;d give WoW a shot and play on his character to help him build up gear and ratings (I am not too informed on all the WoW terms yet)&lt;/p&gt;
&lt;p&gt;I sat down at my computer at about 11pm and decided to install WoW before bed as I wasn&amp;#8217;t too tired. I popped in the first CD and got going. The original WoW is 6 CD&amp;#8217;s of data, but it went by fast and in about 20 minutes I was already installing the expansion (Burning Crusade)&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2176/2307008321_984199c5c9.jpg?v=0&quot; height=&quot;357&quot; width=&quot;450&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The expansion took another 10 minutes. After that, I began downloading a large patch for the game. Estimated time said it would be about 2 hours as I had a lot of patch data to download. No biggie I though, I will go to sleep and finish it tomorrow morning.&lt;/p&gt;
&lt;p&gt;I woke up today to find not only had my download finished fine, it had patched it all up once the download finished and after clicking Ok, I was ready to play WoW.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No hassle, fast, a nice friendly install UI&lt;/strong&gt; &lt;strong&gt;made me excited to play&lt;/strong&gt;. I logged on to make sure it all went through fine and it had.&lt;/p&gt;
&lt;p&gt;So the lesson here? &lt;span class=&quot;caps&quot;&gt;LOTRO&lt;/span&gt; and Turbine fucking blow. Blizzard does, and always has known how to please customers and this is no different. I see so many people complaining on the WoW forums about the game and such but after the experience I had with &lt;span class=&quot;caps&quot;&gt;LOTRO&lt;/span&gt; I see how spoiled they all are.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Why Microsoft adCenter sucks.</title>
        <link href="http://bart.whahay.net/blog/2008/02/26/why-microsoft-adcenter-sucks.html" />
        <updated>2008-02-26T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/02/26/why-microsoft-adcenter-sucks</id>
        <content type="html">&lt;p&gt;Today for work I decided to signup for Microsoft adCenter to try out some advertising on other platforms. We&amp;#8217;ve already had great success with Google Adwords so I figured since competition must be much less we could give &lt;span class=&quot;caps&quot;&gt;MSN&lt;/span&gt; a shot.&lt;/p&gt;
&lt;p&gt;After signing up and creating my first add, I was able to get into the adCenter control panel and begin actually doing things. Regardless, I will get straight to the point. Here is why this thing sucks:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Â After creating my ad in the initial process, it never warned me I had dis-allowed content in my ad (&lt;span class=&quot;caps&quot;&gt;MSN&lt;/span&gt; doesn&amp;#8217;t like phone numbers!). No, it created my ad all fine and dandy, and only after I had logged into the panel and checked it out did I see my ad was not approved.&lt;/li&gt;
	&lt;li&gt;Everytime I load the godamn site in IE7 I am asked to install some ActiveX stuff. I loaded the site in IE7 because when I tried to use it in Firefox, it seemed buggy and unresponsive. This was actually the case regardless of browser.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Too much Loading &amp;#8230;.&lt;/strong&gt; What the hell is going on. I am not on a 56k modem anymore, why is it taking over 20 seconds for a simple page to load? It&amp;#8217;s not a huge report, all it has to load is my single ad I&amp;#8217;ve created so I can modify and look at it. &lt;img src=&quot;http://bart.whahay.net/wp-content/uploads/2008/02/adcenter_ads.jpg&quot; alt=&quot;adcenter ads&quot; align=&quot;middle&quot; /&gt;&lt;/li&gt;
	&lt;li&gt;They charged me $5 to setup an account. Sure, I got a promotional $25 of credit but why do you have to charge me $5 to get going? Sure, it&amp;#8217;s pennies for a business but Google never asked me for money until I actually started getting clicks.&lt;/li&gt;
	&lt;li&gt;The site, like many other Microsoft sites simply does not work in Firefox. Fuck you guys.&lt;/li&gt;
	&lt;li&gt;The interface is not intuitive at all. Where are my stats, how do I get them? I .. don&amp;#8217;t understand at all. I click on Keywords for my campaign and I do not even &lt;span class=&quot;caps&quot;&gt;SEE&lt;/span&gt; them unless I click a very subtle link.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a product that you are literally throwing money at, this sure is a piece of crap. I am glad this won&amp;#8217;t be the main advertising platform we are using but the competition is so slim (I wonder why, because it sucks?) that putting ads up on here will benefit us in the long run.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re looking to sell your product/service, Microsoft adCenter will be good for the fact that you will be paying much less per click, but you will be getting less exposure and you have to deal with a horrible interface. Advertise on Google, then put in some extra cash to here for some extra cheap clicks.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Weekend Stuff: How I code, some Python resources, food.</title>
        <link href="http://bart.whahay.net/blog/2008/02/16/weekend-stuff-how-i-code-some-python-resources-food.html" />
        <updated>2008-02-16T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/02/16/weekend-stuff-how-i-code-some-python-resources-food</id>
        <content type="html">&lt;p&gt;It&amp;#8217;s the weekend. I&amp;#8217;m sitting here at work about to get ready to finish a project I&amp;#8217;ve been working on for a few hours each day this week and I figured I&amp;#8217;d just put a few of my thoughts together in a post.&lt;/p&gt;
&lt;h2&gt;Â &lt;strong&gt;How I code &amp;#8230;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Everyone seems to have a different way of doing things when they code. Some like it in absolute peace and quiet, others need distraction, some can&amp;#8217;t code without tons of planning, some just go at it.&lt;/p&gt;
&lt;p&gt;For myself, I need music, a good cup of tea, and no other distractions. My biggest problem when it comes to coding is if I am not in the groove for it, for whatever reason it&amp;#8217;s very hard for me to get into it, but it&amp;#8217;s still possible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Setting the mood&lt;/strong&gt; is very important for me (and others!). I like to brew up a big pot of green tea, turn on some quality programming music (&lt;a href=&quot;http://bart.whahay.net/music-to-code-to/&quot;&gt;see here&lt;/a&gt; for a list of my favorites), set the music at the perfect pitch, relax for a bit, and then get going. Additionally, I turn off &lt;span class=&quot;caps&quot;&gt;MSN&lt;/span&gt; and any other IM services. All they are is a distraction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Having a plan &lt;/strong&gt;is a must. It&amp;#8217;s almost impossible to code just on a whim without a basic idea. I have a plan usually, and when I do not have any real documentation laid out I write pseudo code! Pseudo code is basically allowing me to do all the coding logic without the syntax. I then mess with the psuedo code until I am happy with the flow, and I can begin coding the real thing. Knowing the syntax is not even half the battle after all :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Just gotta keep going! &lt;/strong&gt;One thing I like to do is just get into a flow and do not stop. Next thing I know, 4 hours have passed. It&amp;#8217;s perfect because I know I am in the zone and can get things done, and I have my night set up in such a way that I do not need to worry about other obligations and distractions. Even with a girlfriend, she can understand you are busy and give you your time to yourself so it&amp;#8217;s not a huge issue.&lt;/p&gt;
&lt;h2&gt;Python Resources this week&lt;/h2&gt;
&lt;p&gt;Once again this week saw me playing with Python, albeit not as much as I wanted to. Regardless, here&amp;#8217;s some more great blogs I found for Python resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://wolfram.kriesing.de/blog/&quot;&gt;Pythoneer&lt;/a&gt; is not exclusively a Python resource, but has some great posts now and then.&lt;/li&gt;
	&lt;li&gt;Just like the above, &lt;a href=&quot;http://www.artfulcode.net/&quot;&gt;Artful Code&lt;/a&gt; is not Python exclusive but a great resource for well, Artful code!&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://codekite.com/&quot;&gt;codekite&lt;/a&gt; is a great blog on programming in general. Funny his latest post is also a link to various Python resources&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.eflorenzano.com/blog/tag/django/&quot;&gt;Eric Florenzano&amp;#8217;&lt;/a&gt;s blog, posts tagged as django. I am 99% sure he is a contributor to the Django framework but I can&amp;#8217;t be sure&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Food: &lt;span class=&quot;caps&quot;&gt;YUM&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;YUM&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;ve got a hankering to make some new and unique food this week. Here are some things on the menu that I hope to post recipes for (with pics perhaps!) this week or so:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Mussels! I have only had mussels about twice, both times at a chinese buffet so I&amp;#8217;d like to take a shot at them on my own. With some white wine and a great onion/garlic marinate for them, they should turn out great. I will definitely document this when I make them.&lt;/li&gt;
	&lt;li&gt;Bourbon Chicken. This is easily one of my favourite take-out foods ever. Problem is, it&amp;#8217;s generally very bad/greasy for you from the fast food places so I am going to attempt to make a healthy alternative at home. Already got some good recipes.&lt;/li&gt;
	&lt;li&gt;Pizza dough. Although I cannot eat pizza at all (yay gluten-free/dairy-free life!) I want to attempt to make a pizza dough I can eat. Once I achieve this, I can make a very simple cheesless pizza.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Well that&amp;#8217;s about it. I&amp;#8217;m going to probably redesign this blog a bit to fit more into what I&amp;#8217;m posting about as my left menu doesn&amp;#8217;t really correspond to much anymore. But for now, I really should start working!&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>How to take the retail money grubbing demon out of Valentines Day</title>
        <link href="http://bart.whahay.net/blog/2008/02/14/how-to-take-the-retail-money-grubbing-demon-out-of-valentines-day.html" />
        <updated>2008-02-14T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/02/14/how-to-take-the-retail-money-grubbing-demon-out-of-valentines-day</id>
        <content type="html">&lt;p&gt;This will be a quick one! On my way to work today, listening to McArthur in the morning on 103.9 The Hawk, he made a rant about how Valentines Day sucks.&lt;/p&gt;
&lt;p&gt;His rant was the standard one: Valentines Day has become a way for retail to take your money, forcing you to buy over-priced chocolates, flowers, and other various gifts. He is perfectly right. The mall has been full of Valentines Day deals for weeks now, constantly raising prices, even on the most basic things (A standard Dark Chocolate bar normally at $1.49 was $2.29 at Zehrs .. and it&amp;#8217;s not even a valentines type gift, it&amp;#8217;s just regular chocolate!)&lt;/p&gt;
&lt;p&gt;I totally agree with him and I hate what retail stores do. But there are very easy ways to show how much you love your spouse, without the need to spend a lot of money on over-priced items.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Instead of buying chocolates and going out for dinner, stay in!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This valentines I have planned a very nice dinner at my place for me and Miranda. I&amp;#8217;m making a steak dinner (She looooves steak) with specialty baked potatoes and asparagus. For dessert, I&amp;#8217;ve baked my own cookies and will serve them with some chocolate icecream. Sure, this costed me some money, but nowhere near what I would spend at a restaurant or even a box of chocolates. Plus, it has meaning. I&amp;#8217;m taking the time to do all of this, making her something I know she will love, and instead of buying chocolates I made my own. Regardless of how much know-how you have in the culinary world&lt;strong&gt;, she will be impressed because you took the time, and you focused on what she loves. &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flowers are nice, and you aren&amp;#8217;t getting out of it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Perhaps unfortunately for some. Flowers are pretty much a given for Valentines. A nice bouquette of roses will run you about $30 so it&amp;#8217;s not too hard on the cash, and it will make her feel great. Pick the correct type of flowers, depending on your relationship. If flowers are too much out of your budget, get her a great card and right a heart-felt message in it, letting her know how much you truly mean to her.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It doesn&amp;#8217;t have to be perfect.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Last night I was at my parents and while I was there, Miranda dropped by my apartment unexpectedly (I was expecting her later, when I would already be home). I had set down some roses and a teddy bear I bought for her in my room so I could have it ready for tomorrow. She found it a tad early obviously! This of course, is no issue. Who cares if she didn&amp;#8217;t get them on the exact date? It was an unexpected situation but she still appreciated them. Plus, the teddy was soft as hell and no woman can resist that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Make it a fun simple night between you two.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You don&amp;#8217;t have to go out in the town for Valentines Day. It should be a day for just you two, to celebrate your love just a bit more then usual. Find a great movie at Blockbuster either together, or one that you know she will love. After dinner, sit down with dessert and enjoy the movie. All those endorphins from the chocolate, the food, (if you picked the right one), the movie will make for a great evening before heading to bed!&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s just a few things I wanted to say on the topic. I am no expert on Valentines Day or relationships. I am only 23 after all! Regardless,Â  I have not stressed over this Valentines Day at all, and I know it will be, and has so far been a very relaxing, enjoyable day.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Why Django and Python just won my heart</title>
        <link href="http://bart.whahay.net/blog/2008/02/08/why-django-and-python-just-won-my-heart.html" />
        <updated>2008-02-08T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/02/08/why-django-and-python-just-won-my-heart</id>
        <content type="html">&lt;p&gt;As of yesterday, I completed my first &lt;a href=&quot;http://www.cloutsnchara.com/&quot;&gt;Django app&lt;/a&gt;. Django is a high-level Python &lt;a href=&quot;http://www.djangoproject.com/&quot;&gt;web framework&lt;/a&gt; designed for rapid development and quick deployment. Did it deliver? Oh god yes.&lt;/p&gt;
&lt;p&gt;Coming into this project, my Python skill was hurting. I had not written a real Python application in a few months and before that, I never had a solid grasp of Python to begin with.&lt;/p&gt;
&lt;p&gt;So why did Django make me so happy? First off, in a weeks time, a few hours here and there throughout the week, I managed to: Create a fully functional website with ability to add new posts (Along with card specials, release schedules), polls, a simple member registration, and of course a fully functional admin panel that made it easy for my client to add content to their site. &lt;strong&gt;I did this all, with no knowledge of Django before hand!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Some highlights of the Django framework:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Installing and configuring Django takes about 15 minutes for a newbie. Download the project from &lt;span class=&quot;caps&quot;&gt;SVN&lt;/span&gt; (At this point in its development, this is a good idea), untar it, modify some settings and you&amp;#8217;re golden&lt;/li&gt;
	&lt;li&gt;Setting up a project is simple with manage.py, the core of Django&amp;#8217;s management capabilities. Setup the project, then setup your first app, and within a minute you are ready to fly.&lt;/li&gt;
	&lt;li&gt;For each application, Django creates a views.py, models.py and urls.py. These three files are the core of your program and it makes it super easy. Define your table and any core functions in models.py for that application (Ie: News Posts app), setup the templates you will pump out in views.py, and urls.py is if you want to get down and dirty with url structures.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;syncdb and django admin are amazing. &lt;/strong&gt;I cannot stress this enough. Define your models in models.py, run syncdb and all your tables (including multi-relational ones!), primary keys, etc are &lt;span class=&quot;caps&quot;&gt;ALL&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;CREATED&lt;/span&gt;! I love it!&lt;/li&gt;
	&lt;li&gt;Once all your tables are created, login to Django admin and you have full functionality to play with all your data. If you setup a DateTime variable in your model, the admin displays that field with a nice Javascript calendar popup.&lt;/li&gt;
	&lt;li&gt;Python is a sexy language that you will love the more you use it. When I first began playing with Python it was ok, kind of cool, but nothing amazing. &lt;strong&gt;The more I learn about Python, the more I love it. &lt;/strong&gt;I&amp;#8217;ve used &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; for years and I honestly can&amp;#8217;t bare to look at it after working with Python in the past few months.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There&amp;#8217;s a reason why companies like Google and &lt;span class=&quot;caps&quot;&gt;NASA&lt;/span&gt; have adopted some of their technologies around Python, because it is code sex. Yes, I like that term.&lt;/p&gt;
&lt;p&gt;To try out Django, check out these resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The official &lt;a href=&quot;http://www.djangoproject.com/&quot;&gt;Django project site&lt;/a&gt; has a great documentation and beginners tutorial.&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.b-list.org/&quot;&gt;The B-List&lt;/a&gt; has some good code example and tutorials for Python/Django.&lt;/li&gt;
	&lt;li&gt;#django on irc.freenode.net has some great people. Magus- is a total dick, but very helpful ;)&lt;/li&gt;
&lt;/ul&gt;</content>
    </entry>
    
    <entry>
        <title>Spice Girls live up the Air Canada Centre</title>
        <link href="http://bart.whahay.net/blog/2008/02/04/spice-girls-live-up-the-air-canada-centre.html" />
        <updated>2008-02-04T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/02/04/spice-girls-live-up-the-air-canada-centre</id>
        <content type="html">&lt;p&gt;Last night, hordes of thousands of girls, young to mature, got to relive their childhoods. Oh, and some guys too. That&amp;#8217;s right, Spice Girls played live in the Air Canada Centre last night making their debut in Toronto for their short, but very busy world reunion tour.&lt;/p&gt;
&lt;p&gt;We were in the upper bowl, but the sound and view was amazing. Personally, I liked watching from their as I could see the entire crowd from above, and could really feel the energy.&lt;/p&gt;
&lt;p&gt;And my god was there energy. Every pause in singing, there was a loud, massive screaming of girls. Every moment any of the Spice Girls did something different, or put on a new dress, or showed some signs of their old days, the girls yelled.&lt;/p&gt;
&lt;p&gt;Miranda was singing along to every song, although she didn&amp;#8217;t dance (Owell)! We were in the upper bowl, and in the &lt;span class=&quot;caps&quot;&gt;ACC&lt;/span&gt;, you have good seats pretty much anywhere. Even then, the energy shown by the people sourrounding me was nuts. All the girls around me were dancing, clapping, singing along, and when they moved &amp;#8211; I felt it. I could feel the floor vibrating. It was kind of eery, but also pretty cool.&lt;/p&gt;
&lt;p&gt;In the end, the show was a blast, which could be made obvious by my total lack of negativity in this post. The energy was great, the Spice Girls put on an amazing show, and truly know how to get the crowd going, and the sound, as usual in the &lt;span class=&quot;caps&quot;&gt;ACC&lt;/span&gt; was incredible.&lt;/p&gt;
&lt;p&gt;I am obviously not a huge fan of the Spice Girls, but I grew up with them and know their stuff, and very much enjoyed it. The song &amp;#8220;Spice up your life&amp;#8221; was easily one of the best performances I have seen in my lifetime.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>I'm back</title>
        <link href="http://bart.whahay.net/blog/2008/01/31/im-back.html" />
        <updated>2008-01-31T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/01/31/im-back</id>
        <content type="html">&lt;p&gt;After about 2 weeks of non existence, my blog is back. Been very busy.&lt;/p&gt;
&lt;p&gt;Some things that I&amp;#8217;ve been working with in the past 2 weeks:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Django Python Framework&lt;/li&gt;
	&lt;li&gt;CakePHP &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; Framework (I like Django better ! )&lt;/li&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;SEO&lt;/span&gt; Blogs and resources&lt;/li&gt;
	&lt;li&gt;The ups and downs of freelancing. When you should and should not do it&lt;/li&gt;
	&lt;li&gt;Sitting outside in the freezing cold for 10 hours for a band I don&amp;#8217;t even know that well&lt;/li&gt;
	&lt;li&gt;Getting oddly excited to see Spice Girls in a few days&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;#8217;ll be posting some lovely text soon.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Freelancing: Why it could, or not be for you</title>
        <link href="http://bart.whahay.net/blog/2008/01/31/freelancing-why-it-could-or-not-be-for-you.html" />
        <updated>2008-01-31T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/01/31/freelancing-why-it-could-or-not-be-for-you</id>
        <content type="html">&lt;p&gt;Freelancing is the act of doing work for someone that you are not truly working under. They give you a task, a time frame, you complete it, and if you like each other you may do more projects together. There &lt;a href=&quot;http://freelanceswitch.com/&quot;&gt;are&lt;/a&gt; &lt;a href=&quot;http://www.odesk.com&quot;&gt;many&lt;/a&gt; &lt;a href=&quot;http://www.rentacoder.com/RentACoder/default.asp&quot;&gt;sites&lt;/a&gt; that help you find freelance work.&lt;/p&gt;
&lt;p&gt;Freelancing has been known to pay out pretty well for pretty simple work. Most companies looking in the freelancer market are simply needing some quick fixes or a small addition to their company, and hiring a dedicated person or entire team to do this is just not in their budget. You can speak to 90% of CEO&amp;#8217;s out there and I&amp;#8217;m sure they do not truly understand the amount of time, skills and testing to get various tech-related things done.&lt;/p&gt;
&lt;p&gt;So basically, Freelancing sounds awesome! You&amp;#8217;re getting paid a premium, from home and after you&amp;#8217;re done with the job, you most likely never have to speak to the client again. What is there to lose?&lt;/p&gt;
&lt;p&gt;First of all, this is coming from the point of view that freelancing is a &amp;#8220;part time job&amp;#8221; and you are not doing this fulltime. Freelance full time is just a stupid idea in general and I don&amp;#8217;t know why anyone would put themselves through that kind of hell.&lt;/p&gt;
&lt;p&gt;Where does Freelancing go wrong? It limits you, it restricts you, you&amp;#8217;re usually not working with your own code, and client&amp;#8217;s are absurdly picky. Here&amp;#8217;s some disgustingly annoying things I&amp;#8217;ve had to see/hear:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Working with other peoples code can be the worst thing ever. One client I worked for had a large scale website that was developed by a freelancers from India. Each page had a mix of &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;/Html, it was horribly formatted, and to simply change the header of the site, I had to modify about 25 files because they did not use a simple header inclusion. This is of course one of those worst-case scenarios but it is &lt;strong&gt;very common&lt;/strong&gt;.&lt;/li&gt;
	&lt;li&gt;A client I worked for would spent about an hour or two with me making small, tiny tweaks after I had completed the project to his look. He sent me a &lt;span class=&quot;caps&quot;&gt;PDF&lt;/span&gt; with the image of what he wanted, and it was essentially a carbon copy. He then spent an hour telling me small things like &amp;quot;Make the S from the header be above the N in &amp;#8216;Name&amp;#8217;. What the fuck is that?&lt;/li&gt;
	&lt;li&gt;Many clients are flaky. I haven&amp;#8217;t had this happen too much but some will promise you money, or more projects down the line before even paying you, in an attempt to make you lower your price or essentially work for free.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those are of course, only a few of the things I&amp;#8217;ve encountered over the last few months. Freelancing has its upsides, it pays generally well (An average of $35-50 / hour), you don&amp;#8217;t need to have a close relationship with your client, and you can do it at your own leisure.&lt;/p&gt;
&lt;p&gt;However, I&amp;#8217;ve realized freelancing is not for me. Sure, I can do it at my own leisure but the tasks I am doing are crippling my creativity. Last week, I spent about 10 hours total working on a project for a client. I got paid, and was happy, but I also lost a lot of my free time to work on my own personal projects and move my own ideas forward. Nitpicky clients, the loss of time for your own self, and horrible code are some of the reasons why I won&amp;#8217;t be freelancing anymore.&lt;/p&gt;
&lt;p&gt;I myself am full of ideas and think it would be a greater investment not only financially, but more so mentally and educationally to spend my time doing the things I love and working for myself, creating wonderful applications and services that I am happy with, not the entire polar opposite.&lt;/p&gt;
&lt;p&gt;Although this post was mostly bashing Freelancing, here&amp;#8217;s some good resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://freelanceswitch.com/&quot;&gt;Freelance Switch&lt;/a&gt; &amp;#8211; A great site helping you move your life to full time freelance. Gives tips on dealing with clients, finding the good jobs, and balancing it all out.&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.odesk.com&quot;&gt;oDesk&lt;/a&gt; &amp;#8211; Probably the best site I found for freelance work. It&amp;#8217;s easy to use, and it can send you daily alerts of new jobs based on a criteria you&amp;#8217;ve chosen.&lt;/li&gt;
&lt;/ul&gt;</content>
    </entry>
    
    <entry>
        <title>Today I went crazy.</title>
        <link href="http://bart.whahay.net/blog/2008/01/11/today-i-went-crazy.html" />
        <updated>2008-01-11T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/01/11/today-i-went-crazy</id>
        <content type="html">&lt;p&gt;For the longest time ever (Since I was 15), I have run the site &lt;a href=&quot;http://www.gamingw.net&quot;&gt;Gaming World&lt;/a&gt;. The sites been through its up and downs, and currently in its down point (No site, just forums, slow server, lots of downtime) I decided to finally do something about one point&lt;/p&gt;
&lt;p&gt;Then last night, I &lt;a href=&quot;http://www.gamecake.net/forums/index.php?topic=68182.0&quot;&gt;read this topic&lt;/a&gt; and I decided to make some changes. I sat down, and researched what I needed for the forums to function correctly, how to fix everything long term and got going.Â  I did my calling, my ordering, and wrote some notes to the staff and went to sleep.&lt;/p&gt;
&lt;p&gt;Woke up this morning, and immediately got going. Shut down the GW Forums, and went to work. Backed up, uploaded, modified config files, and within 2 hours we were seeing the Gaming World forums on their &lt;a href=&quot;http://www.gamecake.net/forums/&quot;&gt;new home&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Through all of this, I was able to response to queries, keep in contact with my consumers (Or in simpler words: The GW users), and talk to my &amp;#8220;staff&amp;#8221; about what needs to be changed, and gave them timelines.&lt;/p&gt;
&lt;p&gt;Today was a sign of the old admin that used to run GW (Me). I got detached from the site and couldn&amp;#8217;t put much care and thought into it, but today I did, and I can only hope this spark I&amp;#8217;ve had for the last few weeks about changing things and moving forward will stay.&lt;/p&gt;
&lt;p&gt;Essentially, this is a lesson in keeping your costumers happy. I kept mine updated, joked around with them, and let them test things that no one else could see (The beauty of an &lt;span class=&quot;caps&quot;&gt;IRC&lt;/span&gt; channel) and in the end, I had a functioning, speedy forum and no one was complaining at the 2 hours of downtime.&lt;/p&gt;</content>
    </entry>
    
    <entry>
        <title>Going into the ring with Diet and beating it</title>
        <link href="http://bart.whahay.net/blog/2008/01/02/going-into-the-ring-with-diet-and-beating-it.html" />
        <updated>2008-01-02T00:00:00-08:00</updated>
        <id>http://bart.whahay.net/blog/2008/01/02/going-into-the-ring-with-diet-and-beating-it</id>
        <content type="html">&lt;p&gt;It&amp;#8217;s the new year, and for many their new years resolution is to lose weight. It&amp;#8217;s hard to lose weight for a lot of people, and it takes a lot of dedication and commitment, but it can be done without too much hassle.&lt;/p&gt;
&lt;p&gt;About 2 years ago, I lost 50 pounds in about half a year. I initially lost it really fast because I went on a very strict diet, but it slowed down and I finally evened out at a now healthy 160 pounds. It wasn&amp;#8217;t easy initially, but once I got into it, it felt like normal.&lt;/p&gt;
&lt;p&gt;With this new year, Miranda wants to go on a diet and lose some weight. She had the idea in about December but it&amp;#8217;s pointless to begin a diet during Christmas, even I ate a ton of sugar! We&amp;#8217;ve decided to both go on a Yeast-free diet, which are very good post-Christmas due to all the sugar/cookies/cakes you had which has built up in your system.&lt;/p&gt;
&lt;p&gt;Miranda&amp;#8217;s goal is to lose 20 pounds by February 20th, in which I will get a nipple ring for her if she does (I am an idiot, I know). My goal is to simply stay on the diet, and help her out. I will be cooking most of the meals and trying my best to keep her full and happy without sugar, bread, milk and all those other goodies.&lt;/p&gt;
&lt;p&gt;With that in mind, here&amp;#8217;s some tips I learned from my own weight loss a few years ago that I found helpful (Some are probably common sense!)&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Help is the number one motivator you can get. If you have someone with you doing the diet, then you will feel much better. When I was on my diet, I lived with my parents and my mom did a lot of work to research foods I could eat and cook me delicious meals. It&amp;#8217;s how I discovered the joy of Sushi.&lt;/li&gt;
	&lt;li&gt;A diet need not be bland. When I was dieting, I had no sugar (Except Brown only later on) for about 6 months. &lt;strong&gt;Not a single teaspoon&lt;/strong&gt;. However, after I dropped the initial cravings it was no problem. I learned of all new kinds of delicious foods like Sushi, Sweet Potato, Risotto, and all sorts of things.&lt;/li&gt;
	&lt;li&gt;Never be hungry. You may feel hungry initially if you&amp;#8217;re used to snacking all the time but if you provide yourself with big wholesome meals and snack on some fruit and/or veggies throughout the day you are golden. You do not want to be going to bed starving.&lt;/li&gt;
	&lt;li&gt;Get in a routine and follow it. I had Sushi every friday, it was way more calories then I needed but it was filling and I loved it. I would go out once a week for some nice restaurant food (After my initial detox). It&amp;#8217;s slightly expensive to go out every week, but it was nice and I could afford it.&lt;/li&gt;
	&lt;li&gt;If you&amp;#8217;re not enjoying it, adjust your diet so you can. This is a diet you will have for the rest of your life. You need to follow something that you don&amp;#8217;t mind keeping. For me, I have dropped Bread and Dairy from my diet and I couldn&amp;#8217;t be happier. I don&amp;#8217;t need them, I don&amp;#8217;t crave them. If you can drop Pop from your diet, that&amp;#8217;s already a big step.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hopefully those few tips helped. I love helping people with diets and working things out so drop me a line if you&amp;#8217;d like some help. I&amp;#8217;m now off to the grocery market to buy about a weeks worth of delicious meats, veggies and fruits for us.&lt;/p&gt;</content>
    </entry>
    

</feed>
