Tag Archive: objective-c

What I’ve Been Doing

I spent February doing several things that are fun and also a first step toward fulfilling my Phase Two mission: Make useful things. (My Phase One mission was: Travel and learn.)

Programming in Plain English

I’m creating stand-alone software to let you program in plain English. I have a basic plugin version of the software working, which I’ll present at a SXSW TechBreakfast. If the fancier, fuzzier stand-alone software is also working well enough by then, I’ll demo that as well. It’s an iOS app and will also be a Mac app initially. Here’s a beta website for the project: Plain English Programming.

Short and Sweet Courses

I created a Udemy course called “Short and Sweet: Basic Programming Concepts in 2 Hours.” It was fun, frustrating and rewarding to create a two-hour course that presents the essential ideas of programming in real-world language, using pseudocode. The goal is to make it easier for students to learn any programming language after taking the course, and to understand good practices around program structure and refactoring. I’m happy with the end result (for now), I’m loving the ability to communicate instantly with my students and help them get past roadblocks and succeed, and I’ve made my first online revenue, which is exciting. The course is here, if you’re curious, and I’m including a coupon for blog readers: Short and Sweet: Basic Programming Concepts in 2 Hours

I’ve drafted an eBook to pair with the course and am planning my next courses in the Short and Sweet series. Initial feedback is that the concept is good: A Short and Sweet course will be the best, fastest, easiest intro to a topic — no oxymorons! I’ll be testing this premise some more and then launching my own course platform. Now that I have a course recording process down, it shouldn’t take me long to produce content.

Flashcard App Final Phase

I’ve hammered out many of the bugs in my flashcard app, which I plan to tailor as a study aid for each course I release. I’ll also release some stand-alone flashcard apps to help people study for various exams, starting with the NASM personal trainer exam, simply because it was the first test database I created for the app.

I have several other ideas swimming around in my head, mainly around how to help people learn and do more, better, faster. I’m really enjoying this phase of my sabbatical and will send updates. Apologies for the bat-cave moment on this blog, I know it was quiet here for a few weeks. I wasn’t sleeping :-)

FacebookTwitterGoogle+Share

Hacker School Gratitude Journal

I’m grateful for everything about Hacker School and this summer.

I’m grateful for the people who made this experience possible. I’m grateful for the programmers who shared their knowledge and welcomed me to share mine. I’m grateful for the friends I made, and the hours I spent in deep concentration, and for the fact that these two things were not mutually exclusive.

I’m grateful for the chance to attend this magical place.

I’m grateful for the community that extends beyond Hacker School and makes the motto, “Never graduate,” a real thing, so I can keep growing and learning and sharing and participating in different ways over time.

I’m grateful for idealism winning out over realism, and making reality more ideal. I’m grateful that my Xcode plugin worked. I’m grateful that I didn’t overthink the idea before starting to try to figure it out. I’m grateful for the help I got from people in and around Hacker School. I’m grateful for brainstorming sessions, the comfy couch to sit on, the amount I’ve learned, and the feeling of being surrounded by lots of motivated, curious people.

I’m grateful for the lovely apartments I had to stay in, the noise of trains over the Manhattan Bridge reminding me that things are always moving and shifting, reminding me to keep pace and keep pushing and change things.

I’m grateful for my roommates and the wonderful experiences I’ve had with them, and I’m grateful that I took the chance to push out of my comfort zone and into the world of adjusting to others. I’m grateful for the occasional privacy that balances out my experiment in living more cooperatively and nomadically.

I’m grateful for the awesome people in my life, and for serendipity.

I’m grateful for my health. I’m grateful for the great food I eat every day and the opportunity to try anything. I’m grateful for New York City and its never-ending options, and I’m grateful for my ability to focus.

I’m grateful for persistence and creativity, which are only good together and have allowed me to do all of this — everything I’ve done for the past few years, leading me to this point of creating and exploring and learning and enjoying the world.

I’m grateful for the tough weeks and the easy weeks and the mistakes and the things done right, and the amazing summer that all these things combined to create. I can feel that I will look back on this summer with utter thankfulness, probably when I’m tired and stressed-out and working hard and struggling to sleep enough. So I thought I’d start now and say

Thank You.

Hacker School: Week 7

I’m in the second half of Hacker School, feeling short of time and not sure what to do about it. My only option is to keep showing up every day and getting things done. I sit at a long table in a huge room or abscond to my personal favorite work space, a living-room-like corner with a high ceiling, a metric ton of computer books, and a metal staircase leading up to a door that doesn’t open.

On a beanbag or couch in this corner, surrounded by books and people hacking on projects and a robot mural painted on the wall, I feel equally at home and unsettled.

After focusing on C for two weeks and then an Xcode plugin for a month, I’m switching my “learning” focus to JavaScript and node.js. I’m using the excellent Learn JavaScript Properly outline suggested by Richard of Stanley, and so far it’s going well.

Turns out I like JavaScript. A lot.

This is sort of a surprise to me, because I’ve heard JavaScript is weird. Inconsistent. Unreliable, even.

But I resonate with the C-based parts of the syntax, and it’s helping me understand the function-based parts that aren’t quite the same as Objective-C’s classes and methods. I’m learning from a solid base. And that’s reassuring.

I also feel like I can eventually build almost anything with JavaScript, and that’s motivating. I don’t feel like I’ll need to learn it for six months before I can do anything useful.

My “building/maintenance” focus remains on expanding and extending the plugin, so I have two tracks to switch between. This is my best mode of working, because even procrastination can become productive — if I get tired or burned-out on one thing, I can switch to the other. It also ensures I write code consistently and don’t get bogged down in only book-learning.

I’ll write a full-on technical post about the plugin soon.

Day 89: Victory

I cannot begin to describe how happy this makes me:

Terminal output from Xcode voice recognition plugin

And this:

Xcode voice recognition plugin

I went back to the voice recognition plugin. I thought about it differently. And it works.

It’s not perfect. Far from it. But the key bottleneck is broken. This basically means everything I want to build, from a functionality perspective, I’ll be able to build.

I’ve never actually experienced this in coding before. I always just had someone help me through the hard parts, which was good for productivity but meant I never really learned to work through a tough problem in code. It’s awesome.

Referencing the “Day 89” in the title of this post, it’s Day 89 since leaving my job. Day 31 of Hacker School.

The Startup Weekend Roller Coaster

One thing I promised myself when my journeys began was to do things that scared me.

This weekend I did something that scared me. I jumped into Startup Weekend Social Impact Edition with no plan and no idea what to expect, and emerged amid a solid team working well together around a good idea.

Friday night, I pitched an idea that I came up with on the spot. I wasn’t planning to pitch anything at all, but thought it would be a good experience to try it. My idea wasn’t selected, so I joined a team and prepared to work all weekend toward our goal and have a great time.

By Saturday afternoon, our project was in disarray. Disarray. Our initial market research — the part where we actually left the building and talked to people — indicated our product might not resonate with people. We knew we should pivot. But we didn’t agree on which direction.

I felt myself curling up inside and imagined spending all weekend just arguing about the product, without actually making a product. I didn’t know which direction we should go, I just wanted to spend the weekend making something. So I put my head down and kept coding. At worst, I figured, I’d make an app prototype that we could tweak when we settled on an idea.

Two of our team members left. I felt bleak. It was late afternoon, and we didn’t have much to show for it. And then suddenly (I’m not really sure what happened here), it turned around. We decided on an idea, which was close to our team lead’s original idea, and just went with it. No one seemed initially overjoyed, but from that moment we were okay and things started clicking.

We spoke with mentors. We iterated. We shared ideas and split up tasks and generally worked productively and well together. It was fun. I’m not sure what changed. It’s like the pit of despair opened up and there was a path and we decided to get up and walk down it to somewhere.

We worked productively until 11 p.m. Saturday and then disbanded for sleep or social life, reconvening on Sunday. We created and refined our pitch deck and finished web and app prototypes. Finally, we presented our pitch and demo to a panel. Our service seemed to strike some right notes, and we received constructive and thoughtful feedback.

On the whole, I think our presentation was a success and our proposal was viable — nearly unthinkable on Saturday afternoon. I’m not sure what will come next. But this was a valuable experience, and I’d do it again.

Here is our web prototype and our app prototype code.

Key takeaways: It is so vitally important to seek customer and market validation early. Negative market feedback is a great opportunity to adapt and learn. Sticking with a team instead of an idea is a great idea.

My Big Nerd Ranch Diary

I took vacation to attend the Big Nerd Ranch iOS Bootcamp last year. It was my favorite vacation ever. That’s when I knew I was on to something.

Today, I start Hacker School. I’m taking this moment to look back and share my Big Nerd Ranch diary. Every night in rural Georgia, I came back to my cabin in the woods and wrote my impressions of the day. Here’s what happened during that week:

Friday

I’m in my cabin after Arrival Day at Big Nerd Ranch — I’ve been anticipating this trip for about a year but wasn’t sure what to expect. I’m impressed so far.

First, the staff at Historic Banning Mills are heroic. Although I grew up camping as a Girl Scout and once could survive on Mountain Dew and Skittles, I am a city girl at this point in my life and had a health crisis that scared the Skittles right out of me. The thought of spending a week in the woods eating hush puppies from the lodge kitchen didn’t thrill me.

When I asked about food, Big Nerd Ranch staff said they would ask the kitchen at Banning Mills what they could do. The kitchen said if I could ship food direct from a provider to them, they would cook it for me. That scored about 1,000 points right there. I used Boxed Greens, which ships organic food nationwide overnight. The food arrived a few hours before I did.

THEN the kitchen staff kind of got into the idea. They said they wanted to buy more food to complement the contents of the box. They’ve considered offering an organic option for students, so I think they viewed this as an experiment. In return for their awesomeness, I gave them carte blanche to create whatever seemed interesting to them. My first meal, this evening, was delicious: a kale/peach/cucumber salad, followed by salmon over lentils with kale, tricolor peppers, and onions. (The regular food also looked tasty — salad and then herbed chicken over mashed potatoes with asparagus.)

Now I’m in the cabin, relaxing. Speaking of the cabin, it is huge and gorgeous.  More good things about today — the wonderful shuttle driver at the airport who did not leave anyone behind, and my fellow classmates, who are friendly. I’m looking forward to spending a week getting to know them better while my brain gets a workout in the class. It’s a challenging (grueling?) schedule, but I’m ready and plan to make the most of this opportunity.

Which means I’m going to sleep soon. More tomorrow.

Saturday

Class today was surprisingly easy and doable — but I am so glad I worked my way through the BNR Guide to Objective-C Programming last year! Struggling with this book over four months helped me rush through half of it today. We cover the other half tomorrow. If I’d walked into this class with no programming experience at all, I’d be in trouble on Monday, when we dive into iOS apps.

I still may be in trouble on Monday. The reviews I’ve read say the pace picks up fast then, so the fact that I’m finishing challenges quickly puts me somewhat at ease, since I may be able to keep my head above water on Monday and Tuesday. After that it’s anyone’s guess, because at some point we will start covering material beyond the point I’ve reached in my BNR iOS Programming Guide self-study. Then I’ll be learning entirely new stuff. And that takes longer, but we’ll still be flying through the material. I’m hoping that by getting the basics down well in this weekend intro, I’ll be able to survive through the week with some understanding and real ability to get the most from the class.

Also, I learned that there is an advanced book for the advanced class! It is, sadly, not available on Amazon or in any bookstores. Another reason to possibly take the advanced class later this year or next. I’m hoping that between now and then, I can dive in and create some real apps for free on the app store, just to test the waters and see what happens.

Anyway, more tomorrow. I was surprised not to find myself tired or burned out by 9:30pm, when I came back to my cabin. Maybe it’s a good sign, but I’ll wait and see how tomorrow goes. Food was delicious, as it was yesterday, but I am afraid my statement that, “I eat fish,” was received as, “I eat fish at every lunch and dinner.” In truth, I eat fish a couple of times a week. If fish continues to appear at every meal, I may have to say something — but what can I really say, anyway? They are preparing custom organic meals for me! Today some little potatoes and wax beans appeared — I think they are shopping for me, to supplement the stuff I sent in the box. Amazing kitchen, amazing place so far.

More tomorrow.

Sunday

My brain is starting to get tired. We rushed through many topics today, and while I understood most things, they are starting to jumble together in my mind. I’m hoping my mind can sort it out by the end of the week, and that I don’t end up dreaming all night about coding, because that would be about 20 hours of coding per day, which is a lot more than 12, which is what we are essentially already doing.

