Testing for TRUE and FALSE; A Problem Scenario

I wish they did better fact checking in these textbooks. Here’s a case in the C Programming book I’m reading. I was having problems with the following code:

FILE* spIn;
spIn = fopen("program73.dat", "r");
if(spIn != NULL)
 {
 printf("Could not open file.\a\n");
 exit(101);
 } // if open fails

Here’s the problem. The line if(spIn != NULL) always exits the program. However, if(!spIn) and if(spIn == NULL) both work fine.

The problem is that he was telling the program to terminate if the file opened successfully, the opposite of what he meant. The file pointer returns NULL if it’s not able to open the file. He told the program to exit if the pointer did not return NULL; in other words, the program terminated every time the file opened successfully. The other two checks I used checked to see if NULL was returned and the program would exit only if the file did not open successfully.

In a textbook, I certainly think the author should compile and test his programs to see if they work correctly a greater extent than this. However, this underscores a common problem for programmers. It’s very easy to get your tests backwards when testing for true and false conditions.

The best rule? Keep it simple and readable. If you have to take time to think through the logic, look for an easier way to write the condition. The second best rule, I guess, is to actually compile and run a program before you include it in a book, just to make sure it works correctly.

The Perfect Cup of Coffee

image

Musicians, filmmakers and programmers are very serious about their respective arts. Having experience working as all three, I have the somewhat unfortunate experience of being a workaholic. However, I also have the very fortunate experience of a shared passion that all three embrace without hesitation, an experience that creates an almost religious fervor in the more artistic members of these groups. As you have probably surmised by the title of the article, I am talking about the wonderful elixir whose parent bean causes goats to dance on the mountain tops, that dark and energizing brew we know as coffee.

As magic elixirs go, this is arguably the very finest. There are many different roasts available in just about every store in my country and, quite probably, throughout the world. People search endlessly for the method of making the perfect cup. It is, of course, a somewhat subjective matter, so you may argue with this article with no fear of chastisement from me. However, I am happy to present to you my recipe for the perfect cup of coffee.

It’s all about the bean!

Perfect coffee starts with a perfect coffee bean and a perfect roasting of that bean. Most people are used to drinking a bitter concoction consisting of beans that are almost burned in comparison with what I prefer. High attitude beans are considered the best quality bean and shade grown beans are all the rage.

High altitude beans have the unfortunate trait of having a high acid content. For people who drink coffee on a regular basis, this can result in stomach problems. Darker roasts present the drinker with a bitter flavor profile and, you guessed it, a higher acid content. If you imbibe to the extreme, grab the Prilosec and hang on for the ride.

Personally, I prefer a mild, Columbian roast. In fact, I smell beans before making a purchase to make sure they have the rich flavor I prefer. My favorite to date is a mild, Columbian roast from Whole Foods’ Allegro coffees. The coffee is shade grown, which matures the bean more slowly for a richer flavor. There is another mild coffee at Whole Foods called Ubuntu that I intend to try. The name embraces the African philosophy that a man is only a man through his interaction with others, signifying that the things we do to and for others defines who we are. It should also be a favorite to Linux programmers who find it because it is also the name of an operating system that is totally free and open source and embraces this philosophy.

Grind and brew!

I only buy whole beans, grinding at the time of brewing. I eschew the burr grinders that evenly grind every bean to consistent perfection, preferring to use a simple blade grinder. My family owns one of those fancy, automatic machines that grinds the beans and brews the coffee at pre-programmed times but we rarely use it. Instead, we have a larger French press and a couple of single-serving modeIs designed to brew a single cup. Mine is pictured.

Grinding beans for a single serving presents a problem. Grinders are designed to brew a regular pot of coffee, The smaller amount of beans, usually a heaping tablespoon for my perfect cup of coffee, does not grind properly with a sustained grind. Instead, l use six to eight short pulses, stopping when the grinds are at the desired consistency. I do not grind them as fine as I would for a regular pot of coffee made in an automatic drip coffee maker because the screen on the French press allows the finer grounds to slip into the coffee.

For my perfect cup of coffee, I prefer to heat the water in the cup. I don’t mind microwaved water. Some people say it tastes different to them than boiled water but I can’t tell the difference. Heating the water in my coffee cup also makes the cup hot. Added ingredients do not contribute as much to the cooling of the drink when they sit in a hot cup. I am assured a piping hot cup every time.

I brew the coffee in the French press for five minutes, then press it and pour it into the cup.

Do added ingredients spoil the brew?

Some people prefer a hot, black, bitter cup of Joe. Personally, I prefer a blending of flavors in my coffee. I found a long time ago that a little ground cinnamon in the brew had others raving about the wonderfully delicious coffee I made. I have since learned that the Mexican people use a bit of cinnamon and brown sugar in their coffee. I don’t use the powder, which contaminates the drink. Instead, I grind a chunk of cinnamon stick to a coarser consistency and add it to the coffee grounds. I grind it separately in my coffee grinder, using short bursts, because it grinds differently than the coffee beans.

Like the people of Mexico, I love brown sugar in my coffee. White sugar will also do nicely in a pinch but it lacks the darker, more robust, molasses flavor of its less processed cousin. Four to four and a half teaspoons is my preffered amount,

l love cream in coffee but it is loaded with saturated fats. Except for special occasions, I use 2% milk. I prefer organic milk. There is a difference in flavor. I use a double shot glass to measure a perfect two ounces in my cup.

As I stated before, I let these added ingredients sit in the hot cup while brewing. This helps ensure that my coffee is hot when I serve it. One other addition I use on rare occasions is a shot or two of rum or brandy. Presidente is my favorite brandy for this purpose, another wonderful flavor from Mexico. More often, I choose Flor de Cana, a Nicaraguan rum with a wonderful, dark, molasses flavor.

Even the cup matters!

Yes, even the cup matters. I have a great coffee cup I was given at a leadership conference presented by Breakfast With Fred a few years ago, It is a great organization whose goal is not coffee cups, but furthering ethical leadership in business. However, they also created the perfect coffee cup for my purposes. It is slightly larger than a standard cup, allowing addition of my extras while still giving me room for a full cup of my favorite beverage.

Enjoying it responsibly!

Too much of anything is bad for you. I enjoy responsible amounts of coffee. While it gives a nice boost to your day, and it tastes great, coffee’s properties and slightly addictive quality, make it a drink best enjoyed in limited amounts. I invite you, oh coffee lover, to try my recipe for a perfect cup of coffee. Conform it to your taste and enjoy it in responsible amounts so it can be a boon to your day.

PHP General Questions & Answers

Here’s a great explanation of some common questions from people who are learning PHP. The author discusses the differences among the include(), include_once() and require() statements and also talks about the differences between if() and switch() statements. Good food for thought, so I’m reblogging it for my friends.

Web Development

Question1: What are the differences between require and include, include_once?
Answer:
File will not be included more than once. If we want to include a file once only and further calling of the file will be ignored then we have to use the PHP function include_once(). This will prevent problems with function redefinitions, variable value reassignments, etc.

The major difference between include() and require() is that in failure include() produces a warning message whereas require() produces a fatal errors.

Question2: What are the differences between include() and include_once() functions?
Answer: include_once() will use the specified file only once. include and require will use the specified file as many time we want. If include_once() is used before with same name, it can not done again

Question3: What is difference between echo and print?
Answer: print and echo are more or less the same; they are both language constructs that display strings…

View original post 106 more words

Humans as Finite State Machines

Have you ever heard of an infinite state machine? It’s a theoretical concept of a machine that is large enough to hold all the information in the universe, under the assumption that the universe is infinite, of course. What we have in modern computers are finite state machines, devices that are finite in nature and can only hold so much data.

For monotheistic religions like Judaism, Christianity and Islam, God could be described as an infinite state machine. However, we take the concept further. Not only is there something that is able to hold all the information in the universe, this something also created the universe.

What does this say of human beings as we try to understand the universe around us? People grasp for truth and knowledge and, quite often, claim to have found universal truth.  Religious and non-religious people alike have a tendency to proclaim these things they believe as absolute truth, eschewing the beliefs of the people around them.

I’ve heard it said that the human brain can hold about ten terabytes of information. I don’t know if this information is correct but we do know that the human brain can hold a finite amount of information at one time. In fact, the human brain does not store and retrieve information the way a computer does. The things we learn must be learned by repetition; the brain categorizes what is important to remember by frequency of repetition. Those things that are repeated often and in large quantities can be readily and accurately remembered. It is said that college students retain, on average, about 25% of the things they learn in their classes after leaving college, retaining those things they use constantly on the job but forgetting those things they don’t use on a daily basis.

This information draw some very interesting conclusions about the relationship humans have with religion. The first thing is that people, in their finite state, do not have the facility to judge other people and the beliefs they have. What we learn is largely based on experience and we rely on repetition of those things that are important to our survival. Individual human experiences may have commonalities but there are so many things that are singular that we are best able to judge others only in general terms. We do not know the hearts and minds of others and, outside general observation, we are not well equipped to judge specifics of individuals.

This applies not only to religious people but to the non-religious as well. In Christianity, my religion, we are forbidden from judging others. For instance, it is not my place to judge whether an atheist is going to hell for not believing in God. How could I, when I know so little of that person’s motivation? On the other hand, the atheist, or even more to the point the anti-theist, has no place judging Christians, lumping all of Christian experience into the conservative, literal view often expressed by that group as the whole of religion. Likewise, people from different religions are not well-suited to judge each other. Because our ability to know and understand becomes more generalized as we move farther from our particular experiences, we cannot hope to understand the specifics of another’s feelings and motivations. Each person decides what is important based on different situations and circumstances, their brains retaining that which is oft repeated. This includes what they choose to feed into their brains as well as the experiences outside their control during formative years and the lasting impression they have.

This article serves as an admonishment to me first, then more generally to others. Not only is it forbidden in Christianity to judge other people past a certain point, it is scientifically improbable that I can do so with any substantial degree of certainty. It is within my realm to judge what contact I should have with that person, based on what I value and what that person brings to the table. However, beyond that, I must take a more general approach when passing any kind of lasting judgement on another human being, just as others should take a more general approach when drawing conclusions about me.

Like Adam and Eve in the second Genesis story, people put themselves in the position of God. Perhaps the real sin in knowing good and evil is that we assume, incorrectly, that we have the ability to use this knowledge wisely in our relationships with others.

Regular Expression to Find URLs in Java

I’ve been learning how to use regular expressions in Java and found that it’s hard to get some of the code working properly from tutorials and places like Stack Overflow. I thought it might be handy to provide a working script in Java that can return multiple URLs from a string.

So, I’ve modified code from Oracle’s tutorial on regular expressions, using a slight variant a regular expression I found on Stack Overflow. This class prompts you to input a string, then evaluates the string, returning all the URLs in the string. It does this by searching for href=”[any characters in the url]” and returning each instance of this in a separate line on the screen.

This code can easily be modified as a starting point for evaluating source code returned by a spider for evaluating links on a website. I hope it is useful for you.

/*
 * THIS WORK IS A DERIVATIVE OF CODE COPYRIGHTED BY ORACLE.
 * YOU MAY USE THIS WORK FREELY UNDER THE CONDITIONS OF THE ORACLE COPYRIGHT.
 * THE AUTHOR OF THE DERIVATIVE CODE DOES NOT REQUIRE ANY FURTHER ATTRIBUTION
 *
 * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Oracle or the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */ 

import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexURL {
    public static void main(String[] args){
        Console console = System.console();
        if (console == null) {
            System.err.println("No console.");
            System.exit(1);
        }
        while (true) {
            Pattern pattern = 
            Pattern.compile("href=\"(.*?)\"");

            Matcher matcher = 
            pattern.matcher(console.readLine("Enter input string to search: "));

            boolean found = false;

            while (matcher.find()) {
                console.format("%s\n",
                    matcher.group(),
                    matcher.start(),
                    matcher.end());
                found = true;
            }

            if(!found){
                console.format("No match found.%n");
            }
        }
    }
}