Inktober 2021

Last year when I got burned out on programming, I took five months off to try to learn how to draw. I had learned twice before, but for various reasons I associated those times with painful stuff, so I had a mental block on trying to go back and learn.

Two months after I decided to take the rest of the year off, I found out about Inktober. It is a drawing challenge that was created in 2009 that artists participate in where they try to practice their pen and ink drawing skills by doing a piece every day during the month of October. There is a prompt list and people post their drawings to social media.

I wasn’t going to post things to social media, but it looked like fun. I picked up some supplies and was getting geared up to participate in 2020. Then bad stuff happened, because of course.

First, the creator of Inktober was accused of plagiarizing a book written by a black artist on how to do pen and ink drawings. The Inktober guy’s book was pulled from production and no one has seen it, so not 100% sure it was, but it looked pretty damning based on available evidence. So that dampened everyone’s enthusiasm for the event because no one wanted to support a white dude stealing intellectual property from a black artist.

Second thing that happened was that my husband and I had a miscommunication and he asked me to paint parts of the house before winter. Winter is difficult and our house had the HGTV aesthetic of lots of tasteful neutrals, which fuck that. So a week into the challenge I had to go to the paint store and put tape everywhere and try to paint. I had a meltdown and only did about a third of the painting before I couldn’t deal anymore. So I never got back to things after this, which was a bummer for me.

Inktober drawing from last year.

So I have been looking forward to doing this for the past year. I have spent the past few months trying to figure out my supplies and what I want to draw.

First I had to figure out a sketch book. I knew from last year that it was really difficult to find the right kind of paper to use with a dip pen. Technically, ink is a fluid medium, so you need some kind of paper designed for wet media, such as mixed media or watercolor paper. I used mixed medial paper last year and had a terrible time because the rough texture of the paper meant that fibers kept clogging the nib of the dip pen.

Ideally I wanted either a hot pressed watercolor paper (which is smooth) or a Bristol board, which is what comic artists use for their finished pieces. Finding either of these as a sketch book was incredibly challenging.

My collection of potential Inktober sketchbooks. Yes, my studio is a mess. I didn’t have time to clean.

Artists tend to dislike hot pressed water color paper because the watercolor paint spreads quite a lot and it doesn’t have the distinctive watercolor feel to it. With the Bristol board, people tend to take sheets of it to render a page of comic sketches rather than have a whole sketchbook of the stuff.

I had resigned myself to just using a watercolor sketchbook and hoping for the best when I found my perfect solution. Viviva, a company in India that makes sheets of watercolor paint, was this year’s sponsor for Inktober and offered a bundle of supplies for the event. One of those supplies was an actual hot press watercolor paper sketchbook! The company founder did a video about the products and said they specifically created this product because over the years, other inkers have had the same complaints I have and there was now an actual market for such a thing. Score!

Hot press watercolor paper sketchbook!!

Next, I will go over pens.

Okay, I will be honest about something. One of the reasons I got interested in drawing is that I love pens. I love art supplies in general, but I have always loved pens. I was the weird kid in high school with a $50 fountain pen with converters and ink bottles. I am just old enough that we didn’t have computers in high school for note taking and when that became a thing when I was in college I found the lack of being able to physically write and sketch out my thoughts to be quite wrenching.

These are just the Japanese brush pens and dip pen nibs I have collected from various art boxes. There is so much more than this…

I am on the autism spectrum and I have sensory issues and sensitivities. I love the feel of a pen moving across the surface of paper and doing this soothes me when I am overwhelmed. I usually bring cross stitch with me to conferences for this purpose but I would really like to be able to draw as it would be less obtrusive and easier to transport.

So choosing the right delivery medium for my ink was very important to me. Last year I got rather confused because I didn’t know how to fill in large dark areas with just hatching. I didn’t realize people would use Sharpies or brushes to fill in those areas and use hatching for the shaded parts. I primarily used Micron fine liner pens last year. That was okay, but I think I have a better solution for this year.

I will go over these in no particular order.

All of the pens that have Japanese characters on them are some form of brush pen. Some have actual bristles while others have a flexible nib that allows you to get different line weights and variations. I’m trying to learn Japanese through DuoLingo and their alphabet has a lot more line variation than ours does, so their pens tend to be a lot more expressive. Also, the Japanese are very stringent about penmanship and craftsmanship, so if you’re looking for something that you want to be well made and delightful to use, you usually can’t go wrong with something made in Japan.

I also have several dip pens. I went out and bought the actual nibs that manga artists use for their work. There are three sizes that all have different characteristics. The more common one to find is the G nib, which tends to be used for more bold and dynamic manga. I also have a maru nib on the brown nib holder because it was tiny and got stuck on the holder and if I want to remove it I will wind up destroying it with pliers, so it stays until I break it.

Finally, I have a Winsor and Newton Kolinsky Series 7 brush. I kept reading online that artists use it for inking, but I am afraid to actually use it because I know that the ink will stain it, which I know is illogical because that is literally the only reason I bought it! I might use one of my less expensive and crappier brushes until I get the courage to break out the W&N brush.

Last, but not least, we have the ink in Inktober.

Last year I wasn’t really sure what I was doing, so I bought a bunch of brightly colored inks in various forms. I thought it would be like when I was in high school and I could use pink ink in my fountain pen for writing, but that is really not the case. Most of the colored inks I bought are for painting or doing ink washes on my finished drawings.

So this year trying to keep it simple and use some waterproof black inks.

From left to right: Kuretake Sumi ink, Speedball Super Black, and Sennilier India ink.

I got a Sennelier black India ink in this month’s SketchBox. I am excited to try that. Last year I got carried away and realized you could buy India ink by the pint and I got a pint of Speedball Super Black ink for $13. I also have over the years accumulated a collection of various Sumi black inks that are used in manga. I haven’t used them yet, so I would like to try a few things to see what I like using best.

Since there has been quite a bit of ugliness around the official Inktober stuff, I am not planning to follow the prompts. Instead, I am planning to draw various scenes from the TV show Twin Peaks. Since David Lynch comes from a fine art background, his films and shows tend to be more like surreal art pieces than story driven shows. There are a lot of iconic shots from the show and I think it would be good practice to try and render those.

I am really excited to have a full month to play around with these supplies. I am fascinated by comic art but it is also something that is somewhat unapproachable because I don’t know how one goes about actually producing it. I am excited to give this a shot. I might also be way too influences by Monthly Girls Nozaki-Kun…

Fixing the SFML Template in Xcode 12-ish

When I was trying to learn Unreal, I wanted to learn more C++ so I would feel comfortable working with the scripting. The book I was working through used the SFML library for building games. I was going to try to set this up in Visual Studio Code, but the SFML website recommends using Xcode. They even have a template and a tutorial about how to install it on the Mac.

I had some concerns about the template as the website says it will work in versions of Xcode above 4 and we just got version 13 a few days ago. (I didn’t update yet and had to look it up quick.) I thought it might need some work, so I tried to build the project directly after creating it and got a bunch of linker errors and other shenanigans.

I went to my husband (who has way more experience in this area than I do) and he spent like ten minutes fixing all the stuff that was wrong. (Side note: I am unsure if I would have figured this out on my own. I don’t know a lot of people who would have because most of the programming community has experience with high level abstractions that are maintained by people like my husband. Low level experience is hard to find!!)

I don’t think there is a massive glut of people who are chomping at the bit to do SFML or C++ development on the Mac, but if anyone is curious, here is a list of the changes I had to make to get the template to build in Xcode 12.ish.

Move the info.plist and Create a Resources Directory

Once you create a project using the SFML App template (which creates and entire application bundle and not just a binary), the first thing you will notice is that there are a bunch of disconnected resources in the resource navigator:

Screen shot of the file navigator with disconnected resources.
File Navigator with disconnected resources

This is one of the more simple problems to solve.

  • Move the info.plist from the Supporting Files group and place it directly into your main directory.
  • Delete the Supporting Files Group
  • Right click on the project in the resource navigator and choose “Show in Finder” to reveal the directory in your file system.
File directory with the incorrect configuration
File directory with the incorrect configuration
  • Create a “Resources” folder inside the directory
  • Move the four disconnected resources into this directory
File Directory with the correct configuration
File Directory with the correct configuration
  1. Go back to Xcode and use the file inspector to change the resource path for each asset.
Incorrect file path
Incorrect file path
Correct file path
Correct file path
  1. Restart Xcode. It won’t really “take” the resource path change until Xcode reboots.
Final version of the project navigator
Final version of the project navigator

To be fair, the only really “necessary” part of this process was to move the info.plist. If you deleted all the code in the main.cpp function, you would not need these assets and could simply delete them. But I like to get the project to a known good state and just wanted it to build as expected.

So this was the easiest fix. Next up is digging around in the build phases.

Build Phases

This section has to do with a discrepancy in how you are told to install the framework versus how the template assumes you have installed the framework.

First, navigate to the build phases in your template application and expose the Run Script:

Build phase run script that is incorrect
Build phase run script that is incorrect

SCREEN SHOT OF THE BUILD PHASES

The script is set up to look for your SFML header files and libraries in the file path “/Users/SFML/Desktop/packaging/tmp/install/Library/Frameworks”. But if you follow the directions used by the SFML documentation, the file path for your frameworks should be “/Library/Frameworks”.

My preference is to keep all my frameworks where they are supposed to be instead of creating a temporary folder on my desktop, so I change the first three settings to reflect the actual file path.

# SETTINGS SFML_DEPENDENCIES_INSTALL_PREFIX="/Library/Frameworks" CMAKE_INSTALL_FRAMEWORK_PREFIX="/Library/Frameworks"

CMAKE_INSTALL_LIB_PREFIX="/Library/Frameworks/lib" FRAMEWORKS_FULL_PATH="$BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/"

Corrected run script
Corrected run script

”Provisioning” and Code Signing

Alright, I am aware that Apple has been pushing people to build universal apps that work on both the Mac and the iPhone. I have been fairly open about the fact that I have not been keeping up with everything going on the past few years, so I don’t know if things are different for provisioning. When I was still an Apple developer, I only did provisioning for iOS as that was the only job I had for most of my career.

My understanding is that the rules have relaxed somewhat when it comes to having profiles for just building to your own devices. At some point I will document getting an actual provisioning profile for the Mac when I have something I want to ship, but you have to have something in place in order to build on your machine and this is my shortcut.

  1. Go to your Targets->Build Settings-> All -> Levels -> Code Signing Identity.
How to find the code signing identity
  1. Select “Other” from the drop down menu.
I am fairly certain we tried the “Sign to Run Locally” option and it didn’t work and we didn’t debug it. I don’t think we were that stupid to not try it. /Snark
  1. Delete everything in the script
Empty code signing probably won’t get you through the App Store approval process, but at this point what will?

This is absolutely not a best practices thing. This is a total hack. This is my “I want to practice writing C++ code on my Mac and I want to see if it builds or not” hack. I will eventually have to figure out code signing and other bullshit if I want to ship anything I write here, but for my own narrow purposes, building is sufficient. If you already have this set up properly or I am doing something completely idiotic, feel free to ignore this or mock me.

Keyboard Input in Catalina

At this point your template project should build. Mazel Tov. However, if you want to run it you have one last bit you need to do.

In Mac OS Catalina, there were some changes to the permissions for allowing other applications to receive input from the keyboard while other applications were running.

The first time you run an SFML app, you will be prompted to give the application permission to use the keyboard while it is running concurrently with other applications. When I did this, I was dumb and made my game take up my entire screen, so I didn’t see the prompt. So even though I was clever and added keyboard monitoring to quit the program if I tapped “Escape,” I didn’t get the prompt to enable it, so the application had to be forced quit. D’oh!

So make sure to either enable this in the Security & Privacy settings or make sure your game is smaller than your screen so you get the prompt to do so without digging around in the settings.

I blocked out my “secret” project I am probably going to write about next week.

Conclusion

I am aware that I should probably put in a pull request to implement these changes on the actual template that is accessed by developers, but I don’t really understand the process of updating a template. I grok some amount of how to update a code base, but this is slightly outside my area of expertise. The Husband has some experience with maintaining open source projects, so some day when we both have a spare spoon he is going to help me put in the pull request. So it will probably happen after The Singularity.

The Engines of Creation

One of the biggest roadblocks I have encounter while trying to learn game development is dealing with an engine. My background is in iOS development and Xcode is sort of a happy medium between an IDE and an engine.

I didn’t quite understand a lot of how all the pieces worked together and talking to people whose only context about development was from games didn’t help much because people just didn’t have a mental picture of doing things any differently.

So, after several years of exploring various engines, my decision at this point is that I don’t want to use any of them.

Here are my reasons for not wanting to use the ones I am most familiar with:

  • Unity: Oh god, where to begin. I started with Unity and tried to learn it over the course of several years and I just don’t like it. I don’t like the user interface. I don’t like the gray box level builder. I don’t like their code frameworks. I don’t like C#. I additionally do not like that they keep adding multiple ways to accomplish something and then stop supporting them, leaving developers to hope they picked the right way and it will keep working moving forward. I talked to a bunch of indies who have used Unity for a decade and none of them thought any of this stuff was an issue. It was simply the way things are and you get used to them. I didn’t want to get used to it and wanted to find a better way.
  • Game Maker Studio: I want to start with 2D because my art skills are not great yet, so GMS was an option. It seems somewhat easy to learn and use, but it utilizes a proprietary scripting language and it charges you money for its use. Neither of these is ideal. Also, one reason I was interested in GMS was because I read Spelunky was created in it. After reading Derek Yu’s book about Spelunky, I found that he prototyped it in GMS and then actually built the version I play with in a custom engine. So this doesn’t seem like a good long term option.
  • Unreal: I will be honest, of all the engines I tried, Unreal was my favorite. I liked the frameworks. The shader builder was slick. The interface was nice to use. It actually works because the people who built it use it to ship games and things don’t just fall into ruin. It also open sourced its code so you can look at how things work and put in fixes if necessary. My only real issue with Unreal was that it is designed around larger teams doing 3D shooter games. A lot of the code is abstracted away to facilitate teams with a bunch of non-coders. In order to set up a 2D game I would have to position all the elements in 3D space and set up a camera. I really don’t want to do that. I loved learning Unreal while I was working with code, but once I had to work with the gray box environment, my brain would just black out. I’m sure there are ways around using the gray box, but I am too frustrated to deal with them right now, so I am considering revisiting Unreal once I have more experience building things.
  • Godot: I was under the impression that I had to use a language I do not know for this, so I didn’t seriously explore it. I will revisit in a few years as it seems to be changing and advancing quite rapidly.

While I was trying to learn Unreal, I realized I don’t feel comfortable with C++ code and syntax, so I decided to actually take a deep dive into the language. Everyone was warning me away from it because “It’s terrible!” But I didn’t actually find it to be so. I know the warnings are from people trying to debug code other people wrote that is in production and so forth, but I found the actual language to be well designed and similar to languages I already know and like. I am sure I will grow to hate it as others do, but for today I have found it surprisingly pleasant to work with.

I worked through a book on C++ game development that used the Simple Fast Media Library (SFML) to place sprites and do rendering. This library also felt very intuitive to work with. I found working with this language and this library to be the most intuitive way for me to work on games. So this is the combination I will utilize for at least the next year.

SFML also has a template that can be applied to Xcode to allow me to use Xcode for SFML development. I spoke with one of the maintainers on Twitter who indicated that I can build code I wrote in SFML to desktop and mobile devices. At this point I don’t need to ship to a console, so this is sufficient for my needs.

I don’t know if this counts as building my own engine or not. I’m trying to avoid touching low level rendering as that is a rabbit hole. SFML wraps OpenGL so I don’t have to get that working to build games, so there is just the right amount of abstraction for me right now.

A lot of the past couple of years has been me trying to force myself to learn stuff that doesn’t go with how my brain works. I logically understand that using an engine gets you a lot of advantages. But most of the big ones are not designed for people like me. For better or worse, I think in code. I have never been good at thinking about things in 3D spaces and I really do not like how the engines are designed around building visuals in these spaces and attaching scripts to them. I understand if you are building Fortnite that this functionality is vital, but it’s not if you’re building Candy Crush.

When you are learning a new skill, it can be overwhelming because there are fifty things you don’t understand. Knowledge comes from slowly learning bits and pieces of these things and winnowing them down until you don’t understand a third of them. Then you stop noticing the things you didn’t know before and can focus on the few things you still need to understand.

My hope is to spent the rest of this year and all of next year building small games. I would like to “ship” them by uploading them to something like Itch.io and selling them for a buck. I hope that after I have done this three or so times, I can come back to something like Unreal and feel more comfortable with the interface as I won’t have to learn the language and how to build a game.

If you are struggling to learn something you really want to understand, it’s okay to think about why you are struggling. Is it the tools? At what point do you just give up on something even though you don’t want to? Is there a way around the thing you don’t want to do? Not everyone thinks the same way and it is totally okay to pursuit a different direction if what you are currently doing isn’t working.

Change is Hard

About once a year since I started working on my Metal book, I think I should get back to my blog. My blog was an important tool in my learning process at the beginning. I don’t know if anyone read it or got anything useful from my fumbling with learning the Cocoa frameworks, but it did give me a spot where I could work through what I was doing and write it out to better understand it.

While I was working on the Metal book, it really didn’t make a lot of sense to write on my blog because I was writing a book. Anything I learned was going into the finished product. I didn’t have much to say and figured I would get back to things once I had something to talk about.

Then came the burnout.

I burned out before the pandemic, which was a blessing I guess? After spending a year converting gin into prose, I really didn’t want to come back here and try to find some piddling thing to write about with some tiny project illustrating something. I was tired. I didn’t want to produce content anymore. I also wasn’t really sure if I knew how to create and present content to teach people stuff. And I really didn’t think I wanted to anymore.

I got into writing at the beginning because I had a liberal arts degree and I knew I could write. I figured any questions I had as a beginner would be pretty common and so I could document my learning for other people so they would not have to talk to people who didn’t remember what it was like to not know something.

I figured if I kept doing this, eventually I would get better at things. I don’t feel this was correct. I was so focused on producing content that I never really focused on doing anything. I looked at code I wrote in 2015 and I am blown away by how much better my code was in 2019. It was depressing.

I had to make a choice. I had to decide if I actually wanted to be good at something or I wanted to invest all my energy into pretending I was good and hope no one noticed. I don’t want to pretend. I want to actually be good. I don’t care if I get invited to speak at conferences or write books right now. I just want to be good at what I do.

So I took a step back.

Last year, along with everyone else, I got super burned out. I took a five month sabbatical from writing code to learn to draw. I decided to start a new project at the beginning of this year after I got my shit together.

I sat down in December last year to work on a game jam. Everyone I know in game development says it is a great learning experience. I felt ready.

I was not.

I sat down and immediately realized I didn’t know how to do anything I wanted to do. I could do bits and pieces, but I couldn’t connect them together.

I wasn’t ready.

I have spent most of this year going in and trying to figure out all the stuff I didn’t know how to do. I had a horrible realization that most of my mobile development knowledge doesn’t translate to game development. There is not a common language or common design patterns. I had to almost start over.

I am still not sure if I am ready, but I think most of my lingering questions have been answered to some degree. I am going to start. I hope I know enough that when I encounter something I don’t know, it is a small layover and not something that stops me in my tracks.

My current goal with the blog is to write once a week at least about what I am doing. I bitch a lot about Agile on Twitter, but I don’t object to the process as it is described, merely how it is practiced by most companies. I think laying out a set of tasks to complete and updating people regularly about your progress is an excellent way to get things done. I plan to write about what I did, what I need to do next, and why whatever I was supposed to do didn’t actually happen. Life happens. People get sick. Holidays happen. It isn’t necessarily important for every day to be a blockbuster. You simply have to be consistent and try your best to do something every day, even if it’s small and even if it’s just recovering from a cold. I don’t expect anyone to gain anything of value from anything I write here. I write for myself and to stay on track for myself.

At this point, I don’t anticipate returning to iOS mobile application development. I got really excited about it during a time when Apple was releasing game frameworks and had lots of new and exciting graphics stuff. As time has gone on, I have observed most companies either dispensing with iOS native code altogether, or simply using it as a front end for data pulled from a server. This isn’t really what I want to do with my career, so I am following a new path rather than trying to convince people to follow me in a direction that leads nowhere. If Dave Verwer wants to remove me from his list of iOS developer blogs, I completely understand.

I have some plans for blog posts for the next few weeks. I hope to figure out other stuff to include after those ideas run out.

This transition has been hard. It has been going on for several years. I feel silly constantly talking about how I am going to change things. Change takes time. Change takes spoons. But here we are. I hope to not write another post like this in six months. I want this change to take this time.

Doing Tutorials

I am probably overloading my methods right now, but there are a lot of aspects of iOS programming that I hear about in passing that I would like to master or know better.

I would like to do one tutorial a week on some aspect of iOS that I want to know better. I will write about these tutorials on here and talk about what I thought about the skill I was learning.

I have done this somewhat with UICollectionView. I am compiling a list of things I hope I can do a quick, several hour tutorial on to get a taste of what the skill is like.

Here is my list so far:

  • Storyboards
  • Auto Layout
  • Unit Testing

If anyone reading this has any recommendations of things they would recommend I become familiar with drop me a tweet! My Twitter handle is @redqueencoder. It is also the same on ADN.

My ADN Client Project

One of the goals I have had this semester was learning how to create an app utilizing an API. There are a lot of things I keep hearing about that I don’t really have familiarity with that I want to understand better. Using an API is at the top of that list.

My understanding of our class assignments is that we are primarily working on two different long-term app projects. One of them is one of our choosing (which will be my Core Audio app) and one that will be an App.net client. We are being given permission to use the API to develop an ADN client for educational purposes. If we want to publish our client we need to pay the developer license, but for the time being we can see what it is like to practice making a client app.

App.net has a tremendous amount of functionality. There is a large variety of various different types of app clients released for ADN. Initially a few of them caught my eye. Ohai looked interesting because it was different than a lot of the other straightforward apps that just republished a stream. Ohai is a journaling app that will allow you to record where you are and what you are doing utilizing the ADN framework.

Rivr also looks interesting. I like the design and the feel that it conveys. Yawp! also caught my eye, but that was just because of the name.

The one I decided to model my project off of is Photolicious. I have been interested in using the GPUImage framework for a long time. When I was deciding what I wanted to focus my energy on this summer it was between Core Audio and GPUImage. It was a tough decision but I chose Core Audio. I am glad that I am being afforded an opportunity to use both of these technologies.

I need to spend some time looking through the ADN documentation and messing around with GPUImage. I will catalogue what I learn from these things as they progress.

Learning UICollectionView

The first concept we were assigned to learn for class this semester was the UICollectionView. Last semester we dedicated a great deal of time to learning UITableView. This seemed like a good first project since this was similar to the table views.

It was recommended that we look at the slides from the 2012 WWDC presentation on the collection views. I downloaded these presentations, but I had trouble focusing on them. I also opened the documentation from Apple. Both of these sources were rather dry and I wanted to find a tutorial.

The first tutorial I found was this one. This tutorial appealed to me because it also utilized two other concepts I have not learned or played around with yet: Storyboards and Auto Layout. I thought this would be a safe opportunity to play around with these things.

The tutorial is fantastic. I realized as I was working through the tutorial that it also utilized an API from Flickr. I applied for a developer key and I worked through the first part of the tutorial.

I realized that this was a little bit of overkill for the assignment we have been given. I looked for a simpler tutorial and I came across this one. This tutorial was written by the author of the book “Pro iOS Table Views”. I looked through this book earlier in the year when I was learning table views and the guy knows his stuff.

I have worked through the tutorial and reached a point where the program doesn’t work and I am uncertain as to why. I was waiting to write this post until I figured it out, but I have a deadline to show I have made a modicum of progress this semester. I am uploading the program to BitBucket later tonight and I will continue to work on debugging the project. Later I will post an update as to why the project was not working.

Redefining my Semester Project

My semester programming project has undergone some changes since I conceived of it and posted my plans on my blog.

My teacher came back with some notes saying that the primary purpose of the project was to chronicle my learning process of creating the app. Since the app was technically done and just needed some polish, I decided to be bold and go in another direction.

I have wanted to learn Core Audio for a year or so now. I have either not had enough programming experience or been too busy to dedicate much time to learning it. I am also now required to complete and independent project in lieu of an internship for that requirement. I decided to dedicate a lot of time to making a Core Audio app and to kill both of those birds with one stone.

I made this decision a week ago. My initial thought was to create a subtractive synthesizer. I really enjoy using Reason and I wanted to make a synth modeled on their Subtractor synthesizer. It is modeled on an old analog synth rack and I really like the aesthetic feel of the analog synth.

On Monday I met a person at my CocoaHeads user group who has been programming audio for the last 25 years. He invited me to get coffee with him so that I could look at his project.

So yesterday he and I met up and I saw what he was doing. His synth is incredibly ambitious. He showed me the code he used to generate a simple square wave. In Core Audio that would have been a few lines of code. In his this was several classes worth of code.

I asked him how long he had been working on this . He told me he started it four years ago. He said he has been “almost done” with it for the last two years.

This was very daunting information. I want to make a synth, but I don’t think it would be a good project for my semester. Even if I just got one component done (which isn’t really likely) then I really wouldn’t have a lot to show for it.

I went to Chris Adamson and asked for advice about how long it takes to program a Core Audio app that does something. Part of this issue with Core Audio is learning the technology and looking through the header files. I wanted to get an idea of whether it was feasible for me to learn enough Core Audio to make something functional by the end of the year as a portfolio piece. He and my teacher Eric both gave me some ideas for a much less ambitious project.

At this point in time I am thinking about attempting either a streaming app or a recording app. I want to work my way all the way through the book at least once before I firmly commit myself to a project.

I have the next four days to just focus on Core Audio. I am through the first two and a half chapters and I need to see how much progress I make over the “long” weekend.

So, my current plan is to spend a few days getting up to speed on Core Audio and then redefine my semester project. That is where I am at right now for the independent project. I will update later with my progress.

WWDC: The Canary in the Coal Mine??

I am a current iOS student at a tech school in Madison, WI. We recently began offering a degree in Mobile Application Development utilizing either iOS or Android. This seems to be a growing field and many teachers at our school have felt that we are leaving money on the table by not producing mobile application developers.

For the last three years or so, our school has sent two students to WWDC on a scholarship. Before, at least to the ones I spoke to, you filled out an application.

This year you were required to produce an app. The limited information I have at this time says that most people who received a scholarship application had an app in the store already.

I heard a story from someone saying that a few years ago a student won an award at WWDC and immediately started a company that makes millions of dollars a year, but still takes a class a semester to maintain his WWDC scholarship eligibility.

You know what, fine. Part of me was thinking about delaying my graduation to have another bite at the Apple next year when I have been doing this more than a few months.

However, a lot of this bothers my Spider Sense.

This year the WWDC tickets sold out in 90 seconds. This bothered a lot of developers who worked on Apple programs during the Dark Ages before the iPad.

I got my first Apple computer in 1984. I think I am one of the oldest people that exists who does not remember a time when they did not own an Apple computer. I have never owned a computer made by any one other than Apple. I remember as a child being confused as to why I could not just buy any software I saw because it said “IBM/Tandy” on the side. I stuck with them during the Dark Ages of the mid-90’s when their imminent demise was all but certain.

I am not alone in this. The estimates that I saw were that 20,000 people all logged into Apple to try and snag 5000 tickets to WWDC. I have no idea how many students applied for scholarships, but I would not be surprised if it was comparable to that number.

I might be displaying Hipster tendencies, but to me, when I see numbers like that it is a warning sign to me that it is time to leave the party.

My previous attempt at a career was in Journalism. When I was trying to break into that field I was told that there were 50 applicants for every job out there.

I am getting a sinking sensation that Apple development is becoming a similar situation. It is hot right now, which means that more people (like myself, I guess) are having a crack at it. When there are too many people going after something, it becomes less likely to succeed.

Look at law school. Law school used to be a stable, well paying career. Now it is over saturated by people trying to find somewhere to land in their professional lives.

I think something will change. My sense, along with recent news, tells me Apple is headed for a crash. I do not know if that means I need to move on to whatever comes next or if this is a readjustment period to purge excess developers. Either way, I am not certain that WWDC 2014 will attract the same people in the same quantities.

If anyone knows what comes next, let me know!! 🙂

Internships

We, as programming students, are supposed to get an internship to complete our coursework. I have spent the last three years being told that there is a massive demand for mobile application developers and people who know HTML5. One reason our programming teacher is pushing us so hard to learn this stuff is because, according to him, we are leaving money on the table. The world needs more of us and he is trying to mint us as quickly as possible to keep up with the demand.

Imagine my surprise in trying to find an internship. I am currently in my final week of classes and I have been trying to find an internship for nearly three months.

I contacted a company in Chicago that does internship/apprenticeships. They got back to me for a while, but it was always at least a week after they said they would and only if I contacted them first reminding them they were supposed to send me information. I have not heard back from them in a month and I am officially deciding that this lead did not pan out.

I also contacted another company in Madison that does not currently do internships, but were considering the possibility. We had several meetings and I felt good about the outcome of this, but in the end they did not want to create an internship program. I completely understand their decision. This company’s primary focus is in attracting/upgrading master programmers. I am a student who has been doing this for less than a year. I am nowhere near a master programmer and what I am looking for is not in their scope as a business.

I found one other place that does do mobile application development that also does internships. Cool!

I had an interview with them a few days ago. I did all the stuff that you are supposed to do. I dressed nicely. I put on make-up. I brought my WWDC app to show off some of my work. I arrived on time.

When I got there the interviewed left me alone in a room for ten minutes. Okay, no big deal. When he got there he spent about five minutes telling me about the company and asked me about myself.

I went over my education, talked about my interests, showed him my app.

He then starts asking me if I do web development. Well, kind of. It isn’t my primary focus. I spent the last ten minutes telling him about how I gave up everything in my life to learn iOS development, spending 40-80 hours a week doing just that.

Excellent! They have a web site they have been contracted to make in HTML5 that is supposed to mimic an app they already created.

Do I use Photoshop? Yes, it is in my resume.

Excellent! This web site is a small project, only about 300 hours and they want an intern to work on it to get their feet wet in working at a real shop.

Cool, how much does this pay?

This is unpaid.

Thank you for coming in. We have a lot of other people who we are interviewing for this job. We will get back to you. Don’t let the door hit you on the way out.

I can’t remember a time I have had a worse interview experience than this.

– They have a contract with a company to provide a service. They were either hired or they bid on this contract and they will receive a certain amount of money to complete this project. They do not get to dump that on an unpaid intern and act like it is a travesty that the intern ask to be paid, even a nominal amount.

– They did not listen to anything I said about what I do and what I hope to do. They had a certain need and they tried to shoehorn me into doing something that they didn’t want to do.

– They did not show me around their office. Nearly every interview I have had, they show you around a little before they talk to you because they want you to want to work there.

– They cut off the interview at the point where I talked about payment. Clearly they only want someone to work there for free. I have had three unpaid internships and none of them have lead to a paid job. Ever.

If you are majoring in something like Journalism and there are 50 people competing for an internship, that is one thing. It isn’t cool to not pay interns, but if you can find someone who will work for free because there are 49 other people who will, it is easier to get away with.

HTML5 and iOS development are hard. There are not a lot of people who do them and do them well. Just because the guy down the street in the State Capitol can get a hoard of political science majors to work for him for free does not mean that you can get a programmer to work for you for free.

If I am going to work all summer without being paid, I am working for myself. I have said that I want to learn Core Audio. I will spend my summer learning that and making a kick-ass app that I will own. I am not going to come and pay $15 a day for parking for the privilege of working for you for free, where at the end you will shake my hand and not hire me.

I have absolutely no indication that I will be treated well at this place. They do not feel that what I am doing is important enough to pay me even though they are being paid to perform this service (which, by the way, violates the law regarding internships).

I am sure if they look hard enough they will find some poor sucker to come in and do this job for free, but they will be getting what they pay for. No one that I know that sweated blood trying to learn this stuff is going to go and work somewhere for free when they can get an actual programming job somewhere that pays them a lot more.

I am sure if I tried finding a job that required Java or something else I could find one pretty easily, but I don’t want to do that. I have a very specific idea of what I want to do and I have been afforded the luxury of waiting things out and being picky. This is a tremendous opportunity and I am not throwing it away on people who have no respect for me or the work that I do.

I truly hope that I am not making a huge mistake in attempting to get into this field. I do have to consider the possibility that people will not pay me to be a programmer.

Chris Adamson wrote a great blog post on app pricing. Basically the amount that people are willing to pay for an app is not enough to make it worthwhile for a programmer to code an app. People want apps, but only ones for a buck. There is a tremendous demand for apps and a tremendous want on the part of developers to make apps, but the economic of app pricing have precluded this from happening.

I wanted to learn iOS because it is hard. I figured if I could master something difficult, then the next time I attempt something equally difficult it will be easier and so on.

I know that I probably won’t be programming iOS in 5-10 years, I will be programming something else. I believe there will be a need for programmers and that because we are in a recession that does not give you the right to demand my work for free. Scratch that, you have the right to ask whatever you want, but I also have the right to say no, my time and expertise are worth something.

I supposed time will tell if I am right or wrong.