<?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>TheDarkTrumpet.com</title>
	<atom:link href="http://www.thedarktrumpet.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thedarktrumpet.com</link>
	<description>Programming, Minimalism, Organization</description>
	<lastBuildDate>Wed, 19 May 2010 05:00:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Configuring LeafNode on OSX</title>
		<link>http://www.thedarktrumpet.com/2010/05/configuring-leafnode-on-osx/</link>
		<comments>http://www.thedarktrumpet.com/2010/05/configuring-leafnode-on-osx/#comments</comments>
		<pubDate>Wed, 19 May 2010 05:00:00 +0000</pubDate>
		<dc:creator>TheDarkTrumpet</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://www.thedarktrumpet.com/2010/05/configuring-leafnode-on-osx/</guid>
		<description><![CDATA[Getting LeafNode to work on OSX is a bit of a pain, messing with that today I found that little exists in terms of documentation on how to make this happen.  The real problem isn&#8217;t specifically with the base install of LeafNode, but getting it configured is where the problem is at:
Installing Leafnode:port install [...]]]></description>
			<content:encoded><![CDATA[<p>Getting LeafNode to work on OSX is a bit of a pain, messing with that today I found that little exists in terms of documentation on how to make this happen.  The real problem isn&#8217;t specifically with the base install of LeafNode, but getting it configured is where the problem is at:</p>
<p>Installing Leafnode:<br />port install leafnode</p>
<p>Once leafnode is installed, you have a few commands that you can use at this point:<br />fetchnews &#8211; This will be used to get the listing of groups, which once read, will start pulling the actual documents themselves<br />leafnode &#8211; This can be run a few different ways, but with the macports option it&#8217;s really not a bad idea to run this through launchctl (assuming you&#8217;re on a later version of OSX).</p>
<p>Once it&#8217;s installed, your configuration file that you&#8217;ll need to edit is in /opt/local/etc/leafnode/config.  Most of the stuff in the config.example will help in configuring leafnode.  The important elements that should be edited are:<br />server &#8211; The server name itself<br />username &#8211; Obvious<br />password &#8211; Again, obvious<br />expire &#8211; I personally wanted everything that a newsgroup had, and to continue to fetch as much as possible since I want to be able to search off archived messages.  I set this really high, I&#8217;d recommend the same.<br />hostname &#8211; This can be configured from your newsreader, but I added this as something if I forgot to configure it correctly.<br />maxfetch &#8211; Similar to expire, just sets the max number of initial articles to fetch. I set this insanely high as well.</p>
<p>The plists for launchctl are located in /opt/local/etc/LaunchDaemons/org.macports.leafnode<br />One way to load this right away is:<br />sudo launchctl load /opt/local/etc/LaunchDaemons/org.macports.leafnode/org.macports.leafnode.plist</p>
<p>I&#8217;ve also created a symlink from the above location to /Library/LaunchDaemons<br />cd /Library/LaunchDaemons<br />ln -s /opt/local/etc/LaunchDaemons/org.macports.leafnode/org.macports.leafnode.plist .</p>
<p>At this point, you can use emacs to connect to your server.  Much of the stuff left is to configure your emacs variables.  Some example stuff I use is:</p>
<p>;; GNUS Setup<br />(setq user-mail-address &#8220;youremail@domain&#8221;)<br />(setq user-full-name &#8220;Your Name&#8221;)<br />(setq gnus-select-method &#8216;(nntp &#8220;localhost&#8221;<br />			   (nntp-address &#8220;127.0.0.1&#8243;)<br />			   (nntp-authinfo-file &#8220;~/.authinfo&#8221;)<br />			   (nntp-port-number 119)))</p>
<p>(setq gnus-summary-make-false-root &#8216;dummy)<br />(setq gnus-build-sparse-threads &#8217;some)<br />(setq gnus-fetch-old-headers &#8217;some)</p>
<p>(setq gnus-posting-styles<br />      &#8216;((&#8220;.<b>&#8220;<br />         (signature-file &#8220;~/.signature&#8221;)<br />         (x-url &#8220;<a href="http://www.thedarktrumpet.com/")" target=NEW>http://www.thedarktrumpet.com/&#8221;)</a><br />         (organization &#8220;The Dark Trumpet&#8221;))))</p>
<p>I do have a ~/.authinfo file, but the contents aren&#8217;t that important for leafnode.</p>
<p>In your news reader, or in GNUS, you can get the full newsgroup listing after running the initial fetchnews.  Subscribe and view each newsgroup you want, then rerun the fetchmail again after.  I use:<br />&#8220;fetchmail -v -n&#8221; to accomplish this.</p>
<p>The last thing that really needs to be done is setting up your crontab.  I used the root crontab to do this, using &#8220;crontab -e&#8221; as root, then I have the following line:<br /></b>/60 <b> </b> <b> </b> /opt/local/sbin/fetchnews -v -n</p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedarktrumpet.com/2010/05/configuring-leafnode-on-osx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing focus the &#8220;agile&#8221; way</title>
		<link>http://www.thedarktrumpet.com/2010/05/developing-focus-the-agile-way/</link>
		<comments>http://www.thedarktrumpet.com/2010/05/developing-focus-the-agile-way/#comments</comments>
		<pubDate>Sun, 16 May 2010 05:00:00 +0000</pubDate>
		<dc:creator>TheDarkTrumpet</dc:creator>
				<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://www.thedarktrumpet.com/2010/05/developing-focus-the-agile-way/</guid>
		<description><![CDATA[There is a lot about the Agile project methodology way that I despise, but short term focus goals isn&#8217;t one of them.
First, I should probably introduce the agile methodology.  In project management, there are multiple ways of handling how a project is run.  The agile methodology focuses heavily on minor but often corrections [...]]]></description>
			<content:encoded><![CDATA[<p>There is a lot about the Agile project methodology way that I despise, but short term focus goals isn&#8217;t one of them.</p>
<p>First, I should probably introduce the agile methodology.  In project management, there are multiple ways of handling how a project is run.  The agile methodology focuses heavily on minor but often corrections to a project to help facilitate communication, reduce churn (when something has to be recoded due to requirement changes), and come up with more accurate short-term timelines and less focus on the long term.  I won&#8217;t get into much more about the agile methodology, but the above should sum it up well.</p>
<p>The part I want to focus on is how this develops focus.  When I was talking to my father yesterday, he asked why I am getting rid of stuff and buying less.  I told this it had to do with focus.  In my free time I&#8217;m interested in the following activities: martial arts, art (book binding, drawing and painting), music (playing and listening), reading, programming side projects, doing some work for work, watching some tv/movies, motorcycle riding, language study (writing blogs, learning new languages), and volunteer work.  This doesn&#8217;t even take in account that I&#8217;m a graduate student and work full time.  The reason I mention all this is to really illustrate the worst case of someone who has no focus and does too much.</p>
<p>The agile way comes to the rescue.  I first had to realize that I want to become a master at some stuff and let other stuff fall back a little.  To accomplish this, I am starting (actually did this in the past too) to pick a few things of my interests to focus on for one week.  After the week, I want to spend a bit on Sunday morning in a mini retrospective to come up with ways of improving a bit.</p>
<p>To further sticking to the goals, it&#8217;s helpful to stick all the times one will do stuff on a calendar.  Even when willpower is low, the calendar helps to keep things on track.  It also reinforces the thought that being successful each day.</p>
<p>To give my week plans, I decided to focus on martial arts, language studies, and work reading/coding.  My short term goal is to do this M-F with a retrospective on Sunday.  If all goes well, I&#8217;d like to keep this focus a month.  3 hours each night dedicated to this isn&#8217;t much to ask.</p>
<p>I focused much of this writing as in what my plans were instead of the more generic what could be done because I feel this type of thing isn&#8217;t a known science and is adaptable by the individual.  I would be very interested in hearing your opinions and ideas to improve this.  Please use the comment area below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedarktrumpet.com/2010/05/developing-focus-the-agile-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Minimizing</title>
		<link>http://www.thedarktrumpet.com/2010/04/on-minimizing/</link>
		<comments>http://www.thedarktrumpet.com/2010/04/on-minimizing/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 05:00:00 +0000</pubDate>
		<dc:creator>TheDarkTrumpet</dc:creator>
				<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://www.thedarktrumpet.com/2010/04/on-minimizing/</guid>
		<description><![CDATA[On minimizing&#8230;.
I&#8217;ve been asked before two big questions. The first is why do I work to minimize my possessions/needs, and the second is how does one know when it&#8217;s taken too far?  My goal is to try and answer these questions in a fairly concise way.  The art of minimizing is a fairly [...]]]></description>
			<content:encoded><![CDATA[<p>On minimizing&#8230;.</p>
<p>I&#8217;ve been asked before two big questions. The first is why do I work to minimize my possessions/needs, and the second is how does one know when it&#8217;s taken too far?  My goal is to try and answer these questions in a fairly concise way.  The art of minimizing is a fairly recent one.  Some people who are very well off decided that life is too complex when it comes to how much we own.  Furthermore, movements such as 7-habits, GTD, &#8220;zen&#8221;, and so on &#8211; they all point to a general issue we have in life.  That issue, simply, is that people tend to try and cram more and more things into their life, and need ideas on how to get more done, faster.  I know a number of people who enjoy this thrill of having lots of friends, being more in the limelight, and so on &#8211; in short this sort of life style makes us feel important, needed and so on.  I know people who want to go to meetings and find them helpful if for nothing else likely the reason of feeling important or moving up the corporate chain.</p>
<p>I&#8217;m going to address the first question now &#8211; why did I bother with this?  The reason started some number of years ago, and I&#8217;ll keep the story short.  I used to be, and still am in many ways, a pack rat.  To those who are not familiar with this term, it&#8217;s coined as someone who tends to accumulate possessions and never lets things go.  It&#8217;s a sense of security to have many things, to know that if anything arises, that you&#8217;d have all you needed and wouldn&#8217;t have to depend on anyone else.  This sense of security is why I also gained as much weight as I did in my younger years as well.  About 8 or so years ago, I was introduced to Zen Buddhism, and practiced quite a bit.  After awhile, I learned it&#8217;s not what you do only in meditation that matters, but also what one does outside of the meditation room.  Much of this wisdom came, in part, from Shoken (An abbot from Ryumonji Monastery).  From around that point, I began to heavily question why I needed to own as much as I had, and determined in some ways what I should do about it.</p>
<p>Over the past year and some, I&#8217;ve spent much of my time trying to give/donate and/or sell much of my possessions.  It&#8217;s been one of the hardest things I&#8217;ve had to do, but not really for the usual reasons.  It wasn&#8217;t due to the fact I was inconvenienced from the less number of items, but more from looking at something and saying &#8220;Oh, I remember when I used to have fun with this&#8230;&#8221; sorta feeling.  This happened a lot; but considering I haven&#8217;t seen that particular item in a number of years, it&#8217;s all the more reason why I don&#8217;t need it.  I&#8217;m still working heavily on trying to get rid of other possessions I have.  Random game consoles, computers, TV/couches/etc, DVDs and CDs &#8211; and so on, all are being analyzed and dealt with accordingly.</p>
<p>I&#8217;ve learned of some benefits I&#8217;ve gained from this way of doing things:<br />1. I have greater awareness of when I want something.  This can be in the form of food, or whatever.  In a lot of ways this drive died down a whole lot, but not in all ways (lifts ipad).<br />2. I am able to spend more concentrated time at home.  I used to go elsewhere to concentrate, but find being at home works just as well now.  I spend far less time cleaning, because I have less things to clean up after.  This saves money from the coffee shop, and I really do have a much nicer work area at this point.<br />3. I less often come across stuff saying &#8220;I didn&#8217;t know I had this!&#8221;  As I was cleaning up one area some months ago, this feeling happened a lot.<br />4. I spend more time on activities that matter.  I have an issue where I like to do too much.  I like to keep myself busy, and pride myself on not being bored.  I jump around different activities like a jack rabbit.  Since I removed a lot of areas that I used to do as random activities, and have further plans to remove even more &#8211; I&#8217;m spending far more time perfecting areas that I should have been doing for the past 10 years.  Mostly this relates to martial arts, where at this point I&#8217;m spending a few hours a day working out/practicing.<br />5. I&#8217;ve learned to limit pleasure.  Specifically this came in the form of video games, TV, and chatting on the net.  I&#8217;ve worked at going an entire work week without Internet at home, and that&#8217;s been beneficial for me.  I commonly will go a day or two without net with no issues as well.</p>
<p>I still have far to go though, but I am making good progress</p>
<p>To tackle the second question &#8211; how far is too far?  This specifically came up with a coworker, when I was talking about building a PC (I have too many computers, but am thinking of settling on a PC tower and a MBP &#8211; long story).  Anyways, looking at the data processing I do, he said that going the route of a PC is likely not a bad idea and would help me a lot.  He brought up the idea that he knows I&#8217;m trying to minimize stuff, but when can it be taken too far?</p>
<p>I thought a lot about this question, both from that point, and afterwards.  My initial answer was as follows: You can take it too far once it becomes uncomfortable.  Upon further reflection, this isn&#8217;t entirely accurate of an answer.  The reason being is that if one is comfortable, one really stops growing.  This doesn&#8217;t mean the goal is to be constantly uncomfortable, but more to not be totally comfortable at the same time.  This is a bit tricky because it really depends on the person for when something is taken too far.  For myself, I really haven&#8217;t fully found the answer yet.  I suppose, when I have enough to be happy but enough to not be distracted &#8211; that at that time it&#8217;s on the border of being taken too far.  Does this mean I need that PC, and I should build it?  Perhaps&#8230;but not yet, not until I finish getting rid of all but 1 of my remaining computers.  When I can accomplish the idea of having just my MBP, maybe an ipod/ipod touch, and my ipad &#8211; I&#8217;ll reconsider the PC thing.  I can find many ways of justifying the purchase, but in all actuality, I&#8217;ve gotten by this long without building it for now.</p>
<p>I hope this clarifies a bit about my position on trying to minimize my possessions.  Much of my own story, I feel, is similar to what Siddhartha Gautama Buddha felt around my age some years ago when he left his life of luxury.  Unlike the Buddha, I&#8217;m not really leaving a life of luxury &#8211; but instead trying to cherish fully the stuff I have and to be satisfied with that.  Looking back at all this, I&#8217;m very happy to have gone this far and have much to learn.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedarktrumpet.com/2010/04/on-minimizing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dealing with Introverts &#8211; a guide for extroverts</title>
		<link>http://www.thedarktrumpet.com/2010/04/dealing-with-introverts-a-guide-for-extroverts/</link>
		<comments>http://www.thedarktrumpet.com/2010/04/dealing-with-introverts-a-guide-for-extroverts/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 05:00:00 +0000</pubDate>
		<dc:creator>TheDarkTrumpet</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.thedarktrumpet.com/2010/04/dealing-with-introverts-a-guide-for-extroverts/</guid>
		<description><![CDATA[I hate categories that define people into groups, since things are so complicated &#8211; Over the past few months though I wanted to address issue related to extroverts vs introverts.  The reasoning for this really started from our move to agile &#8211; and specifically &#8220;Agile Bob&#8221; on what he said during one of the [...]]]></description>
			<content:encoded><![CDATA[<p>I hate categories that define people into groups, since things are so complicated &#8211; Over the past few months though I wanted to address issue related to extroverts vs introverts.  The reasoning for this really started from our move to agile &#8211; and specifically &#8220;Agile Bob&#8221; on what he said during one of the social events.  Really from that, I realized really how difficult it really is for people to understand an introvert well.</p>
<p>First let me start by describing what, exactly, an introvert is.  An introvert is someone who is usually claimed as being shy.  An introvert usually has few friends, dislikes large group events, and generally doesn&#8217;t brag about their accomplishments and abilities.  This differs from an extrovert because an introvert needs to have &#8220;alone&#8221; time to really recharge.  What this means is that an introvert likes to spend at least some time by themself doing something they love.</p>
<p>In comparison to extroverts, introverts have as much drive when it comes to their goals in life as extroverts do.  Extroverts like to meet many people, and chat with others &#8211; introverts (depending how much one is) tends to not go out to meet others.  What&#8217;s important to note is that introverts don&#8217;t do this because they dislike others, but because the trust isn&#8217;t there.  An introvert can be mistaken for disliking another person because they don&#8217;t chat personally with the other person &#8211; again, this should not be assumed.  Speaking from myself, I can&#8217;t name one person that I really dislike.  Generally, I feel fairly neutral toward everyone and consider few really friends.  When an introvert doesn&#8217;t speak, it also shouldn&#8217;t be assumed they are annoyed or upset about anything.  As I&#8217;ve mentioned to others &#8211; the more people involved with something, the less an introvert may actually talk.  Speaking from my experience, if the meeting has more than say 4 or so people at it, my participation tanks big time.  With everyone trying to make their point, trying to be right or whatever, I personally don&#8217;t want to be any part of that.  On the other hand, if someone asks for my opinion 1-on-1 or even in a smaller group setting, I&#8217;ll near talk their ear off.  My boss (not my direct supervisor) has a lot of my respect because he understands this point and makes good use of it.</p>
<p>So now that I explained a bit about introverts, how does one handle them?  Before I get into that though &#8211; one thing I want to correct &#8220;Agile Bob&#8221; on is that introverts do not try to avoid being accountable for their actions any more than extroverts do.  Introverts may feel a bit more shy about talking about what they are working on.  Speaking from experience, I really dislike standups in the sense of trying to describe what I&#8217;m doing &#8211; yet I work on a lot more for the office than most see (in my off time &#8211; including 2 projects currently that may end up helping the office a lot &#8211; just few know about them yet).</p>
<p>Ok, so now how to handle an introvert.</p>
<p>1) Don&#8217;t be shy of just going up and talking to one.  This doesn&#8217;t mean infront of everyone asking something personal &#8211; think 1 on 1.  It&#8217;s not that hard, either through IM or just go up to them.  Speaking from experience &#8211; I tend to be very open in how I feel about stuff and that includes my opinion.  I don&#8217;t like being infront of others talking about my opinion unless I&#8217;m extremely passionate about it &#8211; but I still have opinions.</p>
<p>2) During meetings, the more people there are, the less introverts talk.  This isn&#8217;t bad, the solution is simple &#8211; ask questions or give space for introverts to give their opinion.  Frankly the meeting coordinator should do their best to get everyone&#8217;s opinion, but I haven&#8217;t experienced many people who do this worth anything.  Extroverts can easily take up all the space when it comes to giving their opinions on how something can be done.  Again, introverts do have opinions, and the danger one runs into without getting balanced opinions in general is someone just doing it their own way in the end anyways.  This goes for both extroverts and introverts and is just human tendency.  People want their input to feel valuable and their presence to feel valuable.</p>
<p>3) Don&#8217;t expect introverts to go to parties, out to eat with large groups of people, and so on.  Large social gatherings are likely just not an introvert&#8217;s thing.  Speaking for myself, I am more than glad to go out to eat with one or two other people maximum &#8211; but any more than that and I usually pass.  This is why I go for tea with Jeff often, he figured this part out easily.  Greg&#8217;s done a good job with this as well.</p>
<p>Those are the biggies &#8211; but really all this comes down to is communication.  Introverts can have a depth of knowledge, experience, and feelings that most people see the tip of the iceburg when it comes to that.  Introverts tend not to for bonds as easily as extroverts do for more reasons than I can really count.  The important thing to remember is that assumptions in near anything in life is an evil that needs to be watched for.</p>
<p>This only gives a smaller chunk about introverts &#8211; but the most relevant to what I deal with on a day to day basis, so that&#8217;s why I&#8217;m focusing on that more here.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedarktrumpet.com/2010/04/dealing-with-introverts-a-guide-for-extroverts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using the email library Mel with CL</title>
		<link>http://www.thedarktrumpet.com/2010/03/using-the-email-library-mel-with-cl/</link>
		<comments>http://www.thedarktrumpet.com/2010/03/using-the-email-library-mel-with-cl/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 05:00:00 +0000</pubDate>
		<dc:creator>TheDarkTrumpet</dc:creator>
				<category><![CDATA[lisp]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.thedarktrumpet.com/2010/03/using-the-email-library-mel-with-cl/</guid>
		<description><![CDATA[The mel library, if people aren&#8217;t familiar with it, is an extremely nice library for parsing various email sources.  I started using this as a bit of a project to pull in emails to my central search store.  I was extremely surprised how well done this library was &#8211; although I admit the [...]]]></description>
			<content:encoded><![CDATA[<p>The mel library, if people aren&#8217;t familiar with it, is an extremely nice library for parsing various email sources.  I started using this as a bit of a project to pull in emails to my central search store.  I was extremely surprised how well done this library was &#8211; although I admit the documentation is a bit rough around the edges.</p>
<p>So first, if you want to install this you can either install via asdf, likely clbuild, or just grab the darcs repository.  Personally I had problems with the asdf install so I went with the stable darcs repo instead.  For my install I&#8217;ve done the following:</p>
<p>cd /usr/lib/sbcl/site<br />
darcs clone <a href="http://common-lisp.net/project/mel-base/darcs/mel-base/" target="NEW">http://common-lisp.net/project/mel-base/darcs/mel-base/</a><br />
cd ../site-systems<br />
ln -s /usr/lib/sbcl/site/mel-base/mel-base.asd .</p>
<p>The one problem I&#8217;ve found is that there is little documentation out there, but we can create some to give a starting point at the very least.</p>
<p>cd /usr/lib/sbcl/site/mel-base/docs/manual<br />
texi2pdf mel.texinfo</p>
<p>You&#8217;ll get a mel.pdf if you have texinfo installed.</p>
<p>I will concentrate a bit on using Maildir, since that&#8217;s kinda what I was starting with.  You connect to a Maildir directory by the following:</p>
<p>(defvar <strong>inbox</strong> (make-maildir-folder &#8220;/home/dthole/Maildir/&#8221;))</p>
<p>Form there, you can run quite a few things. The most notable ones around are the functions:</p>
<p>messages<br />
map-messages</p>
<p>messages itself, as the docs describe it, will return all the messages. This is fairly helpful, but the real power comes from map-messages.  With map-messages, we can pass a function to evaluate from each message that&#8217;s processed.  Some sample code of what I&#8217;ve done to determine specific email from/to is the following:</p>
<pre>(defun mapMessageTest ()
  "From the map-messages, we're given an object, and we can call methods on that."
  (let ((num-ui-froms 0)
        (num-to-greg 0))
    (map-messages #'(lambda (x)
                      (if (scan "foo@bar.com" (address-spec (from x)))
                          (incf num-ui-froms))
                      (if (and (to x) (scan "bar@foo.com" (address-spec
                                                            (if (listp (to x))
                                                            (car (to x))
                                                            (to x)))))
                          (incf num-to-greg)))
                  *inbox*)
    (format t "Num from foo@bar.com: ~a~%" num-ui-froms)
    (format t "Num to bar@foo.com: ~a~%" num-to-greg)))</pre>
<p>So what I&#8217;m doing here is passing an anonymous function that does two if conditions.  x in this case is an message CLOS-type object from mel.  We can call (from), (to), (message-string) and so on.  Many of these aren&#8217;t documented, but the code is there.  Anyways, the one curious part people may notice is the issue related to the (address-spec (if ..)) section.  The to address can contains a list of elements, if you have more than one email, since you can have multiple tos in an email.  I check to say if it&#8217;s a list, then get the first element else just return the element.  All this is doing is creating two counters and outputting the result at the end.</p>
<p>Another function I mentioned just breifly a bit ago is (message-string).  There are a lot of message-* functions out there, this one returns the text of the email.</p>
<p>One big reason why I enjoy this library is the caching it does.  I found from my testing that going through 14k emails in my MailDir folder took about 10 seconds or so.  Subsequent calls to (mapMessageTest) was MUCH quicker, taking less than a second.  There&#8217;s some interesting caching the library implemented that&#8217;s really helpful while in the REPL.  I haven&#8217;t looked at the code yet for this, but I&#8217;m excited to do it.</p>
<p>The reason I&#8217;m finding to use this library is to do some recognition on the emails and copy them to another area on disk.  This discussion on documentation and search will be in a later blog article.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedarktrumpet.com/2010/03/using-the-email-library-mel-with-cl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parsing dirty data in Common Lisp</title>
		<link>http://www.thedarktrumpet.com/2010/03/parsing-dirty-data-in-common-lisp/</link>
		<comments>http://www.thedarktrumpet.com/2010/03/parsing-dirty-data-in-common-lisp/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 05:00:00 +0000</pubDate>
		<dc:creator>TheDarkTrumpet</dc:creator>
				<category><![CDATA[emacs]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.thedarktrumpet.com/2010/03/parsing-dirty-data-in-common-lisp/</guid>
		<description><![CDATA[I came across a bit of an issue today when I was building a parser in Common Lisp.  Basically when I saved my archive folder in Outlook to a giant text file, I would like to parse through each individual email (there are over 8000), and save them to an individual file, on the [...]]]></description>
			<content:encoded><![CDATA[<p>I came across a bit of an issue today when I was building a parser in Common Lisp.  Basically when I saved my archive folder in Outlook to a giant text file, I would like to parse through each individual email (there are over 8000), and save them to an individual file, on the hard disk.  Later I would integrate this with an option with fetchmail to pull in those emails as well into the same folder structure which would then be indexed by DevonThink as an external folder.  A bit of a long story, and I plan to write more about it &#8211; but for now, what about trying to parse dirty data in common lisp?</p>
<p>There are a few options about how to clean up dirty data.  I came across two differnet options with what I was doing:</p>
<p>1.  <strong>Just pull the readable data &#8211; using NIL for the other bits of data</strong><br />
The advantage of doing this is that it&#8217;s really fast.  You just make a little different call to (with-open-file) and you effectively skip the data that&#8217;s not readable.  There are a lot of disadvantages to this approach, mainly your data isn&#8217;t going to be near like you may have wanted it to be originally.  Bullet points, for example, could be translated to a -.  This method, though, will make it NIL, or empty.  For my case this was OK, I didn&#8217;t really care about the translation of this bit of data &#8211; I was interested more in the overall theme of the email rather than the specific formatting.</p>
<p>To accomplish this, you can make use something like the following:</p>
<p>(with-open-file (stream <strong>parse-file</strong> :external-format :latin1)<br />
&#8230;.)</p>
<p>Thanks to nikodemus on Freenode for this information.</p>
<p>2.  <strong>Clean up the data</strong></p>
<p>Emacs gives a fairly nice way of handling this, well kinda.  When you load the questionable file, you can type C-x RET f, and set the file encoding.  I used utf-8-unix at first.  Form that, save the file.  You should be presented with a warning saying that some stuff can&#8217;t be encoded with that file system, blah blah, blah.  You can see a listing, a minor list anyways, of characters that it&#8217;s complaining about.  Cancel the save with C-g, switch to the warning buffer with C-x o and copy each individual character (C-space right arrow C-w).  You can either hit enter at this point to view the first occurance of that character, or you can go to the original buffer and search. Once you made your determination of what that encoding char should be, simply hit M-&lt; to go to the beginning, type M-x string-replace, C-y to insert that character, hit enter, then your substitution character of your wish.  It&#8217;ll replace all occurances in that buffer with what you want. From there, rinse and repeat for the others.</p>
<p>The obvious disadvantage of this is it&#8217;ll take much longer to accomplish the task.  The advantage is that you&#8217;ll end up with a sane file in the end.  I started with this method, but went with method 1 in the end.</p>
<p>The one part I couldn&#8217;t figure out how to do, and I&#8217;ll likely post an update once I get this answered is when you&#8217;re trying to save the buffer with overriding the encoding system &#8211; it saves it as raw-text-unix, regardless of what I picked.  Given an override, the warning states that I&#8217;d just lose those characters, which I was OK with.  I&#8217;ll try to find out more and post later.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedarktrumpet.com/2010/03/parsing-dirty-data-in-common-lisp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compiling Ruby on Arch</title>
		<link>http://www.thedarktrumpet.com/2010/03/compiling-ruby-on-arch/</link>
		<comments>http://www.thedarktrumpet.com/2010/03/compiling-ruby-on-arch/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 07:00:00 +0000</pubDate>
		<dc:creator>TheDarkTrumpet</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.thedarktrumpet.com/2010/03/compiling-ruby-on-arch/</guid>
		<description><![CDATA[There are a few ways of dealing with Ruby/Rails on arch linux.  There is a AUR entry for ruby, for 1.8.  The default for pacman is 1.9.  For my office, we were stuck with 1.8 for the most part so I decided to install by source (AUR may have been easier, but [...]]]></description>
			<content:encoded><![CDATA[<p>There are a few ways of dealing with Ruby/Rails on arch linux.  There is a AUR entry for ruby, for 1.8.  The default for pacman is 1.9.  For my office, we were stuck with 1.8 for the most part so I decided to install by source (AUR may have been easier, but I don&#8217;t know it very well so I didn&#8217;t use it right now but may later &#8211; I do like being frozen at this version for work purposes though&#8230;)</p>
<p>To install it the way I did  is fairly simple, all you need to do is:</p>
<p>wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p249.tar.bz2<br />
tar -xjvf ruby-1.8.7-p249.tar.bz2<br />
./configure &#8211;prefix=/usr &#8211;enable-shared &#8211;enable-pthread<br />
make &amp;&amp; make install</p>
<p>For the prefix, I know it&#8217;s usually customary to keep things in /usr/local.  For my purpose, I didn&#8217;t do that because I had a lot of gems already installed (as well as rubygems itself) and they were in that location from the arch install that I did for 1.9.  If you prefer it in /usr/local, just change the configure prefix option above.</p>
<p>The tricky part that I ran into so much was the &#8211;enable-shared and &#8211;enable-pthread options.  Without those, our rake test task just would randomly die with an error such as:</p>
<p>note: ruby[5998] exited with preempt_count 1<br />
BUG: scheduling while atomic: ruby/5998/0&#215;10000002<br />
Modules linked in: ipv6 vmsync vmmemctl vmblock vmhgfs ext2 mbcache snd_seq_dummy fan snd_seq_oss snd_seq_midi_event snd_seq snd_ens1371 snd_pcm_oss gameport s<br />
nd_rawmidi snd_seq_device snd_ac97_codec ac97_bus snd_pcm snd_mixer_oss parport_pc uhci_hcd pcnet32 snd_timer battery vmxnet ppdev ehci_hcd snd soundcore snd_p<br />
age_alloc mii usbcore container ac shpchp pci_hotplug i2c_piix4 intel_agp lp i2c_core processor button thermal psmouse pcspkr parport serio_raw evdev sg rtc_cm<br />
os rtc_core rtc_lib reiserfs sr_mod cdrom pata_acpi ata_generic sd_mod floppy ata_piix libata mptspi mptscsih mptbase scsi_transport_spi scsi_mod<br />
Pid: 5998, comm: ruby Tainted: G      D W  2.6.32-ARCH #1<br />
Call Trace:<br />
[] ? thread_return+0&#215;666/0&#215;7ae<br />
[] ? __cond_resched+0&#215;1d/0&#215;30<br />
[] ? _cond_resched+0&#215;2e/0&#215;40<br />
[] ? unmap_vmas+0&#215;8e1/0xaa0<br />
[] ? vt_console_print+0&#215;7c/0&#215;330<br />
[] ? exit_mmap+0xc6/0&#215;1d0<br />
[] ? mmput+0&#215;32/0xf0<br />
[] ? exit_mm+0xfa/0&#215;140<br />
[] ? do_exit+0&#215;136/0&#215;7c0<br />
[] ? printk+0&#215;40/0&#215;45<br />
[] ? release_console_sem+0&#215;1b0/0&#215;200<br />
[] ? oops_end+0xa3/0xf0<br />
[] ? no_context+0xfa/0&#215;260<br />
[] ? HgfsDirOpen+0&#215;0/0&#215;30 [vmhgfs]<br />
[] ? page_fault+0&#215;25/0&#215;30<br />
[] ? task_rq_lock+0&#215;3a/0xa0<br />
[] ? try_to_wake_up+0&#215;58/0&#215;330<br />
[] ? __mutex_unlock_slowpath+0xa1/0&#215;150<br />
[] ? HgfsDirLlseek+0&#215;98/0xe0 [vmhgfs]<br />
[] ? sys_lseek+0&#215;6e/0&#215;90<br />
[] ? system_call_fastpath+0&#215;16/0&#215;1b<br />
stack segment: 0000 [#10] PREEMPT SMP<br />
&#8230;..</p>
<p>The part that convinced me of the issue was the line &#8220;scheduling while atomic&#8221;, which implied it was trying to spawn off another process of sorts and I went hunting around the AUR repository and found the right compile flags that worked. <a href="http://aur.archlinux.org/packages/ruby1.8/ruby1.8/PKGBUILD" target="NEW">http://aur.archlinux.org/packages/ruby1.8/ruby1.8/PKGBUILD</a></p>
<p>Overall I was pretty happy that this fix worked &#8211; and I&#8217;m very curious if we had only one CPU/core, would this have been an issue?  I&#8217;m not willing to disable it on my virtual machine to find out though.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedarktrumpet.com/2010/03/compiling-ruby-on-arch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CouchDB on Arch Linux</title>
		<link>http://www.thedarktrumpet.com/2010/03/couchdb-on-arch-linux/</link>
		<comments>http://www.thedarktrumpet.com/2010/03/couchdb-on-arch-linux/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 05:00:00 +0000</pubDate>
		<dc:creator>TheDarkTrumpet</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.thedarktrumpet.com/?p=52</guid>
		<description><![CDATA[CouchDB on Arch was a bit of a pain to get working.  I wanted to share my thoughts on how I got it to work and hopefully that&#8217;ll help solve a few people&#8217;s similar problems.
First, I couldn&#8217;t find a prebuilt package within arch (pacman) so we had to go totally by source of couchdb, [...]]]></description>
			<content:encoded><![CDATA[<p>CouchDB on Arch was a bit of a pain to get working.  I wanted to share my thoughts on how I got it to work and hopefully that&#8217;ll help solve a few people&#8217;s similar problems.</p>
<p>First, I couldn&#8217;t find a prebuilt package within arch (pacman) so we had to go totally by source of couchdb, to make this work.  You can do it by the following steps:</p>
<p>1. Install Pacman Dependencies<br />   pacman -S gcc make erlang extra/icu spidermonkey automake autoconf curl<br />2. Download the source code from the web site: </p>
<p><a href="http://www.apache.org/dyn/closer.cgi?path=/couchdb/0.10.1/apache-couchdb-0.10.1.tar.gz" target=NEW>http://www.apache.org/dyn/closer.cgi?path=/couchdb/0.10.1/apache-couchdb-0.10.1.tar.gz</a></p>
<p>3. Unpack the source code: tar -xzvf apache-couchdb-0.10.1.tar.gz<br />4. cd into the directory and run ./configure &#8211;prefix=/<br />5. Run make and make install</p>
<p>What you&#8217;ll notice is that if you don&#8217;t run the above prefix, it goes into strange places, such as /usr/local/rc.d, which complicated matters when it came to finding the install locations for everything.  If you already tried to install it, just cd back into the directory at step 4 and run &#8220;make uninstall&#8221; which will clean it all out first, then rerun configure, make and make install listed above.</p>
<p>You&#8217;ll notice that if you run /etc/rc.d/couchdb start, it won&#8217;t exactly work. This is because it wants a couchdb user, so lets create that:</p>
<p>useradd -s /bin/couchdb</p>
<p>But&#8230;it&#8217;s still not happy!  Well, now we have permission issues.  First we should fix the permissions:</p>
<p>chown -R couchdb:root /var/log/couchdb<br />chown -R couchdb:root /var/lib/couchdb</p>
<p>This should get you up and running smoothly at least with the basics, but there was one more thing I ran into, and that&#8217;s when running ps aux, the paths now have double front-slashes infront of everything.  This is OK to my understanding, but you can edit /etc/rc.d/couchdb, and remove the double front-slashes as you see fit.</p>
<p>Now, you should be able to run /etc/rc.d/couchdb start successfully.  You should notice some output like the following similar output, if you see only one process and a sleep then there&#8217;s a problem:</p>
<p>[root@tdtdev lib]# ps aux | grep -i &#8216;couchdb&#8217;<br />couchdb   1942  0.0  0.1  13544  1748 pts/3    S    16:38   0:00 /bin/sh -e /bin/couchdb -a \&#8221;//etc/couchdb/default.ini\&#8221; -a \&#8221;//etc/couchdb/local.ini\&#8221; -b -r 5 -p //var/run/couchdb/couchdb.pid -o /dev/null -e /dev/null -R<br />couchdb   1959  0.0  0.0  13544  1012 pts/3    S    16:38   0:00 /bin/sh -e /bin/couchdb -a \&#8221;//etc/couchdb/default.ini\&#8221; -a \&#8221;//etc/couchdb/local.ini\&#8221; -b -r 5 -p //var/run/couchdb/couchdb.pid -o /dev/null -e /dev/null -R<br />couchdb   1960  0.0  1.3 169508 13708 pts/3    Sl   16:38   0:00 /usr/lib/erlang/erts-5.7.3/bin/beam.smp -Bd -K true &#8212; -root /usr/lib/erlang -progname erl &#8212; -home /home/couchdb -noshell -noinput -smp auto -sasl errlog_type error -pa //lib/couchdb/erlang/lib/couch-0.10.1/ebin //lib/couchdb/erlang/lib/mochiweb-r97/ebin //lib/couchdb/erlang/lib/ibrowse-1.5.2/ebin //lib/couchdb/erlang/lib/erlang-oauth/ebin -eval application:load(ibrowse) -eval application:load(oauth) -eval application:load(crypto) -eval application:load(couch) -eval crypto:start() -eval ssl:start() -eval ibrowse:start() -eval couch_server:start([ "//etc/couchdb/default.ini", "//etc/couchdb/local.ini", "//etc/couchdb/default.ini", "//etc/couchdb/local.ini"]), receive done -> done end. -pidfile //var/run/couchdb/couchdb.pid -heart<br />couchdb   1969  0.0  0.0   3668   480 ?        Ss   16:38   0:00 heart -pid 1960 -ht 11</p>
<p>So a total of 4 processes.  You should also be able to visit your local URL too:</p>
<p><a href="http://127.0.0.1:5984/" target=NEW>http://127.0.0.1:5984/</a></p>
<p>If you&#8217;re still having problems after this, some things I&#8217;ve done is edited /etc/rc.d/couchdb as mentioned above, as well as /etc/couchdb/default.ini to remove the double slashes from there. </p>
<p>I hope this helps, it took a bit to really get it here.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedarktrumpet.com/2010/03/couchdb-on-arch-linux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Beginning Clojure</title>
		<link>http://www.thedarktrumpet.com/2010/03/beginning-clojure/</link>
		<comments>http://www.thedarktrumpet.com/2010/03/beginning-clojure/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 05:00:00 +0000</pubDate>
		<dc:creator>TheDarkTrumpet</dc:creator>
				<category><![CDATA[clojure]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.thedarktrumpet.com/?p=53</guid>
		<description><![CDATA[I&#8217;ve recently begun to dabble in Clojure, a rising project with a fair bit of drive behind it.  In a lot of ways it kinda reminds me of the Rails drive, in that the project itself is changing quite rapidly and a number of new people are joining the ranks fairly quickly.  First, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently begun to dabble in Clojure, a rising project with a fair bit of drive behind it.  In a lot of ways it kinda reminds me of the Rails drive, in that the project itself is changing quite rapidly and a number of new people are joining the ranks fairly quickly.  First, it&#8217;s worth mentioning what Clojure is &#8211; incase you haven&#8217;t heard of this before.  Clojure can be defined as a lisp-like language that sits on top of the JVM.  The purpose of it is to give the power that Java has in terms of concurrency and libraries and combine it with the best features of Common Lisp, without including &#8220;ugly-aspects&#8221; of the lisp history (extremely subjective&#8230;)</p>
<p>Common Lisp was pretty much the first language I&#8217;ve ever used that I actually fell in love with.  There are many things that Common Lisp supports; including a REPL for interactive programming, extremely flexible error handling (restart case, handler case), macros, the multi-paradigm universe, and so on.  I&#8217;ve found it extremely difficult to really think in a functional way when programming in PHP, Ruby, Python, and so on.  Most of my programming, therefore, was done in Common Lisp because it feels cleaner and more simple.  Clojure, though, I am finding is a nice balance point that Lisp has a difficulty meeting when it comes to being applicable to the masses.  It includes much of the benefits of Lisp, but gives the options to call Java code too.  Clojure feels also a little more on the functional side than Common Lisp does in a lot of aspects, or at least the presentation feels to lend itself more toward the functional aspect anyways.</p>
<p>Clojure&#8217;s project page can be located here: <br /><a href="http://clojure.org/" target=NEW>http://clojure.org/</a></p>
<p>Using Clojure is fairly simple and straightforward.  There are currently 3 books (that I&#8217;ve seen) for this language that talk about syntax, setup, and so on.  The one book I decided upon was Programming Clojure, from the Pragmatic Studios.  The book is fairly cheap and is of decent quality.  You can find a link to it here: </p>
<p><a href="http://www.pragprog.com/titles/shcloj/programming-clojure" target=NEW>http://www.pragprog.com/titles/shcloj/programming-clojure</a></p>
<p>There are many editors that support Clojure development, with plugins.  Each one of them have different ways of being setup.  Personally I settled upon using Emacs and Slime because that&#8217;s what I use for my Common Lisp development, and not having to change development environments is <b>really</b> helpful for me.  Emacs and Slime may be a bit of a jump for many people, so there are many options when it comes to editors out there. Netbeans with Enclojure was well recommended from my searches.  Textmate also has a LISP mode (but it doesn&#8217;t have the REPL &#8211; I really recommend not using it for serious development).  </p>
<p>Clojure is also fairly simple to setup, as long as you find a good guide for doing so.  Unfortunately there are many ways to setup Clojure and at a minimum you need JDK, ant, and so on &#8211; but this may differ significantly depending on your editor of choice.  Emacs with slime offers an option in Emacs 23.X, for automated installed from using ELPA.  To be honest, and I really hated this option, setting up this all by ELPA was probably the most simple.  Your jar files are downloaded automagically to the ~/.swank-clojure directory and things are magically setup.  If you use emacs 23.X and don&#8217;t currently do common lisp development, then this will work well.  If you want to build stuff manually, and aren&#8217;t using emacs then your best bet is to get maven &#8211; then build your clojure .jar files accordingly.  You can find detailed directions on building it on Ubuntu here: </p>
<p><a href="http://riddell.us/ClojureOnUbuntu.html " target=NEW>http://riddell.us/ClojureOnUbuntu.html </a></p>
<p>If you decide to use Emacs, this video has been helpful from my perspective: </p>
<p><a href="http://www.bestinclass.dk/index.php/2009/12/clojure-101-getting-clojure-slime-installed/" target=NEW>http://www.bestinclass.dk/index.php/2009/12/clojure-101-getting-clojure-slime-installed/</a></p>
<p>For general clojure development, there are a few areas that I find extremely helpful is leiningen.  Essentially what this tool does is give you a working directory that makes clojure development a bit easier.  There&#8217;s little I can say that the project page doesn&#8217;t say better &#8211; so you should visit this: </p>
<p><a href="http://github.com/technomancy/leiningen" target=NEW>http://github.com/technomancy/leiningen</a></p>
<p>One last thing I&#8217;ll add is if you do Common Lisp development as well. If you do, some time may be sunk into trying to figure out how to make that work.  Following the directions in the video you&#8217;d be left with an (eval-after-load &#8220;slime) block.  In there, add something like: (add-to-list &#8217;slime-lisp-implementations &#8216;(sbcl (&#8220;/usr/bin/sbcl&#8221;))), then run slime by hitting M&#8211; (hold meta hit dash), M-x and type slime.  You should get a prompt that asks you what lisp, type &#8220;sbcl&#8221; then enter.  The other issue I want to bring up is CVS version of swank/slime don&#8217;t work with clojure.  You should get git://github.com/technomancy/slime.git instead.  Note that if you use ELPA to install clojure and deps, it will already install parts of the compatible slime.  Running M&#8211; M-x slime, sbcl will generate errors about not being able to find source .lisp files.  You can fix this by going into the .emacs.d/elpa/slime-../ directory and copying all the .lisp contents from the slime checkout from technomancy into this directory.  If you find a cleaner way of accomplishing this, without separate .emacs conf files, please add a comment.</p>
<p>Clojure is a bit of a handful to get started on, but if you find yourself having problems I&#8217;d check the google groups group for clojure, and #clojure on freenode IRC.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedarktrumpet.com/2010/03/beginning-clojure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CL-SQL fun with wordnet</title>
		<link>http://www.thedarktrumpet.com/2009/11/cl-sql-fun-with-wordnet/</link>
		<comments>http://www.thedarktrumpet.com/2009/11/cl-sql-fun-with-wordnet/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 00:00:00 +0000</pubDate>
		<dc:creator>TheDarkTrumpet</dc:creator>
				<category><![CDATA[lisp]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.thedarktrumpet.dreamhosters.com/?p=22</guid>
		<description><![CDATA[Common Lisp surprises me more and more each and every day. I never thought of using it for SQL interaction, but the adventures of CL-SQL for my linguistics class lately really opened my eyes.
CL-SQL is an ORM, like that of ActiveRecord, Django&#8217;s ORM, and so on. It leans a little more toward the SQL Alchemy [...]]]></description>
			<content:encoded><![CDATA[<p>Common Lisp surprises me more and more each and every day. I never thought of using it for SQL interaction, but the adventures of CL-SQL for my linguistics class lately really opened my eyes.</p>
<p>CL-SQL is an ORM, like that of ActiveRecord, Django&#8217;s ORM, and so on. It leans a little more toward the SQL Alchemy side of things, though. I will likely provide a much more detailed tutorial later once I get a general understanding of this library &#8211; but for now I&#8217;ll provide a bit for links on where to find more information:</p>
<p>CLSQL Main Site: <a href="http://clsql.b9.com/ " target="NEW">http://clsql.b9.com/ </a><br />
Script I learned a lot from: <a href="http://www.boundp.net/files/weblog.lisp " target="NEW">http://www.boundp.net/files/weblog.lisp </a><br />
Github post of my wordnet stuff: <a href="http://gist.github.com/244360 " target="NEW">http://gist.github.com/244360 </a></p>
<p>Now for a bit of information about wordnet. I&#8217;m currently in a computational linguistics course at the university, and part of the class is to develop a project of sorts. Mine relates to the use of wordnet, which is a fairly complicated database. Basically, wordnet was developed by Princeton, that has a fairly large set of words and their definitions, synonyms, hypernyms, hyponyms, and so on. In sort, it shows a lot of ways that one word relates to another word in various ways. I found a web site that had the MSSQL files for Wordnet, which I downloaded and attached. Along with that, a number of example view code that I modified to add to a listing of views. Since I do my development, most of the time, on Linux &#8211; I decided to get ODBC setup to the MSSQL server. CL-SQL works beautifully with this setup. The gist above shows the details.</p>
<p>For the SQL Server database I got, you can view the information here: <a href="http://opensource.ebswift.com/WordNetSQLServer/ " target="NEW">http://opensource.ebswift.com/WordNetSQLServer/ </a></p>
<p>I will likely provide more information as I go with this, as I&#8217;m finding wordnet more and more fun to mess with.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedarktrumpet.com/2009/11/cl-sql-fun-with-wordnet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.439 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-09-04 11:01:42 -->
