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

<channel>
	<title>CB1, INC. &#187; Blog</title>
	<atom:link href="http://www.cb1inc.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cb1inc.com</link>
	<description></description>
	<lastBuildDate>Wed, 28 Sep 2011 17:54:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>DojoConf 2011 Recap</title>
		<link>http://www.cb1inc.com/2011/09/28/dojoconf-2011-recap/</link>
		<comments>http://www.cb1inc.com/2011/09/28/dojoconf-2011-recap/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 17:54:54 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[dojo]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1600</guid>
		<description><![CDATA[The first ever DojoConf held in Washington DC was a huge success. I unfortunately missed about a quarter of the conference due to sleep. I dumped a lot of hours into my presentation about &#8220;The Art of Developing Nano Widgets&#8221; and it must have been worth it because everybody said they liked my talk. So, [...]]]></description>
			<content:encoded><![CDATA[<p>The first ever DojoConf held in Washington DC was a huge success. I unfortunately missed about a quarter of the conference due to sleep.  I dumped a lot of hours into my presentation about &#8220;The Art of Developing Nano Widgets&#8221; and it must have been worth it because everybody said they liked my talk.</p>
<p>So, what is a nano widget? It&#8217;s a lightweight widget that only has the code you use. If you use some tabs on your site, why would you need all that extra code for handling widget destruction, tabs on the bottom, IE6/7 support, child layouts, high contrast accessibility, and so on?</p>
<p>For this presentation, I created a new Dojo library called <em>nano</em> that currently contains a lightweight lightbox, tab container, and accordion container.  You can find the code in my GitHub repo: <a href="https://github.com/cb1kenobi/nano">https://github.com/cb1kenobi/nano</a>.</p>
<p>Here&#8217;s my slides.  NOTE: slides require <strong>Chrome</strong> or <strong>Safari</strong>.</p>
<p><a href="http://talks.cb1inc.com/nano-widgets-dojoconf-2011"><img class="aligncenter" src="/wp-content/uploads/2011/09/nano-widgets-slides.jpg"/></a></p>
<p>DojoConf had a great turnout and was very well organized thanks to the hard work of Chris Williams (<a href="http://twitter.com/voodootikigod">@voodootikigod</a>), Laura Williams (<a href="http://twitter.com/lwilliams">@lwilliams</a>, and the remaining unsung heros. There was some good swag including a little Lego minifig branded with the Dojo logo thanks to LifeImage.</p>
<p>There were many good talks that I listened to.  I really enjoyed <a href="http://twitter.com/clubajax">Mike Wilcox&#8217;s</a> presentation about <a href="http://www.slideshare.net/anm8tr/dojo-html5">Dojo and HTML5</a>.  In short, Dojo plays well with HTML5 forms, SVG, offline storage, and web sockets, but fails with things like semantic tags, audio, and video.  There&#8217;s definitely room for improvement.</p>
<p><a href="http://twitter.com/monteslu">Luis Montes</a> gave a great talk about <a href="http://azprogrammer.com/dojoconf2011">HTML5 Game Development and Dojo</a> (slides require use a modern browser).  He talks about rendering graphics using a canvas element and physics with Box2D.  Along the way, he&#8217;s describing how to leverage Dojo to make things such as object oriented game objects, server communication, and event handling.</p>
<p><a href="http://twitter.com/rmurphey">Rebecca Murphey</a> gave a really interesting talk about <a href="http://www.slideshare.net/rmurphey/dojoconf-building-large-apps">Building Large Apps</a> using Dojo.  She talks about they used Dojo to build Toura, a mobile content creation system.  The big take away here is don&#8217;t build big apps, build several small apps and glue them together.  Break up everything into components and use Dojo&#8217;s excellent event system to wire those components up.</p>
<p>On the last night of DojoConf, a group of us moved the after-after party back to hotel to close out what was a great conference!</p>
<p><img class="aligncenter" src="http://farm7.static.flickr.com/6163/6166732862_f78991528d_z.jpg"/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2011/09/28/dojoconf-2011-recap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speaking at DojoConf 2011!</title>
		<link>http://www.cb1inc.com/2011/09/08/speaking-at-dojoconf-2011/</link>
		<comments>http://www.cb1inc.com/2011/09/08/speaking-at-dojoconf-2011/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 03:37:17 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[dojo]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1591</guid>
		<description><![CDATA[You heard right. I will be giving a talk at DojoConf 2011 coming up September 16-17 in Washington DC! I&#8217;ll be talking about &#8220;The Art of Developing Nano Widgets.&#8221; What is a nano widget? It&#8217;s simply a much smaller version of a fully featured Dijit counterpart. My talk will discuss the concept and implementation of [...]]]></description>
			<content:encoded><![CDATA[<p>You heard right. I will be giving a talk at <a href="http://dojoconf.com/">DojoConf 2011</a> coming up September 16-17 in Washington DC!  I&#8217;ll be talking about &#8220;The Art of Developing Nano Widgets.&#8221; What is a nano widget? It&#8217;s simply a much smaller version of a fully featured Dijit counterpart. My talk will discuss the concept and implementation of nano-fying a handful of Dijit widgets.</p>
<p><a href="http://dojoconf.com/"><img class="aligncenter" src="/wp-content/uploads/2011/09/dojoconf.png"/></a></p>
<p>DojoConf is the first real Dojo conference.  There have been Dojo Developer Days in the past, but those are generally planning and decision oriented meetings.  DojoConf is real content and a real <a href="http://dojoconf.com/schedule.html">schedule</a>. There&#8217;s a great lineup of <a href="http://dojoconf.com/speakers.html">speakers</a> and topics.</p>
<p>See you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2011/09/08/speaking-at-dojoconf-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intro to PECL/mysqlnd_ms Presentation Slides</title>
		<link>http://www.cb1inc.com/2011/04/12/intro-to-peclmysqlnd_ms-presentation-slides/</link>
		<comments>http://www.cb1inc.com/2011/04/12/intro-to-peclmysqlnd_ms-presentation-slides/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 10:43:03 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[presentations]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1585</guid>
		<description><![CDATA[Last week I presented on the super cool PECL/mysqlnd_ms PHP extension at the Minnesota PHP User Group. In short, mysqlmd_ms will provide some transparency for PHP web applications to interact with master and slave MySQL database setups. Here&#8217;s my slide deck: Intro to PECL/mysqlnd_ms (4/7/2011) There&#8217;s a couple things mysqlnd_ms needs to support before I [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I presented on the super cool <a href="http://svn.php.net/viewvc/pecl/mysqlnd_ms/">PECL/mysqlnd_ms</a> PHP extension at the <a href="http://www.mnphp.org/">Minnesota PHP User Group</a>. In short, mysqlmd_ms will provide some transparency for PHP web applications to interact with master and slave MySQL database setups.</p>
<p>Here&#8217;s my slide deck:</p>
<div style="margin:0 auto;width:425px" id="__ss_7557068"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/cb1kenobi/intro-to-peclmysqlndms-472011" title="Intro to PECL/mysqlnd_ms (4/7/2011)">Intro to PECL/mysqlnd_ms (4/7/2011)</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/7557068" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></div>
<p>There&#8217;s a couple things mysqlnd_ms needs to support before I can use it such as support for single master (i.e. local dev) environments and detection of &#8220;dead&#8221; MySQL servers so traffic isn&#8217;t passed to them over and over again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2011/04/12/intro-to-peclmysqlnd_ms-presentation-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CB1 Ubuntu 10.10 Linux Development Setup</title>
		<link>http://www.cb1inc.com/2010/10/16/cb1-ubuntu-10-10-linux-development-setup/</link>
		<comments>http://www.cb1inc.com/2010/10/16/cb1-ubuntu-10-10-linux-development-setup/#comments</comments>
		<pubDate>Sun, 17 Oct 2010 02:36:52 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[gearman]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[samba]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1375</guid>
		<description><![CDATA[I use a MacBook Pro for my day-to-day operations here at CB1, INC. I&#8217;m a huge believer that a development environment should mimic the production environment, so I find myself running a couple virtual machines in VMware Fusion. The following guide is a reference for myself as well as possibly a helpful resource for setting [...]]]></description>
			<content:encoded><![CDATA[<p>I use a MacBook Pro for my day-to-day operations here at CB1, INC.  I&#8217;m a huge believer that a development environment should mimic the production environment, so I find myself running a couple virtual machines in VMware Fusion.</p>
<p>The following guide is a reference for myself as well as possibly a helpful resource for setting up your own Linux development environment. Here&#8217;s an checklist of the tasks to perform and software to install:</p>
<ul>
<li>Operating System
<ul>
<li><a href="http://www.ubuntu.com/" target="_blank">Ubuntu 10.10 64-bit</a>: I use Ubuntu Desktop in dev and Ubuntu Server in production</li>
<li>Package updates and upgrades</li>
<li>Network configuration (at least 2 static IP addresses)</li>
</ul>
</li>
<li>Development Tools
<ul>
<li>C/C++ development environment</li>
<li>Autotools</li>
<li>Sun Java JDK</li>
<li><a href="http://valgrind.org/" target="_blank">Valgrind</a></li>
<li>Version control: <a href="http://subversion.tigris.org/" target="_blank">Subversion</a>, <a href="http://bazaar.canonical.com/en/" target="_blank">Bazaar</a>, <a href="http://git-scm.com/" target="_blank">git</a></li>
<li><a href="http://developer.android.com/">Android SDK</a></li>
</ul>
</li>
<li>Servers
<ul>
<li><a href="http://www.samba.org/" target="_blank">Samba</a> (file sharing)</li>
<li>SSH (remote shell access)</li>
<li><a href="http://httpd.apache.org/" target="_blank">Apache 2.2</a> (web server)</li>
<li><a href="http://nginx.org/" target="_blank">nginx 0.8</a> (web server)</li>
<li><a href="http://www.php.net/" target="_blank">PHP 5.3.3</a> (application server)</li>
<li><a href="http://php-fpm.org/" target="_blank">PHP-FPM</a> (PHP&#8217;s FastCGI process manager)</li>
<li><a href="http://www.mysql.com/" target="_blank">MySQL 5.1</a> (database server)</li>
<li><a href="http://www.postgresql.org/" target="_blank">PostgreSQL</a> (database server)</li>
<li><a href="http://memcached.org/" target="_blank">memcached 1.4.5</a> (caching layer)</li>
<li><a href="http://gearman.org/" target="_blank">Gearman</a> (job queue manager)</li>
</ul>
</li>
<li>PHP Extensions
<ul>
<li><a href="http://pecl.php.net/package/memcached" target="_blank">memcached</a></li>
<li><a href="http://xdebug.org/" target="_blank">Xdebug</a></li>
<li><a href="http://pecl.php.net/package/gearman" target="_blank">Gearman</a></li>
<li><a href="http://pecl.php.net/package/APC" target="_blank">APC</a></li>
</ul>
</li>
<li>Desktop Applications
<ul>
<li><a href="http://www.google.com/chrome">Google Chrome</a></li>
<li>KCachegrind</li>
<li><a href="http://www.appcelerator.com/products">Appcelerator Titanium</a></li>
</ul>
</li>
</ul>
<h3>Operating System</h3>
<p><img class="aligncenter" src="http://cb1inc.com/wp-content/uploads/2010/10/ubuntu.png"/></p>
<p>Start by installing Ubuntu 10.10 Desktop (or server). I&#8217;m not going to cover installing Ubuntu since there are already several other resources out there. Once Ubuntu is installed, open a <strong>Terminal</strong>:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo passwd root</span>
[sudo] password for user: &lt;type your password&gt;
Enter new UNIX password: &lt;type new root password&gt;
Retype new UNIX password: &lt;type new root password again&gt;
passwd: password updated successfully

user@ubuntu:~# <span class="cmd">sudo apt-get update</span>
user@ubuntu:~# <span class="cmd">sudo apt-get upgrade</span>

user@ubuntu:~# <span class="cmd">mkdir ~/src</span>
</pre>
<h3>New File Permissions</h3>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo pico /etc/profile</span>
</pre>
<p>Change 022 to 002. This setting controls the default permissions when a new file or directory is created.  This is mostly useful when managing files over Samba.</p>
<h3>Network IP Addresses</h3>
<p>Optionally, you may want to assign a static IP address. I set up one IP address for Apache and another for nginx.</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo pico /etc/network/interfaces</span>
</pre>
<p>The following is a reference for adding two static IPs.  Change the IPs to meet your needs.</p>
<pre class="brush: plain; title: ;">
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
	address 192.168.1.200
	netmask 255.255.255.0
	gateway 192.168.1.1

auto eth0:1
iface eth0:1 inet static
	address 192.168.1.201
	netmask 255.255.255.0
</pre>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo /etc/init.d/networking restart</span>
</pre>
<h3>Packages</h3>
<p>Here&#8217;s a bunch of packages that will set up compilers, version control, Java, MySQL, Apache, PHP, Memcache, Gearman, Samba, and more.</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo apt-get install build-essential autotools-dev autoconf \
 autoconf2.13 openssh-server ethtool traceroute openjdk-6-jdk \
 mysql-server-5.1 bzr subversion subversion-tools ntp ntpdate \
 libpcre3-dev libevent-dev automake bison libtool scons  g++ \
 ncurses-dev libreadline-dev libz-dev libssl-dev  libcurl4-openssl-dev \
 ruby rubygems libzip-ruby1.8 libzip-ruby1.9.1 python-dev ruby-dev \
 libdbus-glib-1-dev uuid-dev libpam0g libpam0g-dev gperf samba valgrind \
 libxml2-dev libfreetype6-dev curl libcurl4-openssl-dev \
 libjpeg62-dev libpng12-dev sqlite3 libsqlite3-dev git-core \
 postgresql postgis gearman libgearman-dev php5 \
 libapache2-mod-php5 php5-dev memcached php5-memcached \
 php5-curl php5-gd php5-mysql php5-pgsql php-apc \
 php5-xdebug php5-fpm libapache2-mod-fastcgi</span>
</pre>
<h3>MySQL</h3>
<p>During the package install above, MySQL will prompt you for the root password.</p>
<p>After the packages are installed, we need to allow remote MySQL connections.</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo pico /etc/mysql/my.cnf</span>
</pre>
<p>Comment out the <em>bind-address</em> line.</p>
<pre class="brush: plain; title: ;">
# bind-address          = 127.0.0.1
</pre>
<h3>SSH</h3>
<p>Next, you may optionally increase the connection keep alive interval for remote ssh connections. Timeouts aren&#8217;t really an issue for SSH&#8217;ing into a local VM, but really helps for remote installs.</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo echo &quot;ClientAliveInterval 60&quot; &gt;&gt; /etc/ssh/sshd_config</span>
</pre>
<h3>Samba</h3>
<p>Samba allows me to drag and drop files between my Mac and Linux VM. I personally do <strong>not</strong> enable/install Samba on production servers.</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orig</span>
user@ubuntu:~# <span class="cmd">sudo pico /etc/samba/smb.conf</span>
</pre>
<p>You can add a share such as the following:</p>
<pre class="brush: plain; title: ;">
[ubuntu]
        force user = &lt;your username&gt;
        writeable = yes
        create mode = 644
        path = /home/&lt;your username&gt;
        directory mode = 755
        force group = &lt;your username&gt;
</pre>
<p>Then create yourself a Samba user:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo smbpasswd -a &lt;your username&gt;</span>
</pre>
<h4>Apache 2</h4>
<p>Apache is mostly configured out of the box, but I like to enable rewrite and SSL so I can test production features.</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo a2enmod rewrite</span>
user@ubuntu:~# <span class="cmd">sudo a2enmod ssl</span>
</pre>
<p>Since I&#8217;m going to run Apache and nginx, I&#8217;m going bind Apache to <em>eth0</em>.</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo pico /etc/apache2/ports.conf</span>
</pre>
<pre class="brush: plain; title: ;">
NameVirtualHost 192.168.1.200:80
Listen 192.168.1.200:80

&lt;IfModule mod_ssl.c&gt;
    Listen 192.168.1.200:443
&lt;/IfModule&gt;
</pre>
<p>Now we need to add <em>eth0</em>&#8216;s IP to the default host:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo pico /etc/apache2/sites-enabled/000-default</span>
</pre>
<pre class="brush: plain; title: ;">
&lt;VirtualHost 192.168.1.200:80&gt;
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        &lt;Directory /&gt;
                Options FollowSymLinks
                AllowOverride None
        &lt;/Directory&gt;
        &lt;Directory /var/www/&gt;
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        &lt;/Directory&gt;

        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined
&lt;/VirtualHost&gt;
</pre>
<p>Restart Apache for the changes to take effect.</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo apache2ctl restart</span>
</pre>
<h3>Gearman</h3>
<p>By default, Gearman uses memory to store pending jobs in the queue, but I prefer to use MySQL for persistent storage.  To do this, first create the queue database and table:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">mysqladmin -uroot -p123123 create gearman</span>
user@ubuntu:~# <span class="cmd">mysql -uroot -p123123 -e "CREATE TABLE gearman.gearman_queue (
  unique_key VARCHAR(64) NOT NULL,
  function_name VARCHAR(255) NULL,
  priority INT NULL,
  data LONGBLOB NULL,
  PRIMARY KEY (unique_key)
) ENGINE = InnoDB;"</span>
</pre>
<p>Next update the init script to tell Gearman to use the database:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo mv /etc/default/gearman-job-server /etc/default/gearman-job-server.bak</span>
user@ubuntu:~# <span class="cmd">sudo echo &quot;PARAMS=\&quot;-q libdrizzle --libdrizzle-host=127.0.0.1&quot; \
   &quot;--libdrizzle-user=root --libdrizzle-password=123123 --libdrizzle-db=gearman&quot; \
   &quot;--libdrizzle-table=gearman_queue --libdrizzle-mysql\&quot;&quot; &gt; /etc/default/gearman-job-server</span>
user@ubuntu:~# <span class="cmd">sudo /etc/init.d/gearman-job-server restart</span>
</pre>
<h3>Gearman PHP Extension</h3>
<p>We need to download and install the Gearman PHP extension if we want to write PHP workers or post jobs to the queue.</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">cd ~/src</span>
user@ubuntu:~/src# <span class="cmd">wget http://pecl.php.net/get/gearman-0.7.0.tgz</span>
user@ubuntu:~/src# <span class="cmd">tar xzf gearman-0.7.0.tgz</span>
user@ubuntu:~/src# <span class="cmd">rm gearman-0.7.0.tgz package.xml</span>
user@ubuntu:~/src# <span class="cmd">cd gearman-0.7.0</span>
user@ubuntu:~/src# <span class="cmd">phpize</span>
user@ubuntu:~/src# <span class="cmd">./configure</span>
user@ubuntu:~/src# <span class="cmd">make</span>
user@ubuntu:~/src# <span class="cmd">sudo make install</span>
</pre>
<p>Next, add the config file to load the Gearman PHP extension:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo echo &quot;extension=gearman.so&quot; &gt;&gt; /etc/php5/conf.d/gearman.ini</span>
</pre>
<h3>memcached PHP Extension</h3>
<p>Since we have memcached and the memcached PHP extension install, let&#8217;s use it for storing session data:</p>
<pre class="terminal">
user@ubuntu:~/src# <span class="cmd">sudo echo &quot;session.save_handler = memcached
session.save_path = \&quot;127.0.0.1:11211\&quot;&quot; &gt;&gt; /etc/php5/conf.d/memcached.ini</span>
</pre>
<h3>nginx</h3>
<p>nginx is web server that is really fast.  I use nginx as my primary development web server unless I&#8217;m running a web app that only works with Apache. You can choose to install nginx from package, but I like to live life on the bleeding edge, so I&#8217;ll be building nginx from source. To install nginx, we need to download the source, compile it, install it, and configure it.</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">cd ~/src</span>
user@ubuntu:~/src# <span class="cmd">wget http://nginx.org/download/nginx-0.8.52.tar.gz</span>
user@ubuntu:~/src# <span class="cmd">tar xzf nginx-0.8.52.tar.gz</span>
user@ubuntu:~/src# <span class="cmd">rm nginx-0.8.52.tar.gz</span>
user@ubuntu:~/src# <span class="cmd">cd nginx-0.8.52</span>
user@ubuntu:~/src# <span class="cmd">mkdir /var/lib/nginx</span>
user@ubuntu:~/src# <span class="cmd">./configure \
    --sbin-path=/usr/sbin \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/lock/nginx.lock \
    --http-log-path=/var/log/nginx/access.log \
    --http-client-body-temp-path=/var/lib/nginx/body \
    --http-proxy-temp-path=/var/lib/nginx/proxy \
    --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
    --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
    --http-scgi-temp-path=/var/lib/nginx/scgi \
    --with-http_stub_status_module</span>
user@ubuntu:~/src# <span class="cmd">make</span>
user@ubuntu:~/src# <span class="cmd">sudo make install</span>

user@ubuntu:~# <span class="cmd">sudo pico /etc/init.d/nginx</span>
</pre>
<p>Here&#8217;s the init script that will start nginx for us:</p>
<pre class="brush: bash; title: ;">
#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nginx
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
case &quot;$1&quot; in
  start)
        echo -n &quot;Starting $DESC: &quot;
        start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
        echo &quot;$NAME.&quot;
        ;;
  stop)
        echo -n &quot;Stopping $DESC: &quot;
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON
        echo &quot;$NAME.&quot;
        ;;
  restart|force-reload)
        echo -n &quot;Restarting $DESC: &quot;
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
        echo &quot;$NAME.&quot;
        ;;
  reload)
        echo -n &quot;Reloading $DESC configuration: &quot;
        start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON
        echo &quot;$NAME.&quot;
        ;;
  *)
        echo &quot;Usage: /etc/init.d/$NAME {start|stop|restart|reload|force-reload}&quot; &gt;&amp;2
        exit 1
        ;;
esac
exit 0
</pre>
<p>Now we need to make the init script executable and enable it:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo chmod +x /etc/init.d/nginx</span>
user@ubuntu:~# <span class="cmd">sudo update-rc.d nginx defaults</span>

user@ubuntu:~# <span class="cmd">sudo pico /etc/nginx/nginx.conf</span>
</pre>
<p>Here&#8217;s a starter nginx.conf with some basic settings:</p>
<pre class="brush: plain; title: ;">
user  www-data www-data;
worker_processes  2;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile                on;
    tcp_nodelay             on;
    tcp_nopush              on;
    keepalive_timeout       65;
    server_name_in_redirect off;
    server_tokens           off;

    add_header Strict-Transport-Security max-age=1800;
    add_header X-Frame-Options deny;

    gzip            on;
    gzip_buffers    16 8k;
    gzip_comp_level 9;
    gzip_types      text/plain text/xml application/x-javascript text/css;

    include /etc/nginx/sites/*;
}
</pre>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo mkdir /etc/nginx/sites</span>
user@ubuntu:~# <span class="cmd">sudo pico /etc/nginx/sites/default</span>
</pre>
<p>Now we need to set up a default host that supports PHP (via <a href="http://php-fpm.org/" target="_blank">PHP-FPM, PHP&#8217;s FastCGI Process Manager</a>) and we want the default host to use the <em>eth0:1</em> IP address:</p>
<pre class="brush: plain; title: ;">
server {
    listen       192.168.1.201:80 default;
    server_name  _;
    root   /var/www;
    index  index.php;
    location / {
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /index.php?q=$1 last;
            break;
        }
    }
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
        include        fastcgi_params;
    }
    location ~* (\.(htaccess|engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)|code-style\.pl|Entries.*|Repository|Root|Tag|Template)$ {
        deny all;
    }
}
</pre>
<p>After the config files are good to go, start nginx:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo /etc/init.d/nginx start</span>
</pre>
<h3>Service Names</h3>
<p>I also like to add service names so I can see what ports are in use when I run <em>netstat</em>. I added drizzle and Cassandra for fun despite this post not including them.</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo cp /etc/services /etc/services.bak</span>
user@ubuntu:~# <span class="cmd">su</span>
root@ubuntu:~# <span class="cmd">echo &quot;drizzle     4427/tcp
drizzle     4427/udp
memcached   11211/tcp
memcached   11211/udp
gearmand    4730/tcp
gearmand    4730/udp
fastcgi     9000/tcp
cassandra   9160/tcp&quot; &gt;&gt; /etc/services</span>
root@ubuntu:~# <span class="cmd">exit</span>
</pre>
<h3>Android SDK</h3>
<p>The Android SDK is unfortunately not in package, so you&#8217;ll need to download it from the Android Developer site: <a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a>.</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">wget http://dl.google.com/android/android-sdk_r07-linux_x86.tgz</span>
user@ubuntu:~# <span class="cmd">tar xzf android-sdk_r07-linux_x86.tgz</span>
user@ubuntu:~# <span class="cmd">rm android-sdk_r07-linux_x86.tgz</span>
user@ubuntu:~# <span class="cmd">sudo mv android-sdk-linux_x86 /usr/local</span>
user@ubuntu:~# <span class="cmd">sudo find /usr/local/android-sdk-linux_x86 -type d -exec chmod 777 {} \;</span>
</pre>
<p>You&#8217;ll need to add the Android SDK path near the top of your <code>~/.bash_profile</code> <em>or</em> <code>~/.bashrc</code>:</p>
<pre class="brush: plain; title: ;">
export PATH=${PATH}:/usr/local/android-sdk-linux_x86/tools
</pre>
<p>To manage your Android SDK packages and virtual devices, you&#8217;ll need to run the <em>android</em> app:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">android</span>
</pre>
<p>First go to <em>Available Packages</em> and download version <strong>1.6</strong> <em>and</em> <strong>2.2</strong> Android SDK packages.  You can also choose to download the documentation, samples, and Google APIs.</p>
<p><img class="aligncenter" src="http://cb1inc.com/wp-content/uploads/2010/10/android4.jpg"/></p>
<p><img class="aligncenter" src="http://cb1inc.com/wp-content/uploads/2010/10/android5.jpg"/></p>
<p>Downloading the package may take several minutes. You don&#8217;t have to create a virtual device right now if you are planning on installing Appcelerator&#8217;s Titanium platform.  You can exit the Android app when you&#8217;re done.</p>
<h3>Desktop Apps</h3>
<p>If you&#8217;re running Ubuntu Desktop, there are a couple handy apps I install.  The first is Google Chrome and can be directly downloaded from the <a href="http://www.google.com/chrome/eula.html">Google Chrome download page</a>.</p>
<p>I find <em>KCachegrind</em> and <em>GHex</em> to be useful:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo apt-get install kcachegrind ghex</span>
</pre>
<h3>Appcelerator Titanium</h3>
<p>Titanium is an awesome platform for developing desktop applications for Linux, Mac OS X, and Windows as well as mobile apps for iPhone and Android. We use Titanium Developer to create Titanium projects. Begin by downloading the 64-bit version of Titanium:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">wget -O titanium.tgz http://www.appcelerator.com/download-linux64</span>
</pre>
<p>There&#8217;s also a 32-bit version available at <code>http://www.appcelerator.com/download-linux32</code>.</p>
<p>Next we unpack Titanium Developer and move it to a safe place:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">tar xzf titanium.tgz</span>
user@ubuntu:~# <span class="cmd">rm titanium.tgz</span>
</pre>
<p>Next you need to run the installer by double-clicking the <em>Titanium Developer</em> executable. Run the executable and then click the <em>Install</em> button. You can try installing to <code>/opt/titanium</code>, but you might need root privileges.</p>
<p><img class="aligncenter" src="http://cb1inc.com/wp-content/uploads/2010/10/titanium1.jpg"/></p>
<p><img class="aligncenter" src="http://cb1inc.com/wp-content/uploads/2010/10/titanium2.jpg"/></p>
<p>Next, there are a few issues with outdated libraries, so we simply delete them:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">rm ~/.titanium/runtime/linux/1.0.0/libgobject-2.0.*</span>
user@ubuntu:~# <span class="cmd">rm ~/.titanium/runtime/linux/1.0.0/libglib-2.0.*</span>
user@ubuntu:~# <span class="cmd">rm ~/.titanium/runtime/linux/1.0.0/libgio-2.0.*</span>
user@ubuntu:~# <span class="cmd">rm ~/.titanium/runtime/linux/1.0.0/libgthread-2.0.*</span>
</pre>
<p>Titanium Developer also complains if <em>/bin/java</em> doesn&#8217;t exist, so create a quick link:</p>
<pre class="terminal">
user@ubuntu:~# <span class="cmd">sudo ln -s /usr/bin/java /bin/java</span>
</pre>
<p>Relaunch Titanium Developer and enter your login credentials.  If you don&#8217;t have a login, you can get a free account.</p>
<p><img class="aligncenter" src="http://cb1inc.com/wp-content/uploads/2010/10/titanium3.jpg"/></p>
<p>After signing in, you may notice there are some updates available in the upper right corner of the window. Click in the box and the updates will be downloaded and installed.</p>
<p><img class="aligncenter" src="http://cb1inc.com/wp-content/uploads/2010/10/titanium4.jpg"/></p>
<p>Optionally you can create a launcher icon for your GNOME panel. Don&#8217;t forget to escape spaces in the command with a backslash!</p>
<p><img class="aligncenter" src="http://cb1inc.com/wp-content/uploads/2010/10/titanium5.jpg"/></p>
<h3>Finishing Touches</h3>
<p>Lastly, I like to re-arrange my desktop to maximize my coding real estate.</p>
<p><img class="aligncenter" src="http://cb1inc.com/wp-content/uploads/2010/10/ubuntu_10-10.jpg"/></p>
<h3>Conclusion</h3>
<p>That should get you up and running with a neato dev environment.  If you need to run SSL, I wrote a post on <a href="http://www.cb1inc.com/2007/05/13/creating-self-signed-certs-on-apache-2-2/">Creating Self-Signed Certs on Apache 2.2</a> and <a href="http://www.cb1inc.com/2008/09/11/virtual-hosts-and-wildcard-ssl-certificates-with-apache-2-2/">Virtual Hosts and Wildcard SSL Certificates with Apache 2.2</a>.</p>
<p>If you find any typos or additions, please feel free to sound off in the comments!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2010/10/16/cb1-ubuntu-10-10-linux-development-setup/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How to Fix Wake Up Freezing on MacBook Pros</title>
		<link>http://www.cb1inc.com/2010/05/07/how-to-fix-wake-up-freezing-on-macbook-pros/</link>
		<comments>http://www.cb1inc.com/2010/05/07/how-to-fix-wake-up-freezing-on-macbook-pros/#comments</comments>
		<pubDate>Sat, 08 May 2010 03:09:47 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[mac os x]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1439</guid>
		<description><![CDATA[If you have a MacBook Pro with several gigabytes of RAM, you may have noticed that Mac OS X will lock up when you try to wake the laptop up. This can be very frustrating and requires you to hold the power button in for 5 seconds and turning it back on. I run 2 [...]]]></description>
			<content:encoded><![CDATA[<p>If you have a MacBook Pro with several gigabytes of RAM, you may have noticed that Mac OS X will lock up when you try to wake the laptop up.  This can be very frustrating and requires you to hold the power button in for 5 seconds and turning it back on.</p>
<p>I run 2 or 3 VMware Fusion virtual machines at the same time and that eats up a ton of RAM, but it&#8217;s OK since my laptop has 8GB of memory.  My machine would lock up when I tried to wake it up.  I found that it would sometimes be OK leaving 1 virtual machine running, but if I left 2 running, it would almost always lock up.</p>
<p>So, I did some research and discovered the problem has to do with Mac OS X&#8217;s power management, specifically the <em>hibernatemode</em>.  The value is a bitfield that has the following options:</p>
<ul>
<li>0 (0000) Disables SafeSleep. Memory state is maintained until battery power is gone in which case the computer turns off completely.</li>
<li>1 (0001) Enables hibernation, writes memory contents to hibernation image, and immediately goes to sleep.</li>
<li>3 (0011) Maintains memory state while sleeping, but when the battery power is nearly gone, it will write the contents of the memory to hibernation image.</li>
</ul>
<p>On laptops, the default value is 3.  On desktops, the default is 0.</p>
<p>To fix the problem, you simply need to set the <em>hibernatemode</em> to 0.  From a Mac OS X terminal, run the following:</p>
<pre class="brush: plain; title: ;">
sudo pmset -a hibernatemode 0
</pre>
<p>Then reboot your laptop and enjoy lock-free waking up!</p>
<p>At this point, hibernation is disabled and that means you can delete the hibernation file and free up a couple gigs of disk space!</p>
<pre class="brush: plain; title: ;">
sudo rm -f /var/vm/sleepimage
</pre>
<p>One side note, Microsoft Windows actually disables hibernating on computers with 4GB or more of RAM.  They claim that it took longer to restore the memory state from disk than to just do a normal boot.  I disagree since it takes a long time to spin up all your apps, virtual machines, and start being productive.  I wonder if they discovered some technical issue that is what is causing the issues on Macs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2010/05/07/how-to-fix-wake-up-freezing-on-macbook-pros/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cassandra Presentation Slides</title>
		<link>http://www.cb1inc.com/2010/05/07/cassandra-presentation-slides/</link>
		<comments>http://www.cb1inc.com/2010/05/07/cassandra-presentation-slides/#comments</comments>
		<pubDate>Fri, 07 May 2010 05:27:31 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[cassandra]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[presentations]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1431</guid>
		<description><![CDATA[Tonight I gave a talk about Cassandra at the Minnesota PHP User Group. I would hope that everyone that came out learned a little something. I have to admit the talk was a bit unorganized, but hey, I love to talk. It also didn&#8217;t help that there was major construction going on at the meeting [...]]]></description>
			<content:encoded><![CDATA[<p>Tonight I gave a talk about <a href="http://cassandra.apache.org/" target="_blank">Cassandra</a> at the Minnesota PHP User Group. I would hope that everyone that came out learned a little something. I have to admit the talk was a bit unorganized, but hey, I love to talk. It also didn&#8217;t help that there was major construction going on at the meeting venue that made it hard for people to hear me.</p>
<div style="margin:0 auto;width:425px" id="__ss_4002175"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/cb1kenobi/cassandra-say-goodbye-to-the-relational-database-562010" title="Cassandra - Say Goodbye to the Relational Database (5-6-2010)">Cassandra &#8211; Say Goodbye to the Relational Database (5-6-2010)</a></strong><object id="__sse4002175" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cassandra-saygoodbyetotherelationaldatabase5-6-2010-100506234446-phpapp02&#038;rel=0&#038;stripped_title=cassandra-say-goodbye-to-the-relational-database-562010" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4002175" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cassandra-saygoodbyetotherelationaldatabase5-6-2010-100506234446-phpapp02&#038;rel=0&#038;stripped_title=cassandra-say-goodbye-to-the-relational-database-562010" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<p>After rambling for an hour and a half, I finally ran out of Cassandra-related stuff to talk about.  Since some people were interested in some new features of PHP 5.3, I showed off my MVC framework I&#8217;ve been working on called <a href="http://github.com/cb1kenobi/elevate" target="_blank">Elevate</a>.  In Elevate&#8217;s code, I use some of PHP 5.3&#8242;s new features such as closures, namespaces, and the ternary operator (?:).  I also showed Elevate&#8217;s super cool Gearman worker daemon that I used for sending e-mails.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2010/05/07/cassandra-presentation-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cassandra Talk at the May Twin Cities PHP User Group</title>
		<link>http://www.cb1inc.com/2010/05/03/cassandra-talk-at-the-may-twin-cities-php-user-group/</link>
		<comments>http://www.cb1inc.com/2010/05/03/cassandra-talk-at-the-may-twin-cities-php-user-group/#comments</comments>
		<pubDate>Mon, 03 May 2010 23:45:55 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[cassandra]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1413</guid>
		<description><![CDATA[This Thursday, May 6th, at 6pm I&#8217;ll be giving a talk about Cassandra at the Minnesota PHP User Group. I&#8217;ll be covering Cassandra&#8217;s architecture and how it scales to handle tons of data and still be fast and fault tolerant. I&#8217;ll also cover Cassandra&#8217;s API and data modeling, specifically with PHP. The user group will [...]]]></description>
			<content:encoded><![CDATA[<p>This Thursday, May 6th, at 6pm I&#8217;ll be giving a talk about <a href="http://cassandra.apache.org/">Cassandra</a> at the Minnesota PHP User Group.</p>
<p><a href="http://www.mnphp.org/calendar/13353590/"><img src="/wp-content/uploads/2010/05/cassandra_logo.png" alt="Cassandra" width="500" height="100" class="aligncenter size-full wp-image-1415" /></a></p>
<p>I&#8217;ll be covering Cassandra&#8217;s architecture and how it scales to handle tons of data and still be fast and fault tolerant.  I&#8217;ll also cover Cassandra&#8217;s API and data modeling, specifically with PHP.</p>
<p>The user group will meet at Nerdery Interactive Labs (<a href="http://maps.google.com/maps?f=q&#038;source=s_q&#038;hl=en&#038;geocode=&#038;q=9555+James+Ave+S,+Suite+245,+Bloomington,+MN+55431&#038;sll=37.0625,-95.677068&#038;sspn=62.61328,131.572266&#038;ie=UTF8&#038;hq=&#038;hnear=9555+James+Ave+S+%23245,+Minneapolis,+Hennepin,+Minnesota&#038;ll=44.830826,-93.298731&#038;spn=0.027909,0.064244&#038;z=15">9555 James Ave S, Suite 245, Bloomington, MN 55431</a>). It will surely be packed with tons of awesome, so be sure to <a href="http://www.mnphp.org/calendar/13353590/">RSVP</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2010/05/03/cassandra-talk-at-the-may-twin-cities-php-user-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>T-Minus Two Months to Open Source Bridge</title>
		<link>http://www.cb1inc.com/2010/03/31/t-minus-two-months-to-open-source-bridge/</link>
		<comments>http://www.cb1inc.com/2010/03/31/t-minus-two-months-to-open-source-bridge/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 08:38:56 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[conferences]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1364</guid>
		<description><![CDATA[This year, Portland gets not one, but two open source conferences: OSCON and Open Source Bridge (OSB). I attended OSCON in both 2008 and 2009, but this year the cycle may break. Instead I&#8217;ve opted to go to OSB in hopes that it will be more technical and less commercial. Not to mention, OSB is [...]]]></description>
			<content:encoded><![CDATA[<p>This year, Portland gets not one, but two open source conferences: <a href="http://www.oscon.com/oscon2010">OSCON</a> and <a href="http://opensourcebridge.org/">Open Source Bridge</a> (OSB). I attended OSCON in both 2008 and 2009, but this year the cycle may break. Instead I&#8217;ve opted to go to OSB in hopes that it will be more technical and less commercial. Not to mention, OSB is 20% the cost of OSCON.</p>
<p>The cutoff date for this years OSB proposals was just a few days ago and there are about 400 submissions. I considered submitting a talk about Dojo, but due to time constraints, I had to pass this year. Regardless, there are several talks that are pretty interesting and I hope they get selected. The topics that I&#8217;m most interested in are:</p>
<ul>
<li>Distributed databases and data modeling</li>
<li>Cloud deployment and management</li>
<li>PHP tricks</li>
<li>Drizzle</li>
<li>Websockets</li>
<li>Concurrency and threading</li>
<li>Geolocation</li>
<li>Scalability and performance</li>
</ul>
<p>A little disappointed there weren&#8217;t more JavaScript or C/C++ talks. For a complete list of sessions that I&#8217;d like to attend, check out <a href="http://opensourcebridge.org/users/431/favorites">my favorites sessions</a>.</p>
<p>April 1st, 2010 is the last day to get the early bird discount for $225, otherwise it goes up to a whopping $300. You can register on their site: <a href="http://opensourcebridge.org/attend/">http://opensourcebridge.org/attend/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2010/03/31/t-minus-two-months-to-open-source-bridge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugging Dojo Applications Presentation</title>
		<link>http://www.cb1inc.com/2010/02/10/debugging-dojo-applications-presentation/</link>
		<comments>http://www.cb1inc.com/2010/02/10/debugging-dojo-applications-presentation/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 02:33:00 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[presentations]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1321</guid>
		<description><![CDATA[Today I gave a talk at dojo.connect about debugging dojo applications. The talk actually covered a few thing that weren&#8217;t necessarily &#8220;debugging&#8221; related, but still had some good tips. Besure to check out the slides!]]></description>
			<content:encoded><![CDATA[<p>Today I gave a talk at dojo.connect about debugging dojo applications. The talk actually covered a few thing that weren&#8217;t necessarily &#8220;debugging&#8221; related, but still had some good tips. Besure to check out the slides!</p>
<div style="margin:0 auto;width:425px;"><object style="margin:0;" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=debuggingdojoapplications2-10-2010-100210141004-phpapp01&#038;stripped_title=debugging-dojo-applications-2102010" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=debuggingdojoapplications2-10-2010-100210141004-phpapp01&#038;stripped_title=debugging-dojo-applications-2102010" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2010/02/10/debugging-dojo-applications-presentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speaking at dojo.connect Online Conference</title>
		<link>http://www.cb1inc.com/2010/02/08/speaking-at-dojo-connect-online-conference/</link>
		<comments>http://www.cb1inc.com/2010/02/08/speaking-at-dojo-connect-online-conference/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 17:03:05 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[dojo]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1313</guid>
		<description><![CDATA[The first dojo.connect online conference is coming up this week February 10-12, 2010. I&#8217;ll be giving a talk about Debugging Dojo Applications. I&#8217;ll be covering the following: Common mistakes and how to avoid them Web browser debug tools Built-in Dojo debugging tools Methods for finding and fixing syntax issues or malformed data Writing tests to [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" title="dojo-connect-2010" src="/wp-content/uploads/2010/02/dojo-connect-2010.jpg" alt="dojo.connect" width="600" height="188" /></p>
<p>The first dojo.connect online conference is coming up this week February 10-12, 2010.  I&#8217;ll be giving a talk about <a href="http://www.widespreadconferences.com/#Speaker/cbarber">Debugging Dojo Applications</a>.  I&#8217;ll be covering the following:</p>
<ul>
<li>Common mistakes and how to avoid them</li>
<li>Web browser debug tools</li>
<li>Built-in Dojo debugging tools</li>
<li>Methods for finding and fixing syntax issues or malformed data</li>
<li>Writing tests to trap specific bugs</li>
</ul>
<p>There is still room left, so head over to <a href="http://www.widespreadconferences.com/">http://www.widespreadconferences.com/</a> and sign up today!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2010/02/08/speaking-at-dojo-connect-online-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

