Ubuntu 14.04 is out!

Happy Easter! Good hunting to all of you egg-hunters. My family raises chickens, so we get all the eggs we want.

One of the (many) things I like about Ubuntu is that when I’m doing a major OS upgrade, it runs in the background so I can blog and catch up on XKCD.

As promised, here’s some links to Pong and 2048 for LEAP: http://pillow.rscheme.org/pong/

http://pillow.rscheme.org/2048/

The 2048 version doesn’t require a LEAP device to play. The pong game does.

I was going to show off some cool graphs showing a vast number of users on my proxy, but the “vast number” was actually a temporary spike. I’m now back to pre-March levels at 50,000 hits/day (which is roughly 5,000 impressions/day or 150,000 impressions/month).

Quick background: I run an internet Glype proxy. If you Google “glype proxy” I’m the fourth hit. These users come from literally all around the globe, and visit exactly two areas of the web: Facebook and… adult websites. The graph below shows number of hits/day on a rolling 7-day average since the beginning of the year (so from January 1st 2014 to mid-April 2014). As you can see there was a major spike a few weeks ago to nearly 200,000 hits/day – equivalent to around 1 million impressions/month.

proxy-usage

With so many users, I decided to monetize it. If you want to buy ads on my website, please do so! http://buysellads.com/buy/detail/236307 Sure, there aren’t as many users now as there were, but an impression is an impression is an impression, and I’m still making lots of those.

But, more to the point. In the mid-afternoon of Monday the 14th, I opened a remote desktop connection from UT to my house to get some work done (my job now includes a Windows VM with MS Visual Studio. Oh boy). That day corresponds to the end of the spike. But that got me to thinking: How could such a small action correspond to such a large reaction? Is my base of users really that small? Was the disruption really that big?

During this spike I wrote some scripts to parse my proxy logs and dump it into a Mongo database, so that I get documents that look a little like this:

{ "status" : 200, "domain" : "www.ign.com", "server_time" : 2629821, "hour" : 7, "ip" : "xx.xx.xx.xx", "bytes" : 30570, "month" : "Apr", "method" : "GET", "second" : 0, "year" : 2014, "path" : "/boards/threads/how-to-increase-s-p-e-c-i-a-l-in-new-vegas.197299482/", "day" : 9, "minute" : 51 }
{"status" : 200, "domain" : "a.thumbs.redditmedia.com", "server_time" : 1822975, "hour" : 7, "ip" : "xx.xx.xx.xx", "bytes" : 1634, "month" : "Apr", "method" : "GET", "second" : 1, "year" : 2014, "path" : "/wXmTL_Eeu7z1iFUf.jpg", "day" : 9, "minute" : 51 }
{ "status" : 200, "domain" : "s.ytimg.com", "server_time" : 3681763, "hour" : 7, "ip" : "xx.xx.xx.xx", "bytes" : 9361, "month" : "Apr", "method" : "GET", "second" : 59, "year" : 2014, "path" : "/yts/cssbin/www-pageframe-vflycrJAA.css", "day" : 9, "minute" : 50 }

The IP addresses have been changed to protect the innocent.

Point being, I get the request, the time, and the amount of time the server spent serving the request (server_time) – i.e. microseconds between when the request came in and when I finished writing the response. I don’t have data on how long the remote server took to respond. The obvious thing to do was to start graphing things. Above was the hits/day, now here’s a graph of the average latency per hour – that is, in a given hour, the average latency of all the requests within that hour:

latency-vs-time Yup, sure enough. A spike up to 70 seconds/request about six days ago (graph goes from April 1st to April 20th, X axis is in days) – enough to make any man decide to do actual work instead of watch porn. Which while that may be good for those businesses out there, it’s bad for business here. There is no win-win scenario here.

But, sure, there was a bad spot there. And it was during my busiest time. Such a short spike, and such a large reaction, can really only mean that a large portion of users were affected during this spike. So, back to the spreadsheets! Here’s a graph of the number of unique IP addresses using the proxy on a given day: proxy-users

But this doesn’t really tell the entire story, since it could be the same IP addresses hitting my proxy every day, or it could be a whole new set of IP addresses that happen across my proxy every day. So here’s a graph showing the data above, as well as the number of IP addresses that were “gained” and the number that were “lost.” “gained” means that we had never seen this IP address before that day, and “lost” means that we have not seen that IP address between that day and today. proxy-users2

These two graphs are also collected from April’s data, which is only 20 days long as of today. So not much data, but enough to make some observations on.

The first observation to make is that early on in the month (between the 4th and the 12th, roughly speaking) we see around 300 users per day. Of them about 40 are new users which we’ve never seen before, and 40 are users we haven’t seen since. Then on the 12th we stop seeing new users – the number dips to around 15-20, and two days later on the 14th we see a massive spike of users that disappear (the yellow line). Notice however that this massive spike corresponds with a similar spike in the total number of users (the blue line). Perhaps my server is unable to handle large numbers of users? Back to the spreadsheets!

latency-vs-hits …or on second thought, maybe they’re uncorrelated and latency doesn’t go up with an increase in load. This graph shows the number of hits in a given hour on the X axis and the base-10 logarithm of the average latency in milliseconds on the Y axis. (there are a few datapoints which go above 10000ms, but I cut them off the graph for clarity) Not much correlation in this graph – it looks like an amorphous blob. Maybe a slight upward slope, going from 1,000ms latency at no load to 2,000ms latency at 18,000 hits/hour. Which is nothing to sneeze at, mind you.

But in the end, what do we know? Remarkably little, it turns out. I’ve made a bunch of graphs. They all tell me that on Monday the 14th the world decided that my proxy just wasn’t good enough for them. They hint at possibly the problem being that my latency spiked for a few hours that fateful Monday, but that doesn’t quite explain the continued drop. Maybe I used to be on some website that linked to my proxy. Maybe my proxy stopped working with popular websites. Whatever it is, I feel that the true reason will be lost forever in logs not kept and data not recorded.

This summer, though, I’m going to make a much better proxy. Better than all the others.

Trust me.

 

Posted in Uncategorized | Leave a comment

Lent

Pong, for Leap!

Stay tuned, I’ll post it on my site at some point, along with 2048 for Leap.

In other news, I’m going to give up blogging for the remainder of Lent. So far this year I’ve averaged 1 post a week, so I figure if I’m going to break that pattern I might as well come up with a good reason.

Lent is my reason.

See ya’ll

 

Posted in Uncategorized | Leave a comment

LEAP!

A friend lent me his Leap Motion device!

So much happiness. So little time. This post is dedicated to my poor boss – I promise that, no matter how little I may work now, I will pay back your tolerance someday. Hopefully later this week, probably this summer.

Check out 2048 for Leap here:

https://github.com/lkolbly/2048

You control the game by swiping left, right, up, and down.

It’s shockingly easy to setup, considering what it does – it took me around a half hour to get their examples to run, and then it was only another hour to figure out their API enough to get 2048 wired into it. And most of that hour was me playing 2048.

 

Posted in Uncategorized | Leave a comment

Awaken the Lyst!

Correction from last week: The peak time is not around midnight. It’s actually closer to 6 in the evening:

Screenshot-15-mod

Google Charts, to the rescue. That chart displays the logins (remote and local) from the past week, pulling from about 700,000 records. (1 “record” is 1 user logged in for 15 minutes)

The past week has been productive, so a just quick list of things that now exist.

First, my Solar Calendar generator:

http://pillow.rscheme.org/solar/

I’m pretty sure it actually works :-)

Enter some dates, and it gives you a PDF that you can print, cut up & fold to get your very own solar calendar. I have one on my driveway which I’ll be testing to see if all of my math works out. Hope & pray.

Secondly, after 9 months even, Lyst is back!

http://pillow.rscheme.org/lyst/

I’ll keep y’all posted, but it should stay up this time.

I’m considering making (in the next couple of weeks) a hosted Lyst engine… You can upload your own media and run your own game on Lyst (hosted on Pillow hardware, though, so I’ll charge if your game starts really eating my bandwidth. I have to eat somehow).

 

Posted in Uncategorized | Leave a comment

Spring Break!

This week I started work on a system to record the usage of the assorted labs at UT’s CS department. It’s a similar system as what they have at http://utcslabs.org/, except that mine actually works and will remember data going into the past.

As a preview snapshot, here’s a graph of the number of total logins at UTCS versus time:

Screenshot-14-mod

It has a little bit of noise in it, but the interesting thing to note is that the peak login time is ostensibly around midnight at 160 concurrent logins, dropping to between 5 and 20 logins just before noon. Note that 3/8 and 3/9 were the weekend before Spring Break, so they have an unusually low count.

Before 8:00 in the evening on 3/6 I only have data from a testing script I was running on one machine, which is why the logins remain under 20.

Anyway, that’s just the tip of the iceberg, so to speak. I have the rest of the iceberg lying around – I’ll bring it out to show you guys sometime.

 

Posted in Uncategorized | Leave a comment

Past the Speed of Light

Without going into too much detail, I’m working on a game. One of the integral parts of said game is that you rule a galactic empire, having to deal with speed-of-light delays between your colonies.

For debugging purposes, I created a ship that could travel faster than light. One of the ramifications of this is that it arrived at its destination, and then was able to create a colony that received word of the creation of an original colony.

Here’s a logfile:

Colony e5b formed.
Player recvd Colony e5b formed!
Colony e5b got message (0.0) Colony e5b formed!
3.17097919838e-06 0.0 1.4959999997e+11
++ Opened connection to 127.0.0.1:52379, sending greeting...
Message to be delivered in 0.0791317858955yr
Ship will be flying for 19285484.875s (0.611538713692yr)
Message to be delivered in 0.0yr

0.13528665652 0.601966741023 98797977505.4
...
0.673519152714 0.629773332851 -69553597599.1
Arrived at destination!
Colony 419 formed.
Message to be delivered in 3.26153980636yr
Colony 419 got message (0.0) Colony 419 formed!
0.807892567225 0.664797974393 52719255672.8
...
3.23784246575 0.642405806125 13575646097.4
Colony 419 got message (3.26151699645) Colony e5b formed!
3.37323693557 0.674383636046 -1.02979295778e+11
...
3.9138413242 0.672729053375 1.26840029864e+11
Player recvd Colony 419 formed!
Colony e5b got message (3.26151699645) Colony 419 formed!
4.04931823947 0.65659168686 1.43277662497e+11

On the lines which are just a triplet of numbers, the first number is the number of years since the start in a fixed reference frame.

When the simulation starts, the first colony (e5b) is formed. Then I launch a ship to a destination 3.26 light years away, but the ship will only take 0.6 years.

So, 0.6 years later, we see the ship arrive at its target and create colony 419. Piece of cake.

But then, 0.5 years later, colony 419 receives the message about colony e5b being created. The ship literally passed through the news of e5b’s creation, and when the ship stopped at 419 the message caught up with the ship again.

Then, another 0.7 years later, we see that the original colony receives the news of colony 419 being created.

Anyway, I thought that was cool.

 

Posted in Uncategorized | Leave a comment

CS314, GitHub, and Jenkins

What do these three have in common, you ask?

I’m using all three together.

GitHub is giving out free private repositories to people with .edu email addresses. I have one, but I don’t use it except when I want free stuff from companies.

Jenkins is an open-source Java continuous integration system, which means that it “continually integrates” code. That is, whenever I write code it automatically compiles and tests it. On Ubuntu, you can apt-get install jenkins (after you add the PPA), and it will install and start on its own. I didn’t have any hitches on my server, even installing the Git plugin and hooking that up to my GitHub repo.

Now, whenever I push my code to GitHub, Jenkins will automatically download it and run my test suite. Granted, with this assignment’s massive test file it takes 15 minutes to run on my old server, but it does run and show a little red dot when it fails and a little blue dot when it succeeds.

Also, my food of February (before I forget): Chicken tacos from Changos, again courtesy of my boss. They were pretty good, except for the whole bit where the tortilla didn’t hold together long enough for me to get the chicken into my mouth. Other than that minor snafu, I might have them again if we meet at Changos again.

 

Posted in Uncategorized | Leave a comment

Valentines 2014!

It’s Valentine’s Day again!

And Valentine’s Day is gone again. Another year.

