<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Bartlett Publishing</title>
    <link>http://www.bartlettpublishing.com/site/bartpub/section/1</link>
    <description>Combined feeds for Bartlett Publishing</description>
    <language>en-us</language>
    <item>
      <title>Technology Musings / Super Fuzzy Searching on PostgreSQL</title>
      <description>&lt;p&gt;I have been working on doing some fuzzy searching on PostgreSQL for a while, and thought I'd share some of my experiences here.&amp;nbsp; Many people are not yet aware of the incredible fuzzy search capabilities of PostgreSQL, especially that were added in the 9.1 release.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Most people use an external engine such as Lucene to do fuzzy searches.&amp;nbsp; While, as you will see, there are still reasons to do so, they are much fewer now than they used to be.&lt;/p&gt;
&lt;h4&gt;Fuzzy Search Using Trigrams&lt;/h4&gt;
&lt;p&gt;While PostgreSQL has lots of different fuzzy search options (soundex, levenshtein, etc.), the one which has the most support is trigram searching.&amp;nbsp; What is a trigram?&amp;nbsp; Trigrams break a word up into 3-letter sequences, which can then be used to do similarity matches.&amp;nbsp; Think of the word &quot;hello&quot;.&amp;nbsp; It has the following trigrams: &quot;h&quot;, &quot;he&quot;, &quot;hel&quot;, &quot;ell&quot;, &quot;llo&quot;, &quot;lo&quot;, and &quot;o&quot;.&amp;nbsp; Now look at the word &quot;hallo&quot;.&amp;nbsp; It has the following trigrams: &quot;h&quot;, &quot;ha&quot;, &quot;hal&quot;, &quot;all&quot;, &quot;llo&quot;, &quot;lo&quot;, and &quot;o&quot;.&amp;nbsp; You can see that there are several trigrams that match, and several that don't match.&amp;nbsp; Similarity is computed via &lt;a href=&quot;http://en.wikipedia.org/wiki/Cosine_similarity&quot; target=&quot;_blank&quot;&gt;cosine similarity&lt;/a&gt; (which I don't totally understand), but, basically, the more trigrams you have in common the closer the match.&amp;nbsp; In the present case, 'hallo' and 'hello' have a similarity of 0.333333.&amp;nbsp; You can see this in PostgreSQL by saying:&lt;/p&gt;
&lt;pre&gt;select similarity('hello', 'hallo')&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;PostgreSQL also has two other relevant operators that use similarity - the &quot;&amp;lt;-&amp;gt;&quot; operator and the &quot;%&quot; operator.&amp;nbsp; &quot;&amp;lt;-&amp;gt;&quot; is the &quot;distance&quot; operator, which is simply one minus the similarity (i.e. if the similarity is 0.2 the distance will be 0.8).&amp;nbsp; For text searching, &quot;%&quot; is the &quot;similar&quot; operator, which returns true if two strings are similar, or false if they are not.&amp;nbsp; Two strings are defined as &quot;similar&quot; if their similarity is 0.3 or greater.&amp;nbsp; This can be set with set_limit(), but it is not usually useful to do so (we will deal with custom similarities later).&amp;nbsp; The &quot;%&quot; operator is important, because of its heavy use in indexing.&lt;/p&gt;
&lt;h4&gt;Installing Trigrams&lt;/h4&gt;
&lt;p&gt;The trigram module (&lt;a href=&quot;http://www.postgresql.org/docs/9.1/interactive/pgtrgm.html&quot; target=&quot;_blank&quot;&gt;pg_trgm&lt;/a&gt;) is not installed by default in PostgreSQL, but is one of their standard (and supported!) extensions.&amp;nbsp; To install, you need to make sure you build the module in the source code.&amp;nbsp; To do this, go into the contrib/pg_trgm directory of the source code and do a &quot;make; make install&quot;.&amp;nbsp; This will install the plugin, but will not activate it.&amp;nbsp; Then, in any database you want to use this plugin, put in the command:&lt;/p&gt;
&lt;pre&gt;CREATE EXTENSION pg_trgm;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;This will load the necessary SQL to install the functions and operators needed to make trigrams work.&amp;nbsp; If you type that command in the template1 database, then all future databases created on that system will have the extension installed.&lt;/p&gt;
&lt;h4&gt;Using Trigrams Without an Index&lt;/h4&gt;
&lt;p&gt;The simplest use of trigrams would be to have a table with a name column, and do a search like this:&lt;/p&gt;
&lt;pre&gt;SELECT * FROM people WHERE lastname % 'Schmoe'&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;This will return a list of people where the trigram similarity is greater than the default threshold.&amp;nbsp; If you want to specify the similarity you are looking for, you can change that to:&lt;/p&gt;
&lt;pre&gt;SELECT * FROM people WHERE similarity(lastname, 'Schmoe') &amp;gt; 0.5&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;This will give a less-tolerant match than the default.&lt;/p&gt;
&lt;p&gt;The problem with doing this is that it takes a lot of processing power.&amp;nbsp; The reason people usually use databases is because they have a huge number of records and need to be able to search them quickly.&amp;nbsp; If we have 10,000 records, manually doing trigram matches will take quite a bit of time.&lt;/p&gt;
&lt;p&gt;So, one of the best features of PostgreSQL 9.1 is the ability for PostgreSQL to incorporate trigrams into an index.&amp;nbsp; So, to make an index to speed up our search, do:&lt;/p&gt;
&lt;pre&gt;CREATE INDEX people_lastname_trigram_idx ON people USING gist(lastname gist_trgm_ops);&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;This will create a &quot;gist&quot; index, which is a special type of index which is often used in spacial and other vector-oriented matching.&amp;nbsp; The &quot;gist_trgm_ops&quot; is a little bit of magic that tells gist how to use a text field as a vector of trigrams.&lt;/p&gt;
&lt;p&gt;Now, your query will use the index, provided you have enough rows to make it worthwhile.&amp;nbsp; HOWEVER, it is not yet using the index efficiently.&amp;nbsp; While PostgreSQL &lt;em&gt;can&lt;/em&gt; (and will) use the index for this query, it doesn't actually check the condition until a later step (I believe, but am not sure, that it is using the index to get everything in the right order, and then at a later stage doing filtering).&amp;nbsp; For large tables, this can still be several orders of magnitude worse than you want.&amp;nbsp; To fix this, you MUST use the &quot;%&quot; operator.&amp;nbsp; This will cause the index to have an &quot;index condition&quot;, which it will use to limit the results that it puts out.&amp;nbsp; So, if you have:&lt;/p&gt;
&lt;pre&gt;SELECT * FROM people WHERE lastname % 'Schmoe';&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;This will use the index AND the index condition, and will be super-fast (except in extremely large datasets - see next section).&amp;nbsp; However, this uses the built-in cutoff point of 0.3 similarity.&amp;nbsp; What if I want my results to be tighter than that?&amp;nbsp; The best way is to combine % with similarity(), like this:&lt;/p&gt;
&lt;pre&gt;SELECT * FROM people WHERE lastname % 'Schmoe' AND similarity(lastname, 'Schmoe') &amp;gt; 0.5;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;In this case, the database will use the &quot;%&quot; condition for the index, which will be incredibly fast, and the &quot;similarity()&quot; call as a post-index filter, which, since there is a much smaller dataset, will still be pretty fast.&lt;/p&gt;
&lt;h4&gt;Working With Larger Datasets&lt;/h4&gt;
&lt;p&gt;I had trouble working with trigrams because my main dataset is about 14 million titles.&amp;nbsp; At this size, trigram searching is really slow.&amp;nbsp; With the whole database loaded in-memory (either in PG's cache or in the filesystem cache - I have many, many gigs of memory), a trigram search of the database &lt;em&gt;USING THE INDEX&lt;/em&gt; took between 3 and 12 seconds, depending on the string.&amp;nbsp; Poking around, I came out with the following basic results for a database on an Amazon EC2 4XL instance without any other load:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;100,000 records: 40 milliseconds&lt;/li&gt;
&lt;li&gt;1,000,000 records: 0.4 seconds&lt;/li&gt;
&lt;li&gt;14,000,000 records: 7 seconds&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, as you can see, the useful limit to these queries is about 1 million records.&amp;nbsp; Therefore, if you have more than 14 million rows, if you want to do trigrams, you need to find a way to boost performance.&amp;nbsp; I've found there are two basic methods you can use to speed up trigrams on large datasets:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create specialized indexes with subsets of your data&lt;/li&gt;
&lt;li&gt;Create a separate wordlist table with unique words&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;#1 is much preferred if you can do it, because it is an entirely database-oriented method.&amp;nbsp; Basically, what I did, is I figured out that on my queries I only needed to trigram search on about 1 million of my 14 million records.&amp;nbsp; Therefore, I specialized the index by adding a &quot;WHERE&quot; clause to the index itself.&amp;nbsp; On my database, I have a &quot;type&quot; field, and I'm only searching certain types of records.&amp;nbsp; Therefore, I changed my index to the following:&lt;/p&gt;
&lt;pre&gt;CREATE INDEX people_lastname_restricted_trigram_idx ON people USING gist(lastname gist_trgm_ops) WHERE type IN ('my_type1', 'my_type2');&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;This meant that only about a million records were being stored in the index, which brought down my search time considerably.&amp;nbsp; Another search that I was doing was based on the person's &quot;popularity&quot;, in which case, I added another index for popularity being greater than 20.&amp;nbsp; This restricted the set down to about 100,000 records, which made it blazingly fast.&lt;/p&gt;
&lt;p&gt;The other alternative (#2) I mentioned is to create a separate table of words which is searched.&amp;nbsp; The idea is that while you may have 14 million records, there probably aren't 14 million words.&amp;nbsp; Therefore, you create a table using unique words from the database, and then add a trigram index on that.&amp;nbsp; The problem, though, is that this takes either (a) a lot of manual work, or (b) a lot of triggers, none of which is the way I like to administer databases.&amp;nbsp; Nonetheless, it can work if you are merely wanting to use trigrams to fuzzy-match individual words.&amp;nbsp; It can be especially helpful in conjunction with PostgreSQL's &lt;a href=&quot;http://www.postgresql.org/docs/9.1/interactive/textsearch.html&quot; target=&quot;_blank&quot;&gt;full-text search&lt;/a&gt; (previously known as tsearch2), which still operates blazingly-fast on 14 million records.&amp;nbsp; Fuzzy string matching on words can be combined with full-text search on records to present a powerful and fast method of searching.&amp;nbsp;&amp;nbsp; The wordlist can be fuzzy-matched to provide better hints at what words are in the fulltext.&lt;/p&gt;
&lt;p&gt;To create a wordlist, do something like this:&lt;/p&gt;
&lt;pre&gt;CREATE TABLE search_words (word text);&lt;br /&gt;CREATE INDEX search_words_word_trigram_idx ON search_words USING gist(word gist_trgm_ops);&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Then, every time you need to regenerate your wordlist, do the following:&lt;/p&gt;
&lt;pre&gt;DELETE FROM search_words;&lt;br /&gt;INSERT INTO search_words (word) SELECT DISTINCT lower(word) FROM (SELECT unnest(regexp_split_to_array(lastname, E'\\\\W+')) AS word FROM people) words WHERE word IS NOT NULL AND length(word) &amp;gt; 3;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;What that does is explode the lastname field out into words (in case a lastname is multi-word), where each word is its own record.&amp;nbsp; It also filters out excessively short words (optional).&amp;nbsp; It then inserts these into the search_words table, which has a trigram index.&amp;nbsp; So, now, if you want to fuzzy-match individual words, you can use the search_words table!&lt;/p&gt;
&lt;p&gt;Anyway, additional fun can be had by using unaccent to remove accents before all of this processing, or other fun to massage your data however you feel is best.&amp;nbsp; The important thing is that, for all but the most strenuous data sets, we can now keep all of the searching located within the database itself, managed by database tools, without having to rely on external search engines such as Lucene, which take time, management, machine power, and their own sets of headaches.&amp;nbsp; Lucene itself &lt;a href=&quot;http://www.nearinfinity.com/blogs/aaron_mccurry/what_happens_to_lucene_when.html&quot; target=&quot;_blank&quot;&gt;often has to be hand-rigged for large datasets even&lt;/a&gt;.&amp;nbsp; I am a big believer in pushing as much data work to the database as possible, and PostgreSQL keeps pushing the bar higher!&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Thu, 12 Jan 2012 16:58:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/350</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/350</guid>
    </item>
    <item>
      <title>Technology Musings / Enjoy Skyrim's Alchemy?  Check Out Nature's Own Alchemy System</title>
      <description>&lt;p&gt;If you have played The Elder Scrolls V: Skyrim, you have probably made use of their &quot;alchemy&quot; system. &amp;nbsp;What you may not have known is that this is based, in some degree, on the real-life practices of both ancient and modern herbalists, who combine herbs and herbal actions to produce desired effects on the body and the body's health. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you are interested in learning more, you should check out &lt;a href=&quot;http://itunes.apple.com/app/the-herbalist/id489767701&quot; target=&quot;_blank&quot;&gt;The Herbalist&lt;/a&gt;, a new iPhone/iPad/iPod/iOS app which describes a number of herbs and the actions that herbalists use them for. &amp;nbsp;In addition, you can even search the herbal database by the action you are looking for or by the specific malady for which it is often used. &amp;nbsp;It also includes information on different ways of preparing herbs for usage in tinctures, oils, infusions, lotions, and other preparations.&lt;/p&gt;
&lt;p&gt;Anyway, if you enjoy Skyrim's alchemy, you'll love seeing how practicing herbalists make use of the same basic ideas.&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Thu, 22 Dec 2011 23:55:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/349</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/349</guid>
    </item>
    <item>
      <title>Notes from the Publisher / New App Available - The Herbalist</title>
      <description>&lt;p&gt;Bartlett Publishing just released our first iOS app, called &lt;a href=&quot;http://itunes.apple.com/us/app/the-herbalist/id489767701&quot; target=&quot;_blank&quot;&gt;The Herbalist&lt;/a&gt;. &amp;nbsp;This app provides information about herbs and how they are used by modern herbalists. &amp;nbsp;It allows searching the herbal database by malady and herbal action. &amp;nbsp;&lt;a href=&quot;http://itunes.apple.com/us/app/the-herbalist/id489767701&quot; target=&quot;_blank&quot;&gt;Check it out today&lt;/a&gt;!&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Thu, 22 Dec 2011 23:53:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/4/entry/348</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/4/entry/348</guid>
    </item>
    <item>
      <title>Simpler Living / Season in Review</title>
      <description>&lt;p&gt;This was a bad year for the garden.&amp;nbsp; The heat killed most of my plants, and also prevented me from going outside and weeding.&lt;/p&gt;
&lt;p&gt;Here are the results:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Failures:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tomato (may get a few in the fall - we'll see)&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Squash &lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Cucumber&lt;/li&gt;
&lt;li&gt;Rosemary (one potted Rosemary is left, and it doesn't look like it is growing)&lt;/li&gt;
&lt;li&gt;Worms - I had a nice worm bin going, but the heat killed them, too!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Almost Failures:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Canteloupe (had 3 good ones, ants took the rest)&lt;/li&gt;
&lt;li&gt;Carrots (never got long)&lt;/li&gt;
&lt;li&gt;Oregano - have some growing in pots and should do something with it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Successes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Peas (early in the season)&lt;/li&gt;
&lt;li&gt;Green Beans (early in the season)&lt;/li&gt;
&lt;li&gt;Sweet Potatoes (I think - haven't dug any up yet)&lt;/li&gt;
&lt;li&gt;Lettuce (3 varieties - Romaine, Webb's Wonderful, and Simpson Elite) - had several cuts from each, and now saving the seeds!&lt;/li&gt;
&lt;li&gt;Leeks (saved seeds)&lt;/li&gt;
&lt;li&gt;Garlic&lt;/li&gt;
&lt;li&gt;Mustard Greens&lt;/li&gt;
&lt;li&gt;Radishes (though seed-saving was a failure)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now it's time for fall planting.&amp;nbsp; Planning to plant:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replanting lettuce from gathered seeds&lt;/li&gt;
&lt;li&gt;Kale (Red Winter and Siberian)&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Swiss Chard (white and red)&lt;/li&gt;
&lt;li&gt;Broccoli (Early Fall Rapini)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I noticed that Amazon sells seeds really cheap ($8/lb for most seeds!)&amp;nbsp; It amazes me that anyone can make money at that price!&amp;nbsp; Seed production simply takes a *lot* of garden time.&amp;nbsp; I wish I had a bigger plot of land to do this on!&lt;/p&gt;
&lt;p&gt;I'm also trying growing wheatgrasss without special equipment *or* soil.&amp;nbsp; We'll see how that works.&lt;/p&gt;
&lt;p&gt;By the way - my favorite lettuce so far is the first cutting of Simpson Elite.&amp;nbsp; The lettuce seems to get more bitter with each cutting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interesting web articles about fall planting:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.marksdailyapple.com/fall-vegetables/&quot; target=&quot;_blank&quot;&gt;Top Ten Fall Vegetables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://localfoods.about.com/od/searchbyseason/a/wintervegetables.htm&quot; target=&quot;_blank&quot;&gt;Winter Vegetables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.humeseeds.com/falwint.htm&quot; target=&quot;_blank&quot;&gt;Fall and Winter Planting Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://gardening.wsu.edu/library/best005/best005.htm&quot; target=&quot;_blank&quot;&gt;Fall and Winter Vegetable Gardens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://organicgardening.about.com/od/vegetablesherbs/a/Vegetables-To-Plant-In-September.htm&quot; target=&quot;_blank&quot;&gt;Vegetables to Plant in September (organized by region)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author></author>
      <pubDate>Mon, 05 Sep 2011 10:52:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/5/entry/347</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/5/entry/347</guid>
    </item>
    <item>
      <title>Researching Creation / Special Creation Research Society Discount for Students </title>
      <description>&lt;p&gt;For those interested in joining the Creation Research Society, they are running a special membership drive at a steeply discounted price:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.creationresearch.org/amember/signup_student.php?price_group=-2&quot; target=&quot;_blank&quot;&gt;See here&lt;/a&gt;&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Sat, 03 Sep 2011 04:39:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/1/entry/346</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/1/entry/346</guid>
    </item>
    <item>
      <title>Conservative Theology / A Sermonette in Celebration of Marriage</title>
      <description>&lt;p&gt;In this day and age, we often forget what marriage is about. &amp;nbsp;Is it about children? &amp;nbsp;Sex? &amp;nbsp;Loneliness? &amp;nbsp;What? &amp;nbsp;It is this lack of understanding of marriage that leads to so many problems in the family. &amp;nbsp;Therefore, when my brother-in-law asked me to give a sermonette in his wedding to introduce the scripture reading (1 Corinthians 13), I decided to celebrate his marriage by reminding them and everyone about just how important marriage is, and what it is for in the first place. &amp;nbsp;So, here is my sermon. &amp;nbsp;Feel free to use it for your own weddings if you like it:&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;We are here today to celebrate the marriage of Billy and Stasia.&amp;nbsp; It is worthwhile to take a moment and reflect on this mystical union between man and woman.&amp;nbsp; Aristotle noted that all civilization starts with the natural attraction between husband and wife, which brings them together to form a family, and from the interactions of families, we get towns and cities.&amp;nbsp; Thus we see in Billy and Stasia not only the beginning of their lives together, but the very roots of society spreading further.&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;Not only is marriage the foundation of society, but it is also the foundation of unity in humanity.&amp;nbsp; The divide between man and woman is the ultimate divide.&amp;nbsp; Races can be mixed.&amp;nbsp; Religions can be syncretized.&amp;nbsp; Cultures can be influenced.&amp;nbsp; But man and woman have been split from the beginning, more distant than any two tribes or nations, and no amount of breeding can ever remove the boundary.&amp;nbsp; It is only through marriage that the two parts of humanity are reunited back into one.&amp;nbsp; And it is marriage as a symbol of unity that gives us all hope for any peace among anyone else.&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;However, since men and women are so different, sometimes maintaining unity is difficult.&amp;nbsp; God gives us some help in nature by giving us attractions to each other. &amp;nbsp;As Garth Brooks said, &quot;Some times we fight just so we can make up&quot;!&amp;nbsp; While attraction brings us together, it doesn't bond.&amp;nbsp; For that, we need love.&amp;nbsp; Some days choosing to love is easy, and other days it is harder.&amp;nbsp; But we must choose it each and every day, for it is the highest Christian virtue. &amp;nbsp;&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Sun, 10 Jul 2011 02:29:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/2/entry/345</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/2/entry/345</guid>
    </item>
    <item>
      <title>Researching Creation / The Doctrine of Creation and the Making of Modern Biology</title>
      <description>&lt;p&gt;I just posted a new article on the Classical Conversations website - &lt;a href=&quot;http://classicalconversations.com/cc-connected/guest/articles/349-creationsmodernbio.html&quot; target=&quot;_blank&quot;&gt;check it out&lt;/a&gt;!&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Tue, 28 Jun 2011 04:24:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/1/entry/344</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/1/entry/344</guid>
    </item>
    <item>
      <title>Technology Musings / Misc stuff I found out</title>
      <description>&lt;p&gt;Objective-C PostgreSQL stuff:&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/objectivepq/source/checkout&quot; target=&quot;_blank&quot;&gt;ObjectivePQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.postgresqlformac.com/&quot; target=&quot;_blank&quot;&gt;PostgreSQL For Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/postgres-kit/&quot; target=&quot;_blank&quot;&gt;Postgres-Kit&lt;/a&gt;&amp;nbsp;(includes a solution for embedding a PostgreSQL database *in* your app)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sourceforge.net/projects/pgsqlcocoa/&quot; target=&quot;_blank&quot;&gt;pgsqlcocoa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bitbucket.org/mka/baseten/wiki/Home&quot; target=&quot;_blank&quot;&gt;BaseTen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;Misc:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/entropydb/&quot; target=&quot;_blank&quot;&gt;EntropyDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/guest9efd1a1/building-server-applications-using-objectivec-and-gnustep&quot; target=&quot;_blank&quot;&gt;Building Server Applications Using Objective-C and GNUstep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/714100/os-detecting-makefile&quot; target=&quot;_blank&quot;&gt;How to detect the OS in a Makefile&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;Building a shared library on OSX: (see &lt;a href=&quot;http://www.finkproject.org/doc/porting/shared.php&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;):&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;gcc -dynamiclib -install_name /usr/local/lib/libfoo.2.dylib &amp;nbsp;-compatibility_version 2.4 -current_version 2.4.5 -o libfoo.2.4.5.dylib source.o code.o&lt;/pre&gt;
&lt;p&gt;I have also seen the options&amp;nbsp;-undefined suppress -flat_namespace &lt;a href=&quot;http://stackoverflow.com/questions/3532589/how-to-build-a-dylib-from-several-o-in-mac-os-x-using-gcc&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Another &lt;a href=&quot;http://qin.laya.com/tech_coding_help/dylib_linking.html&quot; target=&quot;_blank&quot;&gt;dylib link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://g4u0419c.houston.hp.com/en/B2355-90655/ch05s11.html&quot; target=&quot;_blank&quot;&gt;Caution mixing shared and archive libs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Seth Godin - &lt;a href=&quot;http://sethgodin.typepad.com/seths_blog/2005/11/how_to_run_a_us.html&quot; target=&quot;_blank&quot;&gt;how to run a useless conference&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Sun, 26 Jun 2011 19:56:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/342</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/342</guid>
    </item>
    <item>
      <title>Technology Musings / Introducing Newm: An Objective-C Framework for Web Applications</title>
      <description>&lt;p&gt;I am working on starting a web application framework called &lt;a href=&quot;https://github.com/johnnyb/Newm&quot; target=&quot;_blank&quot;&gt;Newm&lt;/a&gt;. It is kind of like an Objective-C-on-Rails. &amp;nbsp;&lt;a href=&quot;https://github.com/johnnyb/Newm&quot; target=&quot;_blank&quot;&gt;Check it out&lt;/a&gt;!&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Tue, 21 Jun 2011 11:48:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/341</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/341</guid>
    </item>
    <item>
      <title>Technology Musings / Objective-C Hackery</title>
      <description>&lt;p&gt;Been working on several objective-c projects.&amp;nbsp; I love to get into the fun tricks you can do with languages and stuff.&amp;nbsp; Here's some interesting tidbits I found:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/25746/whats-the-difference-between-a-string-constant-and-a-string-literal&quot; target=&quot;_blank&quot;&gt;Global string constants versus string literals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/CocoaFundamentals/AddingBehaviortoaCocoaProgram/AddingBehaviorCocoa.html&quot; target=&quot;_blank&quot;&gt;Cocoa fundamentals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/Strings/introStrings.html#//apple_ref/doc/uid/10000035i&quot; target=&quot;_blank&quot;&gt;Cocoa string programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.geekhideout.com/urlcode.shtml&quot; target=&quot;_blank&quot;&gt;URLEncode/Decode in C&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.faqs.org/docs/Linux-HOWTO/Program-Library-HOWTO.html#INIT-AND-CLEANUP&quot; target=&quot;_blank&quot;&gt;How to write code that executes *BEFORE* main() is called&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.mentalcases.net/texts/security/TextSectionStudy.txt&quot; target=&quot;_blank&quot;&gt;A study of ELF .text sections&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.haible.de/bruno/documentation/ffcall/callback/callback.html&quot; target=&quot;_blank&quot;&gt;Closures in C?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://thirdcog.eu/pwcblocks/&quot; target=&quot;_blank&quot;&gt;Introduction to C Blocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html#Common-Predefined-Macros&quot; target=&quot;_blank&quot;&gt;gcc predefined macros&lt;/a&gt; (__COUNTER__ is cool)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/992070/static-constructor-equivalent-in-objective-c&quot; target=&quot;_blank&quot;&gt;Class initialization in Objective C using +initialize&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/5012935/static-initializers-in-objective-c&quot; target=&quot;_blank&quot;&gt;Static initializers for heap-based objects?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://osmorphis.blogspot.com/2009/02/objective-c-initializer-patterns_2937.html&quot; target=&quot;_blank&quot;&gt;Objective C initializers important patterns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html&quot; target=&quot;_blank&quot;&gt;The Objective C runtime reference (always useful)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/4864866/c-c-with-gcc-statically-add-resource-files-to-executable-library&quot; target=&quot;_blank&quot;&gt;Add resources to binary (1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/1997172/is-there-a-linux-equivalent-of-windows-resource-files&quot; target=&quot;_blank&quot;&gt;Add resources to binary (2)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/1656968/platform-independant-resource-management&quot; target=&quot;_blank&quot;&gt;Add resources to binary (3)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967&quot; target=&quot;_blank&quot;&gt;Add resources to binary (4)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Sat, 18 Jun 2011 17:55:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/340</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/340</guid>
    </item>
    <item>
      <title>Technology Musings / Miscellaneous RFID Links</title>
      <description>&lt;p&gt;Learning RFID for a project I'm going to work on soon.&amp;nbsp; Here are some handy dandy links!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://tenderlovemaking.com/2009/09/19/ruby-and-rfid-tags/&quot; target=&quot;_blank&quot;&gt;Using RFID tags with Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.libnfc.org/documentation/introduction&quot; target=&quot;_blank&quot;&gt;libnfc - free RFID reading library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.smartlab.deusto.es/java-rfid/&quot; target=&quot;_blank&quot;&gt;Java-based RFID developer kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Radio-frequency_identification&quot; target=&quot;_blank&quot;&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.rfid-in-china.com/products_702_1.html&quot; target=&quot;_blank&quot;&gt;Long-range RFID readers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gaorfidassettracking.com/RFID_Asset_Tracking_Resources/rfid_understanding/&quot; target=&quot;_blank&quot;&gt;Other interesting stuff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.iautomate.com/products/Wavetrend-L%252dRX201-Long-Range-RFID-Reader.html&quot; target=&quot;_blank&quot;&gt;Long-Range RFID reader with development kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aliexpress.com/product-fm/320979826-UHF-RFID-Long-Range-Reader-4-port--wholesalers.html&quot; target=&quot;_blank&quot;&gt;Another reader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.rfid-in-china.com/2011-03-20/products_detail_2328.html&quot; target=&quot;_blank&quot;&gt;Another reader&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>JB</author>
      <pubDate>Tue, 07 Jun 2011 02:47:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/339</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/339</guid>
    </item>
    <item>
      <title>Conservative Theology / Dennis Prager vs Perez Hilton on Gay Marriage</title>
      <description>&lt;p&gt;A very good and insightful debate.&amp;nbsp; Prager managed to get in some key philosophical points in a short discussion.&amp;nbsp; Most important was the discussion about whether the differences between men and women was a matter of body parts alone, or if there were deeper differences.&amp;nbsp; If there are deeper differences, then there are things which a mother/father can provide which is different not just in degree but in kind which a mother/mother or father/father cannot provide.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=vTE9zWaQc_Y&quot; target=&quot;_blank&quot;&gt;Watch Video&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Another good, interesting vide:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=BMYBl2uzXEw&amp;amp;NR=1&quot; target=&quot;_blank&quot;&gt;Watch video&lt;/a&gt;&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Sun, 05 Jun 2011 22:26:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/2/entry/338</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/2/entry/338</guid>
    </item>
    <item>
      <title>Technology Musings / Ideas 2011-05-25</title>
      <description>&lt;p&gt;Had some thoughts today, thought I'd write them down:&lt;/p&gt;
&lt;p&gt;Been looking at Google refine.&amp;nbsp; Some of this is pretty obvious, but I'm thinking it would be pretty awesome to port this to use on a database backend.&amp;nbsp; Basically, do the transforms on the data in the database, and, if you want, it will serialize it back out to a new table, or replace the existing one.&lt;/p&gt;
&lt;p&gt;What would also be cool is a generalized report generator for Rails, possibly using AREL.&amp;nbsp; You could do security by defining mandatory filters for tables, limiting the tables/columns, and other things.&amp;nbsp; It could predict the time the report will take to run by using PostgreSQL's &quot;explain&quot; command.&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Wed, 25 May 2011 19:18:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/337</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/337</guid>
    </item>
    <item>
      <title>Technology Musings / Database Scaling with PostgreSQL</title>
      <description>&lt;p&gt;I've been digging around on various database scaling options for PostgreSQL. &amp;nbsp;Here's some interesting links I've stumbled upon:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://s3.amazonaws.com/lcp/porras/myfiles/ror_db_balancing.html&quot; target=&quot;_blank&quot;&gt;Runtime selection of databases&lt;/a&gt; (for selecting between readonly and readwrite databases)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.postgresql.org/docs/9.0/interactive/hot-standby.html&quot; target=&quot;_blank&quot;&gt;Hot standby in PostgreSQL&lt;/a&gt;&amp;nbsp;and &lt;a href=&quot;http://www.postgresql.org/docs/9.0/static/warm-standby.html&quot; target=&quot;_blank&quot;&gt;log-shipping/streaming&lt;/a&gt; (and&lt;a href=&quot;http://wiki.postgresql.org/wiki/Binary_Replication_Tutorial&quot; target=&quot;_blank&quot;&gt; a tutorial&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A &lt;a href=&quot;https://github.com/technoweenie/masochism&quot;&gt;Rails mechanism for sending write requests to a separate server than read requests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sharding Links:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://highscalability.com/unorthodox-approach-database-design-coming-shard&quot; target=&quot;_blank&quot;&gt;Introduction to sharding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tech.myemma.com/managing-sequences-sharded-environment/&quot; target=&quot;_blank&quot;&gt;Sequence Management with Postgres Sharding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.postgresqlconference.org/content/practical-postgres-sharding-scaling-horizon&quot; target=&quot;_blank&quot;&gt;PostgreSQL sharding on Pandora&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/994882/what-is-a-good-way-to-horizontal-shard-in-postgresql&quot; target=&quot;_blank&quot;&gt;Interesting PostgreSQL partitioning features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.postgresqlconference.org/sites/default/files/ScalingWithGridSQL.odp&quot; target=&quot;_blank&quot;&gt;GridSQL stuff&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gluster.org/&quot; target=&quot;_blank&quot;&gt;Gluster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Tue, 24 May 2011 02:35:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/336</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/336</guid>
    </item>
    <item>
      <title>Technology Musings / Getting EC2 Instances to Talk to Each Other</title>
      <description>&lt;p&gt;I am getting started with EC2, and I noticed a problem - I was unable to get my instances to talk to each other - specifically, mounting an NFS drive.&amp;nbsp; After searching through my forums, I found my answer - I was using a custom Security Group.&lt;/p&gt;
&lt;p&gt;In the default security group, instances within that security group can talk freely to each other.&amp;nbsp; What is surprising is that the default mode for a custom security group is to prevent all communication between the instances.&amp;nbsp; Therefore, you have to add permissions for the security group to be able to receive incoming traffic from the security group itself.&amp;nbsp; In the &quot;host&quot; line, rather than put an IP address, you can put in a security group ID (i.e. sg-abc123), and then specify 0-65535 for the port range.&lt;/p&gt;
&lt;p&gt;Then, viola!&amp;nbsp; It works!&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Mon, 23 May 2011 02:02:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/335</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/335</guid>
    </item>
    <item>
      <title>Conservative Theology / Spirituality and Physics</title>
      <description>&lt;p&gt;Some of you might be interested in &lt;a href=&quot;http://www.classicalconversations.com/cc-connected/guest/articles/323-spiritualityphysics.html&quot; target=&quot;_blank&quot;&gt;my new article on physics and faith at Classical Conversations&lt;/a&gt;.&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Thu, 19 May 2011 13:07:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/2/entry/334</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/2/entry/334</guid>
    </item>
    <item>
      <title>Simpler Living / Random (2011-05-18)</title>
      <description>&lt;p&gt;Here's some random stuff open on my browser today:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.naturesgift.com/extraction.htm&quot; target=&quot;_blank&quot;&gt;Methods of extracting essential oils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.keeperofthehome.org/2010/03/how-to-make-fabulous-soup-from-scratch-without-a-recipe.html&quot; target=&quot;_blank&quot;&gt;How to Make Soup from Scratch Without a Recipe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.garlicfarm.ca/garlic-harvesting-pospisil.htm&quot; target=&quot;_blank&quot;&gt;The Three Harvests of Garlic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.unplannedthebook.com/&quot; target=&quot;_blank&quot;&gt;Unplanned: The Book&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author></author>
      <pubDate>Wed, 18 May 2011 18:54:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/5/entry/333</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/5/entry/333</guid>
    </item>
    <item>
      <title>Technology Musings / Blocks in Objective C</title>
      <description>&lt;p&gt;Blocks is a new feature of Objective C that was announced roughly at the same time as Apple announced Grand Central Dispatch.&amp;nbsp; I haven't had the time to look into it thoroughly, so I'm sticking my bookmarks here for future reference:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://overooped.com/post/174960131/the-one-objective-c-block-memory-management-example-you&quot; target=&quot;_blank&quot;&gt;The One Objective-C Block Memory Example You Need to Read&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://cocoawithlove.com/2009/10/how-blocks-are-implemented-and.html&quot; target=&quot;_blank&quot;&gt;How Blocks are Implemented (and the Consequences)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://thirdcog.eu/pwcblocks/&quot; target=&quot;_blank&quot;&gt;Programming with C Blocks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>JB</author>
      <pubDate>Wed, 18 May 2011 18:51:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/332</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/3/entry/332</guid>
    </item>
    <item>
      <title>Researching Creation / On Being an Amateur</title>
      <description>&lt;p&gt;I'm posting this mainly because I was thinking about it today, and it took me over an hour to find it. &amp;nbsp;So I'm saving it here for future reference. &amp;nbsp;Biblo at Telic Thoughts put up some &lt;a href=&quot;http://telicthoughts.com/on-being-an-amateur-id-proponent/&quot; target=&quot;_blank&quot;&gt;excellent thoughts about being an amateur ID proponent&lt;/a&gt;. &amp;nbsp;I also added the following comment:&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Verdana, Arial, sans-serif; font-size: 11px;&quot;&gt;
&lt;p style=&quot;font-weight: normal; line-height: 1.5em; text-transform: none; margin-top: 5px; margin-right: 5px; margin-bottom: 10px; margin-left: 0px;&quot;&gt;I think it is dangerous for any discipline to reject the criticisms of amateurs out-of-hand. I have been programming computers for 25 years, have a book on programming that is used at Princeton University, have taught programming, and have numerous papers and articles on programming published by IBM and others.&lt;/p&gt;
&lt;p style=&quot;font-weight: normal; line-height: 1.5em; text-transform: none; margin-top: 5px; margin-right: 5px; margin-bottom: 10px; margin-left: 0px;&quot;&gt;Nonetheless, I still, often, have customers who come up with ways of doing things that I don't think of &amp;ndash; customers who have never programmed a day in their life. I know many people who dismiss their customers ideas out-of-hand because they don't believe that non-programmers have valid input. That is total B.S. The fact is, being a non-programmer gives someone an outside look at the issues that aren't obscured with all the things us programmers normally worry about that, and sometimes that opens their minds up to possibilities that we don't see.&lt;/p&gt;
&lt;p style=&quot;font-weight: normal; line-height: 1.5em; text-transform: none; margin-top: 5px; margin-right: 5px; margin-bottom: 10px; margin-left: 0px;&quot;&gt;It doesn't mean that I take their ideas without criticism &amp;ndash; there are more bad ones than good ones (which is expected, because they are outside the field, and aren't familiar with the issues). But nonetheless, I would be a lesser developer if I used the fact that these people are non-experts as a reason to dismiss what they had to say.&lt;/p&gt;
&lt;p style=&quot;font-weight: normal; line-height: 1.5em; text-transform: none; margin-top: 5px; margin-right: 5px; margin-bottom: 10px; margin-left: 0px;&quot;&gt;This also often requires translating what the have to say. Non-experts often use terms wrong, have a bad understanding of the way certain concepts work together, and the like. But *my* job is not to use my expertise as a way of beating their ignorance over their heads, but rather to *translate* their conceptualizations of their ideas into full-fledged, implementable ideas. So, rather than using my expertise to knock down, I use it to build up &amp;ndash; to find a way to understand the non-experts in the most gracious light, and find a way for them to be right.&lt;/p&gt;
&lt;p style=&quot;font-weight: normal; line-height: 1.5em; text-transform: none; margin-top: 5px; margin-right: 5px; margin-bottom: 10px; margin-left: 0px;&quot;&gt;Doing so improves us both.&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Wed, 18 May 2011 12:54:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/1/entry/331</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/1/entry/331</guid>
    </item>
    <item>
      <title>Simpler Living / Notes from the Garden - 2011/05/14</title>
      <description>&lt;p&gt;I learned several things this year.&amp;nbsp; First, the &quot;days to harvest&quot; on a seed packet seems to be *after* sprouting, but it never explicitly says that.&amp;nbsp; Second, at least in my garden, I need to give the plants another week or two or three after that.&amp;nbsp; Apparently seed packet writers are optimists.&lt;/p&gt;
&lt;p&gt;Very little of the tomatoes that I intentionally planted have done anything, except the Silvery Fir Tree tomatoes.&amp;nbsp; A few of them are doing well.&amp;nbsp; We went ahead and bought some tomatoes from &lt;a href=&quot;http://www.tomatomansdaughter.com/&quot; target=&quot;_blank&quot;&gt;The Tomato Man's Daughter&lt;/a&gt;.&amp;nbsp; We also have lots of volunteer tomatoes, though I have no idea what variety they are.&lt;/p&gt;
&lt;p&gt;The Mizuna lettuce has *already* bolted and gone to flower.&amp;nbsp; It did not get nearly as thick as the package indicated.&amp;nbsp; The package made it look like it might somewhat make a head, but before any major leaf growth we got flowers.&lt;/p&gt;
&lt;p&gt;We also got bok choi flowers already.&amp;nbsp; I think that's because the bok choi is supposed to be in a cooler zone.&amp;nbsp; I harvested the non-flowering ones and left the flowering ones for seeds, and planted our purchased tomato plants around them.&lt;/p&gt;
&lt;p&gt;The turnips that we planted in the late fall and kept covered with milk jugs through winter are flowering.&amp;nbsp; This might be an easy way to get turnip seeds, and I'm not sure I even need the coverings.&amp;nbsp; This is my first year harvesting turnip seeds (and it was an accident at that), so I'm not quite sure how long I should wait until I harvest the seed pods.&lt;/p&gt;
&lt;p&gt;The peas are doing well.&amp;nbsp; They did well unstaked, except that in a high-wind situation, they fell over.&amp;nbsp; I might just add a single stake or two next year so they can grab onto that instead of getting blown over.&amp;nbsp; It doesn't seem to be hindering production, but who knows.&lt;/p&gt;
&lt;p&gt;The beans are doing very little.&lt;/p&gt;
&lt;p&gt;The leeks from the winter garden look good.&amp;nbsp; I can probably harvest them anytime as I have need for them.&amp;nbsp; I also tasted one of the leaves - yummy!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I pulled up one of our last four garlics from the winter planting.&amp;nbsp; I think they are ready.&lt;/p&gt;
&lt;p&gt;The lettuce has been going gangbuster this year.&amp;nbsp; We are eating very well from a variety of lettuces.&amp;nbsp; I have Simpson Elite, which is doing well, a green Romaine lettuce that is doing well, and a mixed Romaine that is doing well.&amp;nbsp; It seems to only take a few days from when you cut the lettuce to when it grows back!&lt;/p&gt;
&lt;p&gt;The lettuce I ate over winter has bolted and is about to flower.&amp;nbsp; Yay!&amp;nbsp; Not the best-tasting lettuce, but if you can harvest lettuce three times over the winter, I'd say that the lettuce is worth keeping, no matter what it takes.&lt;/p&gt;
&lt;p&gt;I have several sweet potatoes in the ground, and they seem to be doing well, and several more that I need to get in the ground.&lt;/p&gt;
&lt;p&gt;I want to do some guerilla-gardening this year, but need to figure out what to plant.&amp;nbsp; Maybe my sweet potatoes would be a good way to guerilla garden.&lt;/p&gt;
&lt;p&gt;I've been trying my hand at propagation techniques.&amp;nbsp; I tried to propagate a whole bunch of bush/tree type plants using a rooting hormone.&amp;nbsp; The only ones that successfully rooted were the Rosemary bushes.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;My carrots seem to be doing okay, though they are growing very slowly.&lt;/p&gt;
&lt;p&gt;When I harvested my radishes, they were kind of small - I think I need to give them a few more weeks.&amp;nbsp; I left three out for seeds, and they got *huge*.&amp;nbsp; We'll see what next year's stuff looks like.&lt;/p&gt;
&lt;p&gt;My beets were beautiful in the backyard, so I transplanted them to the front yard.&amp;nbsp; Now they are ugly.&amp;nbsp; Go figure.&lt;/p&gt;
&lt;p&gt;My cabbage has started to actually do some growing.&amp;nbsp; It was basically dormant for a while.&lt;/p&gt;
&lt;p&gt;I need to get some pepper seeds and see if germinating them late will give me a decent crop at the proper time.&lt;/p&gt;
&lt;p&gt;It's looking like I'll need to plant a bunch of stuff in three weeks - I should have my peas and beans in, my lettuce will probably have run its course, and my turnip seeds should be harvested.&amp;nbsp; That will open up more than half the garden for new planting.&amp;nbsp; And, I might have gotten my Leeks harvested, too.&lt;/p&gt;</description>
      <author>JB</author>
      <pubDate>Sat, 14 May 2011 18:33:00 +0000</pubDate>
      <link>http://www.bartlettpublishing.com/site/bartpub/blog/5/entry/330</link>
      <guid>http://www.bartlettpublishing.com/site/bartpub/blog/5/entry/330</guid>
    </item>
  </channel>
</rss>

