<?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>&#039;-- - Josh</title>
	<atom:link href="http://joshwilliams.name/feed/" rel="self" type="application/rss+xml" />
	<link>http://joshwilliams.name</link>
	<description>Things!</description>
	<lastBuildDate>Thu, 22 Sep 2011 04:10:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Draft: How to be mean to developers</title>
		<link>http://joshwilliams.name/2010/09/draft-how-to-be-mean-to-developers/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=draft-how-to-be-mean-to-developers</link>
		<comments>http://joshwilliams.name/2010/09/draft-how-to-be-mean-to-developers/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 13:06:53 +0000</pubDate>
		<dc:creator>Josh Williams</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://joshwilliams.name/?p=42</guid>
		<description><![CDATA[Maybe you work at one of those large corporations that has a dedicated DBA staff, separate from the development team.  Or maybe you&#8217;re lucky and just get to read about it on thedailywtf.com.  But you&#8217;ve probably seen battles between database folk and the developers that &#8220;just what a table with &#8220;ID &#8221; VARCHAR(255), name VARCHAR(255), [...]]]></description>
			<content:encoded><![CDATA[<p>Maybe you work at one of those large corporations that has a dedicated DBA staff, separate from the development team.  Or maybe you&#8217;re lucky and just get to read about it on <a href="http://thedailywtf.com">thedailywtf.com</a>.  But you&#8217;ve probably seen battles between database folk and the developers that &#8220;just what a table with &#8220;ID &#8221; VARCHAR(255), name VARCHAR(255), price VARCHAR(255), post_date VARCHAR(255).  Is that so much to ask?!&#8221;</p>
<p>Well if you ever feel the need to get back at them, here&#8217;s a few things you can try.  Quoted identifiers let you name your objects anything you want, even if they don&#8217;t look like a normal object name&#8230;</p>
<pre>CREATE TABLE "; rollback; drop database postgres;--" ("'';
delete from table order_detail;commit;" INT PRIMARY KEY,
";commit;do $$&#96;rm -rf *&#96;$$ language plperlu;" TEXT NOT NULL);

COMMENT ON TABLE "; rollback; drop database postgres;--"
IS 'DON''T FORGET TO QUOTE THESE';</pre>
<p>Good advice, that comment.  Of course, assuming they learn, they&#8217;ll be quoting everything you give them.  So, drop a quote right in the middle of it:</p>
<pre>CREATE TABLE "messages"";rollback;update products set price=0;commit;--"
("am i doing this right" text);

[local]:5432|production=# dt *messages*
 List of relations
 Schema |                           Name                           | Type  |   Owner   
--------+----------------------------------------------------------+-------+-----------
 public | messages";rollback;update products set price=0;commit;-- | table | jwilliams
(1 row)</pre>
<p>A copy &amp; paste later&#8230;</p>
<pre>[local]:5432|production=# SELECT "am i doing this right" FROM "messages";rollback;update products set price=0;commit;--";
ERROR:  relation "messages" does not exist
LINE 1: select "am i doing this right" from "messages";
                                            ^
NOTICE:  there is no transaction in progress
ROLLBACK
UPDATE 100
WARNING:  there is no transaction in progress
COMMIT</pre>
<p>Then again, if this is your database, that&#8217;ll eventually cause you a lot of headache.  Restores aren&#8217;t fun.  But UTF-8 can be&#8230;</p>
<pre>CREATE TABLE suoıʇɔɐsuɐɹʇ (ɯnu‾ɹǝpɹo SERIAL PRIMARY KEY,
ǝɯɐuɹǝsn text REFERENCES sɹǝsn, ןɐʇoʇ‾ɹǝpɹo NUMERIC(5,2));</pre>
]]></content:encoded>
			<wfw:commentRss>http://joshwilliams.name/2010/09/draft-how-to-be-mean-to-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a Better Data Center Move</title>
		<link>http://joshwilliams.name/2010/02/building-a-better-data-center-move/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=building-a-better-data-center-move</link>
		<comments>http://joshwilliams.name/2010/02/building-a-better-data-center-move/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 01:09:10 +0000</pubDate>
		<dc:creator>Josh Williams</dc:creator>
				<category><![CDATA[Project Management]]></category>
		<category><![CDATA[datacenter]]></category>
		<category><![CDATA[learnfrommymistakes]]></category>
		<category><![CDATA[projectmanagement]]></category>

		<guid isPermaLink="false">http://joshwilliams.name/blog/?p=7</guid>
		<description><![CDATA[The underlying concept of the move was a phased pipelined approach, where in as any Equipment Group X is being pulled from the rack, Group Y is in transit, and Group Z is being installed.  In other words about the time something was done installing the next set of gear would be arriving.]]></description>
			<content:encoded><![CDATA[<h3>Or, Four Things I Learned As A Project Manager.</h3>
<p>A little over a week ago, I headed a project that was small in scale but large in importance: we picked up a sizeable chunk of hardware from one colocation facility and moved it across town to another.  Small in scale, as it was only a dozen or so pieces of equipment; large in importance, as it involved high end switches, a SAN, a VMware cluster, and a couple dedicated web servers.  We host entire networks, so with multiple businesses riding on this being careful was priority one.</p>
<p>The underlying concept of the move was a phased pipelined approach, where in as any Equipment Group X is being pulled from the rack, Group Y is in transit, and Group Z is being installed.  In other words about the time something was done installing the next set of gear would be arriving.</p>
<p>It actually worked fairly well; I think it ultimately was the correct approach.  But there were a couple bumps in the road, which, as PM, I could have planned around.  These are the lessons I learned&#8230;</p>
<p><span id="more-9"></span><strong>Lesson 1: Employ Automation.</strong> Under the faulty assumption that it&#8217;d give us more control over the start up of virtual machines, and thus avoid among other things a boot storm on the SAN, the automatic control of virtual machine power on/off by the host was disabled.  In truth this feature could have saved us considerable time, especially considering the Virtual Center Server is itself running in a VM.  If that doesn&#8217;t start on its own, you have an annoying chicken-and-egg situation to deal with.</p>
<p><strong>Lesson 2: If It Can Be Done Early, Do It Early.</strong> We pulled the two big, redundant switches and in place of those put in a single smaller switch for the equipment staying at the colocation facility.  Rather than installing that switch at the tail end of the project, it could have been installed, cabled up, and ready to go in the days leading up to the primary project execution.  Then we wouldn&#8217;t have had anything to do that day but unplug the stuff that was moving.  That could have avoided some not unwarranted confusion when engineers not as familiar with the environment, and what can plug where, ran out of switch ports.</p>
<p>It additionally would have made it much, much more likely we&#8217;d have found the bad cable before it added another 25% time to find and diagnose to the move day, after everyone had closed up and left the old facility not anticipating the need to go back there that day.</p>
<p><strong>Lesson 3: Tear Down ≠ Install Time.</strong> In planning, I&#8217;d assumed that the time required to pull the equipment from the rack would roughly equate to the time required to install it at the new place.  However when it came down to it, most of the equipment was pulled quickly, in part since the stuff being pulled last had been some of the first to power down and was thus ready to go.  I&#8217;m not too sure how this would change the plan, apart from perhaps doing more things to allow Lesson #2 above to happen to a greater degree.</p>
<p><strong>Lesson 4: Enable Testing.</strong> In the software design world testing is very important, to the extent that automated suites and dedicated test harnesses have become essential.  An explicitly written set of steps to perform with the expected outcomes is now the norm.  We could have taken the same approach for the last people to leave the old colo facility, and defined some test procedures for which VLAN&#8217;s should be able to communicate with which equipment, even if everything wasn&#8217;t up and running at the new facility yet.</p>
<p>And again we would have had a much better chance of finding the not-quite-dead, but flaky and eventually very problematic cable.</p>
]]></content:encoded>
			<wfw:commentRss>http://joshwilliams.name/2010/02/building-a-better-data-center-move/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello world!</title>
		<link>http://joshwilliams.name/2010/02/hello-world-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hello-world-2</link>
		<comments>http://joshwilliams.name/2010/02/hello-world-2/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 03:17:38 +0000</pubDate>
		<dc:creator>Josh Williams</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://joshwilliams.name/blognew/?p=1</guid>
		<description><![CDATA[Nice! Got WordPress back up and running, this time on a VPS that&#8217;s now hosting joshwilliams.name. And, thanks to the wp2pg plug-in, running 100% MySQL-free!]]></description>
			<content:encoded><![CDATA[<p>Nice!  Got WordPress back up and running, this time on a VPS that&#8217;s now hosting joshwilliams.name.  And, thanks to the wp2pg plug-in, running 100% MySQL-free!</p>
]]></content:encoded>
			<wfw:commentRss>http://joshwilliams.name/2010/02/hello-world-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

