<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Thought and musings from a software engineer, photographer, climber, and all-round nice guy.</description><title>Jonas Rabbe's tumblr</title><generator>Tumblr (3.0; @rabbe)</generator><link>http://rabbe.tumblr.com/</link><item><title>madewithpaper:

How to Draw Fur in Paper
Great place to start....</title><description>&lt;img src="http://25.media.tumblr.com/7d2511b8de2ec39b04aef2ea8dc09a65/tumblr_mmi5g5jGYP1qg5156o1_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/aef85bc77ab6f073fa59c01d217ddc8a/tumblr_mmi5g5jGYP1qg5156o2_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;&lt;a href="http://madewithpaper.fiftythree.com/post/50037655928/how-to-draw-fur-in-paper-great-place-to-start" class="tumblr_blog"&gt;madewithpaper&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;How to Draw Fur in Paper&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Great place to start. Give it a try.&lt;/p&gt;
&lt;p&gt;Made With Paper by &lt;a class="tumblr_blog" href="http://everydaywanders.tumblr.com/post/50029778417/sebastiansdrawings-asked-if-i-had-any-techniques"&gt;everydaywanders&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://sebastiansdrawings.tumblr.com/"&gt;Sebastiansdrawings&lt;/a&gt; asked if I had any techniques or lessons to share from my tiger drawing. Firstly, there are people much more talented than me that could help you more. I’m leaving some fur links at the bottom.&lt;/p&gt;
&lt;p&gt;Secondly, drawing fur is much the same as drawing hair. Use 3 or more color tones to create depth and texture. &lt;a href="http://mbbradbury.tumblr.com/post/49474784939/made-with-paper-paper-tips-for-hair-texture" title="Hair"&gt;Mbbradbury&lt;/a&gt; made a great hair tutorial! Also, &lt;a href="http://mademistakes.com/articles/madewithpaper-drawing-guide.html" title="Paper"&gt;Mademistakes&lt;/a&gt; wrote an article about how to use Paper that is excellent!&lt;/p&gt;
&lt;p&gt;Thirdly, I wasn’t that happy with my approach to the matted fur, so take that tip with a grain of salt. Use your own judgement and taste to see what works for you.&lt;/p&gt;
&lt;p&gt;Last, but not least, thank you all for the comments and kind words! I really appreciate it!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://acostaimages.tumblr.com/post/40498066621/paper-tiger-done-on-my-ipad-using-paper-by" title="Tiger"&gt;Acosta’s Tiger&lt;br/&gt;&lt;/a&gt;Sylvia’s &lt;a href="http://sylvialynch.tumblr.com/post/43394687305/brown-hare" title="hare"&gt;Hare&lt;/a&gt;, dog &lt;a href="http://sylvialynch.tumblr.com/post/42148983112/rosie" title="Rosie"&gt;Rosie&lt;/a&gt; and dog &lt;a href="http://sylvialynch.tumblr.com/post/40940861963/percys-birthday" title="Percy"&gt;Percy&lt;/a&gt;.&lt;br/&gt;Mademistake’s &lt;a href="http://mademistakes.tumblr.com/post/49650092015/chewbaccas-getting-fresh-with-leias-boob-made" title="Chewbacca"&gt;Chewbacca&lt;/a&gt;.&lt;br/&gt;Zemyatin’s dog &lt;a href="http://zemyatin.tumblr.com/post/49371455189/rosa-the-belgian-sheepdog-made-with-paper" title="Rosa"&gt;Rosa&lt;/a&gt;.&lt;br/&gt;Joaquim’s &lt;a href="http://joaquimmeira.tumblr.com/post/42482983598/made-with-paper" title="Cat"&gt;Cat&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There’s probably loads more of good examples, but these are some of my favorites.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;</description><link>http://rabbe.tumblr.com/post/50204853322</link><guid>http://rabbe.tumblr.com/post/50204853322</guid><pubDate>Sat, 11 May 2013 16:30:31 -0700</pubDate></item><item><title>Ludum Dare - Hell Hole</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/136b7cd8696cf9ac0bdf92f168c6cb3e/tumblr_inline_mm6snmY1lP1qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;This weekend was the weekend of &lt;a href="http://www.ludumdare.com/"&gt;Ludum Dare&lt;/a&gt;. An online game jam where people from around the world create a game each in one weekend. The concept and background is explained quite well in the &lt;a href="http://en.wikipedia.org/wiki/Ludum_Dare"&gt;Ludum Dare Wikipedia entry&lt;/a&gt; so I won’t go into details here, except to say that the games have to try and follow a theme, and this time the theme was &lt;em&gt;Minimalism&lt;/em&gt;. Since my wife and son are visiting family in Denmark, and I’m between jobs, I found that I suddenly had the time participate.&lt;/p&gt;

&lt;p&gt;The thing I am the most proud of, coming out of this weekend, is that I finished my first game.&lt;/p&gt;

&lt;p&gt;I chose to write it using HTML and JavaScript because of the accessibility it gave, and because those technologies will be part of my day job very soon. A game becomes much more accessible to people if they can play it in the web browser, rather than downloading, potentially installing, and running it on their machine.&lt;/p&gt;

&lt;p&gt;Based on my technology choice I evaluated a few different game engines, and ended up choosing &lt;a href="http://craftyjs.com/"&gt;Crafty&lt;/a&gt;. While I did run into some problems with the engine, a few minor bugs that I hope I have a chance to tackle, and some documentation ambiguities, it still feels like it was a good choice. I did find a couple of articles comparing JavaScript game engines later, which I wish I had time to read before, but settling on tech and engine was a definite boon. It would have been nice if I had experience with the engine before, but since I didn’t have experience with any engine, that would have been hard.&lt;/p&gt;

