dmuth's blog

Announcing Real-time SEPTA Train Stats!

I am pleased to announce the launch of the website Septa Stats! This website provides real-time data on all Regional Rail train lines. The following stats and metrics are supported:

That website is at:

The underlying technology stack consists of PHP, Slim (a microframework for PHP), Redis (for query result caching), and Splunk for data storage and reporting.

My source code is also available!

Average: 5 (1 vote)
Your rating: None

Extracting Session IDs from Websocket Requests in Express.js

I decided to learn websockets recently and figured that using the excellent library along with Express. The tutorials on their website made sense, however I ran into an issue using the express-session module--cookies are not normally parsed with websocket connections, so I could not get the session data normally.

I then spent several hours reading through blog posts and Stack Overflow to figure out how to manually go through the process of parsing cookie strings and decrypting session data, which I thought I'd share here!

This assumes that you are using Express 4.x and have installed the following modules:

  • cookie - Used to parse the cookie string
  • cookie-signature - Used to decrypt the cookie
  • debug - Used to display debug messages. Replace with Winston or similar if you like.
  • express-session - Used to interface with sessions
  • session-file-store - If you're using a different data store, replace accordingly

And the resulting code looks like this:

Average: 5 (2 votes)
Your rating: None

How to Copy Uploads From AWS S3 Automatically

The problem: you write files to an S3 bucket on Amazon Web services. Maybe a single user/process does this, maybe multiple users or processes do this. But you want to keep a particular process from going rogue and deleting your data. What do you do?

The answer: You write a function in AWS Lambda that is fired whenever something is uploaded to the S3 bucket in question. It then calls the copyObject() method and makes a copy of the file to another bucket--one that only it (and your admin account, presumably) have access to write to.

The GitHub repository is at:

It's a quick and dirty thing that I put together mostly as a demo of how to integrate AWS Lambda with other S3 services.

Feel free to give it a try--AWS has a free tier for all new accounts. If you like it, let me know. If you didn't like it, let me know.

Average: 5 (2 votes)
Your rating: None

Anthro New England 2016 Con Report and Pictures

I haven't written too many convention reports lately, and that's pretty much my fault. I've been struggling with some health issues which have kept me from attending as many cons as I'd like. That said, I was able to make it to Anthro New England this past January. It was held in Boston, Massachusetts.

I wasn't staff at this con, but I did end up volunteering for the cash registers in the Dealers Room throughout the convention. It was a different experience than what I used to, but provided a great way to help out the convention. For the cash registers, we used custom software developed by Kotanu Cheetah. The software did a great job of running both regular register functions and having integration with the membership system.

AnthroNewEngland-2016-155 AnthroNewEngland-2016-110 AnthroNewEngland-2016-161 AnthroNewEngland-2016-073 AnthroNewEngland-2016-082 AnthroNewEngland-2016-017

Average: 5 (1 vote)
Your rating: None

So I Wrote A Craps Simulator

Work is sending me to a conference that just happens to be hosted in Las Vegas, a city where there are a few casinos. I'm not much for gambling, so I figured I should learn a little about it before I even think of doing such a thing. I read that craps is a fun game that has some pretty safe bets, so I decided to learn more about that. To that end, I wrote a craps simulator.

To get it up and running, make sure you have PHP and Composer installed, and do the following:

git clone
cd craps-simulator/
composer installer

Syntax is explained in the file, but just by running the file main.php, you can run games of craps and see what the results are. The simulator allows you to place "Pass" and "Take Odds on the Point" bets. Multiple players with different starting balances, bet amounts, and betting/exit strategies can also be simulated.

A successful run will look something like this:

Note that if you simulate enough games, you will lose all of your money. That's the whole point of how casinos work, actually. Use my simulator to see how it works instead of playing a few dozen games and finding out for yourself. Smiling

Average: 5 (2 votes)
Your rating: None

What a Phone Scam Sounds Like: Meet "Rachel from cardholder services"

I got this voicemail the other day from "Rachel at cardholder services":

(If the embedded player doesn't work, here's the direct link)

This one is kinda clever, that rather than a human using high-pressure tactics to get you to enter your credit card number, what you hear instead is a recorded message which asks you to "press 1 to get a lower interest rate". Had I pressed 1, I suspect I'd be transferred to a nice sounding human operator who would try to coax me into giving them my credit card number.

There's two takeaways from this:

1) Never give out your card card number to someone who calls you on the phone. (caller ID can be spoofed)

2) Strongly consider against picking up the phone when an unknown number calls you. Let it go to voicemail. If it's someone trying to get a hold of you, you can listen to the voicemail right away (or use Google Voice, which does transcripts), and call the person back.

Stay safe.

Average: 5 (1 vote)
Your rating: None

Anthrocon 2015 Con Report and Pictures

This year's Anthrocon has come and gone and it was a great year! There was a total of 6,348 attendees and 1,460 fursuits in the fursuit parade. We also raised $35,910 for our charity this year, The Western PA Humane Society.

Anthrocon-2015-174 Anthrocon-2015-193 Anthrocon-2015-208 Anthrocon-2015-305 Anthrocon-2015-005 Anthrocon-2015-220

Taking the Fursuit Parade Outside

We tried something new this year--we took the fursuit parade outside and invited the entire city of Pittsburgh to come watch! The turnout was impressive--according to Visit Pittsbirgh, there were an estimated 5,000 people who showed up to watch. And it went over really well!

Anthrocon-2015-254 Anthrocon-2015-265 Anthrocon-2015-261

We received lots of positive feedback from convention attendees, fursuiters who were in the parade, and the City of Pittsburgh itself. We're thrilled that it went so well!

In Closing

I know, I know. This is a rather short con report for such a big convention. The truth is, like with other Anthrocons, I was very very busy at this one, and it seems like every year as the con gets bigger, I get busier. Smiling

For what it's worth, I did get some downtime in which I was able to see some old friends, make some new ones, and generally enjoy the city of Pittsburgh. It does amaze me how welcoming the city is to us every year, and I am thankful for that.

Anthrocon-2015-079 Anthrocon-2015-081 Anthrocon-2015-157

I have a much bigger repository of several hundred photos that I took this Anthrocon. The full set can be found on both Facebook and over on Flickr.

This a busy summer for me! My next cons will be BronyCon, Eurofurence, and MarinaraCon. They're all as good as they sound. I hope I'll see you there.

-- Giza

Average: 5 (3 votes)
Your rating: None

Introducing Diceware: Secure Passwords You Can Remember!

In general, the longer the password, and the more random it is, the more secure it is. This is because if a password file is stolen, the passwords are stored there are stored in encrypted format, where each password is encrypted with... itself. This means that in order to determine what an account's password is, an attack must try encrypting every random possible string and see if it matches the encrypted password.

Naturally, this means that all possible 2-character strings can be tried quicker than 3-character strings, and 4 character strings will take even longer. Unfortunately, thanks to Moore's Law, "longer" means "a few milliseconds". 8 character passwords are usually the minimum, but by some estimates, even that is not sufficient. To make for an even bigger challenge, us humans tend to have a hard time remembering random letters and numbers. This leads to bad habits such as using the same password on multiple sites, and that can cause its own problems.

This is where Diceware comes in. The concept is over a decade old, and rather simple: you roll 5 dice, and then look up the number against a word list to get a word. Words are easy for us humans to remember, yet the dice rolls themselves are quite random. Let's look at a sample run:

That's 20 dice rolls, which means there is a one-in-6^20 (3.65 * 10^15) chance of getting that specific dice roll or, for an attacker, 6^20 guesses they need to make to try every possible password. As computers evolve and longer passwords are needed, more rolls of the dice can be made.

This app can be used online at:

Please try it out and let me know what you think. Naturally, my source code is also available for download. It can be found over on GitHub.

Average: 5 (3 votes)
Your rating: None

Anthro New England 2015 Con Report

I recently had the pleasure of attending Anthro New England, a first year furry convention held in Cambridge, Massachusetts.

First, numbers! The convention had 757 attendees, an astonishingly high number for a first year convention. They also raised $10,000 for their charity, Vest-A-Dog. This led to the ANE organizers getting pied in the face, as shown at the end of this set of pictures. Smiling

AnthroNewEngland-2015-013 AnthroNewEngland-2015-028 AnthroNewEngland-2015-045

What Went Well?

There was a schedule, and it was stuck to remarkably well. All of the events that I attended started on time, or very close to it. This included Opening Ceremonies, Closing Ceremonies, and the "Meet the Charity" event. The IT Meet and Greet panel was also on-time, fun, and well attended.

AnthroNewEngland-2015-068 AnthroNewEngland-2015-087 AnthroNewEngland-2015-091

What Else Went Well?

One of the reasons Anthro New England succeeded was because it showed confidence without being pretentious. It did all of the things a first year con would normally do (Dealers Room, Artists Alley, Dances, Opening/Closing Ceremonies, having a charity, etc.), but it did these things without overdoing them. The function rooms holding each area were reasonably sized and didn't feel cavernous. The programming started late Friday morning and ended on early Sunday evening, letting many attendees commute to the con and leave on Sunday after Closing Ceremonies. Finally, having everything all on one floor made it easy to find all of the rooms and see other attendees.

AnthroNewEngland-2015-207 AnthroNewEngland-2015-220 AnthroNewEngland-2015-141 AnthroNewEngland-2015-226 AnthroNewEngland-2015-230 AnthroNewEngland-2015-278

Average: 5 (1 vote)
Your rating: None

Data Analysis of The Streisand Effect

The Streisand Effect (, for those not aware, is where an attempt to remove, hide, or censor a piece of information has the unintended consequence of publicizing that information more widely by way of drawing attention to it. It is named after Barbara Streisand, who once filed a lawsuit to have an arial image of her home removed from the Internet. In her case, it resulted in a flood of publicity and thousands of people viewing that image.

What happened here?

An individual took issue with a post that I wrote 8 years ago. The identity of the person and the content of the post aren't relevant to this post, but what is important is that prior to this event, the post was sitting by itself, pretty much left alone except for for the occasional web crawler visiting it. The post would have stayed that way, except that the person who had an issue with my post decided to complain in a heavily trafficked forum. This resulted in the post receiving more traffic than the previous several months combined. Additionally, many more people were made aware of the contents of the post, which I'm fairly sure the person complaining did not want to see happen.

How about some numbers?

Here's a graph of HTTP requests to that page over time:

Note the huge spike, when is when the post in question was mentioned. Approximately one thousand separate people visited the post in question during the spike in traffic.

Now, what did we learn?

Average: 5 (2 votes)
Your rating: None