<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>madewokherd</title>
  <link>http://madewokherd.livejournal.com/</link>
  <description>madewokherd - LiveJournal.com</description>
  <lastBuildDate>Sun, 01 Nov 2009 04:00:43 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>madewokherd</lj:journal>
  <lj:journalid>4719891</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
  <image>
    <url>http://l-userpic.livejournal.com/20552694/4719891</url>
    <title>madewokherd</title>
    <link>http://madewokherd.livejournal.com/</link>
    <width>92</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/7444.html</guid>
  <pubDate>Sun, 01 Nov 2009 04:00:43 GMT</pubDate>
  <title>Why I&apos;m not switching from Linux to Windows 7</title>
  <link>http://madewokherd.livejournal.com/7444.html</link>
  <description>So I&apos;ve been using Windows 7 for part of a day. I&apos;ve set up the software I&apos;d normally be running (so far all communication software of some sort, really). I have no major complaints about the desktop.&lt;br /&gt;&lt;br /&gt;I really like the new taskbar. I found it immediately intuitive and much better than the standard &quot;one wide button for each window&quot; deal. (In case any OSX fans want to point at the dock, I&apos;ll say that I find the OSX dock completely unintuitive and much worse than the standard &quot;one wide button for each window&quot; deal.)&lt;br /&gt;&lt;br /&gt;I no longer want any programs I use to minimize icons to the tray. I have as much space as I need in the normal taskbar. I can easily find the applications I want there, by the large icons, as well as their individual windows, by the previews. I&apos;d even consider turning off tabs in my programs.&lt;br /&gt;&lt;br /&gt;So really the desktop has one major advantage and a lot of minor pros and cons. If it were only about the desktop for me, I&apos;d seriously consider switching.&lt;br /&gt;&lt;br /&gt;There is one major problem with Windows that stops me from doing this. It is hard to develop cross-platform software on Windows, and it is very easy to develop cross-platform software on Linux.&lt;br /&gt;&lt;br /&gt;Just about everything I write runs on multiple platforms. This is actually very easy to do on Linux. Just create as few hard dependencies as you can, and make sure the things you depend on are cross-platform. For me, that often means pure standard C or pure standard Python. If I need a gui, I bring in GTK. Rarely do I add any other hard dependencies.&lt;br /&gt;&lt;br /&gt;I know that it&apos;s possible to do all of those things on Windows. I can install mingw, Python, a development version of GTK, Git (gotta have source management), SCons (gotta have a build system), pkg-config (else how would SCons know how to link to GTK?), and PyGTK (with its many dependencies). The problem is that getting those things installed and working together, then keeping them updated and working together, is difficult. On Linux, I tell my package manager to grab those things once, and they are working, integrated, and updated forever.&lt;br /&gt;&lt;br /&gt;Of course, there are various Linux apps, features, and quirks I&apos;d miss, but I could easily deal with all of them except this. Right now I have a development platform that Just Works, and I don&apos;t want to give it up.</description>
  <comments>http://madewokherd.livejournal.com/7444.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/7271.html</guid>
  <pubDate>Sun, 01 Nov 2009 00:06:15 GMT</pubDate>
  <title>The Windows 7 EULA has a Wine clause?</title>
  <link>http://madewokherd.livejournal.com/7271.html</link>
  <description>I installed Windows 7 today. Naturally, I read the EULA. It was long and included many things I thought weren&apos;t very relevant, almost as if they don&apos;t really want me to read it at all.&lt;br /&gt;&lt;br /&gt;Among many other things, it said this:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&quot;You may not [...] use components of the software to run applications not running on the software;&quot;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I may not use what for the what what?&lt;br /&gt;&lt;br /&gt;At first I took it to mean this:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&quot;You may not run emulators in Windows 7.&quot;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;An emulator running in Windows 7 would use components of Windows 7 (as all applications running in Windows 7 do) to run applications on some other OS.&lt;br /&gt;&lt;br /&gt;But they can&apos;t possibly mean this.&lt;br /&gt;&lt;br /&gt;My next thought was that maybe they mean this:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&quot;You may not use .dll files from Windows 7 (or other components we haven&apos;t thought of) to run applications in Wine (or other similar things we haven&apos;t thought of).&quot;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Of course, very few people do this anymore. Most of the components you would want to use are actually redistributable libraries (not really part of the OS at all, I&apos;d argue), ideally shipped with the applications. When they&apos;re not, they have installers you could run.&lt;br /&gt;&lt;br /&gt;Still, it&apos;s interesting that they&apos;re putting restrictions in their EULA specifically for Wine.&lt;br /&gt;&lt;br /&gt;(Or is this really about something else that I&apos;ve missed?)</description>
  <comments>http://madewokherd.livejournal.com/7271.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/6991.html</guid>
  <pubDate>Wed, 10 Jun 2009 00:55:56 GMT</pubDate>
  <title>sigh, Chrono Trigger: Crimson Echoes is dead</title>
  <link>http://madewokherd.livejournal.com/6991.html</link>
  <description>You must read &lt;a href=&quot;http://crimsonechoes.com/&quot;&gt;http://crimsonechoes.com/&lt;/a&gt; to get the context for the rest of this.&lt;br /&gt;&lt;br /&gt;I haven&apos;t watched any of the videos because I&apos;m still way too upset about this thing. I&apos;m hoping if I write about it, maybe I can get over it and watch the videos.&lt;br /&gt;&lt;br /&gt;Chrono Trigger (and later Chrono Cross) consumed a non-negligible chunk of my life in college. I pirated Chrono Trigger (I had missed it in the SNES era), but I did buy a copy of Chrono Cross (which I played on an emulator; I didn&apos;t own a Playstation at the time). I LOVE both of those games. I cannot coherently discuss why this is. I just love them.&lt;br /&gt;&lt;br /&gt;Now that Chrono Trigger DS hadn&apos;t been released when I first started playing Chrono Trigger. If it had, I might have picked it up (and certainly wouldn&apos;t have pirated the SNES version). Well, I&apos;m certainly not going to pay for it NOW.&lt;br /&gt;&lt;br /&gt;OK, so, first of all, there&apos;s no obvious reason why Crimson Echoes would violate the copyright on Chrono Trigger. Naturally, the developers distributed it as a patch, a set of instructions to convert the original program (Chrono Trigger) into a new program (Crimson Echoes). Nothing from the original program was distributed by the developers.&lt;br /&gt;&lt;br /&gt;The developers (Agent 12, who I read is the director of the project, talks as if it&apos;s his sole decision; I don&apos;t know is this is accurate, and for my purposes that&apos;s not very important) have decided to avoid a legal battle, even though they appear to have done nothing illegal. Nor is it reasonable to ask them to. The CE developers were planning to give their work away. For their would-be benefactors to complain that they aren&apos;t working hard enough to do this is simply irrational. Even though I fully understand this, a part of me irrationally wants to make exactly that complaint.&lt;br /&gt;&lt;br /&gt;(I can also understand why we&apos;d see old copies of this thing being distributed, but that IS illegal. The CE devs have a copyright on their work, and they have not given anyone permission to distribute it.)&lt;br /&gt;&lt;br /&gt;If I had heard that the CE developers had lost interest or simply could not find the time to work on the project, I don&apos;t think I&apos;d be upset. Those are good reasons to never release a free thing.&lt;br /&gt;&lt;br /&gt;What upsets me is that it is not being released for a stupid reason. Someone at Square decided (probably incorrectly) that this was a violation of their copyright and (also probably incorrectly) that it was in their best interest to stop it while they could.&lt;br /&gt;&lt;br /&gt;Mr. Square Enix Legal Department, just because you can do something, that doesn&apos;t mean you should. CE can&apos;t hurt you now, but now it can&apos;t help you either. Why did you think it would hurt you? You lose. The CE team loses. Society loses.&lt;br /&gt;&lt;br /&gt;I just don&apos;t understand why companies (or is it just Legal Departments?) are threatened by this sort of thing. Certainly, there are other things I could be more rightfully upset about (like the fact that there are STILL HOMELESS PEOPLE IN MY CITY; seriously, why haven&apos;t we fixed that yet?), but people worked hard on this thing, and it should be out where it is useful to people.</description>
  <comments>http://madewokherd.livejournal.com/6991.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/6713.html</guid>
  <pubDate>Mon, 20 Apr 2009 05:58:28 GMT</pubDate>
  <title>Possible non-broken approach for sandboxing in Python</title>
  <link>http://madewokherd.livejournal.com/6713.html</link>
  <description>Some time ago, Guido described why sandboxing in Python has not worked well so far: &lt;a href=&quot;http://neopythonic.blogspot.com/2009/03/capabilities-for-python.html&quot;&gt;http://neopythonic.blogspot.com/2009/03/capabilities-for-python.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since reading that, I&apos;ve come up with an idea that seems like it could work (or, more accurately, I applied the existing idea that is Mandatory Integrity Control to this situation). Now, I have no actual experience with Python at the C level. I have only a vague understanding of how it works. Maybe this is completely impossible. If it is possible, I&apos;m not the one to do it. Also, I&apos;m not on any relevant mailing lists, nor would I be able to follow a thread.&lt;br /&gt;&lt;br /&gt;So I&apos;m just going to put this on the Internets, and maybe someone will see it and follow up or maybe not.&lt;br /&gt;&lt;br /&gt;First, we define a thing called a &quot;security domain&quot;. In general, information is allowed to flow from more secure domains to less secure domains but not the other way around. The most secure domain is created when the program starts and is called AppDomain.&lt;br /&gt;&lt;br /&gt;Every object in python - code, classes, stack frames, lists, exceptions, everything - has a domain associated with it. Usually, this domain will be AppDomain.&lt;br /&gt;&lt;br /&gt;Naturally, there would be a Domain class, which you would call to create a new domain.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;sandbox = Domain()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This will result in a Domain object that resides in the current domain.&lt;br /&gt;&lt;br /&gt;If you want to execute some dangerous code, you do it like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;def run_a_thing(s):
    exec s
