Tuesday, July 31, 2018

Latest book: Mobile App Programming for Android

This week I'm putting the final touches on my latest zyBook: Mobile App Programming. If you aren't familiar with zyBooks, they are online books that include animations and interactive questions. (I co-authored the Web Programming zyBook a few years ago and use it in my web development courses.)

Mobile App Programming shows how to develop Android apps using Java. The book contains several complete Android apps: Pizza Party, Lights Out, Dice Roller, The Band Database, and others.

Below is a summary of the Mobile App Programming chapters. Contact sales@zybooks.com if you'd like to be alerted when the zyBook is ready for evaluation. You can beta test it this fall if you'd like.

  1. Introduction: Android platform, Android Studio, app resources, debugging
  2. Layouts and Widgets: Various layouts, widgets, event handling, styles and themes
  3. Activities and Intents: Activity lifecycle, restoring state, explicit and implicit intents
  4. Menus, Dialogs, and Touch: app bar, dialogs, context menus, touch and gestures
  5. Fragments: Creating fragments, fragment lifecycle, fragment and activity interaction, RecyclerView
  6. Working with Data: Shared preferences, file I/O, SQLite, settings, web APIs, Volley, Room
  7. Running Background Tasks: Background threads, AsyncTask, Handlers, Loopers, services, notifications
  8. Graphics, Animation, and Sound: Shape drawables, animation drawables, property animations, custom views, playing sounds, SurfaceView
  9. Sensors, Camera, and Location: Motion sensors, taking photos, Google Play services, Google Maps
  10. Testing: TDD, unit tests, JUnit, integration tests, Espresso, UI tests

A big thank you to the zyBook staff that helped in producing this book: Roman, Kenny, Liz, Evan, the college interns that proofread the text, and tech support.

zyBooks don't usually have a dedication page, but I dedicate this book to my wife Becky who encouraged me these past 18 months while I worked on my book and my boys Ethan and Braden who love to play my Android apps. I love you guys!

Wednesday, July 25, 2018

Kids Coding Adventures 2018

Today was the final day of Kids Coding Adventures 2018, a coding camp that I've directed for the past three years at Harding University.  23 kids attended, who ranged from 2nd thru 4th grade (a few 5th graders snuck in). I had two fantastic helpers from Harding Academy (Mason and Anna) as well as my oldest son.

In previous years we used Tynker, but this year we used Microsoft's MakeCode to program Minecraft mods using blocks or JavaScript. This required us to use Minecraft Education Edition, which is a special version of Minecraft that interacts with programming environments like MakeCode.

A few of my observations, in no particular order:

  • Kids absolutely love Minecraft, so they were really excited about camp. But loving Minecraft is a double-edged sword: It's challenging to keep kids on task when they can easily start "playing" Minecraft.
  • Minecraft Education Edition is only $5, which is really inexpensive. And it's easy to install. However, each user must have a special Office 365 account, which is a headache for our IT guys to setup.
  • Using MakeCode was challenging, especially for the 2nd graders. You must flip back and forth between the MakeCode window and Minecraft, and flip back and forth between chat and regular mode in Minecraft.
  • Two major usability problems with MakeCode:
    1. The responsiveness is pretty bad. I saw frustrated kids clicking multiple times on a button that should have immediately responded, but it would take seconds to process the first click.
    2. When you mistype a chat command, there's no feedback that the command was mistyped. This happens more often than you might imagine.
  • I discovered three problems in MakeCode the first day: a tutorial had erroneous logic, and MakeCode had 2 bugs, one of which would completely erase all your code. (I've reported all the issues to Microsoft.)
  • Most kids struggled more than I thought they would with creating objects using the "fill with" command. We focused on using only the x and y axis, but it was still tough for them to convert a simple picture into code. Next time I'll spend more time doing simple exercises to get these ideas across.

Saturday, July 22, 2017

That's so Bellingham!

I've spent the past 5 weeks in Bellingham, Washington, working at Faithlife on revamping the Logo Bible app for Android. My family is here with me, and in another week we'll be heading back to Searcy.

We've really enjoyed our time in the northwest. Bellingham is located near the Pacific and just 20 miles south of Canada. We've spent most of our weekends traveling to nearby destinations like Mount Baker, Seattle, Vancouver, and Olympic National Park. Below are some landscape photos I took at Olympic just to give you a sense of the incredible beauty in this area.

Working at Faithlife has been a huge blessing. I've worked with a very talented group of guys who have taught me a lot. I'm especially thankful to David Mitchell, an alumnus of Harding's computer science dept, who arranged for me to spend 6 weeks here as a visiting developer.

I can't say enough positive things about Faithlife. They have a company culture that encourages excellence, and their mission is to service the Church. The vibe I get from the employees is very positive; everyone seems to really enjoy their work. I was even able to have coffee with the CEO, Bob Pritchett, who eagerly desires to meet one-on-one with all his employees, even the interns!

Speaking of interns, shout out to Stephen Hoffmann, one of our current CS students, who is doing a summer internship at Faithlife. Stephen competed in a company-wide hackathon yesterday, and his team was awarded the "Awesomeness Award" for developing a live-streaming capability that churches could use in during worship!

What am I going to miss about this place?

  • The fantastic weather, which at this time of the year is lots of sun, low humidity, and temperatures during the day around 70 degrees.
  • My work. I enjoy doing software development and working with a great group of guys. (But I also really enjoy teaching... it's my dream job.)
  • The church. We've worshiped with a local church and made some great connections. We are thankful for those who invited us into their homes.
  • The pro-environment focus. People here are very conscientious about treating the planet well. You won't see a single plastic bag at the grocery store, and every restaurant allows you to recycle your used plates, forks, etc.
  • Walking to work! We live only a block away from work, and it's so nice to be able to come home for lunch. Many days I never even get into an automobile!

What am I not going to miss? Hearing loud/drunk people leaving the bar at 2am. Living downtown is cool for 6 weeks, but I'm thankful to be going back to a house in a quiet neighborhood! :-)

Thursday, May 11, 2017

It's your fault you didn't get that internship (and how to turn things around)

Summer has began, and many of my students are off to exciting places to do summer internships. However, some of my students applied to several internships but didn't get a single offer. Why not? Are there just not enough internships to go around?

If you want to know why you didn't get an internship, you need to understand what happened when you applied.

Your potential boss (or likely a designated person in charge of internships who we'll call the "recruiter") probably received a number of resumes of students interested in the internship. The recruiter briefly scanned the resumes for promising candidates who appeared to do good school work and did projects outside of the classroom. If you haven't put in the effort in your school work, you likely didn't make this first cut. If all you are relying on is just your school work to get noticed, you may also have not made the cut.

In some cases, the recruiter may have accepted your resume, even if it wasn't necessarily stellar. But the recruiter wanted a little more information about you, so they called a few of your professors.

What could I say when I was asked, "Do you think so-and-so would make a good employee?" As I reflect on the previous semester when you were in my class...
  • You slept in class or acted completely uninterested.
  • You turned in late work repeatedly and always had an excuse.
  • Your projects were turned in with obvious flaws.
  • You never asked me for help or even tried to form a relationship with me outside of class when given opportunities to.
  • You rarely replied to my emails or told me you never check your email.
I wish I could have said, "Yes! I'd hire them in a second!" Instead, I had to be honest and tell the recruiter what it was like having you as a student. Does the recruiter want to pay someone who doesn't do their work on time, always has an excuse, turns in code with bugs, avoids personal interactions with others, and is generally uncommunicative?

Here's my point: It's your fault you didn't get than internship. But it doesn't have to continue to be this way.
  • Show interest in class and ask questions.
  • Start putting effort into your course work.  Turn in homework and projects that you obviously put considerable effort and time into.
  • Make relationships with the faculty. Stop by their office for help when you are struggling or even just to say "hi".
  • Take ownership for your mistakes and avoid making excuses.
  • Reply to your email.  I'm not sending you email just for fun.
  • Work on side projects just for fun.  Or at least for professional development.
  • Have a good attitude!
You don't have to be a 4.0 student to get an internship.  You just need to show that you are willing to work, pleasant to be around, and take responsibility for yourself.

I want all my students to get internships next summer!

Thursday, July 28, 2016

Web Programming book and kids' coding camp

My Sabbatical plans changed somewhat last spring, and I ended up putting all of my time into writing the "Web Programming" book to be released in beta this fall by zyBooks. If you are not familiar with zyBooks, they are online books that feature animations and interactive questions. Students are much more engaged when interacting with zyBooks than with traditional print books. Plus zyBooks are usually much less expensive.

The "Web Programming" zyBook covers HTTP, HTML, CSS, JavaScript, jQuery, mobile, PHP, Node.js, and databases. It's been a great experience writing the book, and I've learned a lot in the process. I'm finishing the final chapter in the next few weeks. Contact zyBooks if you would like to preview the book.

This week I ran the Kids' Coding Adventures camp for 20 kids in grades 1-3. It was the first coding camp in Searcy for young kids that I'm aware of. We used Tynker, a platform for teaching coding to kids and adults. The kids absolutely loved it!

What would make me want to spend three days with young kids teaching coding? I attended a Logo programming camp in the 3rd grade, and it was like I had discovered an amazing treasure! The camp introduced me to something that would later be my profession. I wanted to provide the same experience for the kids of Searcy. Plus my two sons really wanted me to run the camp, and it's hard to say "no" to such enthusiasm.

The Harding website has a nice write-up about the camp.

Tuesday, January 12, 2016

My Sabbatical

I'm very grateful that Harding has allowed me to take a one semester Sabbatical. I owe a lot of thanks to Gabriel Foust, my colleague who has been working on his Ph.D. at Texas A&M for the past four and a half years and has finally returned to Harding so he can take over my Spring course load. Thanks, Gabe!

My plans for the Spring have been in flux for a while, but they've finally ironed themselves out. I'll be spending a portion of my time writing some book chapters for a Web Development book for a well-known publisher. There is a team of writers for the book, and it will hopefully be available in the Fall. My Web Dev courses will begin using the book in the fall as well.

Additionally I'll be doing some software development for Flatirons Solutions, a company out of Bolder, CO, that I worked with a few summers ago. I'll be exposed to some new technologies that I will hopefully incorporate into my courses here at Harding.

A lot of my students thought I'd be gone this semester, but I plan on being in my office as much as possible and being available, so feel free to stop by and say hello!

Edit 7-28-16

The book ended up being the focus of Sabbatical. The book is called Web Programming and will be available to the general public at the end of 2016 from zyBooks. Topics include: HTTP, HTML5, CSS, JavaScript, mobile, Node.js, PHP, and databases.

Monday, October 05, 2015

20 years ago

It was twenty years ago on this day (October 5, 1995) that my college roommate Jeff Gammel drowned while swimming in Lake Cortez in Hot Springs Village. He was was swimming with a few other guys from Louisiana Tech but got separated from them at one point. When the Tech kids reached the shore and didn't find Jeff, they called the police. Divers found his body the next morning. No one is sure what caused him to drown, but my guess is that he cramped up or something and wasn't able to get to shore in time.

Jeff was in Hot Springs Village for the weekend along with his best friend Brandon Procell to be with the Hot Springs Village church youth group for an area-wide get together. Jeff and Brandon regularly traveled to Hot Springs Village to work as youth ministers for the youth group. In other words, Jeff lost his life while serving others. Although Jeff's death hit us all like a ton of bricks, we knew that he was just doing what his Savior did. And we knew that he had received his reward.

"For whoever wants to save their life will lose it, but whoever loses their life for me will find it." - Matthew 16:25

Below is the article from the Harding University Bison that talked about Jeff's accident and the chapel program the following Monday.