Category Archives: Fun Stuff

Fun stuff for the sake of fun. From Inebriation to MMORPG’s, if it’s fun (or funny), you’ll find it here.

Stephen Colbert Interviews Neil deGrasse Tyson at Montclair Kimberley Academy – 2010-Jan-29

Cross-post from LinkedIn, in response to Stephen Hawking: Black Holes May Not Have ‘Event Horizons’ After All:

So relevant: http://www.youtube.com/watch?v=YXh9RQCvxmg Stephen Colbert interviews Dr. Neil deGrasse Tyson. The entire interview (starts about 6 mins in) is just a wholly wonderful discussion. I wish more people would watch it, over and over again. Dr. Tyson tries to elaborate on the very same topic (current understanding of black holes). Simply engrossing and inspiring. The interview is long, but the elaboration of black holes starts about 1hr 6 mins into the video. Enjoy!

Just Another Perl Hacker

Sometimes writing small snippets of code can be meditative.

The other day, I realized that, even though I happen to be, among other things, Just Another Perl Hacker, I never bothered to write my own JAPH signature.  So I went ahead and wrote up a very simple (but effective) one.  Once it was complete, it dawned on me that other perl hackers may appreciate the ability to generate a signature like my own.

Since perl is all about code reuse and sharing, I figured I would write up a JAPH signature generator so that anyone can have an awesomely obfuscated JAPH signature like I do.

Firstly here’s my JAPH signature:

1
2
$_='Kvtu!Bopuifs!Qfsm!Ibdlfs-!K/!Cpccz!Mpqf{';
@_=split//;foreach(@_){print chr(ord()-1)}

You can run the JAPH signature by copy/pasting it to a text file (e.g., japh_sig.pl), and running with

1
perl japh_sig.pl

Which returns:

Just Another Perl Hacker, J. Bobby Lopez

You can also run the JAPH signature straight off the command line (with ‘perl -e’), but you have to replace the single quote characters in the string with double-quote characters, for example:

1
perl -e '$_="Kvtu!Bopuifs!Qfsm!Ibdlfs-!K/!Cpccz!Mpqf{";@_=split//;foreach(@_){print chr(ord()-1)}'

This is all just for fun of course, but if you do end up using my JAPH signature generator, please let me know by sending me a quick message on Twitter to @jbobbylopez.

Have Fun!

The JAPH Signature Generator

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/env perl
##############################################
# USAGE:
#   perl japh.pl This is my awesome signature
#
# OUTPUT:
#   Your JAPH Signature:
#       $_='Uijt!jt!nz!bxftpnf!tjhobuvsf';
#       @_=split//;foreach(@_){print chr(ord()-1)} 
#
#   Returns:
#       This is my awesome signature
#
# AUTHOR: J. Bobby Lopez <jbl@jbldata.com>
##############################################
 
use feature say;
 
my $offset = 1;
my $signature = join (" ", @ARGV);
my $obfus_sig;
 
my @obfus = ();
my @sig = split //, $signature;
 
foreach my $c (@sig)
{
    push @obfus, ( chr ( ord($c) + $offset ) );
}
 
$obfus_sig = join ("", @obfus);
 
say <<"OUT";
 
Your JAPH Signature:
\t\$_='$obfus_sig';
\t\@_=split//;foreach(\@_){print chr(ord()-$offset)} 
 
OUT
print "Returns:\n\t";
@_=split//,$obfus_sig;foreach(@_){print chr(ord()-$offset)};
say;
1;

Please join us in welcoming the newest member of our family!

On January 28th, at around 5am EST, the newest member of our family was born.  Weighing in at around 6lbs 3oz, and just under 20 inches in length; our daughter, Phoebe Isabelle Lopez, arrived into our world.. and we couldn’t be more thrilled to have her!

20130207_154749 Phoebe

 

 

 

 

 

Phoebe has been a very good baby, getting lots of rest and food and exercise.  She loves to look at ceiling fans and the patterns on our curtains.  She doesn’t seem too interested in toys yet though.  Sandra has been singing songs to her all day, changing the lyrics to include Phoebe’s name in the song.  Somehow we always end up adding the word “poop” or “poo” to the lyrics.

There are so many things that you need to learn when becoming a new parent.  It takes a lot of patience most of all, but the world of “baby stuff” is truly a huge world unto it’s own.  I know stuff about diapers, creams, mixing formulas, changing the Diaper Genie “correctly” (using the bulit-in cutter, and not a pair of scissors), and I have mastered swaddling.

We are not getting a lot of sleep, and sometimes it’s not worth trying to get another 20 minutes before she cries, so we just go with the flow, and so far it’s been working.

Phoebe truly is a special soul, and a blessing to us.  We are very thankful to have her home safe, sound, and healthy!

More pictures soon!

Edit: More pictures here!

Just had an idea for a multi-player, multi-controller, single interface, multi-achievement gaming environment.

Imagine a multiplayer game where two or more people are playing the same game simultaneously, and controlling the same character. I don’t mean controlling parts of the character, I mean the whole character (for example, if implemented in a first-person shooter, or RPG like Oblivion).

The game starts, and you are both playing the same character at the same point in time. The way this works is that each player is playing an instance of that character in the same world. Each player is able to make decisions and do things however they see fit with their character instance. The character that has the higest achievement score after a major decision or event becomes the save-point for the next period of play. So whoever makes the better decision, or who ever fights the best and delivers the most damage and kills the bad guy, win that round, and the game continues forward from that point.

This could be applied to games like Oblivion, where multiple people are playing the same character, and the one who kills the vampire, or the one who is able to pick the lock, wins that “encounter” receives a separately counted set of points (tied to the player, not the character), and the game is saved and continues from that point.

I think this would be a great game to play, you can jump in and out any time you want, and the game will continue to move forward because of the other players. Consider this idea GPL’d.

The Movie Review: Limitless

So I watched Limitless the other day on the advice of good friend.  (spoiler alert) It was awesome.

Limitless, starring Bradley Cooper as Edward “Eddie” Morra, explores a world where a pharmaceutical  company has manufactured pills that, when ingested, allows the imbiber to use the full capabilities of his or her brain.  If we currently only use 20% of our brains, then just one of these pills would allow you to use 100% of your brain power within 30 seconds of swallowing it, and the effects last for almost a day.

What makes this movie exciting for me is the believability of the powers that Eddie is endowed with, not to mention a great performance by the cast.  When Eddie takes his first pill, he essentially gains instant access to every single memory that he has.  Everything that he has learned, overheard, or glanced at briefly, becomes a strength and an intuition that he quickly begins to realize and exploit.  Not only does Eddie have access to all of his memories, including all of the Bruce Lee movies he has ever watched, but he also instantly gains the muscle-memory required to accomplish these feats which he has never trained for.

Eddie’s senses become sharper, and some type of time-dilation occurs which allows him to instantly absorb the smallest details about the environment around him.  He becomes intensely motivated to challenge himself by doing seemingly impossible things, like learning to fluently speak new languages in a matter of days.  He can mentally profile people he’s just met with great accuracy in a matter of seconds, allowing him to masterfully manipulate people and conversations to his advantage.  But the most important “ability” that he gains, in my opinion, is the drive to go out into the world and do something.

You see, before Eddie took the pill, he was an unmotivated, unsuccessful writer with one failed relationship behind him, and another crumbling right in front of him.  He was always behind on his rent.  He’s had perpetual writer’s block, which prevented him from even starting to write the novel he’d been promising his publisher for several weeks; and even though he’s a reasonably healthy guy, with a place to live (for the time being), he always looked homeless whenever he went out in public.   Eddie was a mess before the pill.   However, after taking the pill, and given the ability to master his own mind, Eddie was no longer afraid of anything.  He could quickly visualize possible solutions to any unexpected situation he was facing, and address the situation with ease.  Eddie completely turned his life around and began to accomplish things he would never have dreamed of.

