Jeff Friesen is a freelance tutor and software developer with an emphasis on Java and mobile technologies. In addition to writing Java and Android books for Apress, Jeff has written numerous articles on Java and other technologies for SitePoint, InformIT, JavaWorld, java.net, and DevSource.

Jeff's articles

  1. How to Present Code Listings on Kindle Devices: 3 Solutions

    Amazon’s Kindle e-readers are great for presenting fiction. However, they’re problematic when displaying technical content. One problem is that code listings often look terrible, causing many developers to shy away from using Kindle as a distribution medium.

    In this article, I first review the problem of poorly formatted code listings. I then offer three strategies for presenting nicely formatted code. I rely on the Kindle Previewer’s e-reader simulators to show results.

    First: A Note on PDFs

    Instead of creating a native e-book, you could create a PDF that all but the oldest Kindles can display. However, there’s a problem with PDFs: Although code listings and other content are nicely formatted, PDFs are hard to read. Either the font is too small when a PDF page fits completely on the screen or a larger font is required that necessitates excessive horizontal scrolling.

  2. Don’t Fear the Evil Twins (the == and != Operators)

    JavaScript developer Douglas Crockford has referred to JavaScript’s == and != operators as evil twins that should be avoided. However, once you understand them, these operators aren’t that bad and can actually be useful. This article examines == and !=, explains how they work, and helps you get to know them better. The Problematic == […]

  3. Augmenting JavaScript Core Objects Revisited

    My recent Augmenting JavaScript Core Objects article showed how to introduce new properties and methods to JavaScript’s Array, Boolean, Date, Math, Number, and String core objects. I followed in the tradition of other articles and blog posts, including those listed below, that show how to extend these core objects with new capabilities: Extend Math.round, Math.ceil […]

  4. Augmenting JavaScript Core Objects

    JavaScript defines several objects that are part of its core: Array, Boolean, Date, Function, Math, Number, RegExp, and String. Each object extends Object, inheriting and defining its own properties and methods. I’ve occasionally needed to augment these core objects with new properties and methods and have created a library with these enhancements. In this article, […]

  5. My First Kindle Book: A Case Study

    For several years, I’ve thought about creating and publishing a Kindle book. However, other projects came first and I shelved this idea until recently. A couple of months ago, I bought my first Kindle e-reader device, which pushed me over the edge into creating my first Kindle book, which I tested on the device and […]

  6. Getting Started with Android Library Projects, Part 2

    This entry is part 2 of 3 in the series Getting Started with Android Library Projects

    This entry is part 2 of 3 in the series Getting Started with Android Library ProjectsGoogle offers Android library projects as a way to manage reusable code. In the first part of this three-part series on Android library projects, I introduced you to library project fundamentals. In this article, I move from theory to practicality […]

  7. Happy Holidays from CoffeeScript

    The holidays are upon us. To help you get into the mood, I’ve created an HTML5/CoffeeScript application that presents a festive and animated scene (with background music). Although this application is frivolous, it demonstrates HTML5 and CoffeeScript concepts that you might find useful in other projects. This article first introduces you to the application, presenting […]

  8. Gaming: Battle on the High Seas, Part 5

    This entry is part 5 of 5 in the series Battle on the High Seas

    This entry is part 5 of 5 in the series Battle on the High SeasSeaBattle is an HTML5 game that demonstrates the usefulness of HTML5’s Audio, Canvas, and Web Storage APIs. This article completes our five-part gaming series covering SeaBattle by exploring its draw() and allResourcesLoaded() functions. It also reviews these APIs, by discussing game […]

  9. Gaming: Battle on the High Seas, Part 4

    This entry is part 4 of 5 in the series Battle on the High Seas

    This entry is part 4 of 5 in the series Battle on the High SeasLast week, our gaming series dug deeper into SeaBattle’s architecture by discussing the SeaBattle object’s update() function along with its makeShip(x, y, bound1, bound2) constructor. This is the fourth article in our five-part series, and continues to explore this architecture by […]

  10. Gaming: Battle on the High Seas, Part 3

    This entry is part 3 of 5 in the series Battle on the High Seas

    This entry is part 3 of 5 in the series Battle on the High SeasLast Friday, in our series on gaming, I started to explore SeaBattle’s architecture by focusing on the SeaBattle object’s init(width, height) function along with the related rnd(limit) and supports_html5_storage() helper functions. This article, part three of five, continues to explore game […]

  11. Gaming: Battle on the High Seas, Part 2

    This entry is part 2 of 5 in the series Battle on the High Seas

    This entry is part 2 of 5 in the series Battle on the High SeasLast week, I introduced an HTML5 game known as SeaBattle, as a demonstration of what you can accomplish with HTML5’s Audio, Canvas, and Web Storage APIs. I then showed you how to embed this game in a Web page, and overviewed […]

  12. Gaming: Battle on the High Seas, Part 1

    This entry is part 1 of 5 in the series Battle on the High Seas

    This entry is part 1 of 5 in the series Battle on the High SeasWeb browsers supporting HTML5’s Audio, Canvas, and Web Storage APIs are an exciting gaming platform. These APIs can be used to create interesting games with money-making potential. As a demonstration, this article begins a five-part HTML5 game development series focused on […]

  13. Getting Started With Corona: Building Your First Corona App

    Earlier, in Getting Started With Corona: Building Apps for Multiple Platforms and Markets Simultaneously, we covered the benefits of developing with Corona, as well as installing and configuring the SDK. If you haven’t read it yet, starting at the beginning will give you a much more thorough understanding of Corona. Now, let’s move on to exploring […]

  14. Add a Web Console to Your Toolbox, Part 2

    A console is a software artifact for reading line-oriented textual input from the keyboard and writing line-oriented textual output to the screen. Part 1 of this two-part series introduced you to a console library for embedding a console in a web page, and demonstrated the usefulness of such a console via a browser shell. Part 2 shows […]