About three years ago, Ruby on Rails was all the rage. In order to familiarize myself with it, I took the step of converting this website to Ruby on Rails. It was previously implemented in ASP.NET. I was frankly unimpressed with Rails. The Ruby language was nothing special, and I found the integration between the Rails commands and the database to be annoying, rather than helpful.
Recently I got an email from Google announcing the imminent deprecation of their old captcha API. But I could not force myself to even find an updated captcha gem and get it working. Now the excitement that was formerly focused on Ruby on Rails has largely shifted to Node.js. So I decided to "kick the tires" of Node.js, by again converting the website.
As of about a week ago, this website is powered by Node.js. I'm using the Express web framework, and a mysql database. I'm using the WebStorm development environment. Many Node.js developers are using MongoDB but, my data was already in mysql, and I know SQL pretty well. The website is hosted by A2 Hosting. A2 does a pretty good job, and at least for now, I am getting very good performance and support, especially considering the small price that they charge. I'm on the "Swift" hosting plan, in case you're curious.
Here are the major components that were used in this website's Node.js / Express incarnation:
|forever||By default, your Node.js app will stop right after the first uncaught exception occurs. In this situation, forever will quickly restart my web application.|
|passport, passport-local||Passport provides user authentication for my "admin" user, who has access to ericbt.com's administrative functions.|
|emailjs||I use emailjs to generate email notifications to me. (This website does not send emails to anyone else).|
|formidable||Parsing form data for image uploads|
|morgan||HTTP Request Logging|
|async||When I implemented pages that required multiple data items, I found myself writing deeply nested code that didn't exploit concurrency opportunities. async allowed me to replace my code with more elegant, readable, and efficient code.|
|line-reader||Log file filtering|
|bootstrap||HTML styling, navigation bar, pagination, image styling, "glyphicons"|
|compression||Gzip compression of website content|
|Google reCAPTCHA service.||Reducing nuisance data posted to public forms.|
|heapdump||Memory leak troubleshooting|
I was really surprised by two things during this conversion effort:
Surprise #1 was due to the fact that Node.js and Express don't get in the say of rapid development. It is a real pleasure to implement a new page, or new feature, in minutes rather than hours.
Take a little time each day to play, even if it's just with new software development technologies.
|Python Script to Audit MediaMonkey Transcoding||August 15, 2019|
|How to decompile Java code with JetBrains IntelliJ IDEA (2018.2.3, Windows 10)||October 5, 2018|
|Java Programming Tip: SWT Photo Frame Program||October 31, 2016|
|Vault 3 (Desktop) Version 1.63 Released||September 9, 2016|
|"Compliance with Court Orders Act of 2016"||April 9, 2016|
|Disable "Visual Voicemail" on Android / T-Mobile||January 17, 2016|
|IPv6 Humor||December 10, 2015|