Kirsle.net logo Kirsle.net

Welcome to Kirsle.net!

This is the personal homepage of Noah Petherbridge, and it's where I keep my web blog and various creative projects.

I blog about anything I find interesting, and since I have a lot of varied interests, my blog entries are kind of all over the place. You can browse my tags to sort them by topic and see which ones I frequently write about, or the archive has a complete history of my posts, dating back to 2008!

Besides my blog, I have pages for my creative projects, which are linked to on the navigation bar.

I write a lot about Linux and Android, Minecraft, and I like to rant about stuff. Generally anything that makes me curious. Also check out my Bookmarks for all sorts of cool websites about various topics I'm interested in.

For the geeks: this website respects your privacy and doesn't run any third party ads or analytics. This site speaks HTTP and doesn't require any JavaScript to work.

Pidgin Theme: Native Emoticons
October 9, 2011 by Noah
I've put together an emoticon theme for Pidgin that uses the native emoticons for AIM, MSN and Yahoo Messengers.

AIM emoticons use the shiny yellow version from AIM 7:
AIM Emoticons

MSN uses the standard emoticons up through Windows Live Messenger 2009, and Yahoo uses the usual native Yahoo icons.

Download: Pidgin-Native-Icons-1.0.tar.gz (211 KB)

Tags: 0 comments | Permalink
Perl -T
September 30, 2011 by Noah
I've now enabled Taint Mode on my Siikir CMS, for Kirsle.net, Siikir.com and RiveScript.com (which now runs the Siikir code as well).

Fortunately it wasn't too difficult to fix my code for taint mode to work. I was already centralizing my various string filtering functions to a small handful, which just needed to untaint the strings before returning them.

Then it was just a matter of making sure I ran these filters everywhere that a user ID gets passed into a function (I was relying on the fact that my userExists() check would fail if you give a bad user ID number, but the variable was technically still tainted so I had to fix that properly).

I've thoroughly tested all areas of my sites to make sure nothing broke. Hopefully I didn't miss any. :)

Tags: 0 comments | Permalink
Android - MMS Without Data
September 20, 2011 (updated January 23, 2023) by Noah
UPDATE (2017/02/07): because some people can't read, I thought I'd reiterate the key points here at the top of the post:
  • MMS picture messaging simply requires mobile data to be enabled (how do you think all those JPEG bits are getting transferred? They won't fit in the 160 character SMS limit!)
  • The steps on this post end up with mobile data enabled so that MMS works, but it blocks mobile data for Internet use so the other apps can't use it.

Any further comments being like "hurr durr you get MMS to work without data by turning on data" will be redirected to /dev/null. And anyway, this blog post was written when Android 2.3 was current and the steps probably don't even line up 1:1 any more.


UPDATE (2023/01/22): for more clarification, in recent years I've learned a hella lot more about cellular APNs especially since I started tinkering with my Linux phone. The cliffnotes are:
  • Plain text SMS messages get to ride for free. Your phone is making frequent pings to the tower (standard voice signal support) and there was some unused header space on those pings that SMS can slot right onto. That's why it has a 160 character limit: that was the size of the free space on those standard pings.
  • MMS messages are data, and go over the Edge, 3G, 4G, LTE, 5G, etc. data channels.
  • This blog post was about: can I disable mobile data for Internet so that apps don't use my data; but still have MMS working on my phone, which turning mobile data off would also block.
  • An APN can be configured for MMS delivery, for internet data, both, or neither. This post sets the APN for MMS only.

This post was written in the Android 2 days, and I don't know how you do this on modern Android today. Hopefully the above gives you some useful information, and let me know in the comments what the instructions would be today. On to the original post:


Today I finally decided to break up with T-Mobile and take my number and Nexus One phone to AT&T, as a prepaid phone (tl;dr - I'm tired of cell phone ISPs locking people in to contracts and then they can't do anything about it when the ISP changes their plans around).

My Nexus One was originally for T-Mobile's network, so it doesn't work with the 3G on AT&T's... but that's fine because my AT&T plan doesn't include data. But, my phone can still use AT&T's Edge network.

I don't want any random background apps using the Edge network and costing me usage fees when I'm out and about. But, if I disable Mobile Data altogether, picture messaging (MMS) stops working too. So after a lot of searching around I seem to have found a way to disable the mobile network for all apps, but still allow MMS to be sent/received using it.

On my Nexus One, from the home screen:

  1. Push the menu button and pick Settings
  2. Pick "Wireless & networks"
  3. Pick "Mobile networks"
  4. Make sure "Data enabled" is checked (MMS won't work either if you disable it here!)
  5. Go to "Access Point Names"
    • On my phone, the only APN here was named "ATT (wap.cingular)"
  6. Scroll down to the "APN type" setting.
    • On my phone, the original value for this setting was "default,supl,mms"
  7. Change its value to be only "mms".
  8. Push the menu button and pick "Save."
After this, I tested it. I was able to send and receive MMS messages (which turned on the Edge network notification), but apps like Facebook, Google+, and the mobile web browser all complained that I didn't have an Internet connection.

YMMV.

Tags: 33 comments | Permalink
Gnome Panels for Windows XP
September 3, 2011 by Noah
I know this information is pretty outdated nowadays, as it only works with Windows XP and older. But it's something I discovered a few years ago:

How to get a Gnome-like panel layout on Windows XP (and Windows 2000 and some older versions as well). Here's what the end result will look like:

Gnome Panel Layout on Windows XP
Click for a bigger screenshot (800x600).

The how-to:

  1. First, set your window theme to "Windows Classic" mode. It looks better this way.
    1. Right click the desktop, go to Properties.
    2. On the "Appearance" tab, change the style to "Windows Classic."
    3. Click Apply, then OK.
  2. Right click the task bar and make sure "Lock the task bar" is unchecked.
  3. Create some folders in My Documents to hold your panel icons and menus. Recommended folder names:
    • Applications
    • Places
    • Launchers
  4. Fill these folders with shortcuts to your favorite programs (you may want to put additional folders under Applications to organize them).
  5. Right click the task bar and go to "Toolbars -> New Toolbar...", browse to your Launchers folder and select it.
  6. Grab the handle for your new Launchers toolbar and drag it onto your desktop. This creates a floating window. Now drag the window by its title bar to the top of the screen. This will dock it on the top (resize it vertically so it's as small as it can be).
  7. Right click your new panel and make sure "Show title" and "Show names" is unchecked, so that all that's on the panel are icons (just like how the Quick Launch toolbar usually looks).
  8. Right click the panel and add new toolbars for your Applications and Places folders too. Rearrange the toolbars so that only the titles of the new toolbars are visible, with a drop down menu.
And there you have it. In your Places menu you can create shortcuts to all your drives in My Computer. It won't dynamically update like on Gnome but it should still work pretty well.

Right click the panel and choose "Always on top" and your panel will always be visible even when you have a maximized window open.

This doesn't work on Windows Vista or Windows 7, because toolbars aren't allowed to be separated from the task bar anymore in these systems. :(

Tags: 0 comments | Permalink
Run Fonality HUD on Linux with Wine
August 16, 2011 by Noah
Disclaimer: running Fonality HUD on Linux isn't supported by Fonality. The only supported platforms for HUD are Windows and Mac OS X. So, if you can't get HUD to run on Linux, don't call tech support about it because it's not supported.

That being said, here's how to get Fonality HUD to run on Linux using Wine (a compatibility layer that runs Windows executables on non-Windows platforms).

There are two methods: using your system version of Wine, or use PlayOnLinux which can manage multiple versions of Wine for you.

Using your system Wine

1) Install Wine

# For Fedora/RedHat users
$ sudo yum install wine

# For Ubuntu users
$ sudo apt-get install wine
2) Install Java Runtime Environment in Wine

I recommend creating a new wine prefix specifically for HUD, just to keep it separate from any other Wine apps you may use. HUD will require the Java Runtime Environment to be installed. The installer for HUD will normally try to install this automatically, but in my experience the installer might not work, so it's best to get Java manually.

Get the Windows JRE installer from here (or else Google it). I've had better luck using the Offline installer so I recommend using that.

Install Java in your wine prefix:

# Using a wine prefix:
$ mkdir ~/.HUD3
$ env WINEPREFIX="$HOME/.HUD3" wine jre-6u25-windows-i586.exe

# Not using a wine prefix:
$ wine jre-6u25-windows-i586.exe
3) Install HUD

Now use Wine to run the HUD installer.

# Using a wine prefix:
$ env WINEPREFIX="$HOME/.HUD3" wine hud-*.exe

# Not using a wine prefix:
$ wine hud-*.exe
The launchers for HUD in the menu may or may not work, if you have trouble with them I recommend just creating your own launcher. These details should work fine:
  • Command:
    env WINEPREFIX="/home/kirsle/.HUD3" wine 'C:\Program Files\Fonality\HUD3.5\HUD.exe'
  • Working directory: /home/kirsle/.HUD3/drive_c/Program Files/Fonality/HUD3.5
Be sure to substitute your real home directory there. The icon for HUD will probably be found somewhere under your ~/.local/share/icons folder, so browse around for it.

Now hopefully everything should "just work."

If not, you may need to use PlayOnLinux instead, because sometimes particular Wine versions don't get along very well with HUD.

Using PlayOnLinux

This will be similar to the above steps, but we'll be using PlayOnLinux so we can use a Wine version that's different than the system one.

1) Get PlayOnLinux

Visit PlayOnLinux.com and install it.

2) Begin installing HUD

1. In the PlayOnLinux window, click "Install"
2. Click "Install a .pol package or an unsupported application" at the bottom of the Install window
3. Choose "Manual Installation"
4. "Install a program in a new wine prefix"
5. Name it "HUD3"
6. Check "Assign a Wine version to the program"
7. Select a Wine version to use. You can manage and download Wine versions from PlayOnLinux by going to "Tools -> Manage Wine Versions" from the main window.
8. It will create the wine prefix.

3) Install Java

For now, ignore the PlayOnLinux window. Get the Java JRE installer, and install it under the wine prefix created by PlayOnLinux:

$ env WINEPREFIX="$HOME/.PlayOnLinux/wineprefix/HUD3" wine jre-6u25-windows-i586.exe
4) Continue installing HUD in PlayOnLinux

Go back to the PlayOnLinux window and continue following the prompts. Browse to the HUD installer when it asks. If it asks you to "Choose a file to exec the game", browse to the HUD3.exe from the installed application.

Caveats

This will get HUD running on Linux. It won't be perfect, and may have some bugs and crash from time to time, but for the most part it works really well. I use it every day.

Some common bugs I've found and how to work around them:

  • I can't type anything!
    Sometimes the HUD window thinks the Alt key was pressed and the menu is activated so you can't type anything in text boxes. I usually just tap the Alt key (to select the menu) and then hit Escape, and then I'm good to go.
  • Clipping when dragging the main window around
    On Wine 1.1.38 when I'd drag the main window around, the window would be "clipped" - it was as though the shape of the window wasn't moving, but the window itself was, so it looked weird. But using the Alt+Click to drag feature of my window manager (which is present on the GNOME and XFCE desktop environments) would let me move the entire window with no clipping.
And, again, running HUD on Linux is NOT SUPPORTED. You're on your own.
Tags: 2 comments | Permalink
Please Don't Use Emoji
July 22, 2011 by Noah
Update (4/4/2013): Linux distros don't support Emoji very well by default, but you can simply install the Symbola font and that will make Emoji just magically work.


Apparently, Mac OS X Lion supports Emoji icons like iOS does.

Please, nobody get in the habit of using these. Anywhere. Unless you're talking specifically to other Apple users.

Nobody else supports Apple's particular variant of Emoji icons as well as Apple does. For Linux and Windows users, all your Emoji icons you paste in Twitter updates don't work. Most of the icons will be completely broken for these users (rendering as a block character), and the few icons that do render, won't look nearly as good as on Apple devices: they'll just look like Unicode characters, i.e. using the same black-and-white font color as everything else. Not full color icons.

It's already bad enough that cross-platform mobile apps (iOS and Android) have idiots using Emoji icons everywhere (which do not display on Android at all, but show as broken block characters), but for desktop Apple users to be able to paste Emoji icons everywhere else is just the most terrible news as of late.

Don't use them. Period.

Update (2013-01-08)

I took screenshots from several popular operating systems showing an iTunes page that embeds a handful of Emoji icons to show how exactly the icons render on various different systems.

The album is here: http://imgur.com/a/WAKF2

  • Ubuntu 12.10 -- the most popular Linux distribution today -- fails to render most of the Emoji icons at all. Fedora 17, a bleeding edge Linux distribution, also fails to render most Emoji icons.
  • Windows XP fails miserably to render ALL of the Emoji icons, and most Unicode symbols besides. This is still a very popular Windows OS despite being so old.
  • Windows 7, Windows 8, and Android (tested on 4.0+) all show the Emojicons reasonably well, but what they don't do is render them with shiny, colorful Apple icons like Mac OS X does. You have to squint to see the Emojicons rendered in any reasonable font size. Android 2.2 and older don't render Emoji icons and show block symbols instead.
Tags: 21 comments | Permalink
Zenity and GNOME 3
July 18, 2011 by Noah
Another mini rant about GNOME 3.

To add to the reasons why GNOME 3 impacts other areas of the Linux ecosystem in ways I wish it wouldn't, they have changed the behavior of zenity and removed a feature just because it no longer makes sense for GNOME 3.

Zenity, btw, is a command line program for displaying simple dialog boxes and things that may be useful for bash scripts. It can pop up alerts, progress bar windows, open/save dialogs, etc.

One feature it used to have was --notification, which let you put an icon in the Notification Area ("system tray") on your desktop. But now, since GNOME 3 doesn't have the same concept of the Notification Area as other desktop environments, Zenity's --notification option no longer puts an icon in the Notification Area.

Now it uses GNOME 3's style of notification... which is, the same behavior as notify-send - it pops up a Growl-like black bubble in the corner of your screen with a temporary message (like "New updates are available").

This sucks.

I was playing with writing a desktop Google Voice app for Linux, which would have an icon in the Notification Area and notify about new texts and things. I was going to just use Tk for the GUI (even though it's ugly as sin on Linux) and use Zenity only for the notification icon. But I can't do that now! Now I might as well make my GUI in GTK+ so I can use the Gtk2 module for the notification icon.

GNOME developers, the universe does not revolve around GNOME. If Zenity's --notification is just going to duplicate the functionality of notify-send, you might as well just have switched to notify-send and leave Zenity how it was before.

More Bad Changes

Today (8/14/11) I discovered something else GNOME changed in Zenity.

I'd written a Perl script a while back that would act as a super simple front-end to Mednafen, an NES and GameBoy emulator. It just used Zenity to open a file select dialog to let you browse for a ROM to load.

But now, Zenity's file selection dialog doesn't have any way of letting you specify which directory it should look in by default. It used to start in whatever the script's current working directory was, but now it ignores all that and always starts in the "Recently Opened Files" list.

Do we need to fork Zenity now? This is so ridiculous.

Tags: 3 comments | Permalink
Soccer Mom Brigade
June 28, 2011 by Noah
The latest US news is that California attempted to ban violent video games, and instead, video games are now protected under the First Amendment.

I love it when the law blows up in the face of the Soccer Mom Brigade.

"Soccer Mom Brigade?" It's a term I made up to describe the sort of person who complains about this sort of thing. Dumb people (usually overbearing parents who don't know anything but think they need to have an opinion about their kids' lives, hence, "soccer mom") find something--no, they seek out something to bitch about, and they write angry letters to whoever they need to in an attempt to get the thing banned for everybody.

If the target of the complaints doesn't ban it straight away, the soccer mom goes on a crusade, gathering up all the other soccer moms in the neighborhood and forms the Soccer Mom Brigade, where they become very loud, very obnoxious, and make their point heard across the country, usually getting the media involved. And then stupid stuff gets banned for stupid reasons.

Example I can think of offhand: the Pokémon episode "Tower of Terror" (where they visit the Ghost Pokémon Tower in Lavender Town), because the Soccer Mom Brigade thought their little 5-year-old would relate the title of the episode to the September 11 attacks. And they succeeded. Bullshit.

Tags: 0 comments | Permalink
The AI in Pokemon is a Cheating Bastard
June 27, 2011 by Noah
I've been playing a lot of Pokemon SoulSilver lately and feel like ranting about how the AI in the game is a cheating bastard.

First of all, I don't believe the AI in Pokemon has any reason to cheat. Pokemon battles are by default completely fair. Every Pokemon owned by the enemy trainer is a Pokemon you could also go out and capture or trade to get. And all the moves their Pokemon knows are moves you could teach to your own Pokemon.

But regardless the AI feels the need to cheat. Some examples I've seen:

It knows how many turns Sleep and Confusion will last for.

When a Pokemon is put to sleep or confused, the game internally decides how many turns it will last for. Nobody should be able to see this number, the player certainly can't, but the AI does and it uses this to its advantage.

How it cheats: it knows exactly which move your Pokemon is going to wake up on, and it will use Sleep Powder or Sing on this turn to put your Pokemon back to sleep (these moves would fail if your Pokemon is already asleep).

Evidence: the AI fails sometimes. If the enemy Pokemon is too fast, it will use Sleep Powder, it will fail because your Pokemon is already asleep, and then your Pokemon will wake up. This happens all the god damn time. You can also confuse the AI by using an item on the turn your Pokemon is about to wake up on (but, this is all down to chance, since you don't know which turn it will wake up on).

It knows in advance how much damage its attack will do

I had a Gyarados, which has high defense so most attacks to it will do less damage than expected. Regardless, the AI knew my Gyarados had only 14 HP left (yes, it cheats and sees how much HP you have, while you can't see the enemy's HP at all). It knew a Quick Attack would deal exactly 14 HP damage, taking into account the defense of my Gyarados.

But I foiled its plans by healing my Gyarados. It followed up with a Quick Attack which did exactly 14 damage.

It knows what move you're about to use

I was battling Bruno of the Elite Four, and he has a Forretress that knows the move Protect.

Protect always goes first in the turn it's used, and it prevents the opponent's move from hitting.

Bruno's Forretress is a cheating bastard though, because it only uses Protect when you're going to use your most powerful move. Forretress is weak to fire, so I used my Typhlosion's Blast Burn move, which is a very powerful fire attack. Forretress used Protect so it failed; I tried again, it used Protect a second time. Tried again, and this time it hit, because Forretress knows that Protect can't be used more than twice.

I battled Bruno later with my Umbreon. I used Dark Pulse, the most powerful move my Umbreon knows, and Forretress used Protect to block it.

I figured Forretress was gonna use Protect again, so I used Faint Attack instead. This hit. So I tried Dark Pulse again -- Forretress used Protect and blocked it. I tried again, Forretress tried Protect again, but it failed (you can't use it more than twice). So, I confused the AI there.

Anyway, I just think this whole thing is ridiculous. The AI has no reason to cheat. It wouldn't be that hard for Nintendo to program the AI to pretend it doesn't know all this stuff that it shouldn't know about the battle (hint: they just don't need to program it to look). There's probably logic in the code like, "if the player chose the player's most powerful move, and protect hasn't been used twice in a row now, use protect". Nintendo should just NOT write that code. Pokemon battles are fair by default.

Tags: 105 comments | Permalink
Open Social Networking
June 23, 2011 by Noah
Today I've implemented "Log in with Facebook" support for my Siikir CMS (and as of now, it is only live on Siikir.com and not Kirsle.net; it probably won't be enabled on Kirsle.net because this is a sort of "single user" site).

So I've decided to post about a fleeting thought I once had, about where the Siikir CMS may end up one day (specifically, for Kirsle.net). Just to clarify, both siikir.com and kirsle.net run my Siikir code; they only differ in the pages and web design. The back end is kept in sync between the two.

I increasingly dislike Facebook, but I'm sorta stuck with it because it's the only way to keep in touch with certain people. There are a few open source, distributed social networking projects, such as Diaspora and GNU Social. The idea of these distributed networks is that anybody can set up their own Diaspora or GNU Social server, create their account on their own server (or let their friends or family create accounts), and they can still connect with millions of others who have accounts on various different servers.

They do this by utilizing open standards like OAuth and OpenID to share content between the servers. In theory, every Diaspora server should be able to communicate with every GNU Social server, even though the software is different, because they use the same protocols for sharing data.

I'm not interested in creating a social networking platform for the sake of creating a social networking platform. I'm more interested in finding something to replace Facebook for me. This is the primary goal of creating my Siikir CMS. I built it because I wanted to run Kirsle.net on it, and so Siikir supports web blogs, photo albums, messaging and commenting.

This way I can keep my blog and photo albums and things on Kirsle.net instead of on Facebook. But, I'm slowly adding Facebook integration into the Siikir CMS, so that eventually, I'll be able to post new photos on Kirsle.net and have my Facebook news feed automatically notify my friends to come and check them out. This is the short term goal; the long term goal is to implement OAuth and other standards so that Siikir can link with Diaspora and GNU Social servers.

In other words, Siikir may eventually grow up to be a distributed social network platform like Diaspora... even though that isn't really its goal.

(siikir.com will probably remain as an isolated island to itself, because it doesn't really fit the model of "general purpose social network." But if the Siikir code gets to this point, it will be released as an open source social networking platform)

Tags: 1 comment | Permalink