Another year where I can pitch my Valentine’s card game. And what better way to express your love for someone than a fly-through-the-hoops video game?

78c5704676224ef

Go play it Here. It only works for WebGL-enabled browsers.

The premise of this year’s program is that you fly an airplane through some heart-shaped hoops. The hoops are arranged such that if you fly through them perfectly, it creates a name with a heart around it. Like above.

Then, once you’re done, you can email it to someone (using Amazon SES, which is pretty okay), and say something like “I love you so much I played this game with you in mind!”

Or something like that.

There used to be an issue where the email was marked as spam, but that issue has been resolved with my new email address valentine at my home page.

The unfortunate thing about college is that midterms happen to be this week, so it may be a while before this is one GitHub. But it should be by this next weekend.

And with that in mind, good morning, good evening and good night!

 

Posted in Uncategorized | Leave a comment

Girls! Chocolate! Chick Flicks!

The party is at my place on Friday!

Although through a series of unfortunate events I don’t actually have any of these, so it’s BYOGCCF. I do have root beer and vodka, though, which can be used for parties. I’m not sharing the root beer.

I have found the worst case scenario for convergent algorithms, courtesy of Wikipedia:

Screenshot-6-mod

Found that on the Wikipedia page about convergent square root algorithms.

I would be remiss to not mention that Lupercalia is this coming weekend (Thursday through Saturday), and as I lead a busy life I will simply leave you with a picture from a development version of this year’s Valentine’s day app:

Screenshot-5-mod

Stay tuned, I’ll release it sometime Thursday night or Friday midday. Depends on how I feel. In the meantime you can enjoy using last year’s app, and together we can wonder what surprise I have for this year…

 

Posted in Uncategorized | Leave a comment

Random Baby Names

So, no snow today. However, power outages today. At least we get that part of a snow storm?

But, for my CS class (“Data Structures and Algorithms”), we have to write a program that does some trivial manipulations with baby name popularity records for the past 100 years. One part of the assignment is, and I quote:

“implement a method of your own that checks for names that meet some criteria of your own design. You must thoroughly document what your criteria is in the method comments. Part of your grade will be based on how original and creative this method is. Do not share this method with others or on the class discussion group. I don’t consider finding names that are palindromes very interesting.”

The method of my own that I chose checks for names that were generated via a markov chain that randomly generates names based on the data it found. Most of the names were kind of crummy: a, d, ba, he, ne, gr, paliamorisisela, binishakylirrryluarickandy, and so forth.

Here’s a histogram of name lengths (the X-axis is off by one):

snapshot1

Here’s a histogram of the name lengths found in the original data (both graphs are out of 1000):

snapshot2

But in the middle there are some actually kind of decent names. Shiendaba, Ckadesy (which if you remove the awkward C is kind of decent), Douly, Etheca, Farly is actually a name as is Amy, Lisha, Weteta, and so forth.

And to everyone who is considering mating with me, I *promise* I won’t name the kids Jongethay. No matter how much I hate children.

The other thing that my method does is correlate syllables with how popular the names were. For instance, the syllable “gab” appears in more highly-ranked names than, say, “mar.” As a matter of fact, “gab” on average is the most popular syllable, followed by “niel”, “zac”, “kait”, “nuel”, “leb”, and so forth. I don’t know why “nuel” and “leb” made it, it’s possibly a bug from my syllable finder. It’s a simple algorithm, scanning names for VCV, VCCV, and VCCCV and assuming those are syllables.

As I can say from my Visible Speech class that I took last semester, that’s a terrible way to find syllables. But it’s not a project worth spending hours developing a syllable-counter, just to get tied up in an assignment nobody’s going to read.

Anyway, I feel like Gabniel or Zackait are going to popular names in the coming century. I’m not so sure about Nuelleb, but I cannot tell the future more than I can tell what I had for lunch…

Speaking of which, as part of my venture to eat something new every month, my (very) accommodating boss at l5 took me out to Chango’s and I had a sort of fish taco for my new food of January. I could’ve done without the vast temperature and texture difference between the actual meat and the carrot shavings they put on it, but I feel like each ingredient individually would have been nice. Together, though, they confused my tongue and left me unsatisfied.

 

Posted in Uncategorized | Leave a comment