&lt;p&gt;I very quickly decided on a basic gameplay and art style, although I diverged a little bit from it when I started getting pressed for time. The basics still revolve around a blue ghost as the protagonist, red demons as the enemies, green ectoplasm for “ammunition, as well as black and blue elements representing walls and water. I wish I had time to design some proper wall and water tiles, but I didn’t even have time to use my &lt;em&gt;thing&lt;/em&gt; or the &lt;em&gt;Hell Hole&lt;/em&gt; itself. The &lt;em&gt;thing&lt;/em&gt; was this orb you could pick up, and had to put into the hell hole to close it, and the hell hole would (obviously) spawn demons.&lt;/p&gt;

&lt;p&gt;Before I start getting into the stuff I learned from this experience, you can open a new window and play the game in your browser, I’m not going anywhere.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://engineeredboulderer.com/Minimalism/"&gt;Hell Hole &amp;#8212; Ludum Dare entry for the theme Minimalism&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that you’ve tried it I’m sure there’s a number of things that have become apparent. First of all, this game is insanely hard (unless you found the same speed cheat&lt;sup id="fnref:p49474760531-1"&gt;&lt;a href="#fn:p49474760531-1" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt; a friend did within 10 minutes&lt;sup id="fnref:p49474760531-2"&gt;&lt;a href="#fn:p49474760531-2" rel="footnote"&gt;2&lt;/a&gt;&lt;/sup&gt;). And sometimes, you can only move a short distance to the right before the viewport stops and you kinda step off the world. You can still die when outside the viewport, but you cannot see the little ghost or the demons&lt;/p&gt;

&lt;p&gt;Secondly, if you made it that far, the goal is to kill all the demons and then you win. Easy right? What was that? You killed all the demons, and still didn’t win? That’s right, I forgot to put a screen in that told you when you won. Instead you are stuck in an empty world and the only thing you can do is to refresh your browser window.&lt;/p&gt;

&lt;p&gt;Both of these boil down to the biggest problem I ran into: the time pressure. When you have to create a game in 48 hours, you really have to focus on the core and forget all the fluff. Which is definitely my biggest takeaway from this weekend.&lt;/p&gt;

&lt;p&gt;Things that are done on purpose is that you can walk through walls, but you cannot cross water (basic ghostology). Similarly to the problems above, I wanted the demons to not pass through walls, but be able to cross water. This would give a different mechanic for hunting the demons.&lt;/p&gt;

&lt;p&gt;I got caught off guard by a few things. First off, I thought the theme was announced (and the competition started) at midnight Friday. Turns out it started at 7&amp;#160;pm PDT. So I lost a few hours there. Not a biggy though. I spend the rest of the evening brainstorming ideas before going to bed, to be fully rested to start making my game Saturday.&lt;/p&gt;

&lt;p&gt;When I got up Saturday I brainstormed look and feel, I sketched art, I researched story. I wanted something that people could play and go “wow, that’s a cool story.” Unfortunately, doing that meant that the mechanics never got the polish I felt they needed, and never got around to using my nice art or my elaborate story.&lt;/p&gt;

&lt;p&gt;In the end Saturday was mostly spent doing sketches, some simple sprites (that didn’t get used either), story, and some very simple gameplay using this &lt;a href="http://buildnewgames.com/introduction-to-crafty/"&gt;introduction to Crafty tutorial&lt;/a&gt;. The feeling when I woke up Sunday morning and realized I had basically nothing with 7 hours to go, is perfectly encapsulated in this tweet:&lt;/p&gt;

&lt;blockquote class="twitter-tweet"&gt;&lt;p&gt;7 hours to go is when you start saying things like &amp;#8220;who needs walk cycles.&amp;#8221; &lt;a href="https://twitter.com/search/%23LD48"&gt;#LD48&lt;/a&gt;&lt;/p&gt;&lt;div&gt;— Jonas Rabbe (@somebear) &lt;/div&gt;&lt;div&gt;&lt;a href="https://twitter.com/somebear/status/328578955789627392"&gt;April 28, 2013&lt;/a&gt;&lt;/div&gt;&lt;/blockquote&gt;

&lt;script src="//platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"&gt;&lt;/script&gt;&lt;p&gt;This was when I decided to fall back to 16 × 16 pixel sprites (rather than the 40 × 40 pixel beauties I had envisioned) blown up 4 times to give a retro look. Almost all animations went out the door, and only simple animations when you kill a demon or when you die stayed in.&lt;/p&gt;

&lt;p&gt;One of the things that became abundantly clear, was that the time I spent on story was wasted. While I think story is definitely great in a game, the entries that do well in Ludum Dare and other game jams are those that choose one core mechanic and polish it to an incredible shine. &lt;a href="http://phildogames.com/games/ogam/zen-fighter/"&gt;Zen fighter&lt;/a&gt; is an example of such a game, its mechanic is in its controls and they work incredibly well. Since I became so pressed for time, I also didn’t have the opportunity to use the story at all, and the time spent on developing it could have been better spent polishing the mechanics.&lt;/p&gt;

&lt;p&gt;For the competition &lt;em&gt;Hell Hole&lt;/em&gt; uses a simple rectangular grid based game world with auto-generated content. The demons start following you if they come within 250 pixels of you, which means that sometimes you spawn, and a demon spawns right next to you (i.e. you’re dead). When you die the whole world is regenerated, so you start from scratch. Because everything is autogenerated semi-randomly, so you also run the risk of starting completely boxed in with nowhere to move.&lt;/p&gt;

&lt;h2&gt;Version 1.1&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/1243f1965f1da4b0e9413b1475554568/tumblr_inline_mm6so6kX451qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;After the end of Ludum Dare I fixed a few things. I added a win condition (which is allowed within the rules), and added some instructions. I also fixed the viewport following bug by using &lt;a href="https://github.com/berdon/Crafty-bmViewport"&gt;Austin Hanson’s bmViewport&lt;/a&gt; which makes for a much more enjoyable gameplay. This version is also available online:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://engineeredboulderer.com/Minimalism/1.1/"&gt;Hell Hole &amp;#8212; version 1.1&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Things I wanted to get around to&lt;/h2&gt;

&lt;p&gt;Because of my time mismanagement, there were so many things I didn’t get around to. As I’ve already mentioned I wish I had time to use my story, but for the next &lt;abbr title="Ludum Dare 48 hour solo game jam"&gt;LD48&lt;/abbr&gt; I participate in, I’m definitely going to ditch story and make a game with a very simple mechanic that is polished to feel great.&lt;/p&gt;

&lt;p&gt;The AI for the demons is a simple sight based model. If you get within a distance of 250 pixels (roughly half the viewport) of a demon, it starts following you. This means that you can see demons at the edge of the viewport before they start following you, so you can run away. I wanted for the demons to do some kind of random walk. I also wanted the demons to not pass through walls, but to be able to cross water, and I wanted them to not be able to see through walls.&lt;/p&gt;

&lt;p&gt;Finally, I wanted to have the &lt;em&gt;Hell Hole&lt;/em&gt; which spawned demons, and you would be absolved once you use the &lt;em&gt;thing&lt;/em&gt; to close the hell hole and kill any remaining demons.&lt;/p&gt;

&lt;p&gt;I’m sure I’ll get around to fixing some of these things, but enjoy what’s there, it’s my first game.&lt;/p&gt;

&lt;h2&gt;Getting the source&lt;/h2&gt;

&lt;p&gt;The source code can obviously be downloaded from the pages above, but the whole project is open source, and can be fetched from the &lt;a href="https://bitbucket.org/somebear/ld48-minimalism"&gt;Hell Hole Repository&lt;/a&gt;.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id="fn:p49474760531-1"&gt;
&lt;p&gt;The game uses &lt;code&gt;WASD&lt;/code&gt; and the arrow keys for controls, and if you press both &lt;code&gt;W&lt;/code&gt; and the left arrow key, then you go at double speed (for now). &lt;a href="#fnref:p49474760531-1" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p49474760531-2"&gt;
&lt;p&gt;Thanks a lot, Enamckin. &lt;a href="#fnref:p49474760531-2" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;</description><link>http://rabbe.tumblr.com/post/49474760531</link><guid>http://rabbe.tumblr.com/post/49474760531</guid><pubDate>Thu, 02 May 2013 17:30:00 -0700</pubDate><category>Ludum Dare</category><category>Hell Hole</category><category>game</category><category>programming</category><category>post mortem</category></item><item><title>So incredibly useful. Reblogging so I have somewhere to find it...</title><description>&lt;img src="http://24.media.tumblr.com/e465c3b76ac5fb1a75f4e8651e4270f4/tumblr_mm6ixicdy41r664h6o1_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/d8f0b6fde95f2576dc8586e0de89befc/tumblr_mm6ixicdy41r664h6o3_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/b5c860b2366155fbf1ddb282a32b7273/tumblr_mm6ixicdy41r664h6o2_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/a411dc4fa9eb0d7037adcdb0fde516da/tumblr_mm6ixicdy41r664h6o5_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/3b1bc6c762d68898ed5823de1dce2a1f/tumblr_mm6ixicdy41r664h6o4_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/257348bfcdc724b5174834a8d9e3e18a/tumblr_mm6ixicdy41r664h6o6_r1_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;So incredibly useful. Reblogging so I have somewhere to find it again.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://madewithpaper.fiftythree.com/post/49443569539/paperprompts-your-favorite-paper-tips-over-the" class="tumblr_blog"&gt;madewithpaper&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;#PAPERPROMPTS &lt;/strong&gt;Your Favorite Paper Tips&lt;/p&gt;
&lt;p&gt;Over the past year, creators around the world have shared their ideas and suggestions to make Paper ever more approachable and fun. From helpful drawing tips to Paper &lt;a href="http://sebastiansdrawings.tumblr.com/post/42056709231/until-now-ive-made-fifty-three-cheat-sheets-or"&gt;“cheat sheets”&lt;/a&gt;, the Paper community continues to come together to inspire and help one another. Quite frankly, it’s a pretty amazing thing to see you guys collaborating.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Inspired by your Paper tips, tricks, hacks, how-to’s and friendly suggestions, this week’s &lt;/span&gt;&lt;a href="http://madewithpaper.fiftythree.com/post/28911770064/paperprompts-extra-ordinary-while-some-ideas"&gt;Paper Prompt&lt;/a&gt;&lt;span&gt; is &lt;/span&gt;&lt;strong&gt;Paper Tips&lt;/strong&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Share your favorite way to create in Paper, and be sure to include the tag &lt;strong&gt;#PaperPrompts&lt;/strong&gt; so we can search for your submission. We’ll feature some of our favorites next week!&lt;/p&gt;
&lt;p&gt;Made With Paper by (top down, left to right) &lt;a href="http://jkersey.tumblr.com/post/49045067661/made-with-paper-something-like-technical"&gt;James Kersey&lt;/a&gt;, &lt;a href="http://sebastiansdrawings.tumblr.com/post/42107598712/some-watercolor-tricks-and-a-detailed-comparison"&gt;Bas van den Broek&lt;/a&gt;, &lt;a href="http://madewithpaper.fiftythree.com/post/45677766127/eye-drawing-and-sphere-shading-guides-created"&gt;Kit Christopherson&lt;/a&gt; and &lt;a href="http://lawranceric.tumblr.com/post/25002935460/to-im-url-less-my-way-to-draw-a-night-sky"&gt;lawranceric&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://rabbe.tumblr.com/post/49448662596</link><guid>http://rabbe.tumblr.com/post/49448662596</guid><pubDate>Thu, 02 May 2013 11:10:53 -0700</pubDate><category>paper by fiftythree</category><category>cool stuff</category><category>drawing</category><category>ipad</category></item><item><title>Ludum Dare October Challenge</title><description>&lt;a href="http://www.ludumdare.com/compo/challenge/"&gt;Ludum Dare October Challenge&lt;/a&gt;: &lt;p&gt;The &lt;strong&gt;October Challenge&lt;/strong&gt; from Ludum Dare is quite interesting. The point is to develop a game, take it to market, and start earning money on it (i.e. earn at least $1), all through the month of October.&lt;/p&gt;

