(I’m not affiliated with Manning in any way, other than I own some Manning books and get their announcement emails, which is how I found out about this.)
Don’t worry, this isn’t mandatory, but if you’re new to Xcode (or new-ish), you might want to try out this simple app exercise beforehand, just to get comfortable with the tools.
Once you’ve installed Xcode, launch it and follow the steps below. The app you’ll make is simple, but the exercise will get you used to working with the tools.
Create a new project
Open Xcode. From the File menu, select New, then Project.
You’ll see this window pop up:
This window lists templates for the different kinds of projects that you can build using Xcode. Templates are starting points for projects that contain just enough code to actually work, but they do little more than display a blank (or mostly blank) screen.
Make sure that the selected template category near the top of the window is iOS and that App is the selected template. Then click the Next button.
The contents of the window will change to this:
This window lets you choose options for the project you’re creating. For simplicity’s sake, we’ll take the approach you might take if you’d just installed Xcode and don’t have an Apple Developer account. Here’s how you should fill out this screen:
Product Name:My First iOS Project
Team: Select None.
Organization Identifier: Use com.example (or, if you own your own domain, use it, but in reverse — for example, if you own the domain abcde.net, you’d enter net.abcde into this field).
Interface: Go with the default SwiftUI.
Language: Go with the default Swift.
Leave the Use Core Data and Include Tests checkboxes unchecked.
Click the Next button, and you’ll see this:
Select a place to save the project, then click Create.
Xcode now has all the information it needs to build a basic iOS app project. It will build this project and then present the full Xcode interface, as shown below:
The Xcode window has four general areas, which I’ve numbered in the screenshot above:
The Explorer pane. The leftmost pane of the Xcode window contains a set of Explorers, which is a set of menus that let you look at different aspects of your project. The one you’ll probably use most is the Project Explorer, which lists the project’s files and allows you to select the file you want to view or edit.
The Code pane. This is where you’ll read, enter, and edit code. You’ll use this pane a lot.
The Canvas pane. This pane lets you preview what the user interface will look like in real time, as you enter code that defines the it.
The Inspector pane. The rightmost pane lets you get details about any code or user interface element that you currently have selected.
As I said earlier, when you create a new Xcode project, Xcode builds in enough code for a very bare-bones application.
Run the project
Take a look at that application in action — click the Run button (located near the top of the screen; it looks like a ▶️ or “play” button)…
…and Xcode will launch the iOS simulator, which imitates an iOS device. Give it a few seconds to launch, and then you’ll see this:
The app doesn’t do anything other than display a 🌐 icon and the text “Hello, world!” In this exercise, we’ll take this starter app and make it do a little more, adding user interface elements along the way.
The ContentView file
Let’s take a closer look at the code. First, look at the Explorer pane and make sure that ContentView is selected:
ContentView is a file, and the code inside it defines the app’s one and only screen looks and works.
Here’s the code inside ContentView:
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text("Hello, world!")
}
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Structs
You’ll see that the code is divided into two blocks, each beginning with a keyword: struct, which is short for “structure.” If you’re familiar with object-oriented programming languages like Python or JavaScript, you should think of Swift’s structs as being like classes: they’re “blueprints” for objects, and can have properties and methods.
There are two structs in the ContentView file:
ContentView, which defines what appears on the screen when you run the app.
ContentView_Previews, which displays ContentView in the Canvas pane, allows you to see what ContentView will look like while you’re coding the app.
For now, let’s just look at ContentView.
The ContentView struct
When you create a new iOS app project in Xcode, Xcode creates a “starter” project for an app with a single screen. Xcode gives this screen a default name: ContentView.
The name ContentView is arbitrary. You could rename it MainScreen or HelloWorldDisplay, and it would still work. Many developers change the name of ContentView immediately after they start a new iOS app project, but for this exercise, we’ll just stick with the name.
Let’s take a look at the first line of ContentView:
struct ContentView: View {
The struct ContentView part of the line declares ContentView as a struct.
The : View part says that ContentViewadopts or conforms to the View protocol:
If you’ve programmed in C#, Go, Java, PHP, or Python 3.8 and later, think of a Swift protocol as being similar to an interface.
If you’re not familiar with interfaces but have programmed in an object-oriented programming language like JavaScript or Python prior to version 3.8, think of protocols as a loose form of inheritance.
You can think of the line struct ContentView: View { as saying “This is a struct named ContentView, which includes the properties and methods of a View object.”
Now let’s look at what’s inside ContentView:
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text("Welcome to the app!")
}
.padding()
}
Pay particular attention to that first line:
var body: some View {
ContentView contains just one thing: a variable. That’s it!
The var body part of the line declares body as a variable.
The : some View part says that body contains some kind of object that adopts the View protocol.
You can think of the line var body: some View { as saying “This is a var named body, which contains some kind of View object.”
The View protocol
The term “view” has a specific meaning in non-web GUI programming. It’s used to refer to any of the following:
A user interface element such as static text, a text field, a button, a switch, an image, and so on, or
A container for other user interface elements.
Here’s the code for ContentView and the resulting screen that shows the connections between the code and the views it creates:
ContentView is a plain View. It functions as the app’s one and only screen, and it contains that screen’s views.
Inside the ContentView is a VStack, which is a kind of View whose name is short for “vertical stack.” Like ContentView, VStack is a view that contains other views, but the views it contains are arranged in…you guessed it: a vertical stack or column.
Inside the VStack are two other views whose purposes you can get from their names:
Image: This view displays images.
Text: This view displays static text — the kind that the user can’t edit.
All of these things listed above adopt the View protocol, which means:
They are either a user interface element or a container for user interface elements, and
They include the properties and methods of a View object.
Let’s talk about that second point: that in order to adopt the View protocol (or more loosely, to be a kind of View), a struct includes the properties and methods of a View object.
There’s only one required property an object needs to adopt the View protocol: it just needs to have a variable named body, whose type is some View. body is a property that contains some kind of user interface element or a container for user interface elements.
In the case of ContentView, which adopts the View protocol, its body property contains a VStack. That VStack contains an Image view and a Text view.
The Text view
Let’s play around with the Text view first. Find the line inside ContentView that looks like this:
Text("Hello, world!")
And change it to this:
Text("Welcome to the app!")
You should see the preview in the Canvas pane update to match the change you made:
If for some reason the preview didn’t update, look for the text “Preview paused” at the top of the preview and click the “refresh” icon to “un-pause” it:
Add a new line after the Text:
Text("Good to see you.")
This should add a new Text view to ContentView, and Xcode’s preview should update to reflect the change:
Run the app. The preview will pause and the Simulator will start up and launch the app, which will look like this:
Notice that running the app in the Simulator pauses the preview. Running the app in the Simulator or making big changes to the code causes the preview to pause, but you can always restart it by either:
Clicking on the “refresh” icon at the top of the preview, or
Using the keyboard shortcut command + option + p
Text view modifiers
Let’s make the “Welcome to the app!” message on the screen larger — it should be the size of a title. Do this by changing the line that creates that Text view to the following:
Text("Welcome to the app!").font(Font.title)
Run the app or restart the preview — it should look like this:
I’ll cover more in Monday’s session, but feel free to experiment!
On Tuesday, July 25th at the Entrepreneur Collaborative Center, Tampa Bay Techies held their “Breaking into Tech” event that featured a panel of successful and interesting local techies sharing their advice and experience for people who want to get into the technology industry.
It was standing room only at the event, and it looks like a lot of people here in Tampa Bay are looking to break into tech or like me, want to enable their fellow techies land a job in our exciting field.
The intro
The session opened with founder Samantha Ramos talking about Tampa Bay Techies, which has only been around a few months but has already made a considerable positive impact on the Tampa Bay tech community.
with a mission to promote personal and professional growth for individuals in the technology community through networking, mentorship, volunteering, and training
whose vision is to empower individuals from all walks of life to thrive in the technology field
and aim to be a leading hub that connects individuals, organizations, and resources within our tech community.
The event wouldn’t have been possible without them —thanks so much for your sponsorship!
The panel session
The panel comprised an impressive group with a wide array of experiences in different areas of the local tech industry, listed in alphabetical order by surname:
Here are my (admittedly incomplete) notes from the panel session.
Skills and tech
What specific skills and technologies have been most valuable in your career, and how did you acquire or develop them?
Jeff:
I started as a mainframe developer
While tech skills are important, you need to leverage soft skills, especially empathy and collaboration
You also need to check your biases
Steve:
Know your audience — know who you’re talking to, what they want, and what they’re trying to get done
Know the shifts in the your career — I once transitioned from working on systems to find one of the most prolific serial killers to the Edinburgh Fringe Festival
Understand the business of the people you’re talking to
Suzanne:
I started as a web designer and ended up managing 50 sites for commercial real estate in the era before CRMs
I discovered that I have a passion for teaching, so I made a transition into tech training
Soft skills are important
Ashley:
I didn’t go into tech in the beginning
I ended up in recruiting for mainframe developers to solve the Y2K problem
The number one skill is relationship building
Jason:
At the Future of Work conference held at Stanford just before COVID, I heard a speaker say that 20 years ago, you might expect to change your career once, maybe twice in your lifetime…
…but these days, you can expect to change it four, five, maybe even six times now
You need to build the skill of learning new skills
The fundamentals that will help you as a techie (they helped me):
C programming
SQL
TCP/IP
Austin:
I’m going to echo the “learn how to learn” advice
I was a military brat, moving around a lot, and then I went to Florida State and did “Florida State things”
I started in research and ended up in applied science
Remember that math is never going to go away — it is fundamental to what we do
If you can, learn both low-level and high-level stuff
Also keep in mind that soft skills are criminally underrated
Strength / special ability
[Editor’s note: Somehow, I managed not to write this question down — if you remember what it was, email me, message me on my LinkedIn profile, or let me know in the comments!]
Suzanne:
I read 50 books a year — a lot in audiobook form — physics, career development, self-development
I’m always in some kind of class. I’ve even taken cooking and dog training courses
I maintain a commitment to learning, and I continuously study my industry
Ashley:
[Steve] Ashley’s special ability is her connections!
Jason:
I still code, which allows me to have intelligent discussion with the teams
When you}re in charge, it’s important to understand all facets of the busines
Austin:
I like what I do, which is a great help
I read a lot; it’s how I learn best
I approach my job with a childlike sense of wonderment
I’m relatively driven
I also have decent risk tolerance — I prefer to ask “Why shouldn’t I” over “Why should I?”
Jeff:
My strength is my ability to pivot
Don’t be afraid to take something on
Don’t sell yourself short
Steve:
Wow — everyone on this panel speaks in paragraphs!
I’ll remind everyone of this Ozzy Osbourne quote: “Be kind to people on your way up the ladder, ’cause you’ll meet them on the way down.”
The next five years
How do you see the industry evolving over the next five years?
Austin:
You’ve seen this ChatGPT thing, right? Tech like that is not going away
Basically, any technology that creates the three T’s — time, talent, and treasure — will be seen as valuable
Even with the current wave of fancy AI, the “simpler versions” of AI are still important — for example, scikit-learn
Other things will still be important: security, costs, deployment — they’ll all still be in play
Jason:
We’ve seen so many “once in a thousand years” kinds of events — in the past five years!
The best thing you can do is learn how to learn
You’ll need to anticipate changes and change with them
Keep tabs on new technologies, but through a “suspicious lens”
Learn the basics; you’ll always be able to leverage them
Ashley:
Find the thing you’re passionate about
Suzanne:
Make a plan
Keep in mind that some technologies will affect every career path
Ask yourself: Where do you want to be in five years?
Talk to people who have the job you’d like to have in the future — remember, people love to talk about themselves!
Keep learning, and course-correct along the way
Steve:
I take inspiration from my favorite superhero of all time, Iron Man!
I was a fan of Tony Stark from the comics, even before the Iron Man movie changed superhero movies forever
What I love about Iton Man is that he’s not intrinsically “super,” he’s just a human augmented by technology
What we do is help people become Iron Man in little ways
AI is there to augment people, and it will be a regular part of your everyday life five years from now
Be people-centric in your approach to technology
Jeff:
In five years, I’ll hopefully be retired!
The days of being a generalist are going or gone
People want specialists. Pick a specialty, and if you need to, be prepared to pivot
Early career choices
How did your early career choices lead you to where you are now?
Jeff:
Exposure to the right mentors and indviduals
You learn from everyone you work for — some will provide ideas and actions that you’ll want to borrow, some will be anti-examples or show you what not to do
Don’t pick a technology just because it’s “shiny”
Steve:
I wanted to be an accountant because my grandfather was one, but I’m terrible at math
I also wanted to be a pilot — I have family in the Royal Air Force — but I have nerve damage that disqualifies me
My accounting grades were an sign that I was not meant for accounting, but on the strength of what I was good at, it was suggested that I go into IT
You need to be able to see “the fork in the road” ahead of you
Suzanne:
I was an entrepreneur at 24, when I opened my first training center. Computer Coach is my third!
Ashley:
I originally wanted to be a star! I went to New York City and did a lot of auditions
When that didn’t work out, I ended up running the call center for Frontier Airlines in St. Pete, which wasn’t fun. Nobody calls an airline call center unless their trip has gone wrong
I complained about the job, and got the suggestion that I should take an IT recruiter opening. I didn’t even know what that was, but it paid $25K + commission, and I made more than I’d ever made up to that time
Jason:
My plan was to keep learning. My work at the Department of Energy led to my learning about information security and also how to build at scale
And don’t forget to use those connections!
Austin:
I’m still early in my career — I’ve been at it for only four years
A lot of my approach boils down to not giving up and putting in some long nights
What greatly helped me was someone writing a fire letter of recommendation for me
You can greatly affect people when you do well by others
Q & A
The panel ended with a Q&A session — here are my notes summarizing the responses:
You need to showcase your work in places like:
GitHub — open source contributions can open doors
Passion projects, whether technical or non-
Collaborative projects — the people you collaborate with may end up being your network and references
Use LinkedIn
Remember that recruiters pay for the recruiter-specific version of LinkedIn (it costs about $10K a year)
This recruiter-level subscription specifically seeks out people and what they can do by the content they produce
Learn how to use LinkedIn to be noticed by recruiters
Find a mentor
A mentor can help fill in your gaps, especially leadership gaps
Afterward
The panel was followed by the informal networking session, which gave attendees a chance to catch up with old friends and acquaintances and make some new ones. It was great catching up with folks I know, and meeting some people whom I’d never met before.
Here’s the “official unofficial” list of tech, entrepreneur, and nerd events for Tampa Bay and surrounding areas for the week of Monday, July 31 through Sunday, August 6, 2023.
On Monday, the Tampa Apple Coders Meetup will cover building a Magic 8-Ball app for the iPhone/iPad! Along the way, you’ll learn some useful concepts, including arrays, random number generators, and more about building user interfaces in SwiftUI. Find out more and register here.
Group
Event Name
Time
Young Professionals Networking JOIN in and Connect! • Saint Petersburg, FL
Are you looking for work? Do you need an edge in this particularly competitive job market? You’ll want to attend this online meetup hosted by Computer Coach where you’ll learn how to write a technical resume.Find out more and register here.
On Tuesday evening, the Midjourney AI Meetup Group will hold on an online session of the InsightFace face-swapping technology combined with Midjourney images. Cost is $15 and space is limited — find out more and register here.
The Google Developer Group and the Tampa Bay Android Developers Group are holding an online session: Session 12 of Flutter Forward Extended where they’ll continue working on their game implemented in Flutter.Find out more and register here.
How do I put this list together? It’s largely automated. I have a collection of Python scripts in a Jupyter Notebook that scrape Meetup and Eventbrite for events in categories that I consider to be “tech,” “entrepreneur,” and “nerd.” The result is a checklist that I review. I make judgement calls and uncheck any items that I don’t think fit on this list.
In addition to events that my scripts find, I also manually add events when their organizers contact me with their details.
What goes into this list? I prefer to cast a wide net, so the list includes events that would be of interest to techies, nerds, and entrepreneurs. It includes (but isn’t limited to) events that fall under any of these categories:
Programming, DevOps, systems administration, and testing
Tech project management / agile processes
Video, board, and role-playing games
Book, philosophy, and discussion clubs
Tech, business, and entrepreneur networking events
Toastmasters (because nerds really need to up their presentation game)
Sci-fi, fantasy, and other genre fandoms
Self-improvement, especially of the sort that appeals to techies
As I write this — 11:10 p.m. on the evening of Tuesday, July 25, 2023 — more than a day since Twitter ditched the bird icon and name for X. The problem is that the rebranding wasn’t terribly thorough.
Consider this screenshot from my Twitter/X home page:
Also, if you click on the links at the bottom right of the home page, the pages they lead to still bear the Twitter bird and name:
When the Twitter headquarters in San Francisco, California changed the name of the sign, it was stopped by the police due to failure to notify security or building owners. pic.twitter.com/3EzxsO73YK— Akin💯 (@ics923) July 25, 2023
At last report, the sign on Twitter HQ looks like this:
These are the kinds of mistakes that a marketing or brand manager would never make, because they know that rebranding is something that requires a plan.
But there is no plan. There’s a goal — ditching the Twitter name and replacing it with Musk’s beloved brand, X — and there’s PANTS.
Pantsing and paving the cowpath
“Planner” and “pantser” are terms that many novel writers use to describe two very different writing styles:
Planners have their novel outlined and planned out before they start writing it. They’ve got clear ideas of the story they’re trying to tell, and their characters and settings are fleshed out.
Pansters — the term comes from the expression “by the seta of one’s pants,” which means by instinct and without much planning — might have a vague idea of what they want to write about and are simply making it up as they write.
Both are legitimate ways of creating things, although a planner will tell you that planning is better, and a pantster will do the same for pantsing.
As an organization, Twitter has been a pantser from its inception. Most of the features that we consider to be part of the platform didn’t originate with them; they were things that the users did that Twitter “featurized.”
Consider the hashtag — that’s not a Twitter creation, but the invention of Chris Messina, whom I happen to know from my days as a techie in Toronto and the early days of BarCamp:
Retweets? The term and the concept were invented by users. We used to put “RT” at the start of any tweet of someone else that we were re-posting to indicate that we were quoting another user. Twitter saw this behavior and turned it into. feature.
The same goes for threads (not the app, but conversational threads). To get around the original 144-character limit, users would make posts that spanned many tweets, using conventions like “/n” where n was a “page number.” Twitter productized this.
All these features were a good application of “pantsing” — being observant of user behavior and improvising around it. This approach is sometimes called “paving the cowpath.”
If you do a web search using the term paving the cowpath ux (where UX means user experience), the results tend to be articles that say it’s a good idea, because you’ll often find that users will find ways around your design if it doesn’t suit their needs, as shown in the photo above.
However, if you do a search using the term paving the cowpath business, the articles take a decidedly negative slant and recommend that you don’t do that. User behavior and business processes are pretty different domains, and business processes do benefit from having a plan. As a business, Twitter had no plan, which is why they’ve always been in financial trouble despite being wildly successful in terms of user base and popularity.
And the company’s been losing developers for reasons that started with cost-cutting, but soon, people were losing their jobs for contradicting the boss. Working for Musk is like working for Marvel Comics supervillain Dr. Doom:
More on Musk
If you’d like to hear more about Twitter and Musk, including three theories on why Musk has descended into madness — I’m particularly intrigued by theories #2 (ketamine, a.k.a “Special K,”, a.k.a. horse tranquilizers) and #3 (simulation theory) — check out the latest episode of the Search Engine podcast, hosted by Reply All’s former host PJ Vogt, What’s Going on with Elon Musk?
Tampa Bay Techies is holding their Breaking Into Tech panel on Tuesday, July 25th from 5:30 – 7:30 p.m. at the Entrepreneur Collaborative Center. If you want to enter the technology industry and need some insight, advice, tips, and tricks, you’ll want to register for this event!
Let’s hear it for the “meatier” meetups — the ones where the event isn’t a meet-and-greet, but an actual technical presentation with ideas, concepts, and maybe even code that you can then use in your own work or personal projects. They don’t get the “draw” that a meet-and-greet does, but they are vital. (Someday, I’ll tell you the story of how technical meetups forever changed the Toronto tech scene.)
Developers have many options for building applications today, not just for what programming platform to use, but also what architectures are possible. Modern applications can be built using everything from monoliths to microservices to cloud functions.
In this session, we’ll look at serverless architecture for building applications and compare them with the other models. Historical problems with long cold-starts, heavy-weight frameworks and lack of tooling have made Java an unpopular choice for serverless development… until now!
We’ll take you on a journey to explain what has changed with Java to finally make it an amazing language for building serverless applications. We’ll do demos of Java Cloud Functions deployed on AWS, Azure, and GCP. We’ll also look at tips for building Java Cloud Functions including:
☕️ JVM ☕️ Advances in the JVM like CRAC ☕️ Low-overhead, serverless ready frameworks ☕️ Where AOT (ahead of time) compilation ☕️ Right-sizing Java Cloud Functions
The speaker, Pratik Patel, is a Java Champion and developer advocate at Azul Systems. He wrote the first book on ‘enterprise Java’ in 1996, “Java Database Programming with JDBC.” An all around software and hardware enthusiast with experience in the healthcare, telecom, financial services, and startup sectors. Helps to organize the Atlanta Java User Group, frequent speaker at tech events, and master builder of nachos.
Want to find or more or attend? Visit either of these Meetup pages: