Welcome to my website! I've been on the web in some form or another since 1996. Even though social media is all the rage these days, I feel it is important to have one's own presence on the web. So I continue to write here as often as I can.
If you'd like to get in touch with me, feel free to reach out! All of my contact info can be found here.
I decided to learn websockets recently and figured that using the excellent Socket.io 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:
And the resulting code looks like this:
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.
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.
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 firstname.lastname@example.org:dmuth/craps-simulator.git cd craps-simulator/ composer installer
Syntax is explained in the README.md 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.
I got this voicemail the other day from "Rachel at cardholder services":
(If the embedded player doesn't work, here's the link: http://vocaroo.com/i/s1ohu312tpBe)
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.
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.
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!
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!
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.
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.
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.
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.
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.
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.
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.
The Streisand Effect (http://en.wikipedia.org/wiki/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.
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.
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?