AI and Software Development – Part 6

I’ll be honest. I both love and hate technical documentation.

In the love camp, technical documentation is as precious as gold if I have to fix or enhance a legacy application that someone created before me. And the gold is not just the details but often the unwritten words between the sentences. The subtle tone of the author often tells me as much about the intent of the application and the nuanced politics that swirled around its creation.

In the hate camp is the monotony of going from being a creator writing code, something I love to do, to someone either retelling a story for the nth time or pretending to be an oracle able to predict the future. As they say in the military, the plan is the first casualty of any battle.

In the end, I consider formal, structured documentation a necessary evil. When I need it, spending the time to create it might pay off in the future, either for the next developer who takes over for me or me.

Let’s see how good ChatGPT 4 is turning my code into a technical specification document.

Me

Write a technical specification document for the most recent iteration of the application.

Technical Specification Document

SwiftUI Circular Progress Time Indicator Application

Version: 1.0

Date: [Date]

Author: [Author]

1. Introduction

The SwiftUI Circular Progress Time Indicator application is a single-view iOS application designed to display the current time in hours, minutes, and seconds using a nested group of circular progress indicators. Each circular progress indicator is assigned a different color and size, representing hours, minutes, and seconds.

2. Application Overview

2.1 Purpose

The purpose of this application is to provide a visually appealing and intuitive way to represent the current time using circular progress indicators.

2.2 Features

  1. Displays the current time using a nested group of circular progress indicators for hours, minutes, and seconds.
  2. The circular progress indicators have different colors: blue for hours, green for minutes, and red for seconds.
  3. The diameters of the minutes and hours circular progress indicators are 75% and 50% the diameter of the seconds indicator, respectively.
  4. The circular progress indicators have a lineWidth of 24.
  5. The current time is displayed below the nested circular progress indicators with separate colors for hours, minutes, and seconds.
  6. The circular progress meters include animations that rewind the value back to zero when they reach their maximum value.

3. Technical Requirements

3.1 Platforms

The application is developed using SwiftUI and is compatible with iOS devices running iOS 15 or later.

3.2 Dependencies

No external dependencies are required for this application.

4. Application Structure

The application consists of a single view (ContentView) containing the following components:

  1. VStack: Contains the main layout of the application.
    1. ZStack: Contains the nested circular progress indicators.
      1. CircularProgressView: Custom view for the hours circular progress indicator.
      2. ZStack: Contains the minutes and seconds circular progress indicators.
        1. CircularProgressView: Custom view for the minutes circular progress indicator.
        2. CircularProgressView: Custom view for the seconds circular progress indicator.
    2. HStack: Contains the Text views displaying the current time in hours, minutes, and seconds with separate colors for each value.

5. Application Logic

5.1 Updating the Time

The application uses a timer with a 1-second interval to update the current date and time. On each timer tick, the current date is updated, which subsequently updates the hours, minutes, and seconds progress indicators.

5.2 Calculating Progress

The application calculates the progress for hours, minutes, and seconds as follows:

  1. Hours progress: The current hour divided by 12 (resulting in a value between 0 and 1).
  2. Minutes progress: The current minute divided by 60 (resulting in a value between 0 and 1).
  3. Seconds progress: The current second divided by 60 (resulting in a value between 0 and 1).

5.3 Animations

When a progress indicator reaches its maximum value, it animates the rewind back to zero using a linear animation with a 0.2-second duration.

Me

Thank you. That was a description of the application far better than I could have created.

You’re welcome! I’m glad you found the technical specification document helpful. If you have any more questions or need further assistance, please don’t hesitate to ask. I’m here to help!

Next up my summary and conclusions about AI and software development. How AI will turn our jobs into vocations and as a result will change everything.

AI and Software Development – Part 5

As I reached the end of the ChaptGPT 4 generated press release announcing I’d hired ChatGPT itself as Forefront System Inc.’s (FSI) first employee, I noticed an empty section where the AI was suggesting my company logo should be added. Logo? We don’t need no stinkin’ logos!

I incorporated FSI in 1995, twenty-eight years ago, and I never considered branding the company with a distinct look and feel. In 1995 and the following decades, the cost of creating a logo didn’t seem justifiable, given that I was a word-of-mouth-driven business. In addition, most of my work came through other contracting companies, so my marketing needs were nonexistent.

But, a few months ago, I tripped down the AI art rabbit hole and discovered Midjourney. As a professional nature photographer (my other life), I was both entranced and petrified in the same way that learning that ChatGPT 4 could generate SwiftUI code had caused.

Time to brand Forefront Systems with an AI-generated logo.

Thirty seconds later I prompted Midjourney version 5 with:

/imagine logo for a company called Forefront Systems Incorporated in the style of the ChatGPT logo --v 5

Hmm. Maybe for the companies thirtieth anniversary I should order a set of business cards and a coffee mug or two with the logo. 🙂

AI and Software Development – Part 4

Hiring is one of the most challenging parts of running a company. Sam Altman, CEO of OpenAI (the creators of ChatGPT) says he spends a third of his time searching for the right fit. Hiring an AI on the other hand is far simpler. Especially one that shows great potential.

Time then to hire ChatGPT as Forefront System’s first employee. A rather simple decision given it aced the old-school developer interview process (write an app in front of the interviewer) and its expected salary, $30 CAD per month and no need for benefits, time off and lunch breaks are pretty attractive.

Me

Forefront Systems Inc. (FSI) is a software development company located in Vancouver, Canada that creates mobile and desktop software for the Apple ecosystem of products on the unceded territory of the sḵwx̱wú7mesh (Squamish), sel̓íl̓witulh (Tsleil-Waututh), and xʷməθkʷəy̓əm (Musqueam) people of Turtle Island.

Its motto is “Only when nature flourishes can humanity flourish.”

FSI has consulted to various British Columbia government ministries, local business and most recently Boeing Inc. to deliver high performance mobile and desktop applications.

Today, FSI hired its first AI based employee, ChatGPT 4, to help with the generation of the SwiftUI code for its future products. Write a one page press release announcing the hiring of FSI’s first AI based employee.

FOR IMMEDIATE RELEASE

Forefront Systems Inc. Hires ChatGPT 4 as First AI-Based Employee

Vancouver, Canada – [Date]

Forefront Systems Inc. (FSI), a prominent software development company based in Vancouver, Canada, is excited to announce the hiring of its first AI-based employee, ChatGPT 4. This groundbreaking move demonstrates FSI’s commitment to embracing cutting-edge technology and innovative solutions in its pursuit of excellence.

FSI, located on the unceded territory of the sḵwx̱wú7mesh (Squamish), sel̓íl̓witulh (Tsleil-Waututh), and xʷməθkʷəy̓əm (Musqueam) peoples of Turtle Island, has a longstanding tradition of creating exceptional mobile and desktop software for Apple’s ecosystem. The company’s motto, “Only when nature flourishes can humanity flourish,” reflects FSI’s dedication to sustainable development and environmental stewardship.

Throughout its history, FSI has collaborated with various British Columbia government ministries, local businesses, and most recently, Boeing Inc., to deliver high-performance mobile and desktop applications. By integrating ChatGPT 4 into its team, FSI aims to revolutionize the way it develops SwiftUI code for its future products, making the development process more efficient and dynamic.

ChatGPT 4, an advanced AI model developed by OpenAI, has demonstrated remarkable proficiency in generating SwiftUI code and assisting with software development tasks. The AI model will work closely with FSI’s team of skilled developers to accelerate the company’s growth and maintain its competitive edge in the industry.

“We are thrilled to welcome ChatGPT 4 to our team,” said [CEO/Founder’s Name], CEO of Forefront Systems Inc. “Incorporating AI technology into our development process will not only drive innovation but also allow us to better serve our clients and partners. This exciting milestone signifies our commitment to staying at the forefront of technology and shaping the future of software development.”

FSI’s decision to hire an AI-based employee highlights the growing trend of AI integration in various industries. By embracing AI, companies like FSI can improve their efficiency, optimize their resources, and explore new opportunities for growth.

For more information about Forefront Systems Inc. and its groundbreaking new hire, please visit [FSI’s website] or contact [Media Contact Person’s Name] at [Email Address] or [Phone Number].

About Forefront Systems Inc.

Forefront Systems Inc. (FSI) is a leading software development company based in Vancouver, Canada, specializing in creating mobile and desktop applications for the Apple ecosystem. FSI is dedicated to sustainable development and environmental stewardship, and has worked with various British Columbia government ministries, local businesses, and global corporations to deliver high-performance software solutions. By integrating cutting-edge technologies like AI, FSI continues to push the boundaries of innovation and maintain its position as a leader in the software development industry.

[Company Logo]

Media Contact:

[Media Contact Person’s Name]

[Email Address]

[Phone Number]

Nice!

AI and Software Development – Part 3.2

At this point in this experiment I’m feeling the dawn of that magical mental state we developers slip into – flow. The external world is now just a whispering distraction as my mind begins to focus itself on just the journey ahead. My sense of time simulataneousy expands and contracts as both the left and right hemispheres of my mind, the creative and the analytical, start listing to the same ambient soundscape playing on my headphones.

This feels different though. Now there is a second entity in this mindscape – an AI who speaks my language – SwiftUI.

The app is looking good but it’s not 95% perfect. Not yet “perfect enough” as we’d say at Boeing.

First, having the display of the time positioned right in the center of the view is rather distracting. It would make more sense to position this UX element below the three progress meters.

Me

Revise the code so that the Text that displays the time is below the nested circular progress views.

To display the current time below the nested circular progress views, you can modify the ZStack to be inside a VStack. Here’s the updated code:

… the code …

In this revised code, the Text view displaying the current time has been moved outside the ZStack and placed below it within the VStack. This will display the current time below the nested circular progress indicators.

Copy, paste, compile, run …

Perfect! Now onto polishing the progress meters.

They are functioning like I’d hoped for but my overarching vision for this app is Big~Bold~Beautiful! and while the three progress meters are rather beautiful they are a bit thin on being big and bold.

Plus, while I, as someone who has the code in front of them, understands that the red segment is for the seconds, the green is for the minutes and the blue is for the hours delivering the same information from more than one visual source, screen real-estate permitting of course, always delivers a better user experience.

Let’s push the envelope a bit and get ChatGPT 4 to fix two interface deficiencies at once.

Me

Revise the code so that the Text view used to display the time displays the seconds value in red, the minutes value in green and the hours value in blue. Set the width of the circular progress meters used to display the hours, minutes and seconds to 24.

To display the time with different colors for hours, minutes, and seconds, you can create separate Text views for each value and apply the desired colors. Additionally, you can set the lineWidth of the circular progress meters to 24. Here’s the updated code:

… the code …

In the updated code, separate Text views have been created for hours, minutes, and seconds, with their respective colors set using .foregroundColor(). The CircularProgressView struct now uses a lineWidth of 24 for the progress meters.

Copy, paste, compile, run …

Nice!

Big – check. Bold – check.

Beautiful – almost.

People love silky smooth animations. I love animations and I’m certain kittens love animations.

Time to see how far I can push this creative envelope of cooperation.

Me

Revise the code so that the circular progress meters include animations that rewind the value back to zero when they reach their maximum value.

To add animations for the circular progress meters when they reach their maximum values, you can use the .animation() modifier with a conditional check. Here’s the updated code:

… the code …

In the CircularProgressView struct, the .animation() modifier is added with a conditional check. If the progress value is 0, a linear animation with a duration of 0.2 seconds is applied, creating the rewind effect when the meter reaches its maximum value. Otherwise, the default animation is used.

Copy, paste, compile, run …

Beautiful – check!

Code complete. Thankyou ChatGPT 4!

At the end of this post is the final version of the app ready to be copied and pasted into your instance of Xcode. Something that was created entirely, with a bit of guidance from me, by ChatGPT 4.

But wait! There’s more!

At this point in this experiment I was so impressed that I decided to hire my first AI employee – ChatGPT 4 and its descendants. Obviously a press release from Forefront Systems Inc. is in order but I’ll save that for my next blog post.

import SwiftUI

struct ContentView: View {
    @State private var currentDate = Date()
    let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
    
    var body: some View {
        VStack {
            ZStack {
                CircularProgressView(progress: hoursProgress, color: .blue, size: 0.5)
                ZStack {
                    CircularProgressView(progress: minutesProgress, color: .green, size: 0.75)
                    CircularProgressView(progress: secondsProgress, color: .red, size: 1)
                }
            }
            HStack(spacing: 0) {
                Text("\(hoursString):")
                    .foregroundColor(.blue)
                Text("\(minutesString):")
                    .foregroundColor(.green)
                Text(secondsString)
                    .foregroundColor(.red)
            }
            .font(.system(size: 24))
            .fontWeight(.bold)
            .padding(.top)
        }
        .padding()
        .onReceive(timer) { _ in
            self.currentDate = Date()
        }
    }
    
    var hoursProgress: CGFloat {
        let components = Calendar.current.dateComponents([.hour], from: currentDate)
        let hours = CGFloat(components.hour ?? 0) / 12.0
        return hours
    }
    
    var minutesProgress: CGFloat {
        let components = Calendar.current.dateComponents([.minute], from: currentDate)
        let minutes = CGFloat(components.minute ?? 0) / 60.0
        return minutes
    }
    
    var secondsProgress: CGFloat {
        let components = Calendar.current.dateComponents([.second], from: currentDate)
        let seconds = CGFloat(components.second ?? 0) / 60.0
        return seconds
    }
    
    var hoursString: String {
        let components = Calendar.current.dateComponents([.hour], from: currentDate)
        return String(format: "%02d", components.hour ?? 0)
    }
    
    var minutesString: String {
        let components = Calendar.current.dateComponents([.minute], from: currentDate)
        return String(format: "%02d", components.minute ?? 0)
    }
    
    var secondsString: String {
        let components = Calendar.current.dateComponents([.second], from: currentDate)
        return String(format: "%02d", components.second ?? 0)
    }
}

struct CircularProgressView: View {
    var progress: CGFloat
    var color: Color
    var size: CGFloat
    
    var body: some View {
        Circle()
            .trim(from: 0, to: progress)
            .stroke(color, lineWidth: 24)
            .rotationEffect(.degrees(-90))
            .padding()
            .frame(width: 200 * size, height: 200 * size)
            .animation(progress == 0 ? .linear(duration: 0.2) : .default)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

AI and Software Development – Part 3.1

Time to see what the fuss about AI and software development is all about. Let’s get to it!

I connect to ChatGPT via my browser, start a new chat, select the GPT-4 model from the dropdown list at the top of the empty page and describe, in basic terms the application I would like ChatGPT 4 to generate the SwiftUI code for. This is a simple application so, in theory, a simple explanation should be sufficient.

Me

I would like to create an SwiftUI based application that displays the time of day as a nested group of circular progress indicators with different colors assigned to the hours, minutes and seconds indicator. The application should consist of a single view with the three nested circular progress indicators displayed. The progress indicators should be refreshed each second to display the hour, minute and second.

After a few seconds of processing my instructions ChatGPT 4 then provides a quick summary of the steps I need to follow to create the application followed by the SwiftUI code itself that includes a handy ‘Copy code’ button in the top right corner.

To create an SwiftUI-based application that displays the time of day using nested circular progress indicators, you can follow these steps:

  1. Create a new SwiftUI project in Xcode.
  2. In the ContentView.swift file, replace the existing code with the following:
import SwiftUI

struct ContentView: View {
    @State private var currentDate = Date()
    let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
    
    var body: some View {
        VStack {
            ZStack {
                CircularProgressView(progress: hoursProgress, color: .blue)
                ZStack {
                    CircularProgressView(progress: minutesProgress, color: .green)
                    ZStack {
                        CircularProgressView(progress: secondsProgress, color: .red)
                        Text(currentTime)
                            .font(.system(size: 24))
                            .fontWeight(.bold)
                    }
                }
            }
        }
        .padding()
        .onReceive(timer) { _ in
            self.currentDate = Date()
        }
    }
    
    var hoursProgress: CGFloat {
        let components = Calendar.current.dateComponents([.hour], from: currentDate)
        let hours = CGFloat(components.hour ?? 0) / 12.0
        return hours
    }
    
    var minutesProgress: CGFloat {
        let components = Calendar.current.dateComponents([.minute], from: currentDate)
        let minutes = CGFloat(components.minute ?? 0) / 60.0
        return minutes
    }
    
    var secondsProgress: CGFloat {
        let components = Calendar.current.dateComponents([.second], from: currentDate)
        let seconds = CGFloat(components.second ?? 0) / 60.0
        return seconds
    }
    
    var currentTime: String {
        let formatter = DateFormatter()
        formatter.dateFormat = "HH:mm:ss"
        return formatter.string(from: currentDate)
    }
}

struct CircularProgressView: View {
    var progress: CGFloat
    var color: Color
    
    var body: some View {
        Circle()
            .trim(from: 0, to: progress)
            .stroke(color, lineWidth: 12)
            .rotationEffect(.degrees(-90))
            .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

To make the effort even simple ChatGPT 4 then describes the finishing steps.

This code creates a ContentView with nested CircularProgressView for hours, minutes, and seconds, which are updated every second using a Timer.

  1. Run the project in the iOS simulator or on a physical device to see the application in action. You should see three nested circular progress indicators with different colors for hours, minutes, and seconds, along with the current time displayed in the center.

At this point I’m quite impressed and flash back to the hours spent creating this code from scratch. It looks good but the true test will be to see it run in the simulator and then, ultimately on my iPhone.

I create a new project and overwrite the boilerplate code created for ContentView with the code generated by ChatGPT 4. No errors are detected and I run the app on the Simulator.

Version 1

Nice! Not perfect but a respectable beginning. I’d hoped that by specifying that I wanted a nested group of circular progress indicators that ChatGPT would understand what it was that I was expecting but, obviously, not. What I got was ChatGPT’s vision not mine. But I knew this would be an itterative and cooperative process. Time for me to clarify to ChatGPT my the finer details of my vision.

Me

Regenerate the response so that the minutes and hours circular progress indicators are 75% and 50% the diameter of the seconds respectively.

To modify the size of the minutes and hours circular progress indicators, you can adjust the .frame() modifier in the CircularProgressView and add a custom parameter for size. Here’s the updated code:

From here on I will skip showing the actual code that ChatGPT 4 generates until we get to the final version and only show the results of each iteration. I will though include the other bits of the conversation that I had with ChatGPT 4.

Version 2

Not quite perfect but I’m not surprised it isn’t.

Next up – polishing.

AI and Software Development – Part 2

Created by Midjourney 5

A fun feature of SwiftUI is the ability to create progress indicators beyond the old-school left-to-right thin rectangle. Yawn. Rectangles are so 20th-century. Users today expect something big, bold and beautiful and circular progress meters fill that UX element nicely.

I also like to practice my software skills in creating digital clocks. I guess it’s a habit born of being an hourly contractor mixed in with having a post-graduate advisor who loved to restore old clocks. Rather than talk about the next steps in my studies, he loved to show off his latest centuries-old clock that was now “purring like a kitten.”

Time to put ChatGPT 4 to the test.

My goal is to describe to ChatGPT 4, a simple application that displays the time of day down to the second, using three nested circular progress meters representing the hour, minute and second on an Apple device. As a bonus, I’d also like the time displayed in the regular hour:minutes:seconds format. ChatGPT will be my software developer and generate all the SwiftUI code the app requires. Then, in a conversational style, I will act as the product manager and describe to ChatGPT the enhancements I want it to make as we drive towards a shared vision of the application.

Note the phrase “shared vision.” Working with an AI is quite similar to how I’ve worked as a member of a team of developers. Each of us has a vision of what the app will look like and how it will perform, and through a series of conversations, we eventually arrive at a shared vision. Not my vision. Our vision. Groupthink is a critical mindset when working with an AI—one of cooperation rather than domination. As a developer working with others, I must put my ego on the back burner and prioritize the shared vision over my vision. It’s not easy, but it’s always worth it.

AI and Software Development – Part 1

On August 31, 2017, while most of us were looking forward the arrival of the dog days of summer, the most fundamental advancement in Artificial Intelligence (AI) slipped onto the Internet and under the radar of nearly everyone. On that sleepy Thursday, Google published a white paper with the academic title Transformer: A Novel Neural Network Architecture for Language Understanding. A document that, in hindsight, might turn out to be the precursor of AGI – Artificial General Intelligence. The dawn of Homo Sapiens 2.0. A technology that, on November 20, 2022, would stun the world with release of ChatGPT 3.0.

ChatGPT 3.0 (the ‘T’ in the name meaning Transformer) turned out to be, pun intended, transformative regarding natural language processing (NLP). Suddenly, with a few lines of text, anyone could write a poem, complete a complex essay for high school and write reams of computer code in over a dozen languages, including my latest favourite – SwiftUI.

Four months later, ChatGPT 4.0 was released. An NLP that was an order of magnitude more powerful than its version 3.5 predecessor. A version that could pass the US bar exam and write a novels in a day. And, importantly to me, one that had the skill of an entry-level software developer to that of a seasoned veteran.

After 45 years of software development, I saw my career ending. Or was it? Did the development of the application program interface (API) design pattern end my career? No. It made it more accessible. Did the development of reactive programming languages such as SwiftUI crush my career as a UX designer? No. It made it infinitely more enjoyable. The evolution of the software development industry is no stranger to things getting more accessible and reliable. And while the arrival of ChatGPT and its code-writing skills stunned me, I knew this was just another moment of technical evolution.

It was time to see for me, and perhaps you, just how good ChatGPT 4.0 was for writing SwiftUI applications.

What follows will be a series of blog posts on my first crack at using ChatGPT 4.0 to create a simple but flashy SwiftUI application. The experience was, to be honest, stunning. In just an hour, I completed what even just a year ago would have taken me an entire week.

Xc Fonts 1.0

Forefront Systems Inc. is excited to announce the release of a new tool for iOS mobile app developers – Xc Fonts 1.0.

Xc (for Xcode) Fonts is a lightweight tool developed using the latest version of Apple’s new SwiftUI programming paradigm and provides mobile and web app developers with quick and easy access to the hundreds of fonts and thousands of characters bundle into the iOS operating system.

The app automatically interrogates iOS for the currently supported font families and their associated fonts which the user can then quickly drill down to view the complete character list, the Unicode values used to display the characters and a zoom in feature that displays a larger view of a specific character.

As an added bonus the app expands on the native Apple Symbols font to display in detail the 45 hidden fonts not available in Apple’s native font viewer applications.

This first release is just the beginning with the 1.1 release already in development which is expected to ship early summer of 2022.

It’s hoped that this tool will inspire other iOS app developers to add that extra bit of artistic and font flair to their applications.

You can download Xc Fonts here.

Xcode’s View Hierarchy Viewer

One of the niftier components of the Xcode development environment is the view hierarchy viewer. While running your app in the simulator of your choice you can, in real-time, generate a 3D view of all of the views, sub views, sub sub views, … well you get the picture … of the apps currently executing view hierarchy.

It’s a cool feature but one that, apart from the rush of ‘wow that’s cool!!’ that it delivers I’ve yet to actually use it while debugging an app. I also have the feeling that if I ever have a bug in my app that needs a debugging interface of the complexity of something that I’d expect to find on the bridge of the Starship Enterprise me and my app would be in serious trouble.

I’m sure with enough time, testing and fiddling with it I’ll learn that Xcode’s view hierarchy viewer fits within the category of Something Incredibly Helpful but at my current level of expertise with SwiftUI it feels instead that I’ve been given an epic weapon as a first level player in a game of Star Wars 5E Dungeons and Dragons. According to the game master the weapon is incredible and it’s up to me to learn just how incredible it is.

Launch Speed 2.0 Released

Forefront Systems Inc. is happy to announce the release of a new version of Launch Speed for Apple iPhones, iPads and Apple M1 chip equipped Macs.

Click to Download Launch Speed 2.0

Launch Speed 2.0 is a complete rewrite of Launch Speed 1 that I released in 2015 and reduced thousands of lines of Objective-C code down to a few hundred lines of Apple’s new SwiftUI programming language. As an added challenge the application features my first attempt at the up and coming Neumorphism interface design.

I’ve been a fan of space exploration for decades and thanks to the amazing launch coverage now available via the Internet I hardly ever miss a chance to watch a rocket blast off into space. However during most launches the commentators more often than not describe the flight of the rocket in speeds that made little real world sense to me.

1,000 meters per second sure sounds fast but just how fast, in km/hr is it? And while the calculation to convert a speed measured in m/s to km/hr is pretty straight forward it’s also tedious and one that by the time I figured out the answer the rocket had often accelerated to twice the speed I’d started converting. Grumble. I needed something faster to give me the answer and wrote Launch Speed to solve this problem.

The app supports converting between 12 different speeds including a few outrageous ones like the speed at which Earth orbits our sun and how fast our solar system orbits our galactic core.

In an upcoming series of articles I’ll cover my experiences as an Objective-C developer in making the jump to Swift and then as a Swift developer making the leap to SwiftUI. As well I plan to cover my thoughts on creating an application with the neumorphic look and feel.

Click Here to Download

If you use an iPhone or iPad running iOS 14 or higher are are lucky enough to own one of those amazing Apple M1 chip based Macs running macOS 11.0 or later you can now download the new version of Launch Speed directly from the Apple App Store.

A great deal at $.99 US or $1.39 CDN.