I expect that fear is an element of life that can hold us all back from reaching our full potential, but only if we let it.

Eventually, Eddie figures out how to maintain his newfound mental mastery without the need to take the pills, and realizes that he has the entire world at his finger-tips.  However the only thing Eddie wants to do, more than anything else, is share his abilities with the rest of the world so that everyone can experience what it feels like, to be limitless.

It should be obvious that I think Limitless is an awesome movie, and I believe many of you will enjoy it as well.

 

 

So Whats New?

Looks like the Canada Post strike is over, for now.

I don’t know if it would be wise for Canada Post to strike again.  It’s crossed my mind several times, as I’m sure it has crossed the minds of others, that we have enough technology in place, including wireless technologies and the Internet, that we could essentially do away with Canada Post and do everything digitally. It may seem like Canada Post offers a unique and relatively inexpensive service; but with them out of the picture, new solutions would start springing up in no time.

Document imaging would become a hot topic again (whatever happened to the popularity of personal document scanners?). Encryption would once again become an active topic of discussion.  Companies like Purolator and Fedex simply cost too much, and so more “do-it-yourself” type solutions would begin to flourish quickly.

I’ve been listening to some of my favorite tunes lately that I haven’t heard in a while, such as INXS, Portishead, Red Hot Chili Peppers, and so on.  What I’ve found very curious is that many of these great bands and their awesome songs have been songs I have been listening to ever since I was a clueless child.   Songs by Counting Crows, Seal, REM, and Evanescence were songs that really spoke to me, and validated for the most part, that this world we live in truly is a crazy place.  These songs were just the universe’s way of telling me that it totally agrees with me.

I think some of best lyrics in any song has come from Evanescence.  They were a band that was so ahead of it’s time, it isn’t even funny.   There are only a few other bands that I would place in that category, such as The Red Hot Chili Peppers and  Sneaker Pimps.  Hell, I’d even put No Doubt in that list, their “Tragic Kingdom” album was absolutely freaking awesome!  But there simply aren’t that many bands today that I’d put in that category.. but maybe I just don’t listen to enough new bands to know?

What bands do you like to listen to that you’d rank up there with a title of “One of the Greatest Bands of All Time”?

Jolicloud is of the Awesome

So if you haven’t heard of Jolicloud http://www.jolicloud.com/, then you need to download and install it now. It’s an Ubuntu based OS (a self-proclaimed “Cloud OS”) specifically designed for Netbooks, and it rocks. I have Jolicloud installed on my Samsung N110 Netbook, and I use it for everything from e-mail to games (snes9x) to work (Perl/Vim/Screen). Now what makes Jolicloud super-awesome is that it treats web applications no differently from desktop applications. Each application gets it’s own icon on the “Home screen”. It’s also socially aware – it can connect to facebook and allow you to search for applications and/or people who’ve used those applications, so that you can ask them questions and get guidance on the tools you’re trying to use.

The interface is very slick – big icons and a clean method of navigation to the lesser used functions of a standard Gnome/Ubuntu desktop. The most-awesomest part is that once you load up a terminal, you have full access to the command-line and all Ubuntu apt repositories.

Jolicloud isn’t just for netbooks! I’ve also installed it on my Acer Veriton (similar to the Acer Revo), and am using it as a media center OS. Jolicloud also comes in an “express” edition, which allows you to install it under windows, where it will come up as a secondary OS option under the windows boot-loader.

If you have a netbook, nettop, or any light-weight PC, then install Jolicloud. Highly recommended.

Using DZEN with Xmonad to view Currently Active Network Shares

Currently Xmonad is my window manager of choice, because it’s clean, functional, and removes all the unnecessary crap that most modern desktops usually come with by default.

Although Xmonad is very cool, there are still some things that it’s lacking as far as functionality. Much of this is made up for by the use of Xmobar, Trayer, and other Xmonad compatible plugins and applications. I recently came across another one of these applications, and found it to be an exciting find. The tool is called Dzen.

Dzen is a desktop messaging tool which allows you to easily write some useful scripts, and have the output of those scripts become part of your desktop interface. Many examples of how this works are available on the Dzen webite, but some examples are as follows:

  • CPU Monitoring graphs
  • dmesg log monitoring
  • Notification of system events which are commonly found in syslog
  • E-mail or twitter alerts shown on your desktop as they come in
  • Custom calendar alerts
  • and much more..

Now this idea is not new – I remember there being a project called “OSD” (on-screen display) which essentially allows you to do the same thing. However, I think OSD was meant as more of an single message notification system, rather than the way that Dzen works, with master and slave windows, and the ability to implement menus, etc.

In any case, I decided to give Dzen a try, and am happy with the tool that I’ve been able to whip up. For the longest while, I wanted the ability for my xmonad environment to tell me, at a quick glance, what network mounts and removable devices I currently have mounted. I’m sure that this kind of information is easily available on many bloated desktops, including GNOME and KDE, but I was looking for something simple, small and configurable. Didn’t find it, so I ended up writing my own – with the help of Dzen.

Here are a couple of screenshots of how it looks:

Dzen “Active Mounts” widget (mouse out):
dzen-1

 

Dzen “Active Mounts” widget (mouse over):
dzen-2

 

I wrote the scripts fairly quickly, so I’m sure they could be written better, but I think they will provide those of you who are interested, a good example of how to implement a regularly updated notification widget with Dzen.

The scripts are written to check for changes in the mount list, and only update Dzen when a change is detected. It is written in two components:

1) A perl script which captures the mount information in the exact format that I want, and
2) a bash script which handles loading Dzen

Here’s the source code (perl script):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/perl
 
# Written by J. Bobby Lopez <jbl@jbldata.com> - 27 Jan 2010
# Script to -be loaded- by the 'dzen-mounts.bash' script
# This script can also be run by itself, if you want to dump a
# custom plain-text table of your network shares or removable
# devices.
#
# This script is meant to be utilized the Dzen notification system
# Information on Dzen can be found at http://dzen.geekmode.org/
 
use strict;
use warnings;
 
use Data::Dumper;
use Text::Table;
 
my @types = qw( cifs ntfs davfs sshfs smbfs vfat );
 
sub getmounts
{
    my @valid_mounts; # to hold mounts we want
    my @all_mounts = split (/\n/, `mount`);
    foreach my $mount (@all_mounts)
    {
        foreach my $type (@types)
        {
            if ( $mount =~ m/$type/ )
            {
                push (@valid_mounts, $mount);
            }
        }
    }
    return @valid_mounts;
}
 
sub getsizes
{
    my @mounts = getmounts();
    my @list;
    foreach my $mount (@mounts)
    {
        my @cols = split (/\ /, $mount);
        my @df_out = split (/\n/, `df -h $cols[2]`);
        $df_out[1] .= $df_out[2] if defined($df_out[2]);
        $df_out[1] =~ s/[[:space:]]+/\ /;
	    my @df_cols = split (/[[:space:]]+/, $df_out[1]);
        push (@list, ([@df_cols]));
    }
    return @list;
}
 
my $tb = Text::Table->new(
	"Filesystem", "Size", "Used", "Avail", "Use%", "Mounted on"
);
$tb->load(getsizes());
print "Active Mounts\n";
print $tb;

And the bash script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash
 
# Script to load Dzen with output from 'dzen-mounts.pl' script
# Written by J. Bobby Lopez <jbl@jbldata.com> - 27 Jan 2010
#
# This script utilizes the Dzen notification system
# Information on Dzen can be found at http://dzen.geekmode.org/
 
function mountlines
{
        LINES=`perl dzen-mounts.pl|wc -l`;
        echo "$LINES"
}
 
