<?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-3492131176526384674</id><updated>2011-08-22T01:03:41.768-06:00</updated><category term='theory'/><category term='crossfit'/><category term='babbling'/><category term='AI'/><category term='computer go'/><category term='seasons'/><category term='poetry'/><category term='rants'/><category term='music'/><category term='social'/><category term='projects'/><category term='fiction'/><category term='common lisp'/><title type='text'>Jack Unrue's blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>77</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-6050332001199362419</id><published>2011-03-26T23:18:00.000-06:00</published><updated>2011-03-26T23:18:38.770-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='poetry'/><title type='text'>Deconstruction</title><content type='html'>Inspired by &lt;a href="http://www.youtube.com/watch?v=KVm8G0ipETc"&gt;this video&lt;/a&gt;.&lt;a href="http://www.youtube.com/watch?v=KVm8G0ipETc" rel="nofollow" target="_blank"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hungry ants climb onto the helpless hulk,&lt;br /&gt;the ocean-going hull towering over the beach.&lt;br /&gt;Showers of sparks fall to drown in the water below,&lt;br /&gt;the ants' work is reflected in dispassionate eyes.&lt;br /&gt;Gears turning, cables tensing, chains pulling,&lt;br /&gt;the ants wisely step back from the seam&lt;br /&gt;as the last joints pop free and the deck sags.&lt;br /&gt;Tons of sharp metal tilts, spins, and crashes.&lt;br /&gt;Displaced ocean reclaims its rightful place,&lt;br /&gt;sunlight finds its way into a rusting cathedral.&lt;br /&gt;Waves still lapping at the remnants of the last,&lt;br /&gt;the ants invite the next victim onto the sand.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-6050332001199362419?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/6050332001199362419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=6050332001199362419' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6050332001199362419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6050332001199362419'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2011/03/deconstruction.html' title='Deconstruction'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-7553492424676270618</id><published>2011-02-22T22:17:00.001-07:00</published><updated>2011-02-22T22:17:55.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><title type='text'>I'm fed up</title><content type='html'>I'm fed up with poorly implemented, poorly tested, poorly understood software. I'm fed up with Best Buy and their laughable, so-called "technical expertise." I'm fed up with the miserable dreck that passes for most of what's on TV these days. I'm fed up with having to dodge bad drivers on the road or in parking lots, and I'm really fed up with that special category of idiot who partially blocks our driveway at home. I'm fed up with Big Content, Big Banks, the Telecoms, Oil Companies, and Drug Companies. I'm fed up with politics, and I'm fed up with our dysfunctional government. I'm fed up with the revolving door between government and industry. I'm fed up with people who take unfair advantage at every opportunity. I'm fed up with people who make excuses, shift blame, or otherwise dodge personal responsibility. I'm fed up with wasting my free time on Facebook.&lt;br /&gt;&lt;br /&gt;Now I feel a little better, thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-7553492424676270618?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/7553492424676270618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=7553492424676270618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7553492424676270618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7553492424676270618'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2011/02/im-fed-up.html' title='I&apos;m fed up'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-768787875077520521</id><published>2011-02-20T22:32:00.001-07:00</published><updated>2011-02-20T22:38:09.255-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AI'/><title type='text'>IBM Watson</title><content type='html'>What a terrific accomplishment &lt;a href="http://en.wikipedia.org/wiki/Watson_%28artificial_intelligence_software%29"&gt;IBM Watson&lt;/a&gt; is! The managers and engineers on that team must be proud to see how well the system &lt;a href="http://www.youtube.com/watch?v=ZLdkJpAtt1I"&gt;did on Jeopardy&lt;/a&gt;. I think it's great for someone besides Google to demonstrate such innovation, and to do so in a way that the average person can get excited about.&lt;br /&gt;&lt;br /&gt;We shouldn't have been surprised to find out that as impressive as Watson is, the system nevertheless is not yet perfect. For instance, Watson's designers didn't anticipate the need to receive and interpret answers from other players.&lt;br /&gt;&lt;br /&gt;This is an exciting development and I'm curious to see which direction IBM will go from here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-768787875077520521?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/768787875077520521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=768787875077520521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/768787875077520521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/768787875077520521'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2011/02/ibm-watson.html' title='IBM Watson'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-7559552492637993770</id><published>2010-05-09T22:44:00.000-06:00</published><updated>2010-05-09T22:44:14.652-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><title type='text'>So Dark at This Hour</title><content type='html'>Late at night, a man stands on the sidewalk at the edge of his neighborhood. He's looking towards the lake across the road from the houses. Lightning flashes pierce the clouds on the horizon. Down the street, a lamp shines overhead. The man stands on the fringes of its illumination. The world is hushed, sleeping, but he's raging inside, angrier than he can remember being in a long time. He's stopped clenching his jaw, but his jaw muscles are still throbbing.&lt;br /&gt;&lt;br /&gt;The man has a new car with a powerful engine. He hasn't yet dared drive as fast as it's capable of going. He's thinking about that car, and about a particular road. The road is on the outskirts of town, in one of few remaining undeveloped areas around. There's a stretch where you can build up plenty of speed if you want, and a beautiful curve that sweeps around in a lazy arc. Where the curve starts to straighten out again, the road passes under a highway. He thinks the highway is one of those privately-owned toll roads. He's not sure.&lt;br /&gt;&lt;br /&gt;He visualizes the concrete supports and embankment of the overpass. He considers making a trip out there, just to scout out the angles and rehearse how the whole scenario would play out. He runs through it several times in his mind. Then another part of his mind says, in a voice that only he can hear, "Guess what, your gas tank is almost empty anyway." That's true, he concedes. The man shudders.&lt;br /&gt;&lt;br /&gt;The street light chooses this moment to flicker out. Now it's pitch dark. Just as abruptly, the light buzzes and comes back to life. The man stares as a fox comes into view, trotting along the sidewalk on the far side of the lamp. It slows down and stops at the pole, about 25 feet or so away. The fox looks around, turning this way and that, hardly giving the man a passing glance. Then it lowers itself into a familiar resting pose, not quite on its stomach yet not completely on its side either, with its paws stretched out in front, like a dog. It's facing the lake and seems to be focused on the low-lying scrubby grass between the sidewalk and the lake.&lt;br /&gt;&lt;br /&gt;The man hears some rustling behind him. He looks over his shoulder, and sees a slender form settling down outside the second floor bedroom window of a nearby house. He can see smooth bare legs and shorts, but the rest of the figure is hidden in the shadows. It's one of the neighbors' girls. OK, the man thinks, if the three of them are to share this quiet evening for a while, he won't mind at all.&lt;br /&gt;&lt;br /&gt;The sound of an engine like a heavy-duty truck perturbs the night-time calm. The streets of this neighborhood twist and turn, so much that approaching vehicles are usually heard long before they are seen. The engine sound gets closer, and closer still. Illumination from headlights appears around a bend. It's coming down the street towards the three of them. Bemused, the man watches a truck roar past him and turn left around a corner into the neighborhood. It's a tow truck. Brake lights come on and the truck eases to a halt just a couple houses in on the side street. Sitting in the driveway that the truck now blocks is a fancy car, perhaps a BMW.&lt;br /&gt;&lt;br /&gt;The truck idles for a minute. Then, the man hears the engine rev and the truck turns to block the street, headlights swinging around with a harsh glare. It slowly backs up onto the driveway just in front of the car. "Holy crap!" he blurts out loud, laughing. A stocky figure hops out of the cab, runs to the back of the tow truck, and pushes a lever. There is a noticeable whirring sound. The driver drops down and reaches underneath the front of the car. He fiddles around for a moment or two, then jumps up and darts (who knew a stocky man could be so agile?) back to the cab of the truck. He jumps in, and the truck engine revs hard. The car is yanked off the driveway and down the street, making a loud tire screech that surely wakes up everybody in the vicinity. The tow truck swerves back onto the main street, its quarry hanging precariously off the wheel-lift. Meanwhile, a light flickers to life upstairs in the house, and then the front porch light comes on. The tow truck driver jumps out of the cab and steps back to the car, fumbles around but gets the car door open, then reaches inside. He closes the door again and places some portable brake lights on the roof. The repo man jogs back to his cab, gets in, and the whole production rolls off into the night.&lt;br /&gt;&lt;br /&gt;The man chuckles to himself in amused disbelief, but the grin on his face fades as he looks down at the sidewalk. The fox is gone. It probably snuck away at the first sign of trouble. Back across the street, he hears a dull metallic sliding sound and a thump. Looking up where the girl had been sitting, he sees that she is gone, too. The man glances out across the lake. What used to be a starry sky with flashing clouds on the horizon is now completely overcast. The man's inner voice speaks up again: "You need to get up for work tomorrow." He sighs. A few hours' sleep is better than none at all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-7559552492637993770?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/7559552492637993770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=7559552492637993770' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7559552492637993770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7559552492637993770'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2010/05/so-dark-at-this-hour.html' title='So Dark at This Hour'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-672819295428509775</id><published>2010-02-13T20:56:00.000-07:00</published><updated>2010-02-13T20:56:23.907-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><title type='text'>A story fragment</title><content type='html'>A full moon faintly illuminated the faces of seven men, each drawn with pain and exhaustion. They stood in a rough semi-circle near a log that was once a mighty tree. A cool breeze rustled leaves in the forest overhead. Tree branches swayed with the breeze, revealing and then hiding patches of starlit sky. The men stared blankly at each other, or at nothing in particular.&lt;br /&gt;&lt;br /&gt;Finally, one of the men lifted his head to gaze at the sky, and said,&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; "We can't stay here."&lt;br /&gt;&lt;br /&gt;Another voice asked,&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; "What about the others? We can't leave them here."&lt;br /&gt;&lt;br /&gt;A man with a graying beard and wrinkled face took a step forward, and answered,&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; "We will have to leave them where they are."&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;He paused, then said,&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; "Joshua, take your men west to the river and follow it downstream. There is a good chance you'll find a road, or perhaps a town. From there you can make your way home. Don't wait for us."&lt;br /&gt;&lt;br /&gt;Joshua had turned away from the rest of the group, but spun around to ask,&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; "What do you mean? Aren't you and Henry coming with us?"&lt;br /&gt;&lt;br /&gt;The older man simply stared back at Joshua. The man named Henry smiled grimly and replied,&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; "Don't worry, we'll catch up with you soon enough."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-672819295428509775?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/672819295428509775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=672819295428509775' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/672819295428509775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/672819295428509775'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2010/02/story-fragment.html' title='A story fragment'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-7050334510972425231</id><published>2009-11-14T00:15:00.001-07:00</published><updated>2009-11-14T00:23:04.114-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='babbling'/><title type='text'>What's on my mind</title><content type='html'>I was planning to write about my computer Go project, but tonight I just feel like letting out some random thoughts.&lt;br /&gt;&lt;br /&gt;I'm listening to Radio Zero again (that is, the &lt;a href="http://www.zerohedge.com/"&gt;Zero Hedge&lt;/a&gt; podcast). Because of RZ, I got interested in trance, which is a style of techno dance music. No, I am not dancing. Get that out of your head! I have discovered that trance is good for programming. I can't explain why, yet, but it's good to have the trance stuff going in the background while I work. I'm starting to appreciate a good mix, too. A seamless flow, smoothly transitioning from one tune to the next.&lt;br /&gt;&lt;br /&gt;On a sidenote, I used to listen to &lt;a href="http://www.rush.com/"&gt;Rush&lt;/a&gt; a lot. It's amazing how Red Barchetta gets you fired up. It's good driving music, funnily enough. I prefer the era prior to Hold Your Fire. With few exceptions, I'm just not thrilled by the later material.&lt;br /&gt;&lt;br /&gt;The biggest reason I got into programming is that it's a way for me to create things. We can debate how tangible a program is. I'm not good mechanically, or artistically, or any number of other ways that one might build things. But I do have a bit of a knack for programming, so that's what I do.&lt;br /&gt;&lt;br /&gt;Maintaining other people's software can be a chore, sometimes downright painful. I strongly resist the urge to rewrite it all, because I know that's a crutch. When there are other stakeholders involved, such as at my employer, rewrites are not usually an option anyway.&lt;br /&gt;&lt;br /&gt;Last random thought for now. People with blogs, especially my friends, should keep writing. Yeah, OK, you might not think your day was interesting. Or maybe you don't think you have anything to say. You should take a risk anyway, get something written down, and let it go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-7050334510972425231?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/7050334510972425231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=7050334510972425231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7050334510972425231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7050334510972425231'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/11/whats-on-my-mind.html' title='What&apos;s on my mind'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-8841293455953502071</id><published>2009-11-09T21:16:00.001-07:00</published><updated>2009-11-09T21:17:35.093-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crossfit'/><title type='text'>Today's workout</title><content type='html'>I have been remiss in posting my workout results. Today, our warmup was to alternate 200m rowing and 1 minute of double-unders, for 5 rounds. Danielle and I got there a little late, so I ended up only doing three rounds. But it was a good start. Rowing is one of my strengths, and I'm getting better and better at double-unders.&lt;br /&gt;&lt;br /&gt;The WOD was called Eva, and it was 5 rounds of:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;800m run&lt;/li&gt;&lt;li&gt;30 kettle bell swings (75lbs was prescribed, ha ha)&lt;/li&gt;&lt;li&gt;30 pullups&lt;/li&gt;&lt;/ul&gt;I learned first-hand why this WOD is considered really tough. I scaled the kb swings to 35lbs and then dropped down to 26lbs. And I am still doing jumping pullups. My time was 46:30 (plus or minus some seconds, I didn't write my time down before I left -- /me dummy). It felt really good to finish!&lt;br /&gt;&lt;br /&gt;The exact time is not actually the main thing for me right now. My goal in the near term is to get to the point where I don't have to be taking breaks in between sets, and more importantly, to not be the last or next to last in results every workout. If I can solve that, then I'll know I've reached the next level.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-8841293455953502071?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/8841293455953502071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=8841293455953502071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8841293455953502071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8841293455953502071'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/11/todays-workout.html' title='Today&apos;s workout'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-9060539964391098134</id><published>2009-10-15T20:17:00.000-06:00</published><updated>2009-10-15T20:17:41.938-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crossfit'/><title type='text'>Today's workout</title><content type='html'>Today we had to do 5 rounds of the following:&lt;br /&gt;&lt;br /&gt;- 10 Ring Pushups&lt;br /&gt;- 5 Squat Cleans&lt;br /&gt;- 250 m Row&lt;br /&gt;&lt;br /&gt;I got mine done in 15:09, and was exhausted at the end, although my squat cleans were just using the 40lb bar. I haven't quite got the hang of the squat cleans yet, but I'm getting closer. Practice, practice, practice. Then we worked on ring dips and renegade rows.&lt;br /&gt;&lt;br /&gt;I am happy to say that I am up-to-date with my burpees for the burpee challenge. We have to do an ever increasing number, increasing by one each day, until Jan 8th when a total of 100 burpees will be required. But for tomorrow, it's &lt;i&gt;just&lt;/i&gt; 16 of them. I think doing them in the morning before I head out is working pretty well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-9060539964391098134?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/9060539964391098134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=9060539964391098134' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/9060539964391098134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/9060539964391098134'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/10/todays-workout_15.html' title='Today&apos;s workout'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-7251542351931758027</id><published>2009-10-13T20:06:00.002-06:00</published><updated>2009-10-13T20:13:31.330-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crossfit'/><title type='text'>Today's workout</title><content type='html'>Today at the &lt;a href="http://www.foothillscrossfit.com/"&gt;gym&lt;/a&gt;, Robyn had us do the "Filthy Fifty". Don't you love all these nifty CrossFit named workouts? In this case, you are asked to do 50 reps each of:&lt;br /&gt;&lt;br /&gt;- Box Jump 24"/20"&lt;br /&gt;- Jumping Pullup&lt;br /&gt;- KB Swing 1 pood&lt;br /&gt;- Walking Lunge 50 steps&lt;br /&gt;- KTE&lt;br /&gt;- Push Press 45#&lt;br /&gt;- Back Ext.&lt;br /&gt;- Wall Ball 20#/14#&lt;br /&gt;- Burpee&lt;br /&gt;- Double Under&lt;br /&gt;&lt;br /&gt;What is a "pood", you ask? The &lt;a href="http://www.crossfit.com/"&gt;main CrossFit&lt;/a&gt; site says it is a "Russian measure used for kettlebells; common ones: 1 pood =36 lbs; 1.5 pood = 54 lbs; 2 pood = 72 lbs. Approx db equivalents are 35, 55, 70". I chose a half-pood, or 18lbs.&lt;br /&gt;&lt;br /&gt;KTE stands for "knees to elbows," and as Robyn said today, "from the bar is preferred." But some of us (i.e., me) had to substitute with a few crunches on the floor on our backs. The Back Extension is supposed to be done with weight, but I had to scale down to a very light bar because I don't yet have the flexibility to get my arms back enough to have the bar resting on my back muscles. I had to substitute a bunch of push-ups for half of my burpees. And finally, I substituted x3 single-unders for the double-under jump roping. And then I tossed in a run around the building, which is not quite 400m unless you keep going to the next warehouse entrance and come back.&lt;br /&gt;&lt;br /&gt;And that's not counting the 25 burpees I did this morning (with real push-ups) to stay up-to-date with the burpee challenge! Man, I am wiped out now, but feeling good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-7251542351931758027?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/7251542351931758027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=7251542351931758027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7251542351931758027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7251542351931758027'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/10/todays-workout_13.html' title='Today&apos;s workout'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-8057078659047654869</id><published>2009-10-08T20:06:00.000-06:00</published><updated>2009-10-08T20:06:12.124-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='babbling'/><title type='text'>Random incoherent thoughts</title><content type='html'>Had another kick-ass workout at the &lt;a href="http://foothillscrossfit.com/"&gt;gym&lt;/a&gt; today, but I'm too tired to write about it much. Plus I need to get back to debugging some stuff for work. I was at work by 7:15am today and yet I still need to put more time into the project. I will be joining a number of my co-workers in presenting our projects company-wide tomorrow in the early afternoon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-8057078659047654869?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/8057078659047654869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=8057078659047654869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8057078659047654869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8057078659047654869'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/10/random-incoherent-thoughts.html' title='Random incoherent thoughts'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-5880140211500030005</id><published>2009-10-05T19:58:00.001-06:00</published><updated>2009-10-05T21:10:18.363-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crossfit'/><title type='text'>Well, that wasn't so good</title><content type='html'>I got a little carried away (heh heh) with my deadlift weight today, and strained my back a bit. I did 21 reps @ 160lbs, then 21 kettle bell snatches on each arm, and 21 box jumps. I started the next round which was going to be 15 reps, but  had to quit early because of my back and I don't think I'll be doing my burpees for the day. Darn it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-5880140211500030005?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/5880140211500030005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=5880140211500030005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/5880140211500030005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/5880140211500030005'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/10/well-that-wasnt-so-good.html' title='Well, that wasn&apos;t so good'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-4439007458134273080</id><published>2009-10-03T11:23:00.000-06:00</published><updated>2009-10-03T11:23:17.595-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crossfit'/><title type='text'>Today's workout</title><content type='html'>&lt;a href="http://foothillscrossfit.com/"&gt;Robyn&lt;/a&gt; held her Saturday workout in the usual place today, &lt;a href="http://ci.golden.co.us/Page.asp?NavID=193"&gt;Parfet Park in Golden, CO&lt;/a&gt;. It was a beautiful, sunny morning. We had to start with 50 kettle bell swings and 10 ball slams, followed by 50m of burpee broad-jumps, then 40 kb swings and 20 ball slams, another 50m of burpee broad-jumps, and so on until we finished with 10 kb swings and 50 ball slams. I was not in the best place mentally for this -- I hate burpees. But Danielle and the other folks provided lots of encouragement, and helped me get through it. Thanks you guys!&lt;br /&gt;&lt;br /&gt;And Robyn is challenging us to do burpees every day -- 1 on Oct. 1st, 2 on Oct. 2nd, and so on. I missed the first couple days worth, so I have to do 6 today, and then it will be 4 tomorrow, 5 on Monday, etc. The end goal is to do 100 burpees for time on Jan 8th. Oh man, that's gonna suck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-4439007458134273080?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/4439007458134273080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=4439007458134273080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/4439007458134273080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/4439007458134273080'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/10/todays-workout_03.html' title='Today&apos;s workout'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-2999394137917193598</id><published>2009-10-01T21:34:00.000-06:00</published><updated>2009-10-01T21:34:11.350-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crossfit'/><title type='text'>Today's workout</title><content type='html'>The workout at the &lt;a href="http://www.foothillscrossfit.com/"&gt;gym&lt;/a&gt; today was called "The Bear". You had to do the following:&lt;br /&gt;&lt;br /&gt;- Power Clean&lt;br /&gt;- Front Squat&lt;br /&gt;- Push Press&lt;br /&gt;- Back Squat&lt;br /&gt;- Push Press&lt;br /&gt;&lt;br /&gt;7 times to count as one round, without putting the bar down. Then you could rest as much as you wanted before starting the next round. And you had to do a total of 5 rounds. And it was &lt;i&gt;hard&lt;/i&gt;. I started with a 40lb bar and then added 10lbs for subsequent rounds, and it was still hard. I don't even want to say how long it took me to get through it (hint: more than 45 minutes). Part of the challenge is I'm still working on my form, but most of it is that I have a lot of work to do yet to get strong. It was a &lt;b&gt;great&lt;/b&gt; workout even so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-2999394137917193598?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/2999394137917193598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=2999394137917193598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2999394137917193598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2999394137917193598'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/10/todays-workout.html' title='Today&apos;s workout'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-3339655876266839444</id><published>2009-09-30T22:42:00.000-06:00</published><updated>2009-09-30T22:42:24.883-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crossfit'/><title type='text'>Today's workout</title><content type='html'>Rowing: 6525 meters in 30 minutes&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-3339655876266839444?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/3339655876266839444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=3339655876266839444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3339655876266839444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3339655876266839444'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/09/todays-workout_30.html' title='Today&apos;s workout'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-5673475131405035871</id><published>2009-09-28T22:07:00.000-06:00</published><updated>2009-09-28T22:07:45.864-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crossfit'/><title type='text'>Today's workout</title><content type='html'>The workout today at the &lt;a href="http://www.foothillscrossfit.com/"&gt;gym&lt;/a&gt; was:&lt;br /&gt;&lt;br /&gt;1 mile run&lt;br /&gt;100 pullups&lt;br /&gt;100 pushups&lt;br /&gt;100 situps&lt;br /&gt;100 squats&lt;br /&gt;1 mile run&lt;br /&gt;&lt;br /&gt;I substituted jumping pullups, and half-pushups plus kettle bell swings. My total time was 52:08. I got the first mile done in 8:48 which is pretty good for me at this point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-5673475131405035871?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/5673475131405035871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=5673475131405035871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/5673475131405035871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/5673475131405035871'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/09/todays-workout.html' title='Today&apos;s workout'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-7183605106510944112</id><published>2009-09-26T12:49:00.001-06:00</published><updated>2009-09-26T13:01:04.316-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crossfit'/><title type='text'>Fight Gone Bad results</title><content type='html'>&lt;i&gt;Fight Gone Bad&lt;/i&gt; is one of the standard named workouts in &lt;a href="http://www.crossfit.com/"&gt;CrossFit&lt;/a&gt;, and today's workout at &lt;a href="http://www.foothillscrossfit.com/"&gt;my gym&lt;/a&gt; was part of a &lt;a href="http://www.fgb4.org/"&gt;fundraising event&lt;/a&gt; that lots of gyms participated in. You spend one minute at each of five stations after which you get a one-minute break, and then you go again. The stations are:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 1. Wall-ball, 10 ft target (Reps)&lt;br /&gt;&amp;nbsp;&amp;nbsp; 2. Sumo deadlift high-pull (Reps)&lt;br /&gt;&amp;nbsp;&amp;nbsp; 3. Box jump (Reps)&lt;br /&gt;&amp;nbsp;&amp;nbsp; 4. Push-press (Reps)&lt;br /&gt;&amp;nbsp;&amp;nbsp; 5. Row (Calories)&lt;br /&gt;&lt;br /&gt;You have to do three rounds and the clock does not stop until the three rounds are done. Then you add up your reps (and calories from the rowing machine), and that's your score. There are four divisions, and I was in the one called "Class B: Modified Men/Standard Women" which means that the weights are lower than in Class A.&lt;br /&gt;&lt;br /&gt;I got a score of 206. I anticipate moving up to class A next time, but until then I need to work on having perfect form at each station and be able to keep going without any short breathers. Anyway, it was a lot of fun, especially that so many people showed up to participate!&lt;br /&gt;&lt;br /&gt;Edit: full disclosure -- I only did step-ups for the box jump (20") so that means my score was in reality lower, but I don't know what the proper scaling factor would be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-7183605106510944112?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/7183605106510944112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=7183605106510944112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7183605106510944112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7183605106510944112'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/09/fight-gone-bad-results.html' title='Fight Gone Bad results'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-8414089314675514823</id><published>2009-09-19T11:16:00.000-06:00</published><updated>2009-09-19T11:16:31.779-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social'/><title type='text'>unboxing videos</title><content type='html'>I'm wondering who it is that actually likes watching "unboxing" videos? E.g., 5 minutes of someone tearing the packaging off their new iPhone or whatever. There are hundreds of them on YouTube. Is it living vicariously, or do people just really enjoy new product packaging?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-8414089314675514823?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/8414089314675514823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=8414089314675514823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8414089314675514823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8414089314675514823'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/09/unboxing-videos.html' title='unboxing videos'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-1949190014618742660</id><published>2009-09-12T21:49:00.002-06:00</published><updated>2009-09-12T21:54:56.287-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>New music</title><content type='html'>Here are some bands I've recently discovered via iTunes. Check 'em out:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.circusmaximussite.com/"&gt;Circus Maximus&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.myspace.com/ifthesetreescouldtalk"&gt;If These Trees Could Talk&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.myspace.com/purereasonrevolution"&gt;Pure Reason Revolution&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.riverside.art.pl/en/"&gt;Riverside&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vandenplas.de/news.php"&gt;Vanden Plas&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-1949190014618742660?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/1949190014618742660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=1949190014618742660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1949190014618742660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1949190014618742660'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/09/new-music.html' title='New music'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-4198191651127497596</id><published>2009-07-26T17:46:00.004-06:00</published><updated>2009-09-12T14:18:47.362-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crossfit'/><title type='text'>What am I getting myself into?</title><content type='html'>I'm joining a &lt;a href="http://www.crossfit.com/cf-info/what-crossfit.html"&gt;CrossFit&lt;/a&gt; gym. I went to a free workout yesterday with my wife Danielle to check out the gym I will be joining. She has taken me to Saturday workouts at the gym she goes to. I like her gym, but &lt;a href="http://www.mbscrossfit.com/"&gt;MBS&lt;/a&gt; is closer both to home and to work, so it's more practical for me to get there regularly. This is the start of some really tough workouts for me, but if I can make it through the first month, I'll be OK.&lt;br /&gt;&lt;br /&gt;8/28/09 Update: I moved to the&lt;a href="http://foothillscrossfit.com/"&gt;&lt;/a&gt; gym Danielle has been going to after all. &lt;a href="http://www.mbscrossfit.com/"&gt;MBS&lt;/a&gt; is great, but for various reasons I like &lt;a href="http://foothillscrossfit.com/"&gt;Foothills Crossfit&lt;/a&gt; better. And I signed up for the &lt;a href="http://www.fgb4.org/"&gt;Fight Gone Bad IV fundraiser&lt;/a&gt; that will happen in late September.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-4198191651127497596?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/4198191651127497596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=4198191651127497596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/4198191651127497596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/4198191651127497596'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/07/what-am-i-getting-myself-into.html' title='What am I getting myself into?'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-2563612319577089936</id><published>2009-06-21T16:19:00.004-06:00</published><updated>2009-06-21T16:29:10.017-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seasons'/><title type='text'>First day of summer</title><content type='html'>Smells like it's going to rain, again. We can't seem to get out of this weather pattern. In recent years, it had become common for June in Colorado to be hot, hot, hot, and everything not getting regular watering would already be turning brown. Not this year, and the constant rain has had its pluses. But the tornadoes and hail definitely fall on the minus side. This is coming from someone who lives west of I-25 in Colorado snuggled right up against the Front Range, which is to say that we don't have near as much 'fun' as people east of I-25 have, where the real bad stuff comes out of the sky with alarming regularity.&lt;br /&gt;&lt;br /&gt;Man, our lawn needs a whole lotta work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-2563612319577089936?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/2563612319577089936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=2563612319577089936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2563612319577089936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2563612319577089936'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/06/first-day-of-summer.html' title='First day of summer'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-1589924048457030826</id><published>2009-05-10T13:53:00.000-06:00</published><updated>2009-05-10T13:54:51.488-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social'/><title type='text'>A quick message</title><content type='html'>If you really want something from me, please try being more direct.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-1589924048457030826?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/1589924048457030826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=1589924048457030826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1589924048457030826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1589924048457030826'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/05/quick-message.html' title='A quick message'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-6942233641421391189</id><published>2009-05-09T10:04:00.006-06:00</published><updated>2009-09-12T14:16:55.625-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social'/><title type='text'>Net profiles</title><content type='html'>From time to time, I indulge in a little bit of ego-surfing to see what other people see if they search for me. Of course, many of the results reflect my involvement in programming projects on the Net. But I also have noticed various social networking sites that have a default profile set up for me. These sites seem to spring up like mushrooms. It's funny to see what little snippets of my Net presence each of these sites picked up.&lt;br /&gt;&lt;br /&gt;I never felt very motivated to go around and update these profiles until recently, but I did a little of that today -- &lt;a href="http://www.zoominfo.com/"&gt;ZoomInfo&lt;/a&gt;, &lt;a href="http://www.spoke.com/"&gt;Spoke&lt;/a&gt;, &lt;a href="http://www.linkedin.com/"&gt;LinkedIn&lt;/a&gt;. And I updated my &lt;a href="http://www.google.com/profiles/jdunrue"&gt;Google Profile&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;9/12/09 update: I'm on &lt;a href="http://www.facebook.com/"&gt;Facebook&lt;/a&gt; now, if you couldn't already guess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-6942233641421391189?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/6942233641421391189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=6942233641421391189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6942233641421391189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6942233641421391189'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/05/net-profiles.html' title='Net profiles'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-6394643294972069599</id><published>2009-02-09T21:44:00.007-07:00</published><updated>2009-02-09T22:04:22.801-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='theory'/><category scheme='http://www.blogger.com/atom/ns#' term='computer go'/><title type='text'>ladders</title><content type='html'>Here's a completely random thought. Is a &lt;a href="http://senseis.xmp.net/?Ladder"&gt;ladder&lt;/a&gt; in Go an instance of &lt;a href="http://en.wikipedia.org/wiki/Irrational_escalation_of_commitment"&gt;Irrational Escalation&lt;/a&gt;? They are considered to be &lt;a href="http://senseis.xmp.net/?IfYouDontKnowLaddersDontPlayGo"&gt;easily read out&lt;/a&gt;, so what is gained by even playing one more stone? I wonder if experienced players quickly recognize the development of a ladder before it gets past even a couple stones.&lt;br /&gt;&lt;br /&gt;And then, what implications are there, if any, for a strong Go program? I mean, as far as dispensing with the play-out, if that's what good players do?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-6394643294972069599?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/6394643294972069599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=6394643294972069599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6394643294972069599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6394643294972069599'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2009/02/ladders.html' title='ladders'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-1223137346335186452</id><published>2008-06-25T23:07:00.010-06:00</published><updated>2008-06-25T23:39:14.722-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='theory'/><category scheme='http://www.blogger.com/atom/ns#' term='computer go'/><title type='text'>Go from a set theoretic perspective</title><content type='html'>As I work on Dakengo (my &lt;a href="http://senseis.xmp.net/?Go"&gt;Go&lt;/a&gt; playing engine written in &lt;a href="http://www.lisp.org"&gt;Common Lisp&lt;/a&gt;), I'm constantly trying to think in terms of abstractions. Consequently, one of the ideas that popped into my head recently is to try to build a set theoretic model of Go and see if I can derive anything useful. So starting with this entry, I'm going to write down these ideas as they develop.&lt;br /&gt;&lt;br /&gt;Some definitions are in order. I'm going to use the term &lt;span style="font-style: italic;"&gt;position&lt;/span&gt; to refer to a board configuration with zero or more black and/or white stones placed on the intersections, as they would be in a game of Go.&lt;br /&gt;&lt;br /&gt;I'm going to use the term &lt;span style="font-style: italic;"&gt;size&lt;/span&gt; to refer to the dimensions of a square board.  I'm going to restrict myself to board sizes that are actually played in the real world: 9x9, 13x13, and 19x19. Of course, I can add more to the list (for example, some people toss around 25x25 as the next largest board size that anyone might consider playing). The important point is at the end of the day my goal is to write code that runs on actual machines, so I'm not interested in mathematical infinity. It's tough enough that the number of possible positions is so large as to be practically infinite, even if technically finite.&lt;br /&gt;&lt;br /&gt;Also, I'm going to assume some other basic attributes of a game of Go, such as there being two players, one playing white stones and the other black, that each player alternates in placing a single stone (possibly removing prisoners), and that there are mutually-agreed conditions under which the game will end. I'm not going to consider non-traditional variations derived from Go.&lt;br /&gt;&lt;br /&gt;Let's consider sets of positions. One such set to contemplate is that which contains all possible unique positions. Let's call it &lt;span style="font-weight: bold;"&gt;P&lt;/span&gt;. This set is finite because on any given Go board there are finitely many possible configurations of black stones, white stones, and empty intersections. And as I mentioned above, I'm restricting myself to a finite number of possible board sizes.&lt;br /&gt;&lt;br /&gt;Right off the bat, I want to partition &lt;span style="font-weight: bold;"&gt;P&lt;/span&gt; into subsets. This is because when we want to start a game of Go, we have to make some choices before the first stone gets placed. Those choices then reduce the kinds of positions that we need to reason about as the game proceeds. And reasoning about positions is what this effort is all about.&lt;br /&gt;&lt;br /&gt;With some simplification, the choices boil down to:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;the size of the board&lt;/li&gt;&lt;li&gt;which scoring rule is in effect&lt;/li&gt;&lt;li&gt;which ko rule is in effect&lt;/li&gt;&lt;li&gt;whether suicide moves are allowed&lt;/li&gt;&lt;/ol&gt;For the time being, I won't drill down into what the different &lt;a href="http://senseis.xmp.net/?Superko"&gt;superko&lt;/a&gt; rules are, or how &lt;a href="http://senseis.xmp.net/?TerritoryAndAreaScoring"&gt;territory scoring compares to area scoring&lt;/a&gt;, or what the end game protocol is, or any other such details. That stuff doesn't matter at this point and will just muddy the waters. What's important is that choices from those areas have to be made in order to play.&lt;br /&gt;&lt;br /&gt;Let's use &lt;span style="font-weight: bold;"&gt;P&lt;span style="font-style: italic;"&gt;nr&lt;/span&gt;&lt;/span&gt; as the name for the subset of &lt;span style="font-weight: bold;"&gt;P&lt;/span&gt; whose members, which I'll often refer to as &lt;span style="font-weight: bold;"&gt;p&lt;/span&gt; or &lt;span style="font-weight: bold;"&gt;q&lt;/span&gt; or some other lowercase letter, are constrained to those that are valid based on the rules listed above. Here &lt;span style="font-style: italic; font-weight: bold;"&gt;n&lt;/span&gt; is one of the board sizes (9, 13, 19, etc) and &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;r&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;&lt;/span&gt; is a selection from the other choices. I think much of the time, I won't specify &lt;span style="font-style: italic; font-weight: bold;"&gt;r&lt;/span&gt; in any detail, but I think it will be helpful to be explicit about &lt;span style="font-style: italic; font-weight: bold;"&gt;n&lt;/span&gt; in most cases.&lt;br /&gt;&lt;br /&gt;Next time, I want to talk about interesting subsets of &lt;span style="font-weight: bold;"&gt;P&lt;span style="font-style: italic;"&gt;nr&lt;/span&gt;&lt;/span&gt;, and even more interesting than that, I want to define relations between elements of these sets.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-1223137346335186452?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/1223137346335186452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=1223137346335186452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1223137346335186452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1223137346335186452'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2008/06/go-from-set-theoretic-perspective.html' title='Go from a set theoretic perspective'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-2122468632463702546</id><published>2008-06-15T18:24:00.001-06:00</published><updated>2008-06-15T18:46:46.356-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='common lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='computer go'/><title type='text'>A new blog and a clean slate</title><content type='html'>Welcome to my new blog. I'm retiring &lt;a href="http://awayrepl.blogspot.com/"&gt;Step Away from the REPL&lt;/a&gt; in favor of this one, which will be more free-form in the sense that I will write about anything that comes to mind, rather than only Lisp or programming. That being said, I won't stay away from programming topics on purpose and probably will still jabber about it quite a bit, like for example in this very blog entry.&lt;br /&gt;&lt;br /&gt;So yes, I still do a lot of programming in my free time. I'm working on a computer-go engine which I call Dakengo. I don't have a webpage for it yet, but that will be addressed. There is a backend written in Common Lisp (specifically &lt;a href="http://www.sbcl.org"&gt;SBCL&lt;/a&gt;) where all of the decision-making is implemented, as well as support for &lt;a href="http://www.red-bean.com/sgf/"&gt;SGF&lt;/a&gt; and &lt;a href="http://www.lysator.liu.se/%7Egunnar/gtp/"&gt;GTP&lt;/a&gt; and various other bits of infrastructure. And there are some pieces, such as the GUI, implemented in other languages. I'll write more about Dakengo in the future.&lt;br /&gt;&lt;br /&gt;Anyway, there it is. Thanks for reading this stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-2122468632463702546?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/2122468632463702546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=2122468632463702546' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2122468632463702546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2122468632463702546'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2008/06/new-blog-and-clean-slate.html' title='A new blog and a clean slate'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-5049265812137452349</id><published>2007-10-16T22:08:00.000-06:00</published><updated>2009-09-12T23:48:53.279-06:00</updated><title type='text'>GNU CLISP 2.42 has been released</title><content type='html'>You can read the full announcement &lt;a href="http://permalink.gmane.org/gmane.lisp.clisp.announce/38"&gt;here&lt;/a&gt;. I have uploaded a MinGW build for Windows to SF.net and it should appear in the &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=1355"&gt;file releases section&lt;/a&gt; shortly. Other folks are working on binary distributions for their favorite platforms. And of course, you can get more information at the &lt;a href="http://clisp.cons.org"&gt;CLISP homepage&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-5049265812137452349?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/5049265812137452349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=5049265812137452349' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/5049265812137452349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/5049265812137452349'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2007/10/gnu-clisp-242-has-been-released.html' title='GNU CLISP 2.42 has been released'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-152093881994012256</id><published>2007-09-04T10:46:00.000-06:00</published><updated>2009-09-12T23:48:53.286-06:00</updated><title type='text'>new burden on sites hosting open-source projects</title><content type='html'>All the &lt;span style="font-style: italic;"&gt;cool&lt;/span&gt; kids are registering themselves and their projects at &lt;a href="http://www.ohloh.net"&gt;Ohloh.net&lt;/a&gt;, which bills itself as 'the open source network'. I'll let the visionaries of the blogosphere weigh in with insightful commentary about what Ohloh should mean to us all.&lt;br /&gt;&lt;br /&gt;I did want to make one observation, though. It doesn't take much poking around to notice that there is a bit of an issue with downloading project history. The connection between you and the meta-data from your project(s) is a big part of what drives up your &lt;a href="http://www.ohloh.net/about/kudos"&gt;KudoRank&lt;/a&gt;. So obviously, you'd like to see the meta-data downloaded and processed as soon as you register each of your projects. But download failures seem to be a common problem -- not with all projects, but enough of them to be noticeable.&lt;br /&gt;&lt;br /&gt;I started wondering how much of an unexpected burden is being placed on the sites hosting open-source projects by the rise in popularity of &lt;a href="http://www.ohloh.net"&gt;Ohloh.net&lt;/a&gt;. Take &lt;a href="http://common-lisp.net"&gt;common-lisp.net&lt;/a&gt;, for instance, which hosts the source repos for many Common Lisp projects. Until now, it looked like the level of &lt;a href="http://common-lisp.net/donate.shtml"&gt;donations&lt;/a&gt; was keeping pace with the regular bandwidth costs and other expenses. But is Ohloh driving bandwidth costs up? And, is some fraction of the download problems that are observed at Ohloh possibly due to site administrators taking counter-measures to try to mitigate this issue?&lt;br /&gt;&lt;br /&gt;It will be interesting to see if this is a real issue. In any case, this is a good excuse to encourage everyone to support the sites that host our projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-152093881994012256?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/152093881994012256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=152093881994012256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/152093881994012256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/152093881994012256'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2007/09/new-burden-on-sites-hosting-open-source.html' title='new burden on sites hosting open-source projects'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-3627262456978239546</id><published>2007-08-25T01:50:00.000-06:00</published><updated>2009-09-12T23:48:53.294-06:00</updated><title type='text'>clim-graphic-forms event handling still broken</title><content type='html'>Update 9/2/2007: in the time since I originally posted this entry, I figured out the problem. Every event dispatched to the McCLIM framework gets a timestamp, and these timestamps must be sane. Whereas before all currently queued events were getting their timestamps reset to the same value, I now make sure that each event is stamped using GFW:OBTAIN-EVENT-TIME. And so the annoying misbehaviors with decoration rendering, sizing, and moving of frames were resolved.&lt;br /&gt;&lt;br /&gt;Original text follows:&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Over the last several days, I made another attempt to fix event handling in clim-graphic-forms, which is a backend that I started for &lt;a href="http://common-lisp.net/project/mcclim/"&gt;McCLIM&lt;/a&gt; using &lt;a href="http://common-lisp.net/project/graphic-forms"&gt;Graphic-Forms&lt;/a&gt;. The problem is hard to describe, but the most visible symptom is that top level windows act like non-client messages are only getting sporadically processed. For example, if I drag a top level window by its titlebar to a new location and let go, it becomes unresponsive to further mouse input until I deactivate and then reactivate the window. Or if I resize a window, the right and bottom frame decorations are not drawn -- even the titlebar doesn't resize. If I comment out the lines of code where I notify McCLIM via window configuration events, then of course McCLIM is prevented from doing what it needs to do, but the window frame starts to behave correctly.&lt;br /&gt;&lt;br /&gt;The backend maintains an internal event queue which gets populated by various GFW:EVENT-*** methods and which is drained by CLIMI::GET-NEXT-EVENT. GET-NEXT-EVENT also has the job of retrieving each new message from Windows. I have experimented with several other approaches, including reimplementing CLIMI::SIMPLE-EVENT-LOOP to call GFW:MESSAGE-LOOP directly with a custom message filter that calls CLIMI::HANDLE-EVENT directly. The end result is the same.&lt;br /&gt;&lt;br /&gt;I could work on filling in other missing functionality, but this event handling issue really bugs me to the point of extreme frustration. What is it about calling back into McCLIM during an event that causes such problems? I have no idea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-3627262456978239546?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/3627262456978239546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=3627262456978239546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3627262456978239546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3627262456978239546'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2007/08/clim-graphic-forms-event-handling-still.html' title='clim-graphic-forms event handling still broken'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-1492144502440695766</id><published>2007-08-20T23:28:00.000-06:00</published><updated>2009-09-12T23:48:53.302-06:00</updated><title type='text'>Graphic-Forms version 0.8.0</title><content type='html'>Release 0.8.0 of Graphic-Forms, a Common Lisp library for Windows GUI programming, is now available. The API and feature set is still evolving, so this is still another alpha release.&lt;br /&gt;&lt;br /&gt;New in this release:&lt;br /&gt;&lt;br /&gt;- Added a new macro GFW:DEFMENU2 and associated function GFW:MAKE-MENU to allow applications to create reusable menu factories.&lt;br /&gt;&lt;br /&gt;- Latest CFFI is required to take advantage of built-in support for the stdcall calling convention as well as improved interface for defining foreign types and translators.&lt;br /&gt;&lt;br /&gt;- Integrated patch submitted by Leon van Dyk that enables dialog-only applications. The GFT::STANDALONE-DIALOG function demonstrates this feature, but NOTE that when this is invoked from SLIME, an old problem reappears where the dialog is not initially visible; however, the same demo run directly from the REPL works OK.&lt;br /&gt;&lt;br /&gt;- Ported the library to Allegro CL 8.0.&lt;br /&gt;&lt;br /&gt;- Upgraded to LispWorks 5.0.1 (note: 4.4.6 is no longer supported)&lt;br /&gt;&lt;br /&gt;- Implemented GFW:STATUS-BAR which currently allow a single text field. Multi-part status bars, and nested widget support, will be added in a future release.&lt;br /&gt;&lt;br /&gt;- Implemented GFW:PROGRESS-BAR, which provides visual progress feedback. This control can be configured for horizontal or vertical orientation, and can display a segmented or continuous indicator.&lt;br /&gt;&lt;br /&gt;- Simplified the mechanism for specifying fixed, non-resizable windows by adding a new GFW:TOP-LEVEL style called :FIXED-SIZE and  enhancing GFW:PACK to do the right thing if that style flag has been specified.&lt;br /&gt;&lt;br /&gt;- Greatly expanded the symbols for accessing predefined colors, and now provide access to system color settings in a similar manner.&lt;br /&gt;&lt;br /&gt;- Implemented a new graphics context function GFG:CLEAR that is a convenient way to fill a window or image with a background color.&lt;br /&gt;&lt;br /&gt;- GFS:OBTAIN-SYSTEM-METRICS now includes version information for comctl32.dll and shell32.dll.&lt;br /&gt;&lt;br /&gt;The README.txt file in the release zip file also has additional important information about this release.&lt;br /&gt;&lt;br /&gt;Download the release zip file here:&lt;br /&gt;http://prdownloads.sourceforge.net/graphic-forms/graphic-forms-0.8.0.zip?download&lt;br /&gt;&lt;br /&gt;The project website is:&lt;br /&gt;http://common-lisp.net/project/graphic-forms/&lt;br /&gt;&lt;br /&gt;Jack Unrue&lt;br /&gt;jdunrue (at) gmail (dot) com&lt;br /&gt;20 August 2007&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-1492144502440695766?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/1492144502440695766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=1492144502440695766' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1492144502440695766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1492144502440695766'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2007/08/graphic-forms-version-080.html' title='Graphic-Forms version 0.8.0'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-6654311277615749567</id><published>2007-08-05T19:40:00.000-06:00</published><updated>2009-09-12T23:48:53.311-06:00</updated><title type='text'>doc authoring system</title><content type='html'>When I work on a project, I generally try to write documentation in parallel with the code, even for projects that I don't intend to open source. Firstly, having that resource available frees up my mental bandwidth for thinking about the current problem I'm trying to solve. Secondly, it's a substitute (some might say a bad substitute) for certain kinds of design documentation, although I try hard to write docs with the end user in mind. And third, it's a way to sanity check ideas, such as when I'm designing some protocol. Having that stuff written down helps me see the big picture for what I'm trying to do, and providing it right away in the reference manual seems beneficial.&lt;br /&gt;&lt;br /&gt;A while ago, I settled on &lt;a href="http://www.sagehill.net/docbookxsl/index.html"&gt;DocBook/XSL&lt;/a&gt; as my authoring system. I use an extension of &lt;a href="http://docbook.sourceforge.net/"&gt;DocBook&lt;/a&gt; that I wrote which makes my personal style of structuring a CL project reference guide easier to build. It also provides some conveniences for the particular way that the syntax of CL functions/macros/etc are shown. The extensions are a set of XSL templates implementing some higher-level constructs that go along with the &lt;a href="http://www.sagehill.net/docbookxsl/index.html"&gt;DocBook&lt;/a&gt;&lt;a href="http://www.sagehill.net/docbookxsl/index.html"&gt; stylesheets&lt;/a&gt;; these get transformed into the &lt;a href="http://docbook.sourceforge.net/"&gt;DocBook&lt;/a&gt; vocabulary for later processing.&lt;br /&gt;&lt;br /&gt;Here's an example of the help source for a function called MAKE-POINT in a package called LPC, using the extension vocabulary that I mentioned above:&lt;pre&gt;&amp;lt;function name="make-point"&amp;gt;&lt;br /&gt;&amp;lt;syntax&amp;gt;&lt;br /&gt;  &amp;lt;arguments&amp;gt;&lt;br /&gt;    &amp;lt;argument name="coords"&amp;gt;&lt;br /&gt;      &amp;lt;description&amp;gt;&lt;br /&gt;        One of:&lt;br /&gt;        &amp;lt;itemizedlist mark="bullet" spacing="compact"&amp;gt;&lt;br /&gt;          &amp;lt;listitem&amp;gt;&lt;br /&gt;            A &amp;lt;refclhs&amp;gt;list&amp;lt;/refclhs&amp;gt; of alternating x/y coordinate values.&lt;br /&gt;          &amp;lt;/listitem&amp;gt;&lt;br /&gt;          &amp;lt;listitem&amp;gt;&lt;br /&gt;            An &amp;lt;refclhs&amp;gt;integer&amp;lt;/refclhs&amp;gt; x coordinate value.&lt;br /&gt;          &amp;lt;/listitem&amp;gt;&lt;br /&gt;        &amp;lt;/itemizedlist&amp;gt;&lt;br /&gt;      &amp;lt;/description&amp;gt;&lt;br /&gt;    &amp;lt;/argument&amp;gt;&lt;br /&gt;    &amp;lt;notarg name="&amp;optional"/&amp;gt;&lt;br /&gt;    &amp;lt;argument name="y-coord"&amp;gt;&lt;br /&gt;      &amp;lt;description&amp;gt;&lt;br /&gt;        An &amp;lt;refclhs&amp;gt;integer&amp;lt;/refclhs&amp;gt; y coordinate value.&lt;br /&gt;      &amp;lt;/description&amp;gt;&lt;br /&gt;    &amp;lt;/argument&amp;gt;&lt;br /&gt;  &amp;lt;/arguments&amp;gt;&lt;br /&gt;  &amp;lt;return&amp;gt;&lt;br /&gt;    &amp;lt;refclhs&amp;gt;vector&amp;lt;/refclhs&amp;gt;&lt;br /&gt;  &amp;lt;/return&amp;gt;&lt;br /&gt;&amp;lt;/syntax&amp;gt;&lt;br /&gt;&amp;lt;description&amp;gt;&lt;br /&gt;  This function returns a &amp;lt;refclhs&amp;gt;vector&amp;lt;/refclhs&amp;gt; representing one or&lt;br /&gt;  more points.&lt;br /&gt;&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;lt;seealso&amp;gt;&lt;br /&gt;  &amp;lt;reftopic&amp;gt;lpc:point-x&amp;lt;/reftopic&amp;gt;&lt;br /&gt;  &amp;lt;reftopic&amp;gt;lpc:point-y&amp;lt;/reftopic&amp;gt;&lt;br /&gt;  &amp;lt;reftopic&amp;gt;lpc:point-elt&amp;lt;/reftopic&amp;gt;&lt;br /&gt;&amp;lt;/seealso&amp;gt;&lt;br /&gt;&amp;lt;/function&amp;gt;&lt;/pre&gt; It's possible to mix tags from my extension vocabulary (e.g., &lt;span style="font-style: italic;"&gt;function&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;syntax&lt;/span&gt;,&lt;br /&gt;&lt;span style="font-style: italic;"&gt;reftopic&lt;/span&gt;) with &lt;a href="http://www.sagehill.net/docbookxsl/index.html"&gt;DocBook/XSL&lt;/a&gt; tags (e.g., &lt;span style="font-style: italic;"&gt;itemizedlist&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;listitem&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;This is what the end  result looks like:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lispwidgets.net/make-point-doc.png"&gt;http://lispwidgets.net/make-point-doc.png&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The output format is &lt;a href="http://en.wikipedia.org/wiki/HTML_help"&gt;HTML Help&lt;/a&gt;, so the above screenshot shows part of the help viewer (it doesn't show the search/index tab nor the toolbar). My development platform is Windows XP. Not that there is anything wrong with portable solutions, and you know, raw HTML is often as good a choice as anything else. But &lt;a href="http://en.wikipedia.org/wiki/HTML_help"&gt;HTML Help&lt;/a&gt; has features that I want, it's fairly customizable, and I can't think of many situations where a Windows user wouldn't have the viewer. Underlying this is the fact that I generally assume a Windows-based development environment for my work.&lt;br /&gt;&lt;br /&gt;One future improvement I'd like to explore some day is to extract CL doc strings from the code and merge that in with other help content. I hear the &lt;a href="http://www.sbcl.org"&gt;SBCL&lt;/a&gt; developers do something along these lines to generate their &lt;a href="http://sbcl-internals.cliki.net/The%20Manual"&gt;manual&lt;/a&gt;, one difference being that I believe they are using &lt;a href="http://www.gnu.org/software/texinfo/manual/texinfo/html_node/index.html"&gt;texinfo&lt;/a&gt; or at least migrating in that direction, so I ought to take a look at what they do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-6654311277615749567?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/6654311277615749567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=6654311277615749567' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6654311277615749567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6654311277615749567'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2007/08/doc-authoring-system.html' title='doc authoring system'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-3458907078867908929</id><published>2007-07-08T23:13:00.000-06:00</published><updated>2009-09-12T23:48:53.323-06:00</updated><title type='text'>8 July 2007</title><content type='html'>Miscellaneous bits of recent &lt;a href="http://common-lisp.net/project/graphic-forms/"&gt;Graphic-Forms&lt;/a&gt; activity:&lt;br /&gt;&lt;br /&gt;I read that the &lt;a href="http://common-lisp.net/project/cffi/"&gt;CFFI&lt;/a&gt; developers &lt;a href="http://common-lisp.net/pipermail/cl-opengl-devel/2007-June/000117.html"&gt;decided to merge their newtypes branch into mainline&lt;/a&gt;. Having created a corresponding branch in my svn repository a while back to track the newtypes changes, I went ahead and merged my newtypes-specific code into my project's mainline.&lt;br /&gt;&lt;br /&gt;For a long time, I've had a DEFMENU macro that implements a DSL for creating menu hierarchies. I recently checked in a new feature that allows applications to create reusable menu factories. DEFMENU continues to return a menu tree (with fully instantiated HWNDs), but now folks can use DEFMENU2 to define a factory which can be used over and over again. I'm planning a similar (but broader in scope) DSL that will enable declarative window and dialog specifications, and this latter feature has a prerequisite for the menu functionality.&lt;br /&gt;&lt;br /&gt;A nice person submitted a patch that enables dialog-only apps. I will merge that change shortly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-3458907078867908929?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/3458907078867908929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=3458907078867908929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3458907078867908929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3458907078867908929'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2007/07/8-july-2007.html' title='8 July 2007'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-7421135003181661010</id><published>2007-05-26T20:03:00.000-06:00</published><updated>2009-09-12T23:48:53.330-06:00</updated><title type='text'>arbitrary precision decimal library</title><content type='html'>A week or so ago, I realized that I needed a &lt;a href="http://www2.hursley.ibm.com/decimal/decifaq.html"&gt;decimal arithmetic&lt;/a&gt; library, so I decided to start working on one. That is to say, I didn't look around very hard to see if there were any existing CL-based libraries or FFI wrappers, since I was itching to work on something new.&lt;br /&gt;&lt;br /&gt;Common Lisp already &lt;a href="http://www.lispworks.com/documentation/HyperSpec/Body/12_a.htm"&gt;defines&lt;/a&gt; a rich set of number types and operations, including unbounded precision for integers and ratios. But there is no standard type providing exact decimal fraction representation and rounding. As an example, if we have a file containing company financial data, and we want to read that in, then do some computation on the data with amounts rounded correctly, we need to write some code.&lt;br /&gt;&lt;br /&gt;So after a few evenings of work, I now have basic arithmetic operations implemented, including decimal division. I have a reader macro #D defined for convenience. And of course, I implemented several equivalents of the CL functions like incf, decf, zerop, signum, etc. I currently only support &lt;a href="http://www.diycalculator.com/popup-m-round.shtml#A5"&gt;half-even (also known as banker's) rounding&lt;/a&gt;, since my primary intended use is for finance, and from what I understand half-even rounding theoretically does the best job of minimizing cumulative errors. I do know about &lt;a href="http://www2.hursley.ibm.com/decimal/"&gt;IBM's spec&lt;/a&gt;, but my requirements aren't that sophisticated (yet).&lt;br /&gt;&lt;br /&gt;I'm happy to share this code, if anyone's interested.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-7421135003181661010?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/7421135003181661010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=7421135003181661010' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7421135003181661010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7421135003181661010'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2007/05/arbitrary-precision-decimal-library.html' title='arbitrary precision decimal library'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-6611212926309477230</id><published>2007-04-01T19:11:00.000-06:00</published><updated>2009-09-12T23:48:53.338-06:00</updated><title type='text'>1 April 2007</title><content type='html'>Some of my recent development activity:&lt;br /&gt;&lt;br /&gt;- Having brought &lt;a href="http://common-lisp.net/project/graphic-forms"&gt;Graphic-Forms&lt;/a&gt; more or less up-to-date with latest &lt;a href="http://common-lisp.net/project/cffi"&gt;CFFI&lt;/a&gt;, I returned to work on the task of supporting status bars in top-level windows.&lt;br /&gt;- I also spent some time poking at event handling in clim-graphic-forms.&lt;br /&gt;- I responded to a couple help requests for &lt;a href="http://clisp.cons.org"&gt;CLISP&lt;/a&gt; on Windows; one of those problems appears to be a bug in the &lt;a href="http://www.mingw.org/"&gt;MinGW&lt;/a&gt; component that supplies the Win32 headers and libraries. It's one of those cases where some particular values are needed and these can't be extracted from the MS headers and libs for licensing reasons.&lt;br /&gt;&lt;br /&gt;And that's not to mention the fun stuff I'm doing at work (not in Lisp, but still fun). I tried hard to ignore all the April Fool's silliness, but the &lt;a href="http://mail.google.com/mail/help/paper/more.html"&gt;Gmail Paper announcement&lt;/a&gt; was pretty well done if you ask me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-6611212926309477230?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/6611212926309477230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=6611212926309477230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6611212926309477230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6611212926309477230'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2007/04/1-april-2007.html' title='1 April 2007'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-2932365847996778483</id><published>2007-03-19T08:22:00.000-06:00</published><updated>2009-09-12T23:48:53.345-06:00</updated><title type='text'>a small Graphic-Forms fix that helps SLIME users</title><content type='html'>Folks that have downloaded the 0.7.0 release, and who want to use &lt;a href="http://www.sbcl.org/"&gt;SBCL&lt;/a&gt; / &lt;a href="http://common-lisp.net/project/slime/"&gt;SLIME&lt;/a&gt; to develop &lt;a href="http://common-lisp.net/project/graphic-forms/"&gt;Graphic-Forms&lt;/a&gt; apps, should apply the following patch.&lt;br /&gt;&lt;br /&gt;In &lt;span style="font-family: courier new;"&gt;src/uitoolkit/widgets/top-level.lisp&lt;/span&gt; edit the INITIALIZE-INSTANCE method such that the INIT-WINDOW call is followed by a call to SHOW&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;&lt;     (init-window self classname register-func owner text)))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;---&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;&gt;     (init-window self classname register-func owner text)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;&gt;     (show self nil)))&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Then reload or recompile top-level.lisp and try starting some apps. For me, this alleviates the hanging problem that occurs when running GF apps on SBCL / SLIME.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-2932365847996778483?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/2932365847996778483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=2932365847996778483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2932365847996778483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2932365847996778483'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2007/03/small-graphic-forms-fix-that-helps.html' title='a small Graphic-Forms fix that helps SLIME users'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-2443295664666952386</id><published>2007-03-17T13:57:00.000-06:00</published><updated>2009-09-12T23:48:53.352-06:00</updated><title type='text'>17 March 2007</title><content type='html'>Here are some recent developments from my perspective in the Lisp world:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;David Lichteblau very kindly imported the most recent snapshot of my work on a &lt;a href="http://common-lisp.net/project/graphic-forms"&gt;Graphic-Forms&lt;/a&gt; backend for &lt;a href="http://common-lisp.net/project/mcclim"&gt;McCLIM&lt;/a&gt;, and has subsequently invested significant time and effort to help move it forward. As he notes in his &lt;a href="http://common-lisp.net/pipermail/mcclim-devel/2007-March/004962.html"&gt;announcement&lt;/a&gt;, there is still a lot of work to do, so if you (gentle reader) are at all interested in supporting a native Windows backend for McCLIM, please grab the latest code and experiment with it, offer patches, etc.&lt;/li&gt;&lt;li&gt;The combination of &lt;a href="http://common-lisp.net/project/slime"&gt;SLIME&lt;/a&gt;, &lt;a href="http://www.sbcl.org"&gt;SBCL&lt;/a&gt;, and Graphic-Forms apps seems to be working now, and that's great! One of the SLIME developers must have made the right changes, so my thanks to whoever that was.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://common-lisp.net/project/cffi"&gt;CFFI&lt;/a&gt; has acquired support for the stdcall calling convention, and also lots of enhancements are being made to support character encodings. I am currently in the process of catching up with this.&lt;/li&gt;&lt;/ul&gt;Good stuff all around.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-2443295664666952386?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/2443295664666952386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=2443295664666952386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2443295664666952386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2443295664666952386'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2007/03/17-march-2007.html' title='17 March 2007'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-3289274071077323817</id><published>2007-01-19T23:33:00.000-07:00</published><updated>2009-09-12T23:48:53.360-06:00</updated><title type='text'>research topics followup</title><content type='html'>Following up on my &lt;a href="http://awayrepl.blogspot.com/2007/01/research-topics.html"&gt;previous rambling&lt;/a&gt;, I can now report having accumulated real experience with C# and the .NET Framework.  I feel the need to come up for some air and reflect a bit. First of all, I can see C# now as a nice upgrade over Java. That's a subject for a different forum, so I'll leave it at that.&lt;br /&gt;&lt;br /&gt;The main goal of this diversion was to evaluate .NET, in particular the GUI frameworks, and ponder the benefit of continuing to build a Common Lisp library on top of User32/GDI, which of course is the classic Windows GUI foundation.&lt;br /&gt;&lt;br /&gt;While I don't think anyone truly knows how much longer the classic APIs will truly survive (or be usable), there is certainly &lt;a href="http://www.grimes.demon.co.uk/dotnet/vistaAndDotnet.htm"&gt;evidence&lt;/a&gt; that Vista is more unmanaged code than managed code; furthermore, this same fellow has &lt;a href="http://www.grimes.demon.co.uk/dotnet/dotnetWrappers.htm"&gt;found&lt;/a&gt; heavy use of those classic APIs in .NET up through version 2.0 (and hence Windows Forms). One can find empirical evidence just by looking at the WinForms documentation -- there are &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.handle.aspx"&gt;facilities&lt;/a&gt; for directly accessing underlying HWNDs. And despite rapidly entering &lt;i&gt;deprecated&lt;/i&gt; status, WinForms itself will live on for a while since .NET 3.0 directly supports it.&lt;br /&gt;&lt;br /&gt;As an aside, I noticed while doing some deployment testing on WinXP how installing .NET 3.0 on anything less than a brand new machine is &lt;i&gt;s..l..o..w&lt;/i&gt;. It was hilarious to watch the installer progress bar reach its 100% mark and then start over, with the label updating to state "This process is taking longer than anticipated." At least one MS representative has &lt;a href="http://forums.microsoft.com/msdn/showpost.aspx?postid=797508&amp;siteid=1"&gt;acknowledged&lt;/a&gt; this problem (scroll down to the bottom of the thread).&lt;br /&gt;&lt;br /&gt;So my conclusion is that it will absolutely make sense at some future point to rehost &lt;a href="http://common-lisp.net/project/graphic-forms/"&gt;Graphic-Forms&lt;/a&gt;, but I can see the current implementation still being relevant 5 or 6 years from now, if not longer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-3289274071077323817?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/3289274071077323817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=3289274071077323817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3289274071077323817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3289274071077323817'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2007/01/research-topics-followup.html' title='research topics followup'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-1861177575247159658</id><published>2007-01-01T21:09:00.000-07:00</published><updated>2009-09-12T23:48:53.368-06:00</updated><title type='text'>research topics</title><content type='html'>A couple of my current research topics:&lt;br /&gt;&lt;br /&gt;1) Whether I should (and if the answer is &lt;i&gt;yes&lt;/i&gt;, then how to) rehost &lt;a href="http://common-lisp.net/project/graphic-forms/"&gt;Graphic-Forms&lt;/a&gt; on the .NET Framework, thus abandoning User32/GDI?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weitz.de/rdnzl/"&gt;RDNZL&lt;/a&gt; is proof that Common Lisp and .NET integration is possible. Dr. Weitz certainly got people's attention with that project (which as he points out was heavily inspired by earlier work on an earlier &lt;a href="http://www.rivendell.ws/dot-scheme/"&gt;Scheme-based project&lt;/a&gt;). I also discovered that the &lt;a href="http://www.eclipse.org/swt/"&gt;SWT&lt;/a&gt; folks have &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=154116"&gt;proposed&lt;/a&gt; doing a port of that Java-based GUI library. So feasability does not seem to be in doubt. The question is whether it makes sense for my project.&lt;br /&gt;&lt;br /&gt;2) What is it really like to develop non-trivial applications with XAML and WPF?&lt;br /&gt;&lt;br /&gt;I've experimented with toy examples using Visual Studio 2005 Express plus the extra components needed for .NET 3.0, and viewed tutorials such as &lt;a href="http://video.google.com/videoplay?docid=-2561213141210471102&amp;q=XAML"&gt;this one&lt;/a&gt;. Is this an accidental reincarnation of CLIM? It certainly has a familiar feel in some ways, especially the ability to do incremental and interactive development. I'd much prefer a sexpr-based syntax, if not a full-blown Lisp dialect. Does Guile support .NET?&lt;br /&gt;&lt;br /&gt;Anyway, I will be devoting a big slice of my free time over the near-term to answer these questions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-1861177575247159658?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/1861177575247159658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=1861177575247159658' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1861177575247159658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1861177575247159658'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2007/01/research-topics.html' title='research topics'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-8403941424326282583</id><published>2006-12-18T21:07:00.000-07:00</published><updated>2009-09-12T23:48:53.375-06:00</updated><title type='text'>shell extensions gotcha</title><content type='html'>Jeff Shrager posed &lt;a href="http://groups.google.com/group/comp.lang.lisp/msg/e5572e2b9b28ebb6?hl=en"&gt;this question&lt;/a&gt; back in September regarding his desire to create a Windows Explorer shell extension using Lisp (not specifically CL). I &lt;a href="http://groups.google.com/group/comp.lang.lisp/msg/170c028a2100e927?hl=en"&gt;replied thusly&lt;/a&gt; and he later indicated that he'd had success.&lt;br /&gt;&lt;br /&gt;It didn't occur to me at the time, but I've just now discovered that implementing shell extensions via certain implementations of Lisp, or any other single-instance runtime environment for that matter, might not be such a good idea. &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=125283&amp;amp;SiteID=1"&gt;This thread&lt;/a&gt; has discussion of a similar idea, in this case involving the CLR. As a couple knowledgeable people point out in the ensuing discussion, the problem is that every application that does a mundane thing like invoking the common file dialog suddenly gets the runtime you used for your extension (Lisp or CLR or whatever) injected into it. Chaos could ensue for several reasons, for example if your runtime needs to reserve large chunks of virtual address space for itself that the host application isn't expecting and/or can't satisfy. Not to mention the potential inability of two such runtimes to co-exist in the same process, such as when you develop a GUI app that uses the same (or different!) version of said runtime.&lt;br /&gt;&lt;br /&gt;There are &lt;a href="http://www.mvps.org/emorcillo/en/code/shell/shellextensions.shtml"&gt;easy-to-find examples&lt;/a&gt; and &lt;a href="http://www.ssware.com/ezshell/ezshell.htm"&gt;shareware&lt;/a&gt; floating around the Net for doing this. Nonetheless, I'd take Jesse Kaplan's and Raymond Chen's opinions at face value and think really hard about which Lisp I was using before venturing down such a path.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-8403941424326282583?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/8403941424326282583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=8403941424326282583' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8403941424326282583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8403941424326282583'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/12/shell-extensions-gotcha.html' title='shell extensions gotcha'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-3145916471456022742</id><published>2006-12-16T20:48:00.000-07:00</published><updated>2009-09-12T23:48:53.382-06:00</updated><title type='text'>AllegroCL 8.0 port</title><content type='html'>On the spur of the moment, I decided to try porting &lt;a href="http://common-lisp.net/project/graphic-forms"&gt;Graphic-Forms&lt;/a&gt; to &lt;a href="http://franz.com/products/allegrocl/"&gt;AllegroCL 8.0&lt;/a&gt;. After a few hours work, I got all of the test programs running. It was fairly straightforward. These days, it seems that the main complication in porting &lt;a href="http://common-lisp.net/project/graphic-forms"&gt;Graphic-Forms&lt;/a&gt; is translating stdcall callback definitions into the vendor's particular FFI vocabulary. A CL whose dynamic FFI is a second-class citizen is likely to be a troublesome porting target, though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-3145916471456022742?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/3145916471456022742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=3145916471456022742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3145916471456022742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3145916471456022742'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/12/allegrocl-80-port.html' title='AllegroCL 8.0 port'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-8032895639680746067</id><published>2006-12-03T14:50:00.000-07:00</published><updated>2009-09-12T23:48:53.389-06:00</updated><title type='text'>new job</title><content type='html'>Tomorrow, I'm starting a new job that is mostly Java programming but may also involve some C++ and C#. At least in the beginning, I'll be working on non-graphical library code. The problem domain is pretty interesting and (for me) brand new.&lt;br /&gt;&lt;br /&gt;Does this mean the end of my Lisp hacking days? Not at all. Throughout my career, I've consistently worked on projects in my free time -- I tell people that if programming wasn't my job, it would be my hobby. And I know there are lots of people who feel the same way. Lisp multiplies the fun by 10x (or whatever factor you want to plug in, it's large). I am and will continue to be an enthusiastic member of the Lisp community.&lt;br /&gt;&lt;br /&gt;I am returning to the so-called commercial software development world armed with a broader view of how to solve problems. I also have a pragmatic view of Java programming as a technology, and Java/C++ programmers as highly capable and intellectually stimulating folks with whom to work. It will be nice to collaborate with folks on a face-to-face basis.&lt;br /&gt;&lt;br /&gt;Meanwhile, I continue to work on Graphic-Forms and look forward to making the next release available (I'm thinking January is likely). My McCLIM backend project continues as well. I salute the SBCL developers for getting to the 1.0 stage and hope to find ways of contributing to the Win32 port. I continue to be one of the binary package maintainers for CLISP. And there are some other projects that I have cooking.&lt;br /&gt;&lt;br /&gt;If only there were more hours in each day!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-8032895639680746067?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/8032895639680746067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=8032895639680746067' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8032895639680746067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8032895639680746067'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/12/new-job.html' title='new job'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-2434254997308972647</id><published>2006-12-01T17:54:00.000-07:00</published><updated>2009-09-12T23:48:53.395-06:00</updated><title type='text'>Graphic-Forms version 0.7.0</title><content type='html'>Release 0.7.0 of Graphic-Forms, a Common Lisp library for Windows GUI programming, is now available. This is an alpha release, meaning that the feature set and API have not yet stabilized.&lt;br /&gt;&lt;br /&gt;Here is what's new in this release:&lt;br /&gt;&lt;br /&gt;. Implemented cursor support. Applications can choose from the system-defined cursors or load them from external files. Also provided are convenience macros GFW:WITH-CURSOR and GFW:WITH-WAIT-CURSOR.&lt;br /&gt;&lt;br /&gt;. Implemented a new layout manager called GFW:BORDER-LAYOUT which allows applications to assign children to regions around the perimeter of a window or the center.&lt;br /&gt;&lt;br /&gt;. Implemented GFS:OBTAIN-SYSTEM-METRICS as a higher-level interface to the Win32 GetSystemMetrics() API. It returns a hash table containing slightly post-processed system metrics values.&lt;br /&gt;&lt;br /&gt;. Implemented the function GFW:PROCESS-EVENTS to help applications flush the event queue of pending events.&lt;br /&gt;&lt;br /&gt;. GFW:APPEND-ITEM now accepts an optional classname argument so that applications can use custom item classes.&lt;br /&gt;&lt;br /&gt;. Implemented a new macro GFW:WITH-ROOT-WINDOW which manages the lifetime of an instance of GFW:ROOT-WINDOW for use within the macro body.&lt;br /&gt;&lt;br /&gt;. Fixed ASDF loading problems.&lt;br /&gt;&lt;br /&gt;The README.txt file in the release zip file also has additional important information about this release.&lt;br /&gt;&lt;br /&gt;Download the release zip file here:&lt;br /&gt;http://prdownloads.sourceforge.net/graphic-forms/graphic-forms-0.7.0.zip?download&lt;br /&gt;&lt;br /&gt;The project website is:&lt;br /&gt;http://common-lisp.net/project/graphic-forms/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-2434254997308972647?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/2434254997308972647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=2434254997308972647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2434254997308972647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2434254997308972647'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/12/graphic-forms-version-070.html' title='Graphic-Forms version 0.7.0'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-1738894280523751736</id><published>2006-11-19T20:15:00.000-07:00</published><updated>2009-09-12T23:48:53.403-06:00</updated><title type='text'>my McCLIM restart</title><content type='html'>After realizing I had tried to absorb too much too fast in terms of &lt;a href="http://common-lisp.net/project/mcclim/"&gt;McCLIM&lt;/a&gt; and backend implementation, and after taking a break from it, this weekend I pressed the Reset button. Not that I've thrown any code away, but rather, I'm going to spend some time working with McCLIM in its natural habitat -- that is to say, via SBCL on Linux and the CLX backend (maybe I'll experiment with gtkairo too, we'll see). I'll get some practical experience with it in an environment where it works, then return to my Win32 backend implementation.&lt;br /&gt;&lt;br /&gt;[Update: well, my Gentoo install is old enough that GTK+ 2.8.19 fails to build. So it's back to CLX on Win32 after all. I really should upgrade my Linux, though.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-1738894280523751736?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/1738894280523751736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=1738894280523751736' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1738894280523751736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1738894280523751736'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/11/my-mcclim-restart.html' title='my McCLIM restart'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-1658795829177925478</id><published>2006-11-17T00:43:00.000-07:00</published><updated>2009-09-12T23:48:53.410-06:00</updated><title type='text'>releases rant follow-up</title><content type='html'>I can't seem to add a reply to either of Greg's blog entries concerning my "releases" rant (or else there will be duplicate comments showing up, oops!) so I'll respond here and hope that he sees it.&lt;br /&gt;&lt;br /&gt;As Dave mentioned in his comment on &lt;a href="http://blog.technomadic.org/index.php?p=98"&gt;your blog&lt;/a&gt;, and after considering your more &lt;a href="http://blog.technomadic.org/index.php?p=100"&gt;recent ideas&lt;/a&gt;, I suspect you're still tackling a different problem (and that's OK, I acknowledge that you may have a different perspective). I think you're assuming a certain state of mind that translates into critical thinking about what exactly a release tag corresponds to, whereas my concern is with developers who have been explicit about their decision not to spend mental energy on that. The result is that I can't justify adding their code as a dependency for my users.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-1658795829177925478?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/1658795829177925478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=1658795829177925478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1658795829177925478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1658795829177925478'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/11/releases-rant-follow-up.html' title='releases rant follow-up'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-1726898254814539387</id><published>2006-11-15T15:59:00.000-07:00</published><updated>2009-09-12T23:48:53.417-06:00</updated><title type='text'>"we don't do releases"</title><content type='html'>I have encountered several CL libraries whose dev teams are either indifferent about doing official releases or have an explicit statement on their project website(s) notifying the world that they don't plan to spend time on such activities. One project in particular observes that formal releases are a lot of work and they can be troublesome, and hey installation is as easy as typing `darcs get blah...'&lt;br /&gt;&lt;br /&gt;What these developers fail to recognize (or maybe don't care about) is that this attitude puts the next developer down the foodchain in a difficult position. Here's my perspective -- every dependency of my project is automatically a dependency for my users. When the current source control version doesn't work or whose API/behavior is changing dramatically from day to day, this becomes &lt;span style="font-weight: bold;"&gt;my&lt;/span&gt; problem. I am in a much better position to debug such an issue or look for a substitute, so I don't think it's fair to ask my users to do it. Obviously, I prefer to have some control over the situation, such as being able to say "the version of foobar I have tested for use with my project is 0.x.y patchlevel z". But when a project's release procedure consists of telling people to check out the latest from source control, I have little or no control over which version my users actually get.&lt;br /&gt;&lt;br /&gt;So when I see a library that looks useful but doesn't do official releases, I have to decide amongst three choices: a) move on in the hopes of finding an equal or better alternative, b) bundle a snapshot of the library inside my own project, or c) nag the developers to make snapshots available that others can depend on being available (for some useful amount of time). None of those are good choices, frankly.&lt;br /&gt;&lt;br /&gt;One last comment...I'm not complaining about brand new projects whose websites are barely a week old. In cases like that, one generally either sees a statement like 'this stuff is brand new and we haven't done any release yet' or it's just easy to tell. Every project has to start somewhere. My beef is with projects that have been around and whose developers really ought to know better -- this is basic configuration management.&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-1726898254814539387?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/1726898254814539387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=1726898254814539387' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1726898254814539387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1726898254814539387'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/11/don-do-releases.html' title='&amp;quot;we don&amp;#39;t do releases&amp;quot;'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-1342835467771052088</id><published>2006-11-12T13:49:00.000-07:00</published><updated>2009-09-12T23:48:53.424-06:00</updated><title type='text'>12 Nov 2006</title><content type='html'>The last two weeks have been a disaster as far as productivity goes. I've had some distractions (of the good kind) and I guess have been feeling somewhat burned out. But forward progress has not completely ground to a halt, and so here is what I've been up to lately.&lt;br /&gt;&lt;br /&gt;I haven't made much progress on a &lt;a href="http://common-lisp.net/project/mcclim/"&gt;McCLIM&lt;/a&gt; backend work since those first few days after I announced the start of that project. This is not due to lack of interest! I think I was pushing a little too hard in my efforts to simultaneously understand the &lt;a href="http://bauhh.dyndns.org:8000/clim-spec/index.html"&gt;CLIM spec&lt;/a&gt;, and the existing codebase, and write backend code at the same time. This resulted in signficant burnout, so I decided to put this aside for a bit.&lt;br /&gt;&lt;br /&gt;I was embarrassed to discover basic problems with loading the &lt;a href="http://common-lisp.net/project/graphic-forms"&gt;Graphic-Forms&lt;/a&gt; system, which I briefly mentioned in my previous blog entry. Who knows how many folks downloaded recent releases and gave up because of this. Well, at least there are fixes available (&lt;a href="http://common-lisp.net/pipermail/graphic-forms-devel/2006-November/000023.html"&gt;posted&lt;/a&gt; to the mailing list and checked in). Serves me right for not actually using the documented procedure myself. That too has been fixed.&lt;br /&gt;&lt;br /&gt;My research into broader layout management functionality has continued. I have spent significant time investigating &lt;a href="http://miglayout.com/"&gt;MiG Layout&lt;/a&gt;, which is a monster all-encompassing layout engine in Java. I don't intend to clone that thing, I'll just use it as a rich source of ideas to go along with the many other layout managers that are out there (in different languages). In a related vein, I've always recognized the importance of constraint-based layouts, so I've been on the lookout for constraint engines. A new project called &lt;a href="http://common-lisp.net/project/computed-class/"&gt;computed-class&lt;/a&gt; has caught my eye. The project page advertises simplicity relative to some of the &lt;a href="http://common-lisp.net/project/cells/"&gt;competition&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As for actual coding, I've been working on something called border-layout, which organizes a container window into 5 regions, each of which may be assigned a child component. I anticipate finishing coding and testing of this new layout class within the next several days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-1342835467771052088?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/1342835467771052088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=1342835467771052088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1342835467771052088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1342835467771052088'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/11/12-nov-2006.html' title='12 Nov 2006'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-8880542599190690108</id><published>2006-11-01T15:56:00.000-07:00</published><updated>2009-09-12T23:48:53.430-06:00</updated><title type='text'>note to self: when releasing software, test the build process</title><content type='html'>Please see the following posting to graphic-forms-devel concerning fixes for loading Graphic-Forms:&lt;br /&gt;&lt;br /&gt;http://common-lisp.net/pipermail/graphic-forms-devel/2006-November/000022.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-8880542599190690108?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/8880542599190690108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=8880542599190690108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8880542599190690108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8880542599190690108'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/11/note-to-self-when-releasing-software.html' title='note to self: when releasing software, test the build process'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-4854523995246568143</id><published>2006-10-28T13:25:00.000-06:00</published><updated>2009-09-12T23:48:53.436-06:00</updated><title type='text'>delving into McCLIM</title><content type='html'>I've taken the plunge and started working on a new backend for McCLIM using Graphic-Forms as the substrate. Thus, the result will be a native Win32 backend. Realistically, some time will have to pass before I've got enough functionality working that at least the standard demos can run. It's OK to make quick-and-dirty hacks just to see something pop up on the screen, but if I'm going to propose adding this backend to McCLIM for real at some point, then it needs to play by the rules.&lt;br /&gt;&lt;br /&gt;There are plenty of good reasons to take this project on, but for me the most compelling argument is that CLIM represents a much higher-level way of thinking about GUI building. Since I think of myself as somewhat of a specialist in GUI development, this is very important. After I've climbed the somewhat steep learning curve, digesting new concepts along the way (like what the heck `flipping ink' is all about), I'll be that much stronger in my GUI-fu. I can take some of these concepts back to my design of Graphic-Forms -- not necessarily with the intention of directly incorporating CLIM concepts like presentation types, but as a way to take a fresh look at the services that GF provides. After all, GF is itself an abstraction layer over the Win32 User/GDI APIs and does some translation of raw Win32 concepts to Lisp-y abstractions.&lt;br /&gt;&lt;br /&gt;A secondary benefit of this will be more code that uses Graphic-Forms, and maybe more users (albeit indirectly).&lt;br /&gt;&lt;br /&gt;By the way -- hooray for open-source and Lisp and learning new things and having the ability to spend as much time as I want on this stuff!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-4854523995246568143?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/4854523995246568143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=4854523995246568143' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/4854523995246568143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/4854523995246568143'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/10/delving-into-mcclim.html' title='delving into McCLIM'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-270241149885419742</id><published>2006-10-22T13:08:00.000-06:00</published><updated>2009-09-12T23:48:53.442-06:00</updated><title type='text'>Graphic-Forms version 0.6.0</title><content type='html'>Release 0.6.0 of Graphic-Forms, a Common Lisp library for Windows GUI programming, is now available. This is an alpha release, meaning  that the feature set and API have not yet stabilized.&lt;br /&gt;&lt;br /&gt;Here is what's new in this release:&lt;br /&gt;&lt;br /&gt;. CFFI snapshot 060925 or later is now required if you are running CLISP 2.40 or later (due to a change in the argument list of CLISP's FFI:FOREIGN-LIBRARY-FUNCTION).&lt;br /&gt;&lt;br /&gt;. Completely revamped the Programming Reference. DocBook/XSL is now used for help authoring, and the manual is delivered in HTML Help format.&lt;br /&gt;&lt;br /&gt;. Implemented scrolling protocol and related helper objects and functions to facilitate scrolling functionality in applications:&lt;br /&gt;&lt;br /&gt; * window styles :horizontal-scrollbar and :vertical-scrollbar&lt;br /&gt;&lt;br /&gt; * functions to retrieve window scrollbars&lt;br /&gt;&lt;br /&gt; * GFW:EVENT-SCROLL function for handling low-level scrolling events&lt;br /&gt;&lt;br /&gt; * GFW:SCROLLING-HELPER for automatic management of a scrollable child panel and window scrollbars (works in combination with GFW:HEAP-LAYOUT)&lt;br /&gt;&lt;br /&gt; * integral scrolling and resizing for step sizes greater than 1&lt;br /&gt;&lt;br /&gt;. Initial list box control functionality implemented:&lt;br /&gt;&lt;br /&gt; * three selection modes (none / multiple / extend)&lt;br /&gt;&lt;br /&gt; * list item data comprised by arbitrary application-defined data&lt;br /&gt;&lt;br /&gt; * application defined sorting predicates&lt;br /&gt;&lt;br /&gt; * querying and programmatic control of item selection states&lt;br /&gt;&lt;br /&gt; * customizability of vertical scrollbar mode and keyboard input&lt;br /&gt;&lt;br /&gt; Additional list box features are planned for a future release.&lt;br /&gt;&lt;br /&gt;. Implemented stand-alone scrollbar and slider control types.&lt;br /&gt;&lt;br /&gt;. Renamed functions that query the standard color, file, and font dialogs to make their naming scheme more consistent.&lt;br /&gt;&lt;br /&gt;. Implemented GFW:EVENT-PRE-RESIZE function so that applications can customize the behavior of a window's size drag rectangle.&lt;br /&gt;&lt;br /&gt;. Implemented GFW:EVENT-PRE-MOVE function so that applications can customize the behavior of a window's move drag rectangle.&lt;br /&gt;&lt;br /&gt;. Improved GFW:HEAP-LAYOUT such that it obeys the top child's minimum and maximum sizes, if any such sizes are set.&lt;br /&gt;&lt;br /&gt;. Added GFG:FONT method for querying the current font selected for a window.&lt;br /&gt;&lt;br /&gt;. Did some housecleaning of the item-manager protocol and heavily refactored the implementation of item-manager base functionality.&lt;br /&gt;&lt;br /&gt;. Implemented GFW:ENABLE-REDRAW to enable applications to temporarily disable (and later re-enable) drawing of widget content.&lt;br /&gt;&lt;br /&gt;. Fixed a bug in GFW:CHECKED-P (and GFW:SELECTED-P) for checkbox and radio button -style buttons.&lt;br /&gt;&lt;br /&gt;. Fixed a bug in the initialization of the paint rectangle in the WM_PAINT message handling method; the correct rectangle is now passed to&lt;br /&gt; GFW:EVENT-PAINT&lt;br /&gt;&lt;br /&gt;. Fixed a bug in the SETF functions for GFW:MAXIMUM-SIZE and GFW:MINIMUM-SIZE for windows whereby the size value was not being set in the appropriate slot if there were no layout set for the window.&lt;br /&gt;&lt;br /&gt;The README.txt file in the release zip file also has additional important information about this release.&lt;br /&gt;&lt;br /&gt;Download the release zip file here:&lt;br /&gt;http://prdownloads.sourceforge.net/graphic-forms/graphic-forms-0.6.0.zip?download&lt;br /&gt;&lt;br /&gt;The project website is:&lt;br /&gt;http://common-lisp.net/project/graphic-forms/&lt;br /&gt;&lt;br /&gt;Jack Unrue&lt;br /&gt;jdunrue (at) gmail (dot) com&lt;br /&gt;22 October 2006&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-270241149885419742?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/270241149885419742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=270241149885419742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/270241149885419742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/270241149885419742'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/10/graphic-forms-version-060.html' title='Graphic-Forms version 0.6.0'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-6981382381851037796</id><published>2006-10-01T15:06:00.000-06:00</published><updated>2009-09-12T23:48:53.449-06:00</updated><title type='text'>new FAQ page</title><content type='html'>I posted a new FAQ page for Graphic-Forms &lt;a href="http://common-lisp.net/project/graphic-forms/faq.html"&gt;here&lt;/a&gt;. As much as this is intended to advocate my project, hopefully it also helps advocate in favor of GUI programming in Common Lisp on Windows. Comments and suggestions are welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-6981382381851037796?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/6981382381851037796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=6981382381851037796' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6981382381851037796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6981382381851037796'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/10/new-faq-page.html' title='new FAQ page'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-6252544598028386265</id><published>2006-09-08T00:31:00.000-06:00</published><updated>2009-09-12T23:48:53.456-06:00</updated><title type='text'>DEFSETF misadventure</title><content type='html'>While working through some new unit-tests for Graphic-Forms, I happened to discover an assertion failure in an existing test occurring when I run the test more than once. Strangely, it happens on LispWorks and SBCL, but not CLISP. -- Drat! -- The failing assertion validates an attribute value set on a test layout manager (which is created anew every time the test runs), then a bit further on the test sets this attribute to a different value and checks it again. The failure scenario is on the second run. Right now, it looks like the 2nd value from the first run has persisted and that's why the assertion fails.&lt;br /&gt;&lt;br /&gt;The culprit appears to be a `short form' DEFSETF defined in Graphic-Forms so application code can SETF attributes on layout managers. Or perhaps the culprit is an attribute setter function upon which the DEFSETF is implemented?&lt;br /&gt;&lt;br /&gt;These layout manager attributes are stored in per-object lists; there is no global state in my code where these attributes are concerned. Perhaps there is some memoization being done behind the scenes? It's very puzzling.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-6252544598028386265?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/6252544598028386265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=6252544598028386265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6252544598028386265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6252544598028386265'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/09/defsetf-misadventure.html' title='DEFSETF misadventure'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-2550900553905242722</id><published>2006-09-03T11:14:00.000-06:00</published><updated>2009-09-12T23:48:53.463-06:00</updated><title type='text'>my copy of AMOP arrived</title><content type='html'>A few days ago, I received a used copy of AMOP ordered through Amazon. This was getting to be a long-overdue stage in my development as a Lisper, because while I have written some MOP-using code (portably, thanks to Pascal Costanza's excellent Closer to MOP library), I had not yet actually studied the MOP from end to end.&lt;br /&gt;&lt;br /&gt;One little suggestion for my fellow used-book shoppers: when a seller describes a used-copy's condition as "acceptable -- light underlining and notes in blue pen throughout," I heartily recommend moving on to the next seller. Because even though this copy arrived exactly as described, I had no idea how completely annoying it is to try to read text on the page when the previous owner has underlined nearly every single line, even in the code samples, and added little squiggles and extra notes because apparently the underlining wasn't enough! And in blue pen, which nicely stands out! Aargghh.&lt;br /&gt;&lt;br /&gt;Anyway. Obviously, this book demystifies what the MOP is all about. Reading it gets one to thinking "hey, I could do that." Sort of the same feeling one gets while taking an operating system class in college -- getting into the nuts and bolts, one realizes that a lot of what makes up a kernel is just record-keeping (yes yes yes, there are nasty details, too). Implementing a layered architecture with good performance while preserving extensibility is a neat trick, though. This book gives me much to think about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-2550900553905242722?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/2550900553905242722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=2550900553905242722' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2550900553905242722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2550900553905242722'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/09/my-copy-of-amop-arrived.html' title='my copy of AMOP arrived'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-5865849836974612430</id><published>2006-08-30T20:37:00.000-06:00</published><updated>2009-09-12T23:48:53.469-06:00</updated><title type='text'>Mr. Interesting-Problems-To-Solve</title><content type='html'>I had to laugh a while back when I read through one of the now semi-recent threads on comp.lang.lisp, wherein a certain old-timer boasted about how many of us ought to send him our resumes. Although he had his hands full with &lt;i&gt;interesting&lt;/i&gt; problems to solve, he allowed as to there being possibly a month or two of &lt;i&gt;boring&lt;/i&gt; code to be dealt with afterwards; and we knuckle-draggers who spend most of our time slogging through the muck might be able to handle that (pending credentials review, of course). OK, he didn't write anything about "knuckle-draggers," that part was my invention.&lt;br /&gt;&lt;br /&gt;Getting the boring code done -- the stuff about to drive you bonkers because it's so boring -- is a thankless job, but you'll hear about it when you actually get users and they find out you've skimped on certain details. The boring code stops some people from getting their projects past a certain, how shall I say it, critical juncture. Everybody prefers the interesting problems (the 20%), but some folks can't grind out the rest of the project (the 80%), and they move on to greener pastures. I don't think Mr. Interesting-Problems-To-Solve is one of those folks; I'll bet his work is good and thorough. But I laughed because I've seen that attitude for real.&lt;br /&gt;&lt;br /&gt;Now where was I? Ah yes, list box notification messages. Oh goody.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-5865849836974612430?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/5865849836974612430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=5865849836974612430' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/5865849836974612430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/5865849836974612430'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/08/mr-interesting-problems-to-solve.html' title='Mr. Interesting-Problems-To-Solve'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-6647201081674761893</id><published>2006-08-22T18:08:00.000-06:00</published><updated>2009-09-12T23:48:53.477-06:00</updated><title type='text'>Graphic-Forms version 0.5.0 released</title><content type='html'>Release 0.5.0 of Graphic-Forms, a Common Lisp library for Windows GUI&lt;br /&gt;programming, is now available. This is an alpha release, meaning that&lt;br /&gt;the feature set and API have not yet stabilized.&lt;br /&gt;&lt;br /&gt;Here is what's new in this release:&lt;br /&gt;&lt;br /&gt;. SBCL is now supported (specifically version 0.9.15). Graphic-Forms&lt;br /&gt;  includes a small patch provided to the SBCL community by&lt;br /&gt;  Alastair Bridgewater to enable the stdcall calling convention for&lt;br /&gt;  alien callbacks. Please see src/external-libraries/sbcl-callback-patch&lt;br /&gt;&lt;br /&gt;. Implemented a plugin mechanism for integrating graphics libraries. This&lt;br /&gt;  means that ImageMagick is now optional -- if your application can get&lt;br /&gt;  by with just BMP and ICO formats, then the default plugin (which has no&lt;br /&gt;  external dependencies) may be used. This feature also allows applications&lt;br /&gt;  to integrate other graphics libraries of their choice.&lt;br /&gt;&lt;br /&gt;. In addition to ImageMagick now being optional, external library&lt;br /&gt;  dependencies have been further simplified. Several small libraries&lt;br /&gt;  are now directly bundled with the Graphic-Forms. Cells is no longer&lt;br /&gt;  used in the library proper nor in the demos (but may return at a&lt;br /&gt;  later point).&lt;br /&gt;&lt;br /&gt;. Implemented a class called icon-bundle which may be populated with&lt;br /&gt;  multiple images and then used to set icon data for window frames.&lt;br /&gt;  This includes the concept of there being 'large' and 'small' icon&lt;br /&gt;  sizes.&lt;br /&gt;&lt;br /&gt;. Simplified the argument lists for the event-*** generic functions.&lt;br /&gt;  Provided gfw:obtain-event-time as a substitute for passing a time&lt;br /&gt;  argument to every function (for which the vast majority of methods&lt;br /&gt;  had no use).&lt;br /&gt;&lt;br /&gt;. Defined the following new generic functions:&lt;br /&gt;&lt;br /&gt;  * event-session GF so applications can participate in the&lt;br /&gt;    WM_QUERYENDSESSION / WM_ENDSESSION protocol.&lt;br /&gt;&lt;br /&gt;  * event-activate and event-deactivate GFs so applications can respond&lt;br /&gt;    to window activation state changes.&lt;br /&gt;&lt;br /&gt;  * GFs for querying undo and redo state. Implemented corresponding&lt;br /&gt;    methods for edit controls.&lt;br /&gt;&lt;br /&gt;  * GFs for configuring auto-scrolling and scrollbar visibility. Implemented&lt;br /&gt;    corresponding methods for edit controls.&lt;br /&gt;&lt;br /&gt;  * GFs representing text clipboard data convenience functionality.&lt;br /&gt;    Implemented corresponding methods for edit controls.&lt;br /&gt;&lt;br /&gt;. Made other miscellaneous improvements to flesh out edit control&lt;br /&gt;  support.&lt;br /&gt;&lt;br /&gt;. Implemented the standard color chooser dialog and associated&lt;br /&gt;  convenience macro 'with-color-dialog'.&lt;br /&gt;&lt;br /&gt;. Added the macro 'with-graphics-context' as a convenience for code that&lt;br /&gt;  needs to instantiate a context outside of event-paint.&lt;br /&gt;&lt;br /&gt;. Heavily revised internal layout manager code in preparation for&lt;br /&gt;  supporting more sophisticated layouts. A new class called layout-managed&lt;br /&gt;  has been created to serve as a mix-in when defining objects (not&lt;br /&gt;  necessarily only windows) that have children to be sized and positioned.&lt;br /&gt;&lt;br /&gt;. Implemented a new demo program called textedit which is essentially&lt;br /&gt;  a Notepad clone. Its purpose is to show off the multi-line edit&lt;br /&gt;  control and the standard Find/Replace dialog.&lt;br /&gt;&lt;br /&gt;. Upgraded to the latest lisp-unit and changed test loading code so that&lt;br /&gt;  unit-tests are no longer compiled.&lt;br /&gt;&lt;br /&gt;. Wrote more documentation and reorganized existing content a bit.&lt;br /&gt;  Added discussion of certain naming convention choices.&lt;br /&gt;&lt;br /&gt;. Made a variety of bug fixes.&lt;br /&gt;&lt;br /&gt;The README.txt file in the release zip file also has additional important&lt;br /&gt;information about this release.&lt;br /&gt;&lt;br /&gt;Download the release zip file here:&lt;br /&gt;http://prdownloads.sourceforge.net/graphic-forms/graphic-forms-0.5.0.zip?download&lt;br /&gt;&lt;br /&gt;The project website is:&lt;br /&gt;http://common-lisp.net/project/graphic-forms/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-6647201081674761893?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/6647201081674761893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=6647201081674761893' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6647201081674761893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6647201081674761893'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/08/graphic-forms-version-050-released.html' title='Graphic-Forms version 0.5.0 released'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-4418135224570895067</id><published>2006-08-19T20:41:00.000-06:00</published><updated>2009-09-12T23:48:53.484-06:00</updated><title type='text'>porting code is good!</title><content type='html'>A long time ago, I used to work at a company called &lt;i&gt;XVT Software&lt;/i&gt;, whose main product during that time was a C-language-based user interface portability toolkit. (Yes, we had other products, but the C toolkits were the bread-and-butter). For those of us on the development team, the mantra was 'port early, port often.' We had to deal with lots and lots of environments, and as anyone in the biz back then knows,  even within (or especially within!) the Unix-like family tree, the differences between vendor implementations were huge. So you saved yourself a lot of trouble by following our mantra.&lt;br /&gt;&lt;br /&gt;Even though as a complete Lisp newbie I knew there were differences between CL implementations, I have only recently started to understand at a deep level how much our old mantra from XVT applies to the CL world. I now have code running well on LispWorks, CLISP, and SBCL. And what I've discovered is that code porting, rather than being a negative, is actually very healthy. In my experience, it has been a process of fine-tuning and improvement, as each new compiler points out bad habits, opportunities for cleanup, etc. In fact, I would go so far as to recommend folks with single-vendor codebases to make some effort at porting to at least one other implementation -- no matter how good your current compiler is (or how good you *think* it is), there will almost always be new/useful tidbits that another compiler will point out. If you try it, I think you'll be glad that you did.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-4418135224570895067?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/4418135224570895067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=4418135224570895067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/4418135224570895067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/4418135224570895067'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/08/porting-code-is-good.html' title='porting code is good!'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-3156648995600831203</id><published>2006-08-18T14:04:00.000-06:00</published><updated>2009-09-12T23:48:53.492-06:00</updated><title type='text'></title><content type='html'> Just testing Writely integration with my blog. Move along, nothing to see here.&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/3492131176526384674-3156648995600831203?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/3156648995600831203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=3156648995600831203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3156648995600831203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3156648995600831203'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/08/just-testing-writely-integration-with.html' title=''/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-5576606034566639152</id><published>2006-08-13T22:04:00.000-06:00</published><updated>2009-09-12T23:48:53.498-06:00</updated><title type='text'>graphics library plugin mechanism</title><content type='html'>I've recently implemented a neat abstraction in Graphic-Forms. For quite a while now, it has been possible to load image files from disk so that they may be displayed. Until recently, I required the use of &lt;a href="http://www.imagemagick.org/"&gt;ImageMagick&lt;/a&gt; to handle the file loading task. It's a very nice library, and I have a small binding implemented for the &lt;a href="http://www.imagemagick.org/script/magick-core.php"&gt;MagickCore API&lt;/a&gt; which is the low-level C-based API. But it's also heavyweight -- your process ends up loading quite a large number of DLLs due to interdependencies in their code, and what's possibly worse is that you pretty much have to do a 'real' install because their code expects certain registry entries and directory structures to exist.&lt;br /&gt;&lt;br /&gt;What I've done is to create a simple plugin mechanism, the key aspect of which is implementation of a bit of code in each plugin to translate from library-specific representation of image formats to the Graphic-Forms IMAGE-DATA class. The latter is then what the main library code consumes for image creation and attribute querying. When an image file is to be loaded, each registered plugin is given a chance and the first to succeed wins.&lt;br /&gt;&lt;br /&gt;Based on that mechanism, I've now implemented an &lt;a href="http://www.imagemagick.org/"&gt;ImageMagick&lt;/a&gt; plugin that you can use if you need to handle more formats besides BMP and ICO. Or if those two formats are all you need, you can load the 'default' plugin which has Lisp code that understands those two formats directly. You can implement additional plugins in application code if you want to use some other graphics library; I plan to document how to do this in the next release.&lt;br /&gt;&lt;br /&gt;By the way, another benefit of this strategy is that you can write pixel processing code in terms of IMAGE-DATA or in terms of the external library of your choice, and then create IMAGE instances using IMAGE-DATA as input to display the result.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-5576606034566639152?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/5576606034566639152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=5576606034566639152' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/5576606034566639152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/5576606034566639152'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/08/graphics-library-plugin-mechanism.html' title='graphics library plugin mechanism'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-4752017662630304618</id><published>2006-08-10T00:52:00.000-06:00</published><updated>2009-09-12T23:48:53.505-06:00</updated><title type='text'>SBCL port</title><content type='html'>Just a quick update. Among the various things I'm working on for the next release, I've now got a significant part of Graphic-Forms up and running on SBCL/Win32. Woot!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-4752017662630304618?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/4752017662630304618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=4752017662630304618' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/4752017662630304618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/4752017662630304618'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/08/sbcl-port.html' title='SBCL port'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-4028976164270047714</id><published>2006-07-10T17:38:00.000-06:00</published><updated>2009-09-12T23:48:53.513-06:00</updated><title type='text'>input requested: adding a Lisp listener</title><content type='html'>I'm thinking about adding a Lisp listener to Graphic-Forms, and was&lt;br /&gt;hoping to get some input. Do you think it is:&lt;br /&gt;&lt;br /&gt;a) a "must have" feature if GF is to be taken seriously&lt;br /&gt;&lt;br /&gt;b) a "nice-to-have" feature that you could live without&lt;br /&gt;   (note -- thinking of the availability of SLIME or&lt;br /&gt;   commercial IDEs as I write this)&lt;br /&gt;&lt;br /&gt;c) more important to make sure apps built with GF have&lt;br /&gt;   the right building blocks for a listener, rather than&lt;br /&gt;   bundling one directly with the library proper&lt;br /&gt;&lt;br /&gt;d) a complete waste of time&lt;br /&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/3492131176526384674-4028976164270047714?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/4028976164270047714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=4028976164270047714' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/4028976164270047714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/4028976164270047714'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/07/input-requested-adding-lisp-listener.html' title='input requested: adding a Lisp listener'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-8224693933182738699</id><published>2006-07-10T12:05:00.000-06:00</published><updated>2009-09-12T23:48:53.521-06:00</updated><title type='text'>a lesson in CLOS-based interface fine-tuning</title><content type='html'>I recently made a fine-tuning pass through the argument lists for event-handling functions in Graphic-Forms and had an interesting experience.&lt;br /&gt;&lt;br /&gt;First a bit of background. In Graphic-Forms, applications handle each event type by implementing the associated generic function. E.g., one implements EVENT-SELECT to handle a button press or menu item click. Prior to this past weekend, every event function included a &lt;i&gt;time&lt;/i&gt; argument, which was a system-generated timestamp for the event. Other UI libraries have included that information (such as SWT's TypedEvent, which has a time instance variable) so I had figured it would be a good idea to include it in my library. Going ahead with this design choice without thinking harder was my first mistake: events in SWT are objects that are passed to interface methods, thus they can carry any amount of ancillary information with little added cost (from the standpoint of an application implementing those interface methods).&lt;br /&gt;&lt;br /&gt;Instead of realizing the design error, I made the narrower observation that an event timestamp is needed in only a few special circumstances -- and in all of the test code I have written so far, I was writing a (declare (ignore time)) form everywhere. That gave me some empirical evidence to justify changing the API. I wanted to alleviate the need for application code to worry about that argument, yet still have access to it in the rare cases where it is needed.&lt;br /&gt;&lt;br /&gt;So, my first inclination was to make the &lt;i&gt;time&lt;/i&gt; argument &amp;optional. oops! In CLOS, optional arguments in methods have to be congruent in their number just like required arguments, so event method implementors are not saved any work this way.&lt;br /&gt;&lt;br /&gt;Then I considered making &lt;i&gt;time&lt;/i&gt; a keyword argument, so method implementors could specify &amp;allow-other-keys when they don't need the timestamp. But that adds more clutter than it saves; in other words, a symptom of this being the wrong reason to use keyword arguments.&lt;br /&gt;&lt;br /&gt;Finally, the light bulb above my head flickered on, and I decided to remove the &lt;i&gt;time&lt;/i&gt; argument completely. As a substitute, I decided to provide a separate access function. Problem solved.&lt;br /&gt;&lt;br /&gt;I took away a couple conclusions from this. First, CLOS not only has powerful features, but there are easy-to-see signs that you're misusing them if you just pay attention. And more importantly, it's a mistake to copy a feature without thinking hard.&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/3492131176526384674-8224693933182738699?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/8224693933182738699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=8224693933182738699' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8224693933182738699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8224693933182738699'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/07/lesson-in-clos-based-interface-fine.html' title='a lesson in CLOS-based interface fine-tuning'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-6392741070832855551</id><published>2006-07-03T18:04:00.000-06:00</published><updated>2009-09-12T23:48:53.528-06:00</updated><title type='text'>Graphic-Forms version 0.4.0 released</title><content type='html'>Release 0.4.0 of Graphic-Forms, a Common Lisp library for Windows GUI&lt;br /&gt;programming, is now available. This is an alpha release, meaning that&lt;br /&gt;the feature set and API have not yet stabilized.&lt;br /&gt;&lt;br /&gt;Here is what's new in this release:&lt;br /&gt;&lt;br /&gt;. CFFI snapshot 060606 or later is required in order to benefit from a&lt;br /&gt;bugfix for a problem when running on LispWorks where foreign structure&lt;br /&gt;contents could be corrupted; the most obvious symptom of this was a&lt;br /&gt;Win32 error encountered when attempting to create a window.&lt;br /&gt;&lt;br /&gt;. A new layout manager called `heap-layout' has been implemented.  Its&lt;br /&gt;purpose is to align all the children of a container in a single&lt;br /&gt;Z-orderwise stack and allow the application to select which of the&lt;br /&gt;children are top-most at any given time. This is useful when&lt;br /&gt;implemnenting windows with panels containing related functionality,&lt;br /&gt;where only one such panel should be visible at a time (e.g., property&lt;br /&gt;sheets or wizard dialogs).&lt;br /&gt;&lt;br /&gt;. This release provides access to the standard font dialog, and&lt;br /&gt;integrates with the previously-defined font and font-data classes.&lt;br /&gt;&lt;br /&gt;. Application-defined modal and modeless dialogs are now fully&lt;br /&gt;supported, including keyboard navigation (tab traversal, default&lt;br /&gt;button invocation via the ENTER key, and cancel button invocation via&lt;br /&gt;the ESC key).&lt;br /&gt;&lt;br /&gt;. In this release, the flow-layout manager gets a new style called&lt;br /&gt;:normalize which instructs the manager to size children equally using&lt;br /&gt;the maximum dimension of the children's preferred sizes opposite to&lt;br /&gt;the dimension in which the layout is oriented.&lt;br /&gt;&lt;br /&gt;. Applications may set minimum size and/or maximum size constraints&lt;br /&gt;for top-level windows. Setting both constraints to the same size&lt;br /&gt;implicitly disables resizing by the user.&lt;br /&gt;&lt;br /&gt;. It is also possible to explicitly disable resizabilty, which not&lt;br /&gt;only results in a fixed window size but also causes window decorations&lt;br /&gt;to be updated appropriately (no maximize box and no resize handles in&lt;br /&gt;the window frame).&lt;br /&gt;&lt;br /&gt;. The button class has been expanded to support checkboxes, radio&lt;br /&gt;buttons, toggle buttons, and tri-state button controls.&lt;br /&gt;&lt;br /&gt;. There is now basic support for instantiating single-line and&lt;br /&gt;multi-line edit controls. Edit controls participate in the focus gain&lt;br /&gt;/ focus loss protocol; they also provide notification when contents&lt;br /&gt;change via the event-modify generic function.&lt;br /&gt;&lt;br /&gt;. Implemented event-focus-gain and event-focus-loss to allow applications&lt;br /&gt;to response to changes in focus.&lt;br /&gt;&lt;br /&gt;. It is now possible to customize the background color, foreground&lt;br /&gt;color, and font of label controls. Infrastructure to support similar&lt;br /&gt;customizations for other controls is in place.&lt;br /&gt;&lt;br /&gt;. Functions capture-mouse and release-mouse are available to implement&lt;br /&gt;mouse capturing behavior.&lt;br /&gt;&lt;br /&gt;. Added a function to programmatically append separators to menus;&lt;br /&gt;this was already possible via DEFMENU but not yet supported for&lt;br /&gt;dynamic menu management.&lt;br /&gt;&lt;br /&gt;. Rewrote timer event processing such that the library no longer uses&lt;br /&gt;the TimerProc callback technique, but instead each call to the Win32&lt;br /&gt;SetTimer function is made with the handle to a hidden utility window&lt;br /&gt;managed by the library code.&lt;br /&gt;&lt;br /&gt;. Changed the rectangle type to be a structure; it was a class before.&lt;br /&gt;&lt;br /&gt;. Started work on infrastructure required to support a new layout&lt;br /&gt;manager called `group-layout' which will appear in a subsequent&lt;br /&gt;release. The infrastructure developed this time includes definition of&lt;br /&gt;a text-baseline method that widgets implement to help layout managers&lt;br /&gt;align text appropriately.&lt;br /&gt;&lt;br /&gt;. Also started work on infrastructure needed to enable WinXP-themed&lt;br /&gt;controls.&lt;br /&gt;&lt;br /&gt;. Continued work on the UnBlocked demo game.&lt;br /&gt;&lt;br /&gt;The above list is in addition to documentation enhancements and&lt;br /&gt;bug fixes. The README.txt file in the release zip file also has&lt;br /&gt;additional important information about this release.&lt;br /&gt;&lt;br /&gt;Download the release zip file here:&lt;br /&gt;http://prdownloads.sourceforge.net/graphic-forms/graphic-forms-0.4.0.zip?download&lt;br /&gt;&lt;br /&gt;The project website is:&lt;br /&gt;http://common-lisp.net/project/graphic-forms/&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-6392741070832855551?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/6392741070832855551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=6392741070832855551' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6392741070832855551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6392741070832855551'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/07/graphic-forms-version-040-released.html' title='Graphic-Forms version 0.4.0 released'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-2008554306199644758</id><published>2006-06-27T23:01:00.000-06:00</published><updated>2009-09-12T23:48:53.535-06:00</updated><title type='text'>WGA WTF???</title><content type='html'>I have been somewhat tolerant of Microsoft's flaws and missteps, especially compared to many in the Lisp community. It seemed to me in the last couple of years that MS dialed down their aggressive/monopolistic tendencies somewhat and revisited their attitudes/strategies towards open-source, standards organizations, communication with the outside world, etc. For instance, the reality of Windows Activation for XP turned out to be pretty reasonable -- certainly a lot less draconian than some thought back when XP was approaching its ship date.&lt;br /&gt;&lt;br /&gt;Lately, Microsoft has been getting some bad press about Windows Genuine Advantage, e.g., &lt;a href="http://arstechnica.com/journals/microsoft.ars/2006/6/7/4253"&gt;here&lt;/a&gt; and &lt;a href="http://blogs.zdnet.com/Bott/?p=76"&gt;here&lt;/a&gt;. Not a very good track record so far! I myself have not encountered any severe problems, so I was willing to believe that this stuff would eventually get sorted out and all would be well.&lt;br /&gt;&lt;br /&gt;But I just read &lt;a href="http://blogs.zdnet.com/Bott/?p=84"&gt;this&lt;/a&gt;, which is speculation that in the future MS may require legally-licensed Windows users to install WGA or risk having their system disabled. The reply Ed Bott received from MS when he asked for official confirmation is a red flag. It would be very hard for me to rationalize continuing onward as a Windows developer if this speculation becomes reality. WGA is more intrusive than Activation was, it has a poor track record, and I'm not as inclined to give MS the benefit of the doubt as I might have been in the past. So as I continue work on Graphic-Forms, I'm keeping an eye on this situation, as should all Windows users.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-2008554306199644758?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/2008554306199644758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=2008554306199644758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2008554306199644758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2008554306199644758'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/06/wga-wtf.html' title='WGA WTF???'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-866496383087994081</id><published>2006-06-25T22:05:00.000-06:00</published><updated>2009-09-12T23:48:53.541-06:00</updated><title type='text'>Common Lisp and Windows Vista</title><content type='html'>The other day, I installed Windows Vista Beta 2 from DVD into a dedicated partition on my PC (the other partition is WinXP SP2). Beta 2 is the first Vista pre-release available to anybody and everybody, as opposed to the technical Betas available to MSDN subscribers and other similarly-connected folks. The only install hiccup that I encountered was that there is currently no driver for my sound system available though Microsoft Update. No biggy. By now, there are probably a dozen reviews of Vista Beta 2 out there, and this blog entry will not be another one. Just in case it helps somebody, here are a few review links:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.winsupersite.com/"&gt;Paul Thurrot's SuperSite for Windows&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://arstechnica.com/reviews/os/vistab2.ars"&gt;Ars Technica: A tour of Windows Vista Beta 2&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.anandtech.com/systems/showdoc.aspx?i=2780"&gt;AnandTech: Windows Vista: Beta 2 Preview&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Naturally, I'm looking at Vista from the perspective of a Common Lisp programmer. So in addition to wanting to poke around the new system and see for myself what it's like, my intention is to get started working with CL implementations on this new version of Windows. In particular, I want to test Graphic-Forms and think about where GF should go, taking into consideration the ways in which the GUI subsystems are changing for Vista and beyond (e.g. some info about that &lt;a href="http://blogs.msdn.com/nickkramer/archive/2006/04/24/582365.aspx"&gt;here&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/3492131176526384674-866496383087994081?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/866496383087994081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=866496383087994081' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/866496383087994081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/866496383087994081'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/06/common-lisp-and-windows-vista.html' title='Common Lisp and Windows Vista'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-3407002889866664966</id><published>2006-06-09T11:54:00.000-06:00</published><updated>2009-09-12T23:48:53.547-06:00</updated><title type='text'>away from the REPL for a week</title><content type='html'>Next week, I'll be in Maine on vacation and then attending my brother's wedding, so Graphic-Forms work will be interrupted briefly.&lt;br /&gt;&lt;br /&gt;There are yet loose ends needing to be tied up before I can make the next release. I might spend some more time on preparations (which are already underway) for implementing the equivalent of &lt;a href="http://download.java.net/jdk6/docs/api/javax/swing/GroupLayout.html"&gt;GroupLayout&lt;/a&gt; that is going to be part of the next JDK/NetBeans release. There are some folks implementing this for SWT as well. And so I want something like it in Graphic-Forms, too. I want to revamp my existing layout-tester program to look and feel more like a GUI layout tool, as a more scalable and robust way of testing the layout managers I've written. Maybe layout-tester ought to evolve into such a tool for real instead of just being happy as a test program. Continuing down my todo list, there are some remaining issues with keyboard navigation in dialogs. I'd also like to implement at least one more common dialog and some controls (especially the edit control). And I'd like to change the graphics package to depend on ImageMagick only if the app developer explicitly chooses to.&lt;br /&gt;&lt;br /&gt;The 0.2.0 and 0.3.0 releases saw a decent number of downloads, certainly more than I expected, which is really cool. Unfortunately for me as the lead developer, there has been practically no feedback on the dev mailing list. I'm not working very hard at building `community' around this code, for one thing. I suspect not many folks are getting past the `open the tarball and look at the code' stage. And maybe there aren't that many folks interested in a Windows-only UI library for Common Lisp.&lt;br /&gt;&lt;br /&gt;Another possibility is that people are reluctant to invest time and effort in a brand new API that has no appreciable mindshare. I can sympathize with that and every day I think about what the best solution is. Forget about Graphic-Forms for a second, and consider my personal requirements for a UI library: must support Windows as a first-class target, must leverage platform-specific features wherever possible as opposed to compromising in the name of platform portability, must not have too many intermediate layers (especially not some toolkit in another language), and must (eventually, if not already) support multiple Lisp implementations. Right now, I'm not aware of any other UI library for CL that meets those requirements, aside from what I can build myself.&lt;br /&gt;&lt;br /&gt;I just hope somebody gets some value out of the code besides me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-3407002889866664966?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/3407002889866664966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=3407002889866664966' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3407002889866664966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3407002889866664966'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/06/away-from-repl-for-week.html' title='away from the REPL for a week'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-6344895208526670535</id><published>2006-05-27T18:39:00.000-06:00</published><updated>2009-09-12T23:48:53.553-06:00</updated><title type='text'>a slight detour</title><content type='html'>My wife is a professional trombonist who also teaches private lessons in a variety of brass instruments. Her beginner students are especially in need of repeated drills on fingering / positions on their instruments. There are several training programs out there, and while each has useful features, my wife wasn't completely happy with any of them. Since she is married to a programmer :-) she figured she could acquire a program that had exactly the features she has been looking for.&lt;br /&gt;&lt;br /&gt;So I've been working on this, and doing it in Common Lisp. I've been spending the majority of my time on it especially recently as a final push to get the first version out. While this has taken time away from direct work on Graphic-Forms, it has given me the chance to use GF as an application developer. That's a perspective that every library developer should take periodically; I believe "dogfooding" is a popular phrase these days :-) And this fingering training program has served as a good testcase.&lt;br /&gt;&lt;br /&gt;So, this has been a slight detour in my work, but it's a worthy cause and a lot of fun, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-6344895208526670535?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/6344895208526670535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=6344895208526670535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6344895208526670535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/6344895208526670535'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/05/slight-detour.html' title='a slight detour'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-2678769921585898687</id><published>2006-05-14T12:54:00.000-06:00</published><updated>2009-09-12T23:48:53.562-06:00</updated><title type='text'>pre-0.4.0 status report</title><content type='html'>&lt;p&gt;For those who are following progress on Graphic-Forms, here's another status report.&lt;br /&gt;&lt;br /&gt;One of the major themes for 0.4.0 will be support for custom dialogs, and that is where most of my effort have been devoted since 0.3.0. One of the reasons why this feature has taken so long to appear in GF is that I put a lot of thought into whether to reuse the built-in dialog manager and dialog template mechanisms that Win32 provides.&lt;br /&gt;&lt;br /&gt;A discussion of the tradeoffs could occupy a whole separate blog entry, which I think I will indeed write up and post sometime. I'll cut to chase for now and state that I'm using low-functionality to implement proper dialog behavior.&lt;br /&gt;&lt;br /&gt;Some other miscellaneous development:&lt;br /&gt;&lt;br /&gt;• implemented a layout manager called `heap-layout' whose behavior is to align all the children of a container in a single Z-order-wise column and allow the application to select which of the children are top-most at any given time. This kind of layout is useful when implementing windows with panels containing related functionality, where only one such panel should be visible at a time (think property sheets or wizard dialogs). The user can then flip between panels based on some gesture such as clicking on a tab control.&lt;/p&gt;&lt;p&gt;• implemented event-focus-gain/event-focus-loss for reacting to changes in focus&lt;/p&gt;&lt;p&gt;• fixed some bugs in key event processing that prevented repeated events for untranslateable keys (e.g., function keys F1-F12) from being delivered&lt;/p&gt;&lt;p&gt;• implemented background/foreground color and font customization for labels, with infrastructure put into place for other controls&lt;/p&gt;&lt;p&gt;• added a method to programmatically append separators to menus; this was already possible via DEFMENU but not yet supported for dynamic menu management&lt;/p&gt;&lt;p&gt;• rewrote timer event processing such that GF no longer uses the TimerProc callback technique, but instead each call to the Win32 SetTimer function is made with the handle to a non-visible utility window that the library creates&lt;/p&gt;&lt;p&gt;• fixed some problems with timer initial delays&lt;br /&gt;&lt;br /&gt;That's it for now. Happy coding!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-2678769921585898687?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/2678769921585898687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=2678769921585898687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2678769921585898687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/2678769921585898687'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/05/pre-040-status-report.html' title='pre-0.4.0 status report'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-1344408481294607009</id><published>2006-04-26T11:38:00.000-06:00</published><updated>2009-09-12T23:48:53.569-06:00</updated><title type='text'>Graphic-Forms 0.3.0 released</title><content type='html'>&lt;p class="MsoNormal"&gt;The next release of Graphic-Forms (version 0.3.0), a CL library for Windows GUI programming, is now available. This is definitely pre-alpha code, so be prepared for missing features, bugs, and API changes in subsequent releases.&lt;/p&gt;Download a release tarball from here:&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;a href="http://prdownloads.sourceforge.net/graphic-forms/graphic-forms-0.3.0.tar.gz?download"&gt;http://prdownloads.sourceforge.net/graphic-forms/graphic-forms-0.3.0.tar.gz?download&lt;/a&gt;&lt;/p&gt;The primary changes in this release are as follows:&lt;br /&gt;&lt;ul style="margin-top: 0in;" type="disc"&gt;&lt;br /&gt;  &lt;li style="" class="MsoNormal"&gt;implemented graphics-context methods for the typical drawing operations and pen attributes; see the new test program invoked by &lt;em style=""&gt;(gft::run-drawing-tester)&lt;/em&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li style="" class="MsoNormal"&gt;implemented a representation of fonts and font data, including an API for looking up fonts based on font data&lt;/li&gt;&lt;br /&gt;  &lt;li style="" class="MsoNormal"&gt;implemented font metrics and text metrics querying&lt;/li&gt;&lt;br /&gt;  &lt;li style="" class="MsoNormal"&gt;expanded image drawing operations to support double-buffering&lt;/li&gt;&lt;br /&gt;  &lt;li style="" class="MsoNormal"&gt;expanded the classes representing different window types: &lt;em style=""&gt;top-level&lt;/em&gt; represents primary application windows, &lt;em style=""&gt;panel&lt;/em&gt; represents child-windows, and the &lt;em style=""&gt;root-window&lt;/em&gt; class represents the desktop&lt;/li&gt;&lt;br /&gt;  &lt;li style="" class="MsoNormal"&gt;formalized the window &lt;em style=""&gt;parent&lt;/em&gt; and &lt;em style=""&gt;owner&lt;/em&gt; concepts with documentation and functions&lt;/li&gt;&lt;br /&gt;  &lt;li style="" class="MsoNormal"&gt;implemented the &lt;em style=""&gt;display&lt;/em&gt; class to represent the monitor attached to the system&lt;/li&gt;&lt;br /&gt;  &lt;li style="" class="MsoNormal"&gt;implemented new window style attributes to help applications choose whether the system should automatically repaint the background&lt;/li&gt;&lt;br /&gt;  &lt;li style="" class="MsoNormal"&gt;provided &lt;em style=""&gt;maximum-size&lt;/em&gt; and &lt;em style=""&gt;minimum-size&lt;/em&gt; functions to allow applications to constrain window sizes&lt;/li&gt;&lt;br /&gt;  &lt;li style="" class="MsoNormal"&gt;revised label controls to support either text or images&lt;/li&gt;&lt;br /&gt;  &lt;li style="" class="MsoNormal"&gt;implemented the &lt;em style=""&gt;file-dialog&lt;/em&gt; class which encapsulates the standard open/save dialog&lt;/li&gt;&lt;br /&gt;  &lt;li style="" class="MsoNormal"&gt;made other bug fixes and resource usage cleanup&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Please consult README.txt for other details about this release.&lt;br /&gt;&lt;p class="MsoNormal"&gt;The main project website is:&lt;/p&gt;&lt;a href="http://common-lisp.net/project/graphic-forms/"&gt;http://common-lisp.net/project/graphic-forms/&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-1344408481294607009?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/1344408481294607009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=1344408481294607009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1344408481294607009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1344408481294607009'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/04/graphic-forms-030-released.html' title='Graphic-Forms 0.3.0 released'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-1529604128950562806</id><published>2006-04-07T18:20:00.000-06:00</published><updated>2009-09-12T23:48:53.577-06:00</updated><title type='text'>Graphic-Forms progress report</title><content type='html'>I’m making progress towards the next Graphic-Forms release. Here is a brief status update:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;implemented graphics-context methods for the common drawing operations and pen attributes; there is a new test program invoked via &lt;em&gt;(gft:run-drawing-tester) &lt;/em&gt;that exercises these operations&lt;/li&gt;&lt;br /&gt;&lt;li&gt;implemented a representation of fonts as well as font data and fleshed out the API for creating fonts from font data as well as obtaining font metrics; the aforementioned drawing tester program does exercise fonts&lt;/li&gt;&lt;br /&gt;&lt;li&gt;expanded the representation of windows, such that there are now classes representing top-level windows and child windows (the latter are called ‘panels’ in GF), as well as a root-window class representing the desktop and a display class representing the system’s monitor&lt;/li&gt;&lt;br /&gt;&lt;li&gt;also added new window style attributes to help applications choose whether the system should automatically repaint the background or not&lt;/li&gt;&lt;br /&gt;&lt;li&gt;did some testing and tracked down some embarrassing GDI handle leaks&lt;/li&gt;&lt;br /&gt;&lt;li&gt;currently developing a simple blocks game as a more complete demo and as a test bed for me to learn how &lt;a href="http://common-lisp.net/project/cells/"&gt;Cells&lt;/a&gt; works&lt;/li&gt;&lt;br /&gt;&lt;li&gt;filed a bug with CLISP concerning stdcall callbacks, which impacts a couple of important functional areas in GF (the test case I submitted might be further reducible and I will work on that)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I’d like to get some more basic infrastructure done before the 0.3.0 release, such as:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;in particular, complete my research of Cells and decide how/where to integrate that (in particular, I consider this a prerequisite for any further work on layout managers)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;also more controls&lt;/li&gt;&lt;br /&gt;&lt;li&gt;at least a couple of the common dialogs&lt;/li&gt;&lt;br /&gt;&lt;li&gt;and of course more testing&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Also, a short while after 0.2.0 went out, I entered ~70 bugs into the tracker at SourceForge. At this early stage, I view most of those as ToDo entries because they are missing features rather than unanticipated problems. Just today, Erik Enge announced that common-lisp.net now has Trac available, and I will certainly investigate further and perhaps decide to migrate issue tracking away from SourceForge.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-1529604128950562806?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/1529604128950562806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=1529604128950562806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1529604128950562806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/1529604128950562806'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/04/graphic-forms-progress-report.html' title='Graphic-Forms progress report'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-8020414627481145386</id><published>2006-03-29T20:03:00.000-07:00</published><updated>2009-09-12T23:48:53.592-06:00</updated><title type='text'>Ideas for a Lisp FFI wiki</title><content type='html'>A person named “Sacha” recently made the following comment on c.l.l in a thread entitled “CLISP and win32 clipboard access”:&lt;br/&gt;&lt;br/&gt;&amp;gt; I've been recently working a lot with .NET, and found &lt;br/&gt;&amp;gt; http://www.pinvoke.net/ to be very usefull.&lt;br/&gt;&amp;gt; This web site is providing the .NET world equivalent to FFI for win32 calls.&lt;br/&gt;&amp;gt; Wouldn't it be very nice to have such a wiki for FFIs ?&lt;br/&gt;&lt;br/&gt;Yeah, I think there are several features of pinvoke.net that could/should be replicated in a Lisp FFI wiki:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;&lt;li&gt;entries for&lt;/li&gt;&lt;br/&gt;&lt;li&gt;data structures and immediate types&lt;/li&gt;&lt;br/&gt;&lt;li&gt;function signatures&lt;/li&gt;&lt;br/&gt;&lt;li&gt;consistent structure across each entry&lt;/li&gt;&lt;br/&gt;&lt;li&gt;summary&lt;/li&gt;&lt;br/&gt;&lt;li&gt;complete FFI definition that you can copy&amp;paste&lt;/li&gt;&lt;br/&gt;&lt;li&gt;perhaps for just CFFI?&lt;/li&gt;&lt;br/&gt;&lt;li&gt;usage notes or gotchas&lt;/li&gt;&lt;br/&gt;&lt;li&gt;example code&lt;/li&gt;&lt;br/&gt;&lt;li&gt;alternatives, if any, for the current entry&lt;/li&gt;&lt;br/&gt;&lt;li&gt;pointer to relevant doc in the native library (e.g., ImageMagick manual, Gtk+ manual, MSDN, etc)&lt;/li&gt;&lt;br/&gt;&lt;li&gt;FAQ&lt;/li&gt;&lt;br/&gt;&lt;li&gt;pros and cons of the various FFIs&lt;/li&gt;&lt;br/&gt;&lt;li&gt;address SWIG, Verrazano, and other automation tools&lt;/li&gt;&lt;br/&gt;&lt;li&gt;search&lt;/li&gt;&lt;br/&gt;&lt;li&gt;a search engine that has a decent syntax and the ability to constrain the search to specific areas (e.g., Google's group: modifier)&lt;/li&gt;&lt;/ul&gt;In other words, not a jumble of info thrown together, but an organized format that has had some thought put into it. To be useful, this wiki would have to be fairly extensive.&lt;br/&gt;&lt;br/&gt;One other crazy thought I had about this is if the wiki was organized via tags a la del.icio.us rather than (or in addition to) a hierarchy. I’d bet that would be especially handy for folks implementing portability layers. E.g., you could search on the combination of “window” and “creation” tags to see FFI definitions for window creation functions in the various UI libraries.&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-8020414627481145386?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/8020414627481145386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=8020414627481145386' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8020414627481145386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8020414627481145386'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/03/ideas-for-lisp-ffi-wiki.html' title='Ideas for a Lisp FFI wiki'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-3249555053337941039</id><published>2006-03-21T17:59:00.000-07:00</published><updated>2009-09-12T23:48:53.601-06:00</updated><title type='text'>Graphic-Forms 0.2.0 released</title><content type='html'>The first release of Graphic-Forms (version 0.2.0), a CL library for Windows GUI programming, is now available. This is definitely pre-alpha code, so be prepared for missing features, bugs, and API changes in subsequent releases.&lt;br/&gt;&lt;br/&gt;Download a release tarball from here:&lt;br/&gt;&lt;a href="http://prdownloads.sourceforge.net/graphic-forms/graphic-forms-0.2.0.tar.gz?download"&gt;http://prdownloads.sourceforge.net/graphic-forms/graphic-forms-0.2.0.tar.gz?download&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Please consult README.txt for specific details about this release.&lt;br/&gt;&lt;br/&gt;The main project website is:&lt;br/&gt;&lt;a href="http://common-lisp.net/project/graphic-forms/"&gt;http://common-lisp.net/project/graphic-forms/&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/3492131176526384674-3249555053337941039?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/3249555053337941039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=3249555053337941039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3249555053337941039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3249555053337941039'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/03/graphic-forms-020-released.html' title='Graphic-Forms 0.2.0 released'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-7120912088769744700</id><published>2006-03-19T23:47:00.000-07:00</published><updated>2009-09-12T23:48:53.607-06:00</updated><title type='text'>Screenshots</title><content type='html'>In preparation for releasing version 0.2.0 of Graphic-Forms, I’ve uploaded screenshots:&lt;br/&gt;&lt;br/&gt;&lt;a href="http://sourceforge.net/project/screenshots.php?group_id=163034"&gt;http://sourceforge.net/project/screenshots.php?group_id=163034&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/3492131176526384674-7120912088769744700?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/7120912088769744700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=7120912088769744700' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7120912088769744700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7120912088769744700'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/03/screenshots.html' title='Screenshots'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-7791940268936228974</id><published>2006-03-18T15:14:00.000-07:00</published><updated>2009-09-12T23:48:53.613-06:00</updated><title type='text'>A couple more items</title><content type='html'>Following up on the prior entry, here are a couple more motivations for library implementers:&lt;br/&gt;printing&lt;br/&gt;menu accelerator key tables&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-7791940268936228974?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/7791940268936228974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=7791940268936228974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7791940268936228974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/7791940268936228974'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/03/couple-more-items.html' title='A couple more items'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-858602328993362015</id><published>2006-03-18T11:23:00.000-07:00</published><updated>2009-09-12T23:48:53.619-06:00</updated><title type='text'>Motivation for GUI Library development</title><content type='html'>One of the jobs of a GUI library is to enhance programmer productivity. Any such library having pretensions of being useful for real-world applications necessarily has to provide abstractions over system-level APIs. The system provides building blocks that the library organizes.&lt;br /&gt;&lt;br /&gt;With that in mind, I think a GUI library for the MS Windows environment (Win32) has to tackle issues including but not limited to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;graphics:&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;bitmap transparency&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;manipulation of non-native image formats&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;scrolling&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;facilitation of multi-threaded applications&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;providing mechanisms for worker threads to safely communicate with event threads&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;construction and inspection of complex structures (e.g., child window hierarchies, menus, and table and tree controls)&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;structure definition&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;efficient modification (especially minimizing redrawing/flashing)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;tab traversal in non-dialog windows&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;layout management &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;internationalization&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;resource externalization (e.g., strings and data formatting)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;layout management comes into play here as well&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;smoothing over inconsistencies, bugs, or misfeatures&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;in particular, exposing functionality in a way that makes for the target programming language&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Obviously, all of the above can be accomplished by writing directly to the Win32 APIs (since that is how such a library is implemented). But the above features are not &lt;em&gt;directly &lt;/em&gt;enabled by Win32, so the application programmer without any GUI library has to implement them or go without.&lt;br /&gt;&lt;br /&gt;I would claim that if you’re serious about GUI development, then the above is a subset of the functionality with which you need to be concerned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-858602328993362015?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/858602328993362015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=858602328993362015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/858602328993362015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/858602328993362015'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/03/motivation-for-gui-library-development.html' title='Motivation for GUI Library development'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-8729865314693541095</id><published>2006-02-21T22:55:00.000-07:00</published><updated>2009-09-12T23:48:53.626-06:00</updated><title type='text'>UI Layout Management, redux</title><content type='html'>I got a little ahead of myself with the previous entry. Having gotten my first (simple) layout manager working the traditional way, at this point, I think that geometry management in a UI toolkit might be too narrow an application for a generalized constraint solving framework. One of the ideas I might salvage from that last entry is the notion of providing an extended set of layout management primitives with a abstraction over it. That might happen after I’ve done some refactoring. As it stands now, I’ve got a workable interface between layout managers, the containers that rely on layout, and widgets organized via the layouts.&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-8729865314693541095?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/8729865314693541095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=8729865314693541095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8729865314693541095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8729865314693541095'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/02/ui-layout-management-redux.html' title='UI Layout Management, redux'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-8335730318051199650</id><published>2006-02-14T20:41:00.000-07:00</published><updated>2009-09-12T23:48:53.632-06:00</updated><title type='text'>UI Layout Management</title><content type='html'>I’m planning a series of blog entries that discuss the design and implementation of &lt;a href="http://common-lisp.net/project/graphic-forms/"&gt;Graphic-Forms&lt;/a&gt; layout managers via a constraint-solving engine. In a nutshell, GUI layout management is an abstraction for UI composition whose purpose is to handle the messy details of organizing screen display based on attributes of UI elements plus policies selected by the application programmer. On top of the library usability aspect, layout management is a key enabler for I18n. It seems to me that constraint solving is a powerful but also natural foundation on which to build a layout engine. Check out &lt;a href="http://www.cs.purdue.edu/homes/cmh/electrobook/intro.html"&gt;this tutorial&lt;/a&gt; for some background reading on geometric constraint solving.&lt;br/&gt;&lt;br/&gt;While I am not claiming that this combination is a novel idea, I do feel confident that it makes sense, given the kind of job that a layout manager needs to accomplish. And as an algorithmic solution, it leverages one of the fundamental strengths of Lisp-based languages.&lt;br/&gt;&lt;br/&gt;It’s important to keep the target audience in mind when designing features. The core layout manager can be built with as much generality as desired, such that it understands a broad range of possible layout strategies, and that is definitely a goal. But for usability’s sake, &lt;a href="http://common-lisp.net/project/graphic-forms/"&gt;Graphic-Forms&lt;/a&gt; should provide pre-defined layout schemes that are each focused on a particular behavior that the developer needs to accomplish. So while the underlying engine may provide enough flexibility to define arbitrary layout schemes, the canned schemes are built on top of the general mechanism and these are what the average developer deals with. But there is an added benefit – advanced developers can use the same mechanism to extend the toolkit’s layout functionality without needing to reinvent the core primitives.&lt;br/&gt;&lt;br/&gt;One other preliminary comment: this is an area of the toolkit that is sensitive to performance issues, because&lt;br/&gt;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;real-world application windows and dialogs are often stuffed to the gills with components (usability be damned)&lt;/li&gt;&lt;br/&gt;&lt;li&gt;the end user will definitely notice repainting performance problems&lt;/li&gt;&lt;/ul&gt;&lt;br/&gt;In an ideal world, the creation/resizing/reorganization of windows and dialogs is near instantaneous as far as the end user can perceive. The reality of course is that overhead is an inescapable factor. Everyone has seen at least one GUI application which exhibited jerkiness or obnoxious flashing in painting as windows are moved and resized. Visual artifacts like that leave a bad impression. Therefore, one of &lt;a href="http://common-lisp.net/project/graphic-forms/"&gt;Graphic-Forms&lt;/a&gt;’ goals is to strike a balance between power/generality in implementation vs. snappy responsiveness on the screen. I anticipate having to make some hard choices.&lt;br/&gt;&lt;br/&gt;For next time, I’m planning an overview of design issues and maybe some discussion of layout manager features available in other UI libraries.&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-8335730318051199650?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/8335730318051199650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=8335730318051199650' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8335730318051199650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8335730318051199650'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/02/ui-layout-management.html' title='UI Layout Management'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-3950037816667607799</id><published>2006-02-05T19:29:00.000-07:00</published><updated>2009-09-12T23:48:53.639-06:00</updated><title type='text'>Graphic-Forms, a new UI toolkit</title><content type='html'>I’ve been making progress on a Windows-only toolkit for CL, called &lt;a href="http://home.earthlink.net/~jdunrue/graphic-forms-overview.html"&gt;Graphic-Forms&lt;/a&gt;, which I had intended to use for my own projects. But this weekend, I decide to take the plunge and get a project set up at common-lisp.net (still waiting on the reply to my project creation request, though). I hope this code ends up being useful for other people besides me.&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-3950037816667607799?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/3950037816667607799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=3950037816667607799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3950037816667607799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/3950037816667607799'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2006/02/graphic-forms-new-ui-toolkit.html' title='Graphic-Forms, a new UI toolkit'/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-460009801481639598</id><published>2005-12-08T18:24:00.000-07:00</published><updated>2009-09-12T23:48:53.645-06:00</updated><title type='text'></title><content type='html'>Use Lisp because it's a good language, not because people say it is.&lt;br /&gt;&lt;br /&gt;comp.lang.lisp can be a great resource if one needs help (and has made an honest up-front effort); replies are usually detailed and extensive. That newsgroup can also be a huge distraction. There is a temptation to read too much into the opinions of the regulars there. There is also a temptation to feel validated using Lisp because therefore one no longer feels like target of mostly unstated but sometimes explicit derision; that's a poor rationale for any decision, including choice of programming language.&lt;br /&gt;&lt;br /&gt;I felt disappointed by the recent decision by the reddit guys, because I have become a Lisp enthusiast and it was cool to see somebody doing brand new things with Lisp.  But that's as far as it went for me; I didn't feel the need to try to prove them wrong, unlike many on c.l.l. Desire to show somebody up is also a poor rationale for making a decision.&lt;br /&gt;&lt;br /&gt;Personally, it would be easier to fall back to Java because my comfort level is so high.  But I keep working with Lisp because I want to learn new things, and yes, maybe reinvent some wheels along the way.  Lisp is great for what I want to do, and to heck with what anyone else thinks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-460009801481639598?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/460009801481639598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=460009801481639598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/460009801481639598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/460009801481639598'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2005/12/use-lisp-because-its-good-language-not.html' title=''/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3492131176526384674.post-8642063068846747735</id><published>2005-12-06T22:54:00.000-07:00</published><updated>2009-09-12T23:48:53.652-06:00</updated><title type='text'></title><content type='html'>First post! OK, with that out of the way...&lt;br /&gt;&lt;br /&gt;I decided this past summer to explore Common Lisp as the vehicle for my non-work-related programming. I bought and read a copy of "Practical Common Lisp" by Peter Seibel, discovered websites like common-lisp.net and planet.lisp.org, downloaded and started reading "On Lisp" by Paul Graham, and even posted a silly beginner's exercise to comp.lang.lisp. Since then, I have contributed to a couple Lisp-related projects. Most recently, I've embarked on an effort to implement a UI toolkit directly on top of the Win32 API.&lt;br /&gt;&lt;br /&gt;Writing about this stuff will be, if nothing else, a way to step back and think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3492131176526384674-8642063068846747735?l=jackunrue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jackunrue.blogspot.com/feeds/8642063068846747735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3492131176526384674&amp;postID=8642063068846747735' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8642063068846747735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3492131176526384674/posts/default/8642063068846747735'/><link rel='alternate' type='text/html' href='http://jackunrue.blogspot.com/2005/12/first-post-ok-with-that-out-of-way.html' title=''/><author><name>Jack Unrue</name><uri>http://www.blogger.com/profile/08831032690211357407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_jZANyDF7I6A/S4sl1ePOCuI/AAAAAAAAAHA/hUz1vgG1zsM/S220/profile_pic.png'/></author><thr:total>0</thr:total></entry></feed>
