Compile Allegro 5.0.x on Linux Mint and Ubuntu

Compile Allegro 5.0.x on Linux Mint and Ubuntu

As a sister article to my Cross Compile Allegro 5 Programs in Linux for Windows post, here are the steps I took to get Allegro 5 installed on Linux Mint 13, Linux Mint 14, and Ubuntu 12.10:

  1. Download and extract the latest .tar.gz-compressed source.
  2. Install the required packages: sudo apt-get install -y cmake g++ freeglut3-dev libxcursor-dev libpng12-dev libjpeg-dev libfreetype6-dev libgtk2.0-dev libasound2-dev libpulse-dev libopenal-dev libflac-dev libdumb1-dev libvorbis-dev libphysfs-dev
    • [Note] Would be a good idea to do a sudo apt-get update first.
  3. Create a workspace: mkdir "build" && cd "build/"
  4. Create make files: cmake "../"
    • [Note] By default cmake will want to configure make for a release shared build. If you want a debug build you will need -DCMAKE_BUILD_TYPE=Debug or -DCMAKE_BUILD_TYPE=Profile for a profiling build.
  5. Compile: make
    • [Optional] By default make will not eat up all the processing power it can. Add -j# to change this behavior, where # is the number of job you would like to have running in parallel. If you machine is more or less idle the number of processors available should not hurt anything. If you are using your machine you might want to some half that number instead.
  6. Install to respective paths: sudo make install && sudo ldconfig
    • [Optional] Recommended if you are unsure as to why this step is optional.

If you want to compile an Allegro 5 C++ application– assuming you completed all the steps above and have g++ installed– you can run g++ [source file(s)] -o [output] `pkg-config --libs allegro-5.0`. There are, of course, many more Allegro 5 add-ons (check out pkg-config --list-all | grep allegro) but I will leave using those up to you to discover on your own.

As of this writing Allegro 5 v5.0.8 was the latest version.

Update 2012.11.28
Seems I already had some things installed from some other projects so I did not notice some missing dependencies. Thanks to weapon_S and sorry about that.

Shutting Down Windows 7 Without Installing Updates

Shutting Down Windows 7 Without Installing Updates

With the exception my gaming machine I have abandoned Windows. Still, however, I do some times deal with it.

One of the more common annoyances is trying to shutdown when Windows has downloaded, but not installed, updates. In this case Windows may take forever and a day to finally cut the power. If you need to go somewhere in a rush, this blows. If you are on a laptop and the battery is about to die you are better off with hibernation (which has to be enabled, takes up a decent amount of disk space, and has its own problems), putting the machine to sleep (which has its own problems), or just letting it die at the desktop. If you interrupt the update process– say, because it has been nearly 30 minutes– you risk explodeorizing your install.

There is an option built into Windows 7 that will allow you to add an ‘Install Updates And Shut Down’ in Shut Down Windows dialog box option. For some reason it is not enabled by default, but that is pretty easy to take care of:

  • Start, Run, enter gpedit.msc.
  • Surf over to User Configuration, Administrative Templates, Windows Components, Windows Update.
  • Edit Do not adjust default option to ‘Install Updates And Shut Down’ in Shut Down Windows dialog box to be Enabled. Make sure Do not display ‘Install Updates and Shut Down’ Option in Shut Down Windows dialog box is not set to Enabled.

The option will only appear when there are updates that need installing. You could also change your Windows Update settings but if you got here you probably are not interested in doing that.

I have not tested this with other versions of Windows. I assume this applies to Vista/Server 2008 and up but do not hold me to that.

Encrypted Linux Mint 13 Install

Encrypted Linux Mint 13 Install

Check out my other article instead of this one.

Unity is a nice interface which is becoming increasingly polished. As a matter of fact I have switched a number of family members over and they are loving it. It, however, is seriously flawed for “power users” like myself. For example, I often have many text editors open at once and Unity slows me way down (yes, I lived in it for at least one month to give it a fair chance, no this is not an article about why I dislike Unity for my own use).

I have since moved over to Linux Mint 13 with Mate. Since I hate the idea of having any of my data unencrypted, and Linux Mint 13 does not support it in the installer, I needed a solution. I even held off installing it on all my machines until I could ensure my useless collection of funny pictures were protected from… some… scary, funny picture-related threat.

Any way, we should get started before I start looking at those pictures for the rest of the day. I am going to assume sda here but if you want to use another disk simply substitute for that.