&lt;p&gt;I realize October is quite a way off, but I only just noticed it, and wanted to give them a bit of publicity, because pretty much all that Ludum Dare have done so far has been pretty cool.&lt;/p&gt;</description><link>http://rabbe.tumblr.com/post/49448564622</link><guid>http://rabbe.tumblr.com/post/49448564622</guid><pubDate>Thu, 02 May 2013 11:09:02 -0700</pubDate><category>games</category><category>Ludum Dare</category><category>programming</category><category>development</category><category>selling</category></item><item><title>Porting Source to Linux</title><description>&lt;a href="https://developer.nvidia.com/sites/default/files/akamai/gamedev/docs/Porting%20Source%20to%20Linux.pdf"&gt;Porting Source to Linux&lt;/a&gt;: &lt;p&gt;Really interesting slide deck from NVIDIA about the lessons Valve learned from porting their games to Linux, and in turn from Direct 3D to OpenGL.&lt;/p&gt;

&lt;p&gt;(And also very relevant for my post on &lt;a href="http://rabbe.tumblr.com/post/45150090599/multi-threaded-opengl"&gt;multi-threaded OpenGL&lt;/a&gt;.)&lt;/p&gt;</description><link>http://rabbe.tumblr.com/post/47907473115</link><guid>http://rabbe.tumblr.com/post/47907473115</guid><pubDate>Sat, 13 Apr 2013 17:10:00 -0700</pubDate><category>programming</category><category>Direct 3D</category><category>OpenGL</category><category>graphics</category><category>nerdgasm</category></item><item><title>Very Introductory Introduction to Compiler Construction</title><description>&lt;p&gt;I recently talked to a guy about compilers and assemblers. I wanted to refer him to a blog post or some articles that explained compilers in a bit more details than Wikipedia without becoming scientific article level goodness. I&amp;#8217;m not sure I&amp;#8217;ve struck that balance yet, but here is my first attempt at explaining compilers. I&amp;#8217;ll dive into some of the subjects that make up compiler construction in later blog posts.&lt;/p&gt;

&lt;p&gt;As the &lt;a href="http://en.wikipedia.org/wiki/Compiler"&gt;compiler Wikipedia page&lt;/a&gt; very succinctly remarks, &amp;#8220;A compiler is a computer program […] that transforms source code written in a programming language (&lt;em&gt;the source language&lt;/em&gt;) into another computer language (&lt;em&gt;the target language&lt;/em&gt;…).&amp;#8221; In order to do this tranformation the compiler goes through a number of steps. Note that different types of compilers may have different names. For instance a compiler that transforms a program in assembly language into machine code is commonly referred to as an assembler, and a compiler that translates a program in a language specific to one CPU architecture into a language specific to another is called a cross-compiler.&lt;/p&gt;

&lt;p&gt;The parts of a compiler is most commonly  referred to as the following the following:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Front End

&lt;ul&gt;&lt;li&gt;Parsing&lt;/li&gt;
&lt;li&gt;Syntax Checking&lt;/li&gt;
&lt;li&gt;Type Checking&lt;/li&gt;
&lt;li&gt;Error Reporting&lt;/li&gt;
&lt;li&gt;Generating an intermediate representation&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Middle End

&lt;ul&gt;&lt;li&gt;Code Optimization (most commonly using program analysis techniques)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Back End

&lt;ul&gt;&lt;li&gt;Preparation for code generation (for instance register allocations, machine architecture specific parallelizations, etc.)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The first thing a compiler does is to read the source program, and parse from the source language into a data structure that it can work on, usually some sort of parse tree. Like everything about compilers, the whole subject on parsers is incredibly deep and the subject of whole research careers. While I do enjoy technologies like &lt;a href="http://en.wikipedia.org/wiki/Parser_combinator"&gt;Parser Combinators&lt;/a&gt;, most cases can use solutions like &lt;a href="http://dinosaur.compilertools.net/"&gt;Lex &amp;amp; Yacc&lt;/a&gt; (or &lt;a href="http://aquamentus.com/flex_bison.html"&gt;Flex &amp;amp; Bison&lt;/a&gt;) or even a simple &lt;a href="http://en.wikipedia.org/wiki/Tokenization"&gt;tokenizer&lt;/a&gt; with simple logic to create a parse tree.&lt;/p&gt;

&lt;p&gt;After the parser has generated the parse tree, it is traversed to check for correctness (usually the source of all those wonderful compiler errors we keep running into). Other information may also be extracted, like type information and data usage (depending on the language this may be content in the &lt;code&gt;.data&lt;/code&gt; section of an assembly language program, or variables, and so on)&lt;/p&gt;

&lt;p&gt;The output of the &lt;em&gt;front end&lt;/em&gt; is the first intermediate representation which is a representation of the program that was given as input, in a way that can be worked on in the &lt;em&gt;middle end&lt;/em&gt; and/or &lt;em&gt;back end&lt;/em&gt; of the compiler. I&amp;#8217;m planning to talk in more detail about &lt;a href="http://en.wikipedia.org/wiki/Program_analysis"&gt;program analysis&lt;/a&gt; in a later post, and there are some details about the intermediate representation that will be influenced by that, but for now let&amp;#8217;s just consider it as a tree containing the source program in a form that can be traversed to read information about the source program. This means that we skip the &lt;em&gt;middle end&lt;/em&gt; until further notice.&lt;/p&gt;