function freshmounts
{
        OUTPUT=`perl dzen-mounts.pl`;
        echo "$OUTPUT"
}
 
function rundzen
{
        OUTPUT=`freshmounts`;
        MOUNTLINES=`mountlines`;
        echo "$OUTPUT" | dzen2 -p -l "$MOUNTLINES" -u -x 500 -y 0 -w 600 -h 12 -tw 120 -ta l &
        PID=`pgrep -f "dzen2 -p -l $MOUNTLINES -u -x 500 -y 0 -w 600 -h 12 -tw 120 -ta l"`;
        echo "$PID"
}
 
function killdzen
{
        PID="$1"
        if [ ! "$PID" ]; then
            MOUNTLINES=`mountlines`;
            PID=`pgrep -f "dzen2 -p -l $MOUNTLINES -u -x 500 -y 0 -w 600 -h 12 -tw 120 -ta l"`;
        fi
 
        if [ "$PID" ]; then
            #echo "Killing $PID..";  # DEBUG STATEMENT
            kill "$PID";
        fi;
}
 
function checkchanges
{
    while true; do
        NEW=`freshmounts`;
        #echo "$NEW - new";  # DEBUG STATEMENT
        if [ "$OLD" != "$NEW" ]; then
            killdzen "$PID";
            rundzen;
            #echo "$PID started";  # DEBUG STATEMENT
            OLD="$NEW";
            #echo "$OLD - old updated"  # DEBUG STATEMENT
        fi
        sleep 1;
    done
}
 
checkchanges

You can also download the scripts in a tgz archive here. Enjoy!

Xmonad: For Hardcore Desktop User Interface Efficiency

Long time linux/unix hackers know of the plethora of window managers and user interfaces that have been and currently are available for Linux and BSD operating systems.  I’ve had great times in the past trying out different window managers such as Elightenment, Sawfish, Black Box, IceWM, xfwm, KDE, Gnome,  and others.  These days the two most popular which are shipped with the more popular distributions (Fedora, Ubuntu) are KDE and Gnome.

However, I remember back in the day when I was using a Enlightenment, or Ratpoison, doing strange and cool things (at the time) like applying transparencies to your windows and modifying the the window borders to be anything but normal and square.

I used to share screenshots of my desktop with others who are also into “desktop eyecandy”, where I’d have floating or docked window maker panels, and monitoring applets anchored to the desktop as if they were part of the background wallpaper.. and this was around 1999.  It was fun times.

One of the more interesting things that I was into at the time was increasing the efficiency and usability of my desktop by trying to reduce the need to reach for my mouse.  I’ve been very accustomed to this already being user of vi and the GNU Screen terminal multiplexor, but the window managers never seemed to try to attain the same level “hacker cool”.  That is, of course until I came across Ratpoision. Ratpoison was exactly what the name implied, a window manager that killed your dependency on the mouse (or rat).  It was awesome, but it wasn’t scalable and didn’t evolve much to keep up with modern technological advancements and requirements such as multi-monitor support.

I recently thought that those days were long lost, until I recently had the urge to streamline my desktop environment.  I now have a 28″ Monitor, and was certain there was a better way to interact with the desktop than the standard Ubuntu/Gnome environment.  So I went looking.  I started looking of course at things I was already familiar with – I looked up Ratpoision to see if there were any major improvements over the years.

I took a look at a Ratpoison again, but it was showing it’s age.  I looked at it’s successor, Stumpwm, but I didn’t feel the love.  Then I tried out Xmonad, created by Spencer Janssen, Don Stewart, and Jason Creighton – and written in Haskell.  I immediately fell in love.

If you haven’t used GNU Screen, Gnome Multi-Terminal, Ratpoision, or any minimalist Window Manager before, then it will be hard to explain why Xmonad is worth your time.  Instead, visit the Xmonad website here: http://www.xmonad.org/

Here are some suggestions on how get Xmonad working on Ubuntu 8.10:

Install Xmonad:

apt-get install xmonad

We’re going to create another X window session, so that we don’t mess with your existing one. That way, if you don’t like Xmonad, you can go back to using your existing window manager without worrying about breaking your configuration.

Set up your second X window session. Press “ctrl + alt + f2” – this will take you to the command-line terminal where you will start your second X session. Start the session using following command:

xinit -- :1 vt12

This will start up another X session which will sit at virtual terminal 12 – meaning that you have to press ‘ctrl-alt-F12′ to get to it.

Once at your new X session, you should see nothing more than an plain old xterm window. Type “xmonad’, and the terminal window should now be maximized. Xmonad is now running.

Type ‘man xmonad’ to view the help documentation on how to use it.  It’s pretty straight forward, and a joy to use!

Looking for D&D Players In Burlington Ontario

 I used to play Dungeons and Dragons with some very close friends a few years ago, and I really miss the game. I was introduced to D&D when I was about 25 years old, which is pretty late in the game compared to the many who started playing in high school or university. I have to admit though that I thoroughly enjoyed getting together with close friends and having in-depth discussions not just about the technicalities of the game, but about pretty much everything else that was going on in the world at the time.

 00009

Since I moved to Burlington, it has been a lot more difficult for me to head out into Toronto to visit friends at all, let alone to commit to a schedule to play D&D for a few hours a night each week. Being married and working full-time as a software developer doesn’t really lend it self well to much D&D time, especially if that means driving across three cities to just to get to where the game is being hosted.

However, again, I do miss the game. So I figure that the only way to get involved in D&D again is if I get involved with a game happening locally here in the Burlington area.

Some people have suggested online RPG gaming such as World of Warcraft, Dungeons and Dragons Online, etc. But this isn’t for me. The purpose of playing games with friends for me is less about the game, and more about being around and interacting with intelligent, witty, and sometimes crazy people. It’s about socializing, something I fear has been lost in the translation from table-top games to the world of online gaming.

This is a shout out to any ladies and gents who have an interest in playing, and reside in the Hamilton-Burlington-Oakville area. Of course I wouldn’t want to jump into playing right away, because I forgot much of the rules, and would have to brush up a bit. But if you’re interested in getting a game going, please let me know via e-mail, or better yet, post a comment on this article so that others can follow along.

The Hitchhiker’s Guide to the Galaxy: Once Again Read, Once Again Loved!

Some say it is easier for humans to remember negative experiences than positive ones. I’ve found this to be true often enough, where I forget how much joy I experienced from a well prepared ethnic dish, or how good it feels to walk on the sandy shores of a beautiful beach on a sunny summer day. The same goes for simple routines, like watching a favorite television show, or reading a good book.

Don't Panic!

I had this same feeling again recently when I decided to read through The Hitchhiker’s Guide to the Galaxy. I’ve read the book before, and had found it to be an endlessly funny sci-fi adventure. This time however, I found the book to be so much more. Douglas Adams is so brilliant in his writing, that he puts even the most mundane of topics into a new light, and forces you to view it from such an angle that your head ends up under your armpit, which just happened to be relocated between your legs.

A movie version of this book came out a few years ago, but it does not do the book any justice. So many layers of plot, witty narration, and internal dialog of the characters is missing that the movie totally misses the depth of the book by 7 billion light years.

If you haven’t read this book, please do. And if you don’t understand it, read it again, with a dictionary by your side. It is in your best interest to fully grasp the ferocious satire and intelligent humor that only an author like Adams can bring to the table.

D&D, Where Have You Been?

I think I’m in love with Dungeons and Dragons. I’ve been playing it for maybe four months now, and I can honestly say that I enjoy it as much as playing a favorite video game. Now, there are things that can ruin a D&D session, such as picky, whiney, or annoying people. But I think I am very fond of the *idea* of D&D, where it is not restricted by the bounds of computer programming, and you can essentially do anything you want in the world your DM has created (with her permission of course).