Here we go:

  • Boot into any Linux Mint 13 installation disc.
  • Setup our storage:
    • In a terminal install and load the required tools: sudo apt-get install -y cryptsetup lvm2 && sudo modprobe dm-crypt
    • In a terminal partition sda: ( echo "o" ; echo "n" ; echo "p" ; echo "1" ; echo "" ; echo "+256M" ; echo "n" ; echo "p" ; echo "2" ; echo ""; echo ""; echo "w" ) | sudo fdisk /dev/sda
      • Some might call a 256MB /boot partition a bit excessive. Storage is cheap so it does not bother me too much but you could down down to ~64MB or so. Resizing an encrypted partition is not as easy as resizing an unencrypted one so if you are unsure ~128MB might be a better minimum.
      • This will wipe all of sda.
    • [Optional] In a terminal, if you are very paranoid, fill your encrypted partition with random garbage using one of these:
      • Much faster: sudo dd if=/dev/urandom of=/dev/sda2 bs=1M
      • More secure: sudo shred /dev/sda2
    • In a terminal create an encrypted LUKS device: sudo cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --verify-passphrase /dev/sda2
    • In a terminal open the encrypted device: sudo cryptsetup luksOpen /dev/sda2 system
      If you would like to do multiple installations you can replace system with virtually any name you like so long as you replace it with the same name throughout this article.
    • In a terminal format the partitions: sudo mkfs.ext2 /dev/sda1 ; sudo mkfs.ext4 /dev/mapper/system
      • I always like to specify -m 0 for both filesystems (turns off the reserved blocks percentage). If everything explodes, for some reason, and I can not boot I can always get in with a LiveCD.
  • Install Linux Mint 13:
    • Open the Install Linux Mint shortcut on the desktop.
    • When asked about the the automatic partitioning select Something else.
    • Select /dev/sda1 and click the Change… button.
      • Under Use as select Ext2 file system.
      • Under Mount point select /boot.
    • Select /dev/mapper/system and click the Change… button.
      • Under Use as select Ext4 journaling file system.
      • Under Mount point select /.
    • Make sure /dev/sda is selected for Device for boot loader installation.
    • Click Install Now.
      • When it complains about the swap space just continue as we will do this later.
      • When it complains about the the existing partitions not being formatted just continue. We formatted them in a previous step but if you like you can do it again here to get the Linux Mint 13 filesystem defaults.
    • [Optional] When you get to the Who are you screen check Log in automatically. Since you will need to enter a passphrase to unencrypt the disk there is no threat if the machine falls into the wrong hands (there are a lot of ninjas in my apartment). I recommend setting the user password to match the encrypted passphrase for simplicities sake.
    • When the installation is completed and you are prompted to restart select Continue Testing.
  • Ready new Linux Mint 13 installation:
    • In a terminal mount new installation: sudo mount /dev/mapper/system /mnt && sudo mount /dev/sda1 /mnt/boot && sudo mount -o bind /dev /mnt/dev ; sudo mount -t proc proc /mnt/proc ; sudo mount -t sysfs sys /mnt/sys
    • In a terminal change into new installation: sudo chroot /mnt /bin/bash
    • [Optional] In a terminal update out-dated pakcages: apt-get update && apt-get -y dist-upgrade && apt-get -y autoremove && apt-get clean
    • In a terminal install and load the required tools: apt-get install -y cryptsetup lvm2 && echo "system UUID=$(ls -l /dev/disk/by-uuid | grep $(basename /dev/sda2) | cut -d ' ' -f 10) none luks" >> /etc/crypttab && update-initramfs -u -k all
    • [Optional] In a terminal add swap: apt-get install zram-config ; dd if=/dev/zero of=/swap bs=1M count=$((`free -m | grep -e "^Mem:" | sed -e 's/^Mem: *//' -e 's/  *.*//'` * 2)) ; chown root:root /swap ; chmod 600 /swap ; mkswap /swap ; echo "/swap none swap sw 0 0" >> /etc/fstab
      • I often only run with zRam but it is rarely a bad idea to also have a disk-backed swap.
    • In a terminal change back to LiveCD: exit
    • In a terminal unmount new installation: sudo umount /mnt/sys ; sudo umount /mnt/proc ; sudo umount /mnt/dev ; sudo umount /mnt/boot && sudo umount /mnt && sudo cryptsetup luksClose system
  • Reboot into your new, encrypted Linux Mint 13 installation.

A few notes:

  • If you already have an installation you want to encrypt without a fresh install the steps should be very similar. You will need to setup GRUB 2 yourself as, per this article, the Linux Mint 13 installer does it for you. I have not experimented with it but it should not be too hard to figure out.
  • These instructions may very well work with other distros, too, but I have not tested that.
  • This can all probably be stuck into a script. Maybe I will some time down the road (hell, I do enough of these a month).

Update 2012.09.25
I should proof read more gooder. Sorry about that.

Raspberry Pi Uses?

Raspberry Pi Uses?

When the Raspberry Pi was announced I went and bought a pile of them. Now they sit in my apartment, unused. A long while back I got the hard floats working but now you can get that standard. I got it running videos pretty good but now there is an XMBC installation.

What to do, what to do? There is a pretty decent looking 3D-printed case with “LEGO feet” I really like the look of. Plus, the latest LEGO Mindstorm bricks are mostly unlocked– with USB and Bluetooth support– so those are potential resources for a project…

A while back I did make an automated paintball turret. It used a pretty dinky netbook as its brain so I am not too worried about the Raspberry Pi and its 700MHz ARM CPU. I am more familiar with the x86 mobobs so optimization may be a (fun) hassle. Also, since it generates so little heat, it will be a lot easier to build a case to protect it from enemy fire. Hell, if raw processing power does become an issue I can always throw in a tiny network switch and combine a few of the little guys (I was thinking USB-to-USB but, after thinking about it, USB 2.0 only does client/server so efficient polling may be an issue… I do not know).

Well, I have to decide. Perhaps it would be a good project to do with The Womantm

LEGO feet!

Update 2012.09.12
A team of people (including a 6-year-old) have clustered 64 of these bad boys. They were cool enough to include a really nice how-to so maybe I will take a crack at it over a weekend.

Update 2012.09.25
The Pi can now be clocked up to 1GHz plus it is officially supported. You can go higher but, according to the organization, you risk your hardware.

Update 2012.11.12
Been playing with some robotic and media center software a lot as of late which gave me a few ideas:

  1. The Raspbery Pi as a robotics platform/controller. Nothing new there but if I combine it with motion/depth detection (see OpenCV with stereo web cams) I could make an automated paintball sentry… or worse!
  2. A portable media center powered by the ‘Pi. With a decent battery (say, this happy ‘lil fellow), USB-powered HDMI projector, and some cheap speakers (if the projector does not provide them) I think you could have a decent setup. Well, decent enough for what it is to make me happy, any way.
  3. Control the LEGO Mindstorm from the thing. All the Mindstorms come with excellent hardware for their intended audiences/purposes. With that said, CPU and memory are limited. There are many ways to control your Mindstorm Brick via Bluetooth and/or USB. Since the ‘Pi is so light I see no issue with just sticking it on top of the whole assembly, with a battery, and using that to control the Brick, which controls everything else. Blam-O, instant my-first-programming and robotics project!
  4. Minority Report-style interface. Holographic technology– and price– are not there just yet but with a different display (say, projector with a large screen) this is very doable. There are even a lot of tutorial for similar projects out there already using OpenCV or the Microsoft Kinect.
Slow Wi-Fi Speed with Linux While on Battery Power

Slow Wi-Fi Speed with Linux While on Battery Power

I recently installed a new distro on my netbook. After using it for a few seconds I knew something was wrong with the wireless connection as it was hell’a slow. Could not figure it out at first but then I saw what I was missing: It was only slow while running on battery.

Turns out it was the power management. Whenever I went over to battery it kicked in and my ~3MB/s speeds went to ~32KB/s. Big, big drop so something must be done, right? Right.

Just create /etc/pm/power.d/wireless with:


iwconfig wlan0 power off

Then make it executable with chmod +x /etc/pm/power.d/wireless.

This will disable wireless power management whenever the machine goes to battery power. Problem solved.

Byzantium – Automatic, Secure Wireless, Mesh Networking

Byzantium – Automatic, Secure Wireless, Mesh Networking

Just a quick post to bring everyones attention to a why-did-I-not-think-of-that project by the name of Byzantium. From the site:

The goal of Project Byzantium is to develop a communication system by which users can connect to each other and share information in the absence of convenient access to the Internet. This is done by setting up an ad-hoc wireless mesh network that offers services which replace popular websites often used for this purpose, such as Twitter and IRC.

These services and web apps were selected because they are the ones most often used by activists around the world to find one another, exchange information, post media, and organize. They were also selected because they stand the best chance of being easy to use by our intended userbase, which are people using mobile devices like smartphones, MP3 players, and tablet PCs.

Unlike most mesh implementations, a Byzantium Mesh requires no specialized equipment that may not be easy to get during an emergency, just an x86 computer with at least one 802.11 a/b/g/n wireless interface.

I am a strong, strong believer that– in most cases– commodity electronics are now more than cheap and powerful enough to replace dedicated, specialized hardware. What we used to do in hardware can now be done in software with at least as much safety and security. In some cases it can be done better since the software often has knowledge of the underlying systems (think ZFS as opposed to dedicated RAID controllers).

Any way, I had a love-at-first-site (get it?!) reaction to this project so I just figured I would help spread the word.

Recursively Remove .cvs/.svn/.git Directories

Recursively Remove .cvs/.svn/.git Directories

I tend to keep backups using several methods depending on the situation. Some times I run a script that invokes rsync with rolling, date-based backup. Lately I have been experimenting with compressed/dedup archives/filesystems.

One nearly constant annoyance, though, are those pesky .svn, .cvs, and .git directories. They serve a purpose, but not within my backup that already versions its data.

In order to be rid of them I just run rm -rf `find ./ -type d -name [directory to remove]`. If you wanted to, you could stick this into a script within your path:


if [ $# == 1 ]; then
rm -rf `find ./ -type d -name $1`
echo "Script requires one argument."

This would allow you to pass the directory you want to recursively be rid of in whatever directory you call it from. Note this script will not handle spaces in the argument but for this we do not need it.

Minimal Ubuntu 12.04 Install with Only MATE

Minimal Ubuntu 12.04 Install with Only MATE

In a previous article I talked about replacing Unity with MATE on Ubuntu 12.04. It is working out very well for me but I still feel like there is more that can be done. Too many resources are being spent for things that got left over from Unity and it is bugging me.

Minimal Ubuntu Install

First things first, we need to do a minimal install of Ubuntu. You have two options here:

  • You can use the netboot disc. When prompted later in the installation do not install any of the pre-configured setups as we will install the packages we need later.
  • You can use the alternative disc. When the disc first boots just press F4 Mode and select “Install a command-line system“.

I like the netboot option best because it downloads all the latest packages during install so there is less mess. I have also had random problems with it not being able to find some packages since Ubutnu 12.04 was released. If that happens the alternative disc works just as well and will be faster since it has all its packages on the disc. It really does not matter which you choose for our purposes.

Both support encryption and both support RAID so feel free to use those if you like. I will not be covering them or the rest of the installation in this article.

Install MATE

Since everything here requires root just do an sudo -i first. Remember to log out of root (Ctrl-D) before starting MATE. Would be a good idea to do an apt-get update && apt-get upgrade before, too.

First we need to add the MATE repositories. Using nano add the following to /etc/apt/sources.list:

deb precise main
deb-src precise main

Next we need to install the packages (you can answer the hddtemp question however you like when it comes up):

apt-get update
apt-get install -y --force-yes mate-archive-keyring mate-desktop-environment xinit
apt-get update

Now all you need to do is login, type startx, and you are done! … sort of… if you are happy with the way things are you may now go away.


You now have an fast and low-resource traditional desktop at your finger tips with the stability of Linux and all the packages Ubuntu has to offer. I am so proud of you.

On my dinky little Atom-based netbook, with MATE running, this setup eats virtually 0% CPU and ~150MB of memory. Disk usage sits at ~1.7GB which is a little higher than I would like but storage is cheap so I am not too worried about it (probably all the xinit dependencies). Boot time is in the mid-single digits and that is on a 5,400 RPM disk. I imagine a decent USB stick will be very similar but I have yet to test that.

I am very happy with all this. Of course you, dear reader, are not so you will continue reading… blood from a stone, Internet Person…

MATE Extras

As of right now your menus are looking pretty bare and your audio might not work. By virtue of what I set out to accomplish there is very little installed. Here are some packages that may prove very helpful:

apt-get install zram-config preload synaptic gparted brasero mate-media-pulse mate-settings-daemon-pulse mate-bluetooth bluez-cups cups cups-pdf system-config-printer-gnome mate-conf-editor wine libreoffice libreoffice-pdfimport firefox pidgin thunderbird xul-ext-lightning vlc gimp gimp-data-extras jockey-gtk usb-creator-gtk network-manager-gnome

I am sure you will want to install a hell of a lot more but I will leave that up to you. You may want to install less, in which case do an aptitude show [package] to see what a package does before installing.

For some reason there is no supplied way to do “nothing” when the laptop lid is closed. If you want this functionality back start up mateconf-editor, set /apps/mate-power-manager/buttons/lid_ac and /apps/mate-power-manager/buttons/lid_battery to nothing.

Auto Boot into MATE

Maybe you want to automatically boot into MATE. Maybe you are just that lazy. Maybe a white-on-black terminal killed your father and now, as a result, you are too afraid to face one… fear not, citizen! We did not install a display manager since MATE does not currently come with one but we can easily fix all that with a single command:

apt-get install slim

slim is very light weight which is why I chose it. The trade off is it does not support much besides logging you in. After installed just open /etc/slim.conf and set default_user to your username and auto_login to yes (make sure you uncomment both, of course). The MATE Wiki also recommends that you stick exec ck-launch-session mate-session in .xinitrc but everything works fine without it for me so experiment with it.

If you really, really do not want to install a display manager (like me) you could just stick startx at the bottom of .bash_profile (if it does not exist create it). This file sits in your home directory and is executed every time you log in.

Known Issues/Notes

There are a few things that are not show-stoppers for me but I want to spend some time fixing later.

  • Want to get Compiz and all those snazzy effects working. I have been experimenting with varying success. Have not gotten it to work just right yet.
  • I miss my Open With Archive Mounter from nautilus. Just either need to figure out the right package or Caja configuration (not sure which yet).
  • VLC does not inhibit screen blanking when running in full screen. This is really, really annoying to me as I use my netbook for entertainment while on long trips.
  • For some odd reason nm-applet (part of network-manager-gnome) will not start up until you comment out all references to your primary network adapter in /etc/network/interfaces and reboot. I only noticed it after I tried to connect to my wireless network so if you only have a wired connection you may not care about this.
  • Putting startx in .bash_profile may cause an issue if you log in from anywhere other than the terminal. For example, an SSH connection. Also if you need a terminal after breaking X, MATE, or something this might make it harder to fix. I am sure there is a better place to put startx but I have to look up where. For now it is probably better to just go with the display manager method above if you do not want to be bothered.

I am sure I will come across some things as I play with this some more. When I do I will update this article. Please feel free to leave any comments with any issues you find and we will see what we can do about them.

Of course, if you are not insane like me, you could have just installed Linux Mint with MATE in the first place.

Update 2012.09.06
I am not playing with this any longer since I got Linux Mint 13 encrypted up and running. It is not likely I will update this article further. The two are not exactly the same but I have little free time so something has to give.

Replacing Ubuntu 12.04 Unity with MATE

Replacing Ubuntu 12.04 Unity with MATE

I am a stubborn man. But part of that stubbornness was the result of a personal kind of evolution, not an unwillingness to change.

For example, my desktop. Microsoft, with Windows 95, gave us something great: the desktop we know and love. Trying my best to ignore Metro— for the sake of this post, at least– some of my habits have changed to fit this model but, more importantly, I have figured out how to change it best to fit my needs. There is room for improvement but I can only imagine those improvements adding new functionality, not removing old, show-stopping hurdles.

Ubuntu, in their awesome, massive growth and other-wise fantastic direction from their leadership, have decided to make a major change. They have decided to abandon our old friend for something pretty radical with Unity. Unity is, for the most part in its latest incarnation, a pretty great thing. It leaves some old hardware behind (always takes balls but some times is needed) in order to innovate and move us all forward and I have grown to like it for some tasks. For example, my parents and grandparents have flourished using it. They all love different things about it but it works for them and I am happy to use the right tool for the job.

However, although my family finds it easier with is bigger buttons and everything-merged-into-one-place design, I find it much harder to use for what I do. I would call myself a power user and, as such, I have certain requirements. Instead of going into those requirements here I will quote Linus Torvalds because I feel he summed up the meat of it pretty well:

I used to be upset when gnome developers decided it was “too complicated” for the user to remap some mouse buttons. In gnome3, the developers have apparently decided that it’s “too complicated” to actually do real work on your desktop, and have decided to make it really annoying to do.

Here’s an example of “the crazy”: you want a new terminal window. So you go to “activities” and press the “terminal” thing that you’ve made part of your normal desktop thing (but why can’t I just have it on the desktop, instead of in that insane “activities” mode?). What happens? Nothing. It brings your existing terminal to the forefront.

That’s just crazy crap. Now I need to use Shift-Control-N in an old terminal to bring up a new one. Yeah, that’s a real user experience improvement. Sure.

I’m sure there are other ways, but that’s just an example of the kind of “head up the arse” behavior of gnome3. Seriously. I have been asking other developers about gnome3, they all think it’s crazy.

I’m using Xfce. I think it’s a step down from gnome2, but it’s a huge step up from gnome3. Really.

As such I had, for a while, switched to Linux Mint like so much of my cohort. I still love Mint but there is a smaller community there and less Mint-oriented information around the web. Sure, majority of the stuff I have come across for Ubuntu also works for Mint, but I only left Ubuntu because of Unity. If I can remove that annoyance I have no reason not to move back as there is safety in numbers. After all, is that not the whole idea behind the open-source philosophy?

Let us rip that mother-loving (see, I made a funny) interface out and replace it with what was not broken in the first place, shall we?

Remember to backup anything you touch before doing this because who knows if I am secretly working for Microsoft and spreading false information to make people think Linux sucks? It could happen, people!

Open up a terminal and run these commands as root:

add-apt-repository "deb $(lsb_release -cs) main"
apt-get update
apt-get install -y --force-yes mate-archive-keyring
apt-get update
apt-get install mate-core
apt-get install mate-desktop-environment

These will install the necessary packages. Note that you must install mate-core and mate-desktop-environment in separates command for– what I assume is– a race-condition situation. If you do not it may work, or it may break your UI. I never really looked into why as the solution is plenty easy to implement and does not harm anything.

Next you have to change a few configuration files so Ubuntu knows where to find some things. Edit /etc/xdg/autostart/gnome-settings-daemon.desktop as root and replace the contents with

[Desktop Entry]
Name=Mate Settings Daemon

Next edit /etc/xdg/autostart/mate-settings-daemon.desktop as root and find the line that starts with Exec=. Replace it with

Exec=/usr/bin/mate-settings-daemon --no-daemon &

Next edit /etc/X11/Xsession.d/80overlayscrollbars (you may have to create it) as root and add the line


If this is a well-traveled installation of Ubuntu you may also want to change the default text editor to pluma (MATE’s version of gedit) and the default file manager to caja (MATE’s version of nautilus). pluma is not such a big deal– I just hate the latest replaces for the find and find and replace functionally in gedit— but caja added some wwwaaayyy-overdo functionality like undo/redo.

I am not sure if Unity will work after this and I never tried despite it only being a few clicks away. Honestly I do not care one tiny bit. I did notice that a significant amount of memory is no longer being used so my netbook is much happier when I am pushing it a little too hard. Once I get Ubuntu running on my Slate 2 I am also betting it will appreciate the spare CPU cycles, as well.

That crack about sabotaging Linux hurt to write. I owe me an apology. :'(

Dear Women: Us No Think… You Purdy… Too Good

Dear Women: Us No Think… You Purdy… Too Good

A male buddy of mine just send me a link to Cosmo’s 44 Most Ridiculous Sex Tips. I read the first few and I was overcome with two thoughts: “this is hilarious” followed by “holy crap, what if people are taking this seriously?

To help out the second category of you– which I pray I am imagining– here is my open letter to the females who have had to put up with us:

Dear women,
Having trouble understanding a man? Are you so confused that you have turned to a magazine for something other than its entertainment value? Let me help you, in my limited capacity.

Try the following: Consider the dumbest woman you know. Now imagine taking a pencil, sharpened to the finest point you can imagine. Cover it in acid, red ants, cosmic radiation, and violently shove it into said womans brain. Wiggle it a bit to make sure you get all those IQs!

Now, given the severe brain injury, consider all the simple things this woman could want or desire compared to before. No longer will she want “iced water, with a twist of lemon, in a tall glass” but just “water.” The hose will be more than fine. No longer is she looking at a map for the best way to get from point A to point B. Now she just starts walking in the general direction of point B. How does her hair look? She has no idea because it never occured to her before leaving the house and now has to go out of her way to find a mirror.

Now replace “she/her” with “he/his.”


(Try To) Love,

If you are still confused my advice to you is simple, female person: Learn to love boobs as much as I do or to happy while also very frustrated. If you are trying to think of a third possibility you are over thinking this, too.

Yes, yes, I know. These are Cosmo’s “Most Ridiculous Sex Tips“. Lighten up, tight ass.