result, exception = sandbox.call(run_a_thing, &quot;print(&apos;I will cut you.&apos;)&quot;)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The sandbox.call function will create a new stack frame, &quot;demote&quot; that stack frame so that it resides in the sandbox, and call the function with the given arguments.&lt;br /&gt;&lt;br /&gt;If a stack frame tries to exec something that is in a lower security domain than the stack frame is in currently, this causes an exception.&lt;br /&gt;&lt;br /&gt;Stack frames can never be &quot;promoted&quot;. If a stack frame executes code that resides in a higher domain, it stays in the sandbox. There aren&apos;t any magical exit functions. The only way to get out of the sandbox is to raise an exception or return something.&lt;br /&gt;&lt;br /&gt;Functions defined in C will not be called unless the stack frame resides in AppDomain or the function has set some sort of domain-aware flag. Failing will cause a SecurityException. C accessors for built-in data types (list, str, dict) will ideally also raise a SecurityException for objects not in AppDomain, or if that&apos;s not possible they will return some dummy value.&lt;br /&gt;&lt;br /&gt;That should start us off with a sandbox that can do absolutely nothing. If it can somehow do something, it&apos;s already broken and I give up.&lt;br /&gt;&lt;br /&gt;The next step is to make a whole bunch of builtin functions use accessors that can deal with sandboxes. If they create new objects, they should assign those new objects the security domain of the current stack frame. If they have to access objects in a lower security domain than the current stack frame, they will raise SecurityException. If they have to modify objects in a greater security domain than the current stack frame, they will raise SecurityException.&lt;br /&gt;&lt;br /&gt;Therefore, any classes, instances, functions, or code objects created in a sandbox are automatically marked as belonging to that sandbox. If you accidentally call a function created by a sandbox, that will raise a SecurityException.&lt;br /&gt;&lt;br /&gt;No builtin function that talks to the outside world can set the domain flag or use the accessors that don&apos;t fail for things not in AppDomain.&lt;br /&gt;&lt;br /&gt;So the print call above would fail, as print would not be one of the special functions that works in a sandbox.&lt;br /&gt;&lt;br /&gt;Now, suppose I want to actually do something useful: call a function with a floating point and get back a floating point result. I want my function to be arbitrary python code, but I also don&apos;t want it talking to the outside world. Maybe I have untrusted code that looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;code = &quot;&quot;&quot;
def f(x):
    return x+1
return f&quot;&quot;&quot;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I can call it like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;untrusted_function, exc = sandbox.call(run_a_thing, code)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Later in my program, I might decide to call the function like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;untrusted_function(1.0)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That will fail. In order to call that function, I have to access its code object. The function is in a lower domain. Therefore, I CANNOT access the code object. This is simply not a legal way to call it.&lt;br /&gt;&lt;br /&gt;But I have to get the result somehow, and I&apos;m sure it&apos;s a perfectly harmless float. So here&apos;s how I do it:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;result, exc = sandbox.call(untrusted_function, 1.0)
result = sandbox.promote_float(result)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The promote_float method function will call float() on the given object from within the sandbox, then (if the result is a float) return a float in the current domain.&lt;br /&gt;&lt;br /&gt;I am forced to explicitly state that I am expecting a float and put a conversion in there. I am also limited in the types I can &quot;promote&quot;.&lt;br /&gt;&lt;br /&gt;I imagine this can make for a confusing case. Floats, like some other immutable types, can be cached (&quot;1.0 is 1.0&quot; in python may sometimes be True). Conceptually, the cache belongs to AppDomain, so any domain can access it (but not write back to it). That means the function may already return a float in AppDomain. If this happens, the result of the above call can be used directly, without calling sandbox.promote_float, and an application bug may go undetected.&lt;br /&gt;&lt;br /&gt;Now, for fun, I&apos;m going to pretend this thing exists and write a wrapper class so I can pretend to be able to sandbox generators:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# This list functions as a special return value indicating end of iteration.
# We could use any object, as long as it&apos;s visible everywhere.
stop_iteration = []

class iterator_within_sandbox(object):
    def __init__(self, code):
        created_locals = {}
        exec code in created_locals
        self.iterator = created_locals[&apos;iterator&apos;]

    def __call__(self):
        try:
            return next(self.iterator)
        except StopIteration:
            return stop_iteration

class sandboxed_iterator(object):
    def __init__(self, code):
        self.sandbox = Domain()
        self.iterator, exc = self.sandbox.call(iterator_within_sandbox, code)
        if exc is not None:
            # Rather than devise a way to meaningfully print a sandboxed exception, raise a new one
            raise Exception(&quot;exception in sandboxed code&quot;)

    def __iter__(self):
        return self

    def __next__(self):
        result, exc = self.sandbox.call(self.iterator)
        if result is stop_iteration:
            raise StopIteration
        elif exc is not None:
            raise Exception(&quot;exception in sandboxed code&quot;)
        else:
            return self.sandbox.promote_float(result)&lt;/pre&gt;</description>
  <comments>http://madewokherd.livejournal.com/6713.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/6495.html</guid>
  <pubDate>Thu, 09 Apr 2009 07:05:19 GMT</pubDate>
  <title>automated tests</title>
  <link>http://madewokherd.livejournal.com/6495.html</link>
  <description>2 weeks ago, I made a bunch of changes to Aisleriot games to appease a new automated test program I wrote. The idea was mostly to find crashes and other oddities (such as empty moves in the undo history) before users do. All the crashes and serious bugs were fixed earlier, and the 2-weeks-ago changes are minor things going to the development branch only.&lt;br /&gt;&lt;br /&gt;When I ran the tests today, they told me that Labyrinth was crashing. Apparently, I had made a logic error in one of my earlier changes, and it introduced a crash bug.&lt;br /&gt;&lt;br /&gt;I don&apos;t know why the test didn&apos;t catch this 2 weeks ago.&lt;br /&gt;&lt;br /&gt;I made this change in response to a minor test failure (empty undo move), and it caused a crash. It was my error, but it was inevitable given the number of minor things I&apos;ve been trying to fix.&lt;br /&gt;&lt;br /&gt;But then the tests did catch this before any user did, and before it went into a stable release.&lt;br /&gt;&lt;br /&gt;So overall, I can&apos;t decide whether I&apos;ve won or lost here..</description>
  <comments>http://madewokherd.livejournal.com/6495.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/6251.html</guid>
  <pubDate>Sat, 14 Mar 2009 20:29:10 GMT</pubDate>
  <title>skip this one</title>
  <link>http://madewokherd.livejournal.com/6251.html</link>
  <description>Wine releases about every other Friday, subject to Alexandre Julliard&apos;s whims and vacations. Each Wine release is essentially a snapshot of the Wine Git tree from that Friday. Sometimes Julliard commits things the same morning so that no one has time to properly test it before the release.&lt;br /&gt;&lt;br /&gt;Every once in a while, Wine has something that I call a dud release, a release that is drastically worse than the previous one. Wine 1.1.12 was the most recent one: &lt;a href=&quot;http://www.winehq.org/pipermail/wine-devel/2009-January/071735.html&quot;&gt;http://www.winehq.org/pipermail/wine-devel/2009-January/071735.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wine 1.1.12 was released on Friday, January 2. Somehow Dan Kegel knew the next day that it was a dud.&lt;br /&gt;&lt;br /&gt;Ubuntu doesn&apos;t package the 1.1.x versions of Wine. They, at least, were safe. There is a repository containing new Wine releases for Ubuntu, and I believe it had 1.1.12 for the two weeks that 1.1.12 was newest. That&apos;s fine; those people know it&apos;s beta software.&lt;br /&gt;&lt;br /&gt;Gentoo had 1.1.12 as its &quot;stable&quot; version of Wine months later, when they should have known better. The newer versions were considered too new to be stable, yet somehow 1.1.12 was OK. I am forced to conclude that Gentoo defines &quot;stable software&quot; as software that is at least a few months old, regardless of whether it works or not.&lt;br /&gt;&lt;br /&gt;Anyway, this sort of thing is to be expected when you release code that is basically untested. I think it&apos;s a little suspicious that two major regressions lined up in this way, but it could easily have been chance.&lt;br /&gt;&lt;br /&gt;Ubuntu had, in 8.10, something that looked to me very much like a dud release. I&apos;ve had a few major hardware failures. My work machine failed to boot because it couldn&apos;t detect my hard drives within a time limit. I learned later that I could work around this by pressing Ctrl+D. Once it did start, my CD-ROM drive didn&apos;t work.&lt;br /&gt;&lt;br /&gt;OK, that was probably chance. Hardware regressions happen all the time, and they just happened to affect my hardware that time. No big deal.&lt;br /&gt;&lt;br /&gt;There was another major regression that I know affected everyone: session management stopped working.&lt;br /&gt;&lt;br /&gt;Session management on the Linux desktop does two very important things:&lt;br /&gt;* It notifies the running programs when you are logging out, giving them a chance to ask you to save your work before the session ends.&lt;br /&gt;* It can, at the user&apos;s request, &quot;save&quot; the current session, to be restored at the next login. It does this by asking all running programs to give it a &quot;restart command&quot;. Theoretically, if the programs support it properly, all of your windows will reappear next login, in the same location as when you last saved.&lt;br /&gt;&lt;br /&gt;I had my computer configured to save the session every time I log off.&lt;br /&gt;&lt;br /&gt;Session management works through something called XSMP. It&apos;s an old, Unixy standard that communicates through something called ICE.&lt;br /&gt;&lt;br /&gt;As it happens, gnome-session developers had been working on a rewrite. One of the goals of this rewrite was to provide a new session management protocol that would work through D-Bus. They were in the middle of the rewrite during release time, and they hadn&apos;t yet implemented XSMP.&lt;br /&gt;&lt;br /&gt;The newer D-Bus protocol was in the rewrite, but it hadn&apos;t been stabilized. gnome-panel used it, but every other package that expected session management relied on XSMP.&lt;br /&gt;&lt;br /&gt;If you happen to be running Ubuntu 8.10, you can observe the breakage by doing the following:&lt;br /&gt;* Open the Text Editor.&lt;br /&gt;* Type in some text.&lt;br /&gt;* Log off.&lt;br /&gt;* You will not be asked to save your changes.&lt;br /&gt;&lt;br /&gt;I think most people who noticed this probably noticed it because their saved sessions weren&apos;t being restored.&lt;br /&gt;&lt;br /&gt;So Ubuntu suffered a major regression. That sort of thing shouldn&apos;t generally happen. It did happen because:&lt;br /&gt;* The gnome-session developers did a major rewrite in trunk. The new gnome-session was advertised as the latest and greatest version, and thus other parts of gnome could depend on it. I don&apos;t know why they did this.&lt;br /&gt;* The rewrite wasn&apos;t ready in time. This is because no one was working on XSMP.&lt;br /&gt;* The unfinished rewrite was released as a stable version when it came time in the cycle to release stable versions. I don&apos;t know why this happened. Maybe they had to release the it because gnome-panel needed the new protocol. Maybe it just hadn&apos;t occurred to them that they can release something other than the current state of trunk.&lt;br /&gt;* The GNOME release went on as scheduled. This was probably because no one had been working on XSMP, and fixing the bug would&apos;ve taken too long.&lt;br /&gt;* Ubuntu packagers put the new gnome-session and gnome-panel in 8.10. I&apos;m sure the packagers knew about this because the bug was in launchpad before 8.10 went live. I don&apos;t know what went into their decision.&lt;br /&gt;&lt;br /&gt;According to the GNOME bugzilla, some distributions kept the old gnome-session and gnome-panel.&lt;br /&gt;&lt;br /&gt;In the following development cycle, Lucas Rocha stepped up and did the initial work on XSMP, which he committed to trunk. Naturally, this code was new and somewhat broken, but it&apos;s a great improvement over nothing at all and makes further work much easier. In the last few days, Vincent Untz has done some further work on top of that. Said work has not been committed because of how close it is to release. While it has fixed some bugs, it may have added new bugs that are worse. We simply don&apos;t know yet; new code needs testing and time to mature.&lt;br /&gt;&lt;br /&gt;So again gnome-session has been caught releasing at a bad time, and the resulting GNOME release will be bad. Said &quot;bad time&quot; has probably lasted about a year. I&apos;m tempted to say &quot;Get it together, gnome-session developers!&quot;, but really I think the bad decisions have already been made and the current state of things does not reflect on whether the gnome-session developers have it together at this time.&lt;br /&gt;&lt;br /&gt;However, I would like to say this to advocates of time-based releases, anyone involved in this fiasco, anyone who releases software, and really anyone who will listen:&lt;br /&gt;&lt;br /&gt;A &quot;stable release&quot; does not mean a release containing old code. It means that you are reasonably certain that the code is not broken and could honestly recommend that I use it in a production environment. If you can&apos;t release something that isn&apos;t broken, do not make a stable release.&lt;br /&gt;&lt;br /&gt;If you have a release cycle with a development phase and with a code freeze (so that all code is tested in the wild for some minimum amount of time), you know whether your software is broken. If you release broken software because it happened to be broken during the code freeze, your release cycle is worthless.&lt;br /&gt;&lt;br /&gt;GNOME 2.26, unless it reverts a lot of code back to 2.22, and whether Vincent Untz&apos;s recent work is included or not, will be broken because of gnome-session. Ubuntu 9.04 will probably bring in the new broken code from GNOME (it is probably better than the broken code that&apos;s in 8.10). GNOME and Ubuntu, I know that you are not individuals and that it is unreasonable for me to ask things of you as if you are, but I still would like to ask that you either fix your new release, delay it until it is fixed, or do not call it a stable release.</description>
  <comments>http://madewokherd.livejournal.com/6251.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/6085.html</guid>
  <pubDate>Fri, 02 May 2008 23:45:46 GMT</pubDate>
  <title>The Lucca WM news feed is moving, google group and irc channel created</title>
  <link>http://madewokherd.livejournal.com/6085.html</link>
  <description>I&apos;m trying to fix the channels of communication for this project while it&apos;s still incredibly easy to do so. That means several things:&lt;br /&gt;&lt;br /&gt;After this one, I will no longer make posts to this blog with the &quot;luccawm&quot; tag. New releases of Lucca WM will instead be announced at this google group: &lt;a href=&quot;http://groups.google.com/group/lucca-wm-announce&quot;&gt;http://groups.google.com/group/lucca-wm-announce&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have also set up a group for discussion. It is open to the public, its archives are open to the public, and you can post to the list without being on the list. That is at &lt;a href=&quot;http://groups.google.com/group/lucca-wm-discussion&quot;&gt;http://groups.google.com/group/lucca-wm-discussion&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I&apos;ve moved the GIT repository for the source code from my own web host to &lt;a href=&quot;http://repo.or.cz/&quot;&gt;http://repo.or.cz/&lt;/a&gt;. They actually support the GIT protocol so I think things will work more smoothly for people trying to clone the repository from there. The public url for the repository is git://repo.or.cz/luccawm.git, and they have a web interface at &lt;a href=&quot;http://repo.or.cz/w/luccawm.git&quot;&gt;http://repo.or.cz/w/luccawm.git&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And finally, I&apos;ve set up an irc channel, #luccawm on irc.freenode.net.</description>
  <comments>http://madewokherd.livejournal.com/6085.html</comments>
  <category>luccawm</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/5734.html</guid>
  <pubDate>Tue, 15 Apr 2008 21:24:39 GMT</pubDate>
  <title>Lucca WM 0.1.1 released</title>
  <link>http://madewokherd.livejournal.com/5734.html</link>
  <description>This is a bugfix release for the tiling window manager &lt;a href=&quot;http://madewokherd.nfshost.com/luccawm/&quot;&gt;Lucca WM&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Some memory errors from valgrind and a bug in the titlebar drag-and-drop code that would lock down the mouse and keyboard have been fixed.&lt;br /&gt;&lt;br /&gt;This is version 0.1.1: &lt;a href=&quot;http://madewokherd.nfshost.com/luccawm/download/luccawm-0.1.1-source.tar.gz&quot;&gt;Source (.tar.gz)&lt;/a&gt;, &lt;a href=&quot;http://madewokherd.nfshost.com/luccawm/download/luccawm-0.1.1-source.tar.bz2&quot;&gt;Source (.tar.bz2)&lt;/a&gt;, &lt;a href=&quot;http://madewokherd.nfshost.com/luccawm/download/luccawm-0.1.1-binary.tar.gz&quot;&gt;Ubuntu 7.10 x86 Binary (.tar.gz)&lt;/a&gt;</description>
  <comments>http://madewokherd.livejournal.com/5734.html</comments>
  <category>luccawm</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/5497.html</guid>
  <pubDate>Tue, 01 Apr 2008 21:46:51 GMT</pubDate>
  <title>Lucca WM 0.1 released</title>
  <link>http://madewokherd.livejournal.com/5497.html</link>
  <description>I am announcing the first release of the tiling window manager &lt;a href=&quot;http://madewokherd.nfshost.com/luccawm/&quot;&gt;Lucca WM&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It&apos;s a window manager that lets you arrange your windows in layouts where they do not overlap and where there is no empty space. This means that when you resize one window (tile, technically), the rest of the layout changes to adapt.&lt;br /&gt;&lt;br /&gt;My main goals here (and why I think existing window managers are not good enough) are a shallow learning curve, flexibility (the user needs to be in control of the layout), and compatibility with modern Linux desktop environments, especially GNOME.&lt;br /&gt;&lt;br /&gt;This is something I&apos;ve wanted to do for a while, pretty much since I started using &lt;a href=&quot;http://modeemi.fi/~tuomov/ion/&quot;&gt;Ion&lt;/a&gt;. I wanted something that was like Ion without being &lt;a href=&quot;http://modeemi.fi/~tuomov/ion/docs/ion3.1.ps&quot;&gt;so complicated&lt;/a&gt; or &lt;a href=&quot;http://bugzilla.gnome.org/show_bug.cgi?id=311538&quot;&gt;messing up my panels&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I was able to work on this as my &lt;a href=&quot;http://psbeh19.psu-erie.bd.psu.edu/csseniordesign/Team%20Pi/Website/index.htm&quot;&gt;senior project&lt;/a&gt; for the Computer Science department and a research project at Penn State Behrend. I don&apos;t think I&apos;d have been able to do this otherwise.&lt;br /&gt;&lt;br /&gt;Anyway, here&apos;s version 0.1: &lt;a href=&quot;http://madewokherd.nfshost.com/luccawm/download/luccawm-0.1-source.tar.gz&quot;&gt;Source (.tar.gz)&lt;/a&gt;, &lt;a href=&quot;http://madewokherd.nfshost.com/luccawm/download/luccawm-0.1-source.tar.bz2&quot;&gt;Source (.tar.bz2)&lt;/a&gt;, &lt;a href=&quot;http://madewokherd.nfshost.com/luccawm/download/luccawm-0.1-binary.tar.gz&quot;&gt;Ubuntu 7.10 Binary (.tar.gz)&lt;/a&gt;</description>
  <comments>http://madewokherd.livejournal.com/5497.html</comments>
  <category>luccawm</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/5197.html</guid>
  <pubDate>Sat, 07 Jul 2007 20:17:47 GMT</pubDate>
  <title>last.fm is incredibly cool</title>
  <link>http://madewokherd.livejournal.com/5197.html</link>
  <description>Ok. So. Last.fm is a personalized radio and music recommendation service. You can sign up for an account, and they will do all kinds of neat stuff like track the music you listen to and build a profile from it. And make a radio station of similar songs.&lt;br /&gt;&lt;br /&gt;Anyway, they now have two features that are particularly nice for me: the web-based player (meaning I don&apos;t need special software to listen to the radio) and personal tag radio (meaning I can maintain a list of artists and create a station that plays music by those artists). It also lets me embed the station in this page, like so:&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id=&quot;1&quot; /&gt;</description>
  <comments>http://madewokherd.livejournal.com/5197.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/5082.html</guid>
  <pubDate>Thu, 05 Jul 2007 06:48:38 GMT</pubDate>
  <title>why Wine seems to suck more than it does</title>
  <link>http://madewokherd.livejournal.com/5082.html</link>
  <description>I was thinking about the problems people tend to have with Wine and how/if winebot can help (or how/if the problems should be fixed in Wine), and figured it might be good to get these thoughts down. People have trouble with Wine for a lot of reasons, most of which are not bugs in Wine. So, uh, without worrying too much about flow, here&apos;s a list:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Not everything works perfectly, and work-arounds can be complicated.&lt;/b&gt; This is one of the problems winebot is supposed to solve. Many applications will install and run just fine on Wine, once you apply this patch or move this file here or set these DLL overrides or whatever. Yes, the &lt;a href=&quot;http://appdb.winehq.org/&quot;&gt;Applications Database&lt;/a&gt; has many wonderful guides, but as careful as the writers of those guides may be, communication isn&apos;t perfect. This isn&apos;t just a problem for new users. I think I&apos;m a relatively experienced user of both Linux and Wine, and I have misunderstood guides.&lt;br /&gt;&lt;br /&gt;In fact, the mere possibility of misunderstanding is a problem whenever things don&apos;t work. If we had a kind of guide that couldn&apos;t be misunderstood and therefore was always followed perfectly, we&apos;d know that something else is to blame when something goes wrong and wouldn&apos;t have to waste time checking for misunderstandings. Winebot can provide this in the form of application packs.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Work-arounds don&apos;t exist for all non-working programs, and finding them is hard.&lt;/b&gt; Wine works pretty well for a lot of programs without any hacks, and it works pretty well for some popular programs with hacks. This probably leaves out many users of more obscure programs that could work if we just knew the magic set of steps that would make them happy.&lt;br /&gt;&lt;br /&gt;Note that I&apos;m only talking about programs that ALMOST work. If programs REALLY NEED something that Wine doesn&apos;t implement, then the only solution is to implement it (or in some cases use DLL overrides to steal it from Windows).&lt;br /&gt;&lt;br /&gt;The real difficulty here is identifying what exactly causes a program to work differently from Windows (such as crashing when it starts). Once that&apos;s done, IF it turns out the program doesn&apos;t need very much, coming up with a work-around should be relatively simple. There&apos;s no way to make it easier for people to do this.&lt;br /&gt;&lt;br /&gt;What we can do is make it so they don&apos;t have to do it as often by fixing Wine. I mean Wine developers can do that. I can&apos;t. &lt;br /&gt;&lt;b&gt;&lt;br /&gt; Certain things (kernel-space drivers, rootkits..) are outside Wine&apos;s scope.&lt;/b&gt; Certain kinds of programs will never run. Anything that needs to run anything in kernel-space (if the program doesn&apos;t really need it but thinks it does, it might be possible to fake it) will fail because Wine is completely a user-space program. Beginnings of driver support has been added but it can only do things that a user can do. Many kinds of copy protections or software for specialized hardware will never work. This sets a limit on Wine&apos;s compatibility that&apos;s less than 100% (actually any implementation of win32 will have less than 100% compatibility, including Microsoft&apos;s).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Setting up Windows programs isn&apos;t easy, even on Windows.&lt;/b&gt; I know I wrote about this earlier, but setting up Windows programs properly can be complicated.&lt;br /&gt;&lt;br /&gt;The problem here is that so many of these programs have parts that can&apos;t be updated, such as the installer on the CD. If bugs exist in those parts, as they have been (Worms World Party can&apos;t install from the CD because of this), they can be mistaken for Wine bugs. Wine will never fix this kind of problem.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;People are making bad assumptions.&lt;/b&gt; People have done the following broken things:&lt;br /&gt;&lt;br /&gt;-Changed the C: drive mapping to point to their Windows partition. This is WRONG WRONG WRONG. It will break things horribly.&lt;br /&gt;&lt;br /&gt;-Copied the dlls from their Windows partition over their Windows directory in Wine. Also wrong. Why do people keep thinking Wine will somehow function better if it has things from Microsoft? Didn&apos;t they learn the last time they tried to use things from Microsoft?&lt;br /&gt;&lt;br /&gt;-Run programs that were installed on their Windows partition. That won&apos;t work properly because the drive mappings and registry are different. It&apos;s like if you dual-booted Windows XP and Vista, installed a program in XP, and than ran it from Vista and expected it to work. Why do people do this? Is it that they don&apos;t think of Wine like they would another Windows install or because they think the thing I just said is actually a reasonable thing to do?&lt;br /&gt;&lt;b&gt;&lt;br /&gt;People are using outdated (or just plain misleading) guides.&lt;/b&gt; There&apos;s a lot of misleading literature on Wine, some of it misleading because you used to have to do things that are no longer necessary. This is a problem with computing in general, and we&apos;re going to see it happen more on Linux as it becomes more popular.&lt;br /&gt;&lt;br /&gt;So how are people supposed to know what guides are misleading? Wellllll, I don&apos;t know..&lt;br /&gt;&lt;br /&gt;I find that better help tends to exist in communities. &lt;a href=&quot;http://www.winehq.org/&quot;&gt;Winehq&lt;/a&gt; is a good place to go for help with Wine. Communities around a distribution can be ok. Communities around a windows program can be ok. &lt;a href=&quot;http://jaysherby.blogspot.com/2007/05/howto-run-worms-armageddon-using-wine.html&quot;&gt;This guy&apos;s blog&lt;/a&gt; is not (seriously, go &lt;a href=&quot;http://appdb.winehq.org/appview.php?iVersionId=1744&quot;&gt;here&lt;/a&gt; or &lt;a href=&quot;http://www.nanacide.com/wahelp/installguide-original4.php&quot;&gt;here&lt;/a&gt; instead).&lt;b&gt;&lt;br /&gt;&lt;br /&gt;People are using outdated or broken versions of Wine.&lt;/b&gt; Distributions are at fault here. Ubuntu Dapper (LTS) comes with the very outdated version 0.9.9. Debian apparently breaks the package into a million pieces and then doesn&apos;t install them all when you tell it to install Wine, even though if you want it to work properly you want all of it. This sort of problem is sadly very common, and I wonder how much it&apos;s affected other projects.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Wine&apos;s sound is a mess.&lt;/b&gt; There is active work going on to fix this. Essentially, the most fully-working driver in Wine right now is OSS. For most people, only one program can be using OSS for sound at a time, so they often find that sound doesn&apos;t work (Windows programs see this as a computer that lacks a sound card, and some will actually crash in that situation). The default is OSS with full hardware acceleration; the hardware acceleration causes problems too.&lt;br /&gt;&lt;br /&gt;The solution: make the ALSA driver good enough that it can be the default. Then make all of them better.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;(Update: As of version 0.9.48, ALSA is the default. It still doesn&apos;t work quite as well as the OSS driver when OSS works, apparently because of latency introduced by using ALSA.)&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;People are double-clicking on .exe files instead of running them from the command-line.&lt;/b&gt; This is sort of a desktop integration issue, and it&apos;s not clear where the responsibility lies (seems to be with package maintainers?). When you double-click an exe file in the file manager on Windows, it sets the working directory to the location of that exe file and runs it. Some programs depend on this.&lt;br /&gt;&lt;br /&gt;When you do the same thing on Linux, it sets the working directory to.. well actually it probably ignores it. Anyway it&apos;s not the right place. Solution: run things from a terminal, where you can set the working directory with the &quot;cd&quot; command.&lt;br /&gt;&lt;br /&gt;Solution if you&apos;re not good at terminals: um.. learn? I know this shouldn&apos;t be necessary and the very fact that you can double-click the exe files is misleading, but for now it is necessary.&lt;br /&gt;&lt;br /&gt;That is, if you want things to work properly.&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;/span&gt;</description>
  <comments>http://madewokherd.livejournal.com/5082.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/4861.html</guid>
  <pubDate>Sat, 02 Jun 2007 14:38:59 GMT</pubDate>
  <title>lawyers are still funny</title>
  <link>http://madewokherd.livejournal.com/4861.html</link>
  <description>They&apos;ve revoked the old key. Here&apos;s the new one: 45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2</description>
  <comments>http://madewokherd.livejournal.com/4861.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/4388.html</guid>
  <pubDate>Wed, 02 May 2007 16:51:33 GMT</pubDate>
  <title>laywers are funny ^^</title>
  <link>http://madewokherd.livejournal.com/4388.html</link>
  <description>This string of hex digits is apparently illegal:&lt;br /&gt;&lt;br /&gt;09-F9-11-02-9D-74-E3-5B-D8-41-56-C5-63-56-88-C0&lt;br /&gt;&lt;br /&gt;It&apos;s some sort of key relating to AACS, the copy protection used in Blu-ray and HD-DVD movies. I have no idea what kind of key it is, what it does, or how to use it. It can probably be revoked, meaning it will only be useful for currently-released movies.&lt;br /&gt;&lt;br /&gt;So that&apos;s not really important.&lt;br /&gt;&lt;br /&gt;What&apos;s important is that laywers are sending cease and desists over it, which means we can totally annoy them by spreading it.&lt;br /&gt;&lt;br /&gt;I&apos;m waiting for someone to write a track with that title so it can show up on last.fm.</description>
  <comments>http://madewokherd.livejournal.com/4388.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/4155.html</guid>
  <pubDate>Sun, 22 Apr 2007 16:55:49 GMT</pubDate>
  <title>I don&apos;t know how to use a mop; this bothers me</title>
  <link>http://madewokherd.livejournal.com/4155.html</link>
  <description>So there was a puddle of water covering the area outside the shower this morning for reasons unknown. This is now taken care of, apparently not the correct way but at least the puddle isn&apos;t there anymore (yay RAs), but it bothers me that I don&apos;t know how to handle the situation.</description>
  <comments>http://madewokherd.livejournal.com/4155.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/4013.html</guid>
  <pubDate>Sat, 14 Apr 2007 04:30:32 GMT</pubDate>
  <title>Wine is getting a package manager. Windows should get one too.</title>
  <link>http://madewokherd.livejournal.com/4013.html</link>
  <description>I recently discovered a project called &lt;a href=&quot;http://winebot.sandbox.cz/tracker&quot;&gt;Winebot&lt;/a&gt;. Winebot is a program that installs/uninstalls windows programs on Wine, handling dependencies, any hacks that might be needed, etc. This is still in the alpha stage so while it can do what I just said, it&apos;s not very good at it yet. There have been other projects like this (among them Wine Doors, which I was briefly involved in before I discovered a policy I hated enough to ruin the mood of any future conversation I might have with that project&apos;s maintainer), but they&apos;ve never really worked at getting support (or at least not hatred) from the Wine community. Winebot looks like something Wine developers actually won&apos;t hate.&lt;br /&gt;&lt;br /&gt;Right, so, Winebot &quot;packages&quot; (and Wine Doors packages; they&apos;re trying to be compatible, you see) are tar.bz2 archives renamed to .wdi and containing the following files:&lt;br /&gt;pack.xml - file containing data about the package: name, version, names of the install/uninstall script&lt;br /&gt;scripts/install.something - script that installs the package; this can be one of a number of types&lt;br /&gt;scripts/uninstall.something - script that uninstalls the package&lt;br /&gt;&lt;br /&gt;Since I got horribly upset with Wine Doors, the dominant script type seems to have moved from .sh (Bourne shell, a Linux scripting language) to .ahk (&lt;a href=&quot;http://www.autohotkey.com/&quot;&gt;AutoHotkey&lt;/a&gt;, a Windows scripting language). This is very important.&lt;br /&gt;&lt;br /&gt;Wine isn&apos;t easy for Linux programs to interact with. Pretty much the only thing a Linux can do with Wine is start a Windows program. Anything else (registry editing, moving around files) must be done manually in the Linux way. Registry editing is particularly difficult. Moving around files also is a bit problematic (but doable--these problems can be fairly easily worked around), since you have to worry about different drive mappings and Windows&apos; case insensitivity (Linux can have a file named CASE and a file named CaSe in the same directory, and when that happens Wine acts very weird).&lt;br /&gt;&lt;br /&gt;AutoHotkey is so much better. It can read and write the registry. It can do things with files without worrying about case. It can (!) run an installer and click the buttons so the user doesn&apos;t have to do anything, and even that is fairly easy to write. I can actually get things done with it.&lt;br /&gt;&lt;br /&gt;Not only is AutoHotkey better than Bourne Shell scripting, it&apos;s better than every other way I have seen to make an installer except for two itty bitty problems:&lt;br /&gt;1. You can&apos;t package files in it (actually I think I may be wrong about this, but it doesn&apos;t matter anyway). This is easily solved with a self-extracting archive or a .wdi package manager.&lt;br /&gt;2. It&apos;s not easy to create a nice installer gui thing that can interact with the user and ask for a target directory and has buttons and stuff. Well, it&apos;s not that gui in AHK is hard, in fact it&apos;s quite easy. It&apos;s just that it wasn&apos;t designed for installers and installer-like guis involve a lot of code. Do you want to write a lot of code? I sure don&apos;t. I want to get things done.&lt;br /&gt;&lt;br /&gt;So problem 1 isn&apos;t really a problem. Problem 2, however, is also not a problem.&lt;br /&gt;&lt;br /&gt;Windows is the only OS that thinks installers have to ask users a bunch of questions before they can install a program. No one else actually does this. On Linux, we tell the package manager we want something, and it installs it. If it needs something else before it can install it, it installs that too. In the rare cases where that&apos;s not good enough, we use the command line to tell the program exactly what we want, and then we ignore it until it finishes. Why do installers have to ask us questions?&lt;br /&gt;&lt;br /&gt;Well, the first thing they usually ask is whether I want to accept the EULA. Sometimes I even read it. This is, I suppose, mostly unnecessary in Linux because the software is usually free software (though, oddly enough, some free programs still think they have to ask the windows users if they want to agree to the GPL).&lt;br /&gt;&lt;br /&gt;Then there&apos;s the install directory. How many people actually care about this? How many of the people who do care would settle for specifying something other than &quot;C:\Program Files&quot; that they want to use for every installer? How much time would we save if we never had to click the button to confirm that yes that installation directory is fine and yes I do want you to create it?&lt;br /&gt;&lt;br /&gt;Some programs have optional components. That&apos;s fine I guess. The Linux way of dealing with this is to make the optional components separate packages. &lt;br /&gt;&lt;br /&gt;Installers want to know where to put shortcuts on my Start Menu. This was never a problem on Linux. I have a set of categories (Accessories, Games, Graphics, Internet, Office..) and my program shortcuts go in there. If I really hate the choice, I can move them around. This is no big deal&lt;br /&gt;&lt;br /&gt;Oh, and they want my permission to reboot the system. *sigh* Fine, Mr. Installer, I never had to do this for a program anywhere else, but I can see Windows has a special need to interrupt me to finish an installation.&lt;br /&gt;&lt;br /&gt;Remember how I said I could use AutoHotkey to run an installer and click through all the buttons so the user doesn&apos;t have to do anything? Yeah, Winebot does that. So it turns interactive installers into noninteractive ones.&lt;br /&gt;&lt;br /&gt;But we could be making noninteractive installers from the beginning out of AutoHotkey, installers that take developers less time to create and also annoy users less, if only we had a package manager to run things so users don&apos;t get confused when they double-click the .exe and nothing happens on the screen. A smart package manager could take care of all those stupid questions installers need to ask by feeding them prepared answers (Well...that doesn&apos;t solve rebooting, but it&apos;d be fairly simple to indicate to the package manager that a package expects a reboot after it&apos;s installed).&lt;br /&gt;&lt;br /&gt;So, basically, I am asking anyone who wants to make a package manager for windows to please do it. &lt;a href=&quot;http://idiki.dyne.org/wiki/Windows_Package_Manager#Freeware_or_open-source_software_that_could_be_easily_.28.3F.29_repackaged&quot;&gt;Here&lt;/a&gt; is a list of programs you could try to make packages for as proof of concept. Use AutoHotkey because it will make things easier. If you can, use the .wdi format. I will love you long time if you make this happen for me.</description>
  <comments>http://madewokherd.livejournal.com/4013.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/3740.html</guid>
  <pubDate>Tue, 06 Mar 2007 19:12:08 GMT</pubDate>
  <title>update: alky is focusing on directx 10 and wants to port vista games to XP</title>
  <link>http://madewokherd.livejournal.com/3740.html</link>
  <description>I&apos;ve got some new information from the &lt;a href=&quot;http://groups.google.com/group/alkyproject-announce?hl=en&quot;&gt;mailing list&lt;/a&gt; since my &lt;a href=&quot;http://madewokherd.livejournal.com/3490.html&quot;&gt;last post&lt;/a&gt; about alky. Apparently they&apos;re working on DirectX 10. This lets them expand their potential userbase to not just Mac/Linux users but Windows XP users as well.</description>
  <comments>http://madewokherd.livejournal.com/3740.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/3490.html</guid>
  <pubDate>Mon, 19 Feb 2007 22:11:58 GMT</pubDate>
  <title>Apparently Alky&apos;s STILL Not Dead</title>
  <link>http://madewokherd.livejournal.com/3490.html</link>
  <description>DISCLAIMER: I&apos;m basing this on my limited impression of alky from my involvement last Summer when it was open source and from what little I&apos;ve heard from them since. I might even be making stuff up. Do not take my ranting too seriously.&lt;br /&gt;&lt;br /&gt;For those of you who haven&apos;t heard of it, Alky is a project designed to convert Windows binaries to Linux and Mac OSX binaries. It started sometime in the summer of 2006 as an open source project. Everything was written to allow for multiple types of target and source binaries.&lt;br /&gt;&lt;br /&gt;This probably sounds similar to the Wine project, but it&apos;s not the same. Wine works by simulating an entire Windows OS (using no Microsoft code so it&apos;s perfectly legal), with everything a program could reasonably expect a Windows machine to have (if you&apos;re interested, this includes its own kernel (actually two components: wineserver and the kernel/ntdll libraries), registry, device drivers). The Wine machine also has its own hard drive and Windows directory. Those things (the kernel, the hard disk, the registry..) provide a base on top of which most Windows applications and dlls could run. However, that base isn&apos;t enough to run everything; Windows includes some dlls that Wine could run, but it has to provide a replacement so that it can work without any Microsoft code. Wine&apos;s dlls build on the lower-level things just like their Windows equivalents. The whole point here is to create a system that is as close as possible to the way Windows works, so programs can&apos;t tell the difference.&lt;br /&gt;&lt;br /&gt;The Alky approach is different. Alky creates a stand-alone binary that does not depend on a Windows environment, and so it doesn&apos;t create one. Alky has no architecture to support multiple programs accessing a registry, passing messages (that&apos;s what wineserver is for), and doing other things Windows programs do. Instead, it statically links the program to libraries that are as high-level as possible, simulating Windowsy things as needed. That was a horrible explanation. Let me try to do better with an example.&lt;br /&gt;&lt;br /&gt;Suppose we have a game, titled &quot;Revenge of the Pencil Sharpeners&quot;. It has an installer, titled SETUP.EXE. The installer installs some files the game needs to support itself, the main program (REVENGE.EXE), and a library it uses (SDL.DLL).&lt;br /&gt;&lt;br /&gt;The process of running the game on Linux with Wine (assuming everything works the way it&apos;s supposed to) goes something like this:&lt;br /&gt;&lt;br /&gt;1. Use Wine to run the installer, SETUP.EXE. Wine loads the installer into memory and runs it. The installer sees a Windows machine with a display and a C: drive with enough space to install itself, so it creates a wizard-like interface to install the program just like it would on Windows. The files go into Wine&apos;s C: drive. It writes some entries in Wine&apos;s registry for whatever settings the program needs and its uninstaller. It adds menu shortcuts to the start menu, which Wine automatically copies into your applications menu.&lt;br /&gt;2. You find the game&apos;s shortcut in your menu, and you click on it to run it. The shortcut invokes wine on the game&apos;s main program, REVENGE.EXE. Wine loads REVENGE.EXE into memory. It sees that REVENGE.EXE needs SDL.DLL so it loads that too. The game uses its settings in Wine&apos;s registry, it&apos;s files on C:, and SDL.DLL. And everything works. Just like on Windows.&lt;br /&gt;&lt;br /&gt;The process of running the game on Linux with Alky (assuming everything works the way I think it&apos;s supposed to..though I&apos;m not entirely sure..) goes like this:&lt;br /&gt;&lt;br /&gt;1. Use Wine to run the installer. That is not a typo. Alky wasn&apos;t designed for running installers; it was designed for running games. They figure Wine is good at installers already so why reinvent the wheel. (alternatively, you might use a script specially designed to look in this particular program&apos;s installer and extract the files)&lt;br /&gt;2. As I mentioned earlier, the program comes with a library, SDL.DLL. That library builds on other libraries that would normally be found on a Windows machine. That means the Alky developers (because how many normal users would want to do this?) have a choice: implement their own version of SDL.DLL based on Linux libraries, or use the application&apos;s version and implement all the Windows libraries it needs. In this case, the Alky developers will choose the first option. It&apos;s less work for them because SDL is cross-platform; there&apos;s already a Linux version and all they have to do is build a simple wrapper to account for minor differences like the filesystem using forward slashes instead of backward slashes. And their own version of SDL.DLL has to pass through fewer abstractions: in Wine SDL would be implemented based on other Windows libraries which are implemented based on an imitation Windows machine which is implemented based on native libraries. Alky&apos;s SDL is just implemented based on native libraries. So step 2 is to implement as much of SDL.DLL as REVENGE.EXE says it needs.&lt;br /&gt;3. This is entirely speculation on my part because I don&apos;t know what they actually decided to do about this problem. Here&apos;s what I think they&apos;d do based on what I know about the project. The problem is that Alky doesn&apos;t have a registry or a C: drive, but any normal Windows program will use both of those. The solution: instead of implementing a REAL registry or C drive, just make an abstraction for something simpler. Implement the registry using a settings file ~/.revenge. Make the C drive mean the same as / (this wouldn&apos;t work for programs that expect to be able to do things to c:\windows but I bet it&apos;s good enough for REVENGE.EXE).&lt;br /&gt;4. After you have all that stuff figured out, run a converter on REVENGE.EXE with the settings you&apos;ve decided on. The converter spits out a binary containing everything in REVENGE.EXE and all the libraries it needs to run.&lt;br /&gt;5. Run the binary. Everything that was originally in REVENGE.EXE and all the libraries it needs are loaded into memory. It works, not like on Windows, but as if &quot;Revenge of the Pencil Sharpeners&quot; were actually built to run on Linux. And you didn&apos;t even need the source code!&lt;br /&gt;&lt;br /&gt;What brought on this post was an announcement that they have a Linux demo out. They&apos;re selling it for $50 (the $50 apparently gives you free access to everything they might sell in the future, even though Alky doesn&apos;t do much now). See &lt;a href=&quot;http://www.fallingleafsystems.com/sapling/&quot;&gt;http://www.fallingleafsystems.com/sapling/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I&apos;m not interested enough to spend $50 on it, and they don&apos;t sound like they&apos;re offering source code, even with no license to distribute (if they did, it might be enough to make my interested). For the actual user, the process I outlined above seems to be something like this:&lt;br /&gt;&lt;br /&gt;1. Buy (or obtain for free if you invest the $50 now) an Alky Convertor script.&lt;br /&gt;2. Run the script and let it do its magic.&lt;br /&gt;3. Run the resulting binary.&lt;br /&gt;&lt;br /&gt;Gee, $50 for a black box that doesn&apos;t currently do anything but convert a demo that runs on Wine (and maybe more black boxes later for actual games I probably won&apos;t play). No thanks.</description>
  <comments>http://madewokherd.livejournal.com/3490.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/3192.html</guid>
  <pubDate>Thu, 01 Feb 2007 20:03:55 GMT</pubDate>
  <title>how to fix Linux after Windows has taken over your boot process</title>
  <link>http://madewokherd.livejournal.com/3192.html</link>
  <description>This is a common problem that a quick Google search didn&apos;t find me a good guide for, so I&apos;m just going to write something up. Most modern installs of Linux use the GRUB bootloader, which can create a nice menu allowing you to choose to start any operating system installed on the computer. It&apos;s very convenient for dual booting because GRUB can start Windows if it has been installed.&lt;br /&gt;&lt;br /&gt;You can have many operating systems installed on one hard drive, but only one of them can be installed on the Master Boot Record. This isn&apos;t a problem if you use GRUB because it creates that nice menu that lets you start any of them.&lt;br /&gt;&lt;br /&gt;Unfortunately, if Windows somehow takes over your MBR after Linux has been installed, there&apos;s no way to boot Linux (well, maybe there is, but it sure isn&apos;t easy). This would be easy to fix from within Linux; use the grub-install command to install grub to the MBR again, but for that to work you&apos;ll have to somehow get into the Linux environment that&apos;s on your computer. Fortunately, you can do this from a livecd.&lt;br /&gt;&lt;br /&gt;Note that any livecd will probably work; it doesn&apos;t have to be the one supplied by your distro. If you don&apos;t have a livecd (and don&apos;t need a gui), you can use &lt;a href=&quot;http://www.gentoo.org/main/en/where.xml&quot;&gt;Gentoo&apos;s minimal CD&lt;/a&gt;, which is relatively small (about 125 MB apparently) and will dump you in a command-line environment. Or if you like to have guis you can use &lt;a href=&quot;http://www.ubuntu.com/products/GetUbuntu/download#currentrelease&quot;&gt;ubuntu&apos;s livecd&lt;/a&gt;, which is much bigger but may make you more comfortable.&lt;br /&gt;&lt;br /&gt;Once you&apos;ve started Linux using your livecd, you need to make yourself root. Gentoo&apos;s livecd will do this automatically. On Ubuntu&apos;s livecd, start a terminal and type &quot;sudo -s&quot;.&lt;br /&gt;&lt;br /&gt;Now you need to recreate your installed version of Linux within the livecd version. Start by making a /mnt directory where you can set up the file-system (type &quot;mkdir /mnt&quot;). If you remember how you had your partitions set up, this will be handy right about now; mount those and skip down to &quot;Now that your disks are mounted&quot;. I&apos;m going to assume for now that you do not (or you don&apos;t know about mounting).&lt;br /&gt;&lt;br /&gt;The most important thing is to find your root (/) partition, which you can do through trial and error. Type &quot;fdisk -l&quot; to get a list of all the partitions that are on your computer (possibly including those on disks you have inserted).&lt;br /&gt;&lt;br /&gt;On my computer, the section dedicated to my hard drive looks like this:&lt;br /&gt;&lt;pre&gt;Disk /dev/hdb: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hdb1   *           1        4342    34877083+   c  W95 FAT32 (LBA)
/dev/hdb2            4865       14593    78148192+   f  W95 Ext&apos;d (LBA)
/dev/hdb3            4343        4864     4192965   83  Linux
/dev/hdb5            4865        4873       72261    b  W95 FAT32
/dev/hdb6   *        4874        5800     7446096   83  Linux
/dev/hdb7            5801        6052     2024158+  82  Linux swap / Solaris
/dev/hdb8            6053       14593    68605551   83  Linux

Partition table entries are not in disk order&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I know I installed Linux on that drive, so the root partition must be one of those devices. I know it can&apos;t be any that say &quot;W95 FAT32&quot;, &quot;W95 Extd&quot;, or &quot;Linux swap&quot; so I will start by trying /dev/hdb3.&lt;br /&gt;&lt;br /&gt;To mount it, I&apos;ll type &quot;mount -r /dev/hdb3 /mnt&quot;. /mnt will now contain what that drive contains.&lt;br /&gt;&lt;br /&gt;If it&apos;s the root of a Linux install, it will contain a file called /etc/fstab. To check, type &quot;ls /mnt/etc/fstab&quot;.&lt;br /&gt;&lt;br /&gt;If you see this:&lt;br /&gt;&lt;pre&gt;root@ubuntu:~# ls /mnt/etc/fstab
ls: /mnt/etc/fstab: No such file or directory&lt;/pre&gt;&lt;br /&gt;that means it&apos;s the wrong one. You will have to unmount it (type &quot;umount /mnt&quot;) and try another one.&lt;br /&gt;&lt;br /&gt;If you see this:&lt;br /&gt;&lt;pre&gt;root@ubuntu:~# ls /mnt/etc/fstab
/mnt/etc/fstab&lt;/pre&gt;&lt;br /&gt;then the device you&apos;ve chosen is the root of a Linux install (I&apos;m assuming you only have one), and you can move on.&lt;br /&gt;&lt;br /&gt;Because I had you mount the filesystem read-only (that&apos;s what -r does), you&apos;ll have to remount it so you can read and write. To do that, type &quot;mount -o remount -rw /mnt&quot;.&lt;br /&gt;&lt;br /&gt;To find out what other filesystems, if any, you need to mount for your environment, look at /mnt/etc/fstab (type &quot;cat /mnt/etc/fstab&quot;).&lt;br /&gt;&lt;br /&gt;Mine looks like this:&lt;br /&gt;&lt;pre&gt;# /etc/fstab: static file system information.
#
# &lt;file system=&quot;system&quot;&gt; &lt;mount point=&quot;point&quot;&gt;   &lt;type&gt;  &lt;options&gt;       &lt;dump&gt;  &lt;pass&gt;
proc            /proc           proc    defaults        0       0
/dev/hdb6       /               ext3    defaults,errors=remount-ro,user_xattr 0       1
/dev/hdb8       /home           ext3    defaults,user_xattr        0       2
/dev/hdb7       none            swap    sw              0       0

/dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/hdd        /media/cdrom1   udf,iso9660 user,noauto     0       0
/dev/fd/0       /media/floppy0  auto    rw,user,noauto  0       0
/dev/sda1       /media/usbdisk  vfat    rw,user,exec,auto,uid=meh         0       0
/dev/sdb1       /media/usbdisk  vfat    rw,user,exec,auto,uid=meh         0       0&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If the file system isn&apos;t a partiton (like the one where the device is listed as &quot;proc&quot;), you can ignore it. If the mount point is &quot;none&quot; or it starts with &quot;/media&quot;, you can ignore that too. You&apos;ve already mounted &quot;/&quot;. In my case, the only line that matters is the one that starts with &quot;/dev/hdb8&quot;. I would have to type &quot;mount /dev/hdb8 /mnt/home&quot; to mount it (I have to add /mnt before the mount point because that&apos;s where I&apos;m building the filesystem).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now that your disks are mounted, you&apos;ll have to mount a few more things that aren&apos;t disks (/dev and /proc), like so:&lt;br /&gt;&lt;pre&gt;root@ubuntu:~# mount -t proc none /mnt/proc
root@ubuntu:~# mount -o bind /dev /mnt/dev&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now you can switch to the version of Linux that&apos;s on your hard drive. To do this, type &quot;chroot /mnt /bin/bash&quot;.&lt;br /&gt;&lt;br /&gt;If that worked, /mnt has magically become / in your terminal. This isn&apos;t exactly the same as if you had booted to Linux, but it&apos;s good enough to repair your install.&lt;br /&gt;&lt;br /&gt;Now here&apos;s the easy part: run grub-install on your hard drive. If a partition on your hard drive was called something like /dev/hda1, your hard drive is /dev/hda. My partitions started with /dev/hdb, so I&apos;d type &quot;grub-install /dev/hdb&quot;.</description>
  <comments>http://madewokherd.livejournal.com/3192.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/2995.html</guid>
  <pubDate>Sun, 19 Nov 2006 10:10:01 GMT</pubDate>
  <title>for the record, this is what I think about God</title>
  <link>http://madewokherd.livejournal.com/2995.html</link>
  <description>I&apos;ve been looking for a name for what I think about God. Theism doesn&apos;t quite cover it. Wikipedia has an article that describes something called &lt;a href=&quot;http://en.wikipedia.org/wiki/Eutheism_and_dystheism&quot;&gt;eutheism&lt;/a&gt;, but that&apos;s not quite it either.&lt;br /&gt;&lt;br /&gt;I&apos;m having trouble describing exactly what it is I think, but I seem to do ok if I start with how I make moral judgements.&lt;br /&gt;&lt;br /&gt;I don&apos;t really have a system of beliefs about morality. There are just certain times when I can look at something and know that it&apos;s good or that there&apos;s something terribly wrong with it.&lt;br /&gt;&lt;br /&gt;For instance, I never really had a position on abortion until my sister became pregnant. For the record, she was not considering an abortion to my knowledge, nor do I know of any reason that she would. Her son, my nephew, has been born and is, to the best of my knowledge, now healthy. But when she was pregnant, I was able to look at abortion and know that there was something terribly wrong with it. I couldn&apos;t do that before. Does this mean it should be illegal, or that it&apos;s never the best option available? I don&apos;t know. I just know that there&apos;s something terribly wrong with it.&lt;br /&gt;&lt;br /&gt;It&apos;s not limited to moral judgements. I can sometimes do the same thing with works of art (for instance, this track I&apos;m listening to right now, &quot;The Accident&quot; by Squonk Opera, is good; I don&apos;t know why, I just feel it).&lt;br /&gt;&lt;br /&gt;Admittedly, this isn&apos;t useful in a lot of situations. When thinking about nearly anything related to sexuality, I get nothing. I don&apos;t know if it&apos;s good. I don&apos;t know if there&apos;s something wrong with it. I know there&apos;s something wrong with war, but what about when war is used to solve another problem? I don&apos;t think that whatever good comes out of it will ever be worth it. But I can&apos;t be as sure of that as I am that there&apos;s something wrong with war.&lt;br /&gt;&lt;br /&gt;Now, where this starts to involve God is when I ask why it is that I&apos;m able to do this. That&apos;s not a difficult question to answer technically. The simplest explanation is that my brain is wired for it, much like it is wired to experience emotions like anger and sadness. Occam&apos;s razor tells me that I should accept that one.&lt;br /&gt;&lt;br /&gt;But in that case, can the things I know this way really be applied to other people? If it&apos;s just a function of the way my brain happens to work then, well, it&apos;s just my opinion. Others may think differently. It&apos;s no different from the fact that I happen to dislike mayonnaise.&lt;br /&gt;&lt;br /&gt;No. Fire alarms go off in my head when I start to think this way. I know there&apos;s something wrong with that line of thought the same way I know there&apos;s something wrong with abortion. And I trust that feeling more than I trust Occam&apos;s razor or any reasoning that will be presented to me. You cannot argue this point with me. &lt;i&gt;It is not just my opinion, it is the Truth&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;And that is, I think, my religion. I believe in this feeling that I have about certain things, that they are good or that they are seriously flawed. I use God as a catch-all term to describe the feeling, the reason for it, and good. I don&apos;t have feelings about whether God is omniscient or omnipotent or whether he created the universe the same way that I feel good and serious flawedness (the term I keep thinking about replacing with evil, but I&apos;m not sure evil is exactly what I mean). I have an opinion about these things, but that&apos;s not the same. I think maybe in the future, I&apos;ll need to keep my opinions separate from my religion, as they have a tendency to get confused.&lt;br /&gt;&lt;br /&gt;I believe that goodness exists and is absolute and knowable. That is the most important thing in the world to me.</description>
  <comments>http://madewokherd.livejournal.com/2995.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/2626.html</guid>
  <pubDate>Sat, 28 Oct 2006 23:55:12 GMT</pubDate>
  <title>&quot;How to steal an election by hacking the vote&quot;</title>
  <link>http://madewokherd.livejournal.com/2626.html</link>
  <description>I don&apos;t normally make posts just to link to something, and I realize the number of people who are likely to read such a post is small, but damnit this is serious.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://arstechnica.com/articles/culture/evoting.ars&quot;&gt;http://arstechnica.com/articles/culture/evoting.ars&lt;/a&gt;</description>
  <comments>http://madewokherd.livejournal.com/2626.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/2371.html</guid>
  <pubDate>Thu, 14 Sep 2006 16:05:46 GMT</pubDate>
  <title>Re: Reconciling Microsoft and the open-source movement</title>
  <link>http://madewokherd.livejournal.com/2371.html</link>
  <description>Neil McAllister has recently written an article titled &quot;&lt;a href=&quot;http://computerworld.co.nz/news.nsf/tech/5FD1C8D8C15080ADCC2571E30015E4A1&quot;&gt;Reconciling Microsoft and the open-source movement&lt;/a&gt;&quot;. In this article, Neil has not said a single thing that matters. Not one thing.&lt;br /&gt;&lt;br /&gt;Yes, many supporters of open-source do have a &quot;fortress mentality&quot;. Many believe that Microsoft is evil. I&apos;ve heard these people in mailing lists. I&apos;m sometimes a little embarrassed by them.&lt;br /&gt;&lt;br /&gt;&quot;It’s time for open-source advocates to set aside their pride, recognise their place in the larger software market and start working to build bridges, rather than fortresses.&quot;&lt;br /&gt;&lt;br /&gt;This sounds like a wonderful idea, but most of the bridges that matter so far have been built by people on the open-source side, sometimes the very same people with this so-called &quot;fortress mentality&quot;, and most of the fortresses that matter have been built by proprietary companies like Microsoft.&lt;br /&gt;&lt;br /&gt;Microsoft has not taken the time to support any Linux filesystems. Why should they? It is not in their best interest to make switching from Windows to Linux easier. Linux, however, appears to want to support every filesystem possible, &lt;a href=&quot;http://linux-ntfs.org/&quot;&gt;including ntfs&lt;/a&gt;. It does have a somewhat working driver (it definitely at least reads the system correctly), but &lt;a href=&quot;http://wiki.linux-ntfs.org/doku.php?id=ntfs-en#how_was_the_linux_ntfs_driver_written&quot;&gt;it&apos;s not as if they&apos;ve had any help from Microsoft&lt;/a&gt;. An open-source driver also exists &lt;a href=&quot;http://uranus.it.swin.edu.au/~jn/linux/ext2ifs.htm&quot;&gt;for reading ext3 on Windows&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The standard open-source audio format is &lt;a href=&quot;http://xiph.org/vorbis/&quot;&gt;ogg vorbis&lt;/a&gt;. Microsoft has made no attempt to support it, even though they have the specs and a reference implementation that already builds on windows and has a BSD license. So the only thing they&apos;d be required to do to play the files is write some glue for Windows Media Player and *ahem* set aside their pride and acknowledge xiph.org in compliance with &lt;a href=&quot;http://svn.xiph.org/trunk/vorbis/COPYING&quot;&gt;the BSD license&lt;/a&gt;, which they&apos;ve &lt;a href=&quot;http://en.wikipedia.org/wiki/BSD_license#Proprietary_software_licenses_compatibility&quot;&gt;apparently already done for other projects in the past&lt;/a&gt;. Sure, there are plugins available to do it, but why doesn&apos;t WMP just support it? Open source has done everything is possibly can to make it easy for WMP to play ogg vorbis files, but Microsoft has to take the final step and actually do it.&lt;br /&gt;&lt;br /&gt;It&apos;s not open source that needs to change here. In spite of the rhetoric, open source projects have been doing more than one could reasonably ask in the name of compatibility with other systems, even proprietary ones. Individuals in the open source movement may bash Microsoft. I&apos;ve just bashed Microsoft myself. Most of us probably think that Microsoft&apos;s software is crap compared to what we&apos;re using now; why else would we be using it? Some people think that porting open source software to windows is a bad idea (I&apos;m not among them), but these people do not matter. If people with the technical skill want to port things to Windows, they can do it, and often they have.&lt;br /&gt;&lt;br /&gt;By its very nature open source encourages compatibility, as it always has, in spite of anything its supporters might think about the things it may become compatible with. When Microsoft decides they really want compabitility with open source technologies, they can have it, and no one in the open source movement can stop them.</description>
  <comments>http://madewokherd.livejournal.com/2371.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/2255.html</guid>
  <pubDate>Fri, 04 Mar 2005 06:40:06 GMT</pubDate>
  <title>Oh my god, it&apos;s 1992 again</title>
  <link>http://madewokherd.livejournal.com/2255.html</link>
  <description>I want to build a window manager. So I start reading related standards, in order to figure out what the hell a window manager is supposed to do. According to freedesktop.org, I&apos;m supposed to comply with something called the ICCCM 2.0.&lt;br /&gt;&lt;br /&gt;Among the Simply Amazing features this standard offers:&lt;br /&gt;&quot;The icon_pixmap field may specify a pixmap to be used as an icon. This pixmap should be: &lt;br /&gt;-One of the sizes specified [blah blah blah]&lt;br /&gt;-1-bit deep. The window manager will select, through the default database, suitable background (for the 0 bits) and foreground (for the 1 bits) colors. These defaults can, of course, specify different colors for the icons of different colors.&quot;&lt;br /&gt;If you counted 10 (known to people who aren&apos;t using binary for the sole purpose of being annoying as &quot;two&quot;), you are incorrect. In fact, one can add an alpha mask to this (also 1-bit), giving you a total of 3 colors.&lt;br /&gt;&lt;br /&gt;Or maybe transparent doesn&apos;t count.&lt;br /&gt;&lt;br /&gt;Whatever. It does go on to define a window that can be used as an icon. In a later section. Maybe it works; maybe it doesn&apos;t.&lt;br /&gt;&lt;br /&gt;I&apos;ve also been given this wonderful piece of advice:&lt;br /&gt;&quot;Most, but not all, window managers will support icon windows. Those that do not are likely to have a user interface in which small windows that behave like icons are completely inappropriate. Clients should not attempt to remedy the omission by working around it.&quot;&lt;br /&gt;&lt;br /&gt;Of course this is true (so I&apos;ll have to make sure my window manager does this), and not only for those of us on some variant of Unix. The rest of the world still uses Windows 3.11, MacOS, or AmigaOS.&lt;br /&gt;&lt;br /&gt;Disclaimer: I&apos;ve done absolutely no fact checking. None.</description>
  <comments>http://madewokherd.livejournal.com/2255.html</comments>
  <lj:music>Chumbawamba - Mary, Mary</lj:music>
  <media:title type="plain">Chumbawamba - Mary, Mary</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/1920.html</guid>
  <pubDate>Mon, 21 Feb 2005 17:22:53 GMT</pubDate>
  <title>Are you asking for a CHALLENGE?</title>
  <link>http://madewokherd.livejournal.com/1920.html</link>
  <description>I hate this. Yet I&apos;m clearly choosing this. Maybe it&apos;s the sort of choice where your life will suck otherwise, but I&apos;m choosing this. Because no other choice is acceptable.&lt;br /&gt;&lt;br /&gt;This is the sort of thing that happens to people in well-written books. It doesn&apos;t happen to REAL people.&lt;br /&gt;&lt;br /&gt;I was in the &quot;Data Structure and Algorithms&quot; lecture this morning playing solitaire. Canfield (aka Demon) solitaire to be exact, not that it&apos;s important. So the instructor is talking about overloading the assignment (=) operator for a class using dynamically allocated memory, and he mentions the necessity of checking the identity of the object being assigned against the object being assigned to. If they are equal, the algorithm he uses breaks down (because the algorithm always deallocates the memory in use by the thing to be assigned a new value first--if the identity is the same, it will proceed to copy from memory that has been lost).&lt;br /&gt;&lt;br /&gt;So he asks me (specifically) why this is necessary. I answer. He rejects my answer, waits, and asks someone else, who says essentially the same thing I said. He then asks me if I get it. Of course, as I understand it, that was what I said, so that is my answer.&lt;br /&gt;&lt;br /&gt;Someone else who was there recounted the events and had basically the same impression, except that he had actually looked at the algorithm and noticed (as I probably would not have even if I had looked), that he was checking the values of the objects for equality, not the identity. Yes, if the identity is the same, the value must be the same, but this is different (and slower) from the way it was explained.&lt;br /&gt;&lt;br /&gt;So. The important detail that&apos;s missing from this story is this: why did he specifically ask me this question? I&apos;m not sure how many names he knows..but he hasn&apos;t been known to just ask people questions in the past. I think it probably stems from the fact that I was playing solitaire (Canfield, but he didn&apos;t know that) and not looking at his slides. Given that, possible motivations:&lt;br /&gt;-He is genuinely concerned that I, personally, may not understand the concept involved.&lt;br /&gt;-He is insulted that I&apos;m not looking at his slides and generally not paying attention to the lecture.&lt;br /&gt;-He&apos;s trying to prove that it is necessary for me to not be doing anything else during the lectures.&lt;br /&gt;&lt;br /&gt;Let&apos;s get the genuine concern out of the way first. If it&apos;s something that only involves me, why can&apos;t he say it to me personally? If an instructor feels that a student does not understand something, common sense dictates that the middle of a lecture is not the time to point this out, as that would be cruel.&lt;br /&gt;&lt;br /&gt;He may very well be insulted. Perhaps I should send a personal query to him asking if his feelings were hurt. But perhaps not. I mean, this man is an adult. By some theories, I&apos;m an adult, but I don&apos;t feel like anything has actually changed since my not being an adult. In any case, we have a very specific professional relationship that says nothing about this.&lt;br /&gt;&lt;br /&gt;That leaves him trying to prove that it is necessary for me to devote my full attention to the lecture. This just isn&apos;t true. Even if it is true, it&apos;s not his responsibility. The responsibility for picking up the material is mine. The instructor is there to give me the requirements of the course, to provide tools to help me to do this (including lectures), and to evaluate to what extent I meet those requirements. This is college; if I don&apos;t need to attend classes, I shouldn&apos;t be expected to attend classes.&lt;br /&gt;&lt;br /&gt;So I could just not attend the lectures. Naturally, there would be quizzes, and these would affect my grade. More importantly, this is a coward&apos;s way out, and I do think it&apos;s helpful to attend lectures, even though I don&apos;t need to always devote my full attention to them.&lt;br /&gt;&lt;br /&gt;I could also refrain from playing solitaire during the lecture. At the moment, no one has expressed any problem with me doing so (and if attending lectures should be optional, as is my claim, the appearance of attention should also be optional).&lt;br /&gt;&lt;br /&gt;That leaves me with playing solitaire for every remaining lecture, hoping this does not continue, but ready if it does.</description>
  <comments>http://madewokherd.livejournal.com/1920.html</comments>
  <lj:music>none</lj:music>
  <media:title type="plain">none</media:title>
  <lj:mood>irritated</lj:mood>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/1705.html</guid>
  <pubDate>Sat, 04 Dec 2004 22:57:14 GMT</pubDate>
  <title>Linux...</title>
  <link>http://madewokherd.livejournal.com/1705.html</link>
  <description>A couple of weeks ago, I switched to Linux. I&apos;d set up my computer (partitioned) with this in mind. I made the mistake of using Gentoo Linux, which is probably the most difficult distribution to set up.&lt;br /&gt;&lt;br /&gt;So anyway, I&apos;m now running GNOME under Gentoo Linux. I don&apos;t feel like talking about how I got it set up, but I&apos;d like to say something about compatibility, and about windows.&lt;br /&gt;&lt;br /&gt;Reasons to use Linux:&lt;br /&gt;&lt;br /&gt;- openness - Ideally, a Linux system is completely transparent. This makes it easy to implement things that Linux programs need in other architectures. The Windows API, however, is not open at all. Windows programs simply assume they have everything that&apos;s in a Windows 98 SE (in most cases, I&apos;d say this is where they draw the line) insllation, but there isn&apos;t any official complete listing of what those things are and how, exactly, they should behave. (Also, Microsoft has to be VERY careful about what they remove or they sacrifice compatibility). In contrast, it&apos;s very clear what components Linux programs rely on because one can never be sure that they will always be on any Linux system.&lt;br /&gt;&lt;br /&gt;- open source - The ability of end-users to compile things from the source allows a lot of packages to run on various architectures on top of unix-like systems. It also gives people the ability to make modifications for compatibility with new systems. Open source means that no one can control software--the destiny of the software is determined by anyone who has the ability to modify it. &lt;br /&gt;&lt;br /&gt;- attitude - Linux software tends to be written with the mindset that the user should be able to control it. As a result, the DVD player software I use gives me an option to set the region of the player (I don&apos;t remember ever seeing that before....but if everything we used was built with that kind of thinking, we&apos;d never have to put up with the whole &quot;DVD region&quot; business). I can change my MAC address by adding one line to my network configuration file. Now that I have some experience with the system, it&apos;s easy. No other mainstream OS (read: not mac os or windows) makes this so easy (though to be fair, no normal person would want to do this, and even in this case it was an odd circumstance).&lt;br /&gt;&lt;br /&gt;- security - Unlike Windows, Linux was actually designed to be run with a normal user who doesn&apos;t have access to the whole computer (later versions of Windows allow this, but Windows programs tend to expect to have this access and fail if they don&apos;t have it). This means that if (god forbid) some malicious code manages to run on my computer, it can only do what I have permission to do. This can still be a lot of damage, but it isn&apos;t enough for the virus to actually install itself on the computer, meaning that it cannot affect my ability to log on as the root user (read: administrator) or do anything I could normally do as that user. So while data loss is possible, and it could mess up your normal user, it will never be necessary to reinstall anything or fix any core packages as a result of malicious code. Nor will one person&apos;s big mistake (provided he doesn&apos;t make it while logged in as root) affect other users.&lt;br /&gt;&lt;br /&gt;- screensavers - Not a major issue, I know, but xscreensaver is so much better than the stuff that comes with Windows.&lt;br /&gt;&lt;br /&gt;- no gui required - Lots of things that you&apos;d actually want to do can be done without a gui: you can play games, browse the web, check email, and sign on to IM services all on a text-only multi-tasking environment.&lt;br /&gt;&lt;br /&gt;Reasons to use Windows:&lt;br /&gt;&lt;br /&gt;- running windows programs - There are a lot of good programs designed for Windows. Sure, there&apos;s free Linux software for most of the things you&apos;d want to do, but not for everything. Many of these programs will run on Linux using WINE, but this isn&apos;t a reliable solution (yet). I have a lot of games that still won&apos;t run on Linux. I am confident they will run some day (and that I&apos;ll have the skills to make it happen some day), but for now I have to run Windows in some form if I want to play them. I don&apos;t.&lt;br /&gt;&lt;br /&gt;- device drivers - A lot of hardware companies don&apos;t provide drivers for Linux. Sometimes it&apos;s possible to make the hardware to work some other way, but it&apos;s much more likely to work on Windows (unless you thought of this before you purchased it).&lt;br /&gt;&lt;br /&gt;- inertia - Computers tend to come with Windows pre-installed, so it&apos;s much easier to just stay with that than to try to switch to Linux and get a refund for Windows.&lt;br /&gt;&lt;br /&gt;- maintenance - It&apos;s always necessary (no matter what anyone tells you) to have someone who knows what he/she&apos;s doing to maintain your computer. Someone who knew what he was doing in Windows won&apos;t necessarily understand a Unix-like system. It helps, but this is very different.&lt;br /&gt;&lt;br /&gt;I don&apos;t know of any reasons that have anything to do with Windows actually being better.</description>
  <comments>http://madewokherd.livejournal.com/1705.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://madewokherd.livejournal.com/873.html</guid>
  <pubDate>Thu, 07 Oct 2004 20:34:40 GMT</pubDate>
  <title>It&apos;s all been done before</title>
  <link>http://madewokherd.livejournal.com/873.html</link>
  <description>The idea I posted previously of networking objects has been done before. It hasn&apos;t been done in a way that takes advantage of Python&apos;s dynamic typing (types must be specified ahead of time, but I probably would have had to require a similar level of validation), but it has been done. It&apos;s called &lt;a href=&quot;http://en.wikipedia.org/wiki/CORBA&quot;&gt;CORBA&lt;/a&gt;, and the implementation for Python is called, for reasons I cannot begin to fathom, &lt;a href=&quot;http://www.fnorb.org/&quot;&gt;Fnorb&lt;/a&gt;. Oh, and it requires a &lt;a href=&quot;http://en.wikipedia.org/wiki/C_preprocessor&quot;&gt;c++ preprocessor&lt;/a&gt; for the part where we define the types. I&apos;m not writing anything in c++, but apparently they use it for something. At least end-users don&apos;t need it..&lt;br /&gt;&lt;br /&gt;I&apos;ve known this for a while, but my idea of writing a program to play Fluxx has been done before. I&apos;ve just recieved some new information about this that I thought I&apos;d share. The program was known as Shifty, and it ran on a Palm Pilot (apparently Player vs. Computer only). The author changed its name to MicroFluxx after it became a legitimate (authorized by Looney Labs) venture. The author has now taken down the program and no longer supports it. It was released under the GPL, and someone was nice enough to &lt;a href=&quot;http://users.telerama.com/~eeyore/SourceShifty.zip&quot;&gt;put up an old version of the source for download&lt;/a&gt;. I can&apos;t use the source for anything, but I have learned a few things about this program. It&apos;s for Fluxx version 2 so the author never had to worry about &lt;a href=&quot;http://wunderland.com/LooneyLabs/PromoCards/X%3DX+1.jpg&quot;&gt;X=X+1&lt;/a&gt;. The deck is very much locked in; there&apos;s no way to add or remove cards without editing the code recompiling. It does have AI (or course), something I had thought would be very difficult to implement. So I stand corrected. It would be very difficult to build AI that&apos;s any good at the game, especially when you throw in the possibility of nonstandard cards/rulesets.&lt;br /&gt;&lt;br /&gt;About a week ago, I sent an email to the &lt;a href=&quot;http://mail.wunderland.com/mailman/listinfo/arcade&quot;&gt;Arcade list &lt;/a&gt; with the current working version of ObjectFluxx attached and announcing that I&apos;d like to release it. The email was too big and so it didn&apos;t go through. I was told that it would either be rejected or approved by a moderator. If it&apos;s rejected, I should get another email about it. If it goes through, I should get it back because I&apos;m subscribed to that list. I haven&apos;t gotten any response yet. So I sent another email yesterday without the program attached. Nothing there either, but I know it went through because I got my email back through the list. To be fair, people haven&apos;t had much time to respond to that.&lt;br /&gt;&lt;br /&gt;Andrew Taylor has created a &lt;a href=&quot;http://andrewtaylor.proboards15.com/index.cgi?board=games&amp;amp;action=display&amp;amp;num=1095929693&quot;&gt;program for playing Minesweeper Flags offline&lt;/a&gt;. Apparently (I can&apos;t seem to find a link with an explanation for this), the object of this game is to identify as many mines as possible. When you click a square that is not a mine, your turn ends and that square is cleared (as well as all surrounding squares if there are no mines next to it). The program also features hexagonal and tetris (the board &quot;falls&quot; and you have to flag the mines before it hits the bottom of the screen) modes.&lt;br /&gt;&lt;br /&gt;My absentee ballot hasn&apos;t arrived yet. I&apos;m starting to worry.</description>
  <comments>http://madewokherd.livejournal.com/873.html</comments>
  <lj:music>Donkey Kong Country Soundtrack - Voices Of The Temple</lj:music>
  <media:title type="plain">Donkey Kong Country Soundtrack - Voices Of The Temple</media:title>
  <lj:mood>chipper</lj:mood>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
