<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8952753915088677199</id><updated>2011-08-03T23:27:34.417-04:00</updated><category term='practice'/><category term='gift economy'/><category term='commons'/><category term='bad elf'/><category term='acceptance'/><category term='erlang'/><category term='software'/><category term='programming'/><category term='concerts'/><category term='bull spec'/><category term='the man in the mirror'/><category term='illustration'/><category term='whiteboarding'/><category term='aether age'/><category term='fail'/><category term='code'/><category term='rejection'/><category term='go'/><category term='gear'/><category term='writing'/><category term='lyrics'/><category term='progress'/><title type='text'>montsamu musings</title><subtitle type='html'>media, modernity, and microcode from your average farmer-turned-programmer</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-5785503131895204808</id><published>2010-06-01T19:54:00.000-04:00</published><updated>2010-06-01T19:54:20.595-04:00</updated><title type='text'>Whew.</title><content type='html'>Well, the past couple of months have been mostly family, friends, work, and &lt;a href="http://bullspec.com/"&gt;Bull Spec&lt;/a&gt;. But here's something which is just enough that I'd like to note it here:&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://52stitches.blogspot.com/2010/05/man-in-mirror.html"&gt;My story, "The Man in the Mirror", is now up at Fifty-Two Stitches Dark Flash Fiction.&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-5785503131895204808?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/5785503131895204808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=5785503131895204808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/5785503131895204808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/5785503131895204808'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2010/06/whew.html' title='Whew.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-5659489401213321204</id><published>2010-04-11T15:00:00.000-04:00</published><updated>2010-04-11T15:00:18.211-04:00</updated><title type='text'>Places to write in RTP: Observation Park at RDU.</title><content type='html'>Observation Park at RDU Airport is a pretty nice place to write because:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;No WiFi (no distractions)&lt;/li&gt;&lt;li&gt;Large steel birds which should be flightless nonetheless soar and land with grace&lt;/li&gt;&lt;li&gt;Air Traffic Control Chatter on the speakers&lt;/li&gt;&lt;li&gt;There's a bathroom&lt;/li&gt;&lt;li&gt;There are details on small aircraft to read, like flight range, capacity, fuel consumption, etc.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-5659489401213321204?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/5659489401213321204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=5659489401213321204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/5659489401213321204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/5659489401213321204'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2010/04/places-to-write-in-rtp-observation-park.html' title='Places to write in RTP: Observation Park at RDU.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-9065033888632166963</id><published>2010-04-10T15:44:00.001-04:00</published><updated>2010-04-10T15:46:49.154-04:00</updated><title type='text'>Wow. It's been a while.</title><content type='html'>If for some bizarre reason you're here instead of the &lt;a href="http://bullspec.blogspot.com/"&gt;BULL SPEC blog&lt;/a&gt;, head over there for some fun news:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://bullspec.blogspot.com/2010/04/bull-spec-1-pdf-available-at-pay-what.html"&gt;Creative Commons licensed, pay-what-you-like PDF version of BULL SPEC #1 is available&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;BULL SPEC #1 is now available at a bunch of stores, the latest of which is the Cary Barnes &amp;amp; Noble.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;And some stuff that doesn't really go over there: two video "reviews" (more like previews or surveys or whatever):&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=zS-wCmavgDI"&gt;Crossed Genres #16 "Steampunk"&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=i2q9BJkv1p0"&gt;Folded Word's Heron2&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-9065033888632166963?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/9065033888632166963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=9065033888632166963' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/9065033888632166963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/9065033888632166963'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2010/04/wow-its-been-while.html' title='Wow. It&apos;s been a while.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-5498023165866818330</id><published>2009-12-19T22:00:00.004-05:00</published><updated>2009-12-29T11:19:25.624-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='commons'/><title type='text'>The tools for the commons are ready.</title><content type='html'>&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;When getting ready to launch &lt;a href="http://bullspec.com/"&gt;BULL SPEC&lt;/a&gt;, there were a lot of questions about the tools available to use in producing the e-books and audiobooks. Could I afford top end audio recording software, professional desktop publishing software, vector graphic software, and so on; were the open source versions really ready?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;The open source tools are more than ready.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;When I first tried using &lt;a href="http://audacity.sourceforge.net/"&gt;Audacity&lt;/a&gt;&amp;nbsp;some years ago, it was not. (At least it didn't play nicely with my Firewire DAW hardware and recording stereo tracks the way that higher-end software did.) Faced with the choice of having used up my month of evaluation of the quite excellent Reaper and either registering or being a jerk to their licensing wishes, I decided to give Audacity another good try. Having just laid down a few test tracks with Audacity 1.3.10 I'm amazed at how far this software has come. I don't come close to pushing the edges of it (I don't use any transforms, plugins, etc. as this is handled mostly in hardware for me) but it handles my narration needs like a champion. And, thanks to recent updates, it even handles my multichannel recording needs (guitar L+R, voice, synth, etc.).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;When I started working with the printer for the magazine version of BULL SPEC, they gave me a list of settings for Adobe inDesign. Now, I haven't used desktop publishing since Pagemaker. The &lt;i&gt;original&lt;/i&gt;&amp;nbsp;Pagemaker on the &lt;i&gt;original&lt;/i&gt;&amp;nbsp;Macintosh. (Shout out to the other editors of the Marion High School student paper!) I told them I'd like to give &lt;a href="http://www.scribus.net/"&gt;Scribus&lt;/a&gt;&amp;nbsp;a try. They'd never heard of it.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;Scribus was a bit rough around the edges in places in past versions, though solidly functional it zigged where inDesign zagged. Lots of things have changed for 1.3.5, and while some of the terminology changes (templates to "Master Pages" for example) make following the tutorial a bit challenging, 1.3.5 is ready for prime time, with the features I needed most and outputting in the format my printer needed. (Bleeds, crop marks, embedded fonts, specific color scheme, etc.)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;I've used &lt;a href="http://camstudio.org/"&gt;CamStudio&lt;/a&gt;&amp;nbsp;(GPL screen recording software) with great success both in professional and amateur capacities.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;a href="http://www.inkscape.org/"&gt;Inkscape&lt;/a&gt;&amp;nbsp;is an amazing vector graphics tool.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;And I have never even used &lt;a href="http://www.blender.org/"&gt;Blender&lt;/a&gt;&amp;nbsp;or &lt;a href="http://www.gimp.org/"&gt;Gimp&lt;/a&gt;&amp;nbsp;yet. Blender is up next. Video interviews and reviews podcasts? Yeah. I'm insane. No way I have time for this.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-5498023165866818330?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/5498023165866818330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=5498023165866818330' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/5498023165866818330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/5498023165866818330'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2009/12/tools-for-commons-are-ready.html' title='The tools for the commons are ready.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-4632615692526760218</id><published>2009-12-14T12:15:00.000-05:00</published><updated>2009-12-14T12:15:20.819-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bull spec'/><category scheme='http://www.blogger.com/atom/ns#' term='bad elf'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Holy updates!</title><content type='html'>Note the first: the wonderful Thaumatrope is publishing my holiday-themed serial "Bad Elf: A Dark Christmas Serial (Killer)" both on &lt;a href="http://twitter.com/thaumatrope"&gt;Twitter&lt;/a&gt; and the &lt;a href="http://thaumatrope.greententacles.com/serials/BadElf/"&gt;website&lt;/a&gt;. This is a whole lot of fun; huge personal thanks to Mr. Lilly for working me through a month of rewrites to get it into a format that both Twitter and I can be happy with, and I hope at least a few people are amused.&lt;br /&gt;&lt;br /&gt;Note the second:&lt;a href="http://www.bullspec.com/order"&gt; BULL SPEC #1 is now open for pre-orders&lt;/a&gt;. Source code available to the Google App Engine to Paypal ExpressCheckout bridge over at &lt;a href="http://github.com/montsamu/bullspec/blob/master/bullpay.py"&gt;GitHub&lt;/a&gt;.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-4632615692526760218?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/4632615692526760218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=4632615692526760218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/4632615692526760218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/4632615692526760218'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2009/12/holy-updates.html' title='Holy updates!'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-3692462811237568120</id><published>2009-12-08T09:21:00.008-05:00</published><updated>2009-12-08T11:13:03.927-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gift economy'/><category scheme='http://www.blogger.com/atom/ns#' term='bull spec'/><title type='text'>BULL SPEC and the gift economy.</title><content type='html'>So, a quick unorganized mini-rant about the gift economy and BULL SPEC:&lt;br /&gt;&lt;br /&gt;We have three "exemptions" right now:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;We pay advances on content.&lt;/li&gt;&lt;li&gt;We pay for printing and shipping.&lt;/li&gt;&lt;li&gt;Due to #2: While we're "pay what you want" on all e-book and audiobooks, but, since for us physical printing and shipping cost per issue is a floor, on the print version we are "pay what you want &lt;b&gt;above physical printing and shipping cost&lt;/b&gt;". All that means is that every word of the content and every stroke behind the artwork is in the gift economy in all forms; but the paper and ink and how it gets to you are not. (Yet.) (And yes, this means, if you're a person or a bookstore, you can buy as many copies as you want at physical cost, period, no questions asked. We'd love a gratuity back the other way but it's not something we're going to harp on or point fingers about. And if you only like one story: we'll make it easy to direct a little something to that author or artist, specifically.)&lt;/li&gt;&lt;/ol&gt;We'd love to find a printing and distribution partner to alleviate some or all of points #2 and #3. (Hint, hint.) But point #1 is not going anywhere any time soon.&lt;i&gt;&amp;nbsp;Why? &lt;/i&gt;Because that's us at BULL SPEC's &lt;i&gt;input&lt;/i&gt;&amp;nbsp;into the gift economy, getting the ball rolling, treating people as we'd like to be treated. And we're hoping to see that paid forward with interest over time.&lt;br /&gt;&lt;br /&gt;Lastly, a quick word on ads: no, we don't and won't, ever, have paid ads. If there's something which looks like an ad, it's our way of saying "thanks" or "we like these folks" in a small way. And if there's anything ever annoying about these, let us know. We're not marketers or advertisers or marketees or advertisees. We're humans.&lt;br /&gt;&lt;br /&gt;And we're still looking for a symbol which means "pay what you want" where a price tag like "$5" goes. (Again: Hint, hint.) For the print issue it would look something like "$2 + SYMBOL." Thanks in advance for any help.&lt;br /&gt;&lt;br /&gt;And while we're asking for help: do we really need an ISBN? Sure they're cheap, but when you add the 1000% "handling fee" for the authorized US resellers they are not. We are working with some local (and sympathetic to the gift economy ideals behind what we're doing) bookstores and shops to have BULL SPEC on the racks and will be talking to them about this and/or UPC codes as well, but would love some input from wherever and whomever you are.&lt;br /&gt;&lt;br /&gt;edit: And we will be doing "preorders" as soon as we figure out the physical printing and shipping costs. Look for more info about that, when it's ready, at &lt;a href="http://bullspec.com/"&gt;BULL SPEC&lt;/a&gt;. And, not to "scoop" and though this is too premature to post as BULL SPEC (hence my little personal blog) it's looking good for launching our first benefit e-books/audiobooks of Joe Meno's "The Architecture of the Moon" by the end of the month. So preemptive happy freakin' New Year to Durham Literacy and our fingers are crossed and re-crossed that we can make a difference in that way.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-3692462811237568120?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/3692462811237568120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=3692462811237568120' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/3692462811237568120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/3692462811237568120'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2009/12/bull-spec-and-gift-economy.html' title='BULL SPEC and the gift economy.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-8666717842221694428</id><published>2009-11-25T21:44:00.004-05:00</published><updated>2009-11-25T21:59:52.412-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rejection'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>A story's trip through the Clarkesworld submissions queue.</title><content type='html'>On a dream-like "what if?" hope, tempered with "since they are so responsive, at least I'll be able to submit it somewhere else when they reject me, but still: what if?" I finally submitted a ruthlessly-pared-down-from-5000-to-under-4000-words story (the paring down alone took a month to get to a place which made me somewhat happy) to &lt;a href="http://clarkesworldmagazine.com/"&gt;Clarkesworld&lt;/a&gt; on Tuesday morning, and found that my story was #27 in the queue. Before leaving for lunch, it was #25, and I already felt the sense of approaching doom. You can actually watch the clock tick down to your story's death; it's an interesting feeling.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Back from lunch, and my story was already #23.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Do not click reload every ten minutes. Do not click reload every ten minutes.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;By the end of the afternoon my story was still at #23. What happened to my impending doom?&lt;br /&gt;&lt;br /&gt;I tried not to imagine what it would be like to be able to tell my friends, "I can hardly believe it, but Clarkesworld accepted my story! Yes, way!" But it was no use. It's one of those places I've long felt that I would be able to say that I'd written a damned good story if they liked it.&lt;br /&gt;&lt;br /&gt;I checked again after dinner; #18. OHMYGOD.&lt;br /&gt;&lt;br /&gt;I checked again after putting the kids to bed. #18.&lt;br /&gt;&lt;br /&gt;I checked again right before going to bed myself. #18. Had I fallen into an alternate universe? Was that universe trying to tell me something important about #18? Lottery tickets? An address to avoid?&lt;br /&gt;&lt;br /&gt;I checked again first thing in the morning: #18. Meanwhile &lt;a href="http://pseudopod.org/"&gt;Pseudopod&lt;/a&gt; had let me know they weren't interested in a different story. &lt;i&gt;Ah well. I still have those first two acceptances and a few more hopeful stories, right?&lt;/i&gt;&amp;nbsp;After seeing the kids off to school I had to check Clarkesworld again: #18.&lt;br /&gt;&lt;br /&gt;I managed to avoid checking again for over an hour and a half. Taking a quick break to make some tea at work: #14! OHMYGOD. It's moving again. And it's at the precise midpoint of its ill-fated journey; a rickety roller coaster car having ratcheted its way to the summit of the first hill, awaiting gravity's inevitable and relentless pull. Fare thee well on the leeward side, fair story, and check your safety harness.&lt;br /&gt;&lt;br /&gt;Stopping for lunch, I couldn't help taking another peek: #14. On a lark, between bites of leftover pizza, another peek: #13! The free fall has begun. Half an hour later and I saw that my story was at #9. Maybe by tonight? Or maybe by the morning? Do these crazy folks work on Thanksgiving?&lt;br /&gt;&lt;br /&gt;In the early afternoon I was called to pick up my daughter, who has developed a fever just in time for Thanksgiving. One last check before heading out the door: #9.&lt;br /&gt;&lt;br /&gt;A pre-dinner check: #9. A post-dinner check: #9. &lt;a href="http://pseudopod.org/"&gt;Pseudopod&lt;/a&gt; already let me know they weren't interested in my next try there, either.&lt;br /&gt;&lt;br /&gt;After the kids got to bed? #9. Maybe the news will be the first thing to greet me on Thanksgiving morning? I need to get one of those color-coded info globes hooked up for this. It can start out as Purple, move through Indigo to Blue, onto Green, Yellow, and hold on Orange until finally turning Red at the end. (Just in case, rig up a "Psychedelic" color pattern for the alternative case?)&lt;br /&gt;&lt;br /&gt;Before heading up to bed, one last check. (Sure, right. Like I won't check from bed before falling asleep.) #7. Oh boy.&lt;br /&gt;&lt;br /&gt;A half hour later, the e-mail arrives:&lt;br /&gt;&lt;blockquote&gt;Dear Samuel,&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Thank you for the opportunity to read your story. Unfortunately, your story isn't quite what we're looking for right now. Each month, we receive hundreds of submissions and while I may like many of them, I can only publish twelve of them per year.&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;In the past, we've provided detailed feedback on our rejections, but I'm afraid that due to time considerations, we're no longer able to offer that service. I appreciate your interest in Clarkesworld Magazine and hope that you'll keep us in mind in the future.&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Take care,&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Neil Clarke&lt;br /&gt;&lt;/blockquote&gt;Ah well. Now I can uncompress the story and undo many of the cuts and slices which helped it sneak (barely) under 4000 words, as nearly every single friend and colleague who has been gracious enough to read the story has demanded; let it breathe a little and stretch back into its frame at about another thousand words or two. Stories don't die, they just find another home, right?&lt;br /&gt;&lt;br /&gt;Right?&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-8666717842221694428?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/8666717842221694428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=8666717842221694428' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/8666717842221694428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/8666717842221694428'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2009/11/storys-trip-through-clarkesworld.html' title='A story&apos;s trip through the Clarkesworld submissions queue.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-486958196835895089</id><published>2009-11-24T22:00:00.000-05:00</published><updated>2009-11-25T22:08:45.178-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aether age'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>The Aether Age</title><content type='html'>I missed its conception and formulation, but I've been following &lt;a href="http://aetherage.blogspot.com/"&gt;The Aether Age&lt;/a&gt;&amp;nbsp;for about a month or so now, thinking about the guidelines, openly lustful at the thought of putting together a story to be included in it. I love the concept of a concept-based anthology; I love the particular concept picked--Egyptian and Grecian steampunk? Yeah, I'm in; and I love that it's all turning into a ShareAlike licensed work and world to be built upon, remixed, enjoyed the world over.&lt;br /&gt;&lt;br /&gt;So I finally took the time to research the setting and idea which had been slowly clawing its way out of my brain and into text, pound out a first draft over a few days, and give it a couple rounds of reading and editing. Pretty happy with it so far, and I hope it strikes a fancy with the editors over there.&lt;br /&gt;&lt;br /&gt;There's also a &lt;a href="http://www.facebook.com/group.php?gid=179711842828&amp;amp;ref=ts"&gt;Facebook Group for Aether Age&lt;/a&gt;&amp;nbsp;along with the blog. Not much discussion going, but the world is really just getting started.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-486958196835895089?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/486958196835895089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=486958196835895089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/486958196835895089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/486958196835895089'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2009/11/aether-age.html' title='The Aether Age'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-2626683766005525353</id><published>2009-11-23T22:00:00.000-05:00</published><updated>2009-11-25T22:03:12.823-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='the man in the mirror'/><category scheme='http://www.blogger.com/atom/ns#' term='acceptance'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Well, what do you know.</title><content type='html'>Well, it's finally happened. One editor was crazy enough to actually &lt;i&gt;accept&lt;/i&gt;&amp;nbsp;one of my stories. "The Man in the Mirror" will appear in the 2010 &lt;a href="http://52stitches.blogspot.com/"&gt;52-Stitches&lt;/a&gt;&amp;nbsp;dark&amp;nbsp;flash fiction anthology. It's &lt;i&gt;very&lt;/i&gt;&amp;nbsp;flash at 250 words, but that's about double the size of the first manuscript of the story I submitted to them. Very glad they were interested in a rewrite, and:&amp;nbsp;Score one for the good guys!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-2626683766005525353?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/2626683766005525353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=2626683766005525353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/2626683766005525353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/2626683766005525353'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2009/11/well-what-do-you-know.html' title='Well, what do you know.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-4915401708336634193</id><published>2009-11-19T21:48:00.003-05:00</published><updated>2009-11-25T10:13:16.312-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='go'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Go.</title><content type='html'>I'm a sucker for learning languages. So when Google released&amp;nbsp;&lt;a href="http://golang.org/"&gt;Go&lt;/a&gt;&amp;nbsp;I jumped in and gave it a look. There's some interesting things in there, part C, part Limbo, part amalgam of new and old and new-old old-new. (Pick where GC and CSP go in that mix.)&lt;br /&gt;&lt;br /&gt;Now, there are some growing pains; the "core" language packages include a myriad of fairly functional tools: hmac, json, http server and client, etc. Enough for me to spend a day or so putting together a quick&amp;nbsp;&lt;a href="http://github.com/montsamu/go-twitter-oauth"&gt;Twitter-OAuth web app in Go&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Some warts: the documentation isn't quite there yet in some places, but it's growing; the http client doesn't support https or specifying headers in its public methods; but not big complaints as things are settling in -- those are library issues and they'll get sorted.&lt;br /&gt;&lt;br /&gt;On the language itself: my main beefs are that (1) it doesn't support non-nullable types (yet? there's an open discussion on it.) and (2) it's a mix of statements and expressions (if is not an expression; it does not return a value). And again a bit of hard-to-find documentation, spread across a FAQ, a Tutorial, an "Effective Go" page, a Language Design FAQ, a Tech talk, and a "Language Specification" document. Most of the important bits are out there (if you also search through the growing mailing list as well as read the source code) but still some things which are a combination of hard-to-find and hard-to-guess. Like: how interface() and func() really work; how func types work; some of the edges.&lt;br /&gt;&lt;br /&gt;Still, a good mental workout to remember how to use a C-like language; static compilation, linking, pointers, structs, etc. I had used Objective-C in the not-too-terribly distant past to put together a couple of iPhone prototype apps, but much of that is Apple's development environment holding your hand; not so much with a pleasant return-to-hacking-in-vi roots as a couple of days with Go. But it's not ready (not surprisingly at day 10 or whatever it is) for my needs, putting together a real website for BULL SPEC, and while it has a few bits which make it perhaps the best of the C-alikes so far, there's too much missing in it which Python, Scheme, OCaml, Haskell, Erlang, or Smalltalk provide that there's enough nits that add up in the core language that while it has been a fun diversion, I'm not sure I'll be spending a lot of time on Go in the near future.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-4915401708336634193?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/4915401708336634193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=4915401708336634193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/4915401708336634193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/4915401708336634193'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2009/11/go.html' title='Go.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-6388933857153757173</id><published>2009-11-06T10:54:00.000-05:00</published><updated>2009-11-06T10:54:27.070-05:00</updated><title type='text'>BULL SPEC</title><content type='html'>Against probably all better judgement, I've put a stake in the ground and hung a sign on it: &lt;a href="http://bullspec.com/"&gt;BULL SPEC&lt;/a&gt; is open for submissions:&amp;nbsp;&lt;a href="http://bullspec.blogspot.com/2009/11/welcome-to-bull-spec.html"&gt;Welcome to BULL SPEC&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-6388933857153757173?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/6388933857153757173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=6388933857153757173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/6388933857153757173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/6388933857153757173'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2009/11/bull-spec.html' title='BULL SPEC'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-7787747017374970638</id><published>2009-09-28T12:29:00.004-04:00</published><updated>2009-09-28T17:42:55.198-04:00</updated><title type='text'>Lessons</title><content type='html'>As I ruminated on perhaps learning a lesson about which side projects are appropriate for a software engineer and father of two in a house without a soundproof music room, I realized that I have not properly learned one of the lessons I naïvely thought learned long ago, about getting work done to have in the end more -- and more quality -- time for non-work pursuits.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;First, I think that I have come to believe that working on software projects as a side project from work (as a software engineer) are not right for me: (1) By the end of a day at work, particularly in the "crunch time" which has been shifting more and more to "all the time," often the last thing I want to do is sit back at a computer and write and test code, and in the other direction, after working all evening or weekend on my personal programming project my performance at work inevitably suffers; (2) it turns out that I am terrible at web design, and while this might be alleviated by study and practice, see #1, though as a personal development goal I hope to improve in this space through work-study at work; (3) potential IP conflicts with work.&lt;br /&gt;&lt;br /&gt;Now, seeing this, what other side projects can I indulge in as an outlet for creative expression? The obvious ones to me are music and writing. Music has been hard to find time and workspace for, as having my equipment out is a disaster waiting to happen with two children under 3, and in any case playing guitar, trumpet, piano, synth, and singing after the kids go to bed is not an option. I'm still hoping to spend much of my December vacation recording new and old music and re-recording some even older songs, but it does not work out as a good fit.&lt;br /&gt;&lt;br /&gt;But writing seems to fit. The kids demand stories at all times, so in a sense I'm "writing" all the time, even though half of those stories are "Marco plays soccer/baseball/hockey with his friends" or "Marco goes to the truck/tractor store with his friends." It's even a bedtime story which has uncorked the latest flurry of writing for me, "The Riddle of the Koi," even though yesterday I realized that more than likely that my Tolkien-reared subconscious had produced the "ROTK" initialization of the title. I can write without piles of gear and cords strewn about one or more rooms. I can write while waiting for a dentist appointment, or in an hour and a half of free time while the kids are blessedly napping at roughly the same time, or in the hour and a half after the kids go to bed. I can write! It is like rediscovering a vestigial limb, long forgotten.&lt;br /&gt;&lt;br /&gt;Now, the naïveté. I have often thought to myself, proud of my supposed increasing wisdom, that if I had to go back and do college over again, I would actually study and work &lt;span style="font-weight:bold;"&gt;harder&lt;/span&gt; -- in order to in the result have &lt;span style="font-weight:bold;"&gt;more &lt;/span&gt;time for a personal life and personal pursuits, as well as getting the most out of the studies I was there to pursue in the first place. In college, far too often I put off work, put off studying, and in the end this caused me to spend more time and interrupt more personal choices to eventually make up that intellectual debt, and to do so in such a half-assed manner -- just enough to make the grade or pass the test -- that I missed even getting the real, life-long benefit of learning, despite the increased time cost.&lt;br /&gt;&lt;br /&gt;But I realize that this is actually a lesson I have not really learned. At work, I too often let distractions sneak their way into my day, causing my work to suffer and slip, leading to work following me home as deadlines grow nearer and nearer, turning an 8 hour work day into 10-12, completely unnecessarily and completely foolishly and wastefully. On that note: to work! So that later, instead of paying the accrued interest of work debt, I can get to that topic which sparked the whole topic: writing the "ninja, pirates, and zombies set in feudal Japan" novelette -- and no, at least I hope not, it is not as trite as that sounds -- that wants its way out of my head: "A team of ninja sent to capture a pirate ship finds more than they bargained for when the corpses of the pirates lurch back to life, as one member of the ninja team's life comes full circle."&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-7787747017374970638?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/7787747017374970638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=7787747017374970638' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/7787747017374970638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/7787747017374970638'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2009/09/lessons.html' title='Lessons'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-7926787004393825830</id><published>2009-09-16T11:33:00.005-04:00</published><updated>2009-09-16T11:47:56.432-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='whiteboarding'/><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='illustration'/><title type='text'>Whiteboarding a terribly drawn cartoon</title><content type='html'>Well, more than two and a half years since the last post; appropriate the last one was about how being a 'new dad' changes one's perspectives on things.&lt;br /&gt;&lt;br /&gt;OK, enough banter.&lt;br /&gt;&lt;br /&gt;I finally think I am beginning to "grok" Twitter; I'd avoided it for a long while, and finally I see some fun in it: watching Neil Gaiman, William Gibson, and a few other folks tweet their way through their crazy days is actually fairly interesting, and through those tweets I've been introduced to a few new writers that I've come to like.&lt;br /&gt;&lt;br /&gt;But then it gets &lt;a href="http://www.drunkduck.com/montsamu_musings"&gt;weird&lt;/a&gt;.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;I'd been following some good-natured cross-sniping between a few folks, followed a few of them, and, after a particularly interesting (to me) &lt;a href="http://twitter.com/shunn/status/3569321066"&gt;exchange&lt;/a&gt;, finally decided that I'd put marker to whiteboard and sketch some of &lt;a href="http://twitter.com/shunn/status/3904360050"&gt;it&lt;/a&gt; out in high drama. Very, very, &lt;span style="font-weight:bold;"&gt;very&lt;/span&gt; low art but it's a start; I don't think I've &lt;span style="font-style:italic;"&gt;ever&lt;/span&gt; actually put a sketch online before, and these may be the first six sketches I've done in over a decade.&lt;br /&gt;&lt;br /&gt;Illustration is certainly something I never developed. I like to think I did pretty well on the music side, and passably well on the writing side. But visual art has always escaped me. I doubt I will ever sketch anything worth looking at for more than a second of disgust and distaste, but a 50% improvement will be enough for me, and I actually found the "process" enjoyable. The "process?" Basically: sketch on an 8x10 whiteboard, snap a picture with my (7 year?) old Olympus digital, shrink it to 30% size (using MS Paint no less, if I keep going I'll write a script to do it) and upload to &lt;a href="http://www.drunkduck.com/montsamu_musings"&gt;montsamu musings on drunkduck.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Unfortunately I have a dozen more drawings in mind for that story alone to reach its conclusion, and already there's &lt;a href="http://twitter.com/neilhimself/status/4001121179"&gt;another one&lt;/a&gt; in mind for the next chapter.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-7926787004393825830?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/7926787004393825830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=7926787004393825830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/7926787004393825830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/7926787004393825830'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2009/09/whiteboarding-terribly-drawn-cartoon.html' title='Whiteboarding a terribly drawn cartoon'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-6411469243310700211</id><published>2007-02-06T08:52:00.000-05:00</published><updated>2007-02-06T08:57:53.624-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='progress'/><category scheme='http://www.blogger.com/atom/ns#' term='practice'/><title type='text'>Finger-picking good</title><content type='html'>Whew. I haven't played the guitar this much since October. I played until my fingers hurt. Then I played a few more songs. &lt;code&gt;[M]rs. montsamu&lt;/code&gt; and &lt;code&gt;baby montsamu&lt;/code&gt; were the receptive audience, although both settled in for a nap by the end. I'm getting closer to putting closing the books on a new song called &lt;em&gt;The Sparrow&lt;/em&gt; -- a departure from my usual kind of song in that it actually has an expressed meaning, and is intended for children. But I guess that is just one example as to how a new dad's life changes.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;blockquote&gt;&lt;em&gt;Sometimes a sparrow's ignorance&lt;br /&gt;can be confused for divine providence&lt;br /&gt;because sometimes&lt;br /&gt;knowing how far can keep you from taking flight at all.&lt;/em&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-6411469243310700211?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/6411469243310700211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=6411469243310700211' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/6411469243310700211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/6411469243310700211'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2007/02/finger-picking-good.html' title='Finger-picking good'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-230673319280040025</id><published>2007-02-02T14:53:00.001-05:00</published><updated>2009-11-25T11:32:00.653-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Erlang: parallel-map and parallel-foreach</title><content type='html'>In a post to &lt;a href="http://www.erlang.org/mailman/listinfo/erlang-questions"&gt;erlang-questions&lt;/a&gt; last summer, &lt;a href="http://www.erlang.org/ml-archive/erlang-questions/200606/msg00187.html"&gt;Erlang on the niagara&lt;/a&gt;, &lt;a href="http://www.erlang.org/"&gt;Erlang&lt;/a&gt; super-hero &lt;a href="http://armstrongonsoftware.blogspot.com/"&gt;Joe Armstrong&lt;/a&gt; posts a simple "parallel-map" implementation that he uses in place of some of his simple "iterative-foreach" calls to quickly achieve dramatic speed improvements by taking advantage of multiple processors. The post got me thinking, particularly in light of &lt;a href="http://programming.reddit.com/info/11zam/comments"&gt;recent discussions&lt;/a&gt; on side-effects and purity, about the real differences and guarantees of such simple things as &lt;code&gt;map&lt;/code&gt; and &lt;code&gt;foreach&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Principally, &lt;code&gt;map&lt;/code&gt; is (1) &lt;em&gt;supposed&lt;/em&gt; to be called with a function with no side effects, (2) guarantees order of return to match the input list, and (3) makes no guarantee on order of function calls, while &lt;code&gt;foreach&lt;/code&gt; is (1) used explicitly (and solely) for its side effects as (2) it has no return value (other than the atom &lt;code&gt;ok&lt;/code&gt; for success) and (3) guarantees the order of function calls to match the order of the input list. Now, Joe's code was for a &lt;code&gt;parallel-map&lt;/code&gt; implementation -- returning a list of results from the application of the given function, no guaranteed order of execution -- when it was actually being used to replace a &lt;code&gt;foreach&lt;/code&gt; statement. It happened to work out nicely that his code did not rely on any order of execution promises.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;But what if it did? And, anyway, it also made me wonder what cost was entailed with gathering the result list of a (potentially) large number of function calls, when in the end the result needed was only the lack of an error, and the eventual return of control to signify that the operation was complete?&lt;br /&gt;&lt;br /&gt;But let's go back. First, let's look at how the standard Erlang &lt;code&gt;lists&lt;/code&gt; module implements these two functions: &lt;br /&gt;&lt;pre class="code"&gt;1&amp;gt; &lt;b&gt;lists:map(fun(I) -&amp;gt; io:format("~w~n",[I]), I+1 end, lists:seq(1,10)).&lt;/b&gt;&lt;br /&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;&lt;b&gt;[2,3,4,5,6,7,8,9,10,11]&lt;/b&gt;&lt;br /&gt;2&amp;gt; &lt;b&gt;lists:foreach(fun(I) -&amp;gt; io:format("~w~n",[I]) end, lists:seq(1,10)).&lt;/b&gt;&lt;br /&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;&lt;b&gt;ok&lt;/b&gt;&lt;/pre&gt;Exactly as we expected. It just so happened that &lt;code&gt;map&lt;/code&gt; made the function calls in the same order as the input list, but this wasn't guaranteed. What do I mean? A glance at the &lt;a href="http://erlang.org/doc/doc-5.5.3/lib/stdlib-1.14.3/doc/html/lists.html"&gt;relevant documentation&lt;/a&gt; has the following to say about &lt;code&gt;foreach&lt;/code&gt;: &lt;br /&gt;&lt;blockquote&gt;This function is used for its side effects and the evaluation order is defined to be the same as the order of the elements in the list.&lt;br /&gt;&lt;/blockquote&gt;Contrast this with what it has to say about &lt;code&gt;map&lt;/code&gt;: &lt;br /&gt;&lt;blockquote&gt;This function is used to obtain the return values. The evaluation order is implementation dependent.&lt;br /&gt;&lt;/blockquote&gt;Fair enough. I put together a little first pass at a &lt;code&gt;plists&lt;/code&gt; module (for, obviously, "parallel lists"): &lt;br /&gt;&lt;pre class="code"&gt;-module(plists).&lt;br /&gt;-export([pmap/2,pforeach/2,npforeach/2]).&lt;br /&gt;&lt;br /&gt;pmap(F, L) -&amp;gt;&lt;br /&gt;    S = self(),&lt;br /&gt;    Pids = lists:map(fun(I) -&amp;gt; spawn(fun() -&amp;gt; pmap_f(S, F, I) end) end, L),&lt;br /&gt;    pmap_gather(Pids).&lt;br /&gt;&lt;br /&gt;pmap_gather([H|T]) -&amp;gt;&lt;br /&gt;    receive&lt;br /&gt;        {H, Ret} -&amp;gt; [Ret|pmap_gather(T)]&lt;br /&gt;    end;&lt;br /&gt;pmap_gather([]) -&amp;gt;&lt;br /&gt;    [].&lt;br /&gt;&lt;br /&gt;pmap_f(Parent, F, I) -&amp;gt;&lt;br /&gt;    Parent ! {self(), (catch F(I))}.&lt;br /&gt;&lt;br /&gt;pforeach(F, L) -&amp;gt;&lt;br /&gt;  S = self(),&lt;br /&gt;  Pids = pmap(fun(I) -&amp;gt; spawn(fun() -&amp;gt; pforeach_f(S,F,I) end) end, L),&lt;br /&gt;  pforeach_wait(Pids).&lt;br /&gt;&lt;br /&gt;pforeach_wait([H|T]) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    H -&amp;gt; pforeach_wait(T)&lt;br /&gt;  end;&lt;br /&gt;pforeach_wait([]) -&amp;gt; ok.&lt;br /&gt;&lt;br /&gt;pforeach_f(Parent, F, I) -&amp;gt;&lt;br /&gt;  _ = (catch F(I)),&lt;br /&gt;  Parent ! self().&lt;br /&gt;&lt;br /&gt;npforeach(F, L) -&amp;gt;&lt;br /&gt;  S = self(),&lt;br /&gt;  Pid = spawn(fun() -&amp;gt; npforeach_0(S,F,L) end),&lt;br /&gt;  receive Pid -&amp;gt; ok end.&lt;br /&gt;&lt;br /&gt;npforeach_0(Parent,F,L) -&amp;gt;&lt;br /&gt;  S = self(),&lt;br /&gt;  Pids = pmap(fun(I) -&amp;gt; spawn(fun() -&amp;gt; npforeach_f(S,F,I) end) end, L),&lt;br /&gt;  npforeach_wait(S,length(Pids)),&lt;br /&gt;  Parent ! S.&lt;br /&gt;&lt;br /&gt;npforeach_wait(_S,0) -&amp;gt; ok;&lt;br /&gt;npforeach_wait(S,N) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    S -&amp;gt; npforeach_wait(S,N-1)&lt;br /&gt;  end.&lt;br /&gt;&lt;br /&gt;npforeach_f(Parent, F, I) -&amp;gt;&lt;br /&gt;  _ = (catch F(I)),&lt;br /&gt;  Parent ! Parent.&lt;/pre&gt;Some things to notice here are that (1) my &lt;code&gt;pmap&lt;/code&gt; is effectively the same as Joe's, but that (2) I've provided a &lt;code&gt;pforeach&lt;/code&gt; here that works slightly differently in that it disregards return values instead of gathering them into a list. (Note, however, that like &lt;code&gt;pmap&lt;/code&gt; it also disregards order of execution promise and so could not be a drop-in replacement for the iterative &lt;code&gt;foreach&lt;/code&gt;.) For now, ignore the &lt;code&gt;npforeach&lt;/code&gt; as I'll talk about it later.&lt;br /&gt;&lt;br /&gt;Fine, anyway, let's play: &lt;br /&gt;&lt;pre class="code"&gt;$ erl -smp +S 16 +A 2&lt;/pre&gt;Here I start Erlang, enabling the use of multiple processors, setting the internal scheduler to use &lt;code&gt;16&lt;/code&gt; scheduler threads, and using &lt;code&gt;2&lt;/code&gt; asynchronous threads. &lt;br /&gt;&lt;pre class="code"&gt;Erlang (BEAM) emulator version 5.5.2 [source] [smp:&lt;b&gt;16&lt;/b&gt;] [async-threads:2] [hipe] [kernel-poll:false]&lt;br /&gt;&lt;br /&gt;Eshell V5.5.2  (abort with ^G)&lt;br /&gt;1&amp;gt; &lt;b&gt;c(plists).&lt;/b&gt;&lt;br /&gt;&lt;b&gt;{ok,plists}&lt;/b&gt;&lt;br /&gt;2&amp;gt; &lt;b&gt;plists:pforeach(fun(I) -&amp;gt; io:format("~w~n", [I]) end, lists:seq(1,10)).&lt;/b&gt;&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;1&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;&lt;b&gt;ok&lt;/b&gt;&lt;br /&gt;3&amp;gt; &lt;b&gt;plists:pforeach(fun(I) -&amp;gt; io:format("~w~n", [I]) end, lists:seq(1,10)).&lt;/b&gt;&lt;br /&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;7&lt;br /&gt;9&lt;br /&gt;6&lt;br /&gt;10&lt;br /&gt;8&lt;br /&gt;&lt;b&gt;ok&lt;/b&gt;&lt;/pre&gt;OK! Here we go, we see that, as expected, the order of execution is certainly interleaved -- and not predictably. Let's move on to &lt;code&gt;pmap&lt;/code&gt;: &lt;br /&gt;&lt;pre class="code"&gt;4&amp;gt; &lt;b&gt;plists:pmap(fun(I) -&amp;gt; io:format("~w~n",[I]), I + 1 end, lists:seq(1,20)).&lt;/b&gt;&lt;br /&gt;1&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;10&lt;br /&gt;9&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;2&lt;br /&gt;&lt;b&gt;[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]&lt;/b&gt;&lt;/pre&gt;Here we see that &lt;code&gt;pmap&lt;/code&gt; also doesn't have any guaranteed order of execution (which it shouldn't) and that the return values are in proper order (which it should).&lt;br /&gt;&lt;br /&gt;Now. Places to improve? Well, for one we could get all complicated-like and have options for a certain number of worker processes instead of "blindly" spawning a process for each element of a (potentially large!) input list. Another idea is spawning a "spawner" process to actually spawn the worker processes, so that our gathering can begin immediately without waiting for all the worker spawning to end. Yet another is, since we do not need any ordered return value from &lt;code&gt;pforeach&lt;/code&gt; find a marginally better way of acknowledging process completion as they occur instead of always waiting for each process in order. (Now you can go back and look at &lt;code&gt;npforeach&lt;/code&gt; if you like.) But mostly at that point you're just shuffling deck chairs. Actually just the simple difference between &lt;code&gt;pmap&lt;/code&gt; and &lt;code&gt;pforeach&lt;/code&gt; is mostly shuffling deck chairs. Certainly it "seems" like &lt;code&gt;pforeach&lt;/code&gt; should be faster than &lt;code&gt;pmap&lt;/code&gt; -- but lacking a &lt;a href="http://www.sun.com/processors/UltraSPARC-T1/"&gt;Niagara&lt;/a&gt; of my own, mostly I end up testing the limits of my limited CPU and memory slice of my shared VPS server.&lt;br /&gt;&lt;br /&gt;But, if anyone &lt;em&gt;does&lt;/em&gt; happen to have an interesting amount of hardware lying around: &lt;br /&gt;&lt;pre class="code"&gt;-module(plists_test).&lt;br /&gt;-export([start/0]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt;&lt;br /&gt;  timer:start(),&lt;br /&gt;  F = fun(I) -&amp;gt; math:pow(I,I) end,&lt;br /&gt;  {T0,L} = timer:tc(lists,seq,[1,1000]),&lt;br /&gt;  io:format("seq took ~w microseconds~n",[T0]),&lt;br /&gt;  {T1,_V2} = timer:tc(plists,pmap,[F,L]),&lt;br /&gt;  io:format("pmap took ~w microseconds~n",[T1]),&lt;br /&gt;  {T2,_V1} = timer:tc(plists,pforeach,[F,L]),&lt;br /&gt;  io:format("pforeach took ~w microseconds~n",[T2]),&lt;br /&gt;  {T3,_V1} = timer:tc(plists,npforeach,[F,L]),&lt;br /&gt;  io:format("npforeach took ~w microseconds~n",[T3]),&lt;br /&gt;  ok.&lt;/pre&gt;And give it a twirl: &lt;br /&gt;&lt;pre class="code"&gt;$ erl -smp +S 16 +A 2 -s plists_test -run init stop -noshell&lt;br /&gt;seq took 109 microseconds&lt;br /&gt;pmap took 90465 microseconds&lt;br /&gt;pforeach took 104702 microseconds&lt;br /&gt;npforeach took 112472 microseconds&lt;/pre&gt;As the input list gets larger, that "queue of processes instead of trying to spawn a process for each element of the list blindly" idea starts to look a whole lot better -- what good is spawning 10000 CPU-bound processes when you only a fraction of that in available CPU cores?&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-230673319280040025?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/230673319280040025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=230673319280040025' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/230673319280040025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/230673319280040025'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2007/02/erlang-parallel-map-and-parallel.html' title='Erlang: parallel-map and parallel-foreach'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-2810795539658808407</id><published>2007-01-30T14:14:00.001-05:00</published><updated>2009-11-25T11:32:25.181-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Erlang fizzbuzzery: Project Euler Problem 1</title><content type='html'>Another excercise in solving a simple problem using multiple programming idioms in the same language, Erlang. This time the simple problem is &lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=1"&gt;Problem 1&lt;/a&gt; from &lt;a href="http://projecteuler.net/"&gt;Project Euler&lt;/a&gt;: "If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000." In particular, the solutions presented are (1) a simple single-function loop which uses &lt;code&gt;if&lt;/code&gt; to check for termination and matching numbers, (2) a simple loop using Erlang's &lt;em&gt;guard&lt;/em&gt; syntax, and (3) a few solutions using some of the functions of the &lt;code&gt;lists&lt;/code&gt; module, one using Erlang's &lt;em&gt;list comprehension&lt;/em&gt; syntax.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Simple loop without guards: &lt;br /&gt;&lt;pre class="code"&gt;-module(euler_1_loop).&lt;br /&gt;&lt;br /&gt;-export([start/0,solve_euler_1/1]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt; io:format("~w~n",[solve_euler_1(1000)]).&lt;br /&gt;&lt;br /&gt;solve_euler_1(N) -&amp;gt; solve_euler_1(0,1,N).&lt;br /&gt;&lt;br /&gt;solve_euler_1(Sum,Cur,N) -&amp;gt;&lt;br /&gt;  if Cur &amp;gt;= N -&amp;gt; Sum;&lt;br /&gt;     (0 == (Cur rem 3)) or (0 == (Cur rem 5)) -&amp;gt; solve_euler_1(Sum+Cur,Cur+1,N);&lt;br /&gt;     true -&amp;gt; solve_euler_1(Sum,Cur+1,N)&lt;br /&gt;  end.&lt;/pre&gt;The above does a few things right, such as remembering that all calls in Erlang are &lt;em&gt;call by value&lt;/em&gt; and thus the easiest way to implement a recursive loop for this little problem is by simply keeping all the relevant data around as function parameters. It uses Erlang's &lt;code&gt;if&lt;/code&gt; to test a series of expressions. As before, the simple module is constructed so that its main path, &lt;code&gt;solve_euler_1/1&lt;/code&gt;, is exported so it can be externally tested, and the simple &lt;code&gt;start&lt;/code&gt; function is exported so we can simply run the example (after compiling with &lt;code&gt;erlc&lt;/code&gt;, of course) with: &lt;br /&gt;&lt;pre class="code"&gt;erl -s euler_1_loop -run init stop -noshell&lt;/pre&gt;We can use Erlang's guard syntax to transform the above code into: &lt;br /&gt;&lt;pre class="code"&gt;-module(euler_1_guards).&lt;br /&gt;&lt;br /&gt;-export([start/0,solve_euler_1/1]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt; io:format("~w~n",[solve_euler_1(1000)]).&lt;br /&gt;&lt;br /&gt;solve_euler_1(N) -&amp;gt; solve_euler_1(0,1,N).&lt;br /&gt;&lt;br /&gt;solve_euler_1(Sum,Cur,N) when Cur &amp;gt;= N -&amp;gt; Sum;&lt;br /&gt;solve_euler_1(Sum,Cur,N) when (0 == (Cur rem 3)) or (0 == (Cur rem 5)) -&amp;gt; solve_euler_1(Sum+Cur,Cur+1,N);&lt;br /&gt;solve_euler_1(Sum,Cur,N) -&amp;gt; solve_euler_1(Sum,Cur+1,N).&lt;/pre&gt;The above is a fairly simplistic example, but after all the problem is itself fairly simplistic. The first match for &lt;code&gt;solve_euler_1/3&lt;/code&gt; checks the end case, for when we have reached the end of the list of numbers we are supposed to be adding, and simply returns our running total. The second match checks to see if the current number is evenly divisible by 3 or 5, and if so, adds the current number to the running total, adds one to the current number, and re-enters the loop, keeping in mind that the matching process will start over again and so the end case will be handled appropriately. The last match simply leaves the running total alone, adds one to the current number, and re-enters the loop.&lt;br /&gt;&lt;br /&gt;Using the &lt;code&gt;lists&lt;/code&gt; module and Erlang's &lt;em&gt;list comprehension&lt;/em&gt; syntax: &lt;br /&gt;&lt;pre class="code"&gt;-module(euler_1_comprehension).&lt;br /&gt;&lt;br /&gt;-export([start/0,solve_euler_1/1]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt; io:format("~w~n",[solve_euler_1(1000)]).&lt;br /&gt;&lt;br /&gt;solve_euler_1(N) -&amp;gt; lists:sum([X || X &amp;lt;- lists:seq(1,N-1), (X rem 3 == 0) or (X rem 5 == 0)]).&lt;/pre&gt;The above illustrates four important concepts:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;lists:sum(List)&lt;/code&gt; which returns the sum of each element in a list;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;lists:seq(Start,End)&lt;/code&gt; which returns a list of numbers from &lt;code&gt;Start&lt;/code&gt; through &lt;code&gt;End&lt;/code&gt;;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;[X || X &amp;lt;- List]&lt;/code&gt; which is a simple list comprehension syntax example that actually produces the exact same input &lt;code&gt;List&lt;/code&gt; (unlike &lt;code&gt;[math:pow(X,2) || X &amp;lt;- List]&lt;/code&gt; which produces a list of the squares of the elements in the input &lt;code&gt;List&lt;/code&gt;, or &lt;code&gt;[{n,X} || X &amp;lt;- List]&lt;/code&gt; which produces a list of tuples where the first element is the atom 'n' and the second element is the original list element, or &lt;code&gt;[{X,math:pow(X,2)} || X &amp;lt;- List]&lt;/code&gt;, or...);&lt;br /&gt;&lt;br /&gt;&lt;code&gt;[X || X &amp;lt;- List, Expression]&lt;/code&gt; which &lt;em&gt;filters&lt;/em&gt; the original &lt;code&gt;List&lt;/code&gt; by only including those elements for which the given &lt;code&gt;Expression&lt;/code&gt; is true, in this case, &lt;code&gt;(X rem 3 == 0) or (X rem 5 == 0)&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Similar to the above is using the &lt;code&gt;lists&lt;/code&gt; module's &lt;code&gt;filter&lt;/code&gt; function: &lt;br /&gt;&lt;pre class="code"&gt;-module(euler_1_filter).&lt;br /&gt;&lt;br /&gt;-export([start/0,solve_euler_1/1]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt; io:format("~w~n",[solve_euler_1(1000)]).&lt;br /&gt;&lt;br /&gt;solve_euler_1(N) -&amp;gt; lists:sum(lists:filter(fun(X) -&amp;gt; (X rem 3 == 0) or (X rem 5 == 0) end,lists:seq(1,N-1))).&lt;/pre&gt;This introduces the &lt;code&gt;filter&lt;/code&gt; function itself, as well as the creation of an &lt;em&gt;anonymous&lt;/em&gt; function in Erlang.&lt;br /&gt;&lt;br /&gt;Yet another method of solving this problem comes again from the &lt;code&gt;lists&lt;/code&gt; module, this time using &lt;code&gt;foldl&lt;/code&gt; to accumulate along the list, and showing that anywhere you might declare an anonymous function (such as above) you can also use named functions: &lt;br /&gt;&lt;pre class="code"&gt;-module(euler_1_foldl).&lt;br /&gt;&lt;br /&gt;-export([start/0,solve_euler_1/1]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt; io:format("~w~n",[solve_euler_1(1000)]).&lt;br /&gt;&lt;br /&gt;solve_euler_1(N) -&amp;gt; lists:foldl(fun accum_fun/2,0,lists:seq(1,N-1)).&lt;br /&gt;&lt;br /&gt;accum_fun(X,Sum) when X rem 3 == 0; X rem 5 == 0 -&amp;gt; X + Sum;&lt;br /&gt;accum_fun(_X,Sum) -&amp;gt; Sum.&lt;/pre&gt;Here we have a couple of new things to see, of course the &lt;code&gt;foldl&lt;/code&gt; function itself, but also we use a named function, &lt;code&gt;accum_fun&lt;/code&gt;, where previously we had declared an anonymous function inline, and we used a special guard syntax where &lt;code&gt;;&lt;/code&gt; is really quite the same as &lt;code&gt;or&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Hopefully this was at least a little helpful in illustrating a few ways that using some of Erlang's features can be fun, simple, fast, and clear. This example didn't really give us an opportunity to look at processes or matching, but I'm sure those will come along again soon enough.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-2810795539658808407?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/2810795539658808407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=2810795539658808407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/2810795539658808407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/2810795539658808407'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2007/01/erlang-fizzbuzzery-project-euler.html' title='Erlang fizzbuzzery: Project Euler Problem 1'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-1296334664925895616</id><published>2007-01-25T09:49:00.001-05:00</published><updated>2009-11-25T11:32:44.627-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Erlang fizzbuzzery</title><content type='html'>Herein, a few different ways of implementing "a" solution to the &lt;a href="http://tickletux.wordpress.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding"&gt;FizzBuzz&lt;/a&gt; problem, showing examples of some different programming styles in Erlang solving the same problem.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Using a loop: &lt;br /&gt;&lt;pre class="code"&gt;-module(fizzbuzz_with_loop).&lt;br /&gt;&lt;br /&gt;-export([start/0]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt;&lt;br /&gt;  fizzbuzz(1,100).&lt;br /&gt;&lt;br /&gt;fizzbuzz(N,M) when N &amp;gt; M -&amp;gt; noop;&lt;br /&gt;fizzbuzz(N,M) -&amp;gt;&lt;br /&gt;  io:format("~s~n",[fizzbuzz(N)]),&lt;br /&gt;  fizzbuzz(N+1,M).&lt;br /&gt;&lt;br /&gt;fizzbuzz(N) when N rem 3 == 0, N rem 5 == 0 -&amp;gt; "FizzBuzz";&lt;br /&gt;fizzbuzz(N) when N rem 3 == 0 -&amp;gt; "Fizz";&lt;br /&gt;fizzbuzz(N) when N rem 5 == 0 -&amp;gt; "Buzz";&lt;br /&gt;fizzbuzz(N) -&amp;gt; integer_to_list(N).&lt;/pre&gt;&lt;br /&gt;Compile the module with &lt;code&gt;erlc fizzbuzz_loop.erl&lt;/code&gt; and run with &lt;code&gt;erl -s fizzbuzz_loop -run init stop -noshell&lt;/code&gt; [1] to produce: &lt;br /&gt;&lt;pre class="code"&gt;1&lt;br /&gt;2&lt;br /&gt;Fizz&lt;br /&gt;4&lt;br /&gt;Buzz&lt;br /&gt;Fizz&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;Fizz&lt;br /&gt;Buzz&lt;br /&gt;11&lt;br /&gt;Fizz&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;FizzBuzz&lt;br /&gt;16&lt;br /&gt;...&lt;/pre&gt;&lt;br /&gt;Using foreach (foreach is used because the order of evaluation is important): &lt;br /&gt;&lt;pre class="code"&gt;-module(fizzbuzz_with_foreach).&lt;br /&gt;&lt;br /&gt;-export([start/0]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt;&lt;br /&gt;  lists:foreach(fun(X) -&amp;gt; io:format("~s~n",[fizzbuzz(X)]) end, lists:seq(1,100)).&lt;br /&gt;&lt;br /&gt;fizzbuzz(N) when N rem 3 == 0, N rem 5 == 0 -&amp;gt; "FizzBuzz";&lt;br /&gt;fizzbuzz(N) when N rem 3 == 0 -&amp;gt; "Fizz";&lt;br /&gt;fizzbuzz(N) when N rem 5 == 0 -&amp;gt; "Buzz";&lt;br /&gt;fizzbuzz(N) -&amp;gt; integer_to_list(N).&lt;/pre&gt;&lt;br /&gt;Using list comprehension: &lt;br /&gt;&lt;pre&gt;-module(fizzbuzz_with_list_comprehension).&lt;br /&gt;&lt;br /&gt;-export([start/0]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt;&lt;br /&gt;  lists:foreach(fun(Y) -&amp;gt; io:format("~s~n",[Y]) end, [fizzbuzz(X) || X &amp;lt;- lists:seq(1,100)]).&lt;br /&gt;&lt;br /&gt;fizzbuzz(N) when N rem 3 == 0, N rem 5 == 0 -&amp;gt; "FizzBuzz";&lt;br /&gt;fizzbuzz(N) when N rem 3 == 0 -&amp;gt; "Fizz";&lt;br /&gt;fizzbuzz(N) when N rem 5 == 0 -&amp;gt; "Buzz";&lt;br /&gt;fizzbuzz(N) -&amp;gt; integer_to_list(N).&lt;/pre&gt;&lt;br /&gt;Using processes: &lt;br /&gt;&lt;pre class="code"&gt;-module(fizzbuzz_with_processes).&lt;br /&gt;&lt;br /&gt;% export default start function for command line&lt;br /&gt;-export([start/0]).&lt;br /&gt;&lt;br /&gt;% export entry point for spawned processes&lt;br /&gt;-export([fizzbuzz_process/0]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt;&lt;br /&gt;  Fizz_PID = spawn(fizzbuzz_with_processes,fizzbuzz_process,[]),&lt;br /&gt;  lists:foreach(fun(X) -&amp;gt; ask_fizzbuzz(Fizz_PID,X) end, lists:seq(1,100)),&lt;br /&gt;  Fizz_PID ! {done}.&lt;br /&gt;&lt;br /&gt;ask_fizzbuzz(Fizz_PID,N) -&amp;gt;&lt;br /&gt;  Fizz_PID ! {fizzbuzz,N,self()},&lt;br /&gt;  receive {Answer} -&amp;gt; io:format("~s~n",[Answer]) end.&lt;br /&gt;&lt;br /&gt;fizzbuzz_process() -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {fizzbuzz,N,Caller_PID} -&amp;gt; Caller_PID ! {fizzbuzz(N)}, fizzbuzz_process();&lt;br /&gt;    {done} -&amp;gt; noop end.&lt;br /&gt;&lt;br /&gt;fizzbuzz(N) when N rem 3 == 0, N rem 5 == 0 -&amp;gt; "FizzBuzz";&lt;br /&gt;fizzbuzz(N) when N rem 3 == 0 -&amp;gt; "Fizz";&lt;br /&gt;fizzbuzz(N) when N rem 5 == 0 -&amp;gt; "Buzz";&lt;br /&gt;fizzbuzz(N) -&amp;gt; integer_to_list(N).&lt;/pre&gt;&lt;br /&gt;With too many processes: &lt;br /&gt;&lt;pre&gt;-module(fizzbuzz_with_too_many_processes).&lt;br /&gt;&lt;br /&gt;% export default start function for command line&lt;br /&gt;-export([start/0]).&lt;br /&gt;&lt;br /&gt;% export entry point for spawned processes&lt;br /&gt;-export([fizzbuzz_fizzer/1]).&lt;br /&gt;-export([fizzbuzz_buzzer/1]).&lt;br /&gt;-export([fizzbuzz_number/1]).&lt;br /&gt;-export([fizzbuzz_printer/0]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt;&lt;br /&gt;  Printer = spawn(fizzbuzz_with_too_many_processes, fizzbuzz_printer, []),&lt;br /&gt;  Processes = lists:map(fun(F) -&amp;gt; spawn(fizzbuzz_with_too_many_processes, F, [Printer]) end, [fizzbuzz_fizzer,fizzbuzz_buzzer,fizzbuzz_number]),&lt;br /&gt;  lists:foreach(fun(X) -&amp;gt; lists:foreach(fun(P) -&amp;gt; P ! {n,X,self()}, receive {ok} -&amp;gt; noop end end, Processes), Printer ! {newline} end, lists:seq(1,100)),&lt;br /&gt;  lists:foreach(fun(P) -&amp;gt; P ! {done} end, [Printer|Processes]).&lt;br /&gt;&lt;br /&gt;fizzbuzz_fizzer(Printer) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {n,N,P} -&amp;gt;&lt;br /&gt;      if N rem 3 == 0 -&amp;gt; Printer ! {s,"Fizz"};&lt;br /&gt;         true -&amp;gt; noop&lt;br /&gt;      end,&lt;br /&gt;      P ! {ok},&lt;br /&gt;      fizzbuzz_fizzer(Printer);&lt;br /&gt;    {done} -&amp;gt; noop end.&lt;br /&gt;&lt;br /&gt;fizzbuzz_buzzer(Printer) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {n,N,P} -&amp;gt;&lt;br /&gt;      if N rem 5 == 0 -&amp;gt; Printer ! {s,"Buzz"};&lt;br /&gt;         true -&amp;gt; noop&lt;br /&gt;      end,&lt;br /&gt;      P ! {ok},&lt;br /&gt;      fizzbuzz_buzzer(Printer);&lt;br /&gt;    {done} -&amp;gt; noop end.&lt;br /&gt;&lt;br /&gt;fizzbuzz_number(Printer) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {n,N,P} -&amp;gt;&lt;br /&gt;      if (N rem 5 =/= 0) and (N rem 3 =/= 0) -&amp;gt; Printer ! {n,N};&lt;br /&gt;         true -&amp;gt; noop&lt;br /&gt;      end,&lt;br /&gt;      P ! {ok},&lt;br /&gt;      fizzbuzz_number(Printer);&lt;br /&gt;    {done} -&amp;gt; noop end.&lt;br /&gt;&lt;br /&gt;fizzbuzz_printer() -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {s,S} -&amp;gt; io:format("~s",[S]), fizzbuzz_printer();&lt;br /&gt;    {n,N} -&amp;gt; io:format("~w",[N]), fizzbuzz_printer();&lt;br /&gt;    {newline} -&amp;gt; io:format("~n",[]), fizzbuzz_printer();&lt;br /&gt;    {done} -&amp;gt; noop end.&lt;/pre&gt;&lt;br /&gt;Why is the above so painful? Mostly because we have to wait for a reply from each fizzbuzz_X process because otherwise some of the processes will send messages to the printer out of order. To compare, see what the output is if you did not wait for an &lt;code&gt;{ok}&lt;/code&gt;: &lt;br /&gt;&lt;pre class="code"&gt;-module(fizzbuzz_with_asynch_processes).&lt;br /&gt;&lt;br /&gt;% export default start function for command line&lt;br /&gt;-export([start/0]).&lt;br /&gt;&lt;br /&gt;% export entry point for spawned processes&lt;br /&gt;-export([fizzbuzz_fizzer/1]).&lt;br /&gt;-export([fizzbuzz_buzzer/1]).&lt;br /&gt;-export([fizzbuzz_number/1]).&lt;br /&gt;-export([fizzbuzz_printer/0]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt;&lt;br /&gt;  Printer = spawn(fizzbuzz_with_asynch_processes, fizzbuzz_printer, []),&lt;br /&gt;  Processes = lists:map(fun(P) -&amp;gt; spawn(fizzbuzz_with_asynch_processes, P, [Printer]) end, [fizzbuzz_fizzer,fizzbuzz_buzzer,fizzbuzz_number]),&lt;br /&gt;  lists:foreach(fun(N) -&amp;gt; lists:foreach(fun(P) -&amp;gt; P ! {n,N} end, Processes), Printer ! {newline} end, lists:seq(1,100)),&lt;br /&gt;  lists:foreach(fun(P) -&amp;gt; P ! {done} end, [Printer|Processes]).&lt;br /&gt;&lt;br /&gt;fizzbuzz_fizzer(Printer) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {n,N} -&amp;gt;&lt;br /&gt;      if N rem 3 == 0 -&amp;gt; Printer ! {s,"Fizz"};&lt;br /&gt;         true -&amp;gt; noop&lt;br /&gt;      end,&lt;br /&gt;      fizzbuzz_fizzer(Printer);&lt;br /&gt;    {done} -&amp;gt; noop end.&lt;br /&gt;&lt;br /&gt;fizzbuzz_buzzer(Printer) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {n,N} -&amp;gt;&lt;br /&gt;      if N rem 5 == 0 -&amp;gt; Printer ! {s,"Buzz"};&lt;br /&gt;         true -&amp;gt; noop&lt;br /&gt;      end,&lt;br /&gt;      fizzbuzz_buzzer(Printer);&lt;br /&gt;    {done} -&amp;gt; noop end.&lt;br /&gt;&lt;br /&gt;fizzbuzz_number(Printer) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {n,N} when N rem 5 =/= 0, N rem 3 =/= 0 -&amp;gt; Printer ! {n,N}, fizzbuzz_number(Printer);&lt;br /&gt;    {n,_N} -&amp;gt; fizzbuzz_number(Printer);&lt;br /&gt;    {done} -&amp;gt; noop end.&lt;br /&gt;&lt;br /&gt;fizzbuzz_printer() -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {s,S} -&amp;gt; io:format("~s",[S]), fizzbuzz_printer();&lt;br /&gt;    {n,N} -&amp;gt; io:format("~w",[N]), fizzbuzz_printer();&lt;br /&gt;    {newline} -&amp;gt; io:format("~n",[]), fizzbuzz_printer();&lt;br /&gt;    {done} -&amp;gt; noop end.&lt;/pre&gt;&lt;br /&gt;The output of this last program is consistently interleaved. Moral of the story: just because you send a message to each of a set of processes in a particular order, it does not mean that each message will be &lt;em&gt;received&lt;/em&gt; or more importantly &lt;em&gt;acted upon&lt;/em&gt; in that particular order. Messages to a process are queued in order, but if you send a message &lt;code&gt;M1&lt;/code&gt; to process &lt;code&gt;P1&lt;/code&gt; and another message &lt;code&gt;M2&lt;/code&gt; to process &lt;code&gt;P2&lt;/code&gt;, there is no guarantee that process &lt;code&gt;P1&lt;/code&gt; will receive the message before process &lt;code&gt;P2&lt;/code&gt;. There &lt;em&gt;is&lt;/em&gt; a guarantee that if you send message &lt;code&gt;M1&lt;/code&gt; to process &lt;code&gt;P1&lt;/code&gt; and another message &lt;code&gt;M2&lt;/code&gt; to the &lt;em&gt;same&lt;/em&gt; process &lt;code&gt;P1&lt;/code&gt;, &lt;code&gt;M1&lt;/code&gt; will be received before &lt;code&gt;M2&lt;/code&gt;. But this is a crucial difference.&lt;br /&gt;&lt;br /&gt;Lastly, an implementation that works, consisting of &lt;em&gt;far&lt;/em&gt; too many processes: &lt;br /&gt;&lt;pre class="code"&gt;-module(fizzbuzz_with_far_too_many_processes).&lt;br /&gt;&lt;br /&gt;-export([start/0]).&lt;br /&gt;-export([fizzbuzz/2]).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt;&lt;br /&gt;  % spawn 100 processes to compute the 100 terms&lt;br /&gt;  lists:map(fun(N) -&amp;gt; spawn(fizzbuzz_with_far_too_many_processes,fizzbuzz,[N,self()]) end, lists:seq(1,100)),&lt;br /&gt;  lists:foreach(fun(T) -&amp;gt; io:format("~s~n",[element(2,T)]) end, [I || I &amp;lt;- receive_all(100)]).&lt;br /&gt;&lt;br /&gt;receive_all(M) -&amp;gt; receive_all(M,[]).&lt;br /&gt;&lt;br /&gt;receive_all(M,L) when M == length(L) -&amp;gt; lists:sort(L);&lt;br /&gt;receive_all(M,L) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {N,S} -&amp;gt; receive_all(M,[{N,S}|L])&lt;br /&gt;  end.&lt;br /&gt;&lt;br /&gt;fizzbuzz(N,P) when N rem 3 == 0, N rem 5 == 0 -&amp;gt; P ! {N,"FizzBuzz"};&lt;br /&gt;fizzbuzz(N,P) when N rem 3 == 0 -&amp;gt; P ! {N,"Fizz"};&lt;br /&gt;fizzbuzz(N,P) when N rem 5 == 0 -&amp;gt; P ! {N,"Buzz"};&lt;br /&gt;fizzbuzz(N,P) -&amp;gt; P ! {N,integer_to_list(N)}.&lt;/pre&gt;&lt;br /&gt;A key thing to learn from this last listing is that erlang tuples are indexed starting at 1. But that is a gripe for another blog entry.&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;[1] add &lt;code&gt;-smp&lt;/code&gt; to the execution of the program to enable Erlang's use of multiple processors.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-1296334664925895616?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/1296334664925895616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=1296334664925895616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/1296334664925895616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/1296334664925895616'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2007/01/erlang-fizzbuzzery.html' title='Erlang fizzbuzzery'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-4522294543640082568</id><published>2007-01-23T16:39:00.001-05:00</published><updated>2009-11-25T11:33:16.825-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Erlang example: "parallel primes"</title><content type='html'>The code for this example is fairly simplistic and does many things wrong. Nevertheless it does provide some examples of several Erlang constructs. Hopefully this little example is self-explanatory enough to be useful on its own for now, but I hope to now add some commentary as to its construction and flaws. First, it is obviously by far not a good way to generate a list of primes. The point is not to generate primes well, but to demonstrate, using a fairly easy-to-understand problem domain, how one might write a simple program that (1) spawns a set of worker processes to operate upon work items from a queue, (2) accumulate results from their work in an accumulation process, and (3) retrieve those results.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre class="code"&gt;% pprimes.erl&lt;br /&gt;-module(pprimes).&lt;br /&gt;&lt;br /&gt;% functions that will be called from command-line must be exported&lt;br /&gt;-export([start/1]).&lt;br /&gt;&lt;br /&gt;% functions that will be spawned must be exported&lt;br /&gt;-export([prime/3]).&lt;br /&gt;-export([queue/3]).&lt;br /&gt;-export([accum/1]).&lt;br /&gt;&lt;br /&gt;% functions that could be externally testable could be exported&lt;br /&gt;-export([is_prime/1]).&lt;br /&gt;-export([atom_to_integer/1]).&lt;br /&gt;-export([pprimes/2]).&lt;br /&gt;&lt;br /&gt;% called from command-line with atoms, e.g. ['10','1000']&lt;br /&gt;start([NProcessesAtom,PLimitAtom]) -&amp;gt;&lt;br /&gt;  NProcesses = atom_to_integer(NProcessesAtom),&lt;br /&gt;  PLimit = atom_to_integer(PLimitAtom),&lt;br /&gt;  T1 = erlang:now(),&lt;br /&gt;  L = pprimes(NProcesses,PLimit),&lt;br /&gt;  T2 = erlang:now(),&lt;br /&gt;  T = timer:now_diff(T2,T1),&lt;br /&gt;  io:format("~w processes computing the ~w primes under ~w took ~w microseconds~n",[NProcesses,length(L),PLimit,T]).&lt;br /&gt;&lt;br /&gt;pprimes(NProcesses,PLimit) -&amp;gt;&lt;br /&gt;&lt;br /&gt;  % the simple accumulator process will collect the results&lt;br /&gt;  Accum_PID = spawn(pprimes, accum, [[]]),&lt;br /&gt;&lt;br /&gt;  % the queue process will serve out the next number to check as a prime&lt;br /&gt;  Queue_PID = spawn(pprimes, queue, [2,PLimit,self()]),&lt;br /&gt;&lt;br /&gt;  % spawn the worker processes&lt;br /&gt;  lists:map(fun(X) -&amp;gt; spawn(pprimes, prime, [X,Accum_PID,Queue_PID]) end, lists:seq(1,NProcesses)),&lt;br /&gt;&lt;br /&gt;  % wait for the worker processes to signal completion&lt;br /&gt;  wait_primes(NProcesses),&lt;br /&gt;&lt;br /&gt;  % when the worker processes are done, tell the queue process to complete&lt;br /&gt;  Queue_PID ! {done},&lt;br /&gt;&lt;br /&gt;  % send message to the accumulator process and wait for response&lt;br /&gt;  Accum_PID ! {get_primes, self()},&lt;br /&gt;  receive {primes,L} -&amp;gt; Accum_PID ! {done} end,&lt;br /&gt;  L.&lt;br /&gt;&lt;br /&gt;% if there are no more worker processes to wait for...&lt;br /&gt;wait_primes(0) -&amp;gt; noop;&lt;br /&gt;&lt;br /&gt;% otherwise keep waiting...&lt;br /&gt;wait_primes(N) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {done} -&amp;gt; wait_primes(N-1)&lt;br /&gt;  end.&lt;br /&gt;&lt;br /&gt;% simple accumulator process:&lt;br /&gt;% when it receives an add_prime message, adds the prime and re-loops with new list&lt;br /&gt;% when it receievs a get_primes message, responds with the current list and re-loops&lt;br /&gt;% when it receives the "done" message, ends.&lt;br /&gt;accum(L) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {add_prime,P} -&amp;gt; accum([P|L]);&lt;br /&gt;    {get_primes,Client_PID} -&amp;gt; Client_PID ! {primes,L}, accum(L);&lt;br /&gt;    {done} -&amp;gt; noop&lt;br /&gt;  end.&lt;br /&gt;&lt;br /&gt;% queue process end case: when the queue is empty, enter the queue_empty function.&lt;br /&gt;queue(Cur,PLimit,Main_PID) when Cur == PLimit -&amp;gt;&lt;br /&gt;  queue_empty(Main_PID);&lt;br /&gt;&lt;br /&gt;% queue process main case: wait for next_prime messages and re-enter&lt;br /&gt;queue(Cur,PLimit,Main_PID) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {next_prime,Prime_PID} -&amp;gt;&lt;br /&gt;      Prime_PID ! {ok,Cur}&lt;br /&gt;    end,&lt;br /&gt;  queue(Cur+1,PLimit,Main_PID).&lt;br /&gt;&lt;br /&gt;% empty queue process: inform next_prime requesters that the queue is empty until we receive the "done" message&lt;br /&gt;queue_empty(Main_PID) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {next_prime,Prime_PID} -&amp;gt;&lt;br /&gt;      Prime_PID ! {queue_empty, Main_PID},&lt;br /&gt;      queue_empty(Main_PID);&lt;br /&gt;    {done} -&amp;gt; noop end.&lt;br /&gt;&lt;br /&gt;% main worker process: get the next prime from the queue...&lt;br /&gt;prime(X,Accum_PID,Queue_PID) -&amp;gt;&lt;br /&gt;  Queue_PID ! {next_prime, self()},&lt;br /&gt;  receive&lt;br /&gt;    {ok,N} -&amp;gt;&lt;br /&gt;      % io:format("worker ~w testing ~w ~n",[X,N]),&lt;br /&gt;      case is_prime(N) of&lt;br /&gt;        true -&amp;gt;&lt;br /&gt;          % io:format("worker ~w found ~w to be prime!~n",[X,N]),&lt;br /&gt;          Accum_PID ! {add_prime,N};&lt;br /&gt;        false -&amp;gt;&lt;br /&gt;          % io:format("worker ~w found ~w to NOT be prime!~n",[X,N]),&lt;br /&gt;          noop&lt;br /&gt;      end,&lt;br /&gt;      prime(X,Accum_PID,Queue_PID);&lt;br /&gt;    {queue_empty, Main_PID} -&amp;gt; Main_PID ! {done} end.&lt;br /&gt;&lt;br /&gt;% very poor, but we want the process to actually do "some" work...&lt;br /&gt;is_prime(N) when N &amp;lt; 2 -&amp;gt; false;&lt;br /&gt;is_prime(N) when N == 2; N == 3 -&amp;gt; true;&lt;br /&gt;is_prime(N) -&amp;gt;&lt;br /&gt;  lists:all(fun(A) -&amp;gt; N rem A =/= 0 end, lists:seq(2, N div 2)).&lt;br /&gt;&lt;br /&gt;% utility funtion: we get our arguments as 'atoms' e.g. '12' but we want integers&lt;br /&gt;atom_to_integer(Atom) -&amp;gt;&lt;br /&gt;  erlang:list_to_integer(erlang:atom_to_list(Atom)).&lt;/pre&gt;&lt;br /&gt;If you save the code from this listing as a file "pprimes.erl", you can then compile it from the command line with: &lt;br /&gt;&lt;pre class="code"&gt;$ erlc pprimes.erl&lt;/pre&gt;The following shows an example of running the program from the command line: &lt;br /&gt;&lt;pre class="code"&gt;$ erl -smp -s pprimes start 100 10000 -run init stop -noshell&lt;/pre&gt;You should receive some output that looks something like: &lt;br /&gt;&lt;pre class="code"&gt;100 processes computing the 1229 primes under 10000 took 1894288 microseconds&lt;/pre&gt;And if that isn't "parallel enough", how about just blindly spawning a process for each work item immediately, bypassing the queue altogether? &lt;br /&gt;&lt;pre class="code"&gt;-module(vpprimes).&lt;br /&gt;&lt;br /&gt;-export([start/1]).&lt;br /&gt;-export([vpprime/2]).&lt;br /&gt;&lt;br /&gt;start([PLimitAtom]) -&amp;gt;&lt;br /&gt;  vpprimes(atom_to_integer(PLimitAtom)).&lt;br /&gt;&lt;br /&gt;vpprimes(PLimit) -&amp;gt;&lt;br /&gt;  lists:map(fun(N) -&amp;gt; spawn(vpprimes, vpprime, [N,self()]) end, lists:seq(1,PLimit)),&lt;br /&gt;  lists:foreach(fun(N) -&amp;gt; io:format("~w~n",[N]) end, [N || N &amp;lt;- receive_all(PLimit,0,[])]).&lt;br /&gt;&lt;br /&gt;receive_all(PLimit,N,L) when PLimit == N -&amp;gt; lists:sort(L);&lt;br /&gt;receive_all(PLimit,N,L) -&amp;gt;&lt;br /&gt;  receive&lt;br /&gt;    {p,P} -&amp;gt; receive_all(PLimit,N+1,[P|L]);&lt;br /&gt;    {n,_N} -&amp;gt; receive_all(PLimit,N+1,L)&lt;br /&gt;  end.&lt;br /&gt;&lt;br /&gt;vpprime(N,R) -&amp;gt;&lt;br /&gt;  T = is_prime(N),&lt;br /&gt;  if T -&amp;gt; R ! {p,N};&lt;br /&gt;     true -&amp;gt; R ! {n,N}&lt;br /&gt;  end.&lt;br /&gt;&lt;br /&gt;% very poor, but we want the process to actually do "some" work...&lt;br /&gt;is_prime(N) when N &amp;lt; 2 -&amp;gt; false;&lt;br /&gt;is_prime(N) when N == 2; N == 3 -&amp;gt; true;&lt;br /&gt;is_prime(N) -&amp;gt;&lt;br /&gt;  lists:all(fun(A) -&amp;gt; N rem A =/= 0 end, lists:seq(2, N div 2)).&lt;br /&gt;&lt;br /&gt;% utility funtion: we get our arguments as 'atoms' e.g. '12' but we want integers&lt;br /&gt;atom_to_integer(Atom) -&amp;gt;&lt;br /&gt;  erlang:list_to_integer(erlang:atom_to_list(Atom)).&lt;/pre&gt;&lt;br /&gt;If nothing else, &lt;code&gt;erl -smp -s vpprimes start 10000 -run init stop -noshell&lt;/code&gt; will launch 10000 processes to poorly compute a list of primes. Now, is any of this useful? Not for computing primes, certainly. But imagine instead that you wanted to take advantage of an 8-core system and at least speed up the "map" part of a "map-reduce" algorithm. You could now (hopefully) go out and write a "parallel-map" function that applies a function in parallel to all elements of a list, returning the new list.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-4522294543640082568?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/4522294543640082568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=4522294543640082568' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/4522294543640082568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/4522294543640082568'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2007/01/erlang-example-parallel-primes.html' title='Erlang example: &quot;parallel primes&quot;'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-8436878970118818455</id><published>2006-10-07T15:33:00.000-04:00</published><updated>2006-10-07T15:36:24.821-04:00</updated><title type='text'>More trumpet.</title><content type='html'>A long practice session with the old horn, really starting to get the range, endurance, and tone control back. Most of the rest of it (fingering, reading music) is like riding a bike, and it's fairly silly how much I still remember from the old days.&lt;br /&gt;&lt;br /&gt;Some guitar work, too.&lt;br /&gt;&lt;br /&gt;Borrowed some microphones from a friend at work to experiment with new sounds, and just in time as the MOTU finally arrived -- missing all of the advertised audio cables, but I guess that is par for the course when buying used off of eBay. But wow, what a difference in sound when I plugged the MOTU in -- I guess that's what people are talking about when they say that your A/D converters matter, because it was not much short of an amazing difference.&lt;br /&gt;&lt;br /&gt;I still don't understand sampling rates, sample size, and most of the driver settings. But hey, that's what a copious amount of free time is for...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-8436878970118818455?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/8436878970118818455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=8436878970118818455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/8436878970118818455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/8436878970118818455'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/10/more-trumpet.html' title='More trumpet.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-3887140742509374863</id><published>2006-10-02T20:15:00.000-04:00</published><updated>2006-10-02T20:18:06.235-04:00</updated><title type='text'>Dusting off the trumpet.</title><content type='html'>Practice time today was on the trumpet. Apparently the last time I played it, I thought that I would be picking it back up soon, because I left it half-covered with fingerprints. But that doesn't hurt the sound. Anyway, as I suspected it is mostly my range and endurance which are still the most hurt -- it's actually fairly interesting how much I still remember. Some more practice and I should be back up to snuff enough to get through any bits I come up with for the album.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-3887140742509374863?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/3887140742509374863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=3887140742509374863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/3887140742509374863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/3887140742509374863'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/10/dusting-off-trumpet.html' title='Dusting off the trumpet.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-2148953510025110431</id><published>2006-09-28T14:41:00.000-04:00</published><updated>2006-09-28T14:47:04.635-04:00</updated><title type='text'>Hello, MOTU.</title><content type='html'>Well, just when I had officially decided to go with the Echo AudioFire4, I won an eBay auction for a used MOTU 828. It's definitely a lot more machine, but it has the footprint to prove it. Anyway, I'm hoping that it comes soon, it just works, and finally I can get all this gear talk behind me and get back to work.&lt;br /&gt;&lt;br /&gt;On that front, I did some more playing around with Tracktion, recording a take of "Carousel". Wow! That is some pretty nice, easy to use software. It probably didn't hurt that I think I'm getting the knack of microphone placement and level setting the Mackie mic pres.&lt;br /&gt;&lt;br /&gt;On the songwriting front, unfortunately I just can't stop the G-C-Em progression from dominating everything I do. I've been working on a song for a while, just lyrics and melody, and then I realised: uh-oh, this is practically the same song, again, as both "Carousel" and "Best Days". And I've already used the capo trick. So the song I've tentatively entitled "Where You End And I Begin" doesn't really have a place to go right now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-2148953510025110431?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/2148953510025110431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=2148953510025110431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/2148953510025110431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/2148953510025110431'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/09/hello-motu.html' title='Hello, MOTU.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-140569335166558433</id><published>2006-09-26T22:11:00.000-04:00</published><updated>2006-09-26T22:14:22.536-04:00</updated><title type='text'>Tracktion and lack thereof.</title><content type='html'>I downloaded the demo for Tracktion, the Mackie-distributed PC software for music recording. Since it comes with the Echo AudioFire devices, I wanted to see what I would be getting into. Looks really nice so far, sounds really nice.&lt;br /&gt;&lt;br /&gt;I've been learning about analog summing. Very interesting stuff, using my mixer again in the final stages of studio mixdown. A neat idea and I really liked the sounds I was getting when playing with it and the demo of Tracktion.&lt;br /&gt;&lt;br /&gt;But none of that made me a better player or singer today.&lt;br /&gt;&lt;br /&gt;A cheap used Shure PG-57 is on its way from eBay. I plan to use it for trumpet snippets, maybe try some vocals on it as well. Too much gear talk, not enough music!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-140569335166558433?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/140569335166558433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=140569335166558433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/140569335166558433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/140569335166558433'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/09/tracktion-and-lack-thereof.html' title='Tracktion and lack thereof.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-7696681408891082583</id><published>2006-09-26T00:01:00.000-04:00</published><updated>2006-09-26T00:16:18.077-04:00</updated><title type='text'>Jose, tripping, and progress</title><content type='html'>First off, &lt;a href="http://www.jose-gonzalez.com/"&gt;José González&lt;/a&gt; was absolutely great at &lt;a href="http://catscradle.com/"&gt;Cat's Cradle&lt;/a&gt; last Thursday. &lt;a href="http://www.deathvessel.com/"&gt;Death Vessel&lt;/a&gt; opened and was quite a unique sound.&lt;br /&gt;&lt;br /&gt;Unfortunately not much practice lately, and it shows. We took a trip back to the flatlands of Indiana this weekend, where I yelled myself hoarse at Purdue homecoming. But between seeing the old pines and oaks from "back home" and last week's concerts, there is certainly some inspiration to get back to work.&lt;br /&gt;&lt;br /&gt;So finally tonight some progress. I put the "home studio" (I laugh!) back together, and had a chance to "X+Y" record some guitar with my PG81 and AT2020. It actually wasn't a terrible sound, even coming through the Sound Blaster. What was disconcerting, however, was some weird source of timeshifting when I recorded vocals to the guitar track. Some kind of latency is sneaking in there, either from the Sound Blaster itself, the USB bus, or from my sound software. Or, and I hope not, my Mackie -- the scary thing is I don't remember having this issue using the same software and sound card, the only differences were the inputs and the computer itself being the Athlon tower now instead of the Thinkpad. Very disconcerting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-7696681408891082583?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/7696681408891082583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=7696681408891082583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/7696681408891082583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/7696681408891082583'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/09/jose-tripping-and-progress.html' title='Jose, tripping, and progress'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-1824746223412721286</id><published>2006-09-20T00:59:00.000-04:00</published><updated>2006-09-20T01:07:04.679-04:00</updated><title type='text'>Wow.</title><content type='html'>Just got back from the &lt;a href="http://lincolntheatre.com/"&gt;Lincoln Theatre&lt;/a&gt;. Wow. &lt;a href="http://www.masonjennings.com/"&gt;Mason Jennings&lt;/a&gt; was just unbelievable live. Unbelievable.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jenniferoconnor.net/"&gt;Jennifer O'Connor&lt;/a&gt; opened the show, and was impressive in her own right. But from the moment Mason Jennings stepped on stage, until when he and his fellows played their last encore over 90 minutes later, it was just an amazing experience to be there in the Lincoln. Stunningly talented, intimate and powerful music. It makes me both want to get right to recording right away, and at the same time quit the whole thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-1824746223412721286?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/1824746223412721286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=1824746223412721286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/1824746223412721286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/1824746223412721286'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/09/wow.html' title='Wow.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-545301154794076556</id><published>2006-09-18T11:06:00.000-04:00</published><updated>2006-09-18T11:09:14.356-04:00</updated><title type='text'>Disappointment</title><content type='html'>Ouch. Well, I spent most of Sunday afternoon figuring out how to properly wire my AT2020, Mackie, and sound card. Nothing worked, until finally I remembered that every time I plug in my USB sound card, I have to manually go into the control panel and select the "line in" for recording. I fired up my trusty, simple &lt;a href="http://www.acoustic-labs.com/multitrack-recorder.html"&gt;Acoustic Labs Multitrack Recorder&lt;/a&gt; and laid down a few tracks, anxiously awaiting the end result.&lt;br /&gt;&lt;br /&gt;To my dismay it didn't sound like much of an improvement over the old Akai DM microphone recordings. Still tinny, still thin, no warmth.&lt;br /&gt;&lt;br /&gt;Back to square one, I guess. Have to figure out if it's the sound card, if it's the PC, or what's exactly going on.&lt;br /&gt;&lt;br /&gt;I did happen to catch K.T. Tunstall on Austin City Limits, though. Wow. Great live performance. Having spent the last few weeks absorbed in microphones and mixers, it gave me a bit broader appreciation for everything that went into the show. Now I want to figure out what some of her stomp boxes do...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-545301154794076556?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/545301154794076556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=545301154794076556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/545301154794076556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/545301154794076556'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/09/disappointment.html' title='Disappointment'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-1593902393489535298</id><published>2006-09-14T03:39:00.000-04:00</published><updated>2006-09-14T03:59:14.258-04:00</updated><title type='text'>Strings</title><content type='html'>Well, maybe I was a bit too hasty pronouncing the death of my Martin strings. Tonight they sounded actually quite pleasant. Another night up all night looking at "audio interfaces" that I probably don't even need.&lt;br /&gt;&lt;br /&gt;I did hear back from the AT2020 seller. Some jive about "we just print what the manufacturer says" which is, provably, a bunch of hogwash since the box doesn't even match its contents. But hey, what do I know. He promised to look around as see "if they have any extra adapters". Well, I certainly hope so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-1593902393489535298?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/1593902393489535298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=1593902393489535298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/1593902393489535298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/1593902393489535298'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/09/strings.html' title='Strings'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-4207136524111436035</id><published>2006-09-13T17:47:00.000-04:00</published><updated>2006-09-13T18:02:05.223-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gear'/><category scheme='http://www.blogger.com/atom/ns#' term='practice'/><title type='text'>Stringwork</title><content type='html'>Saturday and Sunday saw a lot of playtime. The strings settled in only slightly, still a very bright, metallic sound. So I'm likely to avoid the Phosphor Bronze and Bronze strings from Martin in the future. The other options are Elixir, with their "nanoweb" coating, and the recommended &lt;a href="http://www.daddario.com/"&gt;D'Addario&lt;/a&gt; &lt;a href="http://www.daddario.com/DADProdDetail.aspx?CodaID=6909&amp;ID=2&amp;Class=ABRA"&gt;Silk and Steel&lt;/a&gt; strings, both of which are supposed to give me a bit of a softer, more mellow sound. That is what I like, so that sounds like a plan for the future for things to try.&lt;br /&gt;&lt;br /&gt;Anyway, not much practicing on Monday or Tuesday. Last night I subbed in for a friend's soccer team and scored my first goal in organised soccer. Hopefully tonight I can get back "on the horse".&lt;br /&gt;&lt;br /&gt;I did find a taker for the Yamaha mixer, so it's heading out the door. I had a taker for the AT2020, but inspecting the box revealed that the eBay seller either lied directly or made the mistake of forgotting 2 fairly key accessories. So that fell through in fairly spectacular fashion. There is another guy with interest, so maybe I can get those accessories and make the sale yet. Otherwise, it is a highly reviewed microphone, so maybe, just maybe, I'll try it out myself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-4207136524111436035?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/4207136524111436035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=4207136524111436035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/4207136524111436035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/4207136524111436035'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/09/stringwork.html' title='Stringwork'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-6126322337844516596</id><published>2006-09-07T17:25:00.000-04:00</published><updated>2006-09-07T17:33:24.949-04:00</updated><title type='text'>Self-defeatism</title><content type='html'>I think the reason I haven't been able to sleep well since I started actually getting recording equipment (out of the blue and way ahead of plan) is inexorably tied to self-defeatism and fear of failure.&lt;br /&gt;&lt;br /&gt;As I said in my first post to start this thing, I know I don't have all this talent. But something happens when you step up to a microphone to amplify or record yourself in a critical setting. It doesn't happen to me at all at open mic nights, or just hanging out with friends. But when the power is turned on, the tracker is ready to go, I freeze up. My stomach tightens, and I think: "Wow, you really suck. You are wasting your money." It's fear that if I truly give it my best shot, it will still suck even worse than my self-deprecating disclaimers profess, and that will be disappointing. So, to prevent this, I give myself an out. I don't try as hard. I back off. I engage in self-defeating behaviour like buying things I don't need, to make things overly complex. Like not sleeping.&lt;br /&gt;&lt;br /&gt;I've got to get in the mindset that I'm doing this for fun, not for profit, or posterity, or pride.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-6126322337844516596?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/6126322337844516596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=6126322337844516596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/6126322337844516596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/6126322337844516596'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/09/self-defeatism.html' title='Self-defeatism'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-6624128482645455545</id><published>2006-09-07T00:32:00.001-04:00</published><updated>2009-11-25T11:34:54.551-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gear'/><title type='text'>Help is on the way</title><content type='html'>On the way home, I emptied the contents of my wallet on some final close-out items from &lt;a href="http://www.brookmays.com/stores/store_pages/058.htm"&gt;my local music shop&lt;/a&gt;. (And I wonder: where am I going to go for gear and guitar tech help now?) A couple of XLR microphone cables and an el-cheapo (as in $10) microphone stand. They had a couple of really interesting-looking microphone stands, really solidly-built boom stands from Germany, but even at closeout they were $50. (For a microphone stand. Yes, really.)&lt;br /&gt;&lt;br /&gt;And then reaching home I realized that, once again, I am an idiot.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;You see, when I realised I was going to return the PG57, I did a little eBay shopping. I put lowball offers in on a couple of microphones, one of which (AT2020) was accepted yesterday. Turns out, the other one was accepted earlier this evening. So I'll be adding a &lt;a href="http://www.shure.com/ProAudio/Products/WiredMicrophones/us_pro_PG81-XLR_content"&gt;Shure PG81&lt;/a&gt; to my closet, even though I was not yet budgeted for two microphones right now. It's a bit of a pickle. Worse, they are both condensors, leaving me without a dynamic mic for vocals.&lt;br /&gt;&lt;br /&gt;Combine that with some brimming buyer's remorse for the Mackie -- I still need a decent sound interface to capture the output to my computer, and it just seems like the Mackie isn't as good a fit as I had thought when it comes down to really making it do what I want it to do. And buyer's remorse for both microphones, when I should have just picked up an SM57 and called it a day. Ah well.&lt;br /&gt;&lt;br /&gt;But at least now I can absolutely stop looking at microphones for a good long while, because the wallet is closed.&lt;br /&gt;&lt;br /&gt;Anyway, I also put new strings on the Washburn, some Martin Acoustic SP "custom light" strings (another closeout purchase from Pearson, R.I.P.). I really, really dislike the sound of all new strings. At least for a day or two, they just sound absolutely "twangy" and metallic as they settle in, and I think it may be a bit worse with this particular set of strings. I was a bit hesitant going lighter than my standard "medium" strings, but these were an in-between: heavier than light, lighter than medium. Turns out that this is just too damned light. But I'll give them a few more days, see how they turn out once they are broken in a bit. But my guess is that I'll be restringing the Washburn again before too long.&lt;br /&gt;&lt;br /&gt;New strings on the fretboard, had a good run-through of most of the songs again. My fingers are finally starting to get back into playing shape, even though new strings seem to really cut up my left-hand fingertips. (Did I mention that I hate new strings?)&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-6624128482645455545?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/6624128482645455545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=6624128482645455545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/6624128482645455545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/6624128482645455545'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/09/help-is-on-way.html' title='Help is on the way'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-2523584506309178877</id><published>2006-09-05T20:41:00.000-04:00</published><updated>2006-09-05T20:46:15.582-04:00</updated><title type='text'>Microphone shuffle</title><content type='html'>Out with the old, in with the new. Luckily I hadn't opened the &lt;a href="http://www.shure.com/ProAudio/Products/WiredMicrophones/us_pro_PG57-XLR_content"&gt;Shure PG57&lt;/a&gt; yet, because a glance at its online user's guide showed it wasn't recommended for acoustic guitar. (That's saved for the 81.) So, it safely back at its place of purchase, I picked up an &lt;a href="http://www.audio-technica.com/cms/wired_mics/a0933a662b5ed0e2/index.html"&gt;Audio-Technica AT2020&lt;/a&gt; from &lt;a href="http://www.ebay.com/"&gt;eBay&lt;/a&gt; to replace it. So, sometime next week or so, hopefully I'll be able to put together my first home recording of any decent fidelity. Hopefully I won't need to pick up the microphone's &lt;a href="http://www.audio-technica.com/cms/windscreens_mounts/4c067771f9e376ca/index.html"&gt;shock mount&lt;/a&gt; because that would just about double the price. But at some point, I need to pick up some kind of mic stand...&lt;br /&gt;&lt;br /&gt;Everything I read about the &lt;a href="http://www.tweakheadz.com/review_of_the_SM81.htm"&gt;SM81&lt;/a&gt; makes me very, very interested. But it's still a bit beyond my budget reach, at least for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-2523584506309178877?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/2523584506309178877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=2523584506309178877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/2523584506309178877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/2523584506309178877'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/09/microphone-shuffle.html' title='Microphone shuffle'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-1135384479697422506</id><published>2006-09-04T22:39:00.000-04:00</published><updated>2006-09-04T22:55:39.497-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='concerts'/><title type='text'>It's concert time</title><content type='html'>This fall is just an amazing time to be a fan of "modern folk rock" music (or whatever you want to call it) in Durham, NC, or parts nearby. Even just the upcoming shows you can find on &lt;a href="http://www.etix.com/ticket/online/displayVenues.jsp?country=USA&amp;catID=2&amp;state=NC"&gt;Etix&lt;/a&gt; for the area (Carrboro, Chapel Hill, and Raleigh -- are there really no Durham venues at all?) reads like a "who's who" of the genre.&lt;br /&gt;&lt;br /&gt;Mason Jennings (mrs. montsamu's favorite) and Jose Gonzalez are the two shows we've decided to get ourselves together to go and see -- and if I had unlimited time I would definitely see a few more. Sufjan Stevens plays the same day as Jose Gonzalez, but unfortunately for me he sold out in minutes. This makes me sad, because he came through a couple of years ago and I made a "mental note" to get tickets, but as things tend to do it got overlooked until it was just too late. Ah well. At least I've managed to catch Alexi Murdoch down here, and a great show with Ben Arthur, Abra Moore, and Vienna Tang that was supposed to also feature Teitur, but he was called away at the last second to play the Prince of Denmark's birthday party or something.&lt;br /&gt;&lt;br /&gt;So, without further adieu, my picks for shows to see if you're in the area (&lt;span style="font-weight:bold;"&gt;bold&lt;/span&gt; for the ones we're ticketed to see):&lt;br /&gt;19 September: M Ward; &lt;span style="font-weight:bold;"&gt;Mason Jennings&lt;/span&gt;&lt;br /&gt;20 September: Calexico&lt;br /&gt;21 September: Sufjan Stevens; &lt;span style="font-weight:bold;"&gt;Jose Gonzalez&lt;/span&gt;&lt;br /&gt;22 September: Eric Bachmann and Richard Buckner&lt;br /&gt;3 October: Serena Maneesh (ok, so this is a completely different genre -- sue me.)&lt;br /&gt;13 October: Shawn Colvin&lt;br /&gt;19 October: Amos Lee&lt;br /&gt;22 October: Old Crow Medicine Show&lt;br /&gt;4 November: Carbon Leaf&lt;br /&gt;8 November: Edwin McCain&lt;br /&gt;14 November: Califone&lt;br /&gt;&lt;br /&gt;If I weren't heading out of town on the 22nd, I would &lt;span style="font-weight:bold;"&gt;absolutely &lt;/span&gt;catch Bachmann (of Crooked Fingers) and Buckner, who is another one of those artists who I've loved for years, and the last time he came to town I made the mistake of the "mental note, down the drain" trick.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-1135384479697422506?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/1135384479697422506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=1135384479697422506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/1135384479697422506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/1135384479697422506'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/09/its-concert-time.html' title='It&apos;s concert time'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-5110335825268610390</id><published>2006-09-04T22:04:00.000-04:00</published><updated>2006-09-04T22:13:08.040-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gear'/><title type='text'>Labour Day weekend is a doozy</title><content type='html'>Leaving the house on Saturday morning, heading out for some errands, I did not expect to see people wearing breadboards announcing that my treasured local music shop, &lt;a href="http://www.brookmays.com/stores/store_pages/058.htm"&gt;Pearson Music&lt;/a&gt;, was going out of business. On a whim, I headed inside to see what might remain on the shelves. Sadly, no microphones, but they had three &lt;a href="http://mackie.com/"&gt;Mackie&lt;/a&gt; mixers to pick from, all at fairly steep markdown: a DFX-12, a 1202-VLZ Pro, and my eventual choice, a &lt;a href="http://www.mackie.com/products/1402vlzpro/"&gt;1402-VLZ Pro&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So, I've been spending some time trying to figure out how to use it. So far, so good.&lt;br /&gt;&lt;br /&gt;But unfortunately the upgrade from my previous microphone pre-amp (if a Radio Shack Karaoke Mic Adapter can be named as such) didn't alleviate my issues with the damaged goods that are my Akai DM-13 microphones. And, worse yet, my Dean Markley Acoustical Transducer decided that this would be the day it finally gave up the ghost for good. So I picked up a new microphone, a &lt;a href="http://www.shure.com/index.htm"&gt;Shure&lt;/a&gt; &lt;a href="http://www.shure.com/ProAudio/Products/WiredMicrophones/us_pro_PG57-XLR_content"&gt;PG57&lt;/a&gt;, but so far I haven't had a chance to take it out of the plastic wrap and put it to any kind of test.&lt;br /&gt;&lt;br /&gt;So, quite a weekend. Maybe with the mixer and a new microphone, I'll get my butt in gear and put something together in the next couple of weeks. We'll see how it goes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-5110335825268610390?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/5110335825268610390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=5110335825268610390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/5110335825268610390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/5110335825268610390'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/09/labour-day-weekend-is-doozy.html' title='Labour Day weekend is a doozy'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-3681841825087831551</id><published>2006-08-31T09:40:00.000-04:00</published><updated>2006-08-31T09:53:24.273-04:00</updated><title type='text'>Ouch.</title><content type='html'>Well, fingerpicking work was severely hampered when I completely jacked up my thumb playing basketball. I got through another go-round of "Carousel" and the piano version of "This Old Road", and some more piano covers.&lt;br /&gt;&lt;br /&gt;On my mind: microphones. The 1970s-era Akai microphones I have pick up spoken word and even vocals fairly well, but I've not managed yet to get them to pick up my guitar in anywhere close to acceptable, and the piezoelectric pickup I've had for years just doesn't do it for me either. It probably doesn't help that my pickups and sound card cost $20 each, but hey. I'll get there. Right now there's no point in rushing on any of that because I've certainly still got work to do ironing out and finishing a few of the songs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-3681841825087831551?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/3681841825087831551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=3681841825087831551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/3681841825087831551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/3681841825087831551'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/08/ouch.html' title='Ouch.'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-334551294209352664</id><published>2006-08-30T10:58:00.000-04:00</published><updated>2006-08-30T11:08:14.748-04:00</updated><title type='text'>Where do people find the time...</title><content type='html'>I put another set of song lyrics up, and actually had some time to practice through quite a few tunes on the guitar at home: "Carolina", "Cry", "Catch the Sun", "Best Days", "Anger", a bit of "Crossroads", and the guitar version of "This Old Road". I also played a few of the covers I'd like to record, but after learning a little about &lt;a href="http://www.cdbaby.net/dd?f=8"&gt;mechanical licensing&lt;/a&gt;, I definitely could not offer free downloads at any fidelity of my version of a cover, period. And, since it's not terribly likely that anybody would be lining up to pay for one, I'll probably have to stay away from them for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-334551294209352664?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/334551294209352664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=334551294209352664' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/334551294209352664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/334551294209352664'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/08/where-do-people-find-time.html' title='Where do people find the time...'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-5419634323627642830</id><published>2006-08-29T10:24:00.000-04:00</published><updated>2006-08-29T10:26:23.133-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lyrics'/><category scheme='http://www.blogger.com/atom/ns#' term='progress'/><category scheme='http://www.blogger.com/atom/ns#' term='practice'/><title type='text'>Putting yourself out there</title><content type='html'>Well, I used &lt;a href="http://www.writely.com/"&gt;Writely&lt;/a&gt; to put a few songs worth of &lt;a href="http://montsamu.googlepages.com/montsamu-music-lyrics"&gt;lyrics&lt;/a&gt; online. It's certainly a much easier and faster way than trying to use &lt;a href="http://pages.google.com/"&gt;Google Pages&lt;/a&gt; to edit several pages and get everything "just right". Of course, "just right" certainly doesn't summarize my feeling on the lyrics at all. Standing alone, without music -- wow, they look juvenile and simple. But then again, not may people mistake a lyrics book for poetry.&lt;br /&gt;&lt;br /&gt;Maybe it's a good thing I don't have my actual poetry online anymore...&lt;br /&gt;&lt;br /&gt;I didn't get much practice in last night, since I was taking in the &lt;a href="http://jimmyv.org/"&gt;Jimmy V&lt;/a&gt; Volunteer dinner. To my surprise, a very accomplished singer-songwriter, &lt;a href="http://www.amazon.com/James-House/artist/B000APZK5K"&gt;James House&lt;/a&gt;, was the evening entertainment. Once home, I did manage to get once more through "Carousel". I'm not sure I'm happy with it but it appears to be getting "set" into a final state. My songs are so limited in chord changes and variety, but at least I threw a capo on for "Carousel" to change the pitch of the drone and hum, even if it's basically the same rythm and chord progression for the most part as "Best Days".&lt;br /&gt;&lt;br /&gt;I've got to get with Bud and iron out some kind of agreement for the poem he wrote that I turned into a song, back in 1998 or so. But he's yet another of the friends I've completely lost contact with over the years. (Maybe there's a song idea in there somewhere...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-5419634323627642830?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/5419634323627642830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=5419634323627642830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/5419634323627642830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/5419634323627642830'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/08/putting-yourself-out-there.html' title='Putting yourself out there'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952753915088677199.post-7607228613870038480</id><published>2006-08-28T16:42:00.000-04:00</published><updated>2006-08-28T16:49:54.819-04:00</updated><title type='text'>Is this thing on?</title><content type='html'>Against all better judgement, I'm finally getting around to recording some of my songs. I don't think they are particularly good, or that I'm a particularly good musician. But they're my songs, and I think at least a couple of people might enjoy hearing them. In any case, my friends and family will have something more tangible to point to when I ask them why they are pointing and laughing at me.&lt;br /&gt;&lt;br /&gt;The main home for things like lyrics, tabliature, and links to downloads will be over at the main &lt;a href="http://montsamu.googlepages.com/montsamu-music"&gt;montsamu music&lt;/a&gt; website, but this blog will keep track of my progress as I put pen to paper, pick to string, fingers to piano, and microphone to input and try to put together something that sounds sort of like a guy and his guitar and piano instead of static or the sound of a cassette tape going round and round.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8952753915088677199-7607228613870038480?l=montsamu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://montsamu.blogspot.com/feeds/7607228613870038480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8952753915088677199&amp;postID=7607228613870038480' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/7607228613870038480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952753915088677199/posts/default/7607228613870038480'/><link rel='alternate' type='text/html' href='http://montsamu.blogspot.com/2006/08/against-all-better-judgement-im-finally.html' title='Is this thing on?'/><author><name>montsamu</name><uri>http://www.blogger.com/profile/07591244606673064670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_UoNhmz6F-DU/SsDj5YeTq0I/AAAAAAAAHLQ/HmjZMs6AnPU/S220/montsamu.jpg'/></author><thr:total>0</thr:total></entry></feed>
