<?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>Negativespace.net</title>
	<atom:link href="http://negativespace.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://negativespace.net</link>
	<description>Just another blog about stuff.</description>
	<lastBuildDate>Tue, 28 May 2013 18:43:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Git merge master into all branches</title>
		<link>http://negativespace.net/2013/05/28/git-merge-master-into-all-branches/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=git-merge-master-into-all-branches</link>
		<comments>http://negativespace.net/2013/05/28/git-merge-master-into-all-branches/#comments</comments>
		<pubDate>Tue, 28 May 2013 18:43:46 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://negativespace.net/?p=254</guid>
		<description><![CDATA[Suppose your git development process uses lots of branching. Yay branching. You want to keep them all up-to-date with the master branch, but constantly merging master into a dozen or more branches is a bit of a pain. Here&#8217;s one &#8230; <a href="http://negativespace.net/2013/05/28/git-merge-master-into-all-branches/">Continue reading <span class="meta-nav">&#8594;</span></a><div class='yarpp-related-rss yarpp-related-none'>

No related posts.
</div>
]]></description>
				<content:encoded><![CDATA[<p>Suppose your git development process uses lots of branching. Yay branching. You want to keep them all up-to-date with the master branch, but constantly merging master into a dozen or more branches is a bit of a pain. </p>
<p>Here&#8217;s one way:</p>
<p><script src="https://gist.github.com/ubermichael/5660447.js"></script></p>
<div class='yarpp-related-rss yarpp-related-none'>
<p>No related posts.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://negativespace.net/2013/05/28/git-merge-master-into-all-branches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache &amp; DNS Wildcard Hosting with Mac OS X</title>
		<link>http://negativespace.net/2013/05/14/apache-dns-wildcard-hosting-with-mac-os-x/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=apache-dns-wildcard-hosting-with-mac-os-x</link>
		<comments>http://negativespace.net/2013/05/14/apache-dns-wildcard-hosting-with-mac-os-x/#comments</comments>
		<pubDate>Tue, 14 May 2013 22:28:25 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://negativespace.net/?p=248</guid>
		<description><![CDATA[Problem: You want to host all of your web development sites in ~/Sites, and you don&#8217;t want to fuck around with DNS and Apache configuration every time you start something new. Solution: DNS wildcards and Apache Virtual Hosting! The hard part: start &#8230; <a href="http://negativespace.net/2013/05/14/apache-dns-wildcard-hosting-with-mac-os-x/">Continue reading <span class="meta-nav">&#8594;</span></a><div class='yarpp-related-rss'>

Related posts:<ol>
<li><a href='http://negativespace.net/2011/12/31/streaming-audio-from-a-mac-to-a-ubuntu-box/' rel='bookmark' title='Streaming Audio from a Mac to a Ubuntu Box'>Streaming Audio from a Mac to a Ubuntu Box</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p><strong>Problem: </strong>You want to host all of your web development sites in ~/Sites, and you don&#8217;t want to fuck around with DNS and Apache configuration every time you start something new.</p>
<p><strong>Solution: </strong>DNS wildcards and Apache Virtual Hosting!</p>
<p><em>The hard part: start by enabling BIND.</em></p>
<p>BIND is a domain name resolving system. It&#8217;s included in Mac OS X, but it isn&#8217;t turned on or configured by default. Odd.</p>
<pre>
$ sudo -s
$ rndc-confgen &gt; /etc/rndc.conf
$ head -n 6 /etc/rndc.conf &gt; /etc/rndc.key
$ emacs /var/named/dev.zone
</pre>
<p>/var/named/dev.zone should be:</p>
<pre><code>
; BIND data file for dev sites
;
$TTL    604800
@       IN      SOA     dev. root.dev. (
                     2008101920         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      dev.
@       IN      A       127.0.0.1
*.dev.  14400   IN      A       127.0.0.1
</code></pre>
<pre>
$ emacs /etc/named.conf
</pre>
<p>Add this bit of content to /etc/named.conf after the line <code>directory "/var/named";</code></p>
<pre><code>
forwarders {
    208.67.222.222;
    208.67.220.220;
};
</code></pre>
<p>Those are the OpenDNS servers. Substitute your own, add as many as your like, and use Google&#8217;s DNS if you want, but make sure you&#8217;re careful with the semicolons. I wasn&#8217;t, and it bit me in the ass.</p>
<p>While you&#8217;ve got named.conf open, add these lines above the <code>zone "localhost"</code> line:</p>
<pre><code>
zone "dev" IN {
     type master;
     file "dev.zone";
};
</code></pre>
<p>Again, be careful with the semicolons. BIND isn&#8217;t forgiving at all. If you mess it up, the syslog will contain lines like </p>
<pre><code>
2013-05-14 2:49:33.858 PM named[15397]: /private/etc/named.conf:39: missing ';' before '}'
2013-05-14 2:49:33.858 PM named[15397]: /private/etc/named.conf:53: missing ';' before 'zone'
</code></pre>
<p>Edit <code>/System/Library/LaunchDaemons/org.isc.named.plist</code> to enable the BIND daemon, by switching &#8216;true&#8217; to &#8216;false&#8217;.</p>
<p>Launch the daemon:</p>
<pre>
sudo launchctl load /System/Library/LaunchDaemons/org.isc.named.plist
</pre>
<p>This should, in theory, be enough to get all the *.dev addresses pointed at the local machine, but it isn&#8217;t quite. Open up System Preferences.app and add 127.0.0.1 as a DNS entry for your internet connection. None of the documentation I saw mentioned this. It looks like the system won&#8217;t start actually using the local BIND system automatically. </p>
<p><em>The easy bit: configure Apache</em></p>
<p>Next up, configure Apache to respond to any request that matches *.dev/foo/bar. </p>
<p>Edit apache&#8217;s httpd.conf file and enable the virtual host include by uncommenting the include line:</p>
<pre></code>
# Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf
</code></pre>
<p>And then edit the httpd-vhosts.conf file. Comment out all the stuff that&#8217;s there (it&#8217;s useful as an example) and add the following:</p>
<pre><code>
NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1>
    VirtualDocumentRoot /Path/to/Sites/%-2+
</VirtualHost>
</pre>
<p></code></p>
<p>"%-2+" is magic: it means the part of the domain name before the last part. For foo.bar.dev it would be foo.bar.</p>
<p>Note that if you have Apache's <code>mod_unique_id</code> enabled you might be getting errors in Apache's log file that look something like this:</p>
<pre><code>
[Tue May 14 15:00:02 2013] [alert] (EAI 8)nodename nor servname provided, or not known: mod_unique_id: unable to find IPv4 address of "bernard"
Configuration Failed
</code></pre>
<p>Bernard is the local name of my computer. I added an entry in /etc/hosts for bernard, and everything worked out. Magic.</p>
<pre><code>
127.0.0.1    bernard
</pre>
<p></code></p>
<p><em>References</em>: </p>
<ul>
<li><a href="http://postpostmodern.com/instructional/a-smarter-mamp/">PPM's writeup</a> - I had to add a couple of steps</li>
<li><a href="http://hints.macworld.com/article.php?story=2005110220352084">An old Mac OS X Hints article</a> - still a bit relevant.</li>
</ul>
<div class='yarpp-related-rss'>
<p>Related posts:</p><ol>
<li><a href='http://negativespace.net/2011/12/31/streaming-audio-from-a-mac-to-a-ubuntu-box/' rel='bookmark' title='Streaming Audio from a Mac to a Ubuntu Box'>Streaming Audio from a Mac to a Ubuntu Box</a></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://negativespace.net/2013/05/14/apache-dns-wildcard-hosting-with-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mind blown</title>
		<link>http://negativespace.net/2013/05/14/mind-blown/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mind-blown</link>
		<comments>http://negativespace.net/2013/05/14/mind-blown/#comments</comments>
		<pubDate>Tue, 14 May 2013 21:37:23 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://negativespace.net/?p=245</guid>
		<description><![CDATA[Grab a sudo shell and stay there: $ sudo -s . So much nicer than $ sudo su &#8211; it keeps all of your environment variables!<div class='yarpp-related-rss yarpp-related-none'>

No related posts.
</div>
]]></description>
				<content:encoded><![CDATA[<p>Grab a sudo shell and stay there:
<pre>$ sudo -s </pre>
<p>. So much nicer than
<pre>$ sudo su</pre>
<p> &#8211; it keeps all of your environment variables!</p>
<div class='yarpp-related-rss yarpp-related-none'>
<p>No related posts.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://negativespace.net/2013/05/14/mind-blown/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eXist apps outside of webapps</title>
		<link>http://negativespace.net/2012/11/27/exist-apps-outside-of-webapps/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exist-apps-outside-of-webapps</link>
		<comments>http://negativespace.net/2012/11/27/exist-apps-outside-of-webapps/#comments</comments>
		<pubDate>Wed, 28 Nov 2012 02:59:30 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://negativespace.net/?p=226</guid>
		<description><![CDATA[By default eXist expects all to find all the web apps in $EXIST/webapps. You can change the location by symlinking $APP_PATH to $EXIST/webapps/$app, or configuring a &#60;root pattern="appname" path="$APP_PATH" /&#62; in controller-conf.xml Neither of those methods works well on its &#8230; <a href="http://negativespace.net/2012/11/27/exist-apps-outside-of-webapps/">Continue reading <span class="meta-nav">&#8594;</span></a><div class='yarpp-related-rss yarpp-related-none'>

No related posts.
</div>
]]></description>
				<content:encoded><![CDATA[<p>By default eXist expects all to find all the web apps in $EXIST/webapps. You can change the location by</p>
<ol>
<li>symlinking <code>$APP_PATH</code> to <code>$EXIST/webapps/$app</code>, or</li>
<li>configuring a <code>&lt;root pattern="appname" path="$APP_PATH" /&gt;</code> in <code>controller-conf.xml</code></li>
</ol>
<p>Neither of those methods works well on its own: symlinking will sometimes prevent the controllers from being found and configuring a root will cause permissions errors for static, non-eXist, files like .css stylesheets.</p>
<p>The only reliable method to run a web app outside the eXist installation seems to be to symlink, configure a root which points to the symlink, and then set jetty to ignore alias checking.</p>
<p>Update: For newer versions of Jetty (mine is 8.1.8 or something):</p>
<p>In <code>$EXIST/tools/jetty/etc/webdefault.xml</code>, configure aliases in this ridiculously verbose bit of XML:</p>
<pre>&lt;servlet&gt;
 &lt;servlet-name&gt;default&lt;/servlet-name&gt;
 &lt;servlet-class&gt;org.eclipse.jetty.servlet.DefaultServlet&lt;/servlet-class&gt;
 &lt;init-param&gt;
 &lt;param-name&gt;aliases&lt;/param-name&gt;
 &lt;param-value&gt;<strong>true</strong>&lt;/param-value&gt;
 &lt;/init-param&gt;</pre>
<p>For older versions of Jetty (versions 7 and earlier, I guess): In <code>$EXIST/tools/jetty/etc/jetty.xml</code></p>
<p><code>&lt;Set class="org.mortbay.util.FileResource" name="checkAliases" type="boolean"&gt;<strong>false</strong>&lt;/Set&gt;</code></p>
<div class='yarpp-related-rss yarpp-related-none'>
<p>No related posts.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://negativespace.net/2012/11/27/exist-apps-outside-of-webapps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So you want a website (part 3)</title>
		<link>http://negativespace.net/2012/06/28/so-you-want-a-website-part-3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=so-you-want-a-website-part-3</link>
		<comments>http://negativespace.net/2012/06/28/so-you-want-a-website-part-3/#comments</comments>
		<pubDate>Thu, 28 Jun 2012 19:48:56 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://negativespace.net/?p=220</guid>
		<description><![CDATA[At long last. The previous post talked about domain names and registrars, and hosting providers. I don&#8217;t think the bit about registrars was clear enough. The registrar makes sure that your domain name works and that people can find it. &#8230; <a href="http://negativespace.net/2012/06/28/so-you-want-a-website-part-3/">Continue reading <span class="meta-nav">&#8594;</span></a><div class='yarpp-related-rss'>

Related posts:<ol>
<li><a href='http://negativespace.net/2012/05/11/so-you-want-a-website-2/' rel='bookmark' title='So, you want a website (part 2)&#8230;'>So, you want a website (part 2)&#8230;</a></li>
<li><a href='http://negativespace.net/2012/05/08/so-you-want-a-website-1/' rel='bookmark' title='So, you want a website (part 1)&#8230;'>So, you want a website (part 1)&#8230;</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>At long last.</p>
<p>The <a href="http://negativespace.net/2012/05/11/so-you-want-a-website-2/">previous post</a> talked about domain names and registrars, and hosting providers.</p>
<p>I don&#8217;t think the bit about registrars was clear enough. The registrar makes sure that your domain name works and that people can find it. You pay a small yearly fee<span style="line-height: 24px;"> </span><span style="line-height: 24px;">(usually less than $25)</span> to make it work. A domain name by itself isn&#8217;t very useful: it is just a pointer. Without something to point at you cannot do much with it.</p>
<p>Hosting providers and their web servers are the things that domain names point to. You pay a hosting provider a monthly fee (many offer a discount for yearly payments) to hold your data and the software that makes it all run.</p>
<p>For example, &lt;a href=&#8221;http://baremetal.ca&#8221;&gt;Baremetal.ca&lt;/a&gt; is the host for this site. My blog and the software that it runs on all lives on server hardware owned by Baremetal, and I rent space and Internet connectivity from them. I&#8217;ve never met anyone from Baremetal, or even spoken with them on the phone in the 10+ years I&#8217;ve been a customer. It&#8217;s all email and forms on their site, and that&#8217;s the way I like it.</p>
<p>Different hosting providers offer different services and different prices. For a basic site like this one, I would expect to pay less that $25 for the domain name and less than $200 for a year of hosting. (I don&#8217;t remember the actual costs) Baremetal doesn&#8217;t provide much in terms of automatic software installation, disk space, or other goodies. I can do the software installation myself and customize it. And I don&#8217;t need much disk space.</p>
<p>Other providers, like <a href="http://dreamhost.com">Dreamhost</a> are much larger and provide more services, like automatic software installation and unlimited disk space. They&#8217;re slightly more expensive, but also far easier for someone without technical experience to get up and running. They have a one-click install of WordPress, for example, which makes getting a wordpress-based website up and running very quick and easy.</p>
<p>Here&#8217;s the important bit: many (but not all) hosting providers are also domain name registrars. One payment handles both registration and hosting and it is much more convenient; but, not all registrars (and host/registrar combinations) can register a name internationally.</p>
<p>Baremetal, for example, can register .ca and the big three (.com, .net, and .org) but not .co.uk.</p>
<p>Not all registers are created equal, so do some research. There are plenty of examples of Network Solutions doing <a href="http://www.cringely.com/2012/06/24/i-hate-network-solutions/">dumb things</a> to customers. Go Dadddy&#8217;s CEO has been known to <a href="http://en.wikipedia.org/wiki/Bob_Parsons#Elephant_shooting_controversy">hunt and kill</a> elephants in Africa.</p>
<p>So, find a reputable registrar which can handle the domain you want, and then find affordable hosting somewhere which also provides services you need. Or even better still is to find a host which can also act as a registrar for the domain name that you want.</p>
<div class='yarpp-related-rss'>
<p>Related posts:</p><ol>
<li><a href='http://negativespace.net/2012/05/11/so-you-want-a-website-2/' rel='bookmark' title='So, you want a website (part 2)&#8230;'>So, you want a website (part 2)&#8230;</a></li>
<li><a href='http://negativespace.net/2012/05/08/so-you-want-a-website-1/' rel='bookmark' title='So, you want a website (part 1)&#8230;'>So, you want a website (part 1)&#8230;</a></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://negativespace.net/2012/06/28/so-you-want-a-website-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So, you want a website (part 2)&#8230;</title>
		<link>http://negativespace.net/2012/05/11/so-you-want-a-website-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=so-you-want-a-website-2</link>
		<comments>http://negativespace.net/2012/05/11/so-you-want-a-website-2/#comments</comments>
		<pubDate>Fri, 11 May 2012 20:23:41 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://negativespace.net/?p=214</guid>
		<description><![CDATA[Your new website has a purpose. Now it needs a name, specifically a domain name, which is a unique address for you site. For example, the address for Wikipedia&#8217;s English-language site is http://en.wikipedia.org/wiki/Main_Page. Domain name: wikipedia.org. This is the part that &#8230; <a href="http://negativespace.net/2012/05/11/so-you-want-a-website-2/">Continue reading <span class="meta-nav">&#8594;</span></a><div class='yarpp-related-rss'>

Related posts:<ol>
<li><a href='http://negativespace.net/2012/05/08/so-you-want-a-website-1/' rel='bookmark' title='So, you want a website (part 1)&#8230;'>So, you want a website (part 1)&#8230;</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Your new website has a purpose. Now it needs a name, specifically a <a href="http://en.wikipedia.org/wiki/Domain_name">domain name</a>, which is a unique address for you site.</p>
<p>For example, the address for Wikipedia&#8217;s English-language site is http://en.wikipedia.org/wiki/Main_Page.</p>
<ul>
<li><strong>Domain name</strong>: <em>wikipedia.org</em>. This is the part that they registered and paid for.</li>
<li><strong>Subdomain</strong>: <em>en.wikipedia.org</em>. They&#8217;ve added &#8220;en.&#8221; to the start of the domain name. It&#8217;s how they distinguish different language specific wikipedias. Other sites use &#8220;www.&#8221; instead. There&#8217;s no technical difference.</li>
</ul>
<p>Wikipedia&#8217;s site is registered as a .org. This website is a .net. The CBC&#8217;s website is a .ca. Google&#8217;s main website is a .com. Those (.org, .ca, .net, .etc) are called top-level-domains (TLD). Each country has its own TLD. Canada&#8217;s is .ca, the UK has .uk.</p>
<p>Countries have specific rules about who can register with their TLD. Canadian domains (.ca) are regulated by the <a href="http://cira.ca">Canadian Internet Registry Authority</a>, and CIRA only gives .ca names to people or organizations who meet the <a href="http://www.cira.ca/assets/Documents/Legal/Registrants/CPR.pdf">Canadian Presence Requirements</a>. Their policy states that any Canadian citizen (even one living abroad) can register a .ca domain.</p>
<p>The big three TLDs (.com, .net, and .org) are very open. Anyone can register .com, .net, and .org names.</p>
<p>Once you&#8217;ve decided which TLD you want to use, you need to find a domain name that&#8217;s available. The best domain names are short, easy to remember, and are relevant to your <a href="http://negativespace.net/2012/05/08/so-you-want-a-website-1/">website&#8217;s purpose</a> (remember that?).</p>
<p>There are a bunch of tools on the internet to look up domain names, and see if they are available.</p>
<p>For .com, .org, and .net domains use <a href="http://www.internic.net/whois.html">Internic&#8217;s WHOIS</a> service and type in a domain name (try negativespace.net for an example of one that&#8217;s already taken). For .ca domains, CIRA provides a <a href="http://whois.cira.ca">different tool</a>, but it works in the same way.</p>
<p>Don&#8217;t buy a domain name yet, just make sure it is available.</p>
<p>Once you&#8217;ve found a domain name, you&#8217;re ready for the next step: hosting (part 3).</p>
<div class='yarpp-related-rss'>
<p>Related posts:</p><ol>
<li><a href='http://negativespace.net/2012/05/08/so-you-want-a-website-1/' rel='bookmark' title='So, you want a website (part 1)&#8230;'>So, you want a website (part 1)&#8230;</a></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://negativespace.net/2012/05/11/so-you-want-a-website-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>So, you want a website (part 1)&#8230;</title>
		<link>http://negativespace.net/2012/05/08/so-you-want-a-website-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=so-you-want-a-website-1</link>
		<comments>http://negativespace.net/2012/05/08/so-you-want-a-website-1/#comments</comments>
		<pubDate>Tue, 08 May 2012 23:00:12 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://negativespace.net/?p=209</guid>
		<description><![CDATA[(Part 1 of a series) Any dolt can make a website, but it takes patience and work to make a successful website. It&#8217;s tempting to dive in and buy a domain name, sign up for hosting, and start posting content. &#8230; <a href="http://negativespace.net/2012/05/08/so-you-want-a-website-1/">Continue reading <span class="meta-nav">&#8594;</span></a><div class='yarpp-related-rss yarpp-related-none'>

No related posts.
</div>
]]></description>
				<content:encoded><![CDATA[<p><em>(Part 1 of a series)</em></p>
<p>Any dolt can make a website, but it takes patience and work to make a successful website.</p>
<p>It&#8217;s tempting to dive in and buy a domain name, sign up for hosting, and start posting content. But there be dragons! The result will be a big mess of content, poorly organized and difficult to use.</p>
<p>The first thing you need to do is describe the primary purpose of your website. Start with a single sentence: a statement of purpose. For example:</p>
<blockquote><p>My website will showcase my writing.</p></blockquote>
<p>It&#8217;s simple and concise. If you cannot state a purpose for your website, why do you want one?</p>
<p>After that, the rest is easy. Maybe there are a few other things you want to accomplish with the site like promote an editing service, photography, or distribute course materials. Those are all great, and they support the goals of the website in some way.</p>
<p>The second thing to do is write down all of the other things you want to do with your website, and how each of those goals supports the purpose of the website.</p>
<blockquote><p>My website will promote my writing. It will also advertise my editing business and photography. I&#8217;ll use the photos to highlight different writing samples. I&#8217;ll publish samples and links to reviews of my writing. Hopefully I can get some YouTube videos of readings of my work to post here as well.</p></blockquote>
<div class='yarpp-related-rss yarpp-related-none'>
<p>No related posts.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://negativespace.net/2012/05/08/so-you-want-a-website-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://negativespace.net/2012/04/05/201/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=201</link>
		<comments>http://negativespace.net/2012/04/05/201/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 18:31:17 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://negativespace.net/?p=201</guid>
		<description><![CDATA[In PHP and Perl and any other server-side scripting language, I would really like to know which fieldset an HTML input element was in when the form was submitted. Why is that so darn difficult?<div class='yarpp-related-rss yarpp-related-none'>

No related posts.
</div>
]]></description>
				<content:encoded><![CDATA[<p>In PHP and Perl and any other server-side scripting language, I would really like to know which fieldset an HTML input element was in when the form was submitted. Why is that so darn difficult?</p>
<div class='yarpp-related-rss yarpp-related-none'>
<p>No related posts.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://negativespace.net/2012/04/05/201/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So general it cannot be fixed.</title>
		<link>http://negativespace.net/2012/03/29/184/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=184</link>
		<comments>http://negativespace.net/2012/03/29/184/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 03:14:25 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://negativespace.net/?p=184</guid>
		<description><![CDATA[PHP&#8217;s PDO library (MySQL driver) has been throwing strange exceptions for any insert/update/delete queries: Database error: SQLSTATE[HY000]: General error It doesn&#8217;t matter what the query is. $stmt = $pdo-&#62;prepare(); $stmt-&#62;execute() seems to be the problem, but the exception is also &#8230; <a href="http://negativespace.net/2012/03/29/184/">Continue reading <span class="meta-nav">&#8594;</span></a><div class='yarpp-related-rss yarpp-related-none'>

No related posts.
</div>
]]></description>
				<content:encoded><![CDATA[<p>PHP&#8217;s PDO library (MySQL driver) has been throwing strange exceptions for any insert/update/delete queries:</p>
<blockquote><p>Database error: SQLSTATE[HY000]: General error</p></blockquote>
<p>It doesn&#8217;t matter what the query is.</p>
<pre>$stmt = $pdo-&gt;prepare();
$stmt-&gt;execute()</pre>
<p>seems to be the problem, but the exception is also thrown with
<pre>$pdo-&gt;exec()</pre>
<p> and
<pre>$pdo-&gt;query()</pre>
<p>. Persistent connections don&#8217;t make a difference. Running the query from the mysql command line is fine. But the truly bizare thing: <em>all the queries succeed</em>.</p>
<p><strong>The magical fix</strong></p>
<p>Apparently, this has something to do with how PDO emulates prepared queries and MySQL. So turing off emulated prepared queries (and going for real prepared queries) fixes the problem. Hurrah.</p>
<pre>$pdo-&gt;setAttribute(PDO::ATTR_EMULATE_PREPARES, false);</pre>
<p>PHP 5.3.8, MySQL 5.5.16, Apache 2.2</p>
<div class='yarpp-related-rss yarpp-related-none'>
<p>No related posts.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://negativespace.net/2012/03/29/184/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Streaming Audio from a Mac to a Ubuntu Box</title>
		<link>http://negativespace.net/2011/12/31/streaming-audio-from-a-mac-to-a-ubuntu-box/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=streaming-audio-from-a-mac-to-a-ubuntu-box</link>
		<comments>http://negativespace.net/2011/12/31/streaming-audio-from-a-mac-to-a-ubuntu-box/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 01:11:52 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://negativespace.net/?p=168</guid>
		<description><![CDATA[Initial setup (only do this once) On the ubuntu box, install esound. This will automatically remove two packages (pulseaudio-esound-compat ubuntu-desktop), but they don&#39;t seem important. $ sudo apt-get install esound On the Mac, install the&#160;SoundFlower&#160;package via its GUI. Then install &#8230; <a href="http://negativespace.net/2011/12/31/streaming-audio-from-a-mac-to-a-ubuntu-box/">Continue reading <span class="meta-nav">&#8594;</span></a><div class='yarpp-related-rss yarpp-related-none'>

No related posts.
</div>
]]></description>
				<content:encoded><![CDATA[<h2>
	<strong>Initial setup </strong><br />
</h2>
<p>
	(only do this once)
</p>
<p>
	On the ubuntu box, install esound. This will automatically remove two packages (pulseaudio-esound-compat ubuntu-desktop), but they don&#39;t seem important.
</p>
<p><pre>$ sudo apt-get install esound</pre>
</p>
<p>
	On the Mac, install the&nbsp;<a href="http://cycling74.com/products/soundflower/">SoundFlower</a>&nbsp;package via its GUI. Then install the esound on the Mac from the command line (I use <a href="http://www.macports.org/">MacPorts</a> for this stuff, and so should you.).
</p>
<p><pre>$ sudo port install esound</pre>
</p>
<p>
	<strong>Update:</strong> On Ubuntu 12.10 and later it takes a bit more configuration.
</p>
<p>
	Edit your /etc/default/pulseaudio file so that:<br />
	<span style="font-family:courier new,courier,monospace;">PULSEAUDIO_SYSTEM_START=1<br />
	DISALLOW_MODULE_LOADING=0</span>
</p>
<p>
	Put the following three lines in the bottom of /etc/pulse/system.pa file:<br />
	<span style="font-family:courier new,courier,monospace;">load-module module-esound-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16<br />
	load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16<br />
	load-module module-zeroconf-publish</span>
</p>
<h2>
	<strong>Streaming audio from Mac to Ubuntu</strong><br />
</h2>
<p>
	(do this every time you stream audio)
</p>
<p>
	<strike>Start the esound process on the Ubuntu box. It will receive audio that has been broadcast over the network from any local computer.</strike>
</p>
<p>
	<strike>
<pre>$ esd -tcp -public</pre>
<p></strike> This isn&#39;t necessary on Ubuntu 12.10 if it is configured as above.
</p>
<p>
	Then on the Mac, open System Preferences and set sound input and output to Soundflower (2ch). This will capture the audio from iTunes and make it available to the command line.
</p>
<p>
	Start the esd audio process up (do this before you start CAPTURING sound).
</p>
<p><pre>$ esd -tcp -bind ::1 </pre>
</p>
<p>
	Then capture the audio (with esdrec) and send it (that&#39;s a pipe character) over the network (esdcat) to the Ubuntu box (mine is called harold.local).
</p>
<p><pre>$ esdrec -s ::1 | esdcat -s harold.local </pre>
</p>
<p>
	<a href="http://blog.haynberg.de/?p=14">See also</a>. <a href="http://ubuntuforums.org/archive/index.php/t-1083077.html">And also</a>.</p>
<div class='yarpp-related-rss yarpp-related-none'>
<p>No related posts.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://negativespace.net/2011/12/31/streaming-audio-from-a-mac-to-a-ubuntu-box/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
