<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>llbit</title>
	<atom:link href="http://llbit.se/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://llbit.se</link>
	<description></description>
	<lastBuildDate>Sun, 15 Aug 2010 18:39:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Gimp Transformation Tools</title>
		<link>http://llbit.se/?p=579</link>
		<comments>http://llbit.se/?p=579#comments</comments>
		<pubDate>Sun, 15 Aug 2010 18:38:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://llbit.se/?p=579</guid>
		<description><![CDATA[There are many usability flaws and annoyances with The Gimp. One of the most annoying things about The Gimp is how the scaling and rotation tools work. When you scale or rotate a layer in Gimp it displays the original, untransformed, layer underneath so it&#8217;s impossible to correctly scale something so that it fits with [...]]]></description>
			<content:encoded><![CDATA[<p>There are many usability flaws and annoyances with The Gimp. One of the most annoying things about The Gimp is how the scaling and rotation tools work. When you scale or rotate a layer in Gimp it displays the original, untransformed, layer underneath so it&#8217;s impossible to correctly scale something so that it fits with a background layer!</p>
<p>For examples of what I mean, check out the following two screencaps:</p>
<p><a href="http://llbit.se/wp-content/grot.png"><img src="http://llbit.se/wp-content/grot-300x249.png" alt="" title="Original visible underneath rotated layer." width="300" height="249" class="aligncenter size-medium wp-image-597" /></a><br />
<a href="http://llbit.se/wp-content/gscale.png"><img src="http://llbit.se/wp-content/gscale-300x249.png" alt="" title="Original visible underneath scaled layer" width="300" height="249" class="aligncenter size-medium wp-image-598" /></a></p>
<p>This can really make a huge difference in how easy it is to get things scaled or rotated just right in an image. As far as I imagine there is no good reason to display the original layer underneath the transformed layer.</p>
<p>For reference, this is in Gimp 2.6.8</p>
]]></content:encoded>
			<wfw:commentRss>http://llbit.se/?feed=rss2&amp;p=579</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inception</title>
		<link>http://llbit.se/?p=577</link>
		<comments>http://llbit.se/?p=577#comments</comments>
		<pubDate>Mon, 02 Aug 2010 21:54:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://llbit.se/?p=577</guid>
		<description><![CDATA[Just got back from the movies, after having seen Christopher Nolan&#8217;s &#8220;Inception&#8221;. It&#8217;s a total baller film. Definitely one of the best films of the year!]]></description>
			<content:encoded><![CDATA[<p>Just got back from the movies, after having seen Christopher Nolan&#8217;s &#8220;Inception&#8221;.</p>
<p>It&#8217;s a total baller film. Definitely one of the best films of the year!</p>
]]></content:encoded>
			<wfw:commentRss>http://llbit.se/?feed=rss2&amp;p=577</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I Am in Love With My Keyboard</title>
		<link>http://llbit.se/?p=555</link>
		<comments>http://llbit.se/?p=555#comments</comments>
		<pubDate>Tue, 20 Jul 2010 20:43:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://llbit.se/?p=555</guid>
		<description><![CDATA[I have a terrible secret to confess. I have discarded an IBM Model M keyboard before I realized it&#8217;s value. It was a hand-me-down from my parents which served me well for several years. At the time I regarded it as an old and worn out keyboard with slightly too heavy keys. I assumed that [...]]]></description>
			<content:encoded><![CDATA[<p>I have a terrible secret to confess. I have discarded an IBM Model M keyboard before I realized it&#8217;s value. It was a hand-me-down from my parents which served me well for several years. At the time I regarded it as an old and worn out keyboard with slightly too heavy keys. I assumed that most other keyboards would have a similar clicky feel and that I should upgrade to something more modern.</p>
<p>Little did I know that the Model M is considered to be one of the best keyboards ever produced. Among keyboard enthusiasts it is highly regarded as a reliable and comfortable keyboard for typists. I have been reading up lately on mechanical keyboards since I&#8217;ve been dissatisfied ever after throwing out my poor Model M. This eventually led me to become a huge keyboard nerd.</p>
<p>A typical keyboard today is built with so-called rubber dome switches. These are basically made up of a rubber mat with dimples covering a circuit board. The dimples are depressed by the keys to complete the circuits, and signal key press. Rubber dome type keyboards were able to muscle in on the market due to their low production cost. However, they come with disadvantages. Rubber dome keyboards give no noticeable &#8216;snap&#8217; when the key is actuated, have next to no audible feedback and have a low life expectancy.</p>
<p>Some may prefer having a quieter keyboard, most however prefer keyboards that give a greater felt feedback from key presses. It is important for typists to feel when the key has actually been activated.</p>
<p>Since I grew up with IBM Model M buckling spring switches (they had them at my school too) I&#8217;ve come to expect keyboards to be <em>clicky</em>. When the keys are too soft, it becomes hard for me to type on. Some rubber dome keyboards are better than others, but mostly I&#8217;ve felt that there is something lacking with the keyboards I&#8217;ve had since my poor Model M.</p>
<p>After reviewing most information I could extract on some of the more easily available mechanical keyboards last week I made my pick. Yesterday I received in the post my brand new Filco Majestouch keyboard &mdash; a keyboard with mechanical key switches of type Cherry MX Blue. The Cherry switches are as clicky as I want them to be, have a very high expected lifetime and feel sturdy under my fingers. I am absolutely in love with this keyboard. With the softer keys than the Model M it&#8217;s the best keyboard I&#8217;ve used so far. I love the sound of just sitting and typing. It feels like I could type endlessly with this keyboard!</p>
<p>Further reading:<br />
<a href="http://en.wikipedia.org/wiki/Model_M_keyboard">IBM Model M</a><br />
<a href="http://www.overclock.net/computer-peripherals/491752-mechanical-keyboard-guide.html">Switch Mechanisms etc.</a><br />
<a href="http://geekhack.org/">More on Mechanical Keyboards</a></p>
]]></content:encoded>
			<wfw:commentRss>http://llbit.se/?feed=rss2&amp;p=555</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>First</title>
		<link>http://llbit.se/?p=547</link>
		<comments>http://llbit.se/?p=547#comments</comments>
		<pubDate>Fri, 18 Jun 2010 22:00:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Arrrrggh]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://llbit.se/?p=547</guid>
		<description><![CDATA[So I&#8217;ve been thinking (I know, I amaze myself sometimes!) and you know how most web comics have their strip on the front page and there are always four or five links close to the strip: first, previous, next, last and archive. The archive link isn&#8217;t always grouped with the other navigation links but it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been thinking (I know, I amaze myself sometimes!) and you know how most web comics have their strip on the front page and there are always four or five links close to the strip: first, previous, next, last and archive. The archive link isn&#8217;t always grouped with the other navigation links but it&#8217;s always there, somewhere.</p>
<p>So here&#8217;s what I was thinking: why do web comics even have the &#8220;first&#8221; link? How many times is a reader going to want to click it? Once, maybe. And once you&#8217;ve read the first strip you usually don&#8217;t want to read it again, while you might want to use the &#8220;latest&#8221; link several times since heck it doesn&#8217;t always point to the same fucking page.</p>
<p>Even if I want to read the first strip of a web comic, I&#8217;ll often go to the archive just because it&#8217;s convenient and it means I don&#8217;t have to go through the strips in chronological order to check out some random strips.</p>
<p>In conclusion, my opinion is that having a &#8220;first&#8221; link on a web comic is fucking stupid. Put the archive link in it&#8217;s place.</p>
]]></content:encoded>
			<wfw:commentRss>http://llbit.se/?feed=rss2&amp;p=547</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Eclipse Plug-In Development</title>
		<link>http://llbit.se/?p=538</link>
		<comments>http://llbit.se/?p=538#comments</comments>
		<pubDate>Sun, 06 Jun 2010 15:06:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://llbit.se/?p=538</guid>
		<description><![CDATA[I&#8217;ve been working on an Eclipse plug-in for my work-in-progress C compiler. So far, it&#8217;s got syntax highlighting, occurrence marking, folding, error and warning markers. Next thing to add will be content assist :)]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on an Eclipse plug-in for my work-in-progress C compiler. So far, it&#8217;s got syntax highlighting, occurrence marking, folding, error and warning markers. Next thing to add will be content assist :)</p>
<div id="attachment_539" class="wp-caption aligncenter" style="width: 310px"><a href="http://llbit.se/wp-content/J99_2.png"><img src="http://llbit.se/wp-content/J99_2-300x263.png" alt="" title="J99 in Eclipse" width="300" height="263" class="size-medium wp-image-539" /></a><p class="wp-caption-text">J99 in Eclipse</p></div>
]]></content:encoded>
			<wfw:commentRss>http://llbit.se/?feed=rss2&amp;p=538</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress now displays version information</title>
		<link>http://llbit.se/?p=519</link>
		<comments>http://llbit.se/?p=519#comments</comments>
		<pubDate>Sat, 03 Apr 2010 10:38:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://llbit.se/?p=519</guid>
		<description><![CDATA[I wrote a while ago about WordPress and how it did not give the user easy access to update information before upgrading. I am a really big fan of FOSS (Free &#038; Open Source Software), still it might seem to those who&#8217;ve read some of the posts I write here like I&#8217;m only keen to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://llbit.se/?p=398">I wrote a while ago about WordPress and how it did not give the user easy access to update information before upgrading.</a></p>
<p>I am a really big fan of FOSS (Free &#038; Open Source Software), still it might seem to those who&#8217;ve read some of the posts I write here like I&#8217;m only keen to find flaws in other projects. To prove that I&#8217;m not just a whiny bitch who likes to nit-pick on Open Source, and that I actually want to contribute, I submitted a bug report to WordPress and gave them a patch with something that seemed to work.</p>
<p>I confess that I do not understand the technical details here but the clever WordPress devs were able to address my complaint in a pretty elegant way without adding my patch.</p>
<p>It feels like I have contributed in a real way to a project that means a lot to me, and this feels good.</p>
<p><a href="http://core.trac.wordpress.org/ticket/11739">Here is my bug report for those interested.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://llbit.se/?feed=rss2&amp;p=519</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compiler Errors</title>
		<link>http://llbit.se/?p=512</link>
		<comments>http://llbit.se/?p=512#comments</comments>
		<pubDate>Thu, 11 Mar 2010 15:50:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://llbit.se/?p=512</guid>
		<description><![CDATA[As mentioned in my previous post, I&#8217;ve been working on my own C compiler. I&#8217;ve also been reading a bit about other C compilers, and looking at which features make them good compilers. One of the most ubiquitous compilers today is of course the GCC, with it&#8217;s support for several popular languages and architectures &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>As mentioned in my previous post, I&#8217;ve been working on my own C compiler. I&#8217;ve also been reading a bit about other C compilers, and looking at which features make them good compilers.</p>
<p>One of the most ubiquitous compilers today is of course the GCC, with it&#8217;s support for several popular languages and architectures &#8211; it is a fairly well-rounded compiler with decent optimizations and compatibility. However, GCC has horrible error reporting. To show you what I mean, here is <a href="http://clang.llvm.org/diagnostics.html">an example from Clang&#8217;s homepage</a>:</p>
<pre><code>$ gcc-4.2 -fsyntax-only t.c
t.c:5: error: invalid type argument of 'unary *'
$ clang -fsyntax-only t.c
t.c:5:11: error: indirection requires pointer operand ('int' invalid)
  int y = *SomeA.X;
          ^~~~~~~~</code></pre>
<p><span id="more-512"></span><br />
Clang, which is a frontend to the LLVM compiler is being developed with the expressed goal of having nice diagnostics. To me this is extremely satisfying since Clang does stand a good chance to dethrone GCC as the go-to open source C compiler.</p>
<p>One of the goals I&#8217;ve formulated for my own compiler is that it should also have nice error messages with full range support for all diagnostics. Not only does column information help to disambiguate difficult error messages, it could (with start and end points for each error) be plugged into GUI environment to highlight the exact tokens which the compiler choked on. These are tools which are immensely valuable to programmers, yet these kinds of tools have so far been very rare in open source programming environments.</p>
<p>So far I&#8217;ve made enough progress with type and name analysis to do the basic error checks &#8220;are the left and right hand sides of this assignment type-compatible?&#8221; or &#8220;does this struct have a member named x?&#8221;. As an exmaple, here is a small test program and the output given by the compiler. Keep in mind my compiler is far from complete. What I hope to show with this example is that simple, readable error messages are possible with very little effort.</p>
<p>The test code:</p>
<pre><code>typedef struct {int a,*b;} s_t;

void f() {
  s_t s;
  s->a = 1;
  s.b = &#038;s.a;
  s.c = 1;
  *s = 1;
  1 = 1;
}</code></pre>
<p>My compiler&#8217;s output:<br />
<code>
<pre>test/errors.c:5:3: trying to dereference member 'a' from non-pointer object; assuming you meant '.'
test/errors.c:7:3: cannot refernece unknown member 'c'
test/errors.c:8:3: cannot dereference an object of non-pointer type 'typedef "s_t"'
test/errors.c:8:3: left and right hand sides of assignment do not have compatible types (trying to assign expression of type 'const int' to expression of type 'typedef "s_t"')
test/errors.c:9:3: trying to assign to constant valued expression</pre>
<p></code></p>
<p>GCC output:</p>
<pre><code>test/errors.c: In function ‘f’:
test/errors.c:5: error: invalid type argument of ‘->’ (have ‘s_t’)
test/errors.c:7: error: ‘s_t’ has no member named ‘c’
test/errors.c:8: error: invalid type argument of ‘unary *’ (have ‘s_t’)
test/errors.c:9: error: lvalue required as left operand of assignment
</code></pre>
<p>I hope my own output here is a bit more readable than GCC&#8217;s. At least it looks like it to me.</p>
]]></content:encoded>
			<wfw:commentRss>http://llbit.se/?feed=rss2&amp;p=512</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Function Pointer Declaration Untangling</title>
		<link>http://llbit.se/?p=506</link>
		<comments>http://llbit.se/?p=506#comments</comments>
		<pubDate>Wed, 03 Mar 2010 16:00:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://llbit.se/?p=506</guid>
		<description><![CDATA[Last week, on Monday, I started writing my own C compiler with JastAdd, JFlex and Beaver. To check that the compiler parses various declarations and types correctly, I wrote some attributes to spit out a human-readable representation of how the compiler interprets it&#8217;s input. This turned out to be a quite useful tool for reading [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, on Monday, I started writing my own C compiler with JastAdd, JFlex and Beaver.</p>
<p>To check that the compiler parses various declarations and types correctly, I wrote some attributes to spit out a human-readable representation of how the compiler interprets it&#8217;s input. This turned out to be a quite useful tool for reading difficult function pointer declarations. For example</p>
<pre><code>int (*fpfi(int (*)(long), int))(int, ...);</code></pre>
<p>becomes</p>
<blockquote><p>fpfi has type &#8216;function of (pointer to function of (long int) returning int, int) returning pointer to function of (int, &#8230;) returning int&#8217;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://llbit.se/?feed=rss2&amp;p=506</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The future of Gaming &amp; Technology</title>
		<link>http://llbit.se/?p=498</link>
		<comments>http://llbit.se/?p=498#comments</comments>
		<pubDate>Wed, 24 Feb 2010 20:53:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://llbit.se/?p=498</guid>
		<description><![CDATA[I stumbled across this mind-blowing talk with Jesse Schell today: http://g4tv.com/videos/44277/DICE-2010-Design-Outside-the-Box-Presentation/ He&#8217;s got some really interesting future-visions at the end.]]></description>
			<content:encoded><![CDATA[<p>I stumbled across this mind-blowing talk with Jesse Schell today:</p>
<p><a href="http://g4tv.com/videos/44277/DICE-2010-Design-Outside-the-Box-Presentation/">http://g4tv.com/videos/44277/DICE-2010-Design-Outside-the-Box-Presentation/</a></p>
<p>He&#8217;s got some really interesting future-visions at the end.</p>
]]></content:encoded>
			<wfw:commentRss>http://llbit.se/?feed=rss2&amp;p=498</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Space-Turd Accelerator</title>
		<link>http://llbit.se/?p=482</link>
		<comments>http://llbit.se/?p=482#comments</comments>
		<pubDate>Sun, 07 Feb 2010 17:11:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Stuff nobody cares about]]></category>

		<guid isPermaLink="false">http://llbit.se/?p=482</guid>
		<description><![CDATA[This is my first attempt at fiction. You have been warned. Already in the early half of the twenty-second century USA and China had started waging war in the orbital space around planet Earth. It had started with then communist USA shooting down some of fascist China&#8217;s spy satellites, and from there the conflicts had [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>
This is my first attempt at fiction. You have been warned.
</p></blockquote>
<p>Already in the early half of the twenty-second century USA and China had started waging war in the orbital space around planet Earth. It had started with then communist USA shooting down some of fascist China&#8217;s spy satellites, and from there the conflicts had spiraled. On each side of the battle, engineers tried to out-smart their opponents with new and better ways to take down the enemy&#8217;s orbital spying capabilities.</p>
<p>In the beginning small nukes were used against the satellites. The main effective component of the nukes was radiation, knocking out the electronics of a target satellite. Of course regular bombs were utterly useless out in space since they are weapons based on gas expansion. Any gas explosion in space simply disperses too fast to be effective.</p>
<p>Soon the satellites were given defensive weaponry to ward off incoming rockets. The first generation of countermeasures which were installed on the spy satellites were huge lasers. However, laser-based weapons proved to consume way too much energy even when fired in short pulses. They were soon replaced with kinetic impactors &mdash; weapons which fired small slugs of metal propelled at ever greater speeds against the incoming rockets. These slugs knocked the rockets off their course and wreaked massive destruction to the warheads, often totally disabling them.</p>
<p>As more and more costly weaponry was installed on these spy satellites it became quite hard, not to say impossible, to target them effectively from the surface of Earth. Instead some ingenious engineers had the bright idea to use the kinetic impactors which were already present on board the satellites to target enemy craft. Through an ever increasing arms race between the nations, with the goal of wiping out all the enemy&#8217;s orbital spying capabilities, these satellites had soon become full-fledged battle stations.</p>
<p>The space battle stations were huge spherical objects. They boasted attitude rockets protruding on long needle-like booms from their massive core. They were large enough to house a full crew of twenty men. The outer parts of the ship were mostly covered in protective shielding, with no windows or observation decks. Navigation was performed by a cluster of computers near the core. The crew was there simply to service the machinery which could not service itself. In the very middle of these spiked balls of doom was the gyroscope. The gyro, together with the attitude rockets, aided in turning the ship around, aiming one of the eight main cannons at some hostile target. The cannons were the most expensive parts on these ships. They were machines capable of accelerating small pellets up to speeds nearing that of light. When one of these pellets hit an unshielded target it would completely rip through it, shredding anything in proximity with force equal to any atomic bomb.</p>
<p>Now the interesting thing about these battle stations was that they did not fire metal slugs as kinetic impactors. They fired super-compressed organic material. Often human excrement. With no other waste disposal options than burning or evacuating into space, it should be an honor for any turd to be fired out of a twelve billion dollar weapon at 98% the speed of light. Not to mention the humorous fact that these space wars were quite literally orbital shit-flinging battles.</p>
]]></content:encoded>
			<wfw:commentRss>http://llbit.se/?feed=rss2&amp;p=482</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
