My first impressions of JavaScript classes from a beginner’s lesson, with examples of declaring and instantiating classes, single inheritance using extends and super, defining methods, and using getters as computed properties. I also note JS quirks like the lack of named arguments, that missing constructor arguments fail silently, and classes that skip the constructor in favor of field declarations with default values...
As an iOS developer a week into learning JavaScript, I reflect on what I miss from Swift, including the determinism of compiled code, a complete IDE for debugging, and the ability to fully remove deprecated language features. I also cover what JavaScript has in its favour, such as its low barrier to entry and lack of a required build step...
I reflect on my methods for learning JavaScript: typing along with tutorials and completing the extension tasks, recreating websites I find interesting, and cherry-picking beginner episodes of the JavaScript Jabber podcast. I also touch on how writing these blog posts helps clarify my thinking and provides a sense of accountability, and mention anticipating a tutorial’s discussion of onclick versus addEventListener as a sign my immersion is paying off...
I write up the first practical challenge in the Zero To Mastery Complete Web Developer course: building a responsive page layout with CSS. Instead of mixing flexbox and grid as the challenge suggested, I used only CSS grid, then walk through the code for each section — nav bar, cover image, project grid, and footer — noting the nav link alignment was the trickiest part...
I introduce semantic HTML: tags that describe what a piece of content is rather than how it should look. I cover why semantic markup matters for maintainability, accessibility, and search engines, and survey common tags like header, nav, article, and section, along with the non-semantic div and span...
I am branching into back-end web development because my planned apps will need a REST API and database, and making the ticket app a web app could simplify Android support. I bought a Udemy web developer course, chose VS Code with plugins over the course’s recommended Sublime Text, and compare the course’s approach to 100 Days of SwiftUI. I’m undecided whether to document this side project on this blog or a separate one, given my commitment to weekly iOS-related posts...
After listening to a podcast episode about “humane” development, I describe my personal Swift coding style, which centers on being kind to whoever reads the code next. The principles I cover include following community conventions, writing code that reads like natural language, keeping functions small and single-purpose, avoiding hidden dependencies like globals, and using comments as temporary scaffolding that usually gets deleted once the code is written...
After nearly shelving my SwiftUI tickets app over concerns that exporting tickets was beyond my expertise, I discover an iOS 16 feature that makes the task straightforward, plus existing code examples for rendering SwiftUI views to PDF. The post reflects on the lesson of investigating before assuming something is hard, and notes remaining work on layout and share behaviour...
A reflective look at my GitHub commit graph, noting that Tuesday nights are unexpectedly my most productive coding time and expressing my appreciation for git and GitHub’s free tier. My first commits date to July 10, the same month I started blogging daily, a streak now at 154 days. I’m on day 64 of 100 Days of SwiftUI, admitting the hour-per-day pace hasn’t held, but I’m pleased with my overall commitment...
This is a progress update on my SwiftUI behaviour ticket app. Rather than the eventual goal of rendering tickets to PDFs or images for a share sheet, I cover exporting ticket data as a CSV text file, using a FileDocument struct adapted from Paul Hudson and SwiftUI’s fileExporter modifier, with code included...
My two Raspberry Pi 3Bs serve as an AllStar radio node and a small web server running Node.js, PHP, and MySQL, with Pi-hole recently added to block ads network-wide. I also weigh whether the Pi shortage makes a repurposed laptop or refurbished mini PC a better choice, considering setup effort and idle power draw...
Prompted by a Fireside Swift episode on SOLID principles and the arrival of Core Data in the 100 Days of SwiftUI course, I reflect on when architecture should enter an iOS developer’s toolkit. Drawing on a long-standing habit of wrapping external dependencies for easy replacement, I conclude that scalable code suits real apps but not learning—which is likely why Paul Hudson defers architecture until later in the course...
After listening to a podcast episode about NFC tags, I look at using them for home automation but find an iPhone SE2 can only read NFC inside an app rather than in the background. A digression covers my past experience with injectable RFID tags in emus, and I close the post with some resources on deep linking in iOS, covering both UIKit and SwiftUI...
Reflecting on podcast advice that building a real app beats endless tutorials, I share what a day and a half of working on my own SwiftUI project turned up in my search history, covering topics like Core Data filtering, file exports, date formatting, and NavigationView quirks. The experience supports the podcasters’ point: a real app forces you to push through hard problems you would otherwise sidestep when just noodling around...
My habit tracker app, built as a JSON tutorial exercise with UserDefaults persistence, has motivated me to tackle a more substantial Core Data app for teachers to record student reward tickets. I outline the planned design with Tickets and Students entities, searchable student records, and categorised ticket types. Outstanding data problems include importing student and category data via JSON from a local school webserver, and exporting records as PDF or text files...
A debugging story about a SwiftUI master/detail list where every row displays the first record’s data. While preparing to replicate my app in Core Data, I work through Swift’s value-type semantics, a Playground experiment, and print debugging before finding the real cause: mutating and reusing a single struct created duplicate UUIDs that broke ForEach, despite a console warning early on...
Day 61 of the 100 Days of SwiftUI course presents a Core Data challenge that exposes gaps in my understanding, leading me to write out my current mental model of Core Data — object persistence, data models, code generation, and managed object contexts. Rather than push ahead, I plan to build a simple comparison of array-based storage versus Core Data before redoing the challenge...
I reflect on following iOS and Swift developers on Twitter, a habit I picked up from Sean Allen’s advice that became an enjoyable way to discover resources like iOS Dev Weekly and developers like Erica Sadun. I also consider the sense of community in iOS Dev Twitter, noting that despite Twitter’s broader problems, it enabled such groups to form and thrive...
A comparison of my SwiftUI solution to the FriendFace challenge (downloading and displaying user JSON) against Paul Hudson’s version from Hacking with Swift. Differences I discuss include handling user IDs, structuring preview data, loading and error handling in fetchUsers(), and UI choices such as colored circles for user status and a grouped list style for the detail view...
My #100DaysOfSwiftUI challenge post is about adding profile pictures to a Friendface app. Swift’s hashValue turns out to be non-deterministic between runs, so I write a simple string hash by hand to pick stable photo numbers. After Unsplash proves unreliable, I settle on RandomUser.me portraits and consider using the genderize.io API to match gender from names...