Six months ago, I wrote about my thoughts on the difficulties of teaching kids to write code. There were a few iPad apps that seemed to have potential to introduce kids to programming.

Unfortunately I've had a hard time finding a way to introduce my sons to these apps. After all, it's kind of a slippery slope. I want this to be fun, and I'm afraid if it seems like too much of a chore right off the bat it might be a while before I can try again. Also, when you open up the iPad there are potential distractions just two clicks away. If the app comes off as boring or too educational I'll get a "can I play Minecraft instead?" within minutes.

So, I've been biding my time and waiting for the right moment. Then, lo and behold, we were signing my oldest son up for supper activities this Spring when I saw an appealing option: "Coding with Kodable". Ooh, that sounded interesting. After reading the description I learned that Kodable is another "learn to code" app in the same vein as the ones I mentioned in my blog post last December. Well, of course we signed up for it and my son will be finishing up his "camp" today.

It has gone really well. He did it with other kids his age, so it was fun, and he really did learn core concepts in programming. Today was the first time I dropped him off at his class, so I hung around for a few minutes and watched my son work through the app's puzzles. I was pretty impressed with what I saw.

Now, keep in mind that we're talking about 7 year olds here. They're still learning how to write and spell, so typing in complicated blocks of code is out of the question. The goal is to start with the basics.

What is a computer program? It's a sequential list of instructions that tell a computer what to do. So, that's where Kodables starts. In this case, the instructions are geared towards guiding a "Fuzz" through a maze.  (The optometrist in me can't help but notice this is also a great exercise for laterality / directionality, spatial reasoning, etc). The child simply drags a series of arrows onto the screen to guide their character though its course. Just like in programming, the order of the instructions counts. Also, there can be more than one way to accomplish a task, but there is often a way that involves the least amount of instructions or takes a better approach (in Kodables, the better approach is the one that leads the Fuzz past the most coins). 

The next major concept is conditional statements. A program needs accept input then make a decision as to what to do next. In most programming languages this is done in an IF/THEN statement, eg) IF (weight > 200) THEN diet. In codables the condition the child can apply a color to their arrows that essentially says "if your Fuzz encounters a red square turn down".

 Conditional statements on Kodable. The instructions are the arrows in the top left side of the screen. Note the arrow with the red background - this is a conditional statement.

Conditional statements on Kodable. The instructions are the arrows in the top left side of the screen. Note the arrow with the red background - this is a conditional statement.

 

As people improve at coding they learn an important lesson: Don't work any harder than you have to. You oftentimes find yourself writing out the same sets of instructions multiple times. Whenever you find yourself in this situation you have to ask yourself if there's an easier way. Working smart,  not just hard, can result in huge time savings. In programming, two fundamental concepts that can help with this are loops and functions.

Loops can be used when repeating the same task two or more times. Consider the following maze on Kodables:

 Loops on Kodable. 

Loops on Kodable. 

The instructions would go like this:

  1. go right
  2. go up
  3. go right
  4. go up
  5. go right

That wasn't too bad to type out, but what if we had to do it ten more times? Or a hundred more times? This is where loops come in handy. A lop would essentially say:

  1. go right
  2. go up
  3. repeat the above steps 100 times

Functions are very similar in a lot of ways, except we don't necessarily duplicate the same instructions repeatedly. Instead, we save a set of instructions as a block, or function, that we can use, or "call", at any time. Consider this Kodable maze:

 Functions in Kodable. Note the three steps that are included in the function (seen to the right of the curly brackets { } on the right hand side)

Functions in Kodable. Note the three steps that are included in the function (seen to the right of the curly brackets { } on the right hand side)

To get through this maze the instructions would look like this:

  1. go right
  2. at the pink box, turn down
  3. go right
  4. go up 
  5. go right
  6. at the pink box, turn down
  7. go right

Notice any patterns here? Steps 1-3 are identical to steps 5-7. The "programmer" astutely noticed this and made a function. The function is located on the right side by the curly brackets { }, and contains the same block of instructions as steps 1-3 above. So, the new instructions will look like this:

  1.  run the function
  2. go up
  3. run the function

It doesn't look like much, but this is one of hallmarks of efficient coding and can save tons of lines of code, not to mention time,  as programs get longer and longer.

 A Kodable bug

A Kodable bug

Another very important feature kids will learn from Kodables is debugging. Coders rarely write a perfect program on the first try. Programming is very much a trial and error process: Write some code, run it, see where it screwed up, rewrite some code, and repeat. Just like real coding, you can run your program and watch each step as it executes to localize where the problem is coming fro. In Kodables there's segments where it purposely gives you a program with errors in it, and actually places a cartoon bug on the maze at the location of the problem. When you fix the programming "bug", your Fuzz rolls over the cartoon bug and squashes it. I know from experience there's nothing more satisfying than squashing those bugs.

In summary, Kodables seems to be a great way to get kids started in programming. It teaches them to look at a problem and break it into little parts, then give the computer stepwise instructions to solve the problem. It teaches concepts such as conditionals, loops, and functions. It also teaches debugging and, as a result, the acceptance of the inevitability of errors and the dedication needed to troubleshoot and fix your bugs.

In the future, kids that want to continue with coding will need to learn a programming language and its syntax. However, in my opinion, learning the basics of programming is much more important. And, after learning one programming language, picking up others is relatively simple once you master the fundamentals.

 

PS My 5 year old came along with me when we dropped my 7 year old off at Kodables camp today. After he saw his big brother solving puzzles on an iPad he wanted to do the same thing. We went to a coffee shop, downloaded the app, and spent an hour and a half "programming". He picked it up very quickly and we had a lot of fun together.



Posted
AuthorTodd Zarwell
CategoriesTech

I've rewritten my contact lens calculator on EyeDock. The new version does a better bob of showing its calculations by displaying information on optic crosses. It's also more flexible with how it accepts keratometry and refraction input. Lastly, I've added a SPE / CPE lens calculator that uses Thomas Quinn OD's nomograms (the same ones we used to create the GPLI calculator). 

Here's a little video introduction. I hope you find it useful!

- Todd


Posted
AuthorTodd Zarwell

I won't dispute the fact that I am a nerd, but if you called me a weather nerd I'd probably mildly protest. You won't find me debating whether the puffy cloud up there is a nimbus or a cirrus, and I'm not the type to while away my day watching the weather channel.

However, if you looked at my app history, I couldn't blame you if you thought I was a little obsessed about weather apps.  I've probably downloaded at least a dozen of them, most of them I only used for very short period of time before reverting back to the stock iPhone app and Dark Sky. 

So what's my beef? Why have I rejected nearly every app I've tried?  

It seems that every app would fall into one of two unacceptable categories.  

1. The app that goes into a ton of detail about the weather, but makes me dig around multiple screens before I know if I need my coat or my umbrella today. 

2. The app that immediately tells me the temperature and the rain, but I have to dig too deep to get the details. What's the dew point gonna be today? Will I be sweating through my dress shirt on the way to work this morning? 

WeatherNerd Today View

 

A couple weeks ago yet another weather app caught my eye and I felt compelled to buy it, as I am prone to do. The app, WeatheNerd, definitely had a name and an icon that appealed to me but I figured it was destined to end up in the same graveyard that the rest of my discarded apps have ended up. 

My first impression was that this one definitely had an attractive interface. It gave a nice line graph of the days weather, and had a nice animation of the probability of the rain throughout the day, as well as spinning windmills to indicate the wind speed.

It also had the current temperature in a big font at the bottom of the screen, with highs, lows, dusk and dawn time, humidity, and other pertinent data available at a quick glance.

It also gave a quick summary of the temperature: "2 º cooler than yesterday"? How helpful! The biggest thing I want to know when I check the weather is, how should I dress my kids today? The temperature is nice, but what better reference is there than yesterday? I was there yesterday, and I know now that dressing my kids in snowmobile suits on a 60º day was a mistake. I'm not going to make that mistake again now that I know it's even 2º warmer.

I also like the fact that the bar graph has a lighter line that indicates yesterday's temperatures. Again, it gives me a good sense of how similar or different today will be from the prior day.

A good app needs to tell you what to weather to expect in the future too. WeatherNerd's tomorrow view looks very similar to the today view and, as a reference, it tells you how the weather will compare to today. 

Of course, there's a week view with a quicker summer of all days, and even longer term weather predictions. As you get further out it will give you predictions based on historical data, which could be helpful if you're planning a future trip to a different geography than you're used to.

Like most modern weather apps, it also incorporates a Dark Sky-like, to-the-minute rain and snow predictions and has local area maps for watching storms move in on doppler radar. 

Additionally, it can send you a morning alert to give you an early message on what to expect for your day.

And, if you really want to nerd out, there is a button named . . . well, "Nerd Out". Clicking it will show all the fine little weather details to make the geekiest weather nerd scream like a little girl.

 

As you might have guessed, I really like this one and I think I've finally found my weather app.

 

Posted
AuthorTodd Zarwell

Admittedly, a refraction (the process of measuring a glasses prescription) can be a little stressful for a patient. Sometimes it's difficult to make a choice, sometimes both choices look back, and sometimes you might even say "one" when you meant "two". People fear that, if they make one wrong decision, they're going to end up with a bad pair of glasses.

In truth, this should not happen with a proper refraction because it's a very sound process that starts by breaking your prescription into three parts, the amount of nearsightedness or farsightedness, the amount of astigmatism, and the axis (or angle) of astigmatism. For each part we show more and less amounts of power (or axis) until one of a few things happen:

  1. There's a clear cut best power.
  2. The choices start to look the same - This means we're splitting hairs so fine we that the changes were presenting are beyond the patient's threshold for seeing a difference.
  3. The flip-flopping begins.  If the answers are telling us "I want more power. No I want less power. No I want more power" we know that, again, we've narrowed the value down to a small range and we can't go any further.

In my humble opinion, the most helpful thing to do while being refracted is to limit your answers to one of three things: Lens one is better, lens two is better, or they look the same. It doesn't matter if the one you're choosing is still blurry, sometimes that's the case. We just need to know which is the clear-er of the two. The primary goal of everyone involved is to clear things up, but that might not happen until the end of the process. When we ask which is better ("one or two") we're trying to find out which direction we need to move our power - up or down, or which way to twist our axis, left or right - to reach our objective of getting the best possible vision. Most other information besides "one", "two", or "the same" is extraneous. "Choice one is better, but it's blurry" doesn't really tell us anything beyond the fact that we need to move the power in the direction of choice one. 

Optometrists learn to refract pretty quickly. Within a couple years we've done thousands of refractions and are quite proficient at it. We start to feel like finely tuned machines - if you say "one" we reflexively make our change in the instrument and ask our next question.

One thing that throws me off is when people don't tell me which choice they like, but when they tell me which one they don't like. On the surface it the distinction between the two seems insignificant. If there's only two choices, and you know which one is worse, then the other one is better, correct?

I was trying to figure out why this seemingly little thing seems to interrupt my flow so much. I was looking for something to compare it to, and I thought of another situation where you might have to make frequent choices between two options : Getting directions while driving. Sure, if someone constantly told me to "turn not left" or "turn not right" I could pretty much figure out how to get where I'm going but, the way my brain is wired, being told "turn right" or "turn left" is a lot easier for my brain to process.

All that being said, a good refractionist has to be flexible. To the best of our ability we need to educate our patients how to respond to our questions, and we need to alleviate their stressors and fears while being refracted. However, sometimes we just have to parse our patient's responses to the best of our ability and just do our best.


Posted
AuthorTodd Zarwell

In my last post I wrote about how I use Siri, Reminders, and an app called AnyList to manage grocery lists. I feel that this works extremely well for adding a few individual grocery list items on the fly.

However, I find it to be a cumbersome process when I'm trying to add more than a few grocery list items at once. For example, when I have a recipe for tonight's meal and I need to pick up most of the ingredients, using Siri to add each item to my list is a bit time consuming. In this case I'd rather type each ingredient into AnyList (they have a nice autocomplete feature, and it remembers your favorites), but it's still a little slow for my taste.

After getting our first iPhones, my wife and I had managed recipes in Evernote. It satisfied our needs well. If we found a recipe on the web we'd just use the web clipper and import it into Evernote. If we liked grandma's potato dish at thanksgiving we'd just use the camera to take a picture of her recipe and it would be saved for posterity. And, since we share an Evernote account we'd both have access to whatever was in there, whether we were at home cooking or at the grocery store buying the building blocks for our culinary masterpieces. 

So, Evernote was working just fine. But, I can never leave well enough alone, so when I read about The best recipe manager for iPhone on thesweetsetup.com I decided I'd give Paprika a try.  And I liked it.

Since that article summarizes Paprika so well I won't do that here, but I will point out some of my favorite features:

  • Importing recipes from websites extremely easy. It's nearly automatic if you're browsing a popular food site (eg, allrecipes, foodnetwork, epicurious, etc), and with minimal effort you can import recipes from more obscure sites.
  • All recipes are formatted with the same way. That consistency is kinda nice.
  • Everything is synced between our phones, iPads, and desktops (this does require buying mobile and desktop versions of the app).
  • And, coming to the point of this post, it's really helpful for grocery lists.

As I said in my last post, I like to use Siri and an app called AnyList to manage my grocery lists. Paprika works well with my system by letting me export ingredients from a recipe into a Reminder list, which then gets automatically sent to AnyList. To make this work you first need to go to Paprika's settings, select the Reminders Export Options, and set your list name to the one you use in the Reminders app (in my case it's named "Grocery").

 

Then, when you're looking at a recipe, click the shopping cart icon.

This will bring up a list of ingredients from the recipe. Leave the ones you need checked, and uncheck the ones you already have. Then click the "add" button. This will maintain a grocery list in Paprika (which actually could be enough for a lot of people's needs).

 

To work with my Reminders / AnyList system, I next go to the grocery list part of Paprika, hit the export icon in the lower right hand side of the screen, and choose the "Export to Reminders" option.

 

 

IMG_9228.png

 

 

 

This will send the list to my grocery list in Reminders, and it'll ultimately end up in AnyList (see my previous post for more about that).

One thing to note - exporting your grocery list to Reminders won't affect the list in Paprika. As a consequence, the next time you add a recipe's ingredients to your list the old ingredients will still be there, which you probably won't want if you've already bought those items and made that meal. To avoid this, I'd recommend clearing the grocery list after your export (this can be going through the same steps above but choosing the "Clear Grocery List" option).

As I type this out step by step I feel that it sounds really complicated. It really isn't, as this video will hopefully demonstrate.

 

So, whaddaya think? How go you manage recipes and grocery lists?

Posted
AuthorTodd Zarwell
10 CommentsPost a comment

I like Siri. It's far, far from perfect, and I think people hold it to a very high standard (it's easy to do when your basis for comparison is human intelligence). But there is a limited set of things that it does do well, and I find those things extremely helpful.

IMG_0088.jpg

Set a timer for 10 minutes (so I can kick the kids off my iPad).

Remind me to bring Drew's snowpants to school on Monday morning at 6:30.

Remind to place that order when I get to work.

Basically, it supplements my brain and helps me remember things I'm almost certain to forget.

Perhaps my biggest use of Siri, however, is managing grocery lists. This helps me in innumerable ways, which I will now outline. In a numbered list.

  1. I never forget to add something to a list. I use the last of the peanut butter, I pull out my iPhone, hold down the home button, and say "add peanut butter to my grocery list". Bam. Not gonna forget the PB.
  2. I always know what I need when I'm at the grocery store. I never have that nagging feeling that I'm forgetting something, and I never get home and kick myself for neglecting to pick something up. And my six year old never has to reprimand me for forgetting to pick up his apples.
  3. I always know what my wife needs at the grocery store, and she knows what I need. I might just stop in to buy donuts on a Sunday morning, but a quick look at my phone let's me know that Lisa just used the last of the garlic powder and I might as well grab that too.

Now, there's a few things that make this easier.

First of all, I have a list that's named "grocery". To do this, open the reminders and hit the "+" button to make a new list. If you open the reminders app and don't see the "+" button you might need to tap the area at the bottom of the screen that looks like a bunch of stacked index cards.

  If you're looking at a list, click the bottom of the screen to see all your lists - and get the option to create more lists.

If you're looking at a list, click the bottom of the screen to see all your lists - and get the option to create more lists.

 

To share with your spouse, go into your newly created grocery list and click the edit button. Then click the Sharing opinion, then Add person.., and find the person upon whom you'll bestow your list sharing privileges.

 

 

 

 

This all works very well, but we decided to take it to another level with a third party app called AnyList.  AnyList has a number of nice features, including:

  1. It separates your grocery list into groups such as "produce" or "meat" or "dairy". That way, when you walk through the grocery store, you can get everything you need in each section without having to repeatedly zigzag  back and forth throughout the whole store.
  2. It also has the option to share with a spouse and sync with desktop and browser apps.
  3. And, for my favorite, it can import lists from the built in Reminders app. In my case, from my Grocery list. This has the awesome result of letting you use Siri to populate your AnyList list. To import from Reminders, go to AnyList's settings and turn the "Reminder's Import" option on. Just make sure the name of your list in AnyList matches the name in Reminders (in my case they're both named "Grocery")

 

By the way, the things I'm describing here don't have to be limited to groceries. I've followed this exact same process to make a Target list, a Home Depot list, and a Costco list.  

Here's a short video on how I use the lists. The one thing that I don't include is perhaps the most useful feature of all: The fact that all these additions are almost immediately present on my wife's phone as well.

 

In my next post I'd like to talk about something very closely related to groceries: recipes. Stay tuned.

Posted
AuthorTodd Zarwell
CategoriesTech
7 CommentsPost a comment
old_car

Back to the Future is another movie that I have a lot of fond memories of. Who wouldn't love a mad scientist, a time traveling Delorean, and a skateboarding Alex P Keaton?

old_tv

2015 is Back to the Future's 30th anniversary. Marty McFly started off in 1985 and time travelled back 30 years to 1955. In the second movie, he went 30 years the other way, from 1985 to 2015. I've been seeing a lot of articles looking at the predictions made in Back to the Future II, such as hoverboards, self-lacing tennis shoes, and flying cars.

While this is funny, there's something else that I can't stop thinking about. When I saw B2tF in 1985 the scenes from 1955 looks soooo ancient to my 13 year old self. Tiny little TV screens. Old fashioned cars. Weird, stuffy looking clothes. 

It was pretty obvious to me that a lot had changed in 30 years, from 17 years before I was born and the 13 years I'd been alive.

On the other hand, from my perspective, it seems that very little has changed in the 30 years since my 13th birthday.

 

Or has it?

boombox
madonna
big phone



Posted
AuthorTodd Zarwell