I am going to use this blog as a bit of a reference point as I learn about macOS programming.
View Life Cycle
There is something called the view life cycle. It is basically the event chain of your application. I saved this helpful image:
Logging (akin to console.log on the web)
You can print messages to the console using print() in Swift 3.2. It used to be println() in earlier versions of Swift.
Actions and outlets aka event binding
If you want to change something it’s important not to just delete the code without cleaning up the automated references. Xcode automatically generates some code in the background. (todo: figure out how to do that 😅).
I tried my best to capture this in a Youtube video, because I had to piece together various resources to get this:
Apple provides a book on Swift. You can download it using iBooks.
I know I won’t keep an interest in learning a language theoretically but it’s good to be able to reference this.
Yesterday evening I took a stab at understanding macOS programming. I got as far as making this with storyboards:
Now I want to learn more about actually coding something useful. The problem is that I can’t find good resources to start doing this. The main cause being the transition to Swift and the fact that seemingly everyone moved on to iOS programming
I am writing this post to hopefully gather some more resources, so if you have some, please let me know!
A few weeks ago I researched how to stream to Twitch.
I am not a heavy Twitch user by any means, but I think it is an interesting platform.
When I lived in Japan I met Hawken who worked on a Mario style platformer. Sometimes he would cast his dev work to Twitch.
I thought that was really interesting because you really saw the process coming together.
As a creator you have the option to ask feedback or help from the audience. And as the audience you can get some insights in the tools used. Who knew that to get a smooth 2D animation you would first make it in 3D?
Sometimes a relatively minor tool makes your work so much easier. I remember that Bramus once coded a Photoshop plugin to export text. This made my website design work so much more productive at the time.
Anyway, I digress. Back to Twitch. Basically what I tested last weekend is how to stream from a Mac, a PC or a PS4. And then how to save those streams for your own usage.
Let’s first talk about streaming from Windows or from a Mac. To do this I installed OBS. This is a really awesome piece of software that allows you to record your screen (e.g. to make screencasts); but it also allows you to stream to a service like Twitch.
It is open source, free and available for Windows, Mac and Linux.
My favorite way to record screencasts using macOS is with an app called Screenflow.
But this OBS software is really different. Basically it allows you to put multiple things on your broadcast at once. So for example you could put a logo on your videos. There is even an option to load websites inside the stream. So you could code a news ticker, host it somewhere and load that URL into your cast.
The first time I saw this I was like “Holy sh*******!”. The possibilities are endless. You can basically run a TV channel with this thing. How did I not know about this application?
Now, the way to connect OBS to Twitch is relatively straightforward. There are online guides about it about which settings you need to set.
The thing that was unclear to me was how to actually save those streams. By default Twitch doesn’t save videos do people can watch them later. But there is an option called “Archive videos” in the settings somewhere that you can use to automatically save videos for later.
Then you can connect your videos to a Youtube account and download them.
So you could maybe stream a few hours of content, then download those vids and cut them into a “best of” vid for Youtube. Awesome – just what I needed.
The challenger: a researcher at IMEC who obviously isn’t convinced about VR.
The question: whether VR isn’t a gimmick.
None of the panellists can give a strong answer.
There is some vague bla bla about that in 2-3 years it will be in consumer’s hands.
And there is some stupid idea that Apple is going to release something that’s going to change the game this year.
What the fuck guys…
VR is going to revolutionize a ton of industries.
From the top of my head I can give 3 examples of why it’s going to be great.
First you can give someone a virtual tour of a place they haven’t been. This has obvious real estate purposes.
When I bought a house I visited over 15 places. With 10 of the places I already knew I didn’t like them within the first minute. How much realtor working hours can VR save? A lot I presume.
But also think about company training. How do you learn about the layout of a power plant safely? By familiarizing yourself with the environment in VR of course.
The next example is medical. I broke my arm when I was 14 and I didn’t do the required “exercises” as well as I could. Thus my left arm is a bit weaker than it should be.
If we can make the exercise into a game using VR, we can motivate kids (and adults :)) to do the necessary exercises. I “met” a kid in Climbey who claimed he had osteoporosis (? a bit weird) and something clicked that really VR could be used for medical purposes.
There is a European Union funded project going on to use VR to help people conquer their fears (e.g. arachnophobia). When I first heard about this project the idea seemed a bit far fetched; but now that I’m convinced about VR as a technology, not so much.
The guy that lost 50lbs through VR? That is not a joke, some of the games really feel like sports. I bought Table Tennis VR and it is really awesome. If I think about some games I feel like I want to change into gym clothes because I know it will be a bit like a workout.
The next example is in education. When I was 12-13 we had this course called “T.O.” (technological education). Basically we had to make electrical schemes and learn how to wire things together. We didn’t do a lot of wiring and mostly spent time staring at schematic representations of electrical circuits.
This could be so much better with a simulator where you build electrical circuits by attaching various pieces together in VR.
I’ve been a fan of video games for as long as I remember. But I think I am a bit of a weird gamer. I read a lot about games and I like to try games, but I don’t actually play a lot of games.
When people tell me they logged 200 hours in some game on Steam I’m just wondering how that game kept them interested. I think the only game that I have ever played for more than 200 hours is World of Warcraft.
If I look at my favorite games there’s only a handful of games that really gripped me and made me spent a lot of time on them, and this was mostly in my teens when I had plenty of spare time on my hands. I think I still have plenty of spare time, I just have to be a bit more careful how to spend it than when I was let’s say 17.
I have access to a ton of games on Origin but I just don’t care. I bought the last two Deus Ex games in the hopes to have that spark that I had with the first Deus Ex and I quit playing both after 2 hours with the feeling that I had better things to do.
Last weekend I picked up a Switch and started playing Zelda, and I just couldn’t put it down. It’s been a while since I had that experience.
The past few years my “gaming” fix has mostly been the PS4. I played titles like Drive Club, Dark Souls 3, Uncharted 4, Fallout 4, The Witcher 3 etc.
While I enjoyed these titles I didn’t love them. The Witcher 3 came close but it still had too many flaws. The others were enjoyable but nothing that I felt very strongly about.
Zelda: Breath of the Wild is different.
It draws me towards playing it. The game design is just exquisite. It is a breath of fresh air in a sea of monotonous games that are just more of the same.
If you have a chance to spend some time with this game, do it. Play it from the beginning and take your time. It’s really good.
In January I got an HTC Vive and I started exploring VR. I wanted to write a bit about the journey so far.
I came in thinking VR was “interesting” and that I thought I wanted to know more about it.
Over the next few weeks I wrote down some of my findings. You can read a very messy page of my findings somewhere in the research section of this website; I don’t recommend reading this unless you have a very big interest in VR and want to take a deep dive. It’s a collection of notes in multiple languages without a lot of structure.
I plan to rearrange that content to something better, but first I need to know more. I feel that every week my opinion about VR gets influenced by something new and it’s not “complete” yet.
The main reason I got a Vive is because I loved the possibilities from a user interface perspective. Being a UI designer that wants to explore new UI paradigms I felt I needed to explore this.
This proved to be correct – there is a lot of innovation in UI design within VR that is super interesting. Things are evolving at a breakneck speed and when I read about the work that is happening I can only conclude that some very smart people are working on solving problems in VR right now.
If you check r/Vive there is about a 100% guarantee somebody came up with something new and innovative just this week.
After a few weeks of trying different things and getting friends and family to try it as well I have to say I’ve become quite the believer in how much this might change things in the future.
What I want to stress is that VR is not a “gamer” thing.
While the majority of public VR content is game related, the future of VR is not gaming.
Every domain can benefit from VR.
As a designer I especially like the apps about creation.
Imagine having an infinite amount of Legos to build with.
Imagine being able to paint without having to worry about the paint drying up, or about getting a new frame.
Imagine sculpting a massive dragon statue, then zooming out and replicating it to start working on its twin brother.
The way you work on creations – feels – like creating art in the real world. Except without the limitations.
I can think of so many business applications as well.
You can walk into different spaces without physically moving. I was looking for a house last year and I wasted so much time going into house where after 1 minute I already knew they weren’t for me. The real estate business is going to have a blast with VR.
You can see the scale of things, you can really imagine how something is going to “be”. You can literally walk through something that doesn’t exist yet.
It’s not like getting a flythrough through a 3D model. There’s a certain physicality to it that feels pretty real.
I think Google Earth in VR is awesome. Google Earth on the desktop is flat out boring.
You can imagine how things might fit into your home… or onto you. There’s an infinite amount of possibilities for fashion, for retail.
I wrote about MOOCs last time. What I didn’t write about is that I see free education as a big equalizer.
Being able to go to Harvard online is awesome. When I read that some kid in Africa won a Google code contest through perseverance and hard work [and the access to the internet] that makes me happy.
I was born in Belgium and like most of my friends and colleagues I got a lot of chances that people born somewhere else didn’t get.
My parents got me a PC when I was 10. I had the freedom to learn whatever I wanted in my free time. I didn’t have to work and I had all the time in the world to dig into computers. This enabled me to have the job that I have today.
Not everyone gets the same chances.
What does this have to do with VR? Well, I think VR is the next enabler to have experiences that you otherwise couldn’t have.
The current threshold to VR is quite large. You have to own quite the beefy gaming PC, you need enough room to have the full VR experience etc. The cost for a setup is well over €2000.
But in time this cost will become lower. We will be left with a tiny computer that you can attach to your head, some earbuds to plug in and boom – you are in another universe.
VR will become more accessible, and it will be a great enabler for everyone.
It’s going to change quite a few things. If I was into stocks I would buy into some VR companies. Wait and see if I am right :)
On Twitter, Thomas asked “When and why exactly do you do wireframes?”.
I replied that this really depends on what kind of work you are doing. You will get a different answer from a web designer than from an app designer.
I’ve been enjoying the working file podcast recently. If you are a designer it’s definitely worth a listen.
In Episode 3, the hosts have a discussion about what it means to be a famous designer.
At one point someone notes that we designers are really good at claiming to be the first to do a certain job while that job has actually existed for ages.
This is so true. People start calling themselves “digital product designer” as if this is a new job that never existed before “apps”. This job was just called functional analyst before.
I have this book called Designing Interactions that talks about people are doing the exact same stuff as my job in 1992.
But back to the question at hand: when and why exactly do you wireframe? A lot of people answered that they never wireframed at all or they would just jump straight to either visual design or HTML and CSS.
This strikes me as something you can only do when you do some kind of “template” style marketing websites. Or if you have the exact content that a website should have delivered to you. Or if your focus is entirely on the visual side of things.
Are you doing the problem solving or are you doing the visuals? Are you doing the content or are you trying to make sense of what someone else decided before you? All of this is design, but it’s a different kind of design.
The visual parts of the interface are important and we strive to make beautiful, delightful interfaces, but there is a big emphasis on solving the actual problem.
A lot of the software we make is pretty extensive. If you would map out all of the unique screens in the kinds of applications we make you would probably find that there are between 50 and 250 unique screens.
This brings a new problem to the table which I like to call “designing at scale”.
How do you create and communicate a design that spans hundreds of screens?
Over the years we’ve tried different solutions to designing at scale.
For web apps we rely (a lot) on HTML prototypes.
For native apps we like image-based prototypes – made with tools like Invision – but syncing everything up can be a real pain. Recently I’ve started using Flinto which seems pretty cool.
I’ve also had success with well-documented Keynote files that I like to turn into websites with the help of Keynote Extractor.
And sometimes nothing beats a lot of direct communication with the application developers.
The right solution depends on the software you are making, but for me one thing is certain: you have to be careful about your deliverable weight.
What do I mean by deliverable weight?
Imagine that you are creating the best design in the world, you are pouring many many hours into it, and you try to nail every detail. You proceed to document the design in the best way possible by creating a large presentation that is about every nitty gritty detail to show how much you thought about every edge case.
It’s 200 pages long and it contains just about everything you want to know.
You deliver the presentation to loud applause in the board room. Everyone is happy and you pat yourself on the back for another succesful project.
Six months later you check in with the developers to see what they implemented, and what they did was nowhere close to what you envisioned.
Where did it go wrong?
Did you fail as a designer?
Well, what happened is that you threw a bible over the wall and expected someone to read it.
Just today* we won a new software design project, where the goal is to transition existing software to the web. The “old” software contains over 50 different modules/functionalities.
I’m guessing this will be the biggest Sketch file to date… if we go the route of designing every screen. I don’t think that’s going to be the solution.
A lot of software design is systems thinking, where you try to find out which patterns repeat themselves and find the best solution for that pattern.
When you nail the pattern, you suddenly have a solution for a lot of different parts of the software.
A few days ago I was at a reception and a lady from KU Leuven was talking about MOOCs. A MOOC is a Massive Online Open Course. Think of it as going to university but the whole experience is online.
This reminded me of a MOOC I enrolled in a few years ago called CS50. This was an online version of following Computer Science at Harvard University.
At the time I was wildly enthusiastic about it. I learned about programming concepts to make a small game using Scratch, then applied the same principles in C. The videos that explained the concepts were very high quality and I thought the whole thing was so well done.
One interesting aspect was that there was a CS50 subreddit where you could ask questions to your fellow students. The students would help each other and a community would form. It was very cool.
I ended up only doing a few weeks of the course and then gave up due to lack of time and interest, but nonetheless it was still a good learning experience.
Yesterday I enrolled into a new class… this time on something entirely different: screenwriting. It costs some money — $90 — as opposed to CS50 which was free. But I feel that that’s a small price to pay for valuable content. Onwards!
I wonder if there’s any movement in the CSS framework space. Foundation for apps is tied to Angular which means it’s a no-go for me. Bootstrap seems to be dying under its own weight. They are unable to ship a new version because so many people collectively started depending on it.
To me an ideal CSS framework is based on Harry Robert’s principles like BEM and ITCSS. It would use modern techniques like rem-based sizing and flexbox. This is the type of front-end code that we write for our clients in the ideal situation; but I wonder if there’s any Bootstrap or Foundation alternative that is based on these ideas. I know about InuitCSS but I am really talking about a CSS framework that also has a family of extensive JS components.