Software and Technology
Monday, 12 September 2022
One of the many new features in iOS 16 is a battery percentage indicator layered on top of the battery symbol. Here are the quick steps to enable this feature.
Done!
Monday, 12 September 2022
One of the many new features in iOS 16 is a toggle to enable haptic feedback (fake clicks) for the system keyboard. I am very excited about this change, so I am making a quick post to share how to enable this feature.
Done! Enjoy your keyboard clicks!
Monday, 3 January 2022
Each year, I like to sit back and think about what the coming year may look like for technology. This year, I decided to write about some of my predictions. These are my thoughts for the remainder of the Apple Silicon Transition, in 2022.
Back at WWDC 2020, Apple announced that it would begin a transition to Apple Silicon that would last for roughly two years. If we take that statement at face value, then by June of this year we should have a full lineup of desktops and laptops, all using Apple Silicon.
Ever since the announcement, there has been endless speculation about how each product would be transitioned to Apple Silicon. Fast-forward to now, we are really starting to get a feel for what Apple is capable of when they have greater vertical integration in the Mac lineup. As of January 2022, we have seen updates for the MacBook Air, MacBook Pro (twice), Mac mini, and the 24-inch iMac. The only remaining devices in the current lineup are the 27-inch iMac and the Mac Pro.
As I see it, the next product likely to be updated is the 27-inch iMac. I believe Apple will introduce a new iMac, of the same size, that will match the design of the 24-inch iMac from 2021. While matching the style, there will one big difference: the lack of colorful options. With the lack of colors, the 27-inch iMac will be rebranded the iMac Pro, with its smaller counterpart dropping the sizing adjective to be called iMac. Like the iPhone’s of recent, Apple will continue leaving the colorful options to the non-Pro products and provide a limited set of muted-tones to the Pro products.
Finally, the last device to be updated — the big-boy of Mac computers — the Mac Pro. For me, this is going to be the most exciting device to be transitioned. While I am not in the market for the Mac Pro — this device has always aimed to exemplify the greatest of the great of computing. With this transition, we could see the next great leap in computing power and efficiency. This update will present a smaller case and (hopefully) retain all of the expansion slots that are in the current Mac Pro. Removing the expandability of this machine would be a huge step backwards for the company that just made the (famously) modular 2019 Mac Pro.
To me, this transition has been invigorating, to say the least. Once again, I am excited about the Mac. Every release has me waiting with bated breath to see what has been improved. Even with my (now out-dated) 2020 MacBook Pro, I have benefitted from the improved power and efficiency of the Apple Silicon transition with exceptional build and compile times in my Python and Xcode projects. That said, things can always get better, and that is what really excites me about the future of Apple Silicon.
Friday, 31 December 2021
My style of software development is a bit abnormal — or maybe it is completely normal. During the development cycle of an app, I will be working on a feature and out of nowhere — like a gift from the heavens — a new app idea. This new idea may or may not have any relation to what I was working on — but an idea it is.
The most recent iteration of this was when I came up with an idea for a game-score display that looks like a traditional scoreboard. While I can’t, yet, discuss the app idea behind this — what I can tell you is that the content of this post will be in an app that I will be releasing sometime in 2022.
What do I mean by a traditional scoreboard? Well, to get started, let’s abandon the scoreboard example and go with something simpler — a clock — specifically, my clock.
My alarm clock featuring a seven-segment display.
This clock is made up of three seven-segment displays.1 The three displays in this clock can be used to display every number, 0-9, by turning a selection of the segments on or off.2
Simple, right?
If you are interested in learning about how seven-segment displays work, this post explains in greater detail.
Enough with the background, let’s get started with the implementation.
The UI for the seven-segment display is not very complicated — so let’s get started.
Open the Assets.xcassets
file — create two new color sets.
displayOff
displayOn
Your results should look like this.
Create a new file titled: Segment.swift
.
This file will contain a Segment
class that subclasses UIView
. When subclassing UIView
, we need to override the initializer functions.
Now, let’s configure the Segment
. This view is relatively simple, as the segment is a reusable view that represents each of the seven segments of the display.
In the initializer function, we will define our default background color, round the corners, and prepare the object for auto layout.
Excellent! Now, you will have noticed that we used a function (roundCorners
) that does not currently exist. Let’s fix that.
Step 3 - Create the roundCorners
helper.
Create a new file titled: Extension+UIView.swift
.
For this step, I am going to skip the explanation since this is boilerplate code that I reuse in all of my projects (and I’m pretty sure that I lifted this from Stack Overflow). If you are interested in learning more about this code, let me know.
Okay, now we can get back to the fun. It is time to build the seven-segment number. The display itself can be made up of as many numbers as you would like, but for now, we will build the reusable number.
First thing’s first, create a new file titled: SevenSegmentNumber.swift
.
Like before, with the Segment
class, we will be subclassing UIView
and getting started by overriding the initializers.
Next, we can use that Segment
view that we created earlier to define our seven segments.
I am following a standard naming convention for the segments — if naming the segments: top, bottom, middle, etcetera makes more sense to you — then more power to you.
Finally, the final step is to define the layout constraints. Each segment gets four unique constraints to set the exact location. All of this code is contained in a single function that should be called in the initializer.
Now that the individual seven-segment numbers are complete — we can combine them into the full display. For this tutorial, we will be creating a three digit display with a ones, tens, and hundreds position. For your use case, you can modify this class to add more positions.
For the final time, create a new file titled: SevenSegmentDisplay.swift
.
Like last time, we will subclass UIView
and override the initializers.
With the class prepared, we can add our three number displays and title them accordingly.
Then, we can add them to the view and position them using auto layout. I am using the same function (setupViews
), and calling it in the initializer.
All done! You have now configured all of the UI for displaying a three-digit seven-segment display. Next, we will move on to adding the functionality.
Really quick, before we move on, at this point you could start implementing the seven-segment display into your app. Here is the code to do that.
First, create an instance of the display.
Then, add it to your controller and add the constraints.
All done!
Finally, we have finished the implementation of the UI — now we can move on to the functionality. If you happened to try the last step of the UI section and added the display to your app, you would have noticed that nothing happens. Let’s fix that.
A critical function for the display is to be able to reset back to an expected state. For us, that state will be all zeros.
In the SevenSegmentDisplay.swift
file, let’s start by writing the reset function.
Once again, we are calling functions that don’t exist, yet. Time to fix that.
Now that we know how to set a number for a part of the display, we need to setup the code to turn segments on and off.
In the SevenSegmentNumber.swift
file, we will get started by writing yet another reset function. This time, we are not reseting to a specific number, we are resetting the number display to off. This will assist, later, when we need to write functions to display our numbers, zero to nine.
Since we have an easy way to reset the state of the display, now we can setup the functions that will turn the display on. To keep this functionality as simple as possible, I have written individual functions for each number. I will step through them one by one.
Zero (0)
One (1)
Two (2)
Three (3)
Four (4)
Five (5)
Six (6)
Seven (7)
Eight (8)
Nine (9)
With all of these number functions, we can now write the final function for the single digit display — the set value function. This function takes an integer and then calls the appropriate function for turning on the right segments.
With the last step complete, we are now able to show numbers using the seven-segment displays. The final step in configuring the functionality is to add a display function to take an integer (0-999) and show it on the multi-digit seven-segment display. All of the functions that we have added can now come together to enable this.
The first part of this function is to check whether the value will fit on the display. If it will, then we turn the number into a string, get the length, and set the number in the ones, tens, and hundreds place. If the number does not fill all three places, then the empty spaces are set to zero.
You now have a fully functional seven-segment display to use in your app. To set a value, you need to call the function we just wrote and provide the number you want to set.
For example:
This is what you get in your app!
A fully functioning version of this code is available on GitHub.
If you have any questions or recommended changes, feel free to create an issue or submit a pull request.
Yes, I know, there is more to this display. A dot to show AM/PM, a dot to show if the alarm is on, and a leading 1 that shows during 2 digit hours. But, we will ignore those for this discussion. ↩
While seven-segment displays are able to display most letters, we will be focussing on numbers for this example. ↩
Saturday, 4 November 2017
This post is from a retired blog, hosted here as an archive. The original post date and content has been retained.
For the month of November, we are going with a new challenge to encourage everyone to try to cut down on any excess spending in their lives. For example: eating less fast food, avoiding going out to the movies, or maybe even removing some unneeded subscriptions.
At the end of the month, we will submit a follow up, to this article, showing our success – or failure. If you want to share your progress, throughout or at the end of the month, check out our subreddit – there will be room for you to discuss, over there!
Our plan to achieve this goal is the following. First, we will review our budget to see what categories we can trim down. Things like entertainment and restaurants are a really good place to start. Eating at home is much cheaper and a lot of times, healthier. Second, we are going to be very conscious of what money we spend, and where. If it is not necessary, we won’t buy it. This does not mean that we will be living a worse life than before, all this means is that we are cutting off the fat that isn’t needed. Finally, the last part is that we will be looking to improve our lives by finding other ways to entertain ourselves, ways that make us better today than we were yesterday.
Good luck! See you at the end of the month!
Saturday, 4 November 2017
This post is from a retired blog, hosted here as an archive. The original post date and content has been retained.
Focusing on your health can be a daunting task. There are so many different aspects that you need to focus on and it is difficult to decide which ones to pay the most attention to. Fortunately, technology has really been trying to make this easier for us. There are a lot of different applications and hardware solutions for this, but for this article, I want to talk about the Nokia Body Scale.
The Nokia Health Suite, as I am going to call it, is actually a relatively new thing. In mid 2016, Nokia purchased a company called Withings. Withings was a company that focused on creating connected technology for a healthier lifestyle, one of those things being a WiFi connected scale.
I have, for some time now, desired a way to keep track of all of the aspects of my health. My goal was to know how I’m doing in my workout regiment and to know how my body is doing. I have various devices and apps that I use to keep track of how I am doing, but the Nokia Health Mate app is the newest addition. I will have a separate review that will talk about the app in more detail, later. For now I am going to just focus on the scale.
:sidenote: This app is relevant because Nokia Health Mate is required for syncing the scale to your phone.
There are three options that you have to choose from if you want to purchase a Nokia Scale. There is the Body, the Body+, and the Body Cardio. Each of the three have more features than the previous, respectively, and are priced at $60, $100, and $180.
Check out the image below to compare the scales.
As you can see, there are advantages and disadvantages to stepping up in price. I decided to go with the Body Scale for many reasons. Firstly, the full body composition analysis, on the Body+, did not really appeal to me. I, personally, do not see a benefit to knowing what the breakdown of my body is, as long as I am within the BMI range that I should be – for a healthy weight. That, in and of itself, ruled out the Body+. Therefore, the only two remaining options were the Body and the Body Cardio.
I did – and still do – like the Body Cardio, A LOT! I still contemplate upgrading to the Body Cardio, but I can’t seem to justify the price with the other technology that I am already using. For example, I already have an Apple Watch that monitors my heart rate. So to me, there is no reason to have a scale, that does the same thing, for an extra $120. Now, yes, the Body Cardio does do other things as well, and those are really great, but the price difference isn’t really worth it – for me. That being said, if you have the money, or if you don’t have a device that monitors your heart rate, I think the Body Cardio may be worth it for you!
I have really enjoyed using the Body Scale. I have had it for almost a month now and have been taking readings about twice a day. The readings, to my knowledge, have been extremely accurate and I have been enjoying how easy it is to use.
The set up process is a breeze. You can choose to either set it up with WiFi or Bluetooth, though WiFi is required for some of the features to work properly. More or less, you pair the device to your phone with Bluetooth, follow the set up instructions, and you’re done. From there, you just step on the scale and it outputs the data to your phone.
During my setup, I personally chose to use my scale with WiFi. I knew that I would be using the multi-user function, and WiFi is required for that to work properly. The multi-user function, so far, has worked great. I can step on the scale, and it knows it is me. It shows my name in the top left of the screen, and then writes the data to my phone. If for some reason it can not figure out who I am, then it still takes the measurement and lets me choose who it belongs to, in the app.
Using the scale is simple… stand on it, wait a few seconds, get off. Yes, that was a rough way of describing it, so I will try again. When you step on the scale, it makes sure your weight is centered and then it takes a reading. This process takes a few seconds and once it is done, it shows your weight on the screen. From there, there are a few different screens that it shows for more information – then the scale turns off.
Now that the reading is done, it transfers the data to the app for you to view a graph of your weight change over time. This function is really quite cool and I will be doing an in depth review on the app at a later date. Stay tuned for that.
The multi-user feature, to me, is a real selling point. When I go to step on the scale, in the morning, I do not want to have to click through a set of buttons to chose the right user. I just want to get on the scale and see the reading. This scale does just that. I do not know the exact technology behind this, but I am assuming that it takes your body weight and assumes that you will weigh about the same, with some room for fluctuation, the next time you step on the scale. The technology behind this really isn’t important, though. The fact that it works is what is important.
I have used this with two separate people; myself and my girl friend. The scale was able to differentiate our weights and know who’s app to write the data too. I look forward to testing this more as time goes on – if I notice any change in the promise of this feature, I will update the article.
I really enjoy the Nokia Body Scale. It does exactly what it is advertised to do and I have been really happy with the design and the usability, so far. The app that accompanies the scale is really well designed and I think it will be very interesting to see how it is improved over time. I would definitely recommend this piece of tech to everyone, it is not very expensive and it does exactly what it is meant to do – weigh the user that is standing on it.
Buy the Nokia Body Scale, I really enjoy it and I think it is a great addition to anyone’s bathroom. It is sleek, quick, and easy to use.
Tuesday, 18 April 2017
This post is from a retired blog, hosted here as an archive. The original post date and content has been retained.
I don’t think that I can make a better description, for the Atom editor, than the developers already have, so here is the description from their website!
“Atom is a text editor that’s modern, approachable, yet hackable to the core—a tool you can customize to do anything but also use productively without ever touching a config file.”
— Atom.io
Atom is a lightweight, customizable code editor from the people over at GitHub. To me, Atom is a customizable code editor with a package manager and intelligent code auto completion. I have been using Atom for a good while now and have had plenty of time to customize it to my liking. I think I have gotten it to where I like it and I am happy to share what I have, now.
I have setup my development environment to be tailored to my needs directly. Not everything in this post may suit you or your needs, so if it doesn’t, you can ignore that part. I will only be talking about my themes and packages in this post, if you want to know about the more in depth settings – let me know. If you have any questions about my setup, please leave comments below or contact me on social media!
UI Theme: One Dark
Syntax Theme: Solarized Dark
Auto Close HTML
Auto Close HTML allows for, super easy, code, auto completion. With this package you don’t have to worry about formatting your opening and closing tags – you can just get right to the creative stuff, and have fun doing it!
Emmet
This package allows for shorthand code generation. For example, if I write:
li.item*3>p.text
I will get three list items with the class of item containing paragraph blocks with the text class.
This is a very useful tool to speed up the code writing process. I find this most handy when I am just starting out on a project. With Emmet, I can build the structure of a page very quickly and jump right into the content creation.
Minimap
Minimap gives you a zoomed out view, on the side of your Atom window, to give you an easy overview of your code structure. With this view, you can click around and jump to different parts of your document quickly.
Pigments
This package shows a swatch next to a color code. This package allows a lot of customization. For example: you can change where the color examples show up and what the example should look like.
I really enjoy using Atom for my web development. I have come to the conclusion that it is a very robust editor with a lot of features that not all other free editors come with. That being said, I would like to hear your opinions and hear about what editors you all use. Feel free to reach out via social media or in the comments! I look forward to hearing from you all!
Friday, 10 February 2017
This post is from a retired blog, hosted here as an archive. The original post date and content has been retained.
Welcome message: For those of you that are new to the blog, my name is Jon. I am the founder of Avid Web Co. I decided to create this blog to document anything and everything about AWC, technology, and my life. This post is going to be about the beginning of AWC, specifically. That being said, I do promise each and every one of you, that over the life of this blog – things will change. I know most people are scared of change, but sometimes change is good and it helps people get new perspectives on things that they possibly hadn’t thought of before.
One more disclosure before we start this entry. When it comes to grammar, I try my best, but sometimes my English writing abilities fall over. If I do make any mistakes, please be gracious in your criticism. I will do my best to proofread, but I want these entries to be casual – therefore I am going to write, here, as I would speak. Thank you for your patience.
I have always really enjoyed design. For a long time, I used my design skills to create custom images and designs in Photoshop and GIMP. Starting out, I used GIMP, because it was free. I started by making background images and designs based on inspiration that I received from various YouTube creators. After a short time, I decided I wanted to get into making my own videos, for YouTube. My original plan was to make a technology channel. On the channel, I would show people how to create some of these designs that I had made. With the design videos, I would include un-boxings of new technology. My first video was posted on February 24, 2011 (you can watch that here) – #cringe.
The tech unboxing plan went well until I started struggling to find the money to buy all the technology to unbox. That’s when I decided to roll over to the gaming scene. This went a lot better. It cost me almost nothing, and there was very little effort required. The only requirement was to play a game that I enjoyed. With this decision, I didn’t completely stop making tech videos, I just decided to spread them out to lower the investment.
After a good while, the gaming videos started to take off and I was getting better at recording and editing the videos. Unfortunately, I still wasn’t very happy with what I was doing. My goal was to entertain people, and I was, but I wasn’t making anything worth while, in the long run – gamer doesn’t really fit on a résumé. It was time to find a better outlet for my creativity.
I slowly started dabbling in web design. I started to create basic webpages with very little information and some pretty designs. That still wasn’t good enough. My aspiration for perfection and my desire to make professional, beautiful, websites was not being met. I kept pushing, and finally I was getting somewhere. There was finally something, semi-good looking, that I was happy to show off. I started showing everyone what I had done, and this paid off. After pushing more and more, my sites kept getting better. My first big accomplishment was when I joined a small start up, as their web developer. I launched a small custom built website for the splash page and created a forum for the communication between users.
At this point, I had some experience and a credible project to show off. After some time, I had a restaurant owner reach out to me for help with a website for his business. After a few conversations, we agreed on a design and I completed the website for him. That site, since, has been discontinued, but you can view the design here.
Those two websites were just the beginning. They were the first stepping stones in my career. Without those projects, I probably wouldn’t be where I am today. Since then, I have had a lot of other projects and jobs, but like I said, I wanted to keep this short. I covered the most important parts. At some point, I will continue this thread, but in the mean time: feel free to ask any questions down below. I’m always happy to explain things in more depth!