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.
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.