This post is dedicated to a simple but tricky gotcha in the WordPress plugin Ultimate Member. For those of you who may be unfamiliar with Ultimate Member it is a plugin that adds enhanced user account management abilities to your WordPress site. Put simply the plugin allows you to:
The list really could go on and on but suffice it to say that Ultimate Member adds a lot of free functionality to your WordPress site. If you manage a big WordPress site the paid extensions can take your site even further; I’m being serious, this is not a paid post, I really love what Ultimate Member is doing for WordPress.
Rounding up slightly I have spent 10 hours this week redesigning the notification and form submission system… Actually, I seriously just thought of something else I missed.
So now that I’ve spent 10 hours on the completed notification and form submission system I’ve come to the point where I want to toss out all the old code that is taking up space in my project. I’m happy to see it go because it really cleans up the project but I don’t want to actually delete it forever so this post will serve as it’s final resting place. Well this code is being saved primarily for nostalgia’s sake I feel some programmers, especially those that are just starting out, would like to pick these apart and see the not so beautiful development process in action. For starters let me share with you a picture showing the layout of events these scripts were trying to accomplish. Early on as I developed these scripts it hit me that things were getting way out of hand so I stopped and mocked everything up to come up with a new plan of attack.
The PHP manual on chmod has a subtle little warning about providing a decimal number instead of an octal when calling the chmod function:
Mode is not automatically assumed to be an octal value, so to ensure the expected operation, you need to prefix mode with a zero (0).
So what does this warning really mean and more importantly what is a programmer to do when allowing users to input the mode themselves? Besides shouting out never allow the user to do this! and calling it case closed, I would like to show you what you can do to solve this problem and a legitimate reason why you might use this solution in your application.
Today I learned that I have been using the term URI (Uniform Resource Identifier) incorrectly. Apparently so many people misuse the acronyms URL, URI, and URN that there is entire blog posts out there trying to clear up the confusion.
So why is this random piece of knowledge so important I felt like doing a blog post on it? Well put simply I believe that it’s important to try and learn all you can about your trade even those random snippets of knowledge that honestly most people will never need to know. Unless you deal with web based software or technologies that deal directly with internet protocols you probably will never care what people call that magic string of characters that takes you across the internet.
So I got distracted but in a good way. I realized as I was coding up the login system for the LMS Project (my Bachelor’s Degree Senior Project) that I’m going to need some kind of ID (unique identifier hashing) for Hive and almost four hours later I have a working but extremely broken YouTube-esque unique identifier hashing algorithm.
First let me lay out the background research. Naturally I Google searched like crazy and came up with a ton of resources but the first thing that actually caught my attention long enough to be of use was Instagram’s Sharding & IDs at Instagram article. To be honest it hurt my head trying to understand it but it lead me to eventually find Hashids which looked promising. After picking apart what Hashids does though its not exactly for me. My goal is more YouTube minded where I create a unique identifier that is not based off a auto incremented database column. Hashids does a decent job at hiding the original integer ID but I like the security and ease of scale of YouTube’s video URL hash. With YouTube’s algorithm you can not just switch around a few letters or numbers and easily pull up hidden videos and when need you can allow the ID to be bigger than the current 11 character limit. Currently the algorithm has 6411 possibilities, in non-math speak 73,786,976,294,838,206,464 possibilities, but can really be represented as 64n since they do not seem to check for curses: bad words that accidentally get generated. This is about the time that I stumbled upon this awesome video.
This has been a very eventful week and a very successful one as far as my programming career goes. Besides the post I put up a few days ago, Knowing when it’s time to toss code out!, I also stumbled on to a bug that turned out not to be a bug and figured I should share.
As a precursor to this article, and your going to have to take my word on this since I can’t find the original article, I’m fairly certain I was taught self revealing modules incorrectly from some programmers blog post. He seemed so knowledgeable.