Perfect Love

Perfect love casts out my fear.
Keep your perfect love so near
that I never fear again.
Perfect love for you attain,
‘til my heart with love is filled
and my spirit never chilled.

All around the world I see,
how a perfect love could be,
an answer for mankind’s woes,
when hatred and evil flows,
fueled by fires of doubt and fear,
no one lets the other near.

Open eyes to perfect love,
gift of wonder from above.
A love that gives, never takes,
love that grants others mistakes,
that counts no loss and no gain,
that makes our hearts young again.

Copyright 2012, John Paul Mueller

Is Email Dead?

This is an update of a post that originally appeared on March 4, 2011.

When I originally wrote this post, everyone was proclaiming the death of email, yet here we are 12 years later and I’m still using email to conduct almost all of my business. The original ComputerWorld that I cited describes a company that is moving from email to social media as an exclusive option. However, many current articles like Is email dying as a business communication channel? talk about the demise of email being premature. Currently, I don’t use any of the options mentioned in the ComputerWorld article and don’t have time (or the inclination) to start using them. Don’t get me wrong, social media probably solves problems for some part of the population, it just hasn’t worked out well for me. I can’t see myself outputting tweets about my daily activities and some of the articles I read about Facebook are just plain scary. The company that thinks your right to privacy is irrelevant is facing all sorts of legal problems these days, but it’s entrenched enough that I doubt we’ll see it go away anytime soon.

My main problem with most modern communication solutions is that they’re overly intrusive. I was in the bathroom the other day and a guy was engaging in business while sitting on the commode; he just couldn’t be bothered to turn his cellphone off to take care of personal matters. That’s just one of many scenarios I’d prefer to avoid. There is strong evidence to conclude that our society has become preoccupied with communication, to the detriment of all. Just how many people died last year from texting accidents? According to the The Zebra, texting causes 1.6 billion accidents per year (and the other statistics on the site are even scarier). The National Highway Traffic Safety Administration (NHTSA) logged 3,142 texting-related deaths in 2020. I’m pretty sure I don’t want to talk with someone that badly.

All this said, I did have my first Zoom meeting this year. Except for being able to see the people I was talking with, I just don’t see any reason to use it. Actually, I don’t care what the people I talk to look like as long as they can “lift their end of the log.” Products like Zoom perpetuate bias by promoting impressions based on personal appearance—I consider them dangerous. There is even an issue with the stress and fatigue that using products like Zoom cause as described in On the stress potential of videoconferencing: definition and root causes of Zoom fatigue. All this would be bad enough, but email eliminates issues like people’s accents (given that I’m hard of hearing, accents cause me no end of woe in understanding someone’s conversation). It also provides a paper trail I don’t get with Zoom. So, unless someone is having a serious tantrum, I plan not to revisit Zoom.

I have to admit that in the past 12 years that social media has proven to provide some benefit to business, as described in 22 Benefits of Social Media for Business. As with anything, the disadvantages could outweigh the benefits, as described in 10 disadvantages of social media for business. Here are my personal reasons for choosing email over social media or other options like Zoom:

  • Social media assumes a level of connectivity that I’m simply not willing to allow.
  • Email works better because someone can send me a message and I can handle it later; at my convenience.
  • More importantly, I can handle the email at a time when I’m not distracted by something else.
  • I can provide a thoughtful answer; one that I’ve researched and thought through carefully.
  • Email also provides me with a permanent written record that I can reference later when I have questions about the discussion.
  • Most important to me is that email makes it possible for me to deal with other people without any bias—I don’t care what they look like, what they’re wearing as they type their response to me, where they live, whether they have an accent, or any of a number of other issues that seem to have the world in an uproar today. All I care about is whether they can do the required work.

Personally, I don’t see e-mail as a dead communication technology. If anything, it’s becoming more important to me as I age and my memory becomes less dependable. As far as I’m concerned, the always connected nature of most social media today simply isn’t a good solution if you want to be productive. So, what’s your take on social media? Let me know at [email protected].

Pausing the C++ Example Output

This is an update of a post that originally appeared on December 23, 2013.

A number of readers have written to ask about running the example code in C++ All-In-One for Dummies, 4th Edition. The book shows that the examples pause so you can see the output, yet a few people experience problems getting the example to pause as shown in the book. Let’s take the first book example. When you run the example, you should see a command window similar to the one shown here open.

The paused output of a Code::Blocks example.
The paused output of a Code::Blocks example.

This is how the command window looks in Windows, but if you use some other operating system, you should see something similar. Notice that the output is paused. Pressing any key will cause the window to disappear and the example to end. The purpose of pausing the output is so that you can see the result.

There are two common reasons that people aren’t seeing the output pause. The most common reason is that the example is run in debug mode. Make sure you click Run or choose Build | Run to execute the example. If you click Debug/Continue or choose Debug | Start/Continue instead, the example will execute without pausing and you won’t see the output. Of course, you can always set a breakpoint to get the example to pause, but most people simply want to see the example output which means running the example, rather than debugging the example.

A less common cause is that the project environment is configured incorrectly. Normally the Code::Blocks environment automatically pauses when you run the example. However, it’s possible to set Code::Blocks not to pause. Some readers inadvertently change this setting while exploring the environment. In order to check this setting, choose Project | Properties to display the Project Targets/Options dialog box. Select the Build Targets tab and you see the dialog box shown here.

The Build Targets tab of the Project Properties dialog box contains a Pause When Execution Ends setting.
Changing the default Code::Blocks settings can cause the IDE not to pause the output.

Notice the Pause When Execution Ends option. If this option is cleared, the example won’t pause when you run it. Make sure this option is checked and click OK. The projects that come with the downloadable code all have this setting set up correctly.

Of course, there could always be other reasons why the examples aren’t pausing. Please let me know if you have any problems setting the example output. It’s essential that you be able to see the example output as you follow along in the book to understand how C++ works. Send your queries about this (or any other book-specific) topic to [email protected]. I always want to ensure you have the best possible experience when using my books.

Finding Code::Blocks Tutorials

This is an update of a post that originally appeared on February 10, 2014.

Sometimes it’s hard to know precisely how to cover information in a book because each reader’s needs are different. One reader may be somewhat knowledgeable and not need tutorials, another reader might me a complete novice and require more assistance. Over the years, I’ve come to appreciate the landslide of comments I receive about my language books when they deviate to discuss topics other than the language. Most readers don’t want to read about anything other than the language. In fact, in a few of my language books I’ve stopped mentioning any sort of IDE except in passing (and sometimes not at all).

C++ All-In-One for Dummies, 4th Edition is a little different from most of my language books in that it must make mention of an IDE in order for the reader to follow all of the examples. (In fact, there are two: one for mobile development and another for desktop development, this post is specific to Code::Blocks, which is used at the desktop.) Because I want the book to work well on all platforms, I’ve chosen Code::Blocks as the IDE for this book. This particular IDE works on all of the platforms that the book supports (Mac, Linux, and Windows) in a similar fashion, so one set of instructions works for everyone. In addition, Code::Blocks enjoys great community support and has a large enough user base that it’ll be around for a long time.

This book does contain a few bits of information about Code::Blocks because it must in order for the reader to follow the examples. However, I’ve purposely kept the amount of information about Code::Blocks to a minimum because this really is a language book and you could use any IDE with it, not just Code::Blocks. It’s difficult to walk the line between providing enough information about the IDE and not enough. Whether I’m successful depends on the skill level of the reader for the most part. The beta readers of the current edition are definitely letting me know where I need to add more information to ensure the material is understandable, but there will always be some room for readers to feel there is either too much or too little coverage.

With this in mind, I’ve provided tutorial-type posts in the C++ All-in-One for Dummies category. If you have a question about how to perform a task in the book, this is the first place to look. Make sure you contact me at [email protected] if you have questions, because then I’ll know to discuss the topic as part of a blog post. What it all comes down to is my wanting to provide you with the information you need, but not knowing what that requirement is until you contact me.

Code::Blocks also comes with a nice help file, but you might not know it. Choose the Help | Codeblocks option and you’ll see a new window pop up with the help information. I must admit that it would have been better had the vendor provided a different command for accessing the help file, but at least the help file is there.

Even with these two resources, you’ll likely find situations where you need more information. As I said, Code::Blocks enjoys good support in the development community. The following list contains some tutorials you can try when none of the other sources I’ve mentioned help.

There are other tutorials available. What I need to know is whether these tutorials answer your questions or not. If not, what topics do you need covered that my blog doesn’t already discuss? It’s important to me that you have a good learning experience with my books so always feel free to contact me about topics you’d like to see covered in the blog.

Giving Hackers an Exciting Target

Hackers will attack anyone, any organization, or anything that seems to offer the promise of something in exchange for the time spent: money, resources, revenge…the list goes on. However, for many hackers the kicker for choosing somewhere to hit is some level of challenge, some sort of excitement. After all, why attack a boring site when there is one out there literally begging you to attack it? Such is the case with GrapheneOS, which bills itself as:

The private and secure mobile operating system with Android app compatibility.

GrapheneOS Website

According to Multiple DDoS Attacks at GrapheneOS — What’s Going On Behind the Scenes?, GrapheneOS has recently endured multiple attacks. I verified the story on Twitter from a post by GrapheneOS. Such an attack can happen to anyone at any time. Keeping a low profile seems prudent, but not always possible (as is the case here). One of the things I stressed when writing Machine Learning Security Principles is that anything an organization can do to make attacks harder and less attractive will only reduce the security burden of the organization in the long run. Keeping a low profile tends to make an attack less attractive.

The reason that I was attracted to this particular DDoS attack is that GrapheneOS is using Synapse, an AI-based product. The article, Synapse Technology Corporation: Using AI to Take a Good Look at Airport Security, tells you a bit more about the history of this product. In looking at the Synapse website, you can see that they have some interesting customers, including the military and government. Oddly enough, I’m not seeing any other reports of major problems with Synapse. The problem must be with the GrapheneOS security setup.

The bottom line is that if a hacker decides to break into your organization, it’ll happen at some point no matter how good your security systems are, which means that it’s essential to combine security with monitoring and analysis of attack vectors. Keeping a low profile is essential too because hackers, like the most of the rest of us, love a good challenge. Reviewing attacks like the ones targeted at GrapheneOS can help you improve your own security setup. Let me know your thoughts on AI-based security at [email protected].

Mind Boggling Questions in C++

This is an update of a post that originally appeared on December 13, 2011.

I constantly tell readers they need to view my books as a starting point, rather than the end of their education on a particular subject. This sentiment holds true for C++ All-In-One for Dummies, 4th Edition as it does for all of my books. When you read this book, you get a really good start with C++. By the time you’re finished, you can create some useful applications and you know enough about the Code::Blocks IDE to use it effectively. Fortunately, there are many places online to expand when it comes to C++ and I ran across one of them in an article entitled, Amusing C++. The title, more than anything else, caught my attention. What, after all, could be amusing about C++?

This is one of those sorts of articles I wish I had thought to write myself. The author has a unique perspective about C++ and some of the issues you could face when working with it. More importantly, the article uncovers some interesting compatibility issues between compilers, all the while having fun with the C++ language.

These sorts of mind boggling questions force even professional developers to think about the language and how it works. It may seem as if a language specification is solid, but then you see that there are gaps in how the specification is put together and that there is room in the standards for unique vendor implementations. Working with unique implementations can lead to innovation, but it can also lead to all sorts of compatibility issues when you need to move your application from one product to another.

After you’ve completed reading my book, make sure you continue on with online resources. Of course, the place that you should look first for issues related to this book (and some general interest C++ topics) is the C++ All-in-One for Dummies, 4th Edition category on this blog. It’s a shame that this particular Dummies book doesn’t include the Parts of Tens feature that is found in other Dummies books. However, here are ten places you can look for C++ materials and examples:

Where do you get additional information about C++? What sorts of information do you look for on these sites? Let me know at [email protected].

Comment and Document Updates for CI/CD

In reading about Continuous Integration/Continuous Deployment (CI/CD) I often find ways to manage the code, to get people around the code, to keep errors out of the code, and so on. It’s all about the code. Developers have, in fact, developed myriad ways to keep code size small, updated, deployed, tested, and so on to ensure that users have what they want, when the they want it (if not before). Sometimes my head spins on its axis after reading such documents because it becomes a high speed dizzying affair. It’s somehow assumed that everyone can just keep up. Except, there are new people and older people and people with lesser attention spans who can’t keep up, which is why comments and documentation are so important.

As part of the coding process, developers also need to update both comments and documentation or someone will come along and make modifications based on outdated information. Even though making such updates seems like a waste of time since everyone should be able to keep up, the truth is that these updates ultimately save time. However, the updates, when they occur (which apparently isn’t often) are often made in a haphazard manner reminiscent of an old Keystone Cops movie.

Adding a process, a workflow, to the CI/CD mill is important to ensure that everything remains in sync: code, comments, and documentation. A best practice way to accomplish this task is to add steps to every update process so that nothing is left behind. Here’s how you could approach the problem:

  1. Perform the required code updates.
  2. During testing, ensure that the comments within the code actually match what the code is doing. Testing and other review processes should not only look at the code, but the comments too.
  3. Update the documentation as final testing occurs. Make sure to include these elements:
    • Text
    • Drawings
    • Mockups
    • Visual Aids
    • Videos
    • Any other documentation elements
  4. Specify that any old comments/documentation are outdated using one of these approaches:
    • Mark it as deprecated
    • Remove it from the work area and put it in an archive
    • Delete it completely
  5. Deploy the application update. If you don’t deploy the update after these steps are done, they won’t get done. Everyone will wander off somewhere and forget all about any sort of comment or documentation update.

Obviously, the approach you end up using has to meet the requirements of your organization. It also has to be simple enough that people will actually, albeit begrudgingly, perform the work. What methods do you use to keep everything in sync at your organization? Let me know at [email protected].

Firefly Light

Firefly in the night,
growing dim, shining bright.

Sending messages, in insect code,
come and stay at my abode.

Flying here, flying there,
making art upon the air.

A beam of light, within the dark,
an ember glowing, like a spark.

Hypnotic visions, all aglow,
help me see your jagged flow.

Flights of fancy, are what I see,
as you continue, endlessly.

Until the dawn, grants you rest,
your endless dance, shows your quest.

Copyright 2016, John Paul Mueller

Choosing the GNU C++ Compiler

This is an update of a post that originally appeared on April 23, 2012.

A number of readers have written to ask me about the reason I chose the GNU C++ computer for C++ All-In-One for Dummies, 4th Edition. After all, there are many different C++ compilers on the market today. Here are the reasons I feel that the GNU C++ Compiler is the best choice today:

  • Standards Adherence: From what I’ve read and seen in my own coding efforts, the GNU C++ compiler adheres a bit better to the current standards. There are other compilers, such as Microsoft’s Visual C++, that include a host of special additions and exceptions that don’t adhere to the standard. Given the audience for this book, using a compiler that’s strong on the standards is a must. (This book doesn’t use any of the GNU C++ extensions.)
  • Cross-Platform Compatibility: This book has a mixed audience. I’ve received so many e-mails from Macintosh readers that I’ve provided a number of blog posts just for this group. Linux developers also like this compiler and have used my book to learn how to use it. Because there are so many different platforms that this compiler works on, I can reach a much broader audience with the book and help more people write applications in C++ as a result.
  • CodeBlocks Support: In order to write good C++ code, you really do need a good IDE. CodeBlocks is a free compiler that works well on Linux, Macintosh, and Windows machines. If I had chosen another compiler, it may not have been possible to provide great support for all three platforms and some readers would have been left out.
  • Community Support: Both the GNU C++ compiler and CodeBlocks enjoy a broad range of support from the open source community. Getting help with either product is relatively easy and normally free.
  • Cost: Many of the readers of this book are students of limited means or are hobbyists learning to write C++ applications on a shoestring. Using the GNU C++ compiler coupled with CodeBlocks offers a method of teaching C++ programming that doesn’t require any investment by the reader. If cost hadn’t been a factor, there are probably other compilers on the market that might be a little better choice than using GNU C++.
  • Mobile Device Support: Many of my readers now what to be able to code from anywhere at anytime using their mobile device. Quite a few of the online compilers rely on GNU C++. (You also find support for Android devices in the book now using CppDroid in Chapter 2.) In many respect, you could view this as a fourth supported platform for my book.

Yes, I could have used some other compiler when writing this book, but at the time, GNU C++ seemed to be the best choice available and I still think it’s the best choice today. Of course, it’s always nice to hear about alternatives. If you think there is a strong competitor for GNU C++ that’s free and runs on all three of the target platforms for this book, let me know at [email protected]. Make sure you provide me with complete information, including a URL for the compiler’s site.

Paper or eBook?

This is an update of a post that originally appeared on February 17, 2011.

When I originally wrote this post 12 years ago, I thought I’d eventually go all digital. For me, there is still nothing better than sitting by my wood stove, coffee cup next to me, reading a favorite work of fiction. Of course, I’m talking about a hard cover or paperback book. Nothing quite matches the feel and smell of paper, especially when you’re reading a book for leisure. The hours I’ve spent reading books have been pleasurable to the extreme. I’m transported to worlds of mystery in some cases, worlds of the future in others. Fantasy, science fiction, techno-thriller; they all hold a certain thrill.

Actually, I have five reading stations in my house, one of which is on my tablet. Yes, I really do read some books now in digital format. Normally, these books are works of fiction that I read somewhere other than home, perhaps at a coffeeshop or restaurant. The easy chair and woodstove with their associated collection of paper books still call to me and I’m thinking now they always will.

It’s a different matter when I start working with technical material. I’ve whittled my collection of technical materials down to a few hundred essential books. Most of the material I read today is online in digital form and I read it at my computer desk so that I have tools like my Integrated Development Environment (IDE) available. In fact, I’d go so far as to say many of the materials I read are in article format, rather than book format now. Still, at this very moment, reading station 3, the dining room table, has a paperback technical book called Microservice Patterns on it. I’m finding it useful for brushing up on my Java as well as learning a few new techniques.

If I need historical information that I know appears in my paper tomes, finding what I need can be hard. Unfortunately, no book cataloging system in the world will solve my problem. I could catalog each of my hundreds of books and still not find the information I actually need with any speed. Of course, the ability search quickly is one of the benefits of digital format. If I had my books in electronic format, I might avoid the hours upon hours of search time for that one piece of information I actually need. Then again, I’ve accidentally found many pieces of useful subsidiary information during such searches, so it’s not possible to discount paper as unworthy. Still, speed is of the essence while I’m working on my next project.

For now, it appears that my future will rely on two media for books: paper for leisure and electronic for work related materials. It’s a sad thing for me to admit, but the paper book has become a bit too cumbersome for a world where search speed is prized above all.