<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C04EQHY6fip7ImA9WhRbE08.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258</id><updated>2012-02-04T02:18:21.816Z</updated><category term="opt" /><category term="11.04" /><category term="admin" /><category term="uds" /><category term="drmfree" /><category term="ignition" /><category term="prefix" /><category term="development" /><category term="sdl" /><category term="colours" /><category term="hacking" /><category term="wine" /><category term="applet" /><category term="indicator" /><category term="openalsoft" /><category term="patches" /><category term="star wars" /><category term="starcraft" /><category term="lugaru" /><category term="3g" /><category term="stackoverflow" /><category term="joypad" /><category term="mega drive" /><category term="ubuntugamer" /><category term="humble" /><category term="panel" /><category term="mouse" /><category term="rom" /><category term="amd64" /><category term="timer" /><category term="joystick" /><category term="opengl" /><category term="python" /><category term="window" /><category term="internet" /><category term="debian" /><category term="windows" /><category term="firmware" /><category term="code" /><category term="motorola" /><category term="mint" /><category term="review" /><category term="c++" /><category term="usability" /><category term="reverse" /><category term="kazscene" /><category term="unigine" /><category term="pulseaudio" /><category term="linux" /><category term="amnesia" /><category term="buttons" /><category term="sonic" /><category term="adlxmod" /><category term="ogg" /><category term="schedule" /><category term="lmde" /><category term="engineering" /><category term="theme" /><category term="programming" /><category term="games" /><category term="genesis" /><category term="indie" /><category term="blizzard" /><category term="game" /><category term="django" /><category term="root" /><category term="libraries" /><category term="gens" /><category term="source" /><category term="close" /><category term="android" /><category term="chromeos" /><category term="ia32" /><category term="xwing" /><category term="emulator" /><category term="drm" /><category term="filefield" /><category term="ipod" /><category term="task" /><category term="icon" /><category term="dext" /><category term="messages" /><category term="xwi" /><category term="orange" /><category term="mod" /><category term="openal" /><category term="ubuntu" /><category term="bundle" /><category term="karmic" /><category term="itunes" /><category term="porting" /><category term="oilrush" /><category term="unity" /><title>Kazade's Home on the Internet</title><subtitle type="html">My thoughts (sometimes rants...) on programming, open source, games, Ubuntu and Android.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.kazade.co.uk/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/KazadesAdventuresInCode" /><feedburner:info uri="kazadesadventuresincode" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DU8CR3s_fip7ImA9WhRQFUk.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-3510273403813582479</id><published>2011-12-10T20:00:00.001Z</published><updated>2011-12-10T20:11:06.546Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-10T20:11:06.546Z</app:edited><title>Ignition Revisited</title><content type="html">At the beginning of the year I spent a bit of time reverse engineering a texture file from the abandonware game "Ignition". It was my first attempt at reverse engineering anything so I was pretty pleased when I deciphered the .PIC format, and so &lt;a href="http://blog.kazade.co.uk/2011/01/reverse-engineering-abandonware-game.html" target="_blank"&gt;I blogged about it&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;Since then that particular post has attracted a few comments from people interested to see if I'd learned any more about the game. I only noticed some of these comments recently and so it encouraged me to dust off the game once more and take another look.&lt;br /&gt;
&lt;br /&gt;
The result is a &lt;a href="https://github.com/Kazade/Ignition-Tools" target="_blank"&gt;GitHub repository&lt;/a&gt;, currently only including a newly rewritten &lt;a href="https://github.com/Kazade/Ignition-Tools/blob/master/pic2tga.cpp" target="_blank"&gt;texture converter&lt;/a&gt;, but I'm also working on decoding the MSH file which I believe contains model data. Feel free to check out the code, and contact me if you fancy helping out. It would be nice to be able to document all of the formats in the game!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-3510273403813582479?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/APEZh06GFT2MBlMduaKbgD8nSlE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/APEZh06GFT2MBlMduaKbgD8nSlE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/APEZh06GFT2MBlMduaKbgD8nSlE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/APEZh06GFT2MBlMduaKbgD8nSlE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/IvftrTnUkbY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/3510273403813582479/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2011/12/ignition-revisited.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/3510273403813582479?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/3510273403813582479?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/IvftrTnUkbY/ignition-revisited.html" title="Ignition Revisited" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2011/12/ignition-revisited.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04GQX08eCp7ImA9WhZXGU4.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-2369953040248392653</id><published>2011-05-09T11:04:00.002+01:00</published><updated>2011-05-09T11:12:00.370+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-09T11:12:00.370+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="unity" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="uds" /><title>Things that need fixing in Unity</title><content type="html">So, it's been a week or so since the release of 11.04, and I've been running Unity on my desktop and laptop for some time now, and, I'm fairly ambivalent about it. On the one hand, it's pretty and there are some really cool elements to it, but then these are spoiled by REALLY stupid design decisions, the UI is not in any way "simple", or "consistent" in fact, it's almost like it was designed to be complicated.&lt;br /&gt;
&lt;br /&gt;
One of the special skills I find in the open source community is that, we are generally more adaptive than most people. We learn how to work around stuff pretty quickly. This is a real hindrance when we come to design and use interfaces, because we adapt past broken interfaces and forget what it's like to see this interfaces for the first time.&lt;br /&gt;
&lt;br /&gt;
Now, let's take a step back. Let's look at Unity with a fresh pair of eyes and you will see actually, things aren't that great.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;1. The Panel (General Design)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This is by far the most broken part of the experience on the desktop. The panel has been designed for netbooks, and it's designed for maximized windows only. The moment you start bringing in unmaximized windows the whole thing becomes inconsistent, confusing and frustrating.&lt;br /&gt;
&lt;br /&gt;
The problem (as I've discussed before) is that maximized windows merge into the panel, but the panel shows details from the focused window. If you have an unmaximized window, these ARE NOT the same thing. So the menu/title and controls of the focused window appear in the titlebar of any background maximized window...&lt;br /&gt;
&lt;br /&gt;
Except, that's not the only problem. Noticing this, the design team tried to design their way out of the problem they'd designed themselves into in the first place. Realizing that now the window controls in the panel make it look like you are closing the maximized window, rather than the focused window, they removed them. So now, there is another inconsistency window controls only appear in the panel for maximized windows, and then only if they are focused. There are two solutions:&lt;br /&gt;
&lt;br /&gt;
1. Don't merge the titlebars or window controls. Make the panel only show the menu and title of the focused window.&lt;br /&gt;
2. Merge the titlebars of maximized windows, don't use a global menu.&lt;br /&gt;
&lt;br /&gt;
Personally, I'd go with the latter, I'm not a fan of the global menu on the desktop, and I like the way the titlebar merges with the panel.&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;2. Overlay scrollbars&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;Don't get me wrong, I think these scrollbars look slick. The real issue is that the appear inside or outside the window depending on the available space. This makes it hard to predict exactly where you need to move your cursor to scroll. Excuses I've heard are "I use the scroll wheel" and "I use PgUp and PgDn" - these to not excuse the problem. Just make the scrollbars always appear inside the window so people know what to expect.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;3. Dock Autohiding&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This, by default, was the wrong decision. The dock is difficult to "get back" and is not touchpad friendly at all. And the weird hover behaviour on the Ubuntu button doesn't help.&lt;br /&gt;
One thing that I continually do is click the Ubuntu button expecting that it will show the dock, which it does alongside the dash, but then I can't click anything on it.&lt;br /&gt;
&lt;br /&gt;
The other annoyance is when autohide is enabled, the window controls aren't at the left hand edge of the maximized window they are awkwardly offset because of the Ubuntu button. &lt;br /&gt;
&lt;br /&gt;
Just turn off autohide by default, make everyone's life easier.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;4. Maximized Windows Can't be Focused by Clicking Their Titlebar (&lt;a href="https://bugs.launchpad.net/ubuntu/+source/unity/+bug/720424"&gt;Bug&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
If you are working in a small window (e.g. Empathy) and you want to focus a maximized background window (e.g. Firefox), your instinct is to click the titlebar (e.g. the panel). But this doesn't work, so the only way to focus is to click *somewhere* in the background window, without triggering some action of that window. Nightmare.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;5. Dragging the Titlebar of a Maximized Window Doesn't Always Work (&lt;a href="https://bugs.launchpad.net/unity/+bug/774121"&gt;Bug&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This is a bug, but I'm seeing it quite often. If you try to drag a window out of it's maximized state (e.g after aero-snapping) it works sometimes, but not always. Really frustrating.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;6. The Title Hides Even Without AppMenu (&lt;a href="https://bugs.launchpad.net/unity/+bug/734900"&gt;Bug&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Remove indicator-appmenu, hover a window title in the panel. The title hides to show nothing.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;7. Hiding the Menus Behind the Title Ruins Global Menus&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;I've never been a fan of global menus on the desktop, on a netbook, fine, but on a desktop I think the travel distance, extra context and window disconnection outweigh the benefit's of Fitt's Law. At least though, on a netbook it makes sense right? Unless of course you hide the menus behind a title so you can't see where you are targetting until your cursor is actually there, so the Fitt's Law argument goes out of the window. Also, relying on hover breaks touch. Bad decision.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;Summary&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;Well, there&lt;/span&gt;'s 7 problem's that need fixing, I could go on but I think these are the worst; they are at least the ones that affect me. You'll notice though that 5/7 are down to the panel design. Just don't use global menus, don't update unrelated parts of the UI based on the focused window and those issues disappear.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-2369953040248392653?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pr5lxw7uOd0E0VTIrKSNOrafOXw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pr5lxw7uOd0E0VTIrKSNOrafOXw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pr5lxw7uOd0E0VTIrKSNOrafOXw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pr5lxw7uOd0E0VTIrKSNOrafOXw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/aRhxbLoY7kg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/2369953040248392653/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2011/05/things-that-need-fixing-in-unity.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/2369953040248392653?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/2369953040248392653?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/aRhxbLoY7kg/things-that-need-fixing-in-unity.html" title="Things that need fixing in Unity" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2011/05/things-that-need-fixing-in-unity.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UFRnc-eSp7ImA9WhZRFk8.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-7893456460134734349</id><published>2011-04-10T10:37:00.004+01:00</published><updated>2011-04-12T18:26:57.951+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-12T18:26:57.951+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="unity" /><category scheme="http://www.blogger.com/atom/ns#" term="panel" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><category scheme="http://www.blogger.com/atom/ns#" term="11.04" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>A critical look at Unity</title><content type="html">Ubuntu 11.04 comes out later this month, it's currently in beta. The main feature of 11.04 is the brand new desktop shell called Unity. I've been using Unity on and off for some time, but now we are near to release I decided to install it onto my desktop machine and use it full time.&lt;br /&gt;
&lt;br /&gt;
Perhaps I should've posted this blog post earlier, but the truth is that although I've had Unity on my laptop for some time, I haven't given it a real proper test drive. Now I have, I'm not quite as excited about Unity as I was, and in fact, I'm a little worried.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;The Good&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
There are plenty of great things about Unity, for one thing it is, in my opinion, the most glorious looking default desktop I've ever seen. Not just in free software either; it runs rings around both Apple and Microsoft in the looks department. &lt;br /&gt;
&lt;br /&gt;
The launcher looks brilliant, it's bright, colourful, although perhaps slightly too large by default. There are a couple of minor quibbles. The indicator applets seem really squashed together and untidy, this is probably collateral damage from the window elements in the panel (I'll get on to that in a bit). With everything and the kitchen sink in the panel, there is obviously less room for indicators. The other thing is that the categories menu in the applications "lense" looks a bit "Windows 95" but I'm sure that'll be fixed in time.&lt;br /&gt;
&lt;br /&gt;
I love the Applications lense. It makes finding and installing applications a complete doddle, really awesome. The only thing is I can't help thinking that it duplicates the Dash somewhat, and I wonder if both the "Applications" and "Files and Folders" lenses couldn't be combined into the Dash.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;The Bad&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Despite all that is good about Unity, there are things that ruin it. I always laugh when a user reacts to change with the cliche of "I'm leaving Ubuntu" but I really do have to go with the less extreme "I don't think I can use Unity". My issues can be summed up into two general areas:&lt;br /&gt;
&lt;br /&gt;
1. Window switching&lt;br /&gt;
2. The panel&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Window Switching&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;UPDATE: I've been reliably informed that the current window switching behaviour is not correct and is a bug. The finished Unity will display a spread of all the windows associated with an application if there is more than one window, which is pretty nice. So disregard this section!&lt;/b&gt;&lt;/blockquote&gt;Let's start with window switching. On the classic Ubuntu desktop, switching windows was a single click. It did involve scanning the window list which wasn't grouped and always had truncated entries. But it was simple, and clear. If you clicked a minimized window, it was restored, if you clicked it again, it was minimized. It doesn't get much simpler than that.&lt;br /&gt;
&lt;br /&gt;
Those of us that discovered the DockbarX applet had IMO the perfect solution to the space issues of the traditional window switcher. DockbarX groups windows by application (like Unity) but hovering the icon would give you a list of windows for that application, with quite a large portion of the windows' titles. Switching windows was FAST.&lt;br /&gt;
&lt;br /&gt;
Now, Unity. Unity's window switching is confusing. If a program isn't running, clicking the application icon will launch that application (fine). To open another window of that application you need to middle click or right click and use the popup menu, that seems fairly undiscoverable to me, but it's okay. Now, if you have two Firefox windows open and you left click the Firefox icon, what happens? The answer is, I'm not entirely sure.&lt;br /&gt;
&lt;br /&gt;
Sometimes it displays a nice compiz powered window selector, but sometimes it looks like it unminimizes the most recent window&lt;b&gt;*&lt;/b&gt;. It's seemingly random (I know that it isn't, but it definitely seems so). Why not just always display the window selector if there is more than one window? And while we are at it, if there is a single window open, why doesn't clicking the application icon minimize it?&lt;br /&gt;
&lt;br /&gt;
This might seem like a minor issue, but it's frustrating. People don't like not knowing what a button is going to do when they click it. It scares them.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;The Panel&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This is the big one. This is the thing that annoys me more than anything else in Unity, because it annoys me on many levels. First there is the irritation that it doesn't work in the way I expect, then I realize I can't change the behaviour through any option, then I think about the problem and get annoyed that Unity's designers plowed through obvious ambiguity and special cases just to save a few pixels of vertical space.... let me explain.&lt;br /&gt;
&lt;br /&gt;
Firstly, let me state I've never been a massive fan of the global menu on desktops. I think it's great for low resolutions when you work mainly with maximized windows because in that situation there is never that detachment from the window context that there is with smaller windows. On netbooks I think it's a great fit, on the desktop where multitasking with unmaximized windows on high resolutions is the norm... not so much.&lt;br /&gt;
&lt;br /&gt;
I've made my views on global menus clear all over the Interweb and Matthew Paul Thomas has put forward many good reasons why he believes they are a good idea, and I do buy some of those arguments, but only in the context of Apple's implementation of the global menu.&lt;br /&gt;
&lt;br /&gt;
We don't have Apple's implementation of a global menu.&lt;br /&gt;
&lt;br /&gt;
What we have is a menu hidden behind the title of the focused window, along with the window controls of the focused window, in a titlebar that may or may not belong to the top maximized window that may be unfocused. This makes no sense.&lt;br /&gt;
&lt;br /&gt;
Hiding a global menu behind a title bar completely destroys the point of the global menu in the first place. The main thing about a global menu is it is easy to hit... how is it easy to hit a menu item if you can't see it until your cursor is already there? It's also almost completely undiscoverable, when a new user boots from a Live CD, what are they supposed to do? Wave their mouse cursor around until they find it? What about touch screens?&lt;br /&gt;
&lt;br /&gt;
What we have is a global menu without any of the advantages of a global menu, but all the disadvantages (e.g. outside of the associated window and dependent on its context, large travel distances on high resolutions, incompatible with "sloppy focus").&lt;br /&gt;
&lt;br /&gt;
Let's forget the global menu for a minute, I mean after all you can always "sudo apt-get remove indicator-appmenu" to get back the old behaviour. Let's instead focus on the far more problematic issue. The window controls (again).&lt;br /&gt;
&lt;br /&gt;
On the Unity desktop, if you maximize a window, the panel becomes its titlebar. This is slick because it prevents wasted vertical space, and the indicators fit nicely in the blank area of the titlebar. If you maximize another window (let's say Firefox) above that one, then the panel becomes the titlebar for that window. This works fine.&lt;br /&gt;
&lt;br /&gt;
Now, open up another smaller window, say the Empathy contact list. Who now owns the panel? Logically Firefox should, as it looks like it forms part of that window. Except now the panel contains the title (and menu) of Empathy, inside the titlebar of Firefox.&lt;br /&gt;
&lt;br /&gt;
This basically has the effect of hiding the Firefox titlebar, the window controls for Firefox are no longer there, there is no way to close Firefox without focusing it first. Except of course you can still drag the titlebar of Firefox, so really we now have this situation where both Firefox and Empathy own the panel. It's confusing and ambiguous and the annoying thing is it really doesn't need to be. &lt;br /&gt;
&lt;br /&gt;
There are three solutions, any of them would make the panel far more usable:&lt;br /&gt;
&lt;br /&gt;
1. Don't merge the titlebar with the panel, retain a visible global menu (OSX style)&lt;br /&gt;
2. Merge the titlebar, make the panel only contain the controls and title of the top maximized window (e.g don't change with focus), abandon global menus entirely&lt;br /&gt;
3. Merge the titlebar into the panel complete with the hidden menu, but only for the top maximized window (don't change with focus). Keep the menu inside unmaximized windows.&lt;br /&gt;
&lt;br /&gt;
Either of those options would provide a consistent experience without any special cases or confusing situations. In each option you always know which window currently "owns" the panel. &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;Summary&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
While using Unity have seen a far higher number of bugs than I'd like to see this late in the development of 11.04, but I've ignored them for now, I have every faith that they will be fixed. They always are.&lt;br /&gt;
&lt;br /&gt;
I do worry about the above design decisions in terms of usability. Yeah, we'll probably get used to them, but then again if I lost a limb I'd get used to that too, it still wouldn't make it ideal. :)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;* Edit&lt;/b&gt;: Apparently it doesn't unminimize one window, it unminimizes all of them... who would ever want that to happen?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-7893456460134734349?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5jWe_SgF-086S83kmkrQY1Wupy4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5jWe_SgF-086S83kmkrQY1Wupy4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5jWe_SgF-086S83kmkrQY1Wupy4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5jWe_SgF-086S83kmkrQY1Wupy4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/LahPNaNOhoI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/7893456460134734349/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2011/04/critical-look-at-unity.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/7893456460134734349?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/7893456460134734349?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/LahPNaNOhoI/critical-look-at-unity.html" title="A critical look at Unity" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2011/04/critical-look-at-unity.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQNSXc-eyp7ImA9WhZSGUQ.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-3063856681454281678</id><published>2011-04-04T21:30:00.000+01:00</published><updated>2011-04-05T10:39:58.953+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-05T10:39:58.953+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="star wars" /><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="xwi" /><category scheme="http://www.blogger.com/atom/ns#" term="opt" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="hacking" /><category scheme="http://www.blogger.com/atom/ns#" term="game" /><category scheme="http://www.blogger.com/atom/ns#" term="xwing" /><title>Investigating X-Wing (OPT and XWI file formats)</title><content type="html">The other day I was reminiscing about the old PC games I used to play back in the 90s when I remembered the Lucasarts classic X-Wing. I remembered that in the late 90s I used to make levels for it using an editor. A bit of searching found me two different editors that I remember fiddling with, one was the DOS based "X-Wing Mission Builder" and another was the Windows based X-Ed.&lt;br /&gt;
&lt;br /&gt;
I found downloads for both (the X-Ed website still exists!) and both ran fine on my Ubuntu PC (XMB using DosBox, X-Ed through Wine). Little did I know that these downloads were going to start a chain reaction that would drive me to spend hours of my weekend staring at a hex editor. :)&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;When I was playing with X-Ed, I noticed that the map format itself seemed quite simple. You build maps by placing "flight groups", each flight group has a ship type (e.g. X-Wing), a start position, a ship count, and a number of waves. There are other flags for orders, team etc. but basically building a level for the game involved placing these flight groups and setting objectives (e.g. destroy an entire flight group). So, (I thought), if building a level is this simple, then surely the level format is simple. If I could understand the level format, perhaps I could load levels into a graphics engine like Ogre. How hard could it be?&lt;br /&gt;
&lt;br /&gt;
It took some searching, but I eventually found that someone had already &lt;a href="http://www.quantumg.net/xwing_format.php"&gt;described the format in detail&lt;/a&gt;. I noticed though that some values were missing, by comparing X-Ed's UI to the level spec I could see which options weren't in the specification I just had to figure out which checkbox in the UI, affected which unknown element in the spec. So, armed with GHex, I made changes to test map while watching what it did to the file. When I was done I'd deciphered the 8 unknown values from the spec. I emailed the website owner and he's updated the page.&lt;br /&gt;
&lt;br /&gt;
Fuelled by this success, I knocked together a little C++ app to load the map into Ogre and place the Ogre head mesh everywhere a ship would be. It worked, my next goal was to replace those Ogre heads with free 3D models of spaceships (e.g. not Star Wars related), perhaps I could turn this into an actual game! [1]&lt;br /&gt;
&lt;br /&gt;
Only, staring at the large, overlapping Ogre heads, something occurred to me. What scale are the ships in the original X-Wing? If I could load them then I could find out... in fact, if I could load them then I might be able to code a modern, replacement engine for X-Wing!&lt;br /&gt;
&lt;br /&gt;
This is where my curiosity probably went a step too far. I thought if the XWI level file format was so easy to find and load, then perhaps the OPT model format was also simple. Oh, how wrong I was.&lt;br /&gt;
&lt;br /&gt;
Long story, short: I found &lt;a href="http://www.oocities.org/v_d_d/Xwing_Unofficial_Specs.html"&gt;a specification&lt;/a&gt; for the OPT format used in the later games in the series, it was good but some parts were a little ambiguous, or could have been explained in detail. I spent hours and hours staring at the hex code of the X-Wing model, I managed to understand the structure, load in the vertices, dump out the textures, everything was going fine until...&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Assertion `indexes[0] + file_-&amp;gt;get_index_offset() &amp;lt; vertex_count' failed.&lt;/pre&gt;&lt;br /&gt;
For some reason, I'm finding indexes to vertices that are greater than the number of vertices in the mesh! This is the last stumbling block and I'm stumped.&lt;br /&gt;
&lt;br /&gt;
So, if anyone is reading this, and they were part of the OPT hacking community back in the day please get in touch!&lt;br /&gt;
&lt;br /&gt;
[1] Obviously not using the original maps or models, as they are copyright of Lucasarts etc. but using X-Ed to build maps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-3063856681454281678?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wcJJMXk5vfT5R19F3T7B5usFHSk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wcJJMXk5vfT5R19F3T7B5usFHSk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wcJJMXk5vfT5R19F3T7B5usFHSk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wcJJMXk5vfT5R19F3T7B5usFHSk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/pGKKbqHB30o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/3063856681454281678/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2011/04/investigating-x-wing-opt-and-xwi-file.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/3063856681454281678?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/3063856681454281678?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/pGKKbqHB30o/investigating-x-wing-opt-and-xwi-file.html" title="Investigating X-Wing (OPT and XWI file formats)" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2011/04/investigating-x-wing-opt-and-xwi-file.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMMQn07eCp7ImA9WhZSFkk.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-7290297077509805936</id><published>2011-04-01T09:27:00.001+01:00</published><updated>2011-04-01T09:28:03.300+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-01T09:28:03.300+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="timer" /><category scheme="http://www.blogger.com/atom/ns#" term="source" /><title>C++ Timer Class</title><content type="html">Just thought I'd shove this somewhere public as it's probably useful for someone.&lt;br /&gt;
&lt;br /&gt;
Earlier today I had a problem where boost::timer was always returning zero. The cause was boost::timer uses std::clock which only returns the elapsed CPU time. If you use sleep(), std::clock won't update!&lt;br /&gt;
&lt;br /&gt;
So here's a little class that returns the elapsed time since the timer was instantiated (or restarted) which works with sleep().&lt;br /&gt;
&lt;br /&gt;
&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; Copyright (C) 2011 by Luke Benstead  
   
 Permission is hereby granted, free of charge, to any person obtaining a copy  
 of this software and associated documentation files (the "Software"), to deal  
 in the Software without restriction, including without limitation the rights  
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell  
 copies of the Software, and to permit persons to whom the Software is  
 furnished to do so, subject to the following conditions:  
   
 The above copyright notice and this permission notice shall be included in  
 all copies or substantial portions of the Software.  
   
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR  
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE  
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER  
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,  
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN  
 THE SOFTWARE.  
   
 #ifndef TIMER_H_INCLUDED  
 #define TIMER_H_INCLUDED  
   
 #include &amp;lt;sys/time.h&amp;gt;  
   
 class Timer {  
 public:  
   Timer():  
     start_time_(now()) {  
   }  
   
   void restart() {  
     start_time_ = now();  
   }  
   
   double elapsed() const {  
     double t = now();  
   
     return double(t - start_time_);  
   }  
   
 private:  
   double now() const {  
     timeval t;  
     gettimeofday(&amp;amp;t, NULL);  
     return t.tv_sec + (t.tv_usec / 1000000.0);  
   }  
   
   double start_time_;  
 };  
   
 #endif // TIMER_H_INCLUDED  
   
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Yeah I know, it's basic and anyone could've written it, but still might save someone 5 minutes :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-7290297077509805936?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/njXldiJm9IgaRGeQ5gcXFbGQVk8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/njXldiJm9IgaRGeQ5gcXFbGQVk8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/njXldiJm9IgaRGeQ5gcXFbGQVk8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/njXldiJm9IgaRGeQ5gcXFbGQVk8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/EtJZu6k5Cys" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/7290297077509805936/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2011/04/c-timer-class.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/7290297077509805936?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/7290297077509805936?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/EtJZu6k5Cys/c-timer-class.html" title="C++ Timer Class" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2011/04/c-timer-class.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEFSX4yeip7ImA9Wx9UGEU.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-8629749270018074107</id><published>2011-02-16T09:25:00.003Z</published><updated>2011-02-16T19:13:38.092Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-16T19:13:38.092Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lmde" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="debian" /><category scheme="http://www.blogger.com/atom/ns#" term="mint" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Linux Mint Debian Edition - First Impressions</title><content type="html">This morning I got up early and replaced my Ubuntu 10.10 installation with a nice shiny install of Linux Mint Debian Edition (LMDE). LMDE is based on Debian testing, and is a rolling release. I've always wanted to try a rolling release, and one based on Debian ticks all the boxes. The important thing is that Debian and Ubuntu share the APT packaging system which thinking about it, is probably the main reason I use Ubuntu. &lt;br /&gt;
&lt;br /&gt;
I've used regular Linux Mint a few times in the past and I've always been impressed, although I always end up back on Ubuntu, I'm not really sure why that is, probably that I can't wait to test out the newest stuff so I jump on Ubuntu as soon as a new release comes out. A rolling release of course solves that problem.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Installation&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Installation was pretty smooth, everything worked out of the box from the live CD including wifi (although I did go out of the way to buy an Linux-friendly wifi card). The only minor issue was that my keyboard was set to some random layout (probs U.S.), it wasn't until I started the installation and set the correct keyboard layout that I could type punctuation without trial and error. But then that took effect immediately across the system. It's interesting, I don't remember that happening in an Ubuntu installation, maybe I just never noticed. Does Ubuntu detect the keyboard layout via your location (e.g. over wifi)?&lt;br /&gt;
&lt;br /&gt;
The partitioning screen would be pretty confusing to a newbie, I didn't really like that all my disks were displayed at once, I'd much prefer some kind of separation like GParted uses. Another thing that was quite disconcerting was the lack of a "Format?" column in the table, instead relying on the filesystem type displayed under the "Format to..." heading, I wasn't completely sure it wasn't going to format my home partition and I had to double and triple check on the final installation screen to make sure I wasn't about to wipe my data. It would be nice to have some kind of definite "Yes, I'm formatting this partition" flag next to each partition entry.&lt;br /&gt;
&lt;br /&gt;
Another minor niggle occurred when installation finished, I was told I could reboot into the system, but I wasn't given an option on that dialog to do so. That would've been nice.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;First Run&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Boot time was FAST. I got a bit worried when Grub popped up with a BSOD colour scheme, I thought something had gone wrong for a second, old habits die hard I guess. I did have one issue when I logged in though...&lt;br /&gt;
&lt;br /&gt;
This is something that occurs in other (all?) distros, but it is an annoyance. If I select an existing home partition, that has an existing folder for the selected username it would be great if the installer could run chown -R user:user on that home folder. Otherwise if the user IDs don't match, the user is greeted to a bunch of confusing error messages and unable to write to their folder. Easy to fix if you know what you are doing, but really this is the installer's job.&lt;br /&gt;
&lt;br /&gt;
Aside from that everything was great, LMDE feels really solid, I can't put my finger on it, but it *feels* more robust than Ubuntu. The Mint menu is amazing, easily the best program menu I've ever used. The Mint themes are beautiful, I'm not a huge fan of green though so I switched over to the dark and blue WildMint theme which is very nice. I did flick all the desktop fonts over to ttf-ubuntu just as a personal preference.&lt;br /&gt;
&lt;br /&gt;
There were a few other minor niggles:&lt;br /&gt;
1. Synaptic is the package manager - a rebranded Ubuntu Software Centre would probably be nicer&lt;br /&gt;
2. I installed the indicator applet but it doesn't work, although I know this is down to Debian rather than LMDE, I'm sure it'll be fixed in time&lt;br /&gt;
3. No Plymouth, but that's in the release notes, and to be honest, I sort of prefer the scrolling text :)&lt;br /&gt;
&lt;br /&gt;
I've got a queue of updates to install when I get home tonight, so perhaps some things are fixed. My next challenge is getting 3D acceleration on my ATI graphics card :)&lt;br /&gt;
&lt;br /&gt;
EDIT: The BSOD grub colour scheme was changed after the updates to a much more subtle grey. Also, my ATI card is running pretty well with the open source drivers so I'll stick with that for a while.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-8629749270018074107?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XNWXV70Jx2_v8wG44Q2F-dPGo5A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XNWXV70Jx2_v8wG44Q2F-dPGo5A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XNWXV70Jx2_v8wG44Q2F-dPGo5A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XNWXV70Jx2_v8wG44Q2F-dPGo5A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/CS4_eAQZkUs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/8629749270018074107/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2011/02/linux-mint-debian-edition-first.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/8629749270018074107?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/8629749270018074107?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/CS4_eAQZkUs/linux-mint-debian-edition-first.html" title="Linux Mint Debian Edition - First Impressions" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2011/02/linux-mint-debian-edition-first.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8GQnw6eip7ImA9Wx9UGEk.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-2029760048866047294</id><published>2011-01-18T15:01:00.003Z</published><updated>2011-02-16T09:33:43.212Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-16T09:33:43.212Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="reverse" /><category scheme="http://www.blogger.com/atom/ns#" term="ignition" /><category scheme="http://www.blogger.com/atom/ns#" term="engineering" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Reverse Engineering the Abandonware Game "Ignition"</title><content type="html">Ignition has always been one of my favourite racing games. It had a quirky charm that was reminiscent of Micro Machines, but set in beautiful outdoor environments.&lt;br /&gt;
&lt;br /&gt;
It's now one of the most prominent cases of Abandonware ever. First published by Virgin Interactive, which was acquired by Titus Software, which then became Avalon Interactive. Both Titus and Avalon no longer exist. So who owns the rights to the game (and more importantly who has the source code) is a mystery.&lt;br /&gt;
&lt;br /&gt;
The other day I decided to take a look at the files that come with Ignition, I wondered if there was anything salvageable for an indie game developer. Perhaps I could knock together a level viewer or mod the game. The first thing I noticed is that Ignition uses a lot of different file formats.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
There is one TGA image, but that's just of the Virgin Interactive logo, some of the sounds are WAV, but others are another mystery format. However, some of the extensions give away what they are. There are .PIC files and .MSH which I assume are images and mesh files respectively. There is also a .TEX, some other image file perhaps?&lt;br /&gt;
&lt;br /&gt;
I fired up a hex editor and began work reverse engineering the .PIC file. The first thing I tried to do was to render the latter part of the data as RGB bytes. I assumed (wrongly) that it would be a 24 bit image. All I got out of it was a garbled mess, except for a couple of rows near the top of the image which were all different colours. It then occurred to me; this is a palette based image and those two rows of colour are the palette.&lt;br /&gt;
&lt;br /&gt;
Now that I knew what I was looking for, things got easier. I looked at the beginning of the header and found a couple of familiar numbers; 640 and 480. Those bytes were obviously the dimensions of the image. With that in mind I could read backwards from the end of the file for 640 * 480 bytes and assume that that would be where the end of the header (and probably the palette data) was.&lt;br /&gt;
&lt;br /&gt;
Finally, with a bit more experimentation, I found the start and end of the palette and some other numbers the use of which still eludes me.&lt;br /&gt;
&lt;br /&gt;
To sum up, here is the header structure of the PIC image file that Ignition uses:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;typedef struct PICHeader {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; INT file_size;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SHORT magic; //Always 38144 (or 0, 149 in separate bytes)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SHORT width;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SHORT height;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SHORT unknown1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SHORT unknown2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE unknown3[50];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SHORT palette_size; //I thought this was palette size - but it's not, it's always 776&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE unknown4[6]; //Always zeros, probably reserved&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE palette[256*3];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SHORT unknown5; //In one file this was the number of bytes after and including this one, but not in others (??)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE unknown6[4]; //Seen (0, 0, 1, 0), (4, 0, 1, 0) - probably orientation (e.g flipped image)&lt;br /&gt;
} PICHeader;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Every byte beyond the header is an index into the palette for the pixel colour. I now have a simple little program that converts from PIC to TGA. If anyone has any clue what any of the other numbers means then let me know.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Now onto the other... probably more complicated... formats. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-2029760048866047294?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k-JXvlIuvquebmvkLSTyJRh-syg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k-JXvlIuvquebmvkLSTyJRh-syg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/k-JXvlIuvquebmvkLSTyJRh-syg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k-JXvlIuvquebmvkLSTyJRh-syg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/s3XBF8tdZ4g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/2029760048866047294/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2011/01/reverse-engineering-abandonware-game.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/2029760048866047294?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/2029760048866047294?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/s3XBF8tdZ4g/reverse-engineering-abandonware-game.html" title="Reverse Engineering the Abandonware Game &quot;Ignition&quot;" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>6</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2011/01/reverse-engineering-abandonware-game.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUECQn8zfCp7ImA9Wx9XF04.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-1506376853707674191</id><published>2011-01-11T09:21:00.000Z</published><updated>2011-01-11T09:21:03.184Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-11T09:21:03.184Z</app:edited><title>PPA For My Game Developer Kit</title><content type="html">So, I've spent the last few months focusing on developing cross-platform games. I've started small with Ubuntu Bug Blast, and gradually I'm going to build to more and more complex games. The idea is that I will identify bottlenecks in development, and create small modular libraries to cover the repetitive parts of developing a game in OpenGL.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
DirectX has a lot of common functionality, like text output, or math functions, which OpenGL lacks. Of course, libraries for these functions exist for OpenGL, but they always seem to do too much, or be complicated to use in some way. My libraries will focus on doing one thing, and covering the most common use cases.&lt;br /&gt;
&lt;br /&gt;
If you head on over to the &lt;a href="http://blog.kazade.co.uk/p/kazmath.html"&gt;game libraries page&lt;/a&gt;, you'll see that so far I have created two libraries; &lt;a href="http://launchpad.net/kazmath"&gt;Kazmath&lt;/a&gt; and &lt;a href="http://launchpad.net/kaztext"&gt;Kaztext&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Kazmath has been around for some time and was co-written with my good friend (and math guru) Carsten Haubold. Kaztext however is very recent, it provides a simple way to load TrueType fonts into OpenGL, and bind and use them like OpenGL objects.&lt;br /&gt;
&lt;br /&gt;
To make using this libraries on Ubuntu easy, I've created a PPA. You can &lt;a href="https://launchpad.net/%7Ekazade/+archive/kazade-gdk"&gt;find it here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The packages include headers and statically compiled libraries (the libraries are BSD licensed). You should be able to just include the headers (e.g. #include &amp;lt;kaztext/kaztext.h&amp;gt; ) and link to the library and then use the libraries straight away.&lt;br /&gt;
&lt;br /&gt;
All of the libraries of the GDK will follow the following rules:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;They will always be written with a portable C API&lt;/li&gt;
&lt;li&gt;They will be as simple as possible&lt;/li&gt;
&lt;li&gt;They will not depend on each other&lt;/li&gt;
&lt;li&gt;They will be open source under the same modified BSD license&lt;/li&gt;
&lt;li&gt;They will all be hosted on Launchpad&lt;/li&gt;
&lt;/ul&gt;I will be creating a Windows installer for the libraries so that it's easy to get the GDK there too. Upcoming libraries include Kaztimer (game timers and stop watches), Kazui (simple OGL based UI API), Kazpng (PNG image loading to OpenGL textures) and more!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-1506376853707674191?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Fh9Ag3dFZwcWLAQ1HP08Nvtt0K4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fh9Ag3dFZwcWLAQ1HP08Nvtt0K4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Fh9Ag3dFZwcWLAQ1HP08Nvtt0K4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fh9Ag3dFZwcWLAQ1HP08Nvtt0K4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/JVn9RKxdFkI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/1506376853707674191/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2011/01/ppa-for-my-game-developer-kit.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/1506376853707674191?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/1506376853707674191?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/JVn9RKxdFkI/ppa-for-my-game-developer-kit.html" title="PPA For My Game Developer Kit" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2011/01/ppa-for-my-game-developer-kit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAHQH0_fSp7ImA9Wx9TEUo.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-9187674790207469639</id><published>2010-10-21T14:45:00.003+01:00</published><updated>2010-11-19T14:42:11.345Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-19T14:42:11.345Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firmware" /><category scheme="http://www.blogger.com/atom/ns#" term="joystick" /><category scheme="http://www.blogger.com/atom/ns#" term="mouse" /><category scheme="http://www.blogger.com/atom/ns#" term="task" /><category scheme="http://www.blogger.com/atom/ns#" term="ipod" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="schedule" /><category scheme="http://www.blogger.com/atom/ns#" term="joypad" /><category scheme="http://www.blogger.com/atom/ns#" term="itunes" /><category scheme="http://www.blogger.com/atom/ns#" term="buttons" /><title>5 GUI Apps that Ubuntu is Missing</title><content type="html">Ubuntu has come a long way in the past few years. I've been using it as my only desktop OS since Hoary, and it's come along in leaps and bounds. There are however a number of things that just seem to be "missing".&lt;br /&gt;
&lt;br /&gt;
This list is a set of GUI apps that I have discovered to be missing, either on my own desktop (1, 2, 3, and 5) or while installing Ubuntu for friends (4).&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;#1. A Mouse Button Configuration UI&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This seems like such a glaring omission that I'm baffled it's still the case. I have a mouse with extra buttons beyond the standard 3 + scrollwheel. At least 3 of these extra buttons do nothing.&lt;br /&gt;
&lt;br /&gt;
However, if you go to to the Mouse preferences in the UI there is no way to map those buttons to any behaviour, in fact a Google search brings you to this wiki page: https://help.ubuntu.com/community/ManyButtonsMouseHowto&lt;br /&gt;
&lt;br /&gt;
Every single part of the document describes running terminal commands, installing extra programs or editing hidden configuration files. This is a big FAIL. Just give us a UI that says, "Map button 5 to 'Back'" and I'll be happy. &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;#2. A Joystick/Joypad Calibration Utility&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This is pretty much the same as above, but for the often forgotten about extra input device. Unlike the Mouse, we don't even have an entry under preferences for this. How can Ubuntu become a decent gaming platform when we can't even test or configure a Joypad?&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;#3. A Simple Painting App&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ubuntu has plenty of "photo" applications, we now have Shotwell or whatever. But occasionally you just want to scribble something on top of a screenshot, or entertain a visiting nephew. Windows has had MS Paint since, what 3.1?&lt;br /&gt;
&lt;br /&gt;
There are plenty of MS Paint clones out there, pick one, shove it under accessories and let people scribble to their hearts content from the LiveCD. &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;#4. An iPod/iPhone Firmware Updater&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This one is debatable, but simply put, Rhythmbox can manage the music but it can't reset or update the firmware (like iTunes can). You want to convert people to Ubuntu? iTunes is the big gaping hole, and although Rhythmbox + Ubuntu One does plug some of that gap, there isn't enough support for managing the other features of their iPods.&lt;br /&gt;
&lt;br /&gt;
Gtkpod is OK, it does allow you to reset an iPod but again you can't update the firmware from it. Of course, the catch-22 is a firmware update could render any iPod integration unusable, but we could surely come up with a UI that only flags "safe" updates.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;#5. An Easy to Use Task Scheduler &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This one actually sprang up because I kept forgetting to sign into Empathy at work. Empathy doesn't start up by default so I went to find the "Start on login" checkbox only to find it doesn't exist.&lt;br /&gt;
&lt;br /&gt;
There is a "Startup Applications" section under preferences, but unless your application has thought to put an entry there, getting it to work isn't exactly user friendly.&lt;br /&gt;
&lt;br /&gt;
What we need is a UI that says "Start X, Y minutes after Z" where X is an application, Y is a number, and Z is Login, Network Connected, USB key inserted etc. and also cron-style "Start X at Y on Z".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-9187674790207469639?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9o0ouCu6KKw5qMRQO45MnCgpWdg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9o0ouCu6KKw5qMRQO45MnCgpWdg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9o0ouCu6KKw5qMRQO45MnCgpWdg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9o0ouCu6KKw5qMRQO45MnCgpWdg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/uRknGXrJ-RM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/9187674790207469639/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/10/5-gui-apps-that-ubuntu-is-missing.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/9187674790207469639?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/9187674790207469639?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/uRknGXrJ-RM/5-gui-apps-that-ubuntu-is-missing.html" title="5 GUI Apps that Ubuntu is Missing" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/10/5-gui-apps-that-ubuntu-is-missing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIBRHw9fSp7ImA9WhZREEw.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-5514241540737686950</id><published>2010-10-13T14:05:00.004+01:00</published><updated>2011-04-05T16:15:55.265+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-05T16:15:55.265+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="messages" /><category scheme="http://www.blogger.com/atom/ns#" term="theme" /><category scheme="http://www.blogger.com/atom/ns#" term="indicator" /><category scheme="http://www.blogger.com/atom/ns#" term="colours" /><category scheme="http://www.blogger.com/atom/ns#" term="applet" /><category scheme="http://www.blogger.com/atom/ns#" term="icon" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Mellowing the Ubuntu Indicator Applets</title><content type="html">&lt;b&gt;Update:&lt;/b&gt; As of Ubuntu 11.04 Canonical has switched to using light blue icons for notifications. So, I can officially say "I told you so" :)&lt;br /&gt;
&lt;br /&gt;
One thing that has bugged me since Canonical launched their Indicator Applet work was their chosen colour system. I'll explain...&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Certain colours can imply certain meanings. For example Green normally means "Go ahead" or "Everything is OK". Red can mean "Stop" or "Danger" or "Something's gone horribly wrong". Blue is normally associated with just "Information", especially when it comes to road signs. A quick Google Image search for "&lt;a href="http://www.google.com/images?um=1&amp;amp;hl=en&amp;amp;client=ubuntu&amp;amp;channel=fs&amp;amp;biw=1280&amp;amp;bih=875&amp;amp;tbs=isch%3A1&amp;amp;sa=1&amp;amp;q=information+sign&amp;amp;aq=f&amp;amp;aqi=g2g-m3&amp;amp;aql=&amp;amp;oq=&amp;amp;gs_rfai="&gt;information sign&lt;/a&gt;" shows a definite Blue trend.&lt;br /&gt;
&lt;br /&gt;
Yet, the application indicators, and specifically the message indicator, love using Green and Red. Green is used for "New Messages" but Red is used for "Your Volume is Muted" or "You Need to Restart Your Computer".&lt;br /&gt;
&lt;br /&gt;
I don't know about you, but those colours don't seem to match what is basically "information" to me. In fact, both colours convey an unnecessary sense of urgency.&lt;br /&gt;
&lt;br /&gt;
So, to make things a bit more mellow, &lt;a href="http://ubuntuone.com/p/K9s/"&gt;I've created Blue versions of the above icons&lt;/a&gt;. I find them much nicer. To install just copy the "apps" and "status" folders over the ones in /usr/share/icons/ubuntu-mono-dark/ . If you decide you don't want them any more just reinstall the ubuntu-mono icon theme.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_UzOwpmb0AcY/TLWuRw6pgUI/AAAAAAAAAKM/Hnehex57Q84/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_UzOwpmb0AcY/TLWuRw6pgUI/AAAAAAAAAKM/Hnehex57Q84/s1600/Screenshot.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-5514241540737686950?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o5weCtnwbTv1Q6tdyNqGCvqgo7Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o5weCtnwbTv1Q6tdyNqGCvqgo7Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o5weCtnwbTv1Q6tdyNqGCvqgo7Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o5weCtnwbTv1Q6tdyNqGCvqgo7Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/lzXinNYosQQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/5514241540737686950/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/10/mellowing-ubuntu-indicator-applets.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/5514241540737686950?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/5514241540737686950?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/lzXinNYosQQ/mellowing-ubuntu-indicator-applets.html" title="Mellowing the Ubuntu Indicator Applets" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_UzOwpmb0AcY/TLWuRw6pgUI/AAAAAAAAAKM/Hnehex57Q84/s72-c/Screenshot.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/10/mellowing-ubuntu-indicator-applets.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAFR3k-cCp7ImA9Wx5VGUo.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-484465437627098203</id><published>2010-10-08T11:58:00.001+01:00</published><updated>2010-10-13T15:05:16.758+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-13T15:05:16.758+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sonic" /><category scheme="http://www.blogger.com/atom/ns#" term="mega drive" /><category scheme="http://www.blogger.com/atom/ns#" term="genesis" /><category scheme="http://www.blogger.com/atom/ns#" term="emulator" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="rom" /><category scheme="http://www.blogger.com/atom/ns#" term="gens" /><title>Step Back to the 90s with this Mega Drive Emulator for Ubuntu</title><content type="html">&lt;div style="background-color: #ffee00; border: 1px solid black; padding: 5px;"&gt;This post is a cross-post from &lt;a href="http://www.ubuntugamer.com/"&gt;Ubuntu Gamer&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I don't know about you guys and girls, but sometimes I like reminiscing about my childhood by playing some good old Mega Drive (Genesis for those across the pond) games. You can't beat a good round of Sonic.&lt;br /&gt;
&lt;br /&gt;
When it comes to Mega Drive emulators that run on Ubuntu, &lt;a href="http://segaretro.org/Gens/GS"&gt;Gens/GS&lt;/a&gt; rocks. Gens/GS is a fork of the well known Gens emulator, and over the last several months the author has been cleaning up the source code and adding new features and bug fixes to create an awesome (open source!) emulator.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Some of the features include:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Multiple resolution support&lt;/li&gt;
&lt;li&gt;Lots of rendering modes&lt;/li&gt;
&lt;li&gt;Sega CD support&lt;/li&gt;
&lt;li&gt;SDL or OpenGL rendering backends&lt;/li&gt;
&lt;li&gt;Save/Load States&lt;/li&gt;
&lt;li&gt;...and loads more!&lt;/li&gt;
&lt;/ul&gt;Unfortunately, Gens/GS isn't packaged in the Ubuntu repositories, but luckily the author provides pre-built packages for all the releases and they are available on the &lt;a href="http://segaretro.org/Gens/GS"&gt;homepage.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The package only comes in the i386 flavour, so if you are running the AMD64 version of Ubuntu you may need to use dpkg and some --force-architecture magic:&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --force-architecture -i Gens_2.16.7_i386.deb&lt;br /&gt;
&lt;br /&gt;
You'll get a Gens/GS entry under the Games menu where you can fire up your classic ROMS.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.ubuntugamer.com/wp-content/uploads/2010/10/Screenshot-Gens-GS-r7-Genesis-SONIC-3-COMPLETE.png"&gt;&lt;img alt="" class="alignnone size-medium wp-image-131" height="394" src="http://www.ubuntugamer.com/wp-content/uploads/2010/10/Screenshot-Gens-GS-r7-Genesis-SONIC-3-COMPLETE-500x394.png" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Note, the legality of running old ROMs is a grey area and depends on the laws in your country, so check them out first.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-484465437627098203?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Bd8o_cj4HOU5lNxEU4arK8x127Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Bd8o_cj4HOU5lNxEU4arK8x127Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Bd8o_cj4HOU5lNxEU4arK8x127Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Bd8o_cj4HOU5lNxEU4arK8x127Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/uhR_lcgB2fw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/484465437627098203/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/10/step-back-to-90s-with-this-mega-drive.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/484465437627098203?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/484465437627098203?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/uhR_lcgB2fw/step-back-to-90s-with-this-mega-drive.html" title="Step Back to the 90s with this Mega Drive Emulator for Ubuntu" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/10/step-back-to-90s-with-this-mega-drive.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAMSHo6cCp7ImA9Wx5VGUo.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-1463456206029839047</id><published>2010-10-05T09:58:00.001+01:00</published><updated>2010-10-13T15:06:29.418+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-13T15:06:29.418+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="games" /><category scheme="http://www.blogger.com/atom/ns#" term="prefix" /><category scheme="http://www.blogger.com/atom/ns#" term="wine" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntugamer" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="game" /><title>Using Multiple Wine Prefixes</title><content type="html">&lt;div style="background-color: #ffee00; border: 1px solid black; padding: 5px;"&gt;This post is a cross-post from &lt;a href="http://www.ubuntugamer.com/"&gt;Ubuntu Gamer&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Wine rocks. It is probably one of the most underestimated pieces of software in the open source ecosystem. If the idea of running pre-compiled programs from Windows on a totally different operating system with a different kernel, and different programming libraries doesn't make you cross-eyed with the complexity, then you aren't thinking about it hard enough.&lt;br /&gt;
&lt;br /&gt;
Just to give some idea of the Herculean achievement that Wine is; the current number of lines of code that make up Wine stands at well over 2.5 million and the project was started in 1993.&lt;br /&gt;
&lt;br /&gt;
The Wine developers don't just have a mountain to climb. To extend the metaphor, they have to climb the mountain, blindfolded, in a straight jacket while tied to a goat... drunk. Their work really is that hard.&lt;br /&gt;
&lt;br /&gt;
Yet despite all that effort, Wine still isn't 100% perfect. Sometimes a Wine DLL will be missing some code, other times the code may not match what Windows does and occasionally a program assumes the existence of files that may not even necessarily exist on a native Windows installation (e.g. .NET).&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
In these situations it's possible to use native original Windows DLLs in place of the Wine manufactured ones, or to install non-default runtime files like .NET or Java using their Windows installers.&lt;br /&gt;
&lt;br /&gt;
To make this process easy there is a script called “winetricks” included in the Wine package from the &lt;a href="http://www.winehq.org/download/deb" title="Wine PPA Installation"&gt;Wine PPA&lt;/a&gt; or is available for download from &lt;a href="http://wiki.winehq.org/winetricks"&gt;here&lt;/a&gt;. Running winetricks from the terminal will give you a bunch of possible options to change and runtimes to install. Things like configuring font-smoothing, or installing .NET 1.1, 2.0 or 3.0.&lt;br /&gt;
&lt;br /&gt;
The interesting thing is that these changes usually only affect the default Wine “prefix”.&lt;br /&gt;
&lt;h2&gt;What is a Prefix?&lt;/h2&gt;You all probably know that Windows installations have a certain folder structure. Specifically you'll normally have a &lt;a href="http://www.blogger.com/post-create.g?blogID=526640567708972258"&gt;&lt;/a&gt;C:\Windows directory, and a C:\Program Files directory. When you run Wine for the first time it creates these folders in a hidden directory in your home folder called “.wine”&lt;br /&gt;
&lt;br /&gt;
This is a Wine prefix, it is essentially a fake Windows installation. It contains the folder tree, system files, a registry and Wine specific options (e.g. the Windows version). When you install an application, the files will be installed in the correct places within this tree and may add and remove registry entries. The default prefix is ~/.wine but you can create new ones anywhere you like.&lt;br /&gt;
&lt;h2&gt;So, Multiple Prefixes?&lt;/h2&gt;As I previously mentioned, sometimes you need to install some extra stuff into a Wine prefix to get an application working. If you are installing many applications and games your prefix can bloat up. Perhaps you may install something to get your second application working that breaks the first one. Perhaps you have an application that requires Wine to simulate Windows 98 and another application that only runs on XP and above.&lt;br /&gt;
&lt;br /&gt;
To avoid this situation you can create a fake Windows installation for each individual application you install. You can tailor this installation for the application you are installing without the risk of breaking any other installed Windows programs.&lt;br /&gt;
&lt;h2&gt;The WINEPREFIX variable&lt;/h2&gt;Wine keeps track of the prefix to use with the WINEPREFIX environment variable. When the WINEPREFIX variable is set, all Wine commands such as winetricks or winecfg and any Windows application will use the specified prefix. Wine will also create the prefix if it doesn't exist.&lt;br /&gt;
&lt;br /&gt;
As an example I'll demonstrate installing Interstate 76 bought from &lt;a href="http://www.gog.com/"&gt;GOG.com&lt;/a&gt; into its own prefix. What's interesting about this specific game (and specifically the GOG version) is it requires a native Visual C++ runtime, .NET and the Windows version to be set to Windows 98, otherwise it crashes.&lt;br /&gt;
&lt;br /&gt;
It's worth noting that you are required to have a Windows license to install Microsoft redistributables. Eventually Wine and Mono will progress enough to make this unnecessary though, just not yet :)&lt;br /&gt;
&lt;h2&gt;Example: Interstate 76&lt;/h2&gt;So, we want to create a new Wine prefix, which we do by setting the WINEPREFIX variable. So in a terminal we run:&lt;br /&gt;
&lt;pre&gt;export WINEPREFIX=~/.wine-interstate76&lt;/pre&gt;From this point forward all Wine commands run within the terminal session will work on our new prefix in a hidden .wine-interstate76 folder.&lt;br /&gt;
&lt;br /&gt;
So now we can run the installer:&lt;br /&gt;
&lt;pre&gt;wine ~/Downloads/setup_interstate76_arsenal.exe&lt;/pre&gt;Running this command will do two things. Firstly it will create the prefix (you'll see a nice Wine message box telling you that it is updating the prefix). Secondly, it will run the installation program. Once we've been through the installer it will ask if you want to launch the game. This errors out with the Windows error message:&lt;br /&gt;
&lt;pre&gt;“An application has made an attempt to load the C runtime library incorrectly”.&lt;/pre&gt;If you ever see this specific error while trying to start a program under Wine, the workaround is usually to install the native VC++ runtime using winetricks. You'll notice the terminal printed the following:&lt;br /&gt;
&lt;pre&gt;err:module:attach_process_dlls "MSVCR90.dll" failed to initialize, aborting&lt;/pre&gt;So, we fire up winetricks and scroll down the list and lo and behold right next to “vcrun2008” is “msvcr90” listed as one of the components that it installs. Enable the checkbox next to &lt;i&gt;vcrun2008&lt;/i&gt;, also next to &lt;i&gt;dotnet20&lt;/i&gt; and &lt;i&gt;win98&lt;/i&gt; which are required for this game.&lt;br /&gt;
&lt;br /&gt;
Clicking OK will start off the VC++ runtime and .NET 2.0 installations and you'll need to do the traditional Next, Next, Next, Finish dance. But once done, you can run Interstate 76 from the  Applications menu and it will work fine, from its own independent prefix.&lt;br /&gt;
&lt;h2&gt;A Note on Double Clicking&lt;/h2&gt;Double clicking a Windows application will always use the default ~/.wine prefix. So choosing another prefix requires using the terminal. Fortunately though, you only need to run the initial setup program (and wine tools) from the terminal because Wine creates entries in the Applications menu with the WINEPREFIX set. Basically, once your game is running fine you won't need to go to the terminal to run it, it'll just work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-1463456206029839047?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Jp20_8kEZPMxGbUO9ZGsE6L7wIU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Jp20_8kEZPMxGbUO9ZGsE6L7wIU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Jp20_8kEZPMxGbUO9ZGsE6L7wIU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Jp20_8kEZPMxGbUO9ZGsE6L7wIU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/lF6Xh0yh_Lc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/1463456206029839047/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/10/using-multiple-wine-prefixes.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/1463456206029839047?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/1463456206029839047?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/lF6Xh0yh_Lc/using-multiple-wine-prefixes.html" title="Using Multiple Wine Prefixes" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/10/using-multiple-wine-prefixes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08GSH08fip7ImA9Wx5XGUU.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-6979633207195084100</id><published>2010-09-20T14:36:00.000+01:00</published><updated>2010-09-20T14:37:09.376+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-20T14:37:09.376+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="drmfree" /><category scheme="http://www.blogger.com/atom/ns#" term="amnesia" /><category scheme="http://www.blogger.com/atom/ns#" term="game" /><title>Amnesia: The Dark Descent</title><content type="html">Just a quick blog post to plug what looks like an amazing game: Amnesia: The Dark Descent&lt;br /&gt;
&lt;br /&gt;
Take a look at the video!&lt;br /&gt;
&lt;br /&gt;
&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/JEHPwAvrc_U?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/JEHPwAvrc_U?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
I haven't bought Amnesia yet (mainly due to having not completed the awesome predecessor, Penumbra yet) but by the sound of it it's a great game, and available for Linux DRM-free! &lt;a href="http://www.amnesiagame.com/"&gt;Check it out!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-6979633207195084100?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IfTv49Ccgmq9yFmLV6L2vuq4Xr0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IfTv49Ccgmq9yFmLV6L2vuq4Xr0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IfTv49Ccgmq9yFmLV6L2vuq4Xr0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IfTv49Ccgmq9yFmLV6L2vuq4Xr0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/cXJu_wnxf0w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/6979633207195084100/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/09/amnesia-dark-descent.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/6979633207195084100?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/6979633207195084100?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/cXJu_wnxf0w/amnesia-dark-descent.html" title="Amnesia: The Dark Descent" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/09/amnesia-dark-descent.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEADR344eyp7ImA9Wx5XGUo.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-3625545523309289374</id><published>2010-09-20T09:51:00.000+01:00</published><updated>2010-09-20T09:52:56.033+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-20T09:52:56.033+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dext" /><category scheme="http://www.blogger.com/atom/ns#" term="internet" /><category scheme="http://www.blogger.com/atom/ns#" term="orange" /><category scheme="http://www.blogger.com/atom/ns#" term="3g" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Rooted your Orange Dext and the Browser isn't Working?</title><content type="html">An odd problem started the other day after I rooted my (Orange UK!) Dext, it wasn't immediate - I'm not sure what I did... anyway, the issue was that the default Android Browser wouldn't load any pages over 3G, neither would SkyFire, but Opera Mini would.&lt;br /&gt;
&lt;br /&gt;
After some prodding and Googling I figured out how to fix it, here's how:&lt;br /&gt;
&lt;br /&gt;
1. Navigate to Settings -&gt; Wireless &amp; networks -&gt; Mobile networks -&gt; Access point names&lt;br /&gt;
2. Select "orangeinternet"&lt;br /&gt;
3. Set the "Name" to "orangeinternet" (you must enter a name, and apparently there isn't one)&lt;br /&gt;
4. Select "Proxy" and clear the box (mine said "null")&lt;br /&gt;
5. Select "Port" and clear the box (mine again said "null")&lt;br /&gt;
6. Select "Server" and clear the box (again, "null")&lt;br /&gt;
7. Make sure the "User" is "user" (I didn't need to change this)&lt;br /&gt;
8. That's it, probably best to reboot the phone&lt;br /&gt;
&lt;br /&gt;
That fixed it for me, hope someone finds it useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-3625545523309289374?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ibKCDcxd6uM5HbcNkQH1ygDL6lg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ibKCDcxd6uM5HbcNkQH1ygDL6lg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ibKCDcxd6uM5HbcNkQH1ygDL6lg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ibKCDcxd6uM5HbcNkQH1ygDL6lg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/c9KJU4e7VRk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/3625545523309289374/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/09/rooted-your-orange-dext-and-browser.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/3625545523309289374?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/3625545523309289374?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/c9KJU4e7VRk/rooted-your-orange-dext-and-browser.html" title="Rooted your Orange Dext and the Browser isn't Working?" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/09/rooted-your-orange-dext-and-browser.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QHR3Yyeyp7ImA9Wx5XEU8.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-4358100740130777797</id><published>2010-09-10T15:22:00.000+01:00</published><updated>2010-09-10T15:35:36.893+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-10T15:35:36.893+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="drm" /><category scheme="http://www.blogger.com/atom/ns#" term="games" /><category scheme="http://www.blogger.com/atom/ns#" term="oilrush" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="unigine" /><title>OilRush to be DRM free on Linux!</title><content type="html">OilRush is an upcoming game based on the Unigine engine. It looks amazing, check out the trailer:&lt;br /&gt;
&lt;br /&gt;
&lt;object width="504" height="308"&gt;&lt;param name="movie" value="http://www.youtube.com/v/q4dPuQ4pw70?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/q4dPuQ4pw70?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="504" height="308"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
If you read my previous StarCraft 2 rant, you'll know that I hate DRM and refuse to buy games that are DRM encumbered. So after some prodding by me over on the &lt;a href="http://www.phoronix.com/forums/showthread.php?t=25904"&gt;Phoronix forums&lt;/a&gt; one of the OilRush developers &lt;a href="http://www.phoronix.com/forums/showpost.php?p=146669&amp;amp;postcount=42"&gt;announced&lt;/a&gt; the following:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
If there will be no major objections from the distributor, we plan to release at least Linux version without DRM. &lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
This is brilliant news. Good going Unigine Corp.!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-4358100740130777797?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CSfsZ68uFY4WDi0wuGxnPvCQwy4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CSfsZ68uFY4WDi0wuGxnPvCQwy4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CSfsZ68uFY4WDi0wuGxnPvCQwy4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CSfsZ68uFY4WDi0wuGxnPvCQwy4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/K_aBrrUK7-0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/4358100740130777797/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/09/oilrush-to-be-drm-free-on-linux.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/4358100740130777797?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/4358100740130777797?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/K_aBrrUK7-0/oilrush-to-be-drm-free-on-linux.html" title="OilRush to be DRM free on Linux!" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/09/oilrush-to-be-drm-free-on-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcGR3g9fip7ImA9Wx5VGUU.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-2458081840948983827</id><published>2010-09-05T10:03:00.001+01:00</published><updated>2010-10-13T15:27:06.666+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-13T15:27:06.666+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dext" /><category scheme="http://www.blogger.com/atom/ns#" term="motorola" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="root" /><category scheme="http://www.blogger.com/atom/ns#" term="mod" /><category scheme="http://www.blogger.com/atom/ns#" term="rom" /><category scheme="http://www.blogger.com/atom/ns#" term="adlxmod" /><title>Putting Android 2.1 (adlxmod) on a UK Orange Dext</title><content type="html">Motorola suck. They really REALLY suck and I'm not buying anything manufactured by them in future and I'd recommend others don't either. Last year, when Android phones were really beginning to hit the market, I spent quite a while choosing the right one for me. I really wanted a keyboard and the price had to be right, so at the time the only option was the Dext on Orange. It was running Android 1.5 but I *knew* that Android phones get upgraded, right? Wrong.&lt;br /&gt;
&lt;br /&gt;
Motorola have promised an update to the U.S. release of the Dext (called the Cliq) for some time, but the upgrade path in Europe, S. America and elsewhere was labelled "Evaluation in progress". This was the case for months and months. The upgrade website wasn't updated but a lead figure at Motorola had announced that all Dext phones would be upgraded to 2.1. This announcement led to many more people rushing out to buy a Dext. Unfortunately it was a lie.&lt;br /&gt;
&lt;br /&gt;
On August 23rd, after 6-8 months of waiting for an update. The update status website change from "Under evaulation" to "Europe will not be getting the update". Unsurprisingly, Dext owners are really angry, not just because they were lied to, not only because they were strung along for 8 months, but because the U.S. Cliq is getting the update but Motorola can't be arsed to push it out over here! The software exists, we just can't get it. So, you have a UK Dext and want Android 2.1 - then you need to take matters into your own hands...&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;Installing a custom ROM on a vanilla Dext involves 3 major steps: &lt;br /&gt;
&lt;br /&gt;
1. Rooting the phone (gaining super-user access)&lt;br /&gt;
2. Flashing a recovery image to the phone (enabling a custom recovery mode)&lt;br /&gt;
3. Flashing a ROM to the phone (installing the new operating system)&lt;br /&gt;
&lt;br /&gt;
This tutorial worked on an up-to-date UK Orange Dext with a 5025 radio. I don't guarantee it will work for you on that phone or any other, but it worked for me.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Obviously, this will void your warranty, I don't accept any responsibility for breakage and I have no clue how it all works, this is just what worked for me. If you have a problem post over at modmymobile.com. If it goes irreversibly wrong then it's no-one else's fault but your own for trying it in the first place. &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
That said, this method of rooting and installing ROM is fairly straightforward and not as risky as other methods. It worked for me.&lt;br /&gt;
&lt;br /&gt;
Before you start, first do the following:&lt;br /&gt;
&lt;br /&gt;
1. Boot into Windows&lt;br /&gt;
2. Download the &lt;a href="http://developer.android.com/sdk/index.html"&gt;Android SDK from here&lt;/a&gt;&lt;br /&gt;
3. Extract it to c:\android_sdk or something&lt;br /&gt;
4. Download and install the &lt;a href="http://handheld.softpedia.com/progDownload/Motorola-Handset-USB-Driver-for-Windows-32-bit-Download-38123.html"&gt;Motorola USB drivers from here&lt;/a&gt;&lt;br /&gt;
5. Reboot Windows&lt;br /&gt;
6. Plug your phone in to Windows, choose "USB drive" when prompted. Copy all your files and data (backup) to your computer, and delete any large media files/documents from the phone. (Makes the nandroid backup quicker). Then unmount the phone and plug it back in again.&lt;br /&gt;
6. When your Dext says "USB Drive" or "Charge only" then choose "Charge only"&lt;br /&gt;
7. &lt;a href="http://modmymobile.com/forums/downloads.php?do=file&amp;amp;id=28159"&gt;Download this&lt;/a&gt;&lt;br /&gt;
8. Extract it to C:\Moto_MSM_Root&lt;br /&gt;
&lt;br /&gt;
Now head over to the &lt;a href="http://modmymobile.com/forums/399-motorola-cliq-dext/555819-root-another-version-use-one-if-you-have-wcdma850-1900-2100-3g-bands.html"&gt;rooting tutorial on modmymobile.com&lt;/a&gt;&lt;br /&gt;
&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;b&gt; &lt;/b&gt;Follow the steps after "Process"&lt;br /&gt;
&lt;br /&gt;
Things to look out for:&lt;br /&gt;
1. Read the whole tutorial before doing anything&lt;br /&gt;
2. Make sure that you wait until "Forked xxxx childs" appears before pressing a key at that stage of the tutorial&lt;br /&gt;
3. Make sure after that step you definitely have a '#'&lt;br /&gt;
&lt;br /&gt;
If you complete the tutorial successfully, then your phone is rooted; which means you have super-user access to the phone.&lt;br /&gt;
&lt;br /&gt;
The next step is to flash a custom recovery image. The recovery image is booted when you hold down the camera button while you power on the phone. You need a custom recovery image to flash the Android 2.1 rom.&lt;br /&gt;
&lt;br /&gt;
I used &lt;a href="http://modmymobile.com/forums/548-motorola-cliq-dext-roms/532305-recovery-j_r0dd-mb200-v1-7-4-1-8-24-10-a.html"&gt;this one&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Follow the steps there. Make sure you remove the /system/recovery.img file. To do this you may need to remount the system folder so it's not read-only. Follow the &lt;a href="http://modmymobile.com/forums/4005702-post19.html"&gt;instructions here&lt;/a&gt; to do that, then remove the recovery.img file. After I'd removed it I re-flashed the recovery just in case, but that's probably unnecessary.&lt;br /&gt;
&lt;br /&gt;
Now, disconnect the phone. Turn it off. Then hold the camera button and turn it on. Don't release the camera button until you reach a black screen with green text. When you do, press the volume down button and wait a few seconds. You should get a nice menu with several options, this is recovery mode.  One of the options will be to run a Nandroid backup. Do this! It may take several minutes to run, if it starts taking longer (mine did) then something on your phone is confusing the backup.&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
If this happens, remove the battery and turn the phone on again with the camera button held. Then, when you get to the menu, choose "Wipe" and then choose the first option, then second and then third, one after the other. Before doing this make sure you've backed up everything you need to to your PC. Then, run the backup again. It should work now that you've reset the phone.&lt;br /&gt;
&lt;br /&gt;
Once the backup completes (whether you had to Wipe or not) turn on the phone, and plug it into Windows. If you had to Wipe the phone then you'll see motoblur setup. Ignore it, don't do anything on the phone except choose "USB Drive" from the notification area. Copy the newly created "nandroid" folder from the phone to your PC.&lt;br /&gt;
&lt;br /&gt;
Download the adlx ROM zip files from &lt;a href="http://modmymobile.com/forums/548-motorola-cliq-dext-roms/554686-rom-adlxmod-2-0-2-android-2-1-motoblur.html"&gt;here&lt;/a&gt; you'll need both the 2.0-signed zip and the 2.0.2 patch zip. Download both to the top directory on your phone. Check your phone battery, make sure it's pretty full. Now safely remove, disconnect and reboot your phone into the recovery mode again.&lt;br /&gt;
&lt;br /&gt;
Now, Wipe your phone by choosing the top 3 options under Wipe one at a time. Then go back to the menu, choose "Flash zip from SD". Choose the 2.0-signed zip file and flash that. Reboot the phone and hold down the camera button immediately (don't let it start up). Then once in recovery mode again, choose "Flash zip from SD" once more and this time choose the 2.0.2 patch zip. Once that is complete you can reboot your phone into Android 2.1.&lt;br /&gt;
&lt;br /&gt;
Note: The first time you boot your phone after Wiping and loading the ROM will take some time. If you see the "Blur" speech bubble flashing repeatedly just be patient. Don't turn the phone off at this stage otherwise it can break stuff (that's what I did and I had to re-wipe to fix it). When the phone starts up you'll get the Motoblur account setup screen. Follow through the steps and then you should be all done!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-2458081840948983827?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9FXx9Q_iejsLlzSGGDCOiwUozy8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9FXx9Q_iejsLlzSGGDCOiwUozy8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9FXx9Q_iejsLlzSGGDCOiwUozy8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9FXx9Q_iejsLlzSGGDCOiwUozy8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/6iIU3tUZqHI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/2458081840948983827/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/09/putting-android-21-on-uk-orange-dext.html#comment-form" title="14 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/2458081840948983827?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/2458081840948983827?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/6iIU3tUZqHI/putting-android-21-on-uk-orange-dext.html" title="Putting Android 2.1 (adlxmod) on a UK Orange Dext" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>14</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/09/putting-android-21-on-uk-orange-dext.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MBSXs7fCp7ImA9Wx5SFkQ.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-8176117334925603087</id><published>2010-07-29T12:30:00.000+01:00</published><updated>2010-08-13T10:24:18.504+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-13T10:24:18.504+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="drm" /><category scheme="http://www.blogger.com/atom/ns#" term="starcraft" /><category scheme="http://www.blogger.com/atom/ns#" term="blizzard" /><title>Starcraft 2's DRM fail</title><content type="html">I've been out of the loop of mainstream PC&amp;nbsp;games for a while, tending to buy Wii games or DRM-free indie PC games such as &lt;a href="http://www.hemispheregames.com/osmos/"&gt;Osmos&lt;/a&gt; or the Humble Indie Bundle. But every now and then a game pops up on the news that I really really want. Last time this game was Spore, and then I&amp;nbsp;found out about the DRM and I&amp;nbsp;didn't buy it. Now this time it's Starcraft 2.&lt;br /&gt;&lt;br /&gt;I remember playing the first Starcraft and loved it. I&amp;nbsp;loved the look of Starcraft 2, but again another big game company fucks up by crippling it with DRM&amp;nbsp;in the fruitless aim to reduce piracy. &lt;br /&gt;&lt;br /&gt;Let me spell it out for you:&amp;nbsp;DRM DOES NOTHING TO STOP &amp;quot;PIRACY&amp;quot;&amp;nbsp;AND EVERYTHING TO PISS OFF YOUR CUSTOMERS!&lt;br /&gt;&lt;br /&gt;I&amp;nbsp;hear Starcraft 2 has already been cracked, so what was that, 1 day after release? Good going Blizzard, you've pissed off your customers for nothing. So, I&amp;nbsp;will NOT be buying Starcraft 2 and judging from the comments on &lt;a href="http://www.amazon.com/Starcraft-II-Wings-Liberty-Pc/product-reviews/B000ZKA0J6/ref=cm_cr_dp_hist_1?ie=UTF8&amp;amp;showViewpoints=0&amp;amp;filterBy=addOneStar"&gt;Amazon&lt;/a&gt;, I'm not the only one.&lt;br /&gt;&lt;br /&gt;Seriously Blizzard. Get a clue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-8176117334925603087?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YIkATbZ_wC3_BXzkeDPqbg6JWus/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YIkATbZ_wC3_BXzkeDPqbg6JWus/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YIkATbZ_wC3_BXzkeDPqbg6JWus/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YIkATbZ_wC3_BXzkeDPqbg6JWus/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/JJ3CgeHXJSA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/8176117334925603087/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/07/starcraft-2-drm-fail.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/8176117334925603087?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/8176117334925603087?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/JJ3CgeHXJSA/starcraft-2-drm-fail.html" title="Starcraft 2&amp;#39;s DRM fail" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/07/starcraft-2-drm-fail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQHQXs_fCp7ImA9Wx5VEkQ.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-105170278453545588</id><published>2010-06-18T14:36:00.000+01:00</published><updated>2010-10-05T16:58:50.544+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-05T16:58:50.544+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="games" /><category scheme="http://www.blogger.com/atom/ns#" term="porting" /><category scheme="http://www.blogger.com/atom/ns#" term="sdl" /><category scheme="http://www.blogger.com/atom/ns#" term="openal" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="opengl" /><category scheme="http://www.blogger.com/atom/ns#" term="libraries" /><title>Hurdles when Porting Games to Linux</title><content type="html">&amp;nbsp;A recent Shot of Jaq episode described the many problems that indie game developers face when porting their games to Linux, let's break down the problems into categories:&lt;br /&gt;
&lt;br /&gt;
1. Which libraries do I use?&lt;br /&gt;
2. How do I package the game?&lt;br /&gt;
&lt;br /&gt;
So here we go.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: larger;"&gt;Which libraries do I&amp;nbsp;use?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This is the one that people make the most fuss about. When developing a game on Windows, you know full well that if you want to create a 3D enabled window, you have Win32 +&amp;nbsp;Direct3D +&amp;nbsp;DirectSound&amp;nbsp;(or whatever it is now) right there. And it works. It works because the whole Windows game world develops using those APIs and they are well tested. When coming over to develop for Linux, many devs don't know where to look for the equivalents, and when they ask around they get different answers from everyone, because people recommend what they like, not what is the most sensible option. Let me answer the question right now:&lt;br /&gt;
&lt;br /&gt;
1. For graphics, use OpenGL 2.1 (or 1.5 if you don't need GLSL)&lt;br /&gt;
2. For sound, use OpenAL&lt;br /&gt;
3. For windowing and input, use SDL&lt;br /&gt;
&lt;br /&gt;
Now, before I&amp;nbsp;get ransacked by people with opinions, I'll explain why :)&lt;br /&gt;
&lt;br /&gt;
Graphics&lt;br /&gt;
&lt;br /&gt;
This is the easiest one to decide. OpenGL is the only choice for hardware accelerated graphics on Linux. If you can do without shaders and target 1.5 you can get the lower end hardware, if you need shaders then go for 2.1 rather than 3.x or 4.x because Mesa doesn't support them (yet) and the open source ATI and Intel drivers both support it. You can of course check the version at runtime if you want 3.x or 4.x features, but don't rely on it.&lt;br /&gt;
&lt;br /&gt;
Sound&lt;br /&gt;
&lt;br /&gt;
This is the one that causes the most noise (no pun intended), ALSA?&amp;nbsp;Pulse? OSS? etc. No you want OpenAL. OpenAL gives you a consistent 3D sound API&amp;nbsp;that wraps the underlying complexity of various sound systems.&amp;nbsp; It's not perfect, but it's definitely your best choice. Hemisphere games came to the same conclusion when porting Osmos. Just go with it and test as much as possible. openal-soft has a number of backends too, so if you don't have Pulseaudio, or whatever, it will still work. The openal-soft developers are really responsive. I&amp;nbsp;had a load of help trying to diagnose a problem with openal +&amp;nbsp;pulse (which was a bug fixed some time ago now).&lt;br /&gt;
&lt;br /&gt;
Windowing and Input&lt;br /&gt;
&lt;br /&gt;
I&amp;nbsp;can tell this will stir up a hornets nest of people saying that straight X is better, and indeed straight X is what the Osmos developers went with. But SDL&amp;nbsp;has been used for a load of games (World of Goo, Penumbra, Quake 4 etc.) it's pretty damn good. Again, it wraps the complexity of the underlying X and handles any quirks for you. Also the SDL&amp;nbsp;developers are responsive to both feature requests and bug reports, and have a really busy mailing list. If you have any trouble, you have somewhere to go and get it fixed. If you don't think&amp;nbsp;SDL&amp;nbsp;is flexible enough, then go with X, but let me assure you - you'll be writing a lot more code, and that code is your problem. &lt;br /&gt;
&lt;br /&gt;
There, done. By offloading the work to these libraries you get a number of advantages:&lt;br /&gt;
&lt;br /&gt;
1. Bugs you find and report (and perhaps even fix) help everyone&lt;br /&gt;
2. They deal with the hard work for you, reducing the amount you need to code&lt;br /&gt;
3. They are widely available&lt;br /&gt;
4. All three of them have nice, consistent APIs&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: larger;"&gt;Packaging the Game&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Packaging is a pain in the arse if you want to target as much of the Linux-based ecosystem as possible. Generally though, packaging in .deb, .rpm and .tar.gz in both 64 bit and 32 bit versions seems the way to go. Games in The Humble Indie Bundle were packaged in various different ways, but World of Goo had a .deb package that worked the best compared to the fiddling I had to do to get the others to run.&lt;br /&gt;
&lt;br /&gt;
It's probably best to go with the distributions package manager to handle dependencies, especially for the big 3 libraries (GL, AL, SDL)&amp;nbsp;and also FreeType and libvorbis.&amp;nbsp; That's the approach Hemisphere games took and they seem pretty happy with the result. &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: larger;"&gt;Other Libraries&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Obviously it's not just graphics, sound, input and windowing you need to worry about, here are some suggestions for other libraries:&lt;br /&gt;
&lt;br /&gt;
1. Fonts - Freetype2&lt;br /&gt;
2. Image loading - Take a look at SOIL&lt;br /&gt;
3. OpenGL extension handling - GLee is popular, but not included in the Ubuntu repos, GLew does the same job and is in the repos.&lt;br /&gt;
4. Physics - Box2D for 2D, ODE&amp;nbsp;for 3D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-105170278453545588?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4TVRVBpHvOqzVA9i3_Tfyvnbsyw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4TVRVBpHvOqzVA9i3_Tfyvnbsyw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4TVRVBpHvOqzVA9i3_Tfyvnbsyw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4TVRVBpHvOqzVA9i3_Tfyvnbsyw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/f5PRGKQV1N0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/105170278453545588/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/06/hurdles-when-porting-games-to-linux.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/105170278453545588?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/105170278453545588?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/f5PRGKQV1N0/hurdles-when-porting-games-to-linux.html" title="Hurdles when Porting Games to Linux" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/06/hurdles-when-porting-games-to-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkENQ347fCp7ImA9Wx5XEU8.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-7472935569634163403</id><published>2010-06-11T11:49:00.000+01:00</published><updated>2010-09-10T15:24:52.004+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-10T15:24:52.004+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="admin" /><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="filefield" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Clearing FileFields in Django's admin</title><content type="html">This post is as much a reminder for me as it will be helpful to others. Yesterday I&amp;nbsp;added a couple of FileFields to a Django model, the point of them is to allow overriding of some site images. So the idea is that you can upload images or swf files to these fields, they'll replace the ones on the site, until you are bored of them then you can delete them and the original images will be restored. &lt;br /&gt;
&lt;br /&gt;
After adding the FileFields to the model, they nicely appeared in the Django admin site. I uploaded an image, the override worked perfectly, now to restore the original image...&lt;br /&gt;
&lt;br /&gt;
And that's where you hit a problem. There is no way in the Django admin to clear a FileField, you can replace it, but you can't clear it to NULL. Happily there is a workaround[1]. You first need to create a custom ModelForm for your model which includes an extra checkbox like so:&lt;br /&gt;
&lt;br /&gt;
class MyCustomForm(ModelForm):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; clear_the_image = forms.BooleanField("Clear the image", required=False)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; class Meta:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model = MyModel&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def save(self, commit=True):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model_instance = super(MyCustomForm, self).save(commit=False)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if self.cleaned_data.get('clear_the_image'):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model_instance.the_file_field = None&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if commit:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; model_instance.save()&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return model_instance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then in your MyModelAdmin class:&lt;br /&gt;
&lt;br /&gt;
class MyModelAdmin(ModelAdmin):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; form = MyCustomForm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That's it. When you save the form, it will see if you asked to clear the image, if so it will set it to None and then save. Job done.&lt;br /&gt;
&lt;br /&gt;
[1] Adapted from this:&amp;nbsp;http://www.developerit.com/2010/04/17/django-admin-add-a-remove-file-field-for-image-or-filefields&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-7472935569634163403?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/saUUYMVfHR6yQpB5EFrKHR2t3c0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/saUUYMVfHR6yQpB5EFrKHR2t3c0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/saUUYMVfHR6yQpB5EFrKHR2t3c0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/saUUYMVfHR6yQpB5EFrKHR2t3c0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/LzDxi5Nob3U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/7472935569634163403/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/06/clearing-filefields-in-django-admin.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/7472935569634163403?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/7472935569634163403?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/LzDxi5Nob3U/clearing-filefields-in-django-admin.html" title="Clearing FileFields in Django&amp;#39;s admin" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/06/clearing-filefields-in-django-admin.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAHR34_fyp7ImA9Wx5XEU8.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-1633677033440551678</id><published>2010-05-14T10:56:00.000+01:00</published><updated>2010-09-10T15:25:36.047+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-10T15:25:36.047+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ia32" /><category scheme="http://www.blogger.com/atom/ns#" term="humble" /><category scheme="http://www.blogger.com/atom/ns#" term="bundle" /><category scheme="http://www.blogger.com/atom/ns#" term="amd64" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="lugaru" /><category scheme="http://www.blogger.com/atom/ns#" term="indie" /><title>The Humble Indie Bundle on Ubuntu AMD64</title><content type="html">Just a quick post, because basically I couldn't find this information elsewhere and I'm hoping someone finds it useful. Like thousands of other people I bought the Humble Indie Bundle while it was on sale and it is amazing. However, for ages I had no luck installing Lugaru. I kept getting messages like this:&lt;br /&gt;
&lt;br /&gt;
kazade@argon ~ $ chmod +x lugaru-full-linux-x86-1.0c.bin&lt;br /&gt;
chmod: cannot access `lugaru-full-linux-x86-1.0c.bin': No such file or directory&lt;br /&gt;
kazade@argon ~ $ chmod +x /home/kazade/Downloads/lugaru-full-linux-x86-1.0c.bin&lt;br /&gt;
kazade@argon ~ $ ./lugaru-full-linux-x86-1.0c.bin&lt;br /&gt;
bash: ./lugaru-full-linux-x86-1.0c.bin: No such file or directory&lt;br /&gt;
&lt;br /&gt;
If you have this problem, the solution is to install the ia32-libs package. Then the installer will run, simple eh?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-1633677033440551678?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/olXwlcz82wjnBmGlgNhxWM1u9as/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/olXwlcz82wjnBmGlgNhxWM1u9as/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/olXwlcz82wjnBmGlgNhxWM1u9as/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/olXwlcz82wjnBmGlgNhxWM1u9as/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/gVzAJmOvKZg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/1633677033440551678/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/05/humble-indie-bundle-on-ubuntu-amd64.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/1633677033440551678?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/1633677033440551678?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/gVzAJmOvKZg/humble-indie-bundle-on-ubuntu-amd64.html" title="The Humble Indie Bundle on Ubuntu AMD64" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/05/humble-indie-bundle-on-ubuntu-amd64.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQEQnYycSp7ImA9Wx9XGEk.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-990715905816104560</id><published>2010-05-03T14:01:00.001+01:00</published><updated>2011-01-12T14:58:23.899Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-12T14:58:23.899Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="close" /><category scheme="http://www.blogger.com/atom/ns#" term="window" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>The Ambiguity of Hiding Windows</title><content type="html">So, Ubuntu 10.04 LTS&amp;nbsp;has been released and it is pretty damn awesome. Again I don't think it was entirely ready, I&amp;nbsp;think more time could have been spent fixing video driver bugs because there are a lot of people complaining about hitting a "black screen" (see my brainstorm idea:&amp;nbsp;http://brainstorm.ubuntu.com/idea/24727/&amp;nbsp;).&lt;br /&gt;
&lt;br /&gt;
Anyway, one of the features of Lucid is the new indicator applet, designed to replace the notification area with a consistent interface. I love the indicator applet, except for one thing, this:&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" src="http://imgur.com/HgF80.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
The indicator applet replaces the menu functionality for the icon brilliantly but it goes a little too far in replicating the functionality of the notification area. This is a long standing bug bear of mine. Many apps on Windows, and then consequently other desktops, allow minimizing an application to an icon. Why?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To clear the window off of the desktop?&amp;nbsp;That's what minimize is for. "But.. but.. then it clutters my taskbar!" I hear you cry, and that my friends is the point, the minimize to icon functionality is&amp;nbsp; a workaround, a plaster over the fundamentally broken taskbar. The main problem with the current window switcher is the size of the elements. Even with a widescreen monitor you can fill it up pretty quick because window titles take up a lot of space. Application grouping helps to some extent but each element still takes up more room than the icon would do alone.&lt;br /&gt;
&lt;br /&gt;
But that's not the only reason for the existence of "minimize to tray". When you are looking for a window in a list of windows, the less there are the easier it is. That's why you don't want Rhythmbox, or your IM&amp;nbsp;contact list cluttering up the bottom. So the flaws with the window switcher are:&lt;br /&gt;
&lt;br /&gt;
1. Each element takes up too much space&lt;br /&gt;
2. There are too many elements&lt;br /&gt;
&lt;br /&gt;
You can also add:&lt;br /&gt;
&lt;br /&gt;
3. You can't read the entire titles on the windows&lt;br /&gt;
&lt;br /&gt;
We can easily solve these problems. Windows 7 had the right idea by replacing the window items with icons. We have a decent alternative on Ubuntu too, it's called DockbarX.&lt;br /&gt;
&lt;br /&gt;
Don't believe me, try this. Add the DockbarX PPA and replace the window switcher applet with DockbarX. Now, make your Rhythmbox visible via the indicator applet and minimize it. Now go ahead and work with your computer. What do you notice? It takes up hardly any room AT&amp;nbsp;ALL, in fact you won't even notice it's there because every time you go down to that Dockbar you'll be going there for an application window and finding the application is dead easy when its icon is right there and there is only one of them. Hover over the application icon and bingo, up pops the list of windows for that application with FULL&amp;nbsp;TITLES.&lt;br /&gt;
&lt;br /&gt;
Rhythmbox won't get in the way because you won't be drawn to it you are looking for a bright orange Firefox window for example. And you can open a shedload of windows and still have plenty of space in the taskbar. If you wanna skip a track, or see what's playing then you can do, using the indicator applet.&lt;br /&gt;
&lt;br /&gt;
So, if there is one thing I&amp;nbsp;would do if I was in charge of 10.10 it would be this: replace the window-switcher applet with DockbarX and remove any minimize to tray functionality from the indicator applets. It removes the ambiguity of "where did I minimize that window to" and it makes life much MUCH&amp;nbsp;easier and consistent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-990715905816104560?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9Yg6K_jlyc_r3T0fqXGj5TOYGhE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9Yg6K_jlyc_r3T0fqXGj5TOYGhE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9Yg6K_jlyc_r3T0fqXGj5TOYGhE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9Yg6K_jlyc_r3T0fqXGj5TOYGhE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/j3FONTVeVI0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/990715905816104560/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/05/ambiguity-of-hiding-windows.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/990715905816104560?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/990715905816104560?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/j3FONTVeVI0/ambiguity-of-hiding-windows.html" title="The Ambiguity of Hiding Windows" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/05/ambiguity-of-hiding-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMCQH8ycCp7ImA9Wx9XGEk.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-8216606458835579542</id><published>2010-03-08T16:54:00.002Z</published><updated>2011-01-12T15:01:01.198Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-12T15:01:01.198Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="window" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="buttons" /><title>Where I'd put the buttons</title><content type="html">Recently during the Ubuntu 10.04 (Lucid Lynx) testing cycle, Canonical introduced new branding and themes. The themes are really nice, still a little rough around the edges, but come launch date they will be slick. However, sneaked into this re-branding was a change that was initially thought to be a mistake.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The window controls moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The window controls (Minimize/Maxmize/Close) moved from the right hand side of the window, to the left hand side of the window. Not only that, but minimize and maximize swapped places; just to confuse everyone that little bit more.&lt;br /&gt;
Now, the problems with this have been discussed many times over the last week so I'm going to be a bit more constructive on the matter. I'm going to explain what they &lt;b&gt;should&lt;/b&gt; have done in &lt;i&gt;my opinion &lt;/i&gt;&lt;span style="font-style: normal;"&gt;(!).&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-style: normal;"&gt;Now, let's get a few things straight. Firstly, if a button is at the corner of the window it is easier to hit. Secondly, if a button is destructive, it should not be next to a common action (in case of a miss-hit). Thirdly, I'm going to ignore right clicking, and double clicking on the title bar, these things are visually non-discoverable you need to find them by accident, and just cause &lt;/span&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;you&lt;/b&gt;&lt;/span&gt;&lt;span style="font-style: normal;"&gt; know about them doesn't mean everyone does. Got it? Good.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-style: normal;"&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style="font-style: normal;"&gt;&lt;br /&gt;
The Close Button&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;This is &lt;/span&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;the&lt;/b&gt;&lt;/span&gt;&lt;span style="font-style: normal;"&gt; one. This is the real cause of the complaints from users. There are two things special about this button.&lt;/span&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;It's  destructive. The only really destructive of the three.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;It's  the most used. Of all the buttons it's the only one that &lt;/span&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;must  &lt;/b&gt;&lt;/span&gt;&lt;span style="font-style: normal;"&gt;be there. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;(Note, obviously, most used is dependent on user habits which is why we need usability testing - which I haven't done. But according to my logic it must be used at least once, which is more than the other two.)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;Why is it the only one that must be there? Well, because you can use the taskbar to minimize or switch applications or you can resize the window to fullscreen. You cannot (in a easily discoverable way) close &lt;/span&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;all&lt;/b&gt;&lt;/span&gt;&lt;span style="font-style: normal;"&gt; windows without that button being there (before anyone says it; not all windows have menus).&lt;/span&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;So, because it's destructive, it should be well away from other common actions on the window. Let's take a look at a window shall we:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;a href="http://pics.livejournal.com/kazade/pic/00004sz9/"&gt;&lt;img alt="" border="0" height="73" src="http://pics.livejournal.com/kazade/pic/00004sz9/s320x240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;So, where do we put the close button? Well, the left hand side has a bunch of common actions, so we should probably steer clear of that side (take note Canonical!). That leaves anywhere right of the Help menu... as an applications can have many menus and can be resized so they are smaller, it would make sense to put it as far away as possible – so yeah on the right.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;Now, onto usage, because the close button is the only action that must be performed, it makes sense to have it in a corner, that way you can hit it more easily. So, let's put that one there:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;a href="http://pics.livejournal.com/kazade/pic/00005bka/"&gt;&lt;img alt="" border="0" height="70" src="http://pics.livejournal.com/kazade/pic/00005bka/s320x240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;So cool, that's that one done, now let's move onto the next one...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="font-style: normal;"&gt;The Maximize Button&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;So, arguably this is the next most important button, the reason? Well, you minimize to get to windows behind the one you are using, which you can do with the taskbar. Maxmize can only be done by drag-resizing (a pain) or right clicking (non-discoverable). So, after close it's pretty important. So, where do we put it? Well, a corner would make sense, but what if we put it next to the close button anyway? Well, there you've broken one of my rules above, you've put a common action next to a destructive action. So, let's just put maximize on the other corner:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;a href="http://pics.livejournal.com/kazade/pic/00006wqw/"&gt;&lt;img alt="" border="0" height="72" src="http://pics.livejournal.com/kazade/pic/00006wqw/s320x240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;Now the final button (or is it?)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="font-style: normal;"&gt;The Minimize Button&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;So, this one is easy. It's a non-essential, non-destructive button. So, following logic it can go anywhere that's not next to a destructive item. Well, that just leaves next to the maximize button, but it doesn't need a corner so let's put it the other side:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;a href="http://pics.livejournal.com/kazade/pic/000076b4/"&gt;&lt;img alt="" border="0" height="74" src="http://pics.livejournal.com/kazade/pic/000076b4/s320x240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;There, for balance you should probably choose a theme with a centered title. But still, this layout makes more sense. You reduce the risk of closing something accidentally, and the most used items are in the corners. As a side effect you also keep two related options (minimize and maximize) close together.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="font-style: normal;"&gt;What About the Menu Button?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;I'm a bit ambivalent about this one, I'm not really sure where it belongs. The other three buttons change the size of the window (or make it go away) and don't pop-up a menu. It doesn't really fit with the others, (also the functionality is available on right-click, albeit undiscoverable). If I was to choose a position, I'd put it next to minimize, but I think it's arguable whether it needs to be included at all.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="font-style: normal;"&gt;Conclusion&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm;"&gt;&lt;span style="font-style: normal;"&gt;I'm no usability expert, but if I was to redesign the location of the buttons, (which, I'm not sure they need redesigning and breaking that muscle memory) that's where I'd put them. Also it has the pleasant side-effect that the close button doesn't move from the “normal” arrangement. I'd be happy if Canonical changed to this way, at least there is some obvious logic behind it... obvious logic makes me happy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-8216606458835579542?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cPREkijjar2cCqY3HOfv42hnPgA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cPREkijjar2cCqY3HOfv42hnPgA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cPREkijjar2cCqY3HOfv42hnPgA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cPREkijjar2cCqY3HOfv42hnPgA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/hw9VHBXO34I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/8216606458835579542/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/03/where-i-put-buttons.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/8216606458835579542?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/8216606458835579542?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/hw9VHBXO34I/where-i-put-buttons.html" title="Where I&amp;#39;d put the buttons" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/03/where-i-put-buttons.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MBSXs6fSp7ImA9Wx5SFkQ.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-3673053901593516166</id><published>2010-02-19T09:44:00.000Z</published><updated>2010-08-13T10:24:18.515+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-13T10:24:18.515+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="openal" /><category scheme="http://www.blogger.com/atom/ns#" term="pulseaudio" /><category scheme="http://www.blogger.com/atom/ns#" term="ogg" /><category scheme="http://www.blogger.com/atom/ns#" term="openalsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>OpenALSoft/Pulseaudio: it's not me, it's you.</title><content type="html">I learnt a valuable lesson this week. If you have rewritten your code 3 times, and your tests all pass and you understand every part of it and yet it still doesn't work ... it's probably something not to do with you.&lt;br /&gt;&lt;br /&gt;Last weekend I decided it was time my game gained some sound. I'd just finished the game menu screen and figured that some music would make it seem a little more complete. In an attempt to follow the KISS principle I decided to keep it simple, I'd write a class that just plays an OGG file in 2D. No multiple sources, no bells and whistles, nothing fancy, just load an OGG and play it. A quick Google search turned up &lt;a href="http://www.devmaster.net/articles/openal-tutorials/lesson8.php"&gt;this gem&lt;/a&gt; of a tutorial, so I figured it was a 10 minute job. When the time came to do more, I'd look for a decent high-level library, or just steadily build on my simple base code but for now, I figured, following this tutorial would teach me a little OpenAL then I could move on.&lt;br /&gt;&lt;br /&gt;And for a little while I was right. I wrote my class, loaded an OGG file and played it with OpenAL by loading it into a single buffer and binding the buffer to the source before calling alSourcePlay(). It worked!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;... &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For about 2 seconds. Then it crackled and went silent.&lt;br /&gt;&lt;br /&gt;I assumed that the problem was the track I&amp;nbsp;was playing was too long to be bound in a single buffer, and instead I&amp;nbsp;figured I&amp;nbsp;should break it into smaller buffers and feed it into the source to play. Possibly a bad assumption, I guess I&amp;nbsp;should've tried playing a smaller sound to see if that was actually the case - but I&amp;nbsp;was having fun, and queueing the buffers looked simple enough. &lt;br /&gt;&lt;br /&gt;So I got to work, I decoded the OGG stream into a vector of vector&amp;lt;char&amp;gt;'s the idea being that as room became available in the queue I could grab the next chunk of data and queue it up ready for playing. Again, it only sort of worked. The track would buzz for 10 seconds, then play a second or 2, then go back to buzzing, then play some more. Sometimes it would play a whole 30-40 seconds perfectly, then the buzzing would start again. I fiddled with buffer sizes, buffer counts, filled my code with logging statements (the buffer queuing just seemed to stall while the buzzing took place). I tried to simplify it, removing lines of code, reorganizing until the code was slim and streamlined, I&amp;nbsp;switched from vectors, to filling out static char*&amp;nbsp;buffers. It made no difference.&lt;br /&gt;&lt;br /&gt;I downloaded the source code of various apps, SuperTuxKart uses OpenAL and apparently the followed the same tutorial as me! In fact all the examples I could find had very similar code to the same tutorial, and my code looked pretty much the same.&lt;br /&gt;&lt;br /&gt;This is the point I&amp;nbsp;should have realized something else was at work here, in fact I did try upgrading ALSA&amp;nbsp;but that changed nothing, so what did I do? I&amp;nbsp;came up with a new design, one that had many benefits and might, just might have the side effect of solving the problem.&lt;br /&gt;&lt;br /&gt;The problem with the previous attempts was I&amp;nbsp;was loading and decoding the entire OGG file in one go. A decompressed, high quality OGG takes up a lot of memory, it's REALLY&amp;nbsp;wasteful to decode the whole thing and keep it in memory. The other thing I had to be careful of was that multiple sources could play the same stream without an issue. I decided instead to load and store the compressed file data. Then create an OggDecoder class which each source gets an instance of that decompresses the data from memory on the fly. The benefits of this approach are huge, you don't hit the disk while playing, you keep memory usage down, and multiple sources can play from the same compressed data, and the code is pretty small too. So I&amp;nbsp;finished, stood back and admired my work and pressed &amp;quot;compile and run&amp;quot;. It worked! I was relieved. But just in case, I ran it a second time (it had *occasionally*&amp;nbsp;worked before, it just wasn't consistent). You can guess what happened, the buzzing was back. Repeated runs left me with the same problem.&lt;br /&gt;&lt;br /&gt;I was about to give up, about half way through this process I&amp;nbsp;discovered cAudio which was basically where unintentional feature creep was pushing my code anyway (while trying to load an play a sound, I'd come up with a whole multiple song streaming solution with pluggable decoders!), so I&amp;nbsp;figured I'd dump my code into the &amp;quot;deprecated&amp;quot;&amp;nbsp;folder that I keep, and just use cAudio. Just as I was about to give up I found a forum post where someone had similar problems and they solved it by upgrading the OpenALSoft libraries. I gave it a try and lo and behold, it works!&lt;br /&gt;&lt;br /&gt;I don't know why it works and didn't before, perhaps an OpenALSoft conflict with PA? Perhaps a bug in OpenALSoft? I dunno, and I&amp;nbsp;don't care, if the problem occurs on another PC at least I&amp;nbsp;know how to fix it. &lt;br /&gt;&lt;br /&gt;The only regret is that I&amp;nbsp;didn't realize it wasn't me earlier. I'd literally rewritten the code several times in different ways while comparing to code in other projects. Alarm bells should have rung earlier. Oh well.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-3673053901593516166?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0VrWcAWUl_8ZShpDtI7L-LYMaKw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0VrWcAWUl_8ZShpDtI7L-LYMaKw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0VrWcAWUl_8ZShpDtI7L-LYMaKw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0VrWcAWUl_8ZShpDtI7L-LYMaKw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/u0bC8W65ZDI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/3673053901593516166/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2010/02/openalsoftpulseaudio-it-not-me-it-you.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/3673053901593516166?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/3673053901593516166?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/u0bC8W65ZDI/openalsoftpulseaudio-it-not-me-it-you.html" title="OpenALSoft/Pulseaudio: it&amp;#39;s not me, it&amp;#39;s you." /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2010/02/openalsoftpulseaudio-it-not-me-it-you.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4HRHo_cCp7ImA9Wx9UGEk.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-8428586950398111491</id><published>2009-11-17T09:24:00.001Z</published><updated>2011-02-16T09:35:35.448Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-16T09:35:35.448Z</app:edited><title>Further Scene Editor Progress</title><content type="html">So as I've mentioned a few times previously, I'm working on a scene editor. The goal of which is to make it easy to produce content for the many game ideas I have :)&lt;br /&gt;
&lt;br /&gt;
So far progress is slow but steady, I'm being a bit of a perfectionist so large chunks of the code have been written at least twice, sometimes three times and there are still things I'm not happy with. &lt;br /&gt;
&lt;br /&gt;
I'm currently working on importing Wavefront *.obj models. I know I've got a partial obj loader somewhere, I just need to find it, and integrate it. These are the goals for the first release:&lt;br /&gt;
&lt;br /&gt;
1. Load and save irrlicht scene files&lt;br /&gt;
&lt;br /&gt;
2. Create, manipulate, delete cubes, spheres, meshes, lights and terrains&lt;br /&gt;
&lt;br /&gt;
3. Create, edit, delete and apply materials&lt;br /&gt;
&lt;br /&gt;
4. Cut, copy and paste meshes&lt;br /&gt;
&lt;br /&gt;
5. Manipulate the scene tree (make parent-child relationships etc.)&lt;br /&gt;
&lt;br /&gt;
At that point the editor can be used to create landscapes. The following release will add:&lt;br /&gt;
&lt;br /&gt;
6. Custom entity positioning&lt;br /&gt;
&lt;br /&gt;
7. Advanced object properties (invisible, transparent, etc.)&lt;br /&gt;
&lt;br /&gt;
8. Skyboxes &lt;br /&gt;
&lt;br /&gt;
9. Octree based culling&lt;br /&gt;
&lt;br /&gt;
And then some time later:&lt;br /&gt;
&lt;br /&gt;
10. Python integration&lt;br /&gt;
&lt;br /&gt;
11. More file formats&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-8428586950398111491?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o7mE_fkLRwbrULE7-GlitxXQaLE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o7mE_fkLRwbrULE7-GlitxXQaLE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o7mE_fkLRwbrULE7-GlitxXQaLE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o7mE_fkLRwbrULE7-GlitxXQaLE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/mHqUeZJJrMo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/8428586950398111491/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2009/11/further-scene-editor-progress.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/8428586950398111491?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/8428586950398111491?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/mHqUeZJJrMo/further-scene-editor-progress.html" title="Further Scene Editor Progress" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2009/11/further-scene-editor-progress.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIMSXY4cSp7ImA9Wx9XGEk.&quot;"><id>tag:blogger.com,1999:blog-526640567708972258.post-8273521561530667179</id><published>2009-11-06T09:53:00.001Z</published><updated>2011-01-12T15:03:08.839Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-12T15:03:08.839Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="karmic" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Criticising the Koala</title><content type="html">So, unless you've been living under a rock for the last month or so, or you've been busy with Windows 7 launch parties, you will know that Canonical launched the latest version of Ubuntu, version 9.10 the Karmic Koala.&lt;br /&gt;
&lt;br /&gt;
I spent launch day in #ubuntu-release-party along with over 1000 other people anxiously awaiting the release. I, of course, was already running 9.10, on my desktop, laptop and work desktop. I haven't had a single problem with any of them, post-beta anyway. &lt;br /&gt;
&lt;br /&gt;
Still, I can't help but think that this particular release was a little rushed. &lt;br /&gt;
&lt;br /&gt;
The updated boot splash is a massive improvement, and it saw a lot of work over the weeks up to the launch, but even here, there are a few niggly little issues... even now I still get an occasional worrying "Waiting to mount home" message underneath the minimalist white Ubuntu logo. The new X splash doesn't fade out properly all of the time, on my home desktop it never does. The background image showed visible banding on my highest resolution monitor, although this seems to have been rectified now. Also, I haven't seen a disk check in a little while, but the last time I saw it - it was scrolling past each percentage point. All these things show a lack of polish that I'm fairly sure an extra weeks development would have solved. Before anyone asks, yes I checked these bugs were reported.&lt;br /&gt;
&lt;br /&gt;
I'm actually pretty impressed with the log on screen, of all of the artwork I'd say GDM and the white Ubuntu logo on shutdown were the parts where I actually thought to myself - yes this can compete with OSX. That said, I did feel there were better background choices on the Ubuntu wiki, and I do understand when users say it feels cold... because.. well it does, it's hardly sunshine and flowers is it?&lt;br /&gt;
&lt;br /&gt;
Now, after log in is where everything falls apart. The introduction of the Humanity icon set was a step forward, but whoever decided that a bright orange background would look good with the new boot splash was frankly off their head. Why didn't they just use the same background as the GDM? Yes it's still dull and brown, but at least it would have been consistent.&lt;br /&gt;
&lt;br /&gt;
The GTK theme changes were just a mess, the window borders have changed to a dark muddy brown, the previous Human colours at least would have matched the orange background slightly... the whole desktop theme seemed like a last minute rush because all the time had been spent on boot. Again, a week longer and we could have had that extra polish that Ubuntu deserves.&lt;br /&gt;
&lt;br /&gt;
Still, this is just the beginning of the design work, hopefully 10.04 will get this stuff sorted once and for all. &lt;br /&gt;
&lt;br /&gt;
Generally speaking, functionally Karmic is running well for me. My ATI based desktop still has slow minimising when Compiz is enabled, I really hope this is fixed soon as it makes the whole desktop feel sluggish. I've grown accustomed to the way that notifications are displayed, however I still believe that positioning them at the bottom of the screen would get in the way even less, and I stand by my feeling that the position should be configurable, because no matter where the notifications are, they will get in the way of some application that a user regularly uses. &lt;br /&gt;
&lt;br /&gt;
Pulseaudio has really improved this release, I haven't had a single sound issue so far, however it does sadden me that Ubuntu still aren't paying attention to upstream (e.g. the removal of rtkit) although I've heard there is more communication going on now. &lt;br /&gt;
&lt;br /&gt;
Empathy. If there was one thing I would say was a complete bloody mess in 9.10 it is the premature replacement of Pidgin with Empathy. I know that Empathy is the future, but that future is not here yet. Empathy is still buggy, it looks like a mid 90's throwback and it still lacks the many features that Pidgin offers. I don't understand why there was such a rush to replace Pidgin before Empathy was ready? Still it's easy to swap it out for Pidgin so I guess I can't complain too much.&lt;br /&gt;
&lt;br /&gt;
The indicator applet is nice, although I do wonder why I can launch applications there when there is a perfectly good applications menu. I thought introducing more than one way to do something was bad from a usability POV? It makes the whole point of the applet ambiguous. Leave the launching of applications to the applications menu, and leave the indicator applet to well, indicating notifications.&lt;br /&gt;
&lt;br /&gt;
The Software Centre is a massive improvement over Add/Remove, I do wonder whose idea it was to give it a blue background though. So now we have black, white, brown, orange and blue. Talk about consistency! I thought Mark employed a design team! I also still don't agree with the "Close" menu option though, it should definitely be "Quit" IMO and I don't buy the excuse I was given on the &lt;a href="https://bugs.launchpad.net/ubuntu/+source/software-center/+bug/435792"&gt;bug report&lt;/a&gt;. "The Ubuntu Software Store has no need to require users to know whether it is "running" or not"... what? Course they do... they opened the bloody thing. &lt;br /&gt;
&lt;br /&gt;
So lots of little issues, I'll continue running 9.10 but I don't feel that this was Ubuntu's best release (9.04 was) but there have been a lot of changes (new GDM, GRUB 2, Xsplash etc.) that will hopefully mature over the next 6 months to form a solid base for 10.04, being an LTS, this is the release to watch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/526640567708972258-8273521561530667179?l=blog.kazade.co.uk' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iTbZkn98ukbDXivqlr19Dx_OAzY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iTbZkn98ukbDXivqlr19Dx_OAzY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iTbZkn98ukbDXivqlr19Dx_OAzY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iTbZkn98ukbDXivqlr19Dx_OAzY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KazadesAdventuresInCode/~4/3mrWf-oXr-k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.kazade.co.uk/feeds/8273521561530667179/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.kazade.co.uk/2009/11/criticising-koala.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/8273521561530667179?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/526640567708972258/posts/default/8273521561530667179?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KazadesAdventuresInCode/~3/3mrWf-oXr-k/criticising-koala.html" title="Criticising the Koala" /><author><name>Kazade</name><uri>http://www.blogger.com/profile/03056852907859085092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.kazade.co.uk/2009/11/criticising-koala.html</feedburner:origLink></entry></feed>

