On Mozilla

The whole recent(ish) news about Brendan Eich stepping down as CEO of mozilla after some rather unsavory political donations came to light has been burning up the twittersphere, the blogosphere, and many other places defined with made up words with “sphere” in the name.

A couple of my usual haunts, Hacker News being the big one, ended up with some pretty in-depth discussions on a number of issues surrounding his appointment, the controversy, and his resignation.

I’d like to take this opportunity to share a couple of thoughts I’ve come up with after having a lot of time to think over this whole kerfluffle/brouhaha/controversy.

My conclusion is thus: The outrage towards Mozilla and Eich is perfectly legitimate, justified, and acceptable.

This particular conclusion has gotten me no small amount of crap, but here, I want to expand on it a bit futher. I intend to do this by directly addressing a number of the flawed arguments that I see repeated, both in the linked thread, and elsewhere on the internet.

1) Someone’s political beliefs are their own private business, and we can’t judge someone for that.

The problem with this is twofold. First, what Eich was drummed out of Mozilla for was a donation (and mishandling the resultant controversy, but more on that in a bit), not his personal political beliefs.

A donation is an action, not a belief by any possible definition of that word.

So now we’ve taken this argument down to “Someone’s political actions…” which we can dismiss as false out of hand. If someone’s actions are not how we measure them, what is?

2) Eich was fired or “constructively dismissed” by Mozilla.

FALSE. The reasons of which are painstakingly detailed here, but what it boils down to was that Eich recognized the controversy was impacting his ability to do his job, and voluntarily stepped down. He was not fired, nor was he asked to leave by the board.

3) Eich isn’t homophobic and therefore this entire controversy is nonsense.

Let’s fire up the motor on the ole’ goalpost and move it down a bit. So we look past the donation as the catalyst for a moment. That leaves us with trying to divine a person’s mental state, which is tricky at the best of times. Going back to #1, we can only evaluate his actions and attempt to look backwards. I see three important pieces of data.

  1. Eich’s donation to the Prop8 campaign. $1000 of his own money.

  2. Eich’s refusal to directly answer any questions about his personal beliefs.

  3. Eich’s stepping down.

Now, I believe we can all agree that a CEO position is one of great power and prestige, not to mention compensation (we’re talking millions). Through logical deduction, we can assume that one who supports a bill (not a political player with different views on different subjects, mind! a single bill with a single purpose) with finances wants to see that bill put into law.

What would Prop8 do? In a nutshell, it would ban all non-heterosexual marriages from state recognition by amending its constitution.

Therefore, Eich supported this ban with a not-insubstantial contribution.

Now, why would someone support such a ban? Here it gets muddy – I see three arguments for one who supports such a law.

  • Appeal to tradition (marriage has always been between a man and a woman, anything else is wrong)

  • Appeal to religion (my god says any other marriage is a sin)

  • Appeal to personal incredulity (I am personally squicked by same-sex relationships)

Are there really any others? If there are, I’m not aware of them and would like someone to give me an idea in the comment section.

The problem is, any of these three arguments have a huge problem – you can search and replace for “same sex” and replace with “interracial”, rewind the clock half a decade or so, and the arguments wouldn’t look out of place at all. I.e. intolerance, i.e. bigotry.

We can therefore logically deduce that Eich holds bigoted personal views. This also provides a convenient explanation for piece of data #2 above – his confirmation or denial of his views would have only raised more questions than answers. Further, since a CEO is such a prestigious position to have, why on earth would he bail out unless there were some massive confilct of interest? Indeed, the only logical conclusion is that Eich is bigoted against LGBTs – no other mental state (aside from insanity, which I really doubt applies here) accounts for all of his behavior.

4) This controversy impacts Eich’s freedom of speech rights

Well.. no. In short, while Eich is free to contribute to any political cause he sees as valid, the rest of the wold is also free to critically evaluate his actions and act accordingly. For some, this meant they quit using firefox (silly as that may be), for others, this means they joined the crowd in asking Mozilla what they were thinking.

The axiom to keep in mind here is that freedom of speech does not mean freedom from consequences. Eich can be as bigoted as he wants, and I can call it out as much as I want. That is freedom of speech, and that is the system working as expected.

You find this argument trotted out often by social conservatives when they find themselves on the losing side of the culture war. The last time I saw it brought out in this much force was when a certain reality TV star was temporarily suspended for comments he made in a magazine article.

It’s hard for me to attack this in a more detailed way simply because it’s so throughly flawed. Eich’s (and Phil’s) advocates apparently think freedom of speech only applies to them and not to people who criticize them.

The next time you find this argument, ask the person making it to elaborate what part of the actions they have a problem with. Is it the fact that someone is responding to your actions or speech with their own actions or speech? Is it the fact that it’s a lot of “someone”’s? Or is it the fact that a grown adult in full accordance with the law terminated their employment contract with another entity?

5) This is silly because Prop8 failed anyways.

Prop8 as it existed was essentially a massive smear campaign against LGBTs, not merely another political thing. Watch the videos in that previous link. Note the thinly-veiled fearmongering. Note the fallacious appeals to tradition. This is what Eich’s money directly supported, and this is why his actions are so uncool.

6) This mass outrage amounts to bullying.

And now we’re down to plain old ad hominem. Eich’s defenders have always been quick to characterize this outrage as a bullying or smear campaign against him.

Tell me, which is more “bullying” to you? Trying to pass legislation that ensures certain groups of people are treated as second class citizens for what they are, or expressing outrage that a very equality-focused company hires someone who is a closeted bigot?

sigh

That’s what this whole thing boils down to, for me. People who want the Mozillas of the world to recognize that certain behavior is not okay, and other people who think they should be able to do what they want, without consequence.

To that second group, I say welcome to the real world – change your behavior or get lost.


Convenience vs. Security I: Change Safari’s “safe” files list

This is a rewrite of an article from last year, with more clear instructions and images this time around.

Something that you should probably know about me is that my computer making my life more difficult in the name of “security” drives me utterly up the wall. At least give me the option! Things like how Windows has a nasty habit of forcing restarts overnight, causing you to lose anything you had open.. grr. More so when you change the settings to NOT do this and they get changed back automatically in a future update.

Listen, you jerks, did you forget whose computer this was?!

But that is a rant for another time.

One of the nicest things about Mac OS X is what I’d call “thoughtful” design. That is, you see little touches in various places that make your life easier, that make you think that the developers have thought of everything, the rough edges that you’ll run into as an everyday user.

And yet, even they’re not immune to the constant irritant of outright removing convenience in the name of security.

So, Safari. It’s a nice browser. Reasonably secure, reasonably fast, uses Webkit.

One of the nice little touches is has is that it’ll automatically open some files when they’re downloaded. If you download a .zip for instance, it’s a reasonably good bet that you want the contents extracted, so it just launches the system archive utility and away you go. Nice and smooth. If this bothers you, you can turn it off with a prominently placed check box:

SafariPrefs

Here’s the thing: What is considered a “safe” file changes from time to time.

Back in Safari 5, DMGs (disk images) were considered safe files.

SafariOpenSafeFiles-1

Note the inclusion of “disk images” in the text.

This goes back to what I was talking about, removing convenience outright in the name of security. If I download a disk image inside a web browser, there is a 99.999% probability that I want to use its contents immediately.

Presumably, this was done due to the threat of malware automatically downloading to your PC and then having its disk image mounted. I’m kind of unsure what the real threat is, as long as you’re careful not to open random files on random disk images that appear on your computer unsolicited…

Thankfully, in this case, we have the ability to return that convenience on our own terms. Score one for usability!

While we can’t edit what Safari thinks a safe file is by hand, Mac OS has two very cool features we can use to work around this silliness. AppleScript, and Folder Actions.

  • AppleScript is a scripting language with deep ties into the operating system. (As the name implies ^^)

  • Folder Actions is a feature where you can tie AppleScripts into folders and have them do things when files are added, removed, or modified.

See where this is going? We’re going to make an AppleScript that opens certain files placed into our Downloads folder automatically.

The first thing you should do is open up your AppleScript editor. This will be under Utilities in your Applications folder.

ApplescriptEditor

AppleScript is pretty simple, yet pretty powerful. You’ll notice that it sounds a lot like english. The hardest part is spelling “receiving” correctly :)

Paste this block of text into your AppleScript editor:

‘Open folder contents on add.scpt’
1
2
3
4
5
6
7
8
9
10
11
on adding folder items to this_folder after receiving added_items
  try
      repeat with this_item in added_items
          tell application "Finder"
              if name extension of this_item is "dmg" then
                  open this_item
              end if
          end tell
      end repeat
  end try
end adding folder items to

It should be relatively obvious what happens here. Whenever an item gets added to our folder, Finder is told to open the file if it’s a .dmg.

Now we need to make this a folder action. Save your script as something memorable, like “Open folder contents on add” then move it into the Folder Actions folder. You can find this under /Library/Scripts/Folder Action Scripts. (You’ll be prompted for your password here.)

Folder Action Scripts folder

This will make the script you just created ready for the next step.

Now, you need to find your user folder. The simplest way to do this is to click Downloads in the sidebar, then right-click and hit “Show enclosing folder”.

Right click on Downloads in the main window now, go to Services, and select “Folder Actions Setup…”

Folder actions on Downloads folder

As soon as you click on this, you’ll be prompted for “Choose a script to attach”. The script you just saved will be in this list. Click it, and hit attach.

Folder actions window

Once you do this, simply close the window. Now it’s time to test.

If you’re like me, you’ll have a ton of junk in your downloads folder already. Grab a disk image file from there and throw it onto your desktop.

Then, move it back into downloads. As soon as you hear the “sproing”, the disk image window should come up in a couple of seconds.

This may take a bit longer to work than usual the very first time. (Not sure why, either.)

And you’re done! Any time you download a disk image from now on, it automagically opens. The way it always should have.


UniBeast 1.7.0 released today, same DRM shenanigans and hypocrisy apply

One day after my last post, talking about how silly the Tonymacx86 attempts at “antipiracy” are (considering that their tools amount to nothing greater than a software crack themselves), version 1.7.0 has been released.

Among the change notes is this:

  • Removed misleading messages

No way!

So I downloaded the latest version and extracted it as usual. To my utter surprise, the preinstall script inside extra.pkg is removed outright!

Well then. So either they’ve gained principles and removed the check, or it’s been hidden elsewhere.

Let’s find out!

Skaia:~ tk$ mv UniBeast\ -\ Mountain\ Lion\ 1.7.0.pkg Unibeast170.pkg

Skaia:~ tk$ pkgutil --expand Unibeast170.pkg UniBeast170/

Skaia:~ tk$ grep -R piracy Unibeast170/.*
./Distribution:\b \cf0 Sharing or distributing the produced USB drive or it's contents is piracy and not condoned by tonymacx86 LLC
./dsmos.pkg/Scripts/preinstall:# Sharing or distributing the produced USB drive is piracy and not condoned by tonymacx86 LLC.

Oh. Apparently I ask too much; they just moved it.

..into a package called “dsmos”.

Now, you see, that’s very interesting. DSMOS in any other context would refer to a Mac OS kernel extension. It stands for “Don’t Steal Mac OS X”. This module, via some encryption trickery, uses the hardware SMC present on real macs to prevent the OS from booting on any device other than Apple hardware.

I say this is interesting, because this DSMOS kernel module is patched around by the components of Unibeast to allow Mac OS X to boot!

There’s that honor among thieves, again. Disregarding and cracking one part of Apple’s rights while going out of their way to uphold the other.

What the f*ck.

So let’s see what they’re checking this time. Inside Unibeast.pkg/dsmos.pkg/Scripts/preinstall:

  • Lines 10-15: Check that the volume mounted isn’t called “Mac OS X Install ESD”

  • Lines 17-22: Check for the existence of _MASReceipt/reciept in the install app

  • Lines 24-29: Performs a md5sum of the receipt file to ensure it matches f4747dbc07df72ad92a84186e2b5488d (huh?)

  • Lines 31-36: Checks to see if the receipt file is less than 4600 bytes

  • Lines 38-43: Checks to see if the phrase com.apple.InstallAssistant.MountainLion is not in the reciept (??)

They’ve definitely scaled up a bit, adding two more checks. Much to their credit, they no longer assert that a missing receipt is an indication of piracy.

Now, if they’d remove these boneheaded checks outright, we could get back to every person being able to run whatever code they want on their own computer. But, barring that, we have to fix it ourselves..

The fix for 1.7.0 is identical to the fix for the earlier version, save we change a path and a digit:

pkgutil --expand "UniBeast\ -\ Mountain\ Lion\ 1.7.0.pkg" Unibeast-tmp && sed -e 8,47d -i bak Unibeast-tmp/dsmos.pkg/Scripts/preinstall && pkgutil --flatten Unibeast-tmp Unibeast-170-fixed.pkg

If this is problematic for you, I’ve also created an Automator app which will make the same change: Unibeast1.7.0-Patcher-V2.zip

Edit: Nope. Just use the command line above (thanks John!).

You should probably be familiar with the command line before making a modification like this anyways, and if not, you’re going to have a bad time hackintoshing ;)

Further Edit: The command above will only work on a Mac. It’s assumed that you have one since you’re using Unibeast, but if you unpackage the .pkg some other way on Linux, the sed command changes as follows:

sed -i -e '8,47d' Unibeast170/dsmos.pkg/Scripts/preinstall

You’ll lose the cute googly eyes on the installer, but alas, such is the price of freedom :)

TK Out.


Honor among thieves: The Tonymacx86 hypocrisy becomes a story

Well, this was unexpected.

The very last post here (at least I guess, more on that in a minute) has garnered me a “DMCA” takedown notice from an unspecified “Tonymacx86 legal”.

Why all the brackets and air quotes, you ask? Because the message I received isn’t worth the bytes used to compose it.

I’d assume receiving such a notice would be rather intimidating- however .. well, let’s just have a look shall we?

A missive from a sad, bleak future

Subject: DMCA Take Down Notice From: ModBot To: tk@tkware.info Cc: team team@tonymacx86.com (my name and address)

Sir,

You are in violation of DMCA by posting the source code to UniBeast which is copyrighted by tonymacx86 LLC and is documented on line 8 in the content in question. This content along with any modified versions of UniBeast must be immediately removed from your site and any other site or server that you have shared this content with.

Failure to comply with this notice will require us to take further action.

This communication and it’s content is confidential. As such, this content may not be disclosed outside of this email or any future communications by either party.

Sincerely,

tonymacx86 LLC Legal

Sounds pretty bad.

Unfortunately, the folks behind “tonymacx86 LLC Legal” seem to be unclear on what a DMCA takedown notice is and requires.

The digital what?

The Digital Millenium Copyright Act is a law, passed by the 105th congress, which amends the US Code to reflect realities of the connected world we live in. It sets out further definitions and extensions of copyright, basically.

The “notice” we’re referring up to above is a weak attempt (much like their weak DRM scheme from last post) at the real thing.

A quick reading of the DMCA, section 512, subsection 3, paragraph A, sets out these requirments.

To wit:

(3) ELEMENTS OF NOTIFICATION-

(A) To be effective under this subsection, a notification of claimed infringement must be a written communication provided to the designated agent of a service provider that includes substantially the following:

(i) A physical or electronic signature of a person authorized to act on behalf of the owner of an exclusive right that is allegedly infringed.

(ii) Identification of the copyrighted work claimed to have been infringed, or, if multiple copyrighted works at a single online site are covered by a single notification, a representative list of such works at that site.

(iii) Identification of the material that is claimed to be infringing or to be the subject of infringing activity and that is to be removed or access to which is to be disabled, and information reasonably sufficient to permit the service provider to locate the material.

(iv) Information reasonably sufficient to permit the service provider to contact the complaining party, such as an address, telephone number, and, if available, an electronic mail address at which the complaining party may be contacted.

(v) A statement that the complaining party has a good faith belief that use of the material in the manner complained of is not authorized by the copyright owner, its agent, or the law.

(vi) A statement that the information in the notification is accurate, and under penalty of perjury, that the complaining party is authorized to act on behalf of the owner of an exclusive right that is allegedly infringed.

tl;dr: The law sets out 6 things required for a DMCA notice to be considered legitimate.

Failing 6 ways from Sunday

Looking at these 6 things, and the “notice” I received, there are a few issues here. Let’s compare what the law requires with what I received:

1. A physical or electronic signature of a person authorized to act on behalf of the owner of an exclusive right that is allegedly infringed.

Nowhere to be found. There’s a vague “tonymacx86 legal”, but no real signature. Certainly nothing resembling a real name or any legitimate pointer at a real person.

2. Identification of the copyrighted work claimed to have been infringed, or, if multiple copyrighted works at a single online site are covered by a single notification, a representative list of such works at that site.

This works – sort of. They claim I’m infringing their copyright to the UniBeast source code. Aaand they don’t really say much more than that.

3. Identification of the material that is claimed to be infringing or to be the subject of infringing activity and that is to be removed or access to which is to be disabled, and information reasonably sufficient to permit the service provider to locate the material.

Nope. The message refers to a “line 8”, but doesn’t give so much as a web link. Line 8 of what? Line 8 of my blog? Line 8 of my famous recipe for chocolate chip cookies? Line 8 of my telephone pool?  The message reads as “the content in question” – what content? Where?

4. Information reasonably sufficient to permit the service provider to contact the complaining party, such as an address, telephone number, and, if available, an electronic mail address at which the complaining party may be contacted.

Not even close. No address, no phone number. All I get are two nebulous email addresses (on the from: and cc: lines) which, for all I know, go into a bit bucket somewhere.

Oddly enough, Tony’s site, and the email, makes a number of references to a “tonymacx86 LLC”. I thought I’d be proactive and get the necessary contact information from their whois. Let’s see here:

Skaia:~ tk$ whois tonymacx86.com

Registered through: GoDaddy.com, LLC (http://www.godaddy.com)
   Domain Name: TONYMACX86.COM
      Created on: 12-Jan-10
      Expires on: 12-Jan-15
      Last Updated on: 23-Dec-12

   Registrant:
   Domains By Proxy, LLC
   DomainsByProxy.com
   14747 N Northsight Blvd Suite 111, PMB 309
   Scottsdale, Arizona 85260
   United States

   Administrative Contact:
      Private, Registration  [email protected]
      Domains By Proxy, LLC
      DomainsByProxy.com
      14747 N Northsight Blvd Suite 111, PMB 309
      Scottsdale, Arizona 85260
      United States
      (480) 624-2599      Fax -- (480) 624-2598

Oh wow. Not even a legitimate phone number. They registered the domain through “DomainsByProxy”, a privacy protection service which renders any random person unable to contact the party on the other side.

Great for random people running websites, but of questionable use for a legitimate “business”.

5. A statement that the complaining party has a good faith belief that use of the material in the manner complained of is not authorized by the copyright owner, its agent, or the law.

No such statement in the email. This is basic, basic boilerplate that any DMCA will contain. This only further confirms my suspicion that this email was created by some random, not by a legitimate legal team.

6. A statement that the information in the notification is accurate, and under penalty of perjury, that the complaining party is authorized to act on behalf of the owner of an exclusive right that is allegedly infringed.

Again, no such statement.

Conclusion

Congratulations, “tonymacx86 LLC Legal”! Out of the 6 elements required to make a DMCA notice, you successfully completed zero of them.

"Epic Fail Guy would be proud."

Speaking of confirming suspicions, dear readers, this should raise further question in your mind if you plan on using any Tonymacx86 tools for your Hackintosh needs. Why would a legitimate organization/person/group/thing take the extraordinary step of sending fake legal notices to someone who points out that they’re both acting hypocritically and ineffectively?

Also of note is the fact that he sent this notice to me, personally. DMCAs are always supposed to be addressed to the service provider (hosting company, ISP, etc). I’d wager this didn’t happen because, if he did, they would have rejected his missive out of hand (for the reasons above). And well, it’s kind of hard to intimidate a random blogger into shutting up about your broken system, if nothing ever happens to them, now isn’t it?

Oh, and another quick note. Should any “tonymacx86 Legal” people be reading this, consider this your notification that any further communiqué with me will be published, critiqued, and quite possibly mocked on this website. Your “confidentiality notice” is about as worthless as your “DMCA”. Furthermore, should they actually decide to pull their heads out and build a passable DMCA notice, it will also be submitted to the Chilling Effects clearinghouse for public scrutiny and comment.

I await the next turn of this story with bated breath.


Hypocrisy, thy name is Tonymacx86

Or: Why do I keep getting install failures when I try to use UniBeast?

So I’ve spent this past weekend in a kind of interesting situation. I own two macs, you see. One at home (which is very much dead, after a rollover accident which saw it chucked out the window, and Apple wanted north of $1K to fix), and one at work. Both of these devices run Mountain Lion.

Well, since the dead mac is basically useless to me, I want to take its copy of Mountain Lion and install it on my PC.

Technically, this is against Apple’s EULA. Realistically, I don’t put too much stock in what a megacorp claims their rights are on something that I owned and purchased :)

So I headed over to the bay and downloaded a copy of the App Store Mountain Lion installer, with the intention on using it with a Tonymacx86 tool called Unibeast to generate a flash drive I can use to install the OS on my desktop.Well, I go through the process, and the installer quits, saying it encountered an error.

I dig through my system logs, and I see this gem:

Jan 26 21:16:12 Skaia.local installd[3712]: ./preinstall: Piracy attempt detected, no MAS receipt found, exiting

I originally thought this was a new Apple check, so I take that error message verbatim to Google. Where I end up is the Tonymacx86 forums. Lots of people having install failures.

Their response is one that’s obviously canned: “Your copy of ‘Install Mac OS Mountain Lion.app’ is incomplete, redownload it from Apple”.

Interesting.. I think. It seems they’re being terribly evasive about this.

Well, the error message is coming from a script called preinstall, so let’s look at that.

I use pkgutil to unpack the .PKG installer:

pkgutil --expand Unibeast.pkg Unibeast-tmp

Then, a grep command later:

grep -iRo piracy Unibeast-tmp/
preinstall: piracy

Sure enough, in the preinstaller script, is this lovely bit of weak-sauce DRM:

preinstall.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 if hdiutil detach "/Volumes/Mac OS X Install ESD/" -force  -quiet $2> /dev/null; then
            echo " "
            echo "Piracy attempt detected, exiting";
            echo " "
            exit 1
    elif [ "$(file -b /Applications/Install\ OS\ X\ Mountain\ Lion.app/Contents/_MASReceipt/receipt)" != 'data' ];then
            echo " "
            echo "Piracy attempt detected, no MAS receipt found, exiting";
            echo " "
            exit 1
            elif ! grep -q com.apple.InstallAssistant.MountainLion /Applications/Install\ OS\ X\ Mountain\ Lion.app/Contents/_MASReceipt/receipt ;then
              echo " "
                    echo "Piracy attempt detected, invalid MAS receipt, exiting";
          echo " "
                    exit 1
      else
      cp /Applications/Install\ OS\ X\ Mountain\ Lion.app/Contents/_MASReceipt/receipt "${3}/.receipt"
    fi

Crude DRM in a tool which exists only to help break Apple’s DRM.

I also wonder why they’re saving off that receipt file to another location.

In any case:

It is now my firm belief that the Tonymacx86 project or any files or tools sourced from there can NO LONGER BE CONSIDERED TRUSTWORTHY.

If they’re willing to resort to tricks such as this to waste your time, using a script that runs with elevated permissions, it’s a quite short jump from there to causing system damage.

Imagine instead of echoing something out to the syslog, they threw an rm in there on something vital. A kext or two. Doesn’t take much to make a system unbootable.

I’ll be staying far, far away from these buffoons in the future.

Now, as an example of how utterly ineffective this kind of “DRM” is (like most kinds of DRM actually), here’s how you fix the bug and get Unibeast to work regardless of the source of your Mountain Lion installer. In one line of bash:

pkgutil --expand Unibeast.pkg Unibeast-tmp && sed -i 27d Unibeast-tmp/multi.pkg/Scripts/preinstall && pkgutil --flatten Unibeast-tmp Unibeast-fixed.pkg

We unpack, drop the first 27 lines of the preinstall script (which serve no purpose whatsoever other than to inconvenience people), then repack.

Run, and you’re good.

I reiterate though, you should think very long and hard before using any tools from these people in the future.


SQL and Shell Shenanigans!

Two big projects I’m working on right now..

I’m putting the Minecraft project on the back burner for now – it provides most of the same data as the management dashboard on the host’s site.. Kind of want to add in disk usage and a couple of other small metrics, but that can come later.

The story generator is going to be more difficult (the Minecraft one is one of those problems that can be solved by brute force and time.. you know it’ll work, it just has to be configured). This will take some messing around to make work the way she wants it done.

I’ve learned a ton about SQL recently by messing around with this… For instance, another part of the same “bot” uses INI files for a profile system, and I want to migrate that to a database backend as well. There are 3 tables here..

(insert image)

The problem.. given some profile text, how do I find out who owns it? Mistakenly I thought this would need a JOIN of some kind, problem is how do you filter a join? If I were to say, join the items_data with the items_meta table using itemid from data and id from meta, I end up with a result set that includes the full content of the items_meta table.

Nope.. the right solution ended up being a nested query. You have to build it from the top down (start at owners, go to meta, go to data) instead of the other way around.

select ownernick from owners where id in
(select owner from items_meta where id in
 (select itemid from items_data where itemdata like "%some stuff%"
 ))

Which, when run, gives you exactly what you asked for – an ID from a post.

One challenge down :)

The one thing I’m missing now is a decent tool to build SQLite databases. Most of the interfaces suck for different reasons, are buggy as hell (I’m looking at you, almost every Windows one out there), and are just plain not enjoyable to use. I’d love something like MySQL Workbench but for SQLite, but..

I hope to have a working version of this done within the week. If this kind of random junk interests you, you can follow along using the Github link above.


Hello (again) world!

Well then, that was a ride and a half. Doing a massive server migration in the middle of crazy times at work was probably not the smartest idea I’ve ever had. Got to give a shout out to the folks at Hetzner (http://hetzner.de) for the most reasonably priced hosting I’ve ever seen anywhere. Seriously, they make stateside hosting seem like a huge rip off.

In any case, in lieu of starting with some overblown magazine-esque site that tries too hard to be Ars Technica, I’m going to start fresh, with a new theme, a new focus, maybe bringing in a couple of of my better articles from v2.

This is TKWMMB version 3 – and you know what they say, third time’s the charm :)