Chris' Journal

Devblog 1

Hey CodeCrew!

Last week i posted a video on my YouTube channel talking about my theme for 2020: Keeping it simple.

In terms of CodeWithChris, it’s really become a bit of a machine and there are so many moving parts that I really lost touch with how it all began… which is me coding and sharing.

So in 2020, my focus is to go back to doing that. Coding and sharing.

One of the ways that I intend to do that is by keeping a devblog about what I’m working on, what I’m learning, what’s been challenging me and how I’m growing as a person (developer, founder, father, husband, brother, son…)

I’ll talk mostly about coding but for the longest time, I’ve wanted some other outlet for personal thoughts. I thought about starting another YouTube channel but that never seemed like the right move either.

Now that I have this new direction with CodeWithChris to bring it back to its roots, i think this is the perfect place for me to share everything.

Thanks for reading/listening and I hope you stick around :slight_smile:

4 Likes

Love your attitude Chris! Always good to go back to your roots and remember why you started everything in the first place!

1 Like

Thank you so much Mikaela!!

1 Like

Devblog 2

Hey CodeCrew,

Yesterday I sat down to continue my SwiftUI journey. There’s a lot of good stuff from the WWDC session videos and I find that they do a really good job of explaining things. Make sure you check those out if you haven’t already!

One of the things that just “clicked” for me is what an amazing job SwiftUI does at eliminating the need for a View Controller. I mean, it’s hard to wrap my head around NOT having a view controller because I’m so used to using it.

SwiftUI has several different ways to allow your views to bind directly to your data so that any updates to the data results in your views updating automatically. This used to be the job of the view controller and furthermore, you had to manually manage all of the view updating by yourself.

So I definitely think it’s a better way to build apps but I’m just waiting for it to mature a little bit before committing to using it completely. For now, I think I’ll continue to update my content with UIKit.

The photo is of a demo that I’m working on as part of my YouTube SwiftUI series. First I plan to demonstrate building this app the “dumb” way. Then I’ll illustrate the key SwiftUI concepts for data flow and view building and finally, we’ll refactor the app using the best practices.

To cap it off, we’ll have a challenge to take the app further. Fun times! :slight_smile:

2 Likes

Devblog 3


Hey CodeCrew,

Yesterday, I finally got around to releasing the sixth lesson of my beginner SwiftUI series which culminates in building a simple slots app. (https://www.youtube.com/watch?v=51Z9Kun7tFo)

I took so long to release this lesson because I wanted to add some jazzy animations to it but I never got around to diving into SwiftUI animations and this series is way past due already.

Quick shoutout to Mark Moeykens (bigmountainstudio.com) because that’s where I’m going to get my SwiftUI animation education!

My next SwiftUI app is going to teach some more complex stuff and hopefully include some animations :wink: But first… i have to build it :stuck_out_tongue:

Speaking of finishing off apps, there are a few that i started on YouTube that are still outstanding… (i’m terrible!)

I was in the process of building a Pomodoro Timer which I was going to integrate social features into and I was also going to do a Gratitude Journal app.

Lots to do… feeling a bit overwhelmed but excited to dig in!

PS. Do you guys have trouble focusing too? What’s your favorite way to unload and capture your thoughts so you can focus on the task at hand?

2 Likes

Hi Chris,

I finish the Exercise (Lesson 6 - SwiftUI Build a Slots App).

Thanks.

1 Like

Awesome job!! Glad to see that :slight_smile: In the upcoming few videos, i’ll have a challenge related to this slots app to improve it and add 3 rows!

Btw, your post is unrelated to my journal posts! Next time create a new topic instead :slight_smile:

Devblog 4 (re-post from Feb 13)

Hey CodeCrew,

This code is some experimenting I’m doing with a image text recognition API… more on that in a sec.

I’ve been heads down working on upcoming videos for the channel… can’t wait to share them with you!

If you missed my February update video, I mentioned that I’m trying to lay down some ground work right now before going nuts with app series.

So stuff like tutorials for working with source control, some design basics, working with APIs etc.

Speaking of APIs, I rounded up your comments on which API I should show how to use and here are the results:

Spotify API
A Geolocation API
Tensorflow API
An OAuth example
Brokerage APIs
Machine Learning API
Weather API
Google Maps API
Facebook API
RapidAPI
Dropbox API (This one is my entry heh)

There’s some really interesting stuff! I think over time, I’ll show all of them but right now I want to use an example where we don’t have an SDK to use because I want to show how to put the parameters in the request header and body like in the screenshot.

That’s going to get us ready to do some interesting stuff together! So stay tuned for more videos and subscribe to my YouTube channel if you haven’t already! (youtube.com/codewithchris)

1 Like

Devblog 5

Hey CodeCrew,

Do you get into these mental states where you feel scattered because you have too many things you want to accomplish simultaneously?

That’s been me recently…

There’s the stuff I want to do with you guys, here at CWC. Doing app series and progressing in the difficulty level as we’ve been talking about over the past weeks.

I also want to try making money with apps which would go hand in hand with the content for CodeWithChris. I imagine that there’s also a portion of you guys who want to do the same so this would be an interesting journey to go on together.

I also want to share my entrepreneurial lessons from building CodeWithChris into a full time business because it’s such a waste not to share and try to help others who aspire to build an online content business.

My wife and I want to start a family website/channel (mostly spearheaded by her) to share our recipes and stuff.

Finally, I also have an idea in the back my head for another non-tech YouTube channel which I may just never get around to doing.

You know what happens to me when I get scattered like this?

Ashamedly, i hit the escape button and drown myself in video games… totally achieving nothing. (except high scores i guess)

So today, i’ve finally had enough of this and I feel re-invigorated to tackle everything.

It’s good… i feel like a million bucks and I’m getting things done

(One of the downsides of working for yourself is that you have to be self-driven for long periods of time… for me, I go through good and bad periods.)

On a side note… Wow it seems like you guys really liked my last video on working with any API!

I was a bit surprised because I thought there was only a small segment of intermediate-advanced devs in my audience. I guess this tells me that there’s more of you out there than I think!

1 Like

Devblog 6

Hey CodeCrew,

Last weekend, we had some friends over and one of them showed me a home security app idea that he was working on.

The interesting thing was that he was building it with Flutter!

He told me about how easy it was to get up and running, although he had some trouble compiling for iOS due to the libraries he was using. He had it working fine on Android.

Even more interesting, he had tried to use React Native first but he (and 2 other friends) found it really hard to get started with.

It got me interested and I’m thinking about checking out Flutter and React Native in the near future.

2 Likes

Devblog 7

Hey CodeCrew,

I want to share a small victory with you guys.

Do you have any habits you’ve been wanting to change but it just hasn’t been happening?

Well for me, it’s been those few hours after 10 pm when my kids have gone to bed. They’re still on the younger side so it’s physically and mentally draining. Often times, when my free time starts at 10 pm, every ounce of patience and willpower I had is gone.

I love them to death but after they’ve gone to bed, the last thing on my mind is doing something productive!

I’ve noticed that the trigger is the couch. If i go sit on the couch, i’ll turn on the tv and bring out the snacks. Not only am I wasting time but I’m also eating crap.

So recently, i’ve decided not to sit on the couch. Instead, i get ready for bed and get into bed. From there, I can read a book, go on my laptop, phone… whatever. (If i fall asleep, at least I’ll get enough sleep)

That actually stopped me from munching on snacks and I ended up redesigning badges for this forum! Heavily inspired by Apple Watch badges hehe

So if you’ve been trying to make a positive change, consider changing the environment rather than trying to fight it head on!

4 Likes

Hey CodeCrew,

I have to confess that I’ve been so busy recording lessons and running the business that I haven’t made the time to learn, study and code for myself.

Seeing as how it’s WWDC week, it’s the perfect time to start documenting my learning journey again :wink:

In addition to updating this journal thread with my new discoveries and personal growth, I’ll also be live streaming my study/code sessions on YouTube (and maybe Twitch later).

There are so many good reasons to do this (and I wish I started doing this sooner):

  1. It keeps myself accountable since I have to show up live
  2. It may provide motivation for other people to join me and spend time learning or coding
  3. It gives me an opportunity to interact with all of you in a live setting

I’m new to the whole process of streaming and it’s all a bit nerve wracking. For these study streams, I’m turning off the mic and I’ll be playing some lo-fi coding music (you can mute if it’s not your thing).

My stream schedule this week is here:

Links to the streams will appear on the schedule as they’re set up.

For today’s study stream, it’s going to be pretty easy. I’ll be watching WWDC and taking notes. If you want to interact with me via chat as you watch it too, just hop in the stream and say Hi!

3 Likes

If you missed WWDC or want a refresher, here are my notes for all the new features announced at Apple’s WWDC! I’m especially excited for building apps on iPad!

Great to see you in Journal land! It was good to see you on live YouTube as well! It makes way more sense now that I realize you were watching WWDC lol I was wondering what kind of a code session that was! Thanks for the notes!

1 Like

Thank you for joining! Did I see you in the chat? The messages were going by so fast so I apologize if I missed you!

Hey CodeCrew,

Last night I watched Apple’s Platform State of the Union. This broadcast covers all the new stuff for developers.

I’ll be reviewing and summarizing all the announcements live on stream in about 20 minutes!

If you can make it, come and say hi!

If not, no worries. It’ll be recorded in case you want to check it out.

Hey CodeCrew, while I watched Apple’s Platforms State of the Union broadcast where they talk about the new features in WWDC from a developer perspective, took the notes below to share with everyone.

In yesterday’s livestream, I was only able to go through the first half of this list so today, I’ll be continuing and reviewing the second half. (Url for all streams at CWC Stream Schedule)

Xcode Cloud

  • Continuous integration and delivery
  • Code, Test, Integrate, Deliver, Refine
  • Deeply integrated to Xcode
  • All apple platforms
  • Built on the cloud
    • Build, Test, Code signing
  • Integrates with Testflight, App Store Connect
  • Integrates to major Git based source control providers
  • Private and secure

Build

  • 4 Steps to use Xcode Cloud
  • Select the product, confirm workflow, grant access to source code and link to app store connect
  • Auto detect product
  • review suggest workflow - Build every change made
  • Securely connect to hosted repo
  • Xcode will register app in app store connect
  • When build is finished, they’ll see the result within xcode

Tests

  • Can run multple test plans on multiple device simulators, platforms, OSes,
  • Can run on betas OSes too, without downloading the betas on your own system

Integrate

  • Can review pull requests, view comments and write comments from within Xcode

Deliver

  • Code signing in the cloud
  • No need to keep certificates and profiles up to date on your mac

Refine

  • Crash reports from testflight users from within Xcode

Secure

  • Source code only accessed during builds
  • Ephemeral build environments
  • Isolated team data
  • Securely managed keys and secrets
  • Two factor authentication

Free limited beta

Swift Concurrency

  • Async / Await pattern
    • async keyword to mark a function as asynchronous
    • use the await keyword before calling the async function to indicate that other work can be done
  • Structured Concurrency
    • Structure your concurrent tasks in a more logical way
  • Actors
    • Safe concurrency
    • object that protects its own state
    • mutually exclusive access
    • can use “actor” keyword instead of “class” to create an actor type
    • Use the @MainActor keyword on a function to indicate that it is always run on the main thread.
    • You don’t have to use DispatchQueue.main.async

SwiftUI

  • modifiers for SwiftUI List
    • swipeAction modifier for a list
    • refreshable modifier - Pull to refresh
    • Limit a modifier to a single platform
    • searchable modifier - Add search field at the top of a list
    • can do search suggestions too
  • AccessibilityRotor modifier
    • helps with voice over
  • accessibilityRepresentation modifier to inherit the full accessibility implementation of another control
  • SwiftUI Table component
    • can do multi-columns
  • Material support
  • Lots of other new things like
    • Async images
    • location button
    • custom drag previews
    • async task management

Swift Playgrounds 4

  • learn how to code
  • create apps on ipad
  • can bring your work to Xcode
  • create a new project
  • has canvas preview on the right, code editor on the right
  • has code completion
  • has component library, where you can search for and add components, sf symbols and modifiers
  • Can take app full screen
  • Can send app to testflight from playgrounds
    • Need a developer account
    • Builds, packages and uploads to app store connect
    • Then you can go on app store connect to make it available to testflight

Augmented Reality

  • traditionally, you need knowledge on how to create 3D models

  • RealityKit 2

    • Simplifies rendering, audio, animation and physics
    • In this release, they made it easier to make 3D models
    • Object Capture
      • Simplifies creating 3D models (in minutes)
      • Use your phone to capture 2D images (all angles), bring it into your Mac to use the Object Capture API to turn it into a 3D model, optimized for AR
      • In Swift, use PhotogrammetrySession class in RealityKit to point to the folder of images
      • Then generate
      • Generates usdz files, which are optimized for AR quick look so you can use the 3D model in Messages, Mail, Safari and other apps
      • Can also generate Obj or Usd asset bundles to be used for ray tracing or other post production workflows
      • The clone app for iOS can help you capture all the necessary angles for an object

    Unified Metal Graphics Platform

    • Combination of Apple M1 chip, Apple GPU and unified memory
    • Enables graphics intensive tasks and workflows across all Apple platforms
    • More console, triple A games on Apple platforms
    • More graphics intensive renders
    • Advanced Graphics and Gaming Features
      • Graphics and Compute Integration
        • Metal can now call dynamic libraries and ray query primitives directly from shaders
        • Stochastic motion blur function
      • Variable Refresh Rate Displays
        • More control over the display
        • Use metal presentation time API and ProMotion Display adapt latency and tune presentation times
      • macOS Monterey adds support for adaptive sync displays
    • Support for more game controllers
      • including latest PS and Xbox controls complete with dual sense and haptics
    • New API to enable on-screen, virtual controller with a few lines of code
    • New Graphics Tools in Xcode
      • Selective Shader Debugging
        • Choose which functions to debug within a large shader which cuts down debug time
      • Texture Converter tool
        • More control over the texture converter pipeline
        • More support for texture compression formats
      • Metal Debugger Timeline View
        • new view to visually debug the timeline of events
        • visualize bottle necks

    Focus

    • Notifications
      • Currently all the same
      • This new API will allow apps to assign a level of urgency to the notification so they can be classified
      • Passive - don’t wake the device. Not time sensitive
      • Active - play a sound / haptic. Normal notification
      • Time Sensitive - visually stands out, and stays on the screen longer, announced by Siri if wearing AirPods
      • Critical - plays a sound even if the device is muted. Reserved for serious health and safety concern. Requires a separate entitlement which you need to get approval for.
      • Communication from people. If your app is related to communication between people, you can specify your notifications as such. Apple treats these differently. Feature user avatars
    • Notification Summary
      • Delivers as a bundle at a specified time so the user can go through them at a time of their chosing
      • To deliver real time notifications to the user, mark your app’s notifications as Time Sensitive. However, they should actually be time sensitive.
      • A notification summary features two notifications and the rest is bundled as a list.
      • Notifications with thumbnails are considered for featuring
      • If your app has multiple notifications in the summary, they’ll be ordered by the relevancy score that you specified for each notification when you sent it.
    • Do not disturb
      • Silences all notifications
      • With focus, user can choose which apps or people can get through the do not disturb
      • Your app can get the users current focus

    Screentime and Parental Controls

    • Screentime API for building parental control apps
    • Managed Settings
      • Gives a way to restrict what a child can do across all devices
      • Set a number of restrictions
    • Family Controls
      • Authorizes your app to be able to set these controls and restrictions
      • Allows parents to select activities (apps, websites etc) that they want to prevent
      • The selected activities to block will be tokenized so your app can’t see this sensitive information
    • Device Activity
      • Can register time windows for when particular tokenized activities are allowed

    Widgets

    • New extra large size for widgets
    • New default home screen layouts that feature widgets
    • The on device intelligence may suggest your widget for the user to add
    • Intents API allows your app to suggest information and the OS will determine if they want to take that information to suggest your widget

    SharePlay

    • Group Activities Framework
    • Can sync media playback so everyone’s watching/listening in lock step
    • Reliable Data Channel
      • You can use Apple’s servers as a host to sync state across all users in a group activity
      • So you can do group activities not just for media playback

Hey CodeCrew,

Doing a group study/code stream in 10 min. Come join the chat while you do your own coding and studying! https://youtu.be/e_erRV9zNB0

As for me, I’ll be trying to figure out how to save HLS streams for offline viewing during this session. We need this functionality for the upcoming CWC app :slight_smile: