blog.iankulin.com

Posts

Scope Creep

Applying the project management concept of scope creep to my iOS learning journey, I describe how an original plan of four goals has grown to include extras like git, HTML, JavaScript, and standing up an SQL server on AWS. The overarching aim remains reaching junior iOS developer competence within a year of part-time study...

@ObservedObject v @StateObject

This is a follow-up to my earlier simple MVVM example, correcting my use of @ObservedObject for a view model created inside a SwiftUI view. Because SwiftUI can recreate views at any time, I explain that @StateObject is the correct wrapper in that situation, with @ObservedObject reserved for objects passed down from parent views, and I link to Apple’s documentation and other explanations of the difference...

Rust

Prompted by buzz around Carbon and Rust’s frequent appearances in conversation, I, a developer with a Swift background, take a first look at Rust through a video and a couple of articles. I compare Rust’s features — optionals, type inference, exhaustive match statements, immutability, traits, and closures — against their Swift counterparts, concluding that Rust feels familiar but less readable than Swift...

Simple MVVM

I explain the MVVM architectural pattern using a simple SwiftUI light bulb toggle app as an example. I walk through the Model, View Model, and View components, how they connect through ObservableObject and @Published/@StateObject, and why separating data from the interface matters. I’ve made the source code available on GitHub...

Vim

Working through MIT’s Missing Semester lecture on Vim, I cover what the editor is, its keyboard-driven approach to editing, and its main modes (normal, insert, and command). I also link to a couple of Vim learning guides and argue that a basic grasp of Vim is a worthwhile requirement for any programmer, since it’s available nearly everywhere the command line is...

Firebase

I muse on a potential future project, a simple accounting app, and whether Google’s Firebase/Firestore could serve as its backend. After watching some CodeWithChris videos on the topic, I conclude that a local SQLite database with iCloud syncing is probably the more realistic approach, though a cloud database would partly address the syncing complications...

iOS Academy

A short post recommending iOS Academy’s brief video tutorials on Swift iOS programming, with an embedded example covering Grid Views. I reflect on how today’s freely shared Swift and iOS learning material differs from the magazines and thick books I relied on when learning to program before the internet...

MVVM Explained

After watching part of a video by Emmanuel Okwara, I explain my new understanding of how MVVM differs from MVC: in MVVM the ViewModel doesn’t manipulate the View directly, it just broadcasts changes and lets the View update itself, which fits SwiftUI’s declarative style. I raise an open question about what constitutes a View in MVVM and plan to build a minimal MVVM app as a practice project...

Oh My Zsh

While working through the Missing Semester material, I wanted my zsh prompt to display the current git branch name. A bit of searching led me to install Oh My Zsh and enable its git and macos plugins to accomplish it...

Missing Semester

I discovered MIT’s Missing Semester course, which teaches practical CS skills not covered in a typical degree, and highlight that its lectures, notes, and assignments are freely available. Having watched the shell and git lectures, I found both excellent and plan to work through the rest of the series...

Gitting the hang of it

A beginner-oriented cheat sheet I put together for using git from the command line on macOS, aimed at people working with Xcode and GitHub. I walk through setting up a new repository and pushing it to GitHub, then cover basic commands for status, add, commit, push, and tagging, along with .gitignore notes and cloning from a tag. I include a short list of git learning resources at the end...

Chris Lattner

My reflections on a Lex Fridman interview with Chris Lattner, main author of Swift, touching on value versus reference types and how languages deliver their complexity — illustrated with a comparison of hello world in Swift versus C++. I come away convinced Swift plus Playgrounds is a good introduction to programming for kids, with more reservations about SwiftUI...

Retain Cycle

I explain Swift memory management, starting with the difference between value types and reference types and why the latter requires Automatic Reference Counting. My code examples using a class with init and deinit methods show ARC working as expected, then demonstrate a retain cycle where two objects reference each other and are never deallocated...

Bump One

Working through the Swift book, I cover functions as first-class types and passing closures around, then grapple with how closures capture variables that persist after their original scope has ended. My code examples show nested functions and a makeIncrementer closure, along with my reservations about variable capture and my suspicion that ARC is what keeps captured variables alive...

Unwrap

Paul Hudson’s Unwrap app for learning Swift is the subject, and I use its short lessons to fill three-minute gaps in the day. I have incorporated it into my goals, and on some days it’s the only progress I make...

Xcode Refactor/Rename

I share a quick tip on renaming a variable everywhere at once by right-clicking its name, avoiding tedious manual search and replace. I’ve embedded a short demo video...

@ScaledMetric

A short follow-up on fixing inconsistent SF Symbol heights in SwiftUI: locking the symbol height inside a frame solves the earlier problem, but breaks down when users change their text size. Apple’s @ScaledMetric property wrapper, introduced in iOS 14, scales the value with Dynamic Type and addresses that, though I admit not fully understanding how it works...

Memorise Assignment 1

My notes on completing the first assignment from Stanford’s CS193p SwiftUI lecture series, which involved minor changes to the app built in the lectures. My write-up covers an error that prevented me from initializing a @State property from an instance member, and some dissatisfaction with duplicated emoji arrays and SF Symbol alignment—issues I partly resolved after reading the assignment’s hints section and rewatching a lecture...

SwiftUI Essentials

A short note on finally understanding SwiftUI’s declarative nature after watching a 2019 WWDC video on the topic. I still have unanswered questions about how views bind to their data, plan to watch the series’ Data Flow video next, and acknowledge the detour is a way of procrastinating from two ongoing courses...

iOS Dev Weekly

After hearing Dave Verwer’s iOS Dev Weekly newsletter mentioned on a podcast, I subscribed and describe my first issue as short, chatty, and full of useful links on Swift libraries and other topics. Following a link about SwiftUI Split View Configuration led me down a rabbit hole to a WWDC video...