&lt;p&gt;The last part is back end that performs the &lt;a href="http://en.wikipedia.org/wiki/Code_generation_(compiler)"&gt;code generation&lt;/a&gt;. This is where the program is written in the target language. It is &amp;#8220;simply&amp;#8221; a matter of writing the instructions from the sources languages as they translate into the target language. Most times that involves having a look-up table that contains this mapping. For something like compiling assembly language into object code, in order to create an executable, the look-up table would map instructions into their corresponding opcodes. In other cases the instructions in the source language may map to multiple instructions or operations in the target language. During this step the compiler also does other tasks needed to generate correct output code which may include register allocation, variable mapping, and generating debug data.&lt;/p&gt;

&lt;p&gt;And that is all there is to a compiler. At least in the simplest sense. Each of the phases have enough content to fill another blog post each, if not a whole career, but that will have to wait for another day.&lt;/p&gt;</description><link>http://rabbe.tumblr.com/post/47525041231</link><guid>http://rabbe.tumblr.com/post/47525041231</guid><pubDate>Mon, 08 Apr 2013 23:58:27 -0700</pubDate><category>compiler</category><category>programming</category><category>development</category><category>introduction</category></item><item><title>Hi Jonas, the download links don't work anymore. Any chance to get the Mac keyboard layouts nonetheless? Best regards</title><description>&lt;p&gt;It seems to be a problem at minus.com. I’ve reported it to them, and I hope they fix it because it’s the only copies of the files I have.&lt;/p&gt;</description><link>http://rabbe.tumblr.com/post/47524855660</link><guid>http://rabbe.tumblr.com/post/47524855660</guid><pubDate>Mon, 08 Apr 2013 23:52:50 -0700</pubDate></item><item><title>Even stormtroopers sometimes have to dress up, doesn’t...</title><description>&lt;img src="http://25.media.tumblr.com/bed2b93d3c665d362be9a951d451db20/tumblr_mjy2sc4UXy1qe3q40o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Even stormtroopers sometimes have to dress up, doesn’t mean they have to like it.&lt;/p&gt;

&lt;p&gt;Made With &lt;a href="http://www.fiftythree.com/Paper/via/tumblr"&gt;Paper&lt;/a&gt;&lt;/p&gt;</description><link>http://rabbe.tumblr.com/post/45819504323</link><guid>http://rabbe.tumblr.com/post/45819504323</guid><pubDate>Tue, 19 Mar 2013 22:48:00 -0700</pubDate><category>MadeWithPaper</category></item><item><title>Multi-threaded OpenGL</title><description>&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; one of my friends linked to &lt;a href="https://developer.nvidia.com/sites/default/files/akamai/gamedev/docs/Porting%20Source%20to%20Linux.pdf"&gt;this presentation from NVIDIA (pdf)&lt;/a&gt; which specifically states: &amp;#8220;Do not create a single FBO and then swap out attachments on it.&amp;#8221;&lt;/p&gt;

&lt;p&gt;At the time I was implementing this I didn&amp;#8217;t know, and it was the most obvious approach within the architecture of the renderer we were using. Using separate FBOs to store the rendered output for each frame seems like a more reasonable approach with this warning in mind. Apart from that the synchronization guards below still make sense.&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;I know I know, you must all think I&amp;#8217;m crazy, but bear with me while I try to explain.&lt;/p&gt;

&lt;p&gt;Imagine a situation where you have a renderer. This renderer renders a scene (with animation and so on) in real-time. For the purposes of this exercise, real-time means 24 or 30 frames per second. The UI has to be responsive and &amp;#8220;fluid&amp;#8221;, which means it should be able to update around 60 frames per second. I&amp;#8217;m sure you can already see a problem here.&lt;/p&gt;

&lt;p&gt;This could be a non-issue if you could decouple the UI completely from OpenGL. When you are trying to use a framework where drawing OpenGL content into a window means the whole window must be drawn with OpenGL, then you don&amp;#8217;t really have much choice.&lt;/p&gt;

&lt;p&gt;So with the scene set let us dig into the problem. We obviously have to use threading, because our UI and renderer must be able to update more-or-less independently. Fortunately, that is possible with OpenGL, although the driver and GPU usually only has one command queue, so you have to ensure that you synchronize the OpenGL commands to prevent race conditions.&lt;/p&gt;

&lt;p&gt;We are in the fortunate situation that the end result from the renderer is a texture attached to a frame buffer (let&amp;#8217;s call it the output frame buffer). This texture can simply be bound in the UI thread and drawn on a fullscreen quad symbolizing our viewport.&lt;/p&gt;

&lt;p&gt;To allow the renderer to render somewhat independently of the UI thread, we must have multiple attachments to the output frame buffer, so the renderer can render to one while the UI is painting the texture from the other to screen, and so on.&lt;/p&gt;

&lt;p&gt;This means the problem is more or less a producer-consumer problem. Some requirements on the application mean changes from the classic problem. We have pre-allocated elements in the queue that are filled in by the renderer. If there are multiple elements rendered and none left to render into, it may take the oldest and overwrite its contents, as long as the newest render is always available to the UI, and the renderer doesn&amp;#8217;t re-render the element it just rendered (e.g. because the UI wasn&amp;#8217;t done painting it when the renderer was done).&lt;/p&gt;

&lt;p&gt;To solve this I created an &lt;code&gt;AttachmentQueue&lt;/code&gt;. This queue holds elements representing the pre-allocated attachments on the output frame buffer. Each element has an internal unique ID, a name&lt;sup id="fnref:p45150090599-1"&gt;&lt;a href="#fn:p45150090599-1" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt;, a time changed, a synchronization object, and a status.&lt;/p&gt;

&lt;p&gt;The synchronization object is used because the number of  commands the renderer pushes to the GPU is huge, and we need to make sure that the GPU has actually drawn to the attachment we want to paint in the UI before the UI command to bind the texture is put onto the command queue. This is the race condition I mentioned above. The status simply says whether the attachment has been rendered to yet.&lt;/p&gt;

&lt;p&gt;In addition to a list of elements, the queue also has a mutex to ensure only one thread at the time makes modifications to it. It has a reference to the element representing the attachment current held by the UI and renderer. And also a wait condition and a reference to the last rendered attachment which are explained in further detail below. The references to attachment elements are all initialized to the empty element (&lt;code&gt;EMPTY&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;There is a pair of functions, &lt;code&gt;reserveAttachment()&lt;/code&gt; and &lt;code&gt;releaseAttachment()&lt;/code&gt;, for both the UI and renderer. The main difference is that the UI, in the case where it can&amp;#8217;t reserve an attachment will simply not get one, and will instead paint some alternative UI to show it could not get the texture. In contrast, the renderer needs an attachment to be able to render and will have to wait if there is no attachment available.&lt;/p&gt;

&lt;p&gt;The queue should always have the newest rendered attachment at the front which the UI will grab, and the renderer will take from the back.&lt;/p&gt;

&lt;p&gt;These requirements leave us with a reserve and release function for the UI (in my best C++ pseudo-code).&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;void reserveUIAttachment()
{
    AttachmentWriteLock lock (_mutex);
    if (_queue.empty() || !_queue.first().isRendered)
        return;

    _uiAttachment = _queue.first();
    _queue.pop_first();

    if (_uiAttachment.sync)
    {
        glWaitSync (_uiAttachment.sync, 0, GL_TIMEOUT_IGNORED);
        _uiAttachment.sync = 0;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Pretty straight forward stuff. The only thing to note is the use of an &lt;a href="http://www.opengl.org/wiki/Sync_Object"&gt;OpenGL sync object&lt;/a&gt;, if it exist for this attachment we have to put a wait onto the command queue.&lt;/p&gt;

&lt;p&gt;The release is not too complicated either, except we have to cover the case where the attachment at the front of the queue is older than the current attachment, in that case we have to add it back to the front. We also notify the wait condition. This means the renderer will be released if it&amp;#8217;s waiting, and does nothing if the renderer is not waiting.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;void releaseUIAttachment()
{
    AttachmentWriteLock lock (_mutex);
    if (_uiAttachment == EMPTY)
        return;

    if (_queue.empty() ||
        _queue.first().timeChanged &amp;amp;lt; _uiAttachment.timeChanged)
        _queue.push_front (_uiAttachment);
    else
        _queue.push_back (_uiAttachment);

    _uiAttachment = EMPTY;
    _waitCondition.notify_one();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The render side is very similar, but with a few crucial differences. We do not overwrite the last attachment we rendered to, and will wait if we can&amp;#8217;t get an attachment (rather than returning immediately like the UI reservation does).&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;void reserveRenderAttachment()
{
    AttachmentWriteLock lock (_mutex);
    if (_queue.empty() ||
        _queue.last() = _lastRenderedAttachment)
        _waitCondition.wait (_mutex);

    _renderAttachment = _queue.last();
    _queue.pop_last();
    _lastRenderedAttachment = EMPTY;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For releasing the rendered attachment, we have to remember to push a sync object.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;void releaseRenderAttachment()
{
    AttachmentWriteLock lock (_mutex);
    _renderAttachment.sync = glFenceSync (
        GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
    glFlush();
    _queue.push_front (_renderAttachment);
    _lastRenderedAttachment = _renderAttachment;
    _renderAttachment = EMPTY;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that we have a call to &lt;code&gt;glFlush()&lt;/code&gt; right after creating the fence, and before we release the mutex for the queue. This means the fence will be pushed to the GPU before the wait is put on the queue in &lt;code&gt;reserveUIAttachment()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;And that&amp;#8217;s basically all there is to it… Well, not really. You also have to use the attachments.&lt;/p&gt;

&lt;p&gt;If you remember above, I said we store a name for the attachment. This is set up under initialization to ensure that we set up the right number of attachments. When we want to render to an attachment in the output frame buffer, then we ask what base name the render pass wants to write to. If it matches the base name of the attachments in the output frame buffer, then we map it to the name for the &lt;code&gt;_renderAttachment&lt;/code&gt; from the &lt;code&gt;AttachmentQueue&lt;/code&gt;. The call to &lt;code&gt;glDrawBuffers (…)&lt;/code&gt; then has the correct buffer.&lt;/p&gt;

&lt;p&gt;Similarly, when we want to get the texture ID from the UI for the attachment we have received, then the frame buffer finds the attachment with the name from &lt;code&gt;_uiAttachment&lt;/code&gt; and returns the corresponding texture ID that can be bound with &lt;code&gt;glBindTexture (…)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now you know about as much as me on the topic of multi-threaded rendering. You can always &lt;a href="http://rabbe.tumblr.com/ask"&gt;ask&lt;/a&gt;. As an experiment I have also turned on replies to this post, so we&amp;#8217;ll see how that goes.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id="fn:p45150090599-1"&gt;
&lt;p&gt;The renderer uses these names internally to represent each attachment. &lt;a href="#fnref:p45150090599-1" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;</description><link>http://rabbe.tumblr.com/post/45150090599</link><guid>http://rabbe.tumblr.com/post/45150090599</guid><pubDate>Mon, 11 Mar 2013 17:30:00 -0700</pubDate><category>programming</category><category>OpenGL</category><category>multi-threaded</category><category>synchronization</category><category>queue</category><category>attachment</category><category>texture</category></item><item><title>Grown up mac &amp; cheese</title><description>&lt;p&gt;I have always enjoyed mac &amp;amp; cheese, so when I saw the Modernist version in &lt;a href="http://www.amazon.com/Modernist-Cuisine-Home-Nathan-Myhrvold/dp/0982761015/"&gt;Modernist Cuisine at Home&lt;/a&gt;, I knew I had to make it.&lt;/p&gt;

&lt;p&gt;This weekend I jetted all around the Richmond area trying to find sodium citrate, which is used to prevent the cheese from separating when you melt into one of the most velvety cheesy sauces you have ever experienced. Unfortunately, it was all for naught. Of all the 6 places I visited, none had sodium citrate, or even citric acid which I wanted for another dish.&lt;/p&gt;

&lt;p&gt;In the end, I improvised. I used an immersion blender to mix 0.3% xanthan gum into the milk (by weight) before heating it and blending in the cheese. It held together beautifully, and the flavor was excellent. The only downside was that the texture was a teeny bit gritty.&lt;/p&gt;

&lt;p&gt;To top it off I added pieces of fresh sugarsnaps and roasted mushrooms. For next time I would definitely try and find sodium citrate (at least I have citric acid now), and I would roast the mushrooms with a little bit of garlic. It would be nice to get a bit more of the meaty flavor the mushrooms have into the dish.&lt;/p&gt;</description><link>http://rabbe.tumblr.com/post/45085234602</link><guid>http://rabbe.tumblr.com/post/45085234602</guid><pubDate>Sun, 10 Mar 2013 20:35:31 -0700</pubDate><category>cooking</category><category>modernist</category><category>mac &amp; cheese</category></item><item><title>jl8comic:

I never thought I’d have to do two of these in one...</title><description>&lt;img src="http://25.media.tumblr.com/39d6c5e721b6ce6b692e793a3f7f312e/tumblr_mf1ld52g6w1r7ni1io1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a class="tumblr_blog" href="http://jl8comic.tumblr.com/post/37934556365/i-never-thought-id-have-to-do-two-of-these-in-one"&gt;jl8comic&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I never thought I’d have to do two of these in one year.&lt;/p&gt;
&lt;p&gt;Thoughts and prayers.&lt;/p&gt;
&lt;p&gt;-Yale&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://rabbe.tumblr.com/post/37965305406</link><guid>http://rabbe.tumblr.com/post/37965305406</guid><pubDate>Fri, 14 Dec 2012 22:02:50 -0800</pubDate></item><item><title>Very cute silky again, and really really cool gradient effect on...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_maoi9d8ttK1rtez81o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Very cute silky again, and really really cool gradient effect on the text, dying to find out how that was done.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://silkythecreature.tumblr.com/post/31963616599/truly-my-pleasure-to-collaborate-with-talented" class="tumblr_blog"&gt;silkythecreature&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;span&gt;Truly my pleasure to collaborate with talented calligraphy artist &lt;a href="http://j-nanalogue.tumblr.com/%20"&gt;Ji-Young&lt;/a&gt; from Korea!&lt;br/&gt;Do follow her at &lt;/span&gt;&lt;span&gt;&lt;a href="http://j-nanalogue.tumblr.com/"&gt;&lt;a href="http://j-nanalogue.tumblr.com/"&gt;http://j-nanalogue.tumblr.com/&lt;/a&gt;&lt;/a&gt;  &lt;/span&gt;&lt;span&gt; &lt;br/&gt;&lt;br/&gt;and people, happy friday! :) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Made with &lt;/span&gt;&lt;a href="http://www.fiftythree.com/paper/via/tumblr"&gt;Paper&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://rabbe.tumblr.com/post/31974901937</link><guid>http://rabbe.tumblr.com/post/31974901937</guid><pubDate>Fri, 21 Sep 2012 00:27:56 -0700</pubDate></item><item><title>This is just too awesome. I feel truly humbled.

grub685:

Break...</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_ma860bR77V1rwtw6vo1_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/tumblr_ma860bR77V1rwtw6vo2_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/tumblr_ma860bR77V1rwtw6vo3_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/tumblr_ma860bR77V1rwtw6vo4_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/tumblr_ma860bR77V1rwtw6vo5_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/tumblr_ma860bR77V1rwtw6vo6_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/tumblr_ma860bR77V1rwtw6vo7_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/tumblr_ma860bR77V1rwtw6vo8_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/tumblr_ma860bR77V1rwtw6vo9_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/tumblr_ma860bR77V1rwtw6vo10_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;This is just too awesome. I feel truly humbled.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://grub685.tumblr.com/post/31389306050/break-down-on-captain-jack-sparrow-done-on-the" class="tumblr_blog"&gt;grub685&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;span&gt;Break down on Captain Jack Sparrow - done on the iPad the Paper app using only the pen tool. Used my Jot Touch and Lunatik stylus for the larger dots, but mostly my fingers. That’s right folks- &lt;em&gt;my middle and ring fingers&lt;/em&gt;. Seriously felt like my arm was going to fall off the first night. Second night I was going cross eyed working on the cheek areas. Enjoy- pointillism on the iPad! #madewithpaper #fiftythree #ipad #potc #pirates #lunatik #paperprompts&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://rabbe.tumblr.com/post/31390149717</link><guid>http://rabbe.tumblr.com/post/31390149717</guid><pubDate>Wed, 12 Sep 2012 00:37:33 -0700</pubDate></item><item><title>This is amazing on every level!</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lrhq0oIypY1qbyqk7o1_500.gif"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;This is amazing on every level!&lt;/p&gt;</description><link>http://rabbe.tumblr.com/post/30925934513</link><guid>http://rabbe.tumblr.com/post/30925934513</guid><pubDate>Wed, 05 Sep 2012 02:26:27 -0700</pubDate></item><item><title>The main entrance for Tivoli.</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_m9d8dz44Ew1qe3q40o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;The main entrance for &lt;a href="http://tivoli.dk/"&gt;Tivoli&lt;/a&gt;.&lt;/p&gt;</description><link>http://rabbe.tumblr.com/post/30240930487</link><guid>http://rabbe.tumblr.com/post/30240930487</guid><pubDate>Sun, 26 Aug 2012 07:03:00 -0700</pubDate><category>MadeWithPaper</category><category>tivoli</category><category>copenhagen</category><category>main entrance</category><category>flags</category></item><item><title>The coat wrench, a coat hoot that looks like a wrench just...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_m971wrUg0f1qe3q40o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;The coat wrench, a coat hoot that looks like a wrench just sitting on a bolt that is stuck in the wall.&lt;/p&gt;</description><link>http://rabbe.tumblr.com/post/30020342108</link><guid>http://rabbe.tumblr.com/post/30020342108</guid><pubDate>Wed, 22 Aug 2012 22:58:00 -0700</pubDate><category>MadeWithPaper</category><category>paperprompts</category><category>coat hook</category><category>crafts</category></item><item><title>I love that time in the morning when the rays of the sun are...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_m96z9fZoWS1qe3q40o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;I love that time in the morning when the rays of the sun are lazily draping the landscape in gold, the streets are empty, and it could almost feel like you are the only person in the world.&lt;/p&gt;

&lt;p&gt;In a way, I wish I could take that feeling, bottle it up, and get it back when I feel stressed.&lt;/p&gt;</description><link>http://rabbe.tumblr.com/post/30017759528</link><guid>http://rabbe.tumblr.com/post/30017759528</guid><pubDate>Wed, 22 Aug 2012 22:00:51 -0700</pubDate><category>golden hour</category><category>morning</category><category>sunshine</category><category>feeling</category><category>peace</category><category>solitude</category></item><item><title>Absolutely disgusting.

mattfisher:


My Sister Paid Progressive...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_m8jmc8okep1qzoki7o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Absolutely disgusting.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://mattfisher.tumblr.com/post/29338478278/my-sister-paid-progressive-insurance-to-defend-her" class="tumblr_blog"&gt;mattfisher&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My Sister Paid Progressive Insurance to Defend Her Killer In Court&lt;/strong&gt;&lt;/p&gt;
&lt;p align="left"&gt;I’ve been sending out some impertinent tweets about Progressive Insurance lately, but I haven’t explained how they pissed me off. So I will do that here as succinctly as possible. There’s a general understanding that says, “insurance companies— oh they’re awful,” but since Progressive turned their shit hose on my late sister and my parents, I’ve learned some things that really surprised me.&lt;/p&gt;
&lt;p align="left"&gt;I’ll try to cleave to the facts. On June 19, 2010, my sister was driving in Baltimore when her car was struck by another car and she was killed. The other driver had run a red light and hit my sister as she crossed the intersection on the green light.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://mattfisher.tumblr.com/post/29338478278/my-sister-paid-progressive-insurance-to-defend-her"&gt;Read More&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://rabbe.tumblr.com/post/29393681275</link><guid>http://rabbe.tumblr.com/post/29393681275</guid><pubDate>Mon, 13 Aug 2012 23:03:58 -0700</pubDate></item><item><title>The Digital Household</title><description>&lt;p&gt;Like many others, I have embraced electronic books, especially reading them on my kindle. We are also a truly connected household where both my wife, son, and I have iPods with apps and games. We use our devices to read, watch movies, listen to music, and other forms of entertainment.&lt;/p&gt;

&lt;p&gt;In our use, it has become clear that there is a shortcoming in the current setup. Quite often my wife and I want to get the same apps, or read the same books. With the app store and iTunes we can mirror the apps and data as long as we authorize both computers, but it&amp;#8217;s still a hassle where you can easily run into annoyances when you loose track of what apps was bought on which account. Most of the time we simply buy on the same account for all our devices.&lt;/p&gt;

&lt;p&gt;On the kindle it&amp;#8217;s even worse. One of the really useful features of the kindle, is that it remembers you place across devices. If you share books across devices, however, that can become incredibly problematic. Amazon has introduced lending, but the rules for that are &lt;a href="http://www.amazon.com/gp/help/customer/display.html?nodeId=200549320"&gt;quite involved&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My solution, which I believe is quite simple and elegant (obviously), is the concept of a digital household. The ability to link a number of accounts (e.g. two adult accounts + &lt;em&gt;n&lt;/em&gt; accounts for children under the age of 21). Everyone in a digital household would be able to download, view, play, use, and keep all content bought within the digital household.&lt;/p&gt;

&lt;p&gt;It won&amp;#8217;t change until content producers allow it, and content providers enable it. We already see a bit of this with Fairplay where up to 5 computers can share music. It is still quite limited, yet I think it&amp;#8217;s inevitable, and I hope it comes quickly.&lt;/p&gt;</description><link>http://rabbe.tumblr.com/post/28847500281</link><guid>http://rabbe.tumblr.com/post/28847500281</guid><pubDate>Mon, 06 Aug 2012 11:14:49 -0700</pubDate><category>blurb</category><category>sharing</category><category>music</category><category>video</category><category>apps</category><category>books</category><category>household</category></item><item><title>This is awesome, the textures, both in the iPad-droplet, and in...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_m788n1emZ41rto5fzo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;This is awesome, the textures, both in the iPad-droplet, and in the galaxy are amazing. Definitely gonna try and re-create some of this in my own work.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://roll233.tumblr.com/post/27293132746/boundless-inspiration-after-watching-the" class="tumblr_blog"&gt;roll233&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Boundless Inspiration&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;After watching the film &lt;em&gt;Exit Through the Gift Shop&lt;/em&gt;, I wanted to visualize the idea that artists can gain inspiration for their works from &lt;strong&gt;EVERYTHING&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Roll&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://rabbe.tumblr.com/post/27395569590</link><guid>http://rabbe.tumblr.com/post/27395569590</guid><pubDate>Tue, 17 Jul 2012 00:27:03 -0700</pubDate></item></channel></rss>
