All Things Techie With Huge, Unstructured, Intuitive Leaps

Google Doesn't Like Orgasms

Google hates an orgasm ~ a happy ending explosion. It is quite funny, but also shows how automated word filters can go horribly wrong.

I created a blog of unique foods that were a complete surprise in how tasty they were. Have you ever popped a morsel into your mouth, and it so excited your tastebuds, that you were amazed, amused and gratified by the taste of the food? I wanted to document the foods the foods that did that to me. For me, it was a taste orgasm.

I created the blog (it can be found HERE ). I called it a taste orgasm blog. I then went to add the food, drink, snacks and various edible morsels that hugely tickled my tastebuds.

The rub came when I monetized the blog, as I do with all of my blogs. Ads placed by Google would not show up. I waited a week, and still no commercialization.

I decided to test a theory. Perhaps it was the word orgasm that was preventing the ads from being placed (and perhaps preventing my blog from being found on search engines). I re-tooled the entire blog, renaming orgasm to blowout, resulting in the URL

Voila. Within minutes, ads started appearing on my blog. There was nothing objectionable, in bad taste or X-rated on my blog. I just had the word orgasm to describe a taste explosion. Google is so puritanical, that it hates orgasms. Even if it is in relation to taste buds and food.

I am not starting to wonder if the ads will disappear off this blog too.

Update: They also don't like animated gifs. It's too bad. The animated gif atop this blog post is a doozy. Unfortunately it is limpid and non-functional in this environment. It turned my animated gif into a png file.

The Ultimate Web Page Design ~ The Perfect Web Page

I have seen the future of web design and it is pictured above. It is the ultimate in user experience and usability. It is perfect. It is compatible with every single web-browsing device possible. It has no Flash or fancy layer tricks. It is simple, clean and easily navigable. It has a movie (advanced media) embedded at the bottom. This is the design that all web designers should strive for.

The URL for this perfect website is:

Note: I am not associated in any way with the website, nor did I take a fee to tout this. I am simply in admiration.

SMS Spam Revenge Fantasies

I hate spam of any kind. I hate the Russians who think that my penis is too small and fill my inbox with ads for sex pills of all kinds. The worst kind of spam is text message or SMS spam. To me, because of its small 140 character format, SMS is sacrosanct as a method of communicating succinctly just with people who are important to me. When I get an SMS spam, I really get annoyed and all sorts of revenge fantasies enter my head.

My chief revenge fantasy is this. To find out what number and service is sending you the spam, go to the message options menu and check the SMS message details. The details include the mobile phone number of the message sender and the message centre number of the cellular service provider. Get the originating number.

I would set up my laptop as a server. In this blog you would find python code on how to send SMS from a server. I would then go to a public place that offered free internet. I would put the number into the code, and the message would be "Stop sending spam stupid, and yo mama is fat!" I would then put the send code in an endless loop, and go and order a latte and sip it slowly while my laptop churned away, eating their message credits up.

Of course I would never do this, because I need to have impeccable ethics to work for some of the people that I do. That is why this is a revenge fantasy only.

In the meantime, the next internet billionaire, is the guy who figures out how to stop spam at the source.

I Quit Cold Turkey ~ Facebook and LinkedIn

I got rid of my addiction. My Facebook addiction. I have been status-free for two weeks. I have quit my stalker fits. I stopped my furtive network-building on LinkedIn with people I barely know.

Actually it is easy to be smug and liken Facebook to smoking, but there is a deeper reason, and that is privacy. I am a citoyen du monde -- a citizen of the world. I write software for high net worth individuals in Caribbean tax havens. I have written money transfer and micro-payments software for a small developing country. I am currently writing software to fight epidemics in Africa. I have written software for a European Union concern, and I have been requested to do a threat and risk assessment for a UN agency on the African continent.

With the Facebook timeline, geo-location and the selling of data on Facebook, I value my privacy more than knowing that an old high school friend caught a five pound bass yesterday. I don't need a tax agency looking at my Facebook account to try and pinpoint my whereabouts on a specific day. I don't want potential employers to know that I fancy both a single malt scotch and a tropical beer. I don't want to be judged professionally by a vegetarian because I hunt my own fish and lobster on the reef. In short, I want to control my public persona.

LinkedIn is perhaps the most useless social media thing out there. I was an early adopter of LindkedIn, and had a ton of contacts in many countries. I never benefited from being on LinkedIn at all in any way. It was a colossal time waster.

Social media is quite handy for being able to keep track of a large amount of people with minimal effort. However with the ubiquitous selling of data by these social media companies, they are crossing the line in respect to violating my privacy. Using datamining, with the limited amount of data that I put out there, social media can figure out my address, age, buying habits, probable income, and relationship status. No thanks.

What this world needs, is a social media platform that doesn't need to create profits by selling my private information. I wouldn't even mind looking at ads to fund it, however, social media and Facebook is not exactly an ideal platform for selling crap.

If you examine Facebook's reported financials, they make about $4 billion per year or about $4 per user. This is in spite of 33% growth in users. What they don't realize is that if I am stalking my old highschool sweetheart to see if the jock that she married is fat, poor and not interested in her any more, then I really don't want to buy anything but her love (or eventually Viagra when I get to the stage where I need it).

But back to the point -- I missed it for a few days, but now I find that I have a lot more time to devote to actually generating an income, or making entries in my blog. And being a LinkedIn dropout hasn't hurt my income stream at all. Could this be a trend?

Fuzzy Logic, "Ish" values, Java

I previously wrote about an "ish" function ( which can be read HERE ) , that describes the need for a fuzzificator that identifies things from incomplete or incorrect knowledge. Humans are excellent at doing this in some sort of neural pattern recognition. In my "ish" function article, I made the case that it was needed to crack a code that the FBI was working on and asking for the public's help.

Little did I realize that I would need an "ish" function or a fuzzy value function shortly in my work. I am writing software that processes health surveys sent by smart phone to identify persons that need immediate care in a Third World country. The way this is done, is by sending people out using a survey tool that asks questions which identifies risk signs. There are many different types of surveys, and the only way to classify what comes in over GPRS or HTTP, is the XML document with the survey answers. I parse the document, and identify the type of survey by the number of answers.

However this method is not foolproof, because the tool lets the interviewer skip an answer. At this point, my survey classifier throws an exception because it cannot determine the type of survey. However each type of survey has a significant difference in the number of answers, so a fuzzificator would work well here. For example, one particular survey has 12 answers, the next has 25 and the next has 64, so making a fuzzy logic class to determine the type of survey is quite easy. I just give the exact answer a range, and if it falls into that range, then I know what type of survey it is.

Right now, my fuzzy value function works only on integers. It works on an actual difference or a percentage difference. The values are hard coded but the code could be modified to get the values from a config file or a database.

I see this function extended to strings, doubles, floats and indeed anything you want. In addition, once you have the fuzzificator, one can make the same thing for logic types, for example Boolean algebra. One could have a fuzzy AND gate where there are many inputs, and if one or two is out, a decision still could be made. And if one combines the decision making with Bayesian inference, or probabilities, then one has a truly useful tool for complex fuzzy logic.

Here is the prototype source code in Java:

package org.FuzzyLogic;

public class FuzzyValues {
static final int PLUS_MINUS_VALUE_INT = 1;
static final double PLUS_MINUS_VALUE_INT_PERCENT = 0.09;
static final int expectedInput = 12;

public static boolean fuzzyInt(int actualInput) {
boolean fuzzy = ((expectedInput-PLUS_MINUS_VALUE_INT) <= actualInput) && (actualInput <= (expectedInput+PLUS_MINUS_VALUE_INT ));
return fuzzy;

public static boolean intPercentMatch(int input) {
double minus_percent_value = expectedInput * (1 + PLUS_MINUS_VALUE_INT_PERCENT);
double plus_percent_value = expectedInput * (1 - PLUS_MINUS_VALUE_INT_PERCENT);
boolean fuzzy = (minus_percent_value <= input)&& (plus_percent_value >= input);
return fuzzy;

public static boolean isFuzzyIntValue(int input)
boolean success = fuzzyInt(input);
return success;
public static boolean isFuzzyIntPercent(int input)
boolean success = intPercentMatch(input);
return success;


What the world needs -- An Apps Dictionary

I was sitting around with a bunch of geekish types in kilts (I was attending a formal affair in Scotland) and we got around to talking about making a killer app. We were talking about killer apps that would be downloaded a gazillion after they are posted in an online apps store.

The Scots are natural born engineers and like doing things by the book, and one of the geeks in skirts said that what was needed was an app dictionary. I immediately saw the benefit of that.

After all, one of my cousins wanted an app called ZERO-TO-SIXTY that used the accelerometer in an iPhone or an iPad. One would simply press a button while holding the device, and someone else driving a car would tromp on the pedal. Using calculus, one would determine the acceleration and tell you how fast one could go from zero to 60 miles per hour.

After much discussion and excitement, it turns out that there is such an app. Then it struck me that one could make money by creating metadata about apps. So here it is. The world needs an app dictionary. If one has a specific need, one consults the app dictionary. It tells you exactly what the app does, how well it works and where one could download it. As a matter of fact, this would make a killer website, and one could make some serious coin with the advertising on this website.

Just an idea.

Wow -- How to get rich from apps without actually creating them. Rate what's out there. Robert Parker made a fortune and a career doing this with wines. This could really work. I wish that I wasn't so damn busy earning a living, so that I could do this.

Sony eReader Product Review

This isn't about software -- well in a sense it is. It is a product review about the Sony eReader. We are taking a long plane ride and my better half's birthday is on the day that we are taking the trip. She is an avid reader, and I decided to get her an eReader.

According to the online reviews, Kindle is the best, but I am an open source type of guy, and I wanted not to be tied to Amazon. The Kobo eReader has reliability issues according to online reviews, and the Sony one seemed to be the ticket.

I first evaluated the eReader tablet by Sony, where one could check email, and it was slower than molasses in January. I needed WiFi and the Sony eReader with WiFi, Handwriting recognition, a web browser and such seemed to be the ticket.

It is performing as expected however it ain't no Apple when it comes to design. My particular pet peeve is the stylus. My better half loves using the stylus (doesn't get the screen all fingerprinty), however there is a huge design flaw. There is no damn place to store the stylus. The thingie on it that is like the clip of a pen, is too wide to make it stick to the accessory cover that I bought for it. There is no where to clip it to the body of the reader. To me it is sloppy design. The innards work fine.

This makes me appreciate all the more, the beauty in the design of Apple products. They would never let sloppy design like this go by.

Update: I wish that I had bought a Kindle.

Never Mind Data Mining -- I Made a Data Refinery

refinery - definition of refinery by the Free Online Dictionary ...
re·fin·er·y (r -f n -r ). n. pl. re·fin·er·ies. An industrial plant for purifying a crude substance, refinery [rɪˈfaɪnərɪ]. n pl -eries. (Business ...

OK, so I'm writing some datamining software. Actually, I am writing a package to take raw data, plot it into a data mart, validate the data, cleanse it, evaluate it, and then put it into a database where I can mine it.

But I have some unique challenges. The data is collected in a Third World African country. It is in the form of surveys. The data collected is to provide health care. The data collectors are indigenous people who are provided with a cell phone, survey instruments, and are paid to go out and survey people. They get paid per completed survey, and in a country where it is tough to make a dollar, this is a plum job.

The problem is that this country is a country with a brokerage economy where everyone cheats. This country is known around the world for sending out email scams. A respected figure once said that if cheating were the pinnacle of civilization, then this country would be the most civilized in the world. It is not uncommon for the data collectors to sit on a street corner and make up surveys instead of going house to house.

So, how do you get around that. Luckily the mobile devices have GPS. When they send the survey, the longitude and latitude is sent. The surveys are broken down into several steps. The first crew goes out and enumerates the houses and gets the GPS coordinates of the house. It is given a control number. Then the following surveys must match the control number, and the GPS coordinates must match. My software does that.

One of the surveys asks how many members there are in the household. The following surveys ask the same question. When the surveys all arrive by HTTP or GPRS, they all go into a database as raw.

My software takes it out and does an evaluation. The surveys come in at a couple of thousand a day. It is too much to evaluate them manually. My software has to take the bulk of the crude material, sift it out for the good stuff, and then operate on the good stuff.

It struck me, that before I can do data mining, I have to do some data refining. The incoming surveys are like ore. The nuggets of real live data is buried in the junk, the partially completed surveys, the fraudulent ones, the failed transmissions and corrupt ones, and the ones that are partially true and the rest made up. Just like ore, I have to purify the data, and then I can operate on it. It struck me, that I have built a data refinery.

In various TED talks, I heard the stat that the whole world up to the time of the internet, had produced 5 exabytes of data. We now produced 5 exabytes in a couple of days. A lot of it is pure crap. There are funny jokes, red-neck anti-Obama diatribes, emails from a bunch of Russians who think that I have a small penis, and all sort of other spam.

Most of the exabytes of data that we generate is like ore. It needs to be refined. It is possible to extract knowledge from the stream of fake viagra emails and Facebook updates, and it can be monetized, but you have to separate the wheat from the chaff. It struck me that my data refinery can do the job.

There are lessons to be learned from my experience, and those lessons form the basis of a data refinery.

The first step is to get rid of the fake and fraudulent stuff. That is objective one for a data refinery. The second step, is to identify the partial data, and make a determination if it can be salvaged. The third step is to cleanse the dirty, but real data. And the fourth step is to put it all together in a clean place where you can operate on it and monetize it.

There you go -- the four basic steps of creating a data refinery. I am being deliberately vague on how this is done, because there is money in doing this. Race you to the patent office.

Java Virus ???

I am a firm believer in Avira. I use it on all of my machines for anti-virus. The way that I became a believer was in Nassau, the Bahamas. We need a cheap machine to act as a modem answer gateway. We walked over to the local Radio Shack store and bought the cheapest Pentium-knock-off that they had. It came loaded with all sorts of stuff, like Microsoft Office, Adobe Photoshop and all of the expensive programs.

This being the Caribbean, and the land of the Pirates of the Caribbean, of course it was all cracked stuff, loaded with viruses. I did my best to clean the machine with every available package, including Norton, McAfee and such -- all to no avail. Avira (free personal download) was the only one that did it.

So, today, Avira began its scan, and this showed up in the transcript pad:

Begin scan in 'C:\'
C:\Documents and Settings\Administrator\Application Data\Sun\Java\Deployment\cache\6.0\19\33c334d3-7247e552
[0] Archive type: ZIP
--> main.class
[DETECTION] Contains recognition pattern of the EXP/CVE-2012-0507 exploit

Beginning disinfection:
C:\Documents and Settings\Administrator\Application Data\Sun\Java\Deployment\cache\6.0\19\33c334d3-7247e552
[DETECTION] Contains recognition pattern of the EXP/CVE-2012-0507 exploit
[NOTE] The file was moved to the quarantine directory under the name '4af8d44b.qua'.

Holy crap, it was a Java virus. Here is more information:

Date discovered:19/03/2012
In the wild:No
Reported Infections:Low
Distribution Potential:Low
Damage Potential:Medium
VDF version:
IVDF version:

General Method of propagation:
• No own spreading routine

• Mcafee: Generic
• Kaspersky:
• Microsoft: Exploit:Java/CVE-2012-0507.A
• GData: Java:CVE-2011-3544-ET

Platforms / OS:
• Windows 2000
• Windows XP
• Windows 2003
• Windows Vista
• Windows Server 2008
• Windows 7

Side effects:
• Can be used to execute malicious code
• Makes use of software vulnerability

File details Programming language:
• Java

A Typical Privacy Policy

Here is a typical privacy policy.

Privacy Policy
What This Privacy Policy Covers

 This policy covers how Mythical MegaCorp and its subsidiaries (“Mythical MegaCorp”) treats personal information that Mythical MegaCorp collects and receives, including information related to your past use of Mythical MegaCorp services. For purposes of this Privacy Policy, “personal information” and “personally identifiable information” shall mean any information that can identify an individual directly or through other reasonably available means, except your name, business address, business telephone number, business email address and business fax number. By providing personal information to us, you signify your consent to Mythical MegaCorp’s collection, use and disclosure of your personal information in accordance with this Privacy Policy.

 This policy does not apply to the practices of companies that Mythical MegaCorp does not own or control or to people that Mythical MegaCorp does not employ or manage.

Information Collection and Use

 Mythical MegaCorp collects personal information when you register with Mythical MegaCorp and when you use Mythical MegaCorp services.

 When you register with Mythical MegaCorp we may ask for information such as your name, address, email address, phone number, credit card information, business license information, driver’s license information, postal code (zip code), and other financial information. Once you register with Mythical MegaCorp and log in to use our services, you are not anonymous to us.

 Mythical MegaCorp collects information about your transactions with us, including information regarding items you bid on.

 Mythical MegaCorp automatically receives and records information on our server logs regarding your sessions on Mythical MegaCorp websites and those of its subsidiaries, and related cookie information.

 Mythical MegaCorp uses information for the following general purposes: to contact you, to facilitate bidding, buying, and selling of items by you through Mythical MegaCorp and its affiliated companies, and to comply with laws and regulations related to purchases and sales of items by you through Mythical MegaCorp.

Information Sharing and Disclosure

 Mythical MegaCorp does not rent, sell, or share personal information about you with other people or nonaffiliated companies except to (i) provide products or services you've requested, (ii) when we have your permission, or (iii) under the following circumstances:

 We provide the information to trusted partners who work on behalf of or with Mythical MegaCorp under confidentiality agreements. These companies may use your personal information to help Mythical MegaCorp communicate with you about offers from Mythical MegaCorp. However, these companies do not have any independent right to share this information.

 We provide the information in response to subpoenas, court orders, or legal process, or to establish or exercise our legal rights or defend against legal claims, or upon receipt of a request from law enforcement;

 Mythical MegaCorp does not otherwise share personal information about website users with third parties unless doing so is appropriate to carry out a user’s request or it reasonably believes that doing so is legally required or is in Mythical MegaCorp’s interest to protect its property or other legal rights or the rights or property of others;

 We may transfer information about you if Mythical MegaCorp is acquired by or merged with another company to the extent permitted by applicable law. In this event, Mythical MegaCorp will notify you before information about you is transferred and becomes subject to a different privacy policy.

 We transfer information about you to sellers of items purchased by you, to buyers of items sold by you and to their service providers that they may retain to facilitate the assignment of items to Mythical MegaCorp sales venues, and to state and federal regulatory agencies as part of the title or ownership transfer process.


 Mythical MegaCorp may keep track of the pages visited by its users by placing a small entry in text file, called a cookie, on a user’s hard drive. Cookies are text files we may place on your computer to understand user traffic patterns, technology used, usage data and aggregate demographics. They are also used to serve ads and authenticate you on the system. Cookies do not contain any personal information, but they do allow us to personalize the Service. You can remove or block cookies using the settings in your browser although doing so may interfere with your use of some of our site and Service.


 We reserve the right to send you certain communications relating to Mythical MegaCorp services and your account with Mythical MegaCorp, including but not limited to notifications, service announcements, and administrative messages without offering you the opportunity to opt-out of receiving them. Should you choose not to receive certain communications your access to or use of certain services may not be possible.

Links and Features Offered in Conjunction with other Providers

 To make our website more valuable to our users, we may feature some products and services that come from other providers through arrangements with companies that specialize in providing such services. We may share with these third parties such information as is necessary for them to provide the products or services. Our site may include links or provide access to third party sites, services and products. We do not

control the privacy policies and practices of third parties, and you are subject to the privacy policies of those third parties where applicable. If you can’t find the Privacy Policy of any third party via a link either from the site’s homepage or from the pages on which the products or services are offered, you should contact the third party directly for more information.

Data Storage

 Mythical MegaCorp may store your account information active in our databases indefinitely following the termination of your account with Mythical MegaCorp to the maximum extent permitted by law.

Confidentiality and Security

 We limit access to personal information about you to employees who we believe reasonably need to come into contact with that information to provide products or services to you or in order to do their jobs.

 We have physical, electronic, and procedural safeguards that comply with federal regulations to protect personal information about you.

 If Mythical MegaCorp learns of a security systems breach we may attempt to notify you electronically so that you can take appropriate protective steps. By using this website or providing personal information to us you agree that we can communicate with you electronically regarding security, privacy and administrative issues relating to your use of this website. Mythical MegaCorp may post a notice on our website if a security breach occurs. Mythical MegaCorp may also send an email to you at the email address you have provided to us in these circumstances. Depending on where you live, you may have a legal right to receive notice of a security breach in writing. To receive free written notice of a security breach (or to withdraw your consent from receiving electronic notice) you should notify us at

Changes to this Privacy Policy

 Your use of the our site and Service, and any disputes arising from it, is subject to this Privacy Policy as well as our Terms of Use and all of its dispute resolution provisions including limitation on damages and choice of law. We reserve the right to change our Privacy Policy at any time. We will provide a prominent notice on our website informing you of any changes in our Privacy Policy. The amended Privacy Policy will be effective immediately upon posting on our site, and your continued access or use of the Service following the posting of any such amendment will constitute full acceptance of the Privacy Policy as amended. We encourage you to refer to this policy on an ongoing basis so that you understand our current Privacy Policy. Unless stated otherwise, our current Privacy Policy applies to all information that we have about you and your account. You may determine when this policy was last updated by referring to the modification date found at the bottom of this Privacy Policy.

Sending Mail From Linux Using Bash Shell

This was a quick and dirty bash shell for send email from a command line. The body of the email was the same, and the email was going out to a bunch of people.

Using vi, I created a file in /home/tmp/mailmessages with the body of what I want to write. For this example it is /home/tmp/mailmessages/myFileTellingEveryone

Then I created the following bash script, name mymailer and put in the /bin or /sbin directory:

#FILE= "/home/tmp/mailmessages/$3"
#echo $(basename "$2")
mail -s $(basename "$2") $(basename "$1") < /home/tmp/mailmessages/$(basename "$3")

Do a chmod so that you can execute it (chmod 777 works for me) and now all I do is type:

#mymailer "This is my Subject" myFileTellingEveryone

I just keep changing the email address and I can send out this way.

Send SMS from Ubuntu Linux using Python

Got a USB modem with SIM card and we wanted to send SMS on the GSM modem. We were having trouble with javax.comm. So the quick and dirty way was to use a python script.

First of all, before you plug in the modem, ls /dev. Then plug the modem in. ls /dev and we saw /dev/ttyUSB2. That was our serial port.

Using vi we created a file called This is it:

#!/usr/bin/env python

import serial
using curses import ascii

connection = '/dev/ttyUSB2'

def sendSMS(message, telephoneNumber):
"""Send a SMS"""
ser = serial.Serial(connection, 9600, timeout=5)


ser.write('AT+CMGS="%s"\r\n' %telephoneNumber)

Do a chmod so that it can be executed. Logged in as root, execute python:


>>> import sms
>>>sms.sendMessage('This was too easy', 555-555-5555)

There you go.