04 Drew Brown - molab-itp/content-2023-Fa GitHub Wiki

13 Homework

Druze V3

All documentation for this week can be found on the Druze Repo and my Final Presentation:

12 Homework

Progress on Druze

Big progress was made on Druze this week. I built out the collage creation feature and wrapped it all with a very simple user interface. I have gotten json working and saving the canvas but am having trouble getting that to run efficiently. I need to figure out how to not convert the Data to a UIImage every frame because that is very resource intensive.

11 Homework

Progress on "Druze"

For the past two weeks, I have been playing around with various ways to make a canvas / photo collage app. The basic functionality I wanted was being able to upload images and manipulate them (drag, resize, rotate) around the canvas. I tried accomplishing this by myself but ended up getting stuck figuring out the best way to structure everything. I played around with this drawing tutorial.

I, however, realized that this drawing uses Canvas which doesn't work well with images. I luckily found this tutorial to establish the baseline functionality for the app. To this code, I added the ability to "select" objects and add views that are not just images. Selecting a view allows you to delete it or change its hierarchy in the layer stack.

Going forward, I want to add text blocks and drawing. I need to figure out how to make a drawing and capture it into a view that can be resized and manipulated in the same way other views can be.

10 In Class

Final Project Proposal Feedback

Victoria

  • Excited to use app
  • Seems like a lot, will be interesting to see how far I get

10 Homework

10.1: 100 Days of SwiftUI

This week, I made it up to Day 49 in 100 Days. I worked through Navigation tutorials that demonstrated how to use .navigationDestination for more efficient navigation presentation. This is also walked through how to customize items in the toolbar and NavigationPath. This also involved updating the iExpense app to use some of the new features. I missed some of the milestone challenges throughout the course so will go back this coming week and finish those up.

Repo Link

10.2: Final Project Proposal

For my final project, I want to make an app similar to an app called muze. Muze redesigned messaging to be a freeform canvas, rather than the usual list of message bubbles.

Users can position messages anywhere on the canvas and upload images, gifs, and draw to express themselves more freely.

"The end result looks nothing like your standard messaging conversation, where back-and-forth chat bubbles are interspersed with the occasional photo, video or link. Instead, a chat in Muze looks like some sort of collaborative art project — a collage of ideas, a meme board or perhaps a sketchpad, depending on how you use the app." Source

Key Features

  1. Collaborative Canvas - A canvas where users can authenticate and join a canvas
  2. Uploading Images - Users should be able to choose images from their camera roll to add to the canvas
  3. Drawing - Users should be able to use a pen tool to draw on the canvas
  4. Messaging - Users should be able to send messages to the canvas
  5. Editing - Users should be able to drag and pinch images / drawings / messages to whatever size they wish

I am not expecting to get nearly as close to the final Muze app as possible but would be happy with a project where users can collaborate on a canvas together by uploading images and being able to position them wherever they wish. I will need to dig more into Firebase to learn the specifics of how these functions work.

09 Homework

9.1: 100 Days of SwiftUI

This week, I made it up to Day 44 in 100 Days. I worked on a Challenge I missed earlier in the program that was building a Rock, Paper, Scissors game from scratch.

I also followed videos to build a project called Moonshot. This uses json files to list Apollo missions and information about them.

9.2: Class Homework

I followed the Firebase Getting Started tutorial. This ended up being very outdated and took a lot of tinkering to get updated to the current version of Firebase. I got the Firecards app working eventually!

For my final project, I followed a YouTube tutorial for building a basic chat app using Firebase. It is only one way so is not really usable. I could see it being transformed into a simple twitter clone potentially.

08 Homework

8.1: 100 Days of SwiftUI

This week, I made it up to Day 37 in 100 Days, building a project called iExpense. This allows users to add items to a list from a sheet, have them stored locally on their phone, and delete items from a list.

8.2: Object Detection

I followed two tutorials to make an object detection app using a prebuilt ML Vision Model from Apple. The tutorials were pretty technical and difficult to follow. I understand what each function does but not exactly how the code accomplishes that.

Tutorial 1 - Camera Feed Tutorial 2 - Implementing ML YOLOv3

07 Homework

7.1: 100 Days of SwiftUI

This week I made it to up to Day 33 in 100 Days. I built an app called Word Scramble that loads a json file from the app bundle to randomly select a word to display. The user then has to create as many words as they can using the letters from that root word. We used a UITextChecker to implement spell check into the responses.

Word Scramble Repo

7.2: Homework

For the homework this week, I wanted to build an from HBO's Silicon Valley called SeeFood. The app was supposed to be "Shazam for Food" but only was able to detect either "Hot Dog" or "Not Hot Dog." More information here.

I trained a CoreML Vision model using 200 images pulled from Google Images. It took a while to figure out how to integrate the Vision model into XCode. I tried a bunch of different tutorials only to find out that Vision ML models only run correctly on actual devices and not in the simulator. So, running it on my phone worked!

V1 - Identifying a pre-loaded image

Main Tutorial Used

Pre-Loaded Image:

ML Running on device:

V2 - Identifying from an image randomly chosen from an array

V3 - Allowing user to upload images

Built using code from this tutorial

Final - UI Elements replicated from show

Show Screenshots

My Version

Next Steps

  • Use user's camera to live capture photos
  • Add a processing animation Like this
  • Refine Vision model

06 Homework

6.1: 100 Days of SwiftUI

This week I made it up to Day 29 in 100 Days. I built an app called "Better Rest" that uses Apple's Create ML to predict what time a user should go to bed based on desired wake up time, amount of sleep, and cups of coffee. The ML model was trained using a provided data set of 10,000 combinations. I was surprised at how easy it was to get this set up. I think it could be interesting to use it on a final project.

Better Rest Repo

6.2: Homework

For the homework this week, I went back to my Guess the Flag app. I added App Storage to store a high score, previous attempt score, and whether or not the user has played the game before. In the future, I want to use animations to animate the color of the score (based on whether you get the question right or wrong) and add json to store historical score information.

Guess the Flag

05 Homework

5.1: 100 Days of SwiftUI

This week I made it up to Day 21 in 100 Days. I was planning to do more, but my MacBook broke down. The Genius Bar was unable to fix it and so it has been shipped off for repair! In the meantime, I tried using a Bobst Loaner (wouldn't let me install Xcode) and then a laptop from the ER (had an old version of Xcode - 11.7).

5.2: Homework

I did my best to create a multi-page app in the older version of Xcode. I found a lot of the syntax to be different and the error handling was much less helpful. Despite this, I was still able to put together a working, multi-page app. The app has three pages:

  1. About Me
  2. Projects list
  3. iPhone Setting Recreation This is where I ran into an issue of passing a var between views

My Goal was to allow users to edit the Device Name and have that change displayed in the About page. I was able to pass the binding into Device Name but not back out into About page.

04 Homework

4.1: Swift Fundamentals

This week I completed the LinkedIn Learning course. The last chapter covered enums, protocols, extensions, and error handling.

Screenshot 2023-10-03 at 12 59 53 AM

I also completed Days 16-19 of 100 days of SwiftUI, which I found very helpful. I really like his tutorial style and I wish I have been following that program from the start. I made the WeSplit app and also made a length conversion app.

4.2: App Involving Time

I followed this tutorial to try and understand more about how time works in SwiftUI. I was able to follow along but got stuck when it came to editing the code to work for my laundry timer app. I wanted two default timers that I can easily switch between for timing my laundry. I couldn't get it to work using the code form the tutorial but got a basic version working with the sample code from class.

03 Homework

3.1: Swift Fundamentals

I am almost done with the LinkedIn Learning course on Swift fundamentals with one chapter left. I followed the WWDC 2019 Introducing SwiftUI: Building Your First App for as long as I could and the Introducing SwiftUI up until Handling User Input. I found the tutorials useful, but they got very confusing, very fast. Once MapKit was used and the json file was implemented, I got a little lost.

3.2: Swift UI

For the assignment, this week, I tried to emulate the example code given to us in UIRender-Playgound. It took me a long time to figure out how to get the canvas working in SwiftUI. From what I could tell, it's a relatively new feature(?) I was able to get a little project working that uses random numbers and arrays. I played around with using TabView as well.

I had some trouble with things not working how I expected in Swift. For example, in the Broken Image view in my project, I can't figure out why the image won't update. Does SwiftUI only draw the screen once? How do you update something or play animations?

02 Homework

2.1: Swift Fundamentals

This week, I continued with the LinkedIn learning course. I made it through Chapter 6, which was on classes, functions, and structs.

2.2: UI Render

I played around with various different UI Render playgrounds. These are my main questions:

  • How can you edit more font styling options?
  • How can you draw more complex shapes? (Like a rectangle with rounded corners)
  • Is this drawing canvas used frequently used in apps?
  • What's the difference between CGImage and UIImage?
  • How can you render gifs?

01 Homework

1.1: Swift Fundamentals

I used the LinkedIn learning course titled "Swift 5 Essential Training." I have spent around 5 hours on the course and have progressed through 5 out of the 7 total topics.

Some topics the course covered:

  • Variables + Constants
  • Optionals (and unwrapping them)
  • Arrays, Dictionaries, Tuples
  • if, for-in, while, switches, guards
  • functions

While I now have been exposed to all of these topics I need to start working on actual projects to figure out how they are practically used.

1.2: Text Art Playground

  • demonstrate use of variables, for-loops, and functions
  • store the playground in your classwork repo and update

Fun Text Art!

This project is very simple and uses hard coded 2D arrays and a dictionary to draw two pixel art compositions. The most difficult issue I ran into was that Swift returns an optional when searching a dictionary and it took my a good while to figure out the proper way to unwrap and utilize that value (besides just forcing it with !). My future goals for this project would be to allow users to either uplaod images or turn on their camera for a live text art visualization. This would require obtaining a pixel array (which I have no idea how to do in Swift).

While this project was very simple, it was fun to work on! I am enjoying learning Swift but it will take time and more practice before I am comfortable with the syntax. I look forward to learning how to get user input into my Swift projects.

OUTPUT

Smiley Face!
Consists of 81 cells
    ░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░
░░░░▓▓░░░░░░▓▓░░░░
░░░░▓▓░░░░░░▓▓░░░░
░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░
░░░░▓▓░░░░░░▓▓░░░░
░░░░░░▓▓▓▓▓▓░░░░░░
    ░░░░░░░░░░░░░░

Fun Pattern!
Consists of 49 cells
▓▓▒▒░░▓▓░░▒▒▓▓
░░▓▓▒▒░░▒▒▓▓░░
▓▓▒▒░░▓▓░░▒▒▓▓
░░▓▓▒▒░░▒▒▓▓░░
▓▓▒▒░░▓▓░░▒▒▓▓
░░▓▓▒▒░░▒▒▓▓░░
▓▓▒▒░░▓▓░░▒▒▓▓

01 Class Post

In this class, I am interested in learning Swift and exploring the relationship between design and development.

My current favorite mobile app is the web browser, Arc. While primarily a desktop application, their recently launched mobile experience is just as enjoyable. The browser allows for much more customization (app icon, theming, styling) than others like Chrome or Safari and focuses on managing tab overload.

Contact Info:

drewbrown.media

in/andrewicus