March 2019 Updates
- New Domain Name Servers (DNS) page.
- New review on different serialization formats (e.g. CSV, JSON, TOML, XML, YAML). This can be found at the A Comparison Of Serialization Formats page.
- NinjaCalc was moved from paid GoDaddy shared Linux hosting to my free Netlify hosting. Not only does this make the build/deploy step much easier (Netlify automatically builds and deploys when changes are pushed to
master), but it also saves me money! After this blog was converted from Wordpress to Hugo and also moved to Netlify a few months ago (see the Site Migration To Hugo Complete post for more info), I no longer have any need for the GoDaddy server, saving approx. US$150 per year!
- Added new "shuriken" feature to posts and pages. You can now click on the shuriken to "upvote" content! You can get more information on the Adding Shurikens post.
- Added a QGIS page (open-source, free-to-use GUI software to working with geospatial images) with information on how to add tile servers, start multiple instances of QGIS and more.
- Updates to the quaternion page, including:
- A new quaternion to rotation matrix calculator Quaternions page.
- Info on converting from quaternions to rotation matrices.
- Updates to the
imgshortcode so that it also works with
Recently I felt the need to increase the amount of visitor feedback on this blog. I really liked medium.com's "claps", where visitors can click to give claps (more than one if they want) for articles. No log in or social media connections are required, which makes it low effort on the visitors part.
Since I am no longer using Wordpress and a continuously running server to host this blog, I couldn't just use that to implement this feature. I am now using a static site generator and hosting on Netlify, and this cannot store any state (we need to keep track of how many clicks each page gets). So I decided to learn more about cloud computing and create a backend/API in AWS.
Continuing with the Ninja theme, rather than likes, +1's, thumb ups or claps, this blog has "shurikens" (Ninja stars).
You can see the backend code at https://github.com/gbmhunter/shuriken-backend. The front-end is embedded in the code that generates this blog, which can be found at https://github.com/gbmhunter/blog. Files of interest in the
blog repository include:
- layouts/partials/shuriken.html (Shuriken frontend HTML)
- static/css/style.css (Shuriken frontend CSS)
You can see the final result in this .gif below (or just look at this webpage!):
AWS services are used to provide an API and persistent database for the static site front-end to talk to. AWS Lambda is used to implement the API which means that no cost is incurred when the API is in use (i.e., I don't have to have a server running 24/7). Below are some interesting stats on the services I used:
- 1M free requests per month
- 3.2Ms of compute time per month
Amazon DynamoDB Free Tier
- 25GB of storage
- 25 units of write capacity
- 25 units of read capacity (enough for 200M requests/month)
The great NPM library serverless was used to create all of the above infrastructure. serverless allows you to create things such as Lambda-based APIs backed with a DynamoDB database in a really easy fashion, without having to delve to much into the cloud infrastructure design. It automatically creates the services, roles, permissions, and connections.
Runtime: Node.js 8.10
- IAM User:
- Access Type: Programmatic Access
- Permissions: AdministratorAccess (policy directly attached to user)
Serverless is given the AWS credentials to the serverless user with (using the
$ serverless config credentials --provider aws --key <key> --secret <secret_key>
Service can be deployed with:
$ serverless deploy -v
TravisCI is used to build and deploy the backend. The AWS credentials are stored in secret TravisCI environment variables called
Disqus Reaction Removal
Adding these shurikens also meant I no longer had any need for the "Disqus reactions". These reactions where a piece of functionality the Disqus commenting system let you enable which would allow viewers to choose between 6 or so basic emoji (upvote, funny, love, e.t.c). I had always found this a tad tacky and untidy, but until now was the only way viewers could quickly react to content. Now that the shurikens have been added, I have disabled the Disqus reactions.
What Could Be Improved
- If any part of the page URL changes (including the domain name), the shuriken count will be reset. It would be nice to be able to track page URL changes and keep the count state.
- There is no authentication process for the public API, anyone could use it, which could cause increase AWS costs (we will see if this becomes an issue).
- Have separate
proddeploys of the shuriken backend, currently I am just using
February 2019 Updates
- Updates to the Bash Programming page with a tutorial on how to deal with special characters in filenames and directories.
- New Python Classes And Object Orientated Programming page.
- New WebSockets page with a basic introduction only.
- Updates to the Quaternions page including info on combining rotations, useful Quaternions and interpolation with SLERP.
January 2019 Updates
New Serialization Formats section under Programming.
New tutorial on Bresenham’s Line Algorithm.
Big updates to the Algorithm Time Complexity page.
Added new page on Python sets.
All github.com/mbedded-ninja repos were moved to github.com/gbmhunter and the mbedded-ninja organization on GitHub was deleted as it was not really serving any useful purpose.
Happy New Year 2019
Statistics for 2018
This is the first year I have used Google Analytics to gather these statistics. Even though I have been using Google Analytics for many years, in previous years I just relied on the statistics presented in the Wordpress admin dashboard. This is no longer possible as I am now using Hugo to power this site. This also means that the reported numbers are different, in fact, Wordpress seemed to always report higher numbers than Google Analytics. The stats for 2017 on this page are also from Google Analytics so that a fair comparison can be made. See the Happy New Year 2017 post for the Wordpress sourced 2017 stats.
A User is a unique person who visited this website at least once.
Most Popular Pages
Ranked by number of page views:
|Altium Tricks And Standards||10.5k||Altium Tricks And Standards||11.0k|
|Altium Bugs And Things To Watch Out For||4.9k||Altium Bugs And Things To Watch Out For||5.8k|
|Home Page||3.9k||Linux Serial Ports Using C/C++||4.6k|
|A Function Pointer Based State Machine||2.3k||How To Use SocketCAN With The Command-Line In Linux||4.4k|
|Component Packages||2.2k||How To Use SocketCAN With C In Linux||4.4k|
|Altium Scripting And Using The API||2.0k||Homepage||4.2k|
|Altium Keyboard Shortcuts||1.7k||A Function Pointer Based State Machine||3.3k|
|UART Protocol||1.4k||Altium Scripting And Using The API||2.7k|
|PCB Design||1.3k||Adding A Custom App To A Yocto Build||2.5k|
|How To Unbrick A PICkit 3||1.2l||Altium Keyboard Shortcuts||2.3k|
5 most popular acquisition methods by number of users:
|Organic Search||34.4k||Organic Search||53.6k|
Most Popular Referrers
5 most popular referrers by number of users:
Plans For This Year
- Utilize Hugo to it’s fullest capabilities. Although the migration from Wordpress to Hugo is complete, I feel like I have not yet explored all of the possibilities that Hugo allows. This includes sitemaps, RSS feeds, automatic thumbnail creation, better shortcodes, e.t.c.
- Find a way to reliably detect dead links as they occur, along with an easy way of fixing them.
- Move all of the mbedded.ninja GitHub repos into my own personal account, as there is no real need for a mbedded.ninja “organization” on GitHub, at it just leads to extra work and confusion on where repos are.
- Remove all the excess images in the blog repository. As a result of the Wordpress migration, there are many copies of a single image, each at a slightly different pixel size (I’m assuming they were created as part of a page load speed optimization in Wordpress). These are un-needed as Hugo can resize images at build time to correctly fit the container on the page. These extra images are just using up repo space.
- And of course, as always, add more content!