<?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>Anthony DeBarros &#187; Programming</title> <atom:link href="http://www.anthonydebarros.com/category/programming/feed/" rel="self" type="application/rss+xml" /><link>http://www.anthonydebarros.com</link> <description>DATA. JOURNALISM. LIFE.</description> <lastBuildDate>Tue, 17 Jan 2012 14:16:00 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>&#8216;Goshen&#8217; WordPress Theme on Github</title><link>http://www.anthonydebarros.com/2011/11/18/wordpress-theme-download/</link> <comments>http://www.anthonydebarros.com/2011/11/18/wordpress-theme-download/#comments</comments> <pubDate>Sat, 19 Nov 2011 03:08:41 +0000</pubDate> <dc:creator>Anthony</dc:creator> <category><![CDATA[WordPress]]></category><guid isPermaLink="false">http://www.anthonydebarros.com/?p=1600</guid> <description><![CDATA[At the start of 2011, I simplified the first WordPress theme I&#8217;d built for this site and turned it into something far more minimalistic. I went from two sidebars to one, lost the bulky header and turned from color to black and white. Part of this was a desire for simplicity; part was my reaction [...]]]></description> <content:encoded><![CDATA[<p>At the start of 2011, I simplified the first WordPress theme I&#8217;d built for this site and turned it into something far more minimalistic. I went from two sidebars to one, lost the bulky header and turned from color to black and white. Part of this was a desire for simplicity; part was my reaction to my lack of design sense. Color is not my strong suit, and I shouldn&#8217;t be caught trying to pretend.</p><p>Since then, I&#8217;ve made a few tweaks, but one thing I hadn&#8217;t done all year was post the theme &#8212; which I call Goshen &#8212; for anyone to use. Today I fixed that and pushed the files up to <a href="https://github.com/AnthonyDB/goshen-wordpress-theme/downloads" target="_blank">their own repository</a> on Github. You can download the files and hack away. (In your WordPress install, under /wp-content/themes/, create a folder called Goshen and unzip the files there; then you can activate the theme via the dashboard.)</p><p>I&#8217;ll continue to tweak when I have time. I can&#8217;t say enough about how much WordPress theme hacking has taught me about HTML, CSS, templates and web design. If you want to start from scratch, I recommend <a href="http://www.wpdesigner.com/2007/02/19/so-you-want-to-create-wordpress-themes-huh/" target="_blank">this excellent tutorial</a>. You&#8217;ll discover that WordPress themes have only a few moving parts. Mastering them will let you make your site exactly what you want it to be.</p><p>&nbsp;</p> ]]></content:encoded> <wfw:commentRss>http://www.anthonydebarros.com/2011/11/18/wordpress-theme-download/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Scraping CDC flu data with Python</title><link>http://www.anthonydebarros.com/2011/10/21/scraping-cdc-flu-data-with-python/</link> <comments>http://www.anthonydebarros.com/2011/10/21/scraping-cdc-flu-data-with-python/#comments</comments> <pubDate>Fri, 21 Oct 2011 21:23:41 +0000</pubDate> <dc:creator>Anthony</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[Python]]></category><guid isPermaLink="false">http://www.anthonydebarros.com/?p=1587</guid> <description><![CDATA[Getting my flu shot this week reminded me about weekly surveillance data the Centers for Disease Control and Prevention provides on flu prevalence across the nation. I&#8217;d been planning to do some Python training for my team at work, so it seemed like a natural to write a quick Python scraper that grabs the main [...]]]></description> <content:encoded><![CDATA[<p>Getting my flu shot this week reminded me about <a href="http://www.cdc.gov/flu/weekly/" target="_blank">weekly surveillance data</a> the Centers for Disease Control and Prevention provides on flu prevalence across the nation. I&#8217;d been planning to do some Python training for my team at work, so it seemed like a natural to write a quick Python scraper that grabs the main table on the site and turns it into a delimited text file.</p><p>So I did, and I&#8217;m sharing. You can grab the code for the<a href="https://github.com/AnthonyDB/CDC-flu-scraper" target="_blank"> CDC-flu-scraper</a> on Github.</p><p>The code uses the <a href="http://wwwsearch.sourceforge.net/mechanize/" target="_blank">Mechanize</a> and <a href="http://www.crummy.com/software/BeautifulSoup/" target="_blank">BeautifulSoup</a> modules for web browsing and html parsing, respectively. Much of what I demonstrate here I started learning via Ben Welsh&#8217;s <a href="http://palewire.com/posts/2008/04/20/python-recipe-grab-a-page-scrape-a-table-download-a-file/" target="_blank">fine tutorial</a> on web scraping.</p><p>We&#8217;re still early in flu season, but if you watch this data each week you&#8217;ll see the activity pick up quickly.</p><p><strong>Update 10/22/2011:</strong> Ben Welsh has lent some contributions to this scraper, adding JSON output and turning it into a function. Benefits of social coding 101 &#8230;</p> ]]></content:encoded> <wfw:commentRss>http://www.anthonydebarros.com/2011/10/21/scraping-cdc-flu-data-with-python/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Setting up Python in Windows 7</title><link>http://www.anthonydebarros.com/2011/10/15/setting-up-python-in-windows-7/</link> <comments>http://www.anthonydebarros.com/2011/10/15/setting-up-python-in-windows-7/#comments</comments> <pubDate>Sat, 15 Oct 2011 16:36:40 +0000</pubDate> <dc:creator>Anthony</dc:creator> <category><![CDATA[News technology]]></category> <category><![CDATA[Programming]]></category> <category><![CDATA[Python]]></category><guid isPermaLink="false">http://www.anthonydebarros.com/?p=1551</guid> <description><![CDATA[An all-wise journalist once told me that &#8220;everything is easier in Linux,&#8221; and after working with it for a few years I&#8217;d have to agree &#8212; especially when it comes to software setup for data journalism. But &#8230; Many newsroom types spend the day in Windows without the option of Ubuntu or another Linux OS. [...]]]></description> <content:encoded><![CDATA[<p>An all-wise journalist once told me that &#8220;everything is easier in Linux,&#8221; and after working with it for a few years I&#8217;d have to agree &#8212; especially when it comes to software setup for data journalism. But &#8230;</p><p>Many newsroom types spend the day in Windows without the option of Ubuntu or another Linux OS. I&#8217;ve been planning some training around Python soon, so I compiled this quick setup guide as a reference. I hope you find it helpful.</p><p><strong>Set up Python</strong></p><p>Get started:</p><p>1. Visit the official <a href="http://python.org/download/" target="_blank">Python download page</a> and grab the Windows installer. Choose the 32-bit or 64-bit version, depending on your version of Windows 7 (right-click the Computer icon on your desktop and select Properties to find out which one you have). <strong>Note:</strong> Python currently exists in two versions, the older 2.x series and newer 3.x series (for a discussion of the differences, see <a href="http://wiki.python.org/moin/Python2orPython3" target="_blank">this</a>). This tutorial focuses on the 2.x series.</p><p>2. Run the installer and accept all the default settings, including the &#8220;C:\Python27&#8243; directory it creates.</p><p><span id="more-1551"></span><br /> 3. Next, set the system&#8217;s PATH variable to include directories that include Python components and packages we&#8217;ll add later. To do this:</p><ul><li>Right-click Computer and select Properties.</li><li>In the dialog box, select Advanced  System Settings.</li><li>In the next dialog, select Environment Variables.</li><li>In the User Variables section, edit the PATH statement to include this:</li></ul><p>&nbsp;</p><div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;</pre></div></div><p>4. Now, you can open a command prompt (Start Menu|Accessories or Start Menu|Run|cmd) and type:</p><p>&nbsp;</p><div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">C:\<span style="color: #33cc33;">&gt;</span> python</pre></div></div><p>That will load the Python interpreter:</p><p>&nbsp;</p><div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">Python 2.7.2  <span style="color: #33cc33;">(</span>default, Jun 12 2011, 14:24<span style="color: #33cc33;">)</span> [MSC v.1500 64 bit <span style="color: #33cc33;">(</span>AMD64<span style="color: #33cc33;">)</span>] on win32
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or license <span style="color: #00b100; font-weight: bold;">for</span> more information.
<span style="color: #33cc33;">&gt;&gt;&gt;</span></pre></div></div><p>Because of the settings you included in your PATH variable, you can now run this interpreter &#8212; and, more important, a script &#8212; from any directory on your system.</p><p>Press Control-Z to exit the interpreter and get back to a C: prompt.</p><p><strong>Set up useful Python packages</strong></p><p>1. <a href="http://pypi.python.org/pypi/setuptools" target="_blank">setuptools</a> offers the helpful <a href="http://peak.telecommunity.com/DevCenter/EasyInstall" target="_blank">easy_install</a> utility for installing Python packages. Grab the appropriate version for your system and install.</p><p>2. <a href="http://pypi.python.org/pypi/pip" target="_blank">pip</a> is another package installer that improves on setuptools. Having pip and setuptools will cover most of your installation needs, so go ahead and add pip. Now that you&#8217;ve installed setuptools, you can add pip by typing this at any command prompt:</p><p>&nbsp;</p><div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">easy_install pip</pre></div></div><p>Notice that easy_install executes without needing to be told where on the system it&#8217;s located. That&#8217;s the benefit of adjusting your PATH variable earlier.</p><p>3. <a href="http://wwwsearch.sourceforge.net/mechanize/" target="_blank">Mechanize</a> and <a href="http://www.crummy.com/software/BeautifulSoup/" target="_blank">BeautifulSoup</a> are must-have utilities for web scraping, and we&#8217;ll add those next:</p><p>&nbsp;</p><div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">pip install mechanize
pip install BeautifulSoup==3.2</pre></div></div><p>4. <a href="http://csvkit.readthedocs.org/en/latest/index.html" target="_blank">csvkit</a>, which I recently <a href="www.anthonydebarros.com/2011/09/11/csvkit-data-files/" target="_blank">covered here</a>, is a great tool for dealing with comma-delimited text files. Add it:</p><p>&nbsp;</p><div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">pip install csvkit</pre></div></div><p>You&#8217;re now set to get started using and learning Python under Windows 7. If you&#8217;re looking for a handy guide, start with the <a href="http://docs.python.org/tutorial/" target="_blank">Official Python tutorial</a>.</p> ]]></content:encoded> <wfw:commentRss>http://www.anthonydebarros.com/2011/10/15/setting-up-python-in-windows-7/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>csvkit: A Swiss Army Knife for Comma-Delimited Files</title><link>http://www.anthonydebarros.com/2011/09/11/csvkit-data-files/</link> <comments>http://www.anthonydebarros.com/2011/09/11/csvkit-data-files/#comments</comments> <pubDate>Sun, 11 Sep 2011 20:48:17 +0000</pubDate> <dc:creator>Anthony</dc:creator> <category><![CDATA[News technology]]></category> <category><![CDATA[Programming]]></category> <category><![CDATA[Python]]></category> <category><![CDATA[Tools]]></category><guid isPermaLink="false">http://www.anthonydebarros.com/?p=1500</guid> <description><![CDATA[If you&#8217;ve ever stared into the abyss of a big, uncooperative comma-delimited text file, it won&#8217;t take long to appreciate the value and potential of csvkit. csvkit is a Python-based Swiss Army knife of utilities for dealing with, as its documentation says, &#8220;the king of tabular file formats.&#8221; It lets you examine, fix, slice, transform [...]]]></description> <content:encoded><![CDATA[<p>If you&#8217;ve ever stared into the abyss of a big, uncooperative comma-delimited text file, it won&#8217;t take long to appreciate the value and potential of <a href="http://csvkit.readthedocs.org/en/latest/" target="_blank">csvkit</a>.</p><p>csvkit is a Python-based Swiss Army knife of utilities for dealing with, as its documentation says, &#8220;the king of tabular file formats.&#8221; It lets you examine, fix, slice, transform and otherwise master text-based data files (and not only the comma-delimited variety, as its name implies, but tab-delimited and fixed-width as well). <a href="https://twitter.com/#!/onyxfish" target="_blank">Christopher Groskopf</a>, lead developer on the Knight News Challenge-winning <a href="https://docs.google.com/present/view?id=dft4sbfd_71fgd4fpg3&amp;pli=1" target="_blank">Panda project</a> and recently a member of the <em>Chicago Tribune&#8217;s</em> <a href="http://blog.apps.chicagotribune.com/author/cgroskopf/" target="_blank">news apps team</a>, is the primary coder and architect, but the code&#8217;s <a href="https://github.com/onyxfish/csvkit">hosted on Github</a> and has a growing list of contributors.</p><p>As of version 0.3.0, csvkit comprises 11 utilities. <a href="http://csvkit.readthedocs.org/en/latest/#usage">The documentation</a> describes them well, so rather than rehash it, here are highlights of three of the utilities I found interesting during a recent test drive:<br /> <span id="more-1500"></span><br /> <strong>csvcut:</strong> Henceforth, this utility will likely meet every csv file I get. To start, it will describe the file contents for me: If I want a quick scan of the column names and their order in the file, I just type:<br /> &nbsp;</p><div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">csvcut -n filename</pre></div></div><p>The output is an indexed list of column names, assuming the first row of the file is a header row. If not, you get the first row of data, which can be handy as well.</p><p>Still, the &#8220;cut&#8221; part of this utility is its killer feature, extracting columns from the file in the order you choose. You might use this to subset the file before importing to a database or to quickly reorder columns before embarking on analysis.</p><p>To extract the seventh, first and second columns from the file, in that order, it&#8217;s as simple as:<br /> &nbsp;</p><div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">csvcut -c <span style="color: #ff4500;">7</span>,<span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">2</span> filename</pre></div></div><p>Really nice.</p><p><strong>csvsql:</strong> Send in a csv, and it returns a CREATE TABLE statement for your SQL database. The first time I ran this and saw the result, I did a double-take of pure joy. Then I got slightly depressed thinking about times I wrote code to import 256-column csv files into SQL Server. No more. You just type a statement like this:<br /> &nbsp;</p><div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">csvsql -i postgresql filename</pre></div></div><p>That produces a CREATE TABLE statement with syntax appropriate to PostgreSQL. Plenty of SQL flavors are available too &#8212; the utility uses <a href="http://www.sqlalchemy.org/" target="_blank">SQLAlchemy&#8217;s</a> dialect collection to offer syntax options for SQL Server, MySQL, Oracle and others.</p><p>Another killer feature: You can add an <code>"inserts"</code> argument to have csvsql generate a SQL INSERT statement for each row of the CSV. Having been flummoxed by SQL Server&#8217;s import wizard more than once, I can tell you that inserting data by row is a great alternative, especially if you&#8217;re trying to isolate a problem row.</p><p><strong>csvstat: </strong>Returns basic descriptive statistics for each column in the file. Results include overall row count, the data type for each column, and descriptives including min, max, sum, median, most frequent values, etc. Very handy for a quick read on what you have in the file.</p><p>Those three jumped out at me, but there are more. Other utilities will convert files to csv, output a csv as JSON, or merge, clean and stack files. The fact you can pipe output from one utility to another creates a powerful scenario.</p><p>It&#8217;s great work and an example of the kinds of <a href="http://blog.thescoop.org/archives/2011/08/10/in-defense-of-building-tools/" target="_blank">tools journalists can build</a> to deal with common problems we face. I&#8217;ll be watching this develop with great anticipation.</p> ]]></content:encoded> <wfw:commentRss>http://www.anthonydebarros.com/2011/09/11/csvkit-data-files/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Some Favorite WordPress Plugins</title><link>http://www.anthonydebarros.com/2011/07/24/favorite-wordpress-plugins/</link> <comments>http://www.anthonydebarros.com/2011/07/24/favorite-wordpress-plugins/#comments</comments> <pubDate>Mon, 25 Jul 2011 00:16:17 +0000</pubDate> <dc:creator>Anthony</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[WordPress]]></category><guid isPermaLink="false">http://www.anthonydebarros.com/?p=1439</guid> <description><![CDATA[With the 100-degree heat broiling the East Coast this weekend, I decided to stay inside and make some design and performance tweaks to my site. I added Google +1 buttons to posts and the index page, and I also tweaked some of the settings in my plugins. Speaking of those, here&#8217;s what I&#8217;ve been using [...]]]></description> <content:encoded><![CDATA[<p>With the 100-degree heat broiling the East Coast this weekend, I decided to stay inside and make some design and performance tweaks to my site. I added Google +1 buttons to posts and the index page, and I also tweaked some of the settings in my plugins.</p><p>Speaking of those, here&#8217;s what I&#8217;ve been using to make life easier:</p><p><strong><a href="http://akismet.com/" target="_blank">Akismet</a>:</strong> Gets rid of a ton of comment spam for various Russian &#8220;services&#8221; so I can spend my time doing other things. You&#8217;ll need to sign up for an API key, but otherwise it&#8217;s simple and effective.</p><p><strong><a href="http://contactform7.com/" target="_blank">Contact Form 7:</a></strong> After trying a few contact plugins, I settled on Contact Form 7 and have had great results. It powers my Contacts page, which I prefer to use instead of posting an email address. For spam filtering, I implemented the quiz feature, but the plugin also supports CAPTCHA. I rarely get spam.</p><p><strong><a href="http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/" target="_blank">Google XML Sitemaps:</a></strong> Generates a sitemap.xml file that Google and other search engines use to index the site. Lets me include or exclude content and control how often to update the file.<br /> <span id="more-1439"></span><br /> <strong><a href="http://wordpress.org/extend/plugins/jetpack/" target="_blank">Jetpack:</a></strong> Another plugin I&#8217;ve yet to fully tap. The site stats alone (formerly provided by WP Stats) are a must-have, and I&#8217;m also using the function that shows pop-up profiles if you hover over a Gravatar. But this Swiss Army Knife of a plugin has shortcodes for embedding media, a spelling/style checker and more.</p><p><strong><a href="http://rick.jinlabs.com/code/twitter/" target="_blank">Twitter for WordPress:</a> </strong>Easy way to call and display my tweets in the sidebar.</p><p><strong><a href="http://www.w3-edge.com/wordpress-plugins/w3-total-cache/" target="_blank">W3 Total Cache:</a></strong> This plugin provides options to cache my pages and &#8220;minify&#8221; code so the site can load faster. I&#8217;ve seen a considerable boost in speed since using it, although configuration is tricky. (See <a title="Speed Up Your WordPress Site" href="http://www.anthonydebarros.com/2010/11/05/speed-up-wordpress/" target="_blank">my post on the topic</a> for details.)</p><p><a href="http://www.ruhanirabin.com/wp-optimize/" target="_blank"> <strong>WP-Optimize:</strong></a> Cleans rows I don&#8217;t need from the MySQL database running the site, including post revisions. If you&#8217;re like me and edit yourself a lot, those can add up. Yet another way to keep the motor running tight.</p><p><strong><a href="http://www.bravenewcode.com/store/plugins/wptouch-pro/" target="_blank">WPtouch Pro:</a></strong> Automatically serves mobile-ready versions of this site optimized for small screen. There&#8217;s a free version that&#8217;s just fine; I opted for the $39 version that includes extra iPad support.</p><p>That&#8217;s the collection. Any recommendations? Share them below.</p> ]]></content:encoded> <wfw:commentRss>http://www.anthonydebarros.com/2011/07/24/favorite-wordpress-plugins/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Speed Up Your WordPress Site</title><link>http://www.anthonydebarros.com/2010/11/05/speed-up-wordpress/</link> <comments>http://www.anthonydebarros.com/2010/11/05/speed-up-wordpress/#comments</comments> <pubDate>Fri, 05 Nov 2010 20:39:58 +0000</pubDate> <dc:creator>Anthony</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[WordPress]]></category><guid isPermaLink="false">http://www.anthonydebarros.com/?p=1018</guid> <description><![CDATA[WordPress is a great CMS, but if you&#8217;re hosting your own install you&#8217;ll want to pay attention to keeping its performance nimble. Here are a few tips I picked up this week after reading this post and thinking about how to apply those ideas to my own site: 1. Optimize the database. WordPress handily saves [...]]]></description> <content:encoded><![CDATA[<p>WordPress is a great CMS, but if you&#8217;re hosting your own install you&#8217;ll want to pay attention to keeping its performance nimble. Here are a few tips I picked up this week after reading this <a href="http://blog.apps.chicagotribune.com/2010/11/03/election-night-traffic-survival-tips-from-scarred-apps-developers/">post</a> and thinking about how to apply those ideas to my own site:</p><p><strong>1. Optimize the database.</strong></p><p>WordPress handily saves every revision of every page and post you create. That&#8217;s great for retrieving a lost paragraph, but it can add hundreds of rows to the <code><span style="color: #0000ff;">wp_posts</span></code> table &#8212; especially if, like me, you save revisions often. Eventually, the database grows big enough to affect query performance, which can slow page loads.</p><p>There&#8217;s a remedy: Delete those unnecessary rows and optimize your tables.</p><p>The WordPress plugin directory lists <a href="http://wordpress.org/extend/plugins/search.php?q=database+optimize&amp;sort=" target="_blank">several database optimizers</a>, but they make me nervous. They all claim to optimize but don&#8217;t say exactly what changes they make. Instead, I dug straight into my site&#8217;s MySQL database using my web host&#8217;s phpMyAdmin interface.</p><p>Sanity check: <a href="http://codex.wordpress.org/Backing_Up_Your_Database" target="_blank">Back up your database first</a>.</p><p>Once that&#8217;s done, run this in the SQL pane:</p><blockquote><p><code><span style="color: #0000ff;">DELETE FROM</span> wp_posts <span style="color: #0000ff;">WHERE</span> post_type = "revision";</code></p></blockquote><p>Next, use phpMyAdmin to optimize your tables (Structure Pane &gt; Select All &gt; choose Optimize Table from the drop down).</p><p>This trick shrank my database from 5.5MB to less than 1MB.</p><p><strong>2. Install a caching plugin.</strong></p><p><strong> </strong>If something I write here goes viral, I&#8217;d like to avoid watching my server <a href="http://www.andymboyle.com/2010/11/03/servers-on-fire/" target="_blank">fry</a>. One way to head this off is to set up caching so that every page load isn&#8217;t executing a query on your server.</p><p>Again, there is no shortage of <a href="http://wordpress.org/extend/plugins/search.php?q=cache&amp;sort=" target="_blank">caching plug-ins</a> for WordPress. After checking comments on my web host&#8217;s user forums, I went with <a href="http://wordpress.org/extend/plugins/w3-total-cache/" target="_blank">W3 Total Cache</a>. Not only does it provide caching for pages, feeds and other content, it will <a href="http://en.wikipedia.org/wiki/Minification_(programming)" target="_blank">minify</a> CSS, HTML and JavaScript.</p><p>It loads like any WordPress plugin, but it has many options. <a href="http://www.wpbeginner.com/plugins/how-to-install-and-setup-w3-total-cache-for-beginners/" target="_blank">This tutorial</a> gives great step-by-step directions.</p><p><strong>3. Remove unneeded PHP calls</strong></p><p>Most WordPress themes, including <a href="http://www.anthonydebarros.com/2010/06/19/download-wordpress-theme/" target="_blank">the one I built</a> for my site, include calls designed to fetch info from the MySQL database. The idea is to make the theme easily customizable via the admin and make the theme portable to millions of users.</p><p>But unless you plan to change your site&#8217;s name, tagline or url often, there&#8217;s no reason to have your theme fetch those every time it loads your header.</p><p>For example, in my header.php file, I changed this:</p><blockquote><p><code>&lt;h1&gt;&lt;a href="<span style="color: #0000ff;">&lt;?php bloginfo('url'); ?&gt;</span>"&gt;&lt;?php bloginfo('name'); ?&gt;&lt;/a&gt;&lt;/h1&gt;</code></p></blockquote><p>To this:</p><blockquote><p><code>&lt;h1&gt;&lt;a href="<span style="color: #0000ff;">http://www.anthonydebarros.com</span>"&gt;Anthony DeBarros&lt;/a&gt;&lt;/h1&gt;</code></p></blockquote><p>That&#8217;s two fewer calls each time that page loads. Depending on your theme, you might be able to find many more calls to eliminate.</p><p><strong>More reading:</strong></p><p>There&#8217;s a lot more you can tweak under the hood, and that means plenty of chances to learn more goodness about server configurations. Here are some of the places where I picked up these tricks and where you can find a lot more detail. Happy optimizing!</p><p><a href="http://yoast.com/speed-up-wordpress/">http://yoast.com/speed-up-wordpress/<br /> </a><a href="http://www.ardamis.com/2010/08/03/how-to-speed-up-wordpress/">http://www.ardamis.com/2010/08/03/how-to-speed-up-wordpress/<br /> </a><a href="http://wpgarage.com/tips/38-ways-to-optimize-and-speed-up-your-wordpress-blog/">http://wpgarage.com/tips/38-ways-to-optimize-and-speed-up-your-wordpress-blog/<br /> </a><a href="http://www.gadgetcage.com/5-best-wordpress-plugins-to-improve-the-loading-speed-of-a-blog/8038/">http://www.gadgetcage.com/5-best-wordpress-plugins-to-improve-the-loading-speed-of-a-blog/8038/</a><br /> <a href="http://mashable.com/2010/07/19/speed-up-wordpress/">http://mashable.com/2010/07/19/speed-up-wordpress/</a></p> ]]></content:encoded> <wfw:commentRss>http://www.anthonydebarros.com/2010/11/05/speed-up-wordpress/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>USA TODAY launches public APIs</title><link>http://www.anthonydebarros.com/2010/10/14/usa-today-launches-public-apis/</link> <comments>http://www.anthonydebarros.com/2010/10/14/usa-today-launches-public-apis/#comments</comments> <pubDate>Thu, 14 Oct 2010 14:56:38 +0000</pubDate> <dc:creator>Anthony</dc:creator> <category><![CDATA[Programming]]></category><guid isPermaLink="false">http://www.anthonydebarros.com/?p=998</guid> <description><![CDATA[Here&#8217;s some news I&#8217;ve been itching to share for a few months: the launch of USA TODAY&#8217;s first public data APIs. Announced today, the first two out of the gate offer access to our Best-Selling Books list and our archive of pro sports player salaries. Both data sets represent many years of effort by the [...]]]></description> <content:encoded><![CDATA[<p>Here&#8217;s some news I&#8217;ve been itching to share for a few months: the launch of USA TODAY&#8217;s first <a href="http://developer.usatoday.com/" target="_blank">public data APIs</a>.</p><p>Announced today, the first two out of the gate offer access to our Best-Selling Books list and our archive of pro sports player salaries. Both data sets represent many years of effort by the database team at USA TODAY. To build these APIs, we were fortunate to team up with some great folks in our IT group. It&#8217;s been a great learning experience. We&#8217;re proud of the data and excited about opening it to the public.</p><p>Our new <a href="http://developer.usatoday.com/" target="_blank">developer site</a> has the details. You can register for API keys, read the documentation and post questions in forums. We want your feedback &#8212; it will help us make the APIs better and steer us as we make more of data available in the months ahead. Also be sure to read the <a href="http://developer.usatoday.com/API_Terms_of_Use" target="_blank">terms of use</a>.</p><p>About our first two APIs:</p><p>The <a href="http://developer.usatoday.com/docs/bestselling_books" target="_blank">Best-Selling Books API</a> contains the weekly top 150 books from our <a href="http://books.usatoday.com/list/index" target="_blank">list</a>, including metadata about each title.</p><p>The <a href="http://developer.usatoday.com/docs/salaries" target="_blank">Sports Salaries API</a> contains annual salary information for players in Major League Baseball, the National Football League, National Basketball Association, and National Hockey League.</p><p>For more information, check out our official <a href="http://www.usatoday.com/marketing/media_kit/pressroom/2010/releases/101410_api_network.html" target="_blank">press release</a>. There&#8217;s also a page up at <a href="http://www.programmableweb.com/api/usa-today" target="_blank">programmableweb.com</a>.</p> ]]></content:encoded> <wfw:commentRss>http://www.anthonydebarros.com/2010/10/14/usa-today-launches-public-apis/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>WordPress: Separate Comments, Trackbacks</title><link>http://www.anthonydebarros.com/2010/08/02/wordpress-tip-separating-comments-trackbacks/</link> <comments>http://www.anthonydebarros.com/2010/08/02/wordpress-tip-separating-comments-trackbacks/#comments</comments> <pubDate>Mon, 02 Aug 2010 14:43:36 +0000</pubDate> <dc:creator>Anthony</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[WordPress]]></category><guid isPermaLink="false">http://www.anthonydebarros.com/?p=891</guid> <description><![CDATA[I&#8217;ve been tinkering again with my site&#8217;s WordPress theme and wanted to address one of its weaknesses &#8212; the formatting of comments. In addition to adding Gravatars, I wanted to separate reader comments from automatically generated pingback/trackback posts. A quick Google search turned up just the tutorial I needed from the design blog Hongkiat.com: How to [...]]]></description> <content:encoded><![CDATA[<p><strong>I&#8217;ve been tinkering</strong> again with my site&#8217;s WordPress theme and wanted to address one of its weaknesses &#8212; the formatting of comments. In addition to adding <a href="http://en.gravatar.com/" target="_blank">Gravatars</a>, I wanted to separate reader comments from automatically generated pingback/trackback posts.</p><p>A quick Google search turned up just the tutorial I needed from the design blog <a href="http://www.hongkiat.com/blog/" target="_blank">Hongkiat.com</a>:</p><p><a href="http://www.hongkiat.com/blog/how-to-seperate-comments-and-trackbacks-wordpress-tips/">How to Separate Comments and Trackbacks [Wordpress Tips]</a>.</p> ]]></content:encoded> <wfw:commentRss>http://www.anthonydebarros.com/2010/08/02/wordpress-tip-separating-comments-trackbacks/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Calculating Medians With SQL</title><link>http://www.anthonydebarros.com/2010/07/25/calculating-medians-sql/</link> <comments>http://www.anthonydebarros.com/2010/07/25/calculating-medians-sql/#comments</comments> <pubDate>Sun, 25 Jul 2010 04:44:14 +0000</pubDate> <dc:creator>Anthony</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[SQL]]></category><guid isPermaLink="false">http://www.anthonydebarros.com/?p=823</guid> <description><![CDATA[Given that median is such a valuable statistical measure, it&#8217;s baffling that Microsoft&#8217;s SQL Server and other relational databases (MySQL, PostgreSQL) don&#8217;t have a built-in MEDIAN function. Well, this week, after working through a data set in SQL Server &#8212; and deciding I didn&#8217;t want to push the data into SPSS to find medians &#8212; [...]]]></description> <content:encoded><![CDATA[<p><strong>Given that median</strong> is such a <a href="http://www.anthonydebarros.com/2009/12/27/mean-vs-median-excel/" target="_blank">valuable statistical measure</a>, it&#8217;s baffling that Microsoft&#8217;s SQL Server and other relational databases (MySQL, PostgreSQL) don&#8217;t have a built-in MEDIAN function. Well, this week, after working through a data set in SQL Server &#8212; and deciding I didn&#8217;t want to push the data into SPSS to find medians &#8212; I hit the web to find a T-SQL workaround.</p><p>I found a ton of solutions (some from people with no clue about the difference between <a href="http://www.anthonydebarros.com/2009/12/27/mean-vs-median-excel/">median and average</a>), but the one below &#8212; adapted from <a href="http://sqlblog.com/blogs/adam_machanic/archive/2006/12/18/medians-row-numbers-and-performance.aspx" target="_blank">a post by Adam Machanic at sqlblog.com</a> &#8212; was the best. It produces accurate results and is fairly speedy to boot.</p><p>Here&#8217;s an example. Consider this table with student grades from two courses:<br /> <code><span style="color: #ffffff;">.</span></code></p><table border="0"><tbody><tr><th width="30px">ID</th><th width="90px">Class</th><th width="90px">FirstName</th><th>Grade</th></tr><tr><td>1</td><td>Math</td><td>Bob</td><td>65</td></tr><tr><td>2</td><td>Math</td><td>Joe</td><td>72</td></tr><tr><td>3</td><td>Math</td><td>Sally</td><td>95</td></tr><tr><td>4</td><td>Science</td><td>Bob</td><td>65</td></tr><tr><td>5</td><td>Science</td><td>Joe</td><td>81</td></tr><tr><td>6</td><td>Science</td><td>Sally</td><td>81</td></tr><tr><td>7</td><td>Science</td><td>Mike</td><td>72</td></tr></tbody></table><p>We&#8217;d like to find the median grade in each class. Here&#8217;s the script:<br /> <span id="more-823"></span><br /> &nbsp;</p><div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">&nbsp;
<span style="color: #993333; font-weight: bold;">DECLARE</span> @tmp <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #66cc66;">&#40;</span>
   ID <span style="color: #993333; font-weight: bold;">INT</span> <span style="color: #993333; font-weight: bold;">IDENTITY</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
   Class <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
   FirstName <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
   Grade <span style="color: #993333; font-weight: bold;">DECIMAL</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #66cc66;">,</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> @tmp <span style="color: #66cc66;">&#40;</span>Class<span style="color: #66cc66;">,</span> FirstName<span style="color: #66cc66;">,</span> Grade<span style="color: #66cc66;">&#41;</span>
   <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Math'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'Bob'</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">65</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> @tmp <span style="color: #66cc66;">&#40;</span>Class<span style="color: #66cc66;">,</span> FirstName<span style="color: #66cc66;">,</span> Grade<span style="color: #66cc66;">&#41;</span>
   <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Math'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'Joe'</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">72</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> @tmp <span style="color: #66cc66;">&#40;</span>Class<span style="color: #66cc66;">,</span> FirstName<span style="color: #66cc66;">,</span> Grade<span style="color: #66cc66;">&#41;</span>
   <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Math'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'Sally'</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">95</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> @tmp <span style="color: #66cc66;">&#40;</span>Class<span style="color: #66cc66;">,</span> FirstName<span style="color: #66cc66;">,</span> Grade<span style="color: #66cc66;">&#41;</span>
   <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Science'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'Bob'</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">65</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> @tmp <span style="color: #66cc66;">&#40;</span>Class<span style="color: #66cc66;">,</span> FirstName<span style="color: #66cc66;">,</span> Grade<span style="color: #66cc66;">&#41;</span>
   <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Science'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'Joe'</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">81</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> @tmp <span style="color: #66cc66;">&#40;</span>Class<span style="color: #66cc66;">,</span> FirstName<span style="color: #66cc66;">,</span> Grade<span style="color: #66cc66;">&#41;</span>
   <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Science'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'Sally'</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">81</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> @tmp <span style="color: #66cc66;">&#40;</span>Class<span style="color: #66cc66;">,</span> FirstName<span style="color: #66cc66;">,</span> Grade<span style="color: #66cc66;">&#41;</span>
   <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Science'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'Mike'</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">72</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&lt;/</span>code<span style="color: #66cc66;">&gt;</span>
&nbsp;
<span style="color: #993333; font-weight: bold;">SELECT</span>
x<span style="color: #66cc66;">.</span>Class<span style="color: #66cc66;">,</span>
<span style="color: #993333; font-weight: bold;">CAST</span><span style="color: #66cc66;">&#40;</span>AVG<span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">.</span>Grade<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #993333; font-weight: bold;">DECIMAL</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">6</span><span style="color: #66cc66;">,</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #ff0000;">'Median'</span>
<span style="color: #993333; font-weight: bold;">FROM</span>
   <span style="color: #66cc66;">&#40;</span>
     <span style="color: #993333; font-weight: bold;">SELECT</span>
     Class<span style="color: #66cc66;">,</span>
     FirstName<span style="color: #66cc66;">,</span>
     Grade<span style="color: #66cc66;">,</span>
     <span style="color: #993333; font-weight: bold;">ROW_NUMBER</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OVER</span> <span style="color: #66cc66;">&#40;</span>
     PARTITION <span style="color: #993333; font-weight: bold;">BY</span> Class
     <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> Grade <span style="color: #993333; font-weight: bold;">ASC</span><span style="color: #66cc66;">,</span> ID <span style="color: #993333; font-weight: bold;">ASC</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> RowAsc<span style="color: #66cc66;">,</span>
     <span style="color: #993333; font-weight: bold;">ROW_NUMBER</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OVER</span> <span style="color: #66cc66;">&#40;</span>
     PARTITION <span style="color: #993333; font-weight: bold;">BY</span> Class
     <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> Grade <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">,</span> ID <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> RowDesc
     <span style="color: #993333; font-weight: bold;">FROM</span> @tmp
   <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> x
<span style="color: #993333; font-weight: bold;">WHERE</span>
RowAsc <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #66cc66;">&#40;</span>RowDesc<span style="color: #66cc66;">,</span> RowDesc <span style="color: #66cc66;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> RowDesc <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">GROUP</span> <span style="color: #993333; font-weight: bold;">BY</span> x<span style="color: #66cc66;">.</span>Class
<span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> x<span style="color: #66cc66;">.</span>Class</pre></div></div><p>That&#8217;s a lot. Let&#8217;s break down what&#8217;s happening.</p><p>First, to set up the data, we&#8217;re creating a temporary table and inserting seven rows.</p><p>Then comes the main SELECT, which includes a subquery that&#8217;s the meat of the goodness behind this. The subquery uses the <a href="http://msdn.microsoft.com/en-us/library/ms186734.aspx" target="_blank">ROW_NUMBER</a> function to create ascending and descending row identifiers based on the ordering of the grades. It&#8217;s easier to visualize if you see what the subquery&#8217;s creating:<br /> <code><span style="color: #ffffff;">.</span></code></p><table border="0"><tbody><tr><th width="90px">Class</th><th width="90px">FirstName</th><th width="70px">Grade</th><th>RowAsc</th><th>RowDesc</th></tr><tr><td>Math</td><td>Sally</td><td>95.0</td><td>3</td><td>1</td></tr><tr><td>Math</td><td>Joe</td><td>72.0</td><td>2</td><td>2</td></tr><tr><td>Math</td><td>Bob</td><td>65.0</td><td>1</td><td>3</td></tr><tr><td>Science</td><td>Sally</td><td>81.0</td><td>4</td><td>1</td></tr><tr><td>Science</td><td>Joe</td><td>81.0</td><td>3</td><td>2</td></tr><tr><td>Science</td><td>Mike</td><td>72.0</td><td>2</td><td>3</td></tr><tr><td>Science</td><td>Bob</td><td>65.0</td><td>1</td><td>4</td></tr></tbody></table><p>The RowAsc and RowDesc fields reflect the ordered row numbers of the grades per each class (i.e., partition). Given those, it&#8217;s easy to find the median. For the math class, with an odd number of students, the median occurs where RowAsc equals RowDesc. For the science class, with an even number of students, the median is the average of the two grades where RowAsc and RowDesc are within one of each other.</p><p>(Whenever you&#8217;re looking for the median in an ordered list that has an even number of values, averaging the two middle numbers gives the answer.)</p><p>That&#8217;s what our main query does when it pulls from the subquery result set. It looks for:<br /> &nbsp;</p><div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">RowAsc <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #66cc66;">&#40;</span>RowDesc<span style="color: #66cc66;">,</span> RowDesc <span style="color: #66cc66;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> RowDesc <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span></pre></div></div><p>and then averages what it finds. The answer is 72 for the math class and 76.5 for science.</p><p>This solution works with T-SQL and Microsoft SQL Server. With minor tweaks, it also runs fine in PostgreSQL 8.4, which also implements the ROW_NUMBER function. MySQL does not support that function, so you&#8217;ll have to search for another option.</p><p>Good stuff and pretty handy for extracting large numbers of median values without having to resort to a stats program.</p> ]]></content:encoded> <wfw:commentRss>http://www.anthonydebarros.com/2010/07/25/calculating-medians-sql/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Download My WordPress Theme</title><link>http://www.anthonydebarros.com/2010/06/19/download-wordpress-theme/</link> <comments>http://www.anthonydebarros.com/2010/06/19/download-wordpress-theme/#comments</comments> <pubDate>Sat, 19 Jun 2010 21:29:36 +0000</pubDate> <dc:creator>Anthony</dc:creator> <category><![CDATA[WordPress]]></category><guid isPermaLink="false">http://www.anthonydebarros.com/?p=345</guid> <description><![CDATA[Update Jan. 1, 2011: Starting today, I&#8217;m using a new theme I&#8217;ve crafted, which I am calling Goshen. It&#8217;s designed to be minimal but readable. The theme I was using previously, Porfolio_AD, is going to rest comfortably on a beach somewhere and probably won&#8217;t be coming out of retirement any time soon. You can still [...]]]></description> <content:encoded><![CDATA[<p><strong>Update Jan. 1, 2011:</strong></p><p>Starting today, I&#8217;m using a new theme I&#8217;ve crafted, which I am calling Goshen. It&#8217;s designed to be minimal but readable. The theme I was using previously, Porfolio_AD, is going to rest comfortably on a beach somewhere and probably won&#8217;t be coming out of retirement any time soon. You can still download it &#8212; I know of one person who actually did implement it on a site, much to my shock &#8212; and play to your heart&#8217;s content.</p><p><strong>Original post:</strong></p><p>I make no claim to having any design sense, but if you like the WordPress theme I made for my site, you&#8217;re welcome to it. Grab it <a href="http://www.anthonydebarros.com/wp-content/themes/portfolio_ad/docs/portfolio_ad.zip" target="_blank">right here</a>.</p><p>Portfolio AD is a one-column theme with a two-column sidebar. Both  columns in the sidebar can display widgets. The header is a modification  of the well-worn <a href="http://warpspire.com/hemingway/" target="_blank">Hemingway</a> theme, and the rest is my take-off of a site built via <a href="http://www.wpdesigner.com/2007/02/19/so-you-want-to-create-wordpress-themes-huh/" target="_blank">this tutorial</a> from <a href="http://www.wpdesigner.com/" target="_blank">WPDesigner.com</a>. It works fine with WordPress 3.0.</p><p>What you see here is the result of <a href="http://twitter.com/AnthonyDB/status/7560546852" target="_blank">constant tinkering</a>. I coded up a theme of my own to learn more about what WordPress can do, and in the process I have learned tons about CSS, HTML, web hosting and content management systems in general. If you have the time, it&#8217;s well worth the investment.</p><p>Use the theme as a starting point for your own tinkering and have fun!</p><p><strong><br /> </strong></p><p><a href="http://www.anthonydebarros.com/wp-content/themes/portfolio_ad/docs/portfolio_ad.zip"></a></p> ]]></content:encoded> <wfw:commentRss>http://www.anthonydebarros.com/2010/06/19/download-wordpress-theme/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 1/40 queries in 0.087 seconds using disk: basic
Object Caching 535/609 objects using disk: basic

Served from: www.anthonydebarros.com @ 2012-02-05 05:31:05 -->