Today we finished the Objective-C book and I reviewed the documentation for NSArray, NSMutableArray, and NSDictionary. Tomorrow we dive into iOS Cocoa Touch programming.

I am loving the class, despite my brain-whir, and found myself wishing I could attend for two weeks or a month and really delve into more and more advanced topics. We’ll see how I feel on Thursday and Friday; if I still feel the same, this may be amazing for me.

The classroom is light, bright, and free of awful bugs. There were some small winged creatures on my desk this morning, but I let them be and they flew away (or my neighbor squashed them while I was in the bathroom).

More good conversations with other people who are here to learn; I love being in a room full of people who are mostly there by choice, since the attitude is amazingly good and therefore so is the experience overall.

Organic food from the kitchen continues to be good, although also salty; today I learned that this is not limited to my dishes. All of the food is very salty/spiced. I keep drinking water; can’t bring myself to complain about it. Lunch was shrimp escabeche — over red cabbage with a tomatillo sauce (I’m not sure what was in the tomatillo sauce, but it was awesome). Some delicious cauliflower with dinner, and nicely cooked yams, plus more fish. I don’t know if I will eat fish for a while after I get back.

It rained today so there was no nature walk. I did see zip-liners breezing past through the pouring rain.

More tomorrow.

Monday

Day 4 of my adventure, Day 3 of class. This is where the blogs I’ve read have dropped off, and now I see why. We covered a prodigious amount of stuff — nearly 200 pages of the iOS Programming Guide. I am getting a better understanding of some things that confused me the first time around, but I still wish I had an extra day to put it all together — the basics, the new techniques — but we just keep steamrolling forward. I don’t have time to do all of the Challenges in the book, and I really wish I did, because I’m learning a lot and I’d learn even more then!

I think I’m keeping pace reasonably well. A few people are behind me, some people are ahead of me who have a lot of coding experience, and some are about on pace with me. I think this is a marathon and not a sprint so I’m okay with it.

I do feel gratified doing something for my own self-improvement that is also productive and useful, potentially, for others who might use my apps someday. I hope I can build a lot of productive and useful apps upon returning home. I certainly feel like I’ll have a running start.

This is a good environment for learning. I have almost no time to myself, which is weird, but I’m getting a lot done and reminding myself that this is temporary and necessary. What I am getting is time to concentrate, even among others, which almost never happens. I forgot how much I enjoy super-focused days.

The food remains delicious — and today it was not salty, since when they asked me what I wanted to eat, I said I would eat anything they made for me but please to go light on the salt. It was a great food day.

It was a great learning day. I wasn’t tired at 10:15 and only left because I knew I had to get some sleep to keep up the pace for the remaining days here. I found a centipede in my bed when I came back, so I called to ask the front desk if it was poisonous. They said no and also sent a nice staff guy to pick it up and remove it from the cabin. It was a nice little creature, I guess, if I were used to creatures.

More tomorrow. Bedtime if I want to get a full 7 hours of sleep. (First night: 9. Second night: 8.5. Third night: 8. I see the pattern. It stops now.)

Tuesday

Unbelievable amount of learning happening today. I’m starting to connect the dots, and know why I need to make a change. Even when I make a mistake I understand what the mistake was after it’s pointed out to me. I still make mistakes nearly all the time; but I also do some really cool things, like find a method the instructor didn’t know about, and try to figure out how to make it work; or set up new functionality to make things more efficient — and it works!

I’m a little bit on overdrive and finding it hard to sleep, but it’s good — it reminds me that it’s still possible for me to feel alive when contemplating work tasks, and to concentrate hard on something for several days at a time. I spend most of my regular workdays so interrupted by multiple tasks that I feel like I never get anything done. This is a refreshing change. At 10pm tonight when I still wasn’t physically or mentally tired, I realized that this is something that’s been missing from my life for a while.

I’m going to sleep now so that I can function tomorrow morning. I want to hit the ground running — again.

I am in nerd heaven. I think I may have tapped into something really important for me — other nerds.

Wednesday

Today was the first day I felt tired, and I struggled to keep up. We were on a rushed pace to try to make up some time, since we’d fallen behind by about one lecture. By day’s end, we were caught up — but that meant about an extra 2 hours of time. Lectures ended at 8:15 and I wasn’t caught up until 10:30. Lots of other people were there too, and we were kicked out of the learning room around 10:40 (after a few well-deserved games of Typeracer).

There was one point in the afternoon when we were implementing an involved piece of code that only worked on a single image thumbnail and only on the iPad, and I just realized that if I spent time to understand what I was doing I would never get to the *really* cool stuff — Core Data and touch gestures — so I just started typing. Type type type. I implemented the thing, realized I might need to look back at this someday, and moved on.

At points during the day I could hear the instructor talking but couldn’t focus. Maybe it was just an off day for me; but I think my head is so chock full of new iPhone programming knowledge that it needed a bit of time to process it all.

I’m going to bed now to give myself the best chance of recovering and hitting the ground strong tomorrow. I’m still keeping up with the class, but I don’t feel the sense of mastery that I felt yesterday (and yes, I realize that mastery is a good way away — but I was putting all the pieces together yesterday).

Thursday

Back on track today. We went at a slower pace, I absorbed nearly everything we covered, and I was able to implement some pretty cool apps, especially one that allows drawing. I now have the skeleton of something I actually want to implement when I get home. Exciting!

Class was fun but I can feel the pace winding down. I’ll miss my fellow classmates but have enjoyed the opportunity to spend a week with other nerds doing one of my favorite things on Earth — learning.

I’d love to be back for the advanced course in November, but we’ll see how the year goes. Will I use these skills in the next six months to build apps? Will I push through the frustration when I can’t make something work, and figure out how to persevere, work through the syntax and search the documentation (and Stack Overflow) to find solutions?

We’ll see. More tomorrow — and the next day, I hope.

I’m ready to go home but also not ready. I did better in this class than I expected when I walked in the door. I want to put my new skills to good use and produce apps that are productive for users and for me.

I’m a Big Nerd.

Friday

Back home. We had class until 12:30, then lunch and then quickly piled into the shuttle back to the airport. I spent a few hours waiting for my flight there and then got home around 9:30.

I expected to feel mentally drained and tired, but I feel mentally turned on instead. This is awesome. It says to me that I did the right thing, and I love feeling this way. I’m going to keep working on the programming at home, and see what I can struggle through and make in terms of apps. I feel like the BNR class gave me the tools I need to keep learning on my own, and to work out problems when I run into them, because I’m starting to understand the underlying patterns and logic of programming.

Starting to understand. That’s key. There’s a lot more work to do — but I think I’ve got a running start. Now I just need to keep going.

Day 46: I Wrote This on My iPhone and It Was OK

I started writing this post on a smartphone at lunch and finished it in my hotel room. I’m not used to typing on a smartphone, but I got tired of losing the thoughts that slip through my head while walking, eating, and people-watching.

I wonder why each person is here, in Quebec City, as they walk past — who he is, if she is on vacation or on sabbatical, if they work here or study at a university or travel, with one foot in this city and one in the next place.

I love this city. I haven’t been super-productive, choosing instead to enjoy the Summer Music Festival and my family’s company for the few days they also were here. Today was different — I read for five hours and then stepped out for lunch. Later, I’ll read and write for five more.

Low-Level Hardware-Software Interaction

I’m learning about low-level hardware-software interaction — the stuff that happens when mouse clicks and typing are translated into machine instructions that whiz between the central processing unit (CPU) and the memory and back. My vehicle for learning these things is a great Coursera course, The Hardware-Software Interface by University of Washington professors Gaetano Borriello and Luis Ceze, complemented by Zed Shaw’s Learn C the Hard Way and Bill Dudney’s All the C You Need to Know. Even though Objective-C is going away, I think it will still be a good idea to understand it and the C underlying it, so I can make maximum use of Swift alongside those tools (since I think they will coexist for a couple of years at least).

I learned Objective-C as my first programming language (and I love it, despite its to-be-deprecated status), so I’m in a bit of a weird spot. I think it’s a sweet spot: I understand enough about low-level programming to learn the guts and internals of machine language — so I’m taking that opportunity because I think it will make me a better programmer. I also understand enough about high-level programming that I’m able to comprehend Swift fairly well and expect to grasp JavaScript/node.js when I dive into it later this summer.

For now, I’m having lunch on a street in Quebec City, watching people pass by.

Goals and Productivity

On last week’s goals:

  1. I fixed the search functionality in my flashcard app. I also identified ways to improve it.
  2. I implemented swipe-up functionality. The card doesn’t disappear yet after the swipe, but I’m working on fixing that.
  3. I read part of the Swift book, but then got distracted by the Coursera Hardware-Software Interface course.

This week’s goals are:

  1. Fix the swipe-up functionality in my flashcard app so the card disappears after the swipe.
  2. Delve into low-level programming topics and struggle through what I don’t understand, including the C underlying Objective-C.
  3. Finish creating questions for my flashcard app database.

Day 10: AltConf Adventures as Swift Launches

I woke up in Pacific Heights around 5am, jet-lagged in my favor for once. Into a cab at 5:50, quiet streets all around, and arrived near the Moscone Center just after 6am.

Crowds queued outside Moscone West, waiting for the WWDC keynote. I was attending AltConf, a free event for developers without WWDC tickets to network, learn and have fun.

The mood at AltConf was exuberant throughout most of the two-hour keynote, turning to anticipatory dread when the crowd  realized the end of Objective-C was nigh, then overcome by relief and curiosity when Swift appeared to be a useful replacement.

I say “appeared to be” because I’m still reading the Swift iBook released by Apple today. Still absorbing, learning, and seeing a lot of work in my future to master this new language. But looking forward to understanding and then mastering it.

Food-wise, today was half disaster, half dream. I started the day with a nutrition bar and a tasty burrito, followed it with burrata mozzarella on toast, then had an organic egg crepe, organic vegetable juice, a muffin, fried polenta sticks, kale salad, almonds, a pack of organic raspberries, and half of an organic chocolate tart.

Come to think of it, I ate a lot.

Tomorrow: Less food, more code.

Day 7: Goals Accomplished

I registered for the NASM personal trainer test. I read 100 pages of the NASM book (200 down, 300 to go). I worked on my flashcard app and struggled — am still struggling* — with UICollectionViews. I blogged four times and drafted a post for Medium.

I also established a Twitter account for this blog, ate somewhat better, slept a little more, spent time with family, met with a few former colleagues, finished reading Effective Objective-C 2.0, finished reading Apple’s Mobile Human Interface Guidelines, and booked a vacation stay in Italy.

Somehow, amid all of this, several people told me I look more relaxed.

I’m happy to hear it.

I do feel relaxed, in a productive-flow way. When I’m in the zone, working on something I enjoy, I’m happiest. That’s why it’s vital for me to stay productive even when I’m ostensibly relaxing and traveling. I’m always finding my way to what’s next.

* UICollectionViews are basically places that hold content within an iPhone or iPad app screen. They can be small or large, and you can scroll through the content in them and choose one or more items. The difficulty for me is in correctly setting up sizing and scrolling, although I’m making progress.

Day 5: Racing Ahead, To What?

Yesterday was excellent. I finished reading Effective Objective-C, a book that improved my coding instincts despite my newcomer status. To wit:

  1. I find myself more open to the idea of using blocks;
  2. I consider how to move as many properties as possible to the .m file’s class-continuation category, instead of leaving them in the public .h file;
  3. I name my objects and variables more clearly;
  4. I have a good conceptual understanding of memory management;
  5. Probably several other things I don’t consciously remember.

This book is also so excellently produced that I even enjoyed turning the pages and noticed the quality of the ink.

I also finished reading Apple’s Mobile Human Interface Guidelines, which helped steer me away from implementing a horizontal picker control — an inelegant solution for helping users navigate in my app. Instead, my awesome Thinkful mentor let me know about Collection Views, and I’m looking into those now via Apple documentation, the Collection View programming guide, and WWDC slides.

This highlighted an important principle for me — I knew I was doing something not-good in implementing the horizontal picker. I felt like pieces weren’t fitting together, like I had a toolbox with half the tools missing. I want to remember this feeling, because it probably means “wrong track” most of the time. The sooner I  recognize it in the future, the less time I’ll waste.

Caveat: I know there are times when I might not have all the information but am actually on the right track. In my experience, the right track feels different, because the new pieces of information I stumble across tend to make sense across the fragments and illuminate the spaces in between.