Source Code Support

Sometimes I need to make really tough decisions.  It isn’t a matter of wanting to make the decision—the need to make the decision is thrust upon me. The topic of this post is source code support in the form of reader uploads. The topic of just how far I need to support book source code has come up before in conversations with readers. For example, in the Source Code Download Issues post, I discuss problems that readers have had in obtaining source code for my books in the past. The issue addressed in this post is files that are removed from archive (.ZIP) files by applications such as firewalls. In some rare cases, files are missing from the download and the reader looks to me to solve the problem. A few readers have gone so far as to say that I really need to provide CDs with the source code on them and mail those disks out free of charge as part of supporting the book. Unfortunately, supporting the books in this way is well beyond my ability. I could easily go bankrupt providing this level of support.

Up until now, I’ve been willing to send source code to a reader who needs it using e-mail unless the book is on my unsupported list. This past month has been especially hectic with reader requests for source code uploads (well over a hundred of them). In some cases, the books in question are ten or more years old, which means I must look the book up in my archives and determine whether the source code is even available. Once I make that determination, I copy the source from the archive and send it to the reader in one or more e-mails. Some of the source code files are 20 MB or so in size and many reader e-mail accounts won’t accept a file that size, so I have to break the file down into pieces and send multiple e-mails to the reader—a time-consuming and error prone task. This past week I went through several problematic uploads and finally gave up trying to support the reader in a number of cases. Nothing I would do would allow the reader to receive the file using e-mail.

I’ve thought about making the source available on my Web site, but that approach hasn’t worked well in the past because readers will often complain they can’t find the source or that the source on the Web site is corrupted (or any number of other issues). Of course, there are also costs associated with online storage for source code for 89 books. After a lot of thought, I have decided that trying to support a book’s source code in this manner won’t work either.

With this in mind, I’ve decided that you’ll need to rely on the publisher’s site for downloading any source code associated with a book, unless the publisher provides a CD for the book. If there is a source code CD, then you need to follow the procedure described in my Obtaining Replacements for Broken Media post to obtain a new CD. I didn’t come to this decision easily because I prefer to provide the fullest possible level of support for my books whenever possible. The issue is the time required to provide the support. On some days it has gotten to the point where a good part of my day is spent looking for resources that readers need and not getting much else accomplished.

When a publisher decides that it’s no longer feasible to provide download support for a book, the source code for that book will become unavailable. In fact, I’ll likely add the book to my unsupported list. It wasn’t an easy decision, but I had to make it because the e-mail support has gotten to the point of affecting the support I can provide to readers for other needs. Please let me know about any concerns you have about this new policy at If someone has a really good solution for this problem—one in which I can provide long term source code support without incurring huge monetary or time issues, I’ll provide an updated post. Thank you for your continued support of my books.


Java 7 Released for General Use

Developers have been using Java 7 for quite some time now for creating and testing applications with additional functionality. However, until May 2nd, Java 7 wasn’t made generally available for users. Oracle plans to upgrade the entire user base at this point, so now is the time to start thinking about deploying those applications you’ve been developing. Just in case you’re new to Java programming, you can use my latest book, Java eLearning Kit for Dummies to learn how to work with Java quickly using the Windows, Linux, or Macintosh operating systems. The accompanying CD provides a fully interactive environment that includes impromptu tests and animation, to make learning a lot more fun. You can read the Java eLearning Kit for Dummies Manuscript Finished to get more information about the book. Be sure to contact me at if you have any questions about this new offering.

This new version of Java has a lot to offer. For example, it’s the first time Oracle has provided both the Java Development Kit (JDK) and JavaFX Software Development Kit (SDK) for the Macintosh OS X. You can find a quick overview of why you should upgrade to Java 7 on the Oracle site. A more complete, developer friendly, list of changes appears on the OpenJDK site. Long time Java developers say there is nothing earth shattering in the upgrade, but there are a wealth of welcome enhancements. Just which enhancement is most important depends on which developer you talk to. Java eLearning Kit for Dummies discusses which of these enhancements are most important to beginning developers—those targeted by my book. I would say that the feature that intrigues me most is the improved support for dynamic languages—a feature I may try out soon. You can find the official Oracle feature list on their site at

Of course, now that Java 7 is out everyone is already starting to discuss Java 8. (In fact, some people are already talking about Java 9.) As with any new project, there are a lot of ideas and vaporware right now, with a true lack of any substance. You can be sure that I’ll keep you updated on the progress of Java 8. In the meantime, if you choose to get my book, I’d love to hear from you. Let me know what you like and what you’d like to see improved in the next edition. However, whatever you do, don’t keep silent if you have a question. I really do want to help you get the most out of everything I write.


Considering the Performance Triangle

It has been at least ten years ago now that I was reading an article and considering its ramifications in light of my current book. The name of the article has fallen by the wayside over the years, but the book was entitled, “.NET Development Security Solutions.” I was considering two important questions in the creation of my book:


  • Is it possible to create a truly secure application?
  • What is the actual cost of a secure application?

They’re essential questions and the answers to them continue to have an effect on my book writing efforts. The answer to the first question is yes—it’s possible to write a truly secure application. However, in order to obtain such an application, it can’t have any connectivity to anything. The second that an application has any connectivity, whatsoever, with anything else, it becomes contaminated by that connection. Don’t just think about users entering incorrect data here. The data on a hard drive can be corrupted, as can the memory used to hold the application. For that matter, someone could probably make the argument that it’s possible to create serious problems in the processor. My readers are a truly ingenious lot, so I’m sure if I gave you enough time, you could come up with an application that has no connectivity whatsoever with anything, but the usefulness of such an application is debatable. What good is an application with no inputs or outputs? I came to the conclusion, after quite a few hours of thought, that the most secure application in the world does nothing at all, interacts with nothing at all, and is pretty much worthless.

As I considered this security dilemma, it occurred to me that a truly secure application has no speed and is completely unreliable, given that it doesn’t do anything at all. As I worked through this book, I eventually came up with a performance triangle, where these sides are based on:


  • Security: The ability of the application to prevent damage to the application data, application code, the host system, and any connected systems.
  • Reliability: The accessibility of the application by the user. A reliable application is available for use at all times and makes every possible feature available to the user in a manner that precludes damage to the data or the system.
  • Speed: The pace at which an application can accept input, perform tasks, and provide output.

In order to increase speed, you must remove code that provides security and reliability. (I’m assuming here that the code is already as efficient as you can make it.) Likewise, when adding security features, you decrease
application availability in some situations and also add code that affects application speed. Making code reliable (which infers accessibility) reduces security and speed. The performance triangle has worked out for me for many years now as the basis for thinking about how application code actually works and the tradeoffs I must consider while writing it.

The use of the performance triangle isn’t based on language or platform. Whether you work on a Macintosh, Linux system, or Windows, you need to consider the effects of the performance triangle on your application irregardless of the host system. Likewise, language choice doesn’t affect the performance triangle, except that some languages provide more features that enhance a particular triangle element more than others. For example, C++ provides a significant speed advantage over many applications, but at a known cost to both security and reliability because the programmer is made responsible to adding the required safeguards. C# provides more safeguards, which enhances reliability, but at the cost of speed.

A problem in the current application design environment is that developers often focus on one element of the triangle (normally speed or security) at the cost of the other two. In order to build an application that performs well in a specific situation, the developer must consider the ramifications of all three triangle elements—an incredibly difficult task in some situations.

Even the questions that developers ask about the three elements of the performance triangle are often flawed. For example, many developers equate reliability with up time, but up time is only part of the reliability picture. An application that produces inconsistent results, denies required access to the user, or damages data in some way is unreliable. Robust applications explore all of the elements fully.

In the end, developers are usually faced with an imperfect scenario. Conflicting requirements and real world necessities often serve to weaken a good application design so that the developer must carefully craft the application to meet the maximum number of these requirements with the fewest possible faults. The situation comes down to one of weighing risk. A developer needs to ask which issue is most likely to cause the most harm and then write code that addresses that issue.

What sorts of design issues are you facing when developing applications? Do you use something like the performance triangle to help you consider the risks incurred when choosing one course over another in application development? Let me know your thoughts at


Java eLearning Kit for Dummies Manuscript Finished

Nothing excites me more than to complete the manuscript for another book. I actually completed the Java eLearning Kit for Dummies manuscript last week Wednesday, but there are always last minute things to do. Today I’m considering the manuscript for book number 89 done. At this point, I’m working on Author Review (AR)—a process where I interact with the various editors. I answer any questions they might have about my book’s content and also check their edits to make sure no mistakes have been introduced.

This book is really exciting for a number of reasons. First of all, it’s a carefully crafted tutorial. Even if you’re a complete novice, you should be able to use this book. Every term is defined, the code is fully documented, and you shouldn’t run into any unpleasant surprises where the author assumes that you know something that you don’t. In fact, this book had a total of 15 beta readers involved in reviewing the material, in addition to my ever faithful editors. Of course, being precise and careful doesn’t mean you won’t have questions and I always welcome your questions about any book I write.

Second, this book is intended for use on multiple platforms. It doesn’t matter whether you work on a Linux, Macintosh, or Windows machine—you can use this book to learn how to write basic Java applications. Creating a book that works on so many platforms is exhilarating in the extreme. I couldn’t have done it without the support of my beta readers and I wish to thank every one of them publicly. You’ll find the names of the beta readers who didn’t mind me mentioning them in the Acknowledgements when the book is released.

Third, this book is the first I’ve ever written that comes with an interactive CD. You don’t really have to read anything if you don’t want. I estimate that you can get upwards of 85% of the content of the book simply by listening to the CD. Of course, books on tape have been providing this service for a long time. The difference with this book is that the CD is interactive. Not only will you hear the text, but you’ll see animations demonstrating the various things you need to know about Java. A number of different quiz types will test your knowledge of Java as you progress through the book. Finally, you’ll work through hands on exercises in order to build your skills. In short, this book includes everything that some of the newer interactive books include, but in a form that works on any computer system.

It’s important for any buyer to understand that this book truly is intended for novice readers. You aren’t going to get an intense Java workout by reading this book. In fact, here is a list of the lessons in the book:


  • Lesson 1: Starting With Java
  • Lesson 2: Using Primitive Variables
  • Lesson 3: Using Object Variables
  • Lesson 4: Formatting Variable Content
  • Lesson 5: Working with Operators
  • Lesson 6: Working with Conditional Statements
  • Lesson 7: Repeating Tasks Using Loops
  • Lesson 8: Handling Errors
  • Lesson 9: Creating and Using Classes
  • Lesson 10: Accessing Data Sets Using Arrays and Collections
  • Lesson 11: Performing Advanced String Manipulation
  • Lesson 12: Interacting with Files
  • Lesson 13: Manipulating XML Data

Nothing here is earth shattering, but you do get a good basic knowledge of Java. By the time you’re finished, you’ll know enough to move on to the harder to understand tutorials you find in books and online. In order to demonstrate all of the techniques in these topics, you’ll find 101 fully documented examples. Each one is designed for you to work through and interact with so that you fully understand precisely how Java works on your platform.

I’ll be working on the CD for the next while. As soon as it’s finished, I’ll provide you with an update about the CD content. For example, I’ll let you know a bit more about the kinds of exams I’m providing. Let me know if you have any questions about my new book at


Sending Comments on My Books

I regularly receive a stack of e-mail about my books. Readers question everything and it makes me happy to see that they’re reviewing my books so closely. It means that I’m accomplishing my principle goal, helping you understand computers in every possible way so that you can be more productive and accomplish tasks with less effort. When I make something easier for someone and they tell me about it, the grin extends from one side of my face to another. It really makes my day.

Some readers are still asking me if it’s OK to send me comments. I definitely want to see any constructive comment that you have. Anything that helps me understand your needs better or corrects errors in my writing makes it possible for me to write better books. As I mentioned in my Contact Me, Please!, I really do want to hear from you. The main element that I need to obtain a usable comment is that it’s constructive. A comment that says, “This book really stinks!” doesn’t tell me anything. Here are some of the things you can do to create a constructive comment:


  • What book are you reading?
  • Which page contains the error?
  • What do you view as an error on that page?
  • How would you fix the error?
  • What sort of system are you running?
  • Are you using the correct version of the software (the same version that appears in the book)?
  • When did you encounter the problem?

The more information you provide, the easier it is for me to understand the issue and provide you with feedback. In many cases, I’ll upload the fix to my blog so that everyone can benefit from the response (so be sure you keep an eye on my blog for new entries). I work hard to ensure that my books are as error free as possible, but everyone makes mistakes. Also remember that sometimes mitigating factors, such as differences in software versions or anticipated hardware, make it appear that there is an error in the book when you’re really looking at a different in environment. Help me provide you with better books—send me comments!

There are a few things that I won’t do for you. I won’t help you pass an exam at school. Your learning experience is important to me, which means that I want you to continue your education by working through the instruction on your own. I also don’t provide free consulting. This means I won’t check the code that you created on your own for errors. I’ll help you with any book-specific question, but I draw the line at that point. Let me know if you have any input or insights on my books at


Obtaining Replacements for Broken Media

A number of my books, including C++ All-In-One Desk Reference For Dummies and Java eLearning Kit for Dummies, come with some sort of media. As hard as the publishers try, it isn’t always possible to ensure that you receive this media in pristine condition. If you’re buying the book at a bookstore, make sure you check the media before you check out and get another copy of the book if you find that it’s broken (make sure the bookstore staff know that the media is broken so they can return the book for another copy).

With the demise of the larger bookstores, most of my readers are buying their books online today, which means you can’t look at the media when you’re browsing the shelves. If you buy from Amazon, make sure you return the book and get a new copy and let them know that the reason for the return is the broken media. Amazon will send you a new copy and they’ll return the copy with the broken media to the publisher.

Unfortunately, the book vendor may not always be very helpful or you might get the book as a gift and not be able to easily return it. In these situations, contact the publisher for a replacement. For example, if you have one of my Dummies books that includes media, you can contact the publisher, Wiley, at for a replacement.

You know that I make it a top priority to help my readers with book-related whenever I can. In fact, the major purpose of the Technical category of this blog is to provide you with better service. This is unfortunately, one of the few situations where I can’t provide you with assistance, no matter how much I’d like to do so. I don’t have the resources required to create copies of the media for you and send it your way. If you do encounter problems reaching the publisher, please let me know and I’ll be more than happy to try to help you. As always, contact me at with any thoughts or concerns.


Beta Readers Required for a Java Book

I’m just starting a new book on Java. This book is meant for the beginner. I’m not assuming you’ve written one line of code in your entire life. The book content does assume that you’re at least familiar with your hardware and operating system, and that you’ve used some simple applications, such as a text editor. I’m really excited about this book because it uses some new forms of media to present the information to you. It’s not just a book, but an entire training course. This is going to part of the Dummies eLearning Kit series (see Windows 7 eLearning Kit as an example).

Naturally I want this book to be as perfect as I can make it. However, as I’ve pointed out in my Errors in Writing post, the more eyes I can get to look at my manuscript, the better. That’s where you come in. Beta readers provide the extra sets of eyes needed to turn a good book into a great book. Your input will affect everyone else who reads this book!

This isn’t just a Windows book either (although I’ll be including Windows as one of the operating systems). I’ll be working with Linux, Solaris, and Mac readers as well, so I really need a lot of eyes look at this book. As always, beta readers who send me constructive comments for at least three chapters will receive a free copy of the book. They’ll also see their name prominently displayed in the book Acknowledgments.

I’ll be turning in the first chapter soon, but there is still plenty of time to get going on this book. If you want to participate in this book project, just contact me at for all of the details. Anyone who has always wanted to discover the joys of programming in Java, a language with fantastic cross-platform support, will want to read this book. Get in on the ground floor and make a difference! No prior experience required! You absolutely don’t need to be a geek to get involved in this project .