<?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/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Devin Teske</title>
	<atom:link href="http://devinteske.com/feed" rel="self" type="application/rss+xml" />
	<link>http://devinteske.com</link>
	<description>Devin Teske News</description>
	<lastBuildDate>Mon, 15 Apr 2013 03:13:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<!-- podcast_generator="podPress/8.8" - maintenance_release="8.8.6.3" -->
	<copyright>Copyright &#169; Devin Teske 2010 </copyright>
	<managingEditor>devinteske@devinteske.com (Devin Teske)</managingEditor>
	<webMaster>devinteske@devinteske.com (Devin Teske)</webMaster>
	<category>posts</category>
	<ttl>1440</ttl>
	<image>
		<url>http://devinteske.yvod.com/wp/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>Devin Teske</title>
		<link>http://devinteske.com/wp</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>Devin Teske News</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &amp; Culture" />
	<itunes:author>Devin Teske</itunes:author>
	<itunes:owner>
		<itunes:name>Devin Teske</itunes:name>
		<itunes:email>devinteske@devinteske.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://devinteske.yvod.com/wp/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<item>
		<title>VIMAGE Jails on FreeBSD-8</title>
		<link>http://devinteske.com/vimage-jails-on-freebsd-8</link>
		<comments>http://devinteske.com/vimage-jails-on-freebsd-8#comments</comments>
		<pubDate>Wed, 20 Mar 2013 18:45:42 +0000</pubDate>
		<dc:creator>devinteske</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://devinteske.com/?p=133</guid>
		<description><![CDATA[While FreeBSD-9.1 has recently been released, I find myself still working in FreeBSD-8 (and at the time of this writing, 8.4 is soon to be released). This article is based on work performed in FreeBSD-8.1 (only because we froze our &#8230; <a href="http://devinteske.com/vimage-jails-on-freebsd-8">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>While FreeBSD-9.1 has recently been released, I find myself still working in FreeBSD-8 (and at the time of this writing, 8.4 is soon to be released). This article is based on work performed in FreeBSD-8.1 (only because we froze our development environment for several years to prove the technology that I&#8217;m going to talk about in this article).</p>
<p>In FreeBSD-8 there is a new feature for &#8220;jails&#8221; that is not enabled by default (for base information on standard FreeBSD jails, see the <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails.html" target="_blank">Jail Section</a> of the <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/" target="_blank">FreeBSD Handbook</a>).</p>
<p>The new optional feature is called &#8220;VNET&#8221; and it allows each jail to have a private networking stack. However useful and exciting this may sound, these VNET jails require you to &#8220;Bring Your Own Network Interface.&#8221;</p>
<p>The VNET feature allows you to move network interfaces in/out of the view of a jail. When a network interface is moved into the view of a jail, it is no longer visible to the host of said jail.</p>
<p>A VNET jail starts with an empty network stack.</p>
<p>For example, you can create an ad hoc persistent VNET jail using the following command (requires <code>VIMAGE</code> option enabled in kernel &#8212; more on that later):</p>
<blockquote><p><code>jail -c <strong>vnet</strong> name=vj1 host.hostname=vj1 path=/ persist</code></p></blockquote>
<p><strong>NOTE:</strong> If your kernel is not compiled with the <code>options VIMAGE</code> line, then you&#8217;ll get an error of <code>jail: unknown parameter: vnet</code>).</p>
<p>This jail is now a special jail, called a VNET jail. In this jail, <code>ifconfig</code> shows a private network stack which is currently empty except for an unconfigured local-loopback interface (<code>lo0</code>).</p>
<p>You can now move network interfaces into that jail using the below ifconfig syntax from the host:</p>
<blockquote><p><code>ifconfig &lt;interface_name&gt; <strong>vnet</strong> &lt;jail_id&gt;</code></p></blockquote>
<p>Meanwhile, you can move the network interface back out-of that jail using the below syntax from the host:</p>
<blockquote><p><code>ifconfig &lt;interface_name&gt; <strong>-vnet</strong> &lt;jail_id&gt;</code></p></blockquote>
<p>Notice the <code>-vnet</code> to recover an interface versus <code>vnet</code> to relinquish an interface to a VNET jail.</p>
<p>Where <code>&lt;interface_name&gt;</code> is something like <code>fxp0</code>, <code>em0</code>, <code>bge0</code>, <code>igb0</code>, etc. and <code>&lt;jail_id&gt;</code> is the value shown in the &#8220;JID&#8221; column of the output produced by the <code>jls</code> utility (executed without arguments).</p>
<p>However, the usefulness of this is still very limiting. With the VNET feature alone, all one is afforded is the ability to move whole network interfaces into and out-of VNET jails. When one does this, the jail and host do not share the network interface but rather the host can no longer see (using <code>ifconfig</code> for example) nor use the network interface.</p>
<p>To alleviate this limitation, a bridging technology is required to allow the host and VNET jail to share a network interface.</p>
<p>Enter <a href="http://www.freebsd.org/cgi/man.cgi?query=netgraph&#038;sektion=4" target="_blank">netgraph(4)</a>, another optional component in FreeBSD &#8212; graph based kernel networking subsystem &#8212; publicly available since FreeBSD-3.4. By adding a few NETGRAPH options to the kernel we can provide the VNET jails a solid bridging layer able to provide the jails fresh/functional network interfaces.</p>
<p>However, we&#8217;re still not to a point of usefulness because the following gaps still exist:</p>
<ul>
<li>How to automate the bootup, shutdown, and management of VNET jails?</li>
<li>How to automate the creation, destruction, and bridging of netgraph devices?</li>
<li>How to make sure bridged interfaces have unique MAC addresses?</li>
<li>How to allow multiple VNET jails to have the same root directory? (considering each sets their own IP from <a href="http://www.freebsd.org/cgi/man.cgi?query=rc.conf&#038;sektion=5" target="_blank">rc.conf(5)</a>)</li>
</ul>
<p>Enter vimage, software I&#8217;ve written to tie VNET jails together using netgraph.</p>
<p><strong>NOTE:</strong> My &#8220;vimage&#8221; boot/management script (which lives in /etc/rc.d and oft-executed via &#8220;service&#8221;) should not be confused with the &#8220;vimage&#8221; utility from the VirtNet project (<a href="http://imunes.tel.fer.hr/virtnet/" target="_blank">imunes.tel.fer.hr/virtnet/</a>).</p>
<p>My vimage is a fork of the jail rc.d script &#8212; rewritten to work only with VNET jails and help you harness the most flexibility in network topology and jail structure.</p>
<p><strong>HINT:</strong> If you are familiar with the IMUNES project (<a href="http://www.imunes.tel.fer.hr" target="_blank">http://www.imunes.tel.fer.hr</a>), both their work and my own performance-test results were factored into the ultimate choice to settle on netgraph for our bridging needs.</p>
<p>My vimage boot/mgmt script is available here:<br />
<a href="http://druidbsd.sourceforge.net/download.shtml#vimage" target="_blank">http://druidbsd.sourceforge.net/download.shtml#vimage</a></p>
<p>Let&#8217;s get started&#8230;</p>
<p>First, you&#8217;ll need a custom kernel for your FreeBSD host before you can run any VNET jails, let alone vimage jails (VNET jails with netgraph).</p>
<p>Add the following to a GENERIC FreeBSD kernel config as a minimum:</p>
<blockquote><p><code>makeoptions NO_MODULES=yes<br />
options VIMAGE<br />
options NETGRAPH<br />
options NETGRAPH_ETHER<br />
options NETGRAPH_BRIDGE<br />
options NETGRAPH_EIFACE<br />
options NETGRAPH_SOCKET<br />
nooptions SCTP</code></p></blockquote>
<p><strong>NOTE:</strong> In the future, when <code>VIMAGE</code> is compatible with <code>SCTP</code>, you will <strong>not</strong> need the <code>nooptions SCTP</code> line.</p>
<p><strong>UPDATE:</strong> A known issue is that the <strong>non-default</strong> <code>options IPFILTER</code> conflicts with <code>VIMAGE</code> in stable/9 (and possibly HEAD too) in that a kernel panic occurs during boot. A backtrace shows the trap originating from <code>fr_resolvenic()</code> in <code>sys/contrib/ipfilter/netinet/fil.c</code>. My current recommendation for running a kernel with both Firewall abilities and <code>VIMAGE</code> is to use the <code>IPFIREWALL</code> family of options and <a href="http://www.freebsd.org/cgi/man.cgi?query=ipfw&#038;sektion=8" target="_blank">ipfw(8)</a>.</p>
<p>Compile your kernel and boot it. Next, grab the FreeBSD package for <a href="http://druidbsd.sourceforge.net/download/vimage-1.4.tbz" target="_blank">vimage-1.4</a> and use the following command to install 2 files (<code>/etc/rc.d/vimage</code> and <code>/etc/rc.conf.d/vimage</code>):</p>
<blockquote><p><code>pkg_add vimage-1.4.tbz</code></p></blockquote>
<p>Now we&#8217;re ready to build a jail. Personally, I use my own &#8220;jail_build&#8221; script to build jails from binary releases. You can get <code>jail_build</code> from my SourceForge page:</p>
<p><a href="http://druidbsd.sourceforge.net/download.shtml#jail_build" target="_blank">http://druidbsd.sourceforge.net/download.shtml#jail_build</a></p>
<p><strong>NOTE:</strong> If you are planning on running i386 jails under an amd64 kernel, be advised that you may need a patch to your amd64 kernel to solve a problem with applying a default gateway using the 32-bit <code>route</code> command (as discussed <a href="http://lists.freebsd.org/pipermail/freebsd-amd64/2011-October/014051.html" target="_blank">here</a>).</p>
<p>Currently <code>jail_build</code> works with any release, 8.x and older (sorry, no 9.x support yet).</p>
<p>How you use <code>jail_build</code> in a nut-shell:</p>
<blockquote><p><code>fetch <a href="http://druidbsd.sourceforge.net/download/jail_build.txt" target="_blank">http://druidbsd.sourceforge.net/download/jail_build.txt</a><br />
mv jail_build.txt jail_build<br />
chmod +x jail_build<br />
mkdir -p /usr/repos<br />
cd /usr/repos<br />
# For example<br />
mkdir 8.3-RELEASE<br />
cd 8.3-RELEASE</p>
<p># Now pick a single base-URL from below:<br />
# <a href="ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/8.3-RELEASE/" target="_blank">ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/8.3-RELEASE/</a><br />
# <a href="ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/8.3-RELEASE/" target="_blank">ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/8.3-RELEASE/</a><br />
# <a href="ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/8.3-RELEASE/" target="_blank">ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/8.3-RELEASE/</a><br />
# <a href="ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/amd64/8.3-RELEASE/" target="_blank">ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/amd64/8.3-RELEASE/</a></p>
<p># Download "base" directory from FTP to local "."<br />
# Download "doc" directory from FTP to local "."<br />
# Download "dict" directory from FTP to local "."<br />
# Download "games" directory from FTP to local "."<br />
# Download "info" directory from FTP to local "."<br />
# Download "manpages" directory from FTP to local "."<br />
# Download "proflibs" directory from FTP to local "."<br />
# Download "kernels" directory from FTP to local "."<br />
</code></p></blockquote>
<p>You should now have:</p>
<p><code>/usr/repos/8.3-RELEASE/{base,doc,dict,games,info,manpages,proflibs,kernels}/</code></p>
<p><strong>TIP:</strong> <code>jail_build</code> will automatically probe for <code>/usr/repos/*-{RELEASE,STABLE,CURRENT}</code></p>
<p><strong>NOTE:</strong> You can certainly run older releases as a jail, but generally speaking you should not run newer releases than what your host is running. So if you build an 8.3-RELEASE jail, you should have at least an 8.3 kernel or higher.</p>
<p>Executing <code>jail_build</code> brings up a menu of repositories to select from (living in <code>/usr/repos</code>) and allows you to select one before prompting you to enter the directory you wish to unpack the contents to (creating a new jail root directory). The default directory is <code>/usr/jail/&lt;jail_hostname&gt;</code> (change <code>&lt;jail_hostname&gt;</code> to the fully qualified hostname of the jail &#8212; this is suggested for easy tracking but feel free to make this whatever you like).</p>
<p><strong>NOTE:</strong> You don&#8217;t have to use my <code>jail_build</code> technique to build jails, in fact there is a long-standing tradition of populating jails from source-code. For details on how to build a jail from source, see the <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails-build.html" target="_blank">Creating and Controlling Jails</a> section of the <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/" target="_blank">FreeBSD Handbook</a>.</p>
<p>After you&#8217;ve created a jail, it&#8217;s time to configure it as a vimage.</p>
<p>In the host&#8217;s <code>/etc/rc.conf</code> file, add the following:</p>
<blockquote><p><code>vimage_enable="YES"     # Set to NO to disable starting of any vimages<br />
vimage_list="vj1"       # Space separated list of names of vimages</p>
<p>vimage_vj1_rootdir="/usr/jail/vj1" # vimage's root directory<br />
vimage_vj1_hostname="vj1"          # vimage's hostname<br />
vimage_vj1_devfs_enable="YES"      # mount devfs in the vimage<br />
</code></p></blockquote>
<p>This configures your basic vimage (we&#8217;ll cover how to give it a network interface in a moment). You can compare this directly to the procedures documented in the <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails-build.html" target="_blank">Creating and Controlling Jails</a> section of the <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/" target="_blank">FreeBSD Handbook</a>.</p>
<p>The same rules that apply to <code>jail_list</code> in the Handbook apply to <code>vimage_list</code>. The methodology is the same because again, <code>/etc/rc.d/vimage</code> is a fork of the documented <code>/etc/rc.d/jail</code> script.</p>
<p>Next, if you only want to move whole network interfaces into the vimage when it is started (and implied, automatically move the interface back out when the vimage is stopped), add the following to the same <code>rc.conf</code> file as above:</p>
<blockquote><p><code>vimage_vj1_vnets="igb0"            # list of interfaces to give to the vimage</code></p></blockquote>
<p>However, the real flexibility comes from using the bridging option based on netgraph. To create a bridged interface for the vimage &#8212; leaving the original interface on the host unaffected &#8212; add the following instead of the above:</p>
<blockquote><p><code>vimage_vj1_bridges="igb0 igb0"     # list of interfaces to bridge</code></p></blockquote>
<p>In the above example, a single port physical Intel Gigabit network adapter is listed twice &#8212; this will create two unique bridged interfaces from the same physical interface. This is not an error and is perfectly valid (imagine simulating a router that runs on two subnets but over the same physical wire).</p>
<p>If you start the vimage at this point (using <code>service vimage start</code>) you can get a list of the bridged interfaces from the jail&#8217;s point of view by executing:</p>
<blockquote><p><code>jexec vj1 ifconfig</code></p></blockquote>
<p>You&#8217;ll see (in the bridging example) two network interfaces, one named <code>ng0_vj1</code> and the other <code>ng1_vj1</code>. The naming convention for bridged interfaces is <code>ng<em>#</em>_<em>NAME</em></code> where <em><code>#</code></em> is a counter that starts at zero and increases by one for each bridge (regardless of the device being bridged) and <em><code>NAME</code></em> is the vimage name as seen in <code>vimage_list</code>.</p>
<p><strong>NOTE:</strong> Due to an internal limitation, the name of any network interface in FreeBSD cannot exceed 15 characters. For long vimage names, be aware that <code>ng<em>#</em>_<em>NAME</em></code> will be truncated to be less than 16 characters if necessary.</p>
<p><strong>PRO-TIP:</strong> By placing the vimage name within the name of the bridged network interface, it makes it simple to configure multiple vimages to use the same root directory.</p>
<p>The network configuration for the above vimage is configured within the vimage&#8217;s own <code>/etc/rc.conf</code> file, example below:</p>
<blockquote><p><code>ifconfig_ng0_vj1="inet 192.168.1.100 netmask 255.255.255.0"<br />
ifconfig_ng1_vj1="inet 10.0.0.1 netmask 255.255.255.0"<br />
defaultrouter="192.168.1.1"</code></p></blockquote>
<p>Let&#8217;s say you had a second vimage named &#8220;vj2&#8243; pointed at the same root directory (and therefore the same <code>/etc/rc.conf</code> file). You would then add the following, for example:</p>
<blockquote><p><code>ifconfig_ng0_vj2="inet 10.0.0.2 netmask 255.255.255.0"</code></p></blockquote>
<p>The <code>vj1</code> vimage jail would ignore the <code>vj2</code> entries and vice-versa.</p>
<p>At this point, let&#8217;s recap &#8212; you should have done the following:</p>
<blockquote><ol>
<li>Compiled, installed, and executed a custom kernel that enables the VNET and netgraph(4) requirements.</li>
<li>Installed my vimage package from <a href="http://druidbsd.sourceforge.net/download.shtml#vimage" target="_blank">druidbsd.sf.net</a>.</li>
<li>Created a jail using either the source-method mentioned in the FreeBSD Handbook or using <code>jail_build</code> and a binary release.<br /><strong>PRO-TIP:</strong> You can actually get by in testing without building a discrete jail but instead use &#8220;<code>/</code>&#8221; as the jail root path. This is perfectly valid and acceptable.</li>
<li>Configured the <code>vj1</code> test vimage in <code>/etc/rc.conf</code></li>
<li>Configured <code>vj1</code> to bridge at least one physical interface using <code>vimage_vj1_bridges</code> (in the example above, we use <code>igb0</code> &#8212; twice)</li>
<li>Configured <code>ifconfig_ng0_vj1</code> and [optionally] <code>defaultrouter</code> in the <code>/etc/rc.conf</code> file within the <code>vj1</code> root directory.</li>
</ol>
</blockquote>
<p>At this point, the vimage will boot with the rest of the machine and can be controlled after boot with the following syntaxes:</p>
<blockquote><p><code># Stop, start, or restart all vimages<br />
service vimage stop<br />
service vimage start<br />
service vimage restart</p>
<p># ... versus: Stop, start, or restart just the vj1 vimage<br />
service vimage stop vj1<br />
service vimage start vj1<br />
service vimage restart vj1<br />
</code></p></blockquote>
<p>When the <code>vj1</code> vimage starts, the <code>ng*_vj1</code> network interfaces will automatically be created with unique MAC addresses and moved into the VNET jail before kickstarting the FreeBSD boot process within the jail. As the jail boots, it will automatically configure the network interfaces through <a href="http://www.freebsd.org/cgi/man.cgi?query=rc.conf&#038;sektion=5" target="_blank">rc.conf(5)</a>. You can use <a href="http://www.freebsd.org/cgi/man.cgi?query=jls&#038;sektion=8" target="_blank">jls(8)</a> to see the running vimages and you can use <a href="http://www.freebsd.org/cgi/man.cgi?query=jexec&#038;sektion=8" target="_blank">jexec(8)</a> to execute processes inside them (like <a href="http://www.freebsd.org/cgi/man.cgi?query=tcsh&#038;sektion=1" target="_blank">tcsh(1)</a>, <a href="http://www.freebsd.org/cgi/man.cgi?query=ps&#038;sektion=1" target="_blank">ps(1)</a>, and <a href="http://www.freebsd.org/cgi/man.cgi?query=ifconfig&#038;sektion=8" target="_blank">ifconfig(8)</a>).</p>
<p><strong>PRO-TIP:</strong> <a href="http://www.freebsd.org/cgi/man.cgi?query=ps&#038;sektion=1" target="_blank">ps(1)</a> can produce the JID of all running processes with the syntax:<br /><code>ps axopid,jid,command</code></p>
<p>However, what if you want to SSH into the vimage jail? SSH is not automatically started inside the vimage (and in-fact, only the network services required to get the vimage talking to the net are started). The answer is to add a new configuration line to the host machine&#8217;s <code>/etc/rc.conf</code> to configure <code>sshd</code> to be started in each/every jail:</p>
<blockquote><p><code>vimage_afterstart_services="sshd" # set new default for all vimages</code></p></blockquote>
<p>The default for <code>vimage_after_services</code> is NULL but can be set to a space separated list of services (names of scripts living in <code>/etc/rc.d</code> like <code>sshd</code>). If you wanted to leave this the default and only have the <code>vj1</code> vimage start <code>sshd</code>, you can instead opt for the following line:</p>
<blockquote><p><code>vimage_<strong>vj1</strong>_afterstart_services="sshd"</code></p></blockquote>
<p>So now we have a usable framework for creating multiple vimages that can be SSH&#8217;d into as (let&#8217;s say) development environments. When you scale this out, netgraph starts to shine. Afterall, netgraph is based on <em>graphs</em>.</p>
<p>Without any additional work, simply by using vimage to produce VNET jails with netgraph bridged interfaces, we can produce graphs of the vimage network topology with the following syntax:</p>
<blockquote><p><code>ngctl dot | dot -Tsvg -o vgraph.svg</code></p></blockquote>
<p><strong>PRO-TIP:</strong> The <a href="http://www.freebsd.org/cgi/man.cgi?query=dot&#038;sektion=1&#038;manpath=FreeBSD+Ports" target="_blank">dot(1)</a> utility can produce more than SVG (like PNG, JPEG, and GIF), but I find SVG to be the most scalable and informative (modern SVG viewers such as latent browsers display much information as tool-tips which I find helpful).</p>
<p>Here are some graphs of different topologies we&#8217;ve used over the years:</p>
<div id="warden0.jbsd" class="wp-caption aligncenter" style="width: 650px"><a href="http://druidbsd.sourceforge.net/download/warden0.jbsd.svg"><img src="http://druidbsd.sourceforge.net/download/warden0.jbsd.svg" alt="netgraph" title="netgraph" width="640" height="400" class="size-full" /></a><p class="wp-caption-text">warden0.jbsd netgraph of bridges for vimage jails</p></div><br />
<div id="folsom" class="wp-caption aligncenter" style="width: 650px"><a href="http://druidbsd.sourceforge.net/download/folsom.svg"><img src="http://druidbsd.sourceforge.net/download/folsom.svg" alt="netgraph" title="netgraph" width="640" height="400" class="size-full" /></a><p class="wp-caption-text">folsom netgraph of bridges for vimage jails</p></div>
<p>It&#8217;s worth noting that if an interface is not bridged, it is shown in the &#8220;disconnected&#8221; cluster. This does not imply that the network interface is unused within FreeBSD &#8212; just that it has not been connected to any nodes within the netgraph layer.</p>
<p>That&#8217;s it for now, thank you for reading. Comments welcome. Depending on comments, I may do another installment showing the more exotic things you can do with this configuration.<br />
&#8211;<br />
Cheers,<br />
Devin</p>
]]></content:encoded>
			<wfw:commentRss>http://devinteske.com/vimage-jails-on-freebsd-8/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New FreeBSD Boot Loader Menu</title>
		<link>http://devinteske.com/new-freebsd-boot-loader-menu</link>
		<comments>http://devinteske.com/new-freebsd-boot-loader-menu#comments</comments>
		<pubDate>Mon, 25 Apr 2011 01:19:24 +0000</pubDate>
		<dc:creator>devinteske</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://devinteske.com/?p=89</guid>
		<description><![CDATA[FreeBSD. It is Free (in the truest sense; with a capital-F) and is a descendant of Berkeley Systems Distribution (specifically BSD-Lite v4.2/4.4), which originated from the University of Berkeley, about 2.5 miles away from where I live (though I&#8217;m not &#8230; <a href="http://devinteske.com/new-freebsd-boot-loader-menu">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>FreeBSD. It is <em>Free</em> (in the truest sense; with a capital-F) and is a descendant of <em>Berkeley Systems Distribution</em> (specifically BSD-Lite v4.2/4.4), which originated from the University of Berkeley, about 2.5 miles away from where I live (though I&#8217;m not a student, nor have I ever been). FreeBSD is an amazingly versatile and flexible UNIX operating system with ancestry reaching back decades.</p>
<p>This entry is for those persons already well versed in this well-edified system.</p>
<p>I would like to announce a completely new &#8212; written from scratch &#8212; boot menu for the FreeBSD operating system. It is today that I release the code that I&#8217;ve been developing for nearly 5 years. Code to enhance the level of options provided to the user at each and every boot of this venerable OS.</p>
<p>Historically, the original menu offered by FreeBSD featured our beloved helper-daemon mascot, named &#8220;Beastie.&#8221; But soon after, this menu was revamped to [a] lay-rest our triton-carrying/sneaker-wearing assistant in favor of the less-controversial textual &#8220;FreeBSD&#8221; banner and [b] imbue the menu with new options.</p>
<p>Currently, the default boot menu offers booting normally as well as options for the following:</p>
<ul>
<li>Booting with ACPI support disabled (if you&#8217;re running an i386 compatible system)</li>
<li>Booting into &#8220;Safe Mode&#8221; (implies disabling ACPI)</li>
<li>Booting verbose</li>
<li>Booting into single-user mode</li>
</ul>
<p>However, one of the things that is not currently possible is the ability to boot into any combination of the aforementioned options. That is to explain, you cannot boot into single-user mode with ACPI disabled but verbosity enabled. The reason for this is obvious as once a menu option has been selected, the system proceeds to boot with those options rather than allowing additional selections to be made. See below.</p>
<div id="attachment_119" class="wp-caption aligncenter" style="width: 650px"><a href="http://devinteske.com/new-freebsd-boot-loader-menu/parallels-picture-3" rel="attachment wp-att-119"><img src="http://devinteske.com/wp/wp-content/uploads/Parallels-Picture-3.png" alt="standard-menu" title="standard-menu" width="640" height="400" class="size-full wp-image-119" /></a><p class="wp-caption-text">The Standard FreeBSD Boot Menu</p></div>
<p>Enter my new menu (pictured below in the following paragraphs), first created in 2006 internally for a proprietary custom installer, now generalized for the rest of the world and being released for all to enjoy. This new loader does not proceed to boot the system after selecting a menu option but rather updates the menu to display the option status, allowing the user to toggle any number of multiple options before pressing ENTER to finally boot with the displayed options.</p>
<p>And for those like myself that balked when Beastie exited stage-left, I have a nice surprise. Some time back, the FreeBSD community held a contest for artists to create a new logo for the FreeBSD project. The results of which can be viewed here: <a href="http://www.freebsd.org/logo.html">http://www.freebsd.org/logo.html</a></p>
<p>When the contest ended, I had my fun in running the graphics through some Image-to-ASCII conversion programs without much luck. Months later, I doubled-down my efforts still to no avail, attempting to create an ASCII-art version of the new orb to display at boot time. Six months later, I succeeded in producing a bi-color ASCII-art representation of the &#8220;horny orb&#8221; logo easily recognizable as the FreeBSD logo. This gem (as well as a B&#038;W copy) have been added to the latest &#8220;beastie.4th&#8221; module for your viewing pleasure and is enabled by default upon installation.</p>
<p>Here you can lay your eyes on the final edition of the first-offering being made to the public today:</p>
<div id="attachment_93" class="wp-caption aligncenter" style="width: 650px"><a href="http://devinteske.com/new-freebsd-boot-loader-menu/parallels-picture" rel="attachment wp-att-93"><img src="http://devinteske.com/wp/wp-content/uploads/Parallels-Picture.png" alt="loader_menu-1.0" title="loader_menu-1.0" width="640" height="400" class="size-full wp-image-93" /></a><p class="wp-caption-text">New FreeBSD Boot Loader Menu</p></div>
<p>Installing the new boot loader menu couldn&#8217;t be easier. After downloading the FreeBSD package from <a href="http://druidbsd.sf.net/">http://druidbsd.sf.net/</a>, use the <a href="http://www.FreeBSD.org/cgi/man.cgi?query=pkg_add&#038;apropos=0&#038;sektion=0&#038;manpath=FreeBSD+8.2-RELEASE&#038;format=html">pkg_add(1)</a> command to install the package, and finally reboot.</p>
<p>Other additions that you will notice are that the replacement menu does not load right away. Another enhancement is that there is a 2 second delay before launching the menu where the user can press Ctrl-C to escape the menu, allowing immediate booting or escape to the loader prompt. Something that the current menu does not allow for. See below.<br />
<div id="attachment_110" class="wp-caption aligncenter" style="width: 650px"><a href="http://devinteske.com/new-freebsd-boot-loader-menu/parallels-picture-2" rel="attachment wp-att-110"><img src="http://devinteske.com/wp/wp-content/uploads/Parallels-Picture-2.png" alt="loading-the-new-menu" title="loading-the-new-menu" width="640" height="400" class="size-full wp-image-110" /></a><p class="wp-caption-text">Loading the New Menu</p></div></p>
<p>The new menu is a system of ANS/FICL Forth (a reverse-polish stack-based language) modules that extend (but do not replace) the standard FreeBSD boot loader (/boot/loader). An interesting note about this package is that it will backup any files that will be replaced during installation to the file /var/backups/loader_menu.backup.tgz. Should you decide that you do not like the new and improved boot loader, you can uninstall it, returning your system back to the original boot loader by using the <a href="http://www.FreeBSD.org/cgi/man.cgi?query=pkg_delete&#038;apropos=0&#038;sektion=0&#038;manpath=FreeBSD+8.2-RELEASE&#038;format=html">pkg_delete(1)</a> utility (the backup will automatically be restored upon <a href="http://www.FreeBSD.org/cgi/man.cgi?query=pkg_delete&#038;apropos=0&#038;sektion=0&#038;manpath=FreeBSD+8.2-RELEASE&#038;format=html">pkg_delete(1)</a>).</p>
<p>With this initial offering, there are only two short-comings which should certainly be livable for most if not all:</p>
<p>1. The menu that we are replacing only conditionally displays the option to disable ACPI support (based on whether you are running an i386 compatible system), whereas the new loader always presents this option. This should be of no concern unless you&#8217;re running a non-i386/amd64 system (such as sparc, pc98, ppc, etc.).</p>
<p>2. The ability to boot into single-user mode by pressing &#8220;s&#8221; and boot verbose by pressing &#8220;v&#8221;, etc. is not enabed. The proponents for these options on the FreeBSD-Questions mailing list were clear in that they liked these options because they allowed &#8220;one-key&#8221; booting into a special mode. However &#8212; with the new menu &#8212; even if I enabled the use of those keys as shortcuts for toggling these options in the new stateful menu, the user would still have to press an additional key to boot (&#8217;1&#8242; or ENTER). So the primary principle use &#8212; one-key booting into a special mode &#8212; is no longer capable, unless I add these keys not as togglers for the visible menu items but invisible hot-keys for immediately booting into single/verbose mode. I&#8217;ll have to sleep on that (maybe as a concession for power-users as invisible options are obviously less than intuitive).</p>
<p>However, don&#8217;t let those misgivings dissuade you. All but the most ardent and stringent of surveyors will find those to be shortcomings and overall I predict your experience will be a rather pleasing one.</p>
<p>Some other nice additions are that if/when you select the option to escape to the loader prompt, you are given a way to get back to the menu (simply type &#8220;menu&#8221; and press ENTER), allowing you to perform work under the hood and then return to the menu as desired (without losing track of the status of the menu options even). As shown below:</p>
<div id="attachment_105" class="wp-caption aligncenter" style="width: 650px"><a href="http://devinteske.com/new-freebsd-boot-loader-menu/parallels-picture-1" rel="attachment wp-att-105"><img src="http://devinteske.com/wp/wp-content/uploads/Parallels-Picture-1.png" alt="escape-to-loader-prompt" title="escape-to-loader-prompt" width="640" height="400" class="size-full wp-image-105" /></a><p class="wp-caption-text">Escaping to the Loader Prompt</p></div>
<p>Overall, the new stateful nature of this menu over the old makes it far less likely that a user will need to reboot if they hit the wrong key. The only mistake that could result in wasted cycles would be if they prematurely hit #1 to boot or hit #7 to reboot. All other options would simply toggle a menu item (except for #6 to escape to the loader prompt, to which they can immediately return to the menu if desired).</p>
<p>Last, but certainly not least, I&#8217;m including a completely rewritten password-checking module to replace the existing one (I couldn&#8217;t get the standard one to work). See below.</p>
<div id="attachment_124" class="wp-caption aligncenter" style="width: 650px"><a href="http://devinteske.com/new-freebsd-boot-loader-menu/parallels-picture-4" rel="attachment wp-att-124"><img src="http://devinteske.com/wp/wp-content/uploads/Parallels-Picture-4.png" alt="password-prompt" title="password-prompt" width="640" height="400" class="size-full wp-image-124" /></a><p class="wp-caption-text">New Password Checking Module</p></div>
<p>I hope that you like what I&#8217;ve developed, and your feedback is certainly welcome. I&#8217;ll be cross-posting this to the FreeBSD mailing lists, announcing in RSS feeds, and updating <a href="http://druidbsd.sourceforge.net/">http://druidbsd.sourceforge.net/</a> all simultaneously to coincide with this blog-post.<br />
&#8211;<br />
Cheers,<br />
Devin</p>
]]></content:encoded>
			<wfw:commentRss>http://devinteske.com/new-freebsd-boot-loader-menu/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>XCode Update Woes &#8211; With Solution!</title>
		<link>http://devinteske.com/xcode-update-woes-with-solution</link>
		<comments>http://devinteske.com/xcode-update-woes-with-solution#comments</comments>
		<pubDate>Sun, 17 Apr 2011 17:54:57 +0000</pubDate>
		<dc:creator>devinteske</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://devinteske.com/?p=78</guid>
		<description><![CDATA[I&#8217;ve found that when you upgrade versions of XCode, that you lose the ability to compile against older SDK&#8217;s (and therefore, the ability to make a binary targeted for the older platforms). This is further annoying by the fact that &#8230; <a href="http://devinteske.com/xcode-update-woes-with-solution">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve found that when you upgrade versions of XCode, that you lose the ability to compile against older SDK&#8217;s (and therefore, the ability to make a binary targeted for the older platforms). This is further annoying by the fact that every sample project that you download from Apple that is slightly older (by that I mean 6 months), you have to go in and &#8220;Edit Project Settings&#8221; to change the SDK from &#8220;4.0 Missing&#8221; to &#8220;iOS 4.3&#8243; before you can build/compile, install to device, or even run the App (I&#8217;m not complaining &#8212; a missing SDK is surely something worthy in commanding such manual intervention but &#8212; If you&#8217;re loading up over 200 sample apps from Apple, it gets quite tedious having to modify each project before being able to install it to the device).</p>
<p>I found the solution to all this, and you&#8217;ll be surprised at how much work Apple makes us do in order to maintain backward compatibility. This problem had me on the ropes for 2 weeks while I tried to figure out how to &#8212; with *either* the new XCode 4 or the still-offered legacy XCode 3.2.6 (both released last month) &#8212; compile ANY code for my iPhone 3G which &#8212; due to Apple&#8217;s decisioning &#8212; cannot update to the latest iOS. Without the below solution, I would not be able to compile code for the iPhone 3G without downgrading XCode. However, with the below solution, I can use the latest and greatest XCode with the older SDKs to compile code for the older devices.</p>
<p>Step 1: Stay up to date, but make backups!</p>
<p>Whenever Apple issues a new XCode installer, that installer only comes with the SDKs that they want to provide you. Currently, that&#8217;s only iOS 4.3 (note: the Device SDK is different than the Simulator SDK). Running said installer will wipe-out any existing old SDKs, leaving you only with what they have provided you in the latest installer. This is certainly cause for alarm, because if your device doesn&#8217;t use one of the provided SDKs, you cannot publish for that device. However, there are no rules for the AppStore that says you must baseline your app to a specific SDK, so whatever baseline you want to choose is fine with Apple &#8212; as long as it runs smoothly on the Device SDKs that Apple will test your App against.</p>
<p>Naturally, you&#8217;ll want to prevent the loss of any existing older SDKs before you install. Go to the Finder (by clicking the &#8220;Finder&#8221; icon in the Dock, or clicking the desktop background image, for example), and then select from the menubar Go-&gt;Go To Folder&#8230; (or simply press Apple+Shift+G). This will bring up a dialog prompt allowing you to go to a directory based on UNIX pathname. Enter the text &#8220;/Developer/Platforms/iPhoneOS.platform/Developer/SDKs&#8221; (without quotes) and press ENTER (aka return). This will open the directory where the SDKs are installed. Before installing the latest XCode Developer Tools from Apple, backup everything in this directory.</p>
<p>Step 2: If you want to install additional SDKs (one&#8217;s that you don&#8217;t have).</p>
<p>Visit this webpage to find links to the old Developer Tools.</p>
<p>NOTE: We&#8217;re not going to be installing these developer tools, but rather we&#8217;ll rip-open the images and pluck out only the SDK information (not XCode and associated developer tools such as gcc and friends).</p>
<p><a href="http://iphonesdkdev.blogspot.com/2010/04/old-versions-of-iphone-sdk.html">http://iphonesdkdev.blogspot.com/2010/04/old-versions-of-iphone-sdk.html</a></p>
<p>Once you&#8217;ve downloaded the SDK, it should automatically mount on your desktop (if you&#8217;re using Safari anyway) as a disk image named &#8220;Xcode and iPhone SDK&#8221;. Within this disk image is a hidden directory named &#8220;Packages&#8221;. Since it is hidden, the simplest way to access this directory is to once-again use the Go-&gt;Go To Folder&#8230; menubar item (or press Apple+Shift+G), entering &#8220;/Volumes/Xcode and iPhone SDK/Packages&#8221; (without quotes) and pressing ENTER. This will allow you to browse the hidden &#8220;Packages&#8221; directory on the read-only disk image containing the Developer Tools. Within this directory are files named similar to:</p>
<p>iPhoneSDK3_0.pkg<br />
iPhoneSDK3_1_2.pkg<br />
iPhoneSDK3_1_3.pkg<br />
iPhoneSDK3_1.pkg<br />
iPhoneSDK3_2.pkg<br />
iPhoneSDK4_0.pkg</p>
<p>&#8230;ad nauseum. Go ahead and double-click any of these &#8220;*.pkg&#8221; files to launch the SDK installer (which will install ONLY to the directory &#8220;/Developer/Platforms/iPhoneOS.platform/Developer/SDKs&#8221;.</p>
<p>As you launch the Installer, be aware that we&#8217;ll have to make some adjustments to allow the installation to occur. When prompted to select the target installation disk (immediately after clicking &#8220;Continue&#8221; on the initial dialog) click the hard disk that you want to install to (even if it&#8217;s already highlighted) to cause a &#8220;Choose Folder&#8230;&#8221; button to appear. Click the &#8220;Choose Folder&#8230;&#8221; button and pick somewhere that is writable as you (if you attempt to install to the default location, the installation will fail &#8212; because the installer did not pre-authenticate with root privileges as is done in the main-installer opposed to these sub-installers). I chose to make a new directory on my Desktop. After the installation is complete, you should have a &#8220;Developer/Platforms/iPhoneOS.platform/Developer/SDKs/{version}&#8221; directory in the target installation directory that you chose. This &#8220;{version}&#8221; directory will need to be plucked from where you installed it and dropped into the &#8220;/Developer/Platforms/iPhoneOS.platform/SDKs/&#8221; directory.</p>
<p>Once you&#8217;ve installed a new SDK, you&#8217;ll need to restart XCode.</p>
<p>Immediately after installing the device SDK required by any Apple Sample code and restarting XCode, you&#8217;ll then be able to simply select &#8220;Device&#8221; from the arch menu (at the top-left of the project window), and press Apple+R to run the app on your connected device. No more need to go into the project settings to change the default SDK (sometimes needs to be done for each sub-target) to one that exists.<br />
&#8211;<br />
Happy coding,<br />
Devin Teske</p>
]]></content:encoded>
			<wfw:commentRss>http://devinteske.com/xcode-update-woes-with-solution/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Apple XCode 4 loses CVS support &#8212; D&#8217;Oh!</title>
		<link>http://devinteske.com/apple-xcode-4-loses-cvs-support-doh</link>
		<comments>http://devinteske.com/apple-xcode-4-loses-cvs-support-doh#comments</comments>
		<pubDate>Tue, 22 Mar 2011 01:11:20 +0000</pubDate>
		<dc:creator>devinteske</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://devinteske.com/?p=70</guid>
		<description><![CDATA[I felt that this was worth a blog-post. So here we are. XCode (Apple&#8217;s interactive development system for building applications) version 4 has been released to the general public. I am wonderfully pleased with the simplification/unification efforts but XCode4 has &#8230; <a href="http://devinteske.com/apple-xcode-4-loses-cvs-support-doh">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I felt that this was worth a blog-post.</p>
<p>So here we are. XCode (Apple&#8217;s interactive development system for building applications) version 4 has been released to the general public. I am wonderfully pleased with the simplification/unification efforts but XCode4 has me scratching my head why Apple would remove CVS support.</p>
<p>I look around me and all I see is CVS &#8212; sourceforge.net still firmly embraces CVS. Is this a sign that Apple doesn&#8217;t like open-source ventures such as sourceforge.net? Was maintaining CVS support too difficult? Were there some capabilities that were lacking in CVS?</p>
<p>As a person well entrenched in the ways of CVS, I find it ineffable that I might have to migrate sizable iOS projects to some other SCM system such as Subversion (SVN) or Git just to maintain GUI integration within XCode. Mind you, I have no qualms with doing all SCM from the command-line and leaving XCode as a debugger/profiler/analyzer/compiler/editor/builder (though I have to admit, having CVS SCM built-in to XCode 3 was oh-so nice &#8212; in-fact I use to pitch it to co-workers as a &#8220;does everything&#8221; editor that could even be used for unix projects too, optionally replacing a system of Makefiles).</p>
<p>I can only hope and pray that in the coming weeks/months, there is an overwhelming public outcry over the removal of CVS from XCode 4 and that Apple &#8212; hopefully being the kind-hearted and in-touch kind of people I could only imagine them to be &#8212; might resurrect this industry-standard (truly a fallen comrade). Until then, back to the command-line.<br />
&#8211;<br />
admin -ko,<br />
Devin</p>
<p>P.S. If Apple decides to subsequently remove the command-line utility from the Developer Tools installation, I&#8217;ll be turning to MacPorts, Fink, or compile it from source (yeah, I&#8217;m that determined to use CVS).</p>
<p>P.P.S. With tools like gource [ <a href="http://code.google.com/p/gource/">http://code.google.com/p/gource/</a> ], nobody in their right mind would switch from their current SCM to any other unless their 15+ year commit history was guaranteed to be preserved in the conversion process.</p>
]]></content:encoded>
			<wfw:commentRss>http://devinteske.com/apple-xcode-4-loses-cvs-support-doh/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>D-String, an answer to P-String and C-String limitations</title>
		<link>http://devinteske.com/d-string-an-answer-to-p-string-and-c-string-limitations</link>
		<comments>http://devinteske.com/d-string-an-answer-to-p-string-and-c-string-limitations#comments</comments>
		<pubDate>Mon, 21 Feb 2011 14:05:42 +0000</pubDate>
		<dc:creator>devinteske</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://devinteske.com/?p=65</guid>
		<description><![CDATA[C-String&#8217;s are delimited by a NULL byte. P-Strings are preceded by a length identifier. Both have their downsides and I&#8217;ve developed the solution (it&#8217;s called the D-String; D for Data). The C-String&#8217;s downfall is that it cannot contain a NULL &#8230; <a href="http://devinteske.com/d-string-an-answer-to-p-string-and-c-string-limitations">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>C-String&#8217;s are delimited by a NULL byte. P-Strings are preceded by a length identifier. Both have their downsides and I&#8217;ve developed the solution (it&#8217;s called the D-String; D for Data). The C-String&#8217;s downfall is that it cannot contain a NULL (else the interpreting language &#8212; C &#8212; will prematurely terminate the data). The P-String&#8217;s downfall is that it cannot represent more than 255 bytes (unless of course you use a wider length identifier in which case you&#8217;ve also increased the overhead). The D-String overcomes both of these limitations with minimal overhead. Let&#8217;s have a look at the specifics (free of charge).</p>
<p>NOTE: These are my own internal notes. They will be translated into a full technical explanation in another blog posting. However&#8230; the fact is that I&#8217;ve sat on this technology for 10 years and want to finally make it public. This is the first step in doing so. Last, this will serve as a backup should my iPhone crash (currently the only machine in the world with a documented example of the methodology). This is not meant to be digested by mere mortals (but if you can, all the more power to you &#8212; you&#8217;ll have a leg-up on the rest of those waiting on the technical discussion).</p>
<p>shxd.rfc04 &#8212; dStr data object</p>
<p>Len<br />
0&#215;00 => 0&#215;00<br />
0&#215;01 => 0&#215;01 0&#215;00 0&#215;00 DATA<br />
0xFF => 0xFF 0&#215;00 0&#215;00 DATA<br />
0&#215;0100 => 0&#215;0101 0&#215;00 0&#215;01 DATA<br />
0&#215;0101 => 0&#215;0101 0&#215;00 0&#215;00 DATA<br />
0xFFFF => 0xFFFF 0&#215;00 0&#215;00 DATA<br />
0&#215;010000 => 0&#215;010101 0&#215;00 0&#215;03 DATA<br />
0&#215;010100 => 0&#215;010101 0&#215;00 0&#215;02 DATA<br />
0&#215;010100 => 0&#215;010101 0&#215;00 0&#215;01 DATA<br />
0xFFFFFF => 0xFFFFFF 0&#215;00 0&#215;00 DATA<br />
0&#215;01000000 => 0&#215;01010101 0&#215;00 0&#215;07 DATA<br />
0&#215;01000001 => 0&#215;01010101 0&#215;00 0&#215;06 DATA<br />
0&#215;01000100 => 0&#215;01010101 0&#215;00 0&#215;05 DATA<br />
0&#215;01000101 => 0&#215;01010101 0&#215;00 0&#215;04 DATA<br />
0&#215;01010000 => 0&#215;01010101 0&#215;00 0&#215;03 DATA<br />
0&#215;01010001 => 0&#215;01010101 0&#215;00 0&#215;02 DATA<br />
0&#215;01010100 => 0&#215;01010101 0&#215;00 0&#215;01 DATA<br />
0xFFFFFFFF => 0xFFFFFFFF 0&#215;00 0&#215;00 DATA<br />
0&#215;0100000000 => 0&#215;0101010101 0&#215;00 0x0F DATA<br />
0&#215;0100000001 => 0&#215;0101010101 0&#215;00 0x0E DATA<br />
0&#215;0100000100 => 0&#215;0101010101 0&#215;00 0x0D DATA<br />
0&#215;0100000101 => 0&#215;0101010101 0&#215;00 0x0C DATA<br />
0&#215;0100010000 => 0&#215;0101010101 0&#215;00 0x0B DATA<br />
0&#215;0100010001 => 0&#215;0101010101 0&#215;00 0x0A DATA<br />
0&#215;0100010100 => 0&#215;0101010101 0&#215;00 0&#215;09 DATA<br />
0&#215;0100010101 => 0&#215;0101010101 0&#215;00 0&#215;08 DATA<br />
0&#215;0101000000 => 0&#215;0101010101 0&#215;00 0&#215;07 DATA<br />
0&#215;0101000001 => 0&#215;0101010101 0&#215;00 0&#215;06 DATA<br />
0&#215;0101000100 => 0&#215;0101010101 0&#215;00 0&#215;05 DATA<br />
0&#215;0101000101 => 0&#215;0101010101 0&#215;00 0&#215;04 DATA<br />
0&#215;0101010000 => 0&#215;0101010101 0&#215;00 0&#215;03 DATA<br />
0&#215;0101010001 => 0&#215;0101010101 0&#215;00 0&#215;02 DATA<br />
0&#215;0101010100 => 0&#215;0101010101 0&#215;00 0&#215;01 DATA<br />
0xFFFFFFFFFF => 0xFFFFFFFFFF 0&#215;00 0&#215;00 DATA<br />
0&#215;010000000000 => 0&#215;010101010101 0&#215;00 0x1F DATA<br />
0&#215;010000000001 => 0&#215;010101010101 0&#215;00 0x1E DATA<br />
0&#215;010000000100 => 0&#215;010101010101 0&#215;00 0x1D DATA<br />
0&#215;010000000101 => 0&#215;010101010101 0&#215;00 0x1C DATA<br />
0&#215;010000010000 => 0&#215;010101010101 0&#215;00 0x1B DATA<br />
0&#215;010000010001 => 0&#215;010101010101 0&#215;00 0x1A DATA<br />
0&#215;010000010100 => 0&#215;010101010101 0&#215;00 0&#215;19 DATA<br />
0&#215;010000010101 => 0&#215;010101010101 0&#215;00 0&#215;18 DATA<br />
0&#215;010001000000 => 0&#215;010101010101 0&#215;00 0&#215;17 DATA<br />
0&#215;010001000001 => 0&#215;010101010101 0&#215;00 0&#215;16 DATA<br />
0&#215;010001000100 => 0&#215;010101010101 0&#215;00 0&#215;15 DATA<br />
0&#215;010001000101 => 0&#215;010101010101 0&#215;00 0&#215;14 DATA<br />
0&#215;010001010000 => 0&#215;010101010101 0&#215;00 0&#215;13 DATA<br />
0&#215;010001010001 => 0&#215;010101010101 0&#215;00 0&#215;12 DATA<br />
0&#215;010001010100 => 0&#215;010101010101 0&#215;00 0&#215;11 DATA<br />
0&#215;010001010101 => 0&#215;010101010101 0&#215;00 0&#215;10 DATA<br />
0&#215;010100000000 => 0&#215;010101010101 0&#215;00 0x0F DATA<br />
0&#215;010100000001 => 0&#215;010101010101 0&#215;00 0x0E DATA<br />
0&#215;010100000100 => 0&#215;010101010101 0&#215;00 0x0D DATA<br />
0&#215;010100000101 => 0&#215;010101010101 0&#215;00 0x0C DATA<br />
0&#215;010100010000 => 0&#215;010101010101 0&#215;00 0x0B DATA<br />
0&#215;010100010001 => 0&#215;010101010101 0&#215;00 0x0A DATA<br />
0&#215;010100010100 => 0&#215;010101010101 0&#215;00 0&#215;09 DATA<br />
0&#215;010100010101 => 0&#215;010101010101 0&#215;00 0&#215;08 DATA<br />
0&#215;010101000000 => 0&#215;010101010101 0&#215;00 0&#215;07 DATA<br />
0&#215;010101000001 => 0&#215;010101010101 0&#215;00 0&#215;06 DATA<br />
0&#215;010101000100 => 0&#215;010101010101 0&#215;00 0&#215;05 DATA<br />
0&#215;010101000101 => 0&#215;010101010101 0&#215;00 0&#215;04 DATA<br />
0&#215;010101010000 => 0&#215;010101010101 0&#215;00 0&#215;03 DATA<br />
0&#215;010101010001 => 0&#215;010101010101 0&#215;00 0&#215;02 DATA<br />
0&#215;010101010100 => 0&#215;010101010101 0&#215;00 0&#215;01 DATA<br />
0xFFFFFFFFFFFF => 0xFFFFFFFFFFFF 0&#215;00 0&#215;00 DATA<br />
.<br />
.<br />
.<br />
0&#215;0100000000000000 => 0&#215;0101010101010101 0&#215;00 0x7F DATA<br />
0xFFFFFFFFFFFFFFFF => 0xFFFFFFFFFFFFFFFF 0&#215;00 0&#215;00 DATA<br />
.<br />
.<br />
.<br />
0&#215;01000000000000000000000000000000 => 0&#215;01010101010101010101010101010101 0&#215;00 0x7FFFF DATA<br />
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF => 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0&#215;00 0&#215;0000 DATA</p>
<p>That&#8217;s a length identifier of 2^(8*16) or 2^128 or 3.4028236692094e+38 or 340,282 thousand Decillion bytes long. The length identifier is valid with only 3 bytes of overhead preceding the actual DATA (compared to 16 bytes for the length identifier).</p>
<p>Scaling this higher (to 512 bit integers &#8212; 64-bytes wide), the overhead would be 9 bytes.</p>
<p>The overhead is always the length of the length-identifier (in bytes) divided by 8 plus one (with the minimum overhead being two bytes at the low end).</p>
<p>If a dStr contains 0 bytes of data, the dStr will be 0&#215;00.</p>
<p>If a dStr contains 1-15 bytes of data, the dStr will be 0xLL 0&#215;00 0xNN DATA (header is 3 bytes). LL is the length of DATA. NN is the encode register.</p>
<p>If a dStr contains 65536-16777215 bytes of data, the dStr will be 0xLLLLLL 0&#215;00 0xNN DATA (header is 5 bytes).</p>
<p>If a dStr contains 16777216-4294967295 bytes of data, the dStr will be 0xLLLLLLLL 0&#215;00 0xNN DATA (header of 6 bytes).</p>
<p>If a dStr contains 4294967296-1099511627775 bytes of data, the dStr will be 0xLLLLLLLLLL 0&#215;00 0xNN DATA (header of 7 bytes).</p>
<p>If a dStr contains 1099511627776-281474976710655 bytes of data, the dStr will be 0xLLLLLLLLLLLL 0&#215;00 0xNN DATA (header of 8 bytes).</p>
<p>If a dStr contains 281474976710655-7.2057594037928e+16 bytes of data, the dStr will be 0xLLLLLLLLLLLLLL 0&#215;00 0xNN DATA (header of 9 bytes).</p>
<p>If a dStr contains 7.2057594037928e+16-1.844674407371e+19 bytes of data, the dStr will be 0xLLLLLLLLLLLLLLLL 0&#215;00 0xNN DATA (header of 10 bytes).</p>
<p>If a dStr contains 1.844674407371e+19-4.7223664828696e+21 bytes of data, the dStr will be 0xLLLLLLLLLLLLLLLLLL 0&#215;00 0xNNNN DATA (header of 12 bytes).</p>
<p>If the dStr contains 4.7223664828696e+21-1.2089258196146e+24 bytes of data, the dStr will be 0xLLLLLLLLLLLLLLLLLLLL 0&#215;00 0xNNNN DATA (header of 13 bytes).</p>
<p>Ad nausea to infinitum.</p>
]]></content:encoded>
			<wfw:commentRss>http://devinteske.com/d-string-an-answer-to-p-string-and-c-string-limitations/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Theme Check</title>
		<link>http://devinteske.com/theme-check</link>
		<comments>http://devinteske.com/theme-check#comments</comments>
		<pubDate>Wed, 15 Sep 2010 19:38:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://devinteske.yvod.com/?p=61</guid>
		<description><![CDATA[Worth A Thousand Words Written by Theme Admin on October 17th, 2008 Boat Boat. &#160; Posted in Uncategorized &#124; Comments Off Tags: boat, lake Elements Written by Theme Admin on September 5th, 2008 The purpose of this HTML is to &#8230; <a href="http://devinteske.com/theme-check">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="content">
<p>		<!--This is "The Loop"--></p>
<div class="post-19 post type-post hentry category-uncategorized tag-boat tag-lake" id="post-19">
<h2><a href="http://wp-themes.com/?p=19" rel="bookmark" title="Permanent Link to Worth A Thousand Words">Worth A Thousand Words</a></h2>
<p>				<small class="attr">Written by Theme Admin on October 17th, 2008</small></p>
<div class="entry">
<div class="wp-caption alignnone" style="width: 445px"><img alt="Boat" src="http://wpdotorg.files.wordpress.com/2008/11/boat.jpg" title="Boat" width="435" height="288" />
<p class="wp-caption-text">Boat</p>
</div>
<p>Boat.</p>
<div class="clearfloat">&nbsp;</div>
</p></div>
<p><!--close entry class--></p>
<p class="postmetadata">Posted in <a href="http://wp-themes.com/?cat=1" title="View all posts in Uncategorized" rel="category">Uncategorized</a> |   <span>Comments Off</span> <br />Tags: <a href="http://wp-themes.com/?tag=boat" rel="tag">boat</a>, <a href="http://wp-themes.com/?tag=lake" rel="tag">lake</a></p>
</p></div>
<p><!--close post class and post# id--></p>
<div class="post-36 post type-post hentry category-uncategorized" id="post-36">
<h2><a href="http://wp-themes.com/?p=36" rel="bookmark" title="Permanent Link to Elements">Elements</a></h2>
<p>				<small class="attr">Written by Theme Admin on September 5th, 2008</small></p>
<div class="entry">
<p><!-- Sample Content to Plugin to Template --></p>
<p>The purpose of this HTML is to help determine what default settings are with CSS and to make sure that all possible HTML Elements are included in this HTML so as to not miss any possible Elements when designing a site.</p>
<hr />
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<h3>Heading 3</h3>
<h4>Heading 4</h4>
<h5>Heading 5</h5>
<h6>Heading 6</h6>
<p><small><a href="#wrapper">[top]</a></small></p>
<hr />
<h2 id="paragraph">Paragraph</h2>
<p>Lorem ipsum dolor sit amet, <a href="#" title="test link">test link</a> adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. Donec faucibus. Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus.</p>
<p>Lorem ipsum dolor sit amet, <em>emphasis</em> consectetuer adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. Donec faucibus. Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus.</p>
<p><small><a href="#wrapper">[top]</a></small></p>
<hr />
<h2 id="list_types">List Types</h2>
<h3>Definition List</h3>
<dl>
<dt>Definition List Title</dt>
<dd>This is a definition list division.</dd>
</dl>
<h3>Ordered List</h3>
<ol>
<li>List Item 1</li>
<li>List Item 2</li>
<li>List Item 3</li>
</ol>
<h3>Unordered List</h3>
<ul>
<li>List Item 1</li>
<li>List Item 2</li>
<li>List Item 3</li>
</ul>
<p><small><a href="#wrapper">[top]</a></small></p>
<hr />
<h2 id="form_elements">Forms</h2>
<fieldset>
<legend>Legend</legend>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. Donec faucibus. Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus.</p>
<form>
<h2>Form Element</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. Donec faucibus. Nunc iaculis suscipit dui.</p>
<p><label for="text_field">Text Field:</label></p>
<input type="text" id="text_field" />
<p><label for="text_area">Text Area:</label><br />
		<textarea id="text_area"></textarea></p>
<p><label for="select_element">Select Element:</label></p>
<select name="select_element">
			<optgroup label="Option Group 1"></p>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
<p>			</optgroup></p>
<p>			<optgroup label="Option Group 2"></p>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
<p>			</optgroup><br />
		</select>
</p>
<p><label for="radio_buttons">Radio Buttons:</label></p>
<input type="radio" class="radio" name="radio_button" value="radio_1" /> Radio 1<br/></p>
<input type="radio" class="radio" name="radio_button" value="radio_2" /> Radio 2<br/></p>
<input type="radio" class="radio" name="radio_button" value="radio_3" /> Radio 3<br/>
		</p>
<p><label for="checkboxes">Checkboxes:</label></p>
<input type="checkbox" class="checkbox" name="checkboxes" value="check_1" /> Radio 1<br/></p>
<input type="checkbox" class="checkbox" name="checkboxes" value="check_2" /> Radio 2<br/></p>
<input type="checkbox" class="checkbox" name="checkboxes" value="check_3" /> Radio 3<br/>
		</p>
<p><label for="password">Password:</label></p>
<input type="password" class="password" name="password" />
<p><label for="file">File Input:</label></p>
<input type="file" class="file" name="file" />
<input class="button" type="reset" value="Clear" />
<input class="button" type="submit" value="Submit" />
</form>
</fieldset>
<p><small><a href="#wrapper">[top]</a></small></p>
<hr />
<h2 id="tables">Tables</h2>
<table cellspacing="0" cellpadding="0">
<tr>
<th>Table Header 1</th>
<th>Table Header 2</th>
<th>Table Header 3</th>
</tr>
<tr>
<td>Division 1</td>
<td>Division 2</td>
<td>Division 3</td>
</tr>
<tr class="even">
<td>Division 1</td>
<td>Division 2</td>
<td>Division 3</td>
</tr>
<tr>
<td>Division 1</td>
<td>Division 2</td>
<td>Division 3</td>
</tr>
</table>
<p><small><a href="#wrapper">[top]</a></small></p>
<hr />
<h2 id="misc">Misc Stuff &#8211; abbr, acronym, pre, code, sub, sup, etc.</h2>
<p>Lorem <sup>superscript</sup> dolor <sub>subscript</sub> amet, consectetuer adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. <cite>cite</cite>. Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. <acronym title="National Basketball Association">NBA</acronym> Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus.  <abbr title="Avenue">AVE</abbr></p>
<pre>

Lorem ipsum dolor sit amet,
 consectetuer adipiscing elit.
 Nullam dignissim convallis est.
 Quisque aliquam. Donec faucibus.
Nunc iaculis suscipit dui.
Nam sit amet sem.
Aliquam libero nisi, imperdiet at,
 tincidunt nec, gravida vehicula,
 nisl.
Praesent mattis, massa quis
luctus fermentum, turpis mi
volutpat justo, eu volutpat
enim diam eget metus.
Maecenas ornare tortor.
Donec sed tellus eget sapien
 fringilla nonummy.
<acronym title="National Basketball Association">NBA</acronym>
Mauris a ante. Suspendisse
 quam sem, consequat at,
commodo vitae, feugiat in,
nunc. Morbi imperdiet augue
 quis tellus.
<abbr title="Avenue">AVE</abbr>
</pre>
<blockquote><p>
	&#8220;This stylesheet is going to help a lot.&#8221; <br />-Blockquote
</p>
</blockquote>
<p><small><a href="#wrapper">[top]</a></small><br />
<!-- End of Sample Content --></p>
<div class="clearfloat">&nbsp;</div>
</p></div>
<p><!--close entry class--></p>
<p class="postmetadata">Posted in <a href="http://wp-themes.com/?cat=1" title="View all posts in Uncategorized" rel="category">Uncategorized</a> |   <span>Comments Off</span> </p>
</p></div>
<p><!--close post class and post# id--></p>
<div class="post-14 post type-post hentry category-uncategorized tag-wordpress" id="post-14">
<h2><a href="http://wp-themes.com/?p=14" rel="bookmark" title="Permanent Link to More Tags">More Tags</a></h2>
<p>				<small class="attr">Written by Theme Admin on June 21st, 2008</small></p>
<div class="entry">
<p>More of these posts need tags.</p>
<div class="clearfloat">&nbsp;</div>
</p></div>
<p><!--close entry class--></p>
<p class="postmetadata">Posted in <a href="http://wp-themes.com/?cat=1" title="View all posts in Uncategorized" rel="category">Uncategorized</a> |   <a href="http://wp-themes.com/?p=14#respond" title="Comment on More Tags">No Responses &#187;</a> <br />Tags: <a href="http://wp-themes.com/?tag=wordpress" rel="tag">wordpress</a></p>
</p></div>
<p><!--close post class and post# id--></p>
<div class="post-8 post type-post hentry category-uncategorized tag-html tag-wordpress" id="post-8">
<h2><a href="http://wp-themes.com/?p=8" rel="bookmark" title="Permanent Link to HTML">HTML</a></h2>
<p>				<small class="attr">Written by Theme Admin on June 21st, 2008</small></p>
<div class="entry">
<p>What HTML tags would you like to see?</p>
<p>Let&#8217;s start with an unordered list:</p>
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
</ul>
<p>And then move on to a more interesting ordered list:</p>
<ol>
<li>one, two
<ol>
<li>buckle my shoe</li>
</ol>
</li>
<li>three, four
<ol>
<li>knock at the door</li>
</ol>
</li>
<li>Five, six
<ol>
<li>pick up sticks</li>
</ol>
</li>
<li>Seven, eight, lay them straight
<ol>
<li>Nine, ten, a big fat hen</li>
<li>Eleven, twelve, dig and delve</li>
<li>Thirteen, fourteen, maids a&#8217;courting</li>
<li>Fifteen, sixteen, maids in the kitchen</li>
<li>Seventeen, eighteen, maids a&#8217;waiting</li>
<li>Nineteen, twenty, my platter&#8217;s empty &#8230;</li>
</ol>
</li>
</ol>
<div class="clearfloat">&nbsp;</div>
</p></div>
<p><!--close entry class--></p>
<p class="postmetadata">Posted in <a href="http://wp-themes.com/?cat=1" title="View all posts in Uncategorized" rel="category">Uncategorized</a> |   <a href="http://wp-themes.com/?p=8#comments" title="Comment on HTML">1 Response &#187;</a> <br />Tags: <a href="http://wp-themes.com/?tag=html" rel="tag">html</a>, <a href="http://wp-themes.com/?tag=wordpress" rel="tag">wordpress</a></p>
</p></div>
<p><!--close post class and post# id--></p>
<div class="post-6 post type-post hentry category-uncategorized" id="post-6">
<h2><a href="http://wp-themes.com/?p=6" rel="bookmark" title="Permanent Link to Links">Links</a></h2>
<p>				<small class="attr">Written by Theme Admin on June 20th, 2008</small></p>
<div class="entry">
<p>A few well known WordPress links: <a href="http://wordpress.org/">WordPress.org</a>, <a href="http://codex.wordpress.org/Main_Page">the Codex</a> and <a href="http://wordpress.org/download/">the download page</a>.</p>
<div class="clearfloat">&nbsp;</div>
</p></div>
<p><!--close entry class--></p>
<p class="postmetadata">Posted in <a href="http://wp-themes.com/?cat=1" title="View all posts in Uncategorized" rel="category">Uncategorized</a> |   <span>Comments Off</span> </p>
</p></div>
<p><!--close post class and post# id--></p>
<div class="post-4 post type-post hentry category-first-child-category category-one-grandchild-category category-parent category-second-child-category" id="post-4">
<h2><a href="http://wp-themes.com/?p=4" rel="bookmark" title="Permanent Link to Category Hierarchy">Category Hierarchy</a></h2>
<p>				<small class="attr">Written by Theme Admin on June 20th, 2008</small></p>
<div class="entry">
<p>This post has 4 categories, part of a hierarchy that is 3 deep.</p>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce euismod commodo ante. Suspendisse potenti. Nunc pellentesque quam vel pede. Ut a lorem non urna molestie euismod. Fusce consequat tortor eu urna. Pellentesque aliquam, pede eget tincidunt feugiat, nunc massa hendrerit magna, non ultricies neque lectus nec dui. In hac habitasse platea dictumst. Sed feugiat quam eget lectus. Fusce at pede. Morbi sagittis tristique tortor. Sed erat justo, blandit ac, dignissim in, pretium ut, urna.</p>
<div class="clearfloat">&nbsp;</div>
</p></div>
<p><!--close entry class--></p>
<p class="postmetadata">Posted in <a href="http://wp-themes.com/?cat=6" title="View all posts in First Child Category" rel="category">First Child Category</a>, <a href="http://wp-themes.com/?cat=8" title="View all posts in One Grandchild Category" rel="category">One Grandchild Category</a>, <a href="http://wp-themes.com/?cat=5" title="View all posts in Parent" rel="category">Parent</a>, <a href="http://wp-themes.com/?cat=7" title="View all posts in Second Child Category" rel="category">Second Child Category</a> |   <span>Comments Off</span> </p>
</p></div>
<p><!--close post class and post# id--></p>
<div class="post-1 post type-post hentry category-uncategorized" id="post-1">
<h2><a href="http://wp-themes.com/?p=1" rel="bookmark" title="Permanent Link to Hello world!">Hello world!</a></h2>
<p>				<small class="attr">Written by Theme Admin on June 4th, 2008</small></p>
<div class="entry">
<p>Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!</p>
<div class="clearfloat">&nbsp;</div>
</p></div>
<p><!--close entry class--></p>
<p class="postmetadata">Posted in <a href="http://wp-themes.com/?cat=1" title="View all posts in Uncategorized" rel="category">Uncategorized</a> |   <a href="http://wp-themes.com/?p=1#comments" title="Comment on Hello world!">2 Responses &#187;</a> </p>
</p></div>
<p><!--close post class and post# id--></p>
<div class="navigation">
<div class="txtalignleft"></div>
<div class="txtalignright"></div>
</p></div>
</div>
<p><!--close content id--></p>
]]></content:encoded>
			<wfw:commentRss>http://devinteske.com/theme-check/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello</title>
		<link>http://devinteske.com/hello</link>
		<comments>http://devinteske.com/hello#comments</comments>
		<pubDate>Fri, 28 May 2010 21:33:21 +0000</pubDate>
		<dc:creator>devinteske</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://devinteske.yvod.com/wp/?p=1</guid>
		<description><![CDATA[Hello, This is my first post =)]]></description>
			<content:encoded><![CDATA[<p>Hello,</p>
<p>This is my first post =)</p>
[contact-form]
]]></content:encoded>
			<wfw:commentRss>http://devinteske.com/hello/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sunshine</title>
		<link>http://devinteske.com/sunshine</link>
		<comments>http://devinteske.com/sunshine#comments</comments>
		<pubDate>Fri, 28 May 2010 21:07:45 +0000</pubDate>
		<dc:creator>devinteske</dc:creator>
				<category><![CDATA[Podcasts]]></category>

		<guid isPermaLink="false">http://devinteske.yvod.com/wp/?p=6</guid>
		<description><![CDATA[A fantastic movie.]]></description>
			<content:encoded><![CDATA[<p>A fantastic movie.</p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://devinteske.com/sunshine/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
