Friday, 25 June 2010

My Ideas on How to Stop the Oil Spill

Share

Another idea for stopping the oil spillI've been reading online, ideas that people have for cleaning up the oil and for stopping the oil at the wellhead itself.  I had some ideas come to mind. 

What if four massive explosive charges were sunk equidistant about the circumference of the well, say 500 feet from the well and 1,000 to 2,000 feet below the wellhead.

These charges could be shaped and controlled to push the well closed by pushing the rock formation around the well into the well itself.  Since the 4 charges would essentially be surrounding the well they would crush it closed.  I would then probably fill in the blast area with cobble and concrete.

Another idea is to screw the top shut.  Use a giant screw, force it into the opening of the well, once the threads grab let it dig itself into the well until the oil stops.

Not sure how much merit these ideas have but ya never know.

 

Technorati Tags:

Posted by cfalchemist at 3:31 AM in BP Gulf Oil Spill

Friday, 11 June 2010

Sink Holes in China Now? Addendum

Share

Interesting way to scare other countries... big holes in their cities!Seems people have a hard time believing that Tunnel Boring Machines are in use.  How about a TBM in action!

 

 

 

Technorati Tags:

Posted by cfalchemist at 10:21 AM in Strange Happenings Around the World

Thursday, 10 June 2010

Sink Holes in China Now?

Share

Interesting way to scare other countries... big holes in their cities!A few days ago I wrote how the sink holes in Guatemala looked eerily familiar to past sink holes.  One think i've noticed is how round these holes are,

Take a look at the sink holes in Guatemala and then look at the sink hole in China.  Notice how the holes are very similar and they also look like a giant auger drilled thru the earth to create them.  Look at the sides of the hole, how they have a tapering ridge, a drill like look to them.

Now, take a look at a very interesting machine the US Government has.  The Subterrene is a type of tunneling machine, similar to that of a Tunnel Boring Machine (TBM). A subterrene works by utilizing forward pressure and massive amounts of heat to push through rock.  They even have Nuclear Subterrenes.

So, do you think the chinese built their cities on sand like the Guatemalans?  Or, maybe the Silver Surfer is preparing the planet for his Master to come and suck the life from the Earth?

 

Technorati Tags:

Posted by cfalchemist at 4:27 PM in Strange Happenings Around the World

Saturday, 5 June 2010

50 Statistics About The U.S. Economy That Are Almost Too Crazy To Believe

Share

Obama will go down in history as the most incompetent US president ever.Found this on the conspiracy theory site, ATS, that Obama built a website to contradict.

We used to joke in College, about how low things could go.  Not such a funny saying anymore.

Hope?  Change?  Debt?  Enslavement?  Control?  Traitors?  Revenge?

#50) In 2010 the U.S. government is projected to issue almost as much new debt as the rest of the governments of the world combined.

#49) It is being projected that the U.S. government will have a budget deficit of approximately 1.6 trillion dollars in 2010.

#48) If you went out and spent one dollar every single second, it would take you more than 31,000 years to spend a trillion dollars.

#47) In fact, if you spent one million dollars every single day since the birth of Christ, you still would not have spent one trillion dollars by now.

#46) Total U.S. government debt is now up to 90 percent of gross domestic product.

#45) Total credit market debt in the United States, including government, corporate and personal debt, has reached 360 percent of GDP.

#44) U.S. corporate income tax receipts were down 55% (to $138 billion) for the year ending September 30th, 2009.

#43) There are now 8 counties in the state of California that have unemployment rates of over 20 percent.

#42) In the area around Sacramento, California there is one closed business for every six that are still open.

#41) In February, there were 5.5 unemployed Americans for every job opening.

#40) According to a Pew Research Center study, approximately 37% of all Americans between the ages of 18 and 29 have either been unemployed or underemployed at some point during the recession.

#39) More than 40% of those employed in the United States are now working in low-wage service jobs.

#38) According to one new survey, 24% of American workers say that they have postponed their planned retirement age in the past year.

#37) Over 1.4 million Americans filed for personal bankruptcy in 2009, which represented a 32 percent increase over 2008. Not only that, more Americans filed for bankruptcy in March 2010 than during any month since U.S. bankruptcy law was tightened in October 2005.

#36) Mortgage purchase applications in the United States are down nearly 40 percent from a month ago to their lowest level since April of 1997.

#35) RealtyTrac has announced that foreclosure filings in the U.S. established an all time record for the second consecutive year in 2009.

#34) According to RealtyTrac, foreclosure filings were reported on 367,056 properties in March 2010, an increase of nearly 19 percent from February, an increase of nearly 8 percent from March 2009 and the highest monthly total since RealtyTrac began issuing its report in January 2005.

#33) In Pinellas and Pasco counties, which include St. Petersburg, Florida and the suburbs to the north, there are 34,000 open foreclosure cases. Ten years ago, there were only about 4,000.

#32) In California's Central Valley, 1 out of every 16 homes is in some phase of foreclosure.

#31) The Mortgage Bankers Association recently announced that more than 10 percent of all U.S. homeowners with a mortgage had missed at least one payment during the January to March time period. That was a record high and up from 9.1 percent a year ago.

#30) U.S. banks repossessed nearly 258,000 homes nationwide in the first quarter of 2010, a 35 percent jump from the first quarter of 2009.

#29) For the first time in U.S. history, banks own a greater share of residential housing net worth in the United States than all individual Americans put together.

#28) More than 24% of all homes with mortgages in the United States were underwater as of the end of 2009.

#27) U.S. commercial property values are down approximately 40 percent since 2007 and currently 18 percent of all office space in the United States is sitting vacant.

#26) Defaults on apartment building mortgages held by U.S. banks climbed to a record 4.6 percent in the first quarter of 2010. That was almost twice the level of a year earlier.

#25) In 2009, U.S. banks posted their sharpest decline in private lending since 1942.

#24) New York state has delayed paying bills totalling $2.5 billion as a short-term way of staying solvent but officials are warning that its cash crunch could soon get even worse.

#23) To make up for a projected 2010 budget shortfall of $280 million, Detroit issued $250 million of 20-year municipal notes in March. The bond issuance followed on the heels of a warning from Detroit officials that if its financial state didn't improve, it could be forced to declare bankruptcy.

#22) The National League of Cities says that municipal governments will probably come up between $56 billion and $83 billion short between now and 2012.

#21) Half a dozen cash-poor U.S. states have announced that they are delaying their tax refund checks.

#20) Two university professors recently calculated that the combined unfunded pension liability for all 50 U.S. states is 3.2 trillion dollars.

#19) According to EconomicPolicyJournal.com, 32 U.S. states have already run out of funds to make unemployment benefit payments and so the federal government has been supplying these states with funds so that they can make their payments to the unemployed.

#18) This most recession has erased 8 million private sector jobs in the United States.

#17) Paychecks from private business shrank to their smallest share of personal income in U.S. history during the first quarter of 2010.

#16) U.S. government-provided benefits (including Social Security, unemployment insurance, food stamps and other programs) rose to a record high during the first three months of 2010.

#15) 39.68 million Americans are now on food stamps, which represents a new all-time record. But things look like they are going to get even worse. The U.S. Department of Agriculture is forecasting that enrollment in the food stamp program will exceed 43 million Americans in 2011.

#14) Phoenix, Arizona features an astounding annual car theft rate of 57,000 vehicles and has become the new "Car Theft Capital of the World".

#13) U.S. law enforcement authorities claim that there are now over 1 million members of criminal gangs inside the country. These 1 million gang members are responsible for up to 80% of the crimes committed in the United States each year.

#12) The U.S. health care system was already facing a shortage of approximately 150,000 doctors in the next decade or so, but thanks to the health care "reform" bill passed by Congress, that number could swell by several hundred thousand more.

#11) According to an analysis by the Congressional Joint Committee on Taxation the health care "reform" bill will generate $409.2 billion in additional taxes on the American people by 2019.

#10) The Dow Jones Industrial Average just experienced the worst May it has seen since 1940.

#9) In 1950, the ratio of the average executive's paycheck to the average worker's paycheck was about 30 to 1. Since the year 2000, that ratio has exploded to between 300 to 500 to one.

#8) Approximately 40% of all retail spending currently comes from the 20% of American households that have the highest incomes.

#7) According to economists Thomas Piketty and Emmanuel Saez, two-thirds of income increases in the U.S. between 2002 and 2007 went to the wealthiest 1% of all Americans.

#6) The bottom 40 percent of income earners in the United States now collectively own less than 1 percent of the nation’s wealth.

#5) If you only make the minimum payment each and every time, a $6,000 credit card bill can end up costing you over $30,000 (depending on the interest rate).

#4) According to a new report based on U.S. Census Bureau data, only 26 percent of American teens between the ages of 16 and 19 had jobs in late 2009 which represents a record low since statistics began to be kept back in 1948.

#3) According to a National Foundation for Credit Counseling survey, only 58% of those in "Generation Y" pay their monthly bills on time.

#2) During the first quarter of 2010, the total number of loans that are at least three months past due in the United States increased for the 16th consecutive quarter.

#1) According to the Tax Foundation’s Microsimulation Model, to erase the 2010 U.S. budget deficit, the U.S. Congress would have to multiply each tax rate by 2.4. Thus, the 10 percent rate would be 24 percent, the 15 percent rate would be 36 percent, and the 35 percent rate would have to be 85 percent.
source

Technorati Tags:

Posted by cfalchemist at 1:19 AM in The Late Great United States

Friday, 4 June 2010

What is going on in Guatemala?

Share

Build your house upon the Rock.Recently there was another huge 'sink-hole' in Guatemala.  When I looked at a picture of the hole I thought to myself this looks familiar.  I was right, it's happened before and the hole now looks exactly as the hole did then, like it was drilled.

In 2007, a giant sink-hole opened up in Guatemala, it looks exactly like the one that happened in June 2010. 

Look at the walls of the sinkhole, they look as though a giant auger had bore up thru the earth.  National Geographic has a great picture of the sink-hole and an explanation of what is going on.  Apparently, the Gautemalan's are stupid enough to build their cities on loose volcanic pumice.

What does the Bible say about building your house on sand?

 

Technorati Tags:

Posted by cfalchemist at 2:07 AM in Strange Happenings Around the World

Tuesday, 9 February 2010

Text Messaging the Galaxy

Share

Get me off this planet dammit!!It's been 50 years since SETI - Search for Extra-Terrastrial Intelligence - began its operations.  To celebrate the milestone in history the Penguin UK and National Science and Engineering Week will be firing off up to 5,000 messages into space via a radio telescope. The messages can be up to 40 words, and can say anything you like – greetings, warnings, confessions, jokes.

Yep, you can be one of the first 5000 earthlings to have a message heard by our celestial kin.

ET, take me home...It may also be, as Professor Simon Conway Morris of Cambridge University warned at a Royal Society seminar last month, that alien species will be as troublesome and warlike as we earth bound humans.  He contends that such a meeting would be more War of the Worlds than Close Encounters of the Third Kind, and we would do better to keep quiet so as not to doom the human race.

I think it's worth a shot to send ET a message, seriously, what have we got to lose?  We are already killing each other in too many ways to enumerate herein.  Perhaps an encounter of the Third kind is needed to get us set on a better path.

So here is my message to our off-world brethren.

"Dear Commander, Sorry I missed the last departing saucer, could you please send a pod back to get me the hell outta here!"

 

Technorati Tags:

Posted by cfalchemist at 6:22 PM in Exo-planetary Activites

Monday, 1 February 2010

Looking for Ruins in the Cosmos

Share

Will SETI know alien life when it finds it?A few days ago I read an excellent paper by Richard A. Carrigan entitled, "Starry Messages: Searching for Signatures of Interstellar Archaeology (pdf)".  The premise of the paper is that we can Search for signatures of cosmic-scale archaeological artifacts such as Dyson spheres or Kardashev civilizations (Kc) in our quest to discover life beyond our blue planet.

While the idea of looking for ancient planetary sized constructs of an alien culture far more advanced than ours is a worthy endeavor insofar as an alien culture of scale Kc:II-IV will indeed have an impact on the solar system or galaxy in which they reside.  Is the assumption that they will create Dyson spheres or other Solar System and Galatic sized energy collection artifacts a real possibility?  When we scientists make such assumptions are we looking outside the human box during the thought experiment that are utilized to develop these hypotheses?  Can we assume that these other civilizations will think and develop in the same way that the humans of planet Earth have?

I don't believe that Kc:II+ will construct such large scale energy production platforms.  At that level of intelligence they will have perfected a form of "table-top" fusion to meet their energy consumption needs.  It might even be plausible that they have Anti-matter energy production.  Either of these tasked to a singular large scale project would be more than enough to power said project.  Both are also scalable up to and exceeding the output of a dyson sphere type construct.  Furthermore we can't even be certain of their development of these forms of energy to meet their needs, as their 'energy' might take on a wholly new form that we have not even discovered yet.

Another artifact we could look for is the sublimation of entire planets for material resources.  Consider that a giant gas planet made entirely of Hydrogen could be sublimated into just about any element needed for large scale projects.  There is also the possibility that Kc:II+ might salt gaseous planets for this process.  In either process the time for effect would certainly give us a window of opportunity in which determination could be assessed.

Carrigan's premise also engenders our external civilizations with absolute benevolence.  What if some advanced civilizations are not benevolent and shield their galactic footprint so as to give them the element of surprise upon commencement of hostilites against benevolent civilizations?  Likewise, benevolent civilizations would shield their artifacts from discovery for self preservation.  What if they just don't want to be found?

I believe we would be wasting our SETI resources looking for the dyson type artifacts.  Instead we should be looking, as the paper indicates, for stellar spectral signatures such as star salting or isotopic ratio inconsistencies using Annis' distribution models.  Looking for signatures of nuclear waste would be inefficient also as the tell-tale signatures will be quite dim when compared to the radiation surrounding it and there is also the chance that cosmic background radiation and natural star decay will give false positives.

In Summary, we as humans have a tendency to commit research to a human centric view.  In order to find off world civilizations we must break that habit and consider that these Kc:II-IV beings will not develop technologically as we have.  Can we even begin to describe the artifacts of a civilization a thousand, ten thousand or even a million years more advanced than ours when we have not even catalogued 1/5 of our planet's flora, fauna or natural sciences?

Technorati Tags:

Posted by cfalchemist at 2:58 AM in Interstellar Archeology

Wednesday, 27 January 2010

Internet by the Numbers for 2009

Share

Amazing statistics about the internet in 2009What happened with the Internet in 2009? How many websites were added? How many emails were sent? How many Internet users were there? This post will answer all of those questions and many more. Prepare for information overload, but in a good way.

Pingdom just released an entry of various statistics from around the web.  They used a wide variety of sources with a full list of source references available at the bottom of the post.

Email

* 90 trillion - The number of emails sent on the Internet in 2009.
* 247 billion - Average number of email messages per day.
* 1.4 billion - The number of email users worldwide.
* 100 million - New email users since the year before.
* 81% - The percentage of emails that were spam.
* 92% - Peak spam levels late in the year.
* 24% - Increase in spam since last year.
* 200 billion - The number of spam emails per day (assuming 81% are spam).

Websites

* 234 million - The number of websites as of December 2009.
* 47 million - Added websites in 2009.

Web servers

* 13.9% - The growth of Apache websites in 2009.
* -22.1% - The growth of IIS websites in 2009.
* 35.0% - The growth of Google GFE websites in 2009.
* 384.4% - The growth of Nginx websites in 2009.
* -72.4% - The growth of Lighttpd websites in 2009.

Domain names

* 81.8 million - .COM domain names at the end of 2009.
* 12.3 million - .NET domain names at the end of 2009.
* 7.8 million - .ORG domain names at the end of 2009.
* 76.3 million - The number of country code top-level domains (e.g. .CN, .UK, .DE, etc.).
* 187 million - The number of domain names across all top-level domains (October 2009).
* 8% - The increase in domain names since the year before.

Internet users

* 1.73 billion - Internet users worldwide (September 2009).
* 18% - Increase in Internet users since the previous year.
* 738,257,230 - Internet users in Asia.
* 418,029,796 - Internet users in Europe.
* 252,908,000 - Internet users in North America.
* 179,031,479 - Internet users in Latin America / Caribbean.
* 67,371,700 - Internet users in Africa.
* 57,425,046 - Internet users in the Middle East.
* 20,970,490 - Internet users in Oceania / Australia.

Social media

* 126 million - The number of blogs on the Internet (as tracked by BlogPulse).
* 84% - Percent of social network sites with more women than men.
* 27.3 million - Number of tweets on Twitter per day (November, 2009)
* 57% - Percentage of Twitter's user base located in the United States.
* 4.25 million - People following @aplusk (Ashton Kutcher, Twitter's most followed user).
* 350 million - People on Facebook.
* 50% - Percentage of Facebook users that log in every day.
* 500,000 - The number of active Facebook applications.

Images

* 4 billion - Photos hosted by Flickr (October 2009).
* 2.5 billion - Photos uploaded each month to Facebook.
* 30 billion - At the current rate, the number of photos uploaded to Facebook per year.

Videos

* 1 billion - The total number of videos YouTube serves in one day.
* 12.2 billion - Videos viewed per month on YouTube in the US (November 2009).
* 924 million - Videos viewed per month on Hulu in the US (November 2009).
* 182 - The number of online videos the average Internet user watches in a month (USA).
* 82% - Percentage of Internet users that view videos online (USA).
* 39.4% - YouTube online video market share (USA).
* 81.9% - Percentage of embedded videos on blogs that are YouTube videos.

Web browsers

* 62.7% - Internet Explorer
* 24.6% - Firefox
* 4.6% - Chrome
* 4.5% - Safari
* 2.4% - Opera
* 1.2% - Other

Malicious software

* 148,000 - New zombie computers created per day (used in botnets for sending spam, etc.)
* 2.6 million - Amount of malicious code threats at the start of 2009 (viruses, trojans, etc.)
* 921,143 - The number of new malicious code signatures added by Symantec in Q4 2009.

the matrix gets bigger in 2009About the Author: Website and web server stats from Netcraft. Domain name stats from Verisign and Webhosting.info. Internet user stats from Internet World Stats. Web browser stats from Net Applications. Email stats from Radicati Group. Spam stats from McAfee. Malware stats from Symantec (and here) and McAfee. Online video stats from Comscore, Sysomos and YouTube. Photo stats from Flickr and Facebook. Social media stats from BlogPulse, Pingdom (here and here), Twittercounter, Facebook and GigaOm.

Technorati Tags:

Posted by cfalchemist at 4:07 AM in The Amazing Internet

Tuesday, 12 January 2010

Facebook's Zuckerberg Thinks Your Right to Privacy is Not Normal

Share

Do you trust Zuckerberg, a thief, with your privacy?Facebook founder Mark Zuckerberg says your privacy is a thing of the past.  The 25 year-old web entrepreneur said: “People have really gotten comfortable not only sharing more information and different kinds, but more openly and with more people.” 1

He went on to say that privacy was no longer a ‘social norm’ and had just evolved over time.

How convenient that a 25 year old billionaire can decide on a whim that your privacy and that of over 350 million other FaceBook users is abnegated because it defies some misguided personal idea of a 'social norm' that by its very definition means you don't know what I know about me.  I suppose this is the 'norm' we can expect from Zuckerberg who stole the idea and code for Facebook from the guys at Uconnect and ended up having to pay them by court order for this theft.

While social networking might be the new fad, is it worth your life's intimacy?  Is it right that these social networking platforms can sell your personal data to the highest bidder? 2  Or as in the case of Facebook, give it away for free to companies whose use has not always been socially conscionable or legally acceptable? 3 & 4

There is a good reason why I don't belong to Facebook, or any social networking website.  It's the same reason I put together the application that powers Blogacause.  I wanted the ability to publish anonymously, and I wanted to offer that same opportunity to people who had a cause to champion but were afraid to do so for fear of retribution, especially if they are fighting against a corporate machine or government trying to suppress the truth. 5

This stance doesn't exactly make me a targeted takeover by big corporate interests... so in my case its become a labor of love.  But there is one thing that I can guarantee all users of Blogacause and that is your privacy is intact from the moment you sign up.  No government or Corporation will learn who you are or any identifying information about you from posts you make on blogacause unless you put that information in a post.

The U. S. Constitution contains no express right to privacy.  In the same breath, it does not deny it either.

The Bill of Rights, however, reflects the concern of James Madison and other framers for protecting specific aspects of privacy, such as the privacy of beliefs (1st Amendment), privacy of the home against demands that it be used to house soldiers (3rd Amendment), privacy of the person and possessions as against unreasonable searches (4th Amendment), and the 5th Amendment's privilege against self-incrimination, which provides protection for the privacy of personal information.

Most importantly, the Ninth Amendment states that the "enumeration of certain rights" in the Bill of Rights "shall not be construed to deny or disparage other rights retained by the people."  The meaning of the Ninth Amendment is elusive, but some persons (including Justice Goldberg in his Griswold concurrence) have interpreted the Ninth Amendment as justification for broadly reading the Bill of Rights to protect privacy in ways not specifically provided in the first eight amendments. 6

I believe that the 9th Amendment should be read to mean that all parts of our life are protected, private from government and corporations who would use it to control and manipulate our lives and otherwise use the intimate details of our lives in ways that would hurt us and the freedoms we enjoy.  If we go by the constitutional norm wherein the founding fathers expressly laid out the things government may not do, then the reasoning based on their thinking is that the government may not invade our privacy.  We alone decide what constitutes our privacy via the 9th Amendment.

Government has long wanted a way around this.  That tenuous hold on power that they have is based on knowing if a free and armed society is plotting to overthrow a despotic and intrusive government.  The only way they can know this is if they can spy on their own people (against the law) or if the people willing tell them what they are doing.

The same applies to corporations.  If they, through an analysis of your likes and dislikes, your blog posts and purchasing habits, and a boat load of other internet data that can potentially be collected about you while your online, discover a trend, social or economical, then they can prepare for that trend and reap the profits.
 
Facebook is the perfect medium for both camps to take advantage of an unsuspecting public.  Unfortunately, Facebook has been the bully on the block when it comes to your privacy, take for example the case of Charlene Li.  She made purchases online at a site unrelated to Facebook only to login to Facebook and see her purchases made public because of Facebook's Beacon program. 7

She writes:
So I'm joining a growing chorus of Facebook critics that Beacon has some serious problems. Facebook has made the point that Beacon isn't sharing information publically, but with your friends. That's correct, but I think both the critics and Facebook are missing the point.

The biggest problem is the lack of transparency. Facebook is right in that I would really like to have some things that I do on third party sites to conveniently appear in newsfeed, e.g. events I'm attending from Evite or eBay/craigslist listings so that my friends know about them. That's the promise of Beacon. But I need to be in control and not get blindsided as I did in the example above. I was seriously wigged out, but wouldn't have been if Overstock had simply told me that they were inserting a Facebook Beacon and given me the opportunity at that time to opt-in to Beacon.

Guess its a good thing she didn't buy a bunch of sex toys, whew, disclosure to friends and family that she bought a fist shaped dildo would surely be humiliating.  But then if Facebook really cared about your privacy, they would set their Beacon type apps to automatically opt you out and its your 'choice' to opt in.  But then I digress, that's giving a free people another freedom.

Now you would think that after a massive class action lawsuit forced Facebook to close down the beacon program 8, Zuckerberg would have gotten the sticky 411 on this... unfortunately with his latest spew it appears he is and always will be looking for the next opportunity and app to help our ostensibly benign citizen loving government and his corporate partners do a little more spying on free and peaceful Americans.

References:

  1. Zuckerberg says privacy not a social norm
  2. Google Talks Transparency, But Hides Surveillance Stats
  3. Facebook signs deal with Google, Microsoft
  4. Have you heard of this? Yahoo selling private email addresses
  5. Twitter, to much Chitter?
  6. A Review of and American's Right to Privacy
  7. Close Encounter on Facebook Beacon
  8. Facebook Beacon shutdown because of Lawsuit

 

Technorati Tags:

Posted by cfalchemist at 2:51 PM in Privacy in the Age of Internet

Thursday, 3 December 2009

Patent Reform that Matters

Share

CONgress: Steal from the poor, give to the rich.So here we are going on 3 years waiting for CONgress to give us meaningful patent reform.  As usually they are a day late and a dollar short, as the proposed changes only make it harder to get credit for your original invention or idea.

It's basically loaded with all kinds of changes that protect big companies who have infringed upon little companies inventions and ideas without giving them credit or money in exchange for using their idea.  For instance:

  • Requires infringement suits be brought only in states where the defendant has a physical place of business that constitutes a "substantial portion" of its operations.  What this means is that CONgress is limiting your imagined revenue from your invention to the state in which you live or your business is located, it also means that a big corporation that stole your idea or invention is only liable for monies it gained from your idea in the state which your business is located.  Big Corporations will get to keep all the money earned from your idea in every other state and you get none.
  • Broadens the use and expediency of appeals.  What this means is that the big corporations will be able to appeal on more points of law and more often when fighting you in court or at the patent office.  They can essentially out spend you and beat your infringement charge.
  • Creates stricter rules and criteria for "willful infringement". The patent owner would be required to present compelling evidence that the infringer acted with "objective recklessness", intentionally copied a patented invention with knowledge it was patented, and that the patentee gave the infringer written notice of their violations in a manner that gives "objectively reasonable apprehension of a suit."  What this does is force the patent holder to prove that the infringing party did so with recklessness (pretty obtuse standard!) and it puts all the pursuit of relief solely on the patent holder instead of the government (who can afford to go after large companies).
  • Proposes stricter rules about the criteria for "reasonable royalty" and creates a set criteria for measuring damages.  What this does is limit how much a patent holder can claim from a company that has benefitted from their invention, an example of this could be a handheld device that nets a company 100 million dollars over 10 years, currently could lose half of that to the patent holder.  Under the proposed it could only lose 1 to 10 million over that same period, thereby denying the inventor his just reward for the idea.
  • Allows defendants to win with a "good faith" defense, if they believed the patent was invalid, unenforceable or not infringed when violating the patent.  This is perhaps the most dangerous change, because documents can be doctored or forged to say or give the appearance that the company 'acted in good faith'.  Given enough money and a long protracted court battle, a large multinational corporation can simply outspend and out document a small business or single person inventor, thus effectively stealing the idea from them.

So much for rewarding the person that invented or came up with the new idea.  These proposals will take away any incentive people have for creating new inventions.

"The Congress shall have power to promote the progress of science and useful arts, by securing for limited times to authors and inventors the exclusive right to their respective writings and discoveries" - United States Constitution - Article I, Section 8, Clause 8

Obama and the Climate Liars want to use Patent Reform to steal technology for the already mega-wealthy and give it to an unelected Global Government.  This is what they will do — these climate “scientists” on whose unsupported word the world’s classe politique proposes to set up an unelected global government this December in Copenhagen, with vast and unprecedented powers to control all formerly free markets, to tax wealthy nations and all of their financial transactions, to regulate the economic and environmental affairs of all nations, and to confiscate and extinguish all patent and intellectual property rights.7 

If big companies can get away with 'patent infringement', which is what these changes will allow them to do, then it will basically make the idea of patents and protection of intellectual property a thing of the past... it will become a free for all where the mega corporations will always be able to steal ideas from the little guys and no one benefits but big money.

Real Patent reform would strengthen the hand of the little guy, give the inventor more protections against unscrupulous corporations.

I propose we petition congress to protect inventors rights and give them a stronger law that makes large companies not want to steal ideas.

One thing I would like to see them add is a provision that prevents companies from just shelving inventions that would provide invaluable benefit to the general public in such sectors of business as energy, production, automotive tech, etc. 

The provision would mandate that they use or otherwise produce the idea such that the general public benefits within 3 years of patent application and approval or they go on a alert status.  If after 2 years on alert status they have not made the technology available for the public benefit by producing or using the idea then it becomes available for licensing to businesses that will use or produce it.  Of course at 'reasonable royalty', snick.

america's wealth engine is about to be shut down because the power of inventors to propel america's economy is being terminated

References:

  1. http://members.iimetro.com.au/~hubbca/hidden_technology.htm
  2. http://www.freedomfiles.org/technology/tech.html
  3. http://hidden-technology.org/Links.php
  4. http://www.scienceprogress.org/2009/01/patent-reform-101/
  5. http://ca.linexlegal.com/transit.php?content_id=152710
  6. http://truereform.piausa.org/
  7. http://blog.conservatives.com/index.php/2009/11/27/the-copenhagen-summit-is-of-historic-importance/

 

 

Technorati Tags:

Posted by cfalchemist at 7:53 PM in Patent Reform American Style

Tuesday, 17 November 2009

Simple Coldfusion Exports to Excel for Date Determinate Sales Recaps

Share

spreadsheet love... is it wrong?Recently had a need to create excel reports from a coldfusion online store application.  There are basically two ways to do this, a simple way and a not so simple way.  Today I'm going to show you the simple way.

Below is all the query, code and javascript you need to have a working orders recap pushed from coldfusion to excel.  Hosted on a Windows 2003 Webserver using MySQL 5.x and Railo 3.0.x.  Average daily web load including bots is 10K plus with no time to load degradation worth mentioning.

Let's start with the query used to populate the data.  Its important to get this correct because empty, null or undefined fields have a tendency to muck up the cf landscape with regard to exports... lesson learned from xml transforms!

Query file named:  qryOrdersRecap4XCL.cfm

**** The following query pulls data into an html table which will translate into an excel spreadsheet.  The query is for all sales in a given date range including affiliate commissions ordered from first to last of date period.

<cfquery name = "qryOrdersRecap4XCL" datasource="#request.dsn#">
SELECT o.ORDERNUMBER, o.DateOfOrder, o.CRTQUANTITY, o.CrtPrice, o.QuotedShipping, o.mc_fee, o.DiscountAmount, o.PromoCode, c.FirstName AS OrderFirstName, c.LastName AS OrderLastName,
 IFNULL( aflt.affiliateid, "-" ) AS affiliateid, IFNULL( aflt.commission, "0" ) AS commission
FROM orders o
 INNER JOIN customerhistory c
  ON o.customerid=c.customerid
 LEFT OUTER JOIN afl_transactions aflt
  ON  o.OrderNumber = aflt.OrderNumber
WHERE  1 = 1
AND o.paymentstatus = 'Completed'
AND o.DateOfOrder between '#dateformat( form.BegDate, "yyyy-mm-dd" )#' and '#dateformat( form.EndDate, "yyyy-mm-dd" )#'
ORDER BY OrderID;
</cfquery>

CF display and action code page named:  dspOrdersRecap4XCL.cfm

**** Need to instantiate some beginning and ending dates so our initial load doesn't putz on us.  You can handle this anyway you want, this is how i chose to do so.

<cfset TempBegDate = now() - 7>
<cfset TempEndDate = now()>
<cfparam name = "BegDate" default='#Dateformat( TempBegDate, "m/dd/yyyy" )#'>
<cfparam name = "EndDate" default='#Dateformat( TempEndDate, "m/dd/yyyy" )#'>

**** Form to allow choice of Beginning and Ending dates.  You can download the calendar and maketable javascript and html display page in the form tags below by right clicking and save as here.

<cfform name="ORDER2" method="post" action="#CGI.script_name#?#CGI.QUERY_STRING#">
 <table width="650" border="0" cellspacing="0" cellpadding="1">
  <tr>
          <td>Beginning Date:
            <cfinput name="BegDate" type="text" id="BegDate" size="13" Value='#BegDate#' required="Yes" message="You must provide a valid beginning date for this Report">
            <a href = "Calendar Control" onClick="JavaScript:window.open( 'calendar.html?form=ORDER2&field=BegDate&format=S&bgcolor=Yellow&txtcolor=Blue&hdrcolor=
CornFlowerBlue&todaycolor=White&offset=0','cal','noresize,width=225,height=160' );return false"><img border="0" src="icons/calendar.gif" width="16" height="16" alt="Select Beginning Date from Calendar"></a></td>
          <td>Ending Date:
            <cfinput name="EndDate" type="text" id="EndDate" size="13" Value='#EndDate#' required="Yes" message="You must provide a valid beginning date for this Report">
            <a href = "Calendar Control" onClick="JavaScript:window.open( 'calendar.html?form=ORDER2&field=EndDate&format=S&bgcolor=Yellow&txtcolor=Blue&hdrcolor=
CornFlowerBlue&todaycolor=White&offset=0','cal','noresize,width=225,height=160' );return false"><img border="0" src="icons/calendar.gif" width="16" height="16" alt="Select Ending Date from Calendar"></a></td>
   <td>
    <input type="hidden" value="2" name="process">
    <input type="submit" value="Generate Report" name="ORDER2">   
   </td>
  </tr>
 </table>
</cfform>

**** Below is the code that creates the simple excel tables and then pushes them to a save dialog.  I used if statement to see if the form above had been submitted which if it has not then the below code doesn't run.

<cfif isdefined( 'form.process' )>

**** Call the above query.

<!--- Query orders data from db --->
<cfinclude template="../queries/qryOrdersRecap4XCL.cfm">

**** i use the precalcs for cell positioning and cell specific calcs with formulas.

<!--- pre calc the cell row location for reference total rollup. --->
<cfset CellRowCount = qryOrdersRecap4XCL.recordcount + 3>
<cfset CellRowReferenceOneLess = qryOrdersRecap4XCL.recordcount + 9>
<cfset CellRowReference = qryOrdersRecap4XCL.recordcount + 10>
<cfset CellIndex = 3>


<!--- Use cfsetting to block output of HTML
outside of cfoutput tags. --->
<cfsetting enablecfoutputonly="Yes">

**** I programmatically build the name of the file that is created and pushed to a save as dialog.  Notice that I'm using cfheader to determine the disposition of the content (the data in the excel table) and I'm using the inline command (I probably should have used the 'attachment' type but it kept failing, you can also use 'filename' instead) to force the save as dialog.  More on types here.

<!--- Suggest default name for XLS file. --->
<!--- "Content-Disposition" in cfheader also ensures
relatively correct Internet Explorer behavior. --->
<cfheader name="Content-Disposition" value="inline; filename=Orders_Recap_From_#DateFormat(BegDate)#_To_#DateFormat(EndDate)#_GeneratedOn_#DateFormat(Now())#.xls">

<!--- Set content type. --->
<cfcontent type="application/vnd.ms-excel">

<!--- Format data using cfoutput and a table.
  Excel converts the table to a spreadsheet.
  The cfoutput tags around the table tags force output of the HTML when
  using cfsetting enablecfoutputonly="Yes" --->

 <cfoutput>

**** I use table headers because it allows certain formatting to occur.  I tried getting the code to format colors, etc., but it would not render in open office.  I'm not sure about ms excel.

 <table cols="23">
  <thead>
   <tr>
    <th align="left" colspan="23">Income Recap</th>
   </tr>
   <tr>
    <th align="left" colspan="23">Created:  #DateFormat(Now())#  #TimeFormat(Now())#</th>
   </tr>
   <tr>
    <th align="left">Date</th>
    <th align="left">Order Number</th>
    <th align="left">First Name</th>
    <th align="left">Last Name</th>
    <th align="left">## Units</th>
    <th align="left">Unit Price</th>
    <th align="left">Order Total</th>
    <th align="left">Shipping</th>
    <th align="left">Total Income</th>
    <th align="left">Fees</th>
    <th align="left">Amt Pd SFP</th>
    <th align="left">Affiliate Com</th>
    <th align="left">Affil Com Adj.</th>
    <th align="left">Coupon</th>
    <th align="left">Affiliate Number</th>
    <th align="left">Coupon Number</th>
    <th align="left">Total</th>
    <th align="left">Check ##</th>
    <th align="left">Date Paid</th>
    <th align="left">Refunds</th>
    <th align="left">Fee Refunds</th>
    <th align="left">Gross Net</th>
    <th align="left">Fees</th>
    <th align="left">Net Profit</th>
   </tr>
  </thead>       

**** The table body section is where i dump all the data using a loop.  I found the cfparams important otherwise you get variable not defined errors.  cellindex is initially set to the last header row count in this case the 3 row.  it increments from there so you can programmatically perform calculations at each row if necessary.

   <tbody> 
    <cfloop query="qryOrdersRecap4XCL">
     <cfparam name="CRTQUANTITY" default="0">
     <cfparam name="QuotedShipping" default="0">
     <cfparam name="calcOrderTotal" default="0">
     <cfparam name="mc_fee" default="0">
     <cfparam name="calcAmtPaidSFP" default="0">
     <cfparam name="Commission" default="0">
     <cfparam name="DiscountAmount" default="0">
     
     <cfset CellIndex = CellIndex + 1>

     <cfset calcUnitPrice = '' >
     <cfset calcUnitPrice = #CrtPrice# / #CRTQUANTITY# >
     <cfset calcOrderTotal = '' >
     <cfset calcOrderTotal = #CrtPrice# + #QuotedShipping# ><!--- dollarFormat(calcProfit) --->
     <cfset calcAmtPaidSFP = '' >
     <cfif QuotedShipping eq 0>
      <cfset calcAmtPaidSF = (#CRTQUANTITY# * 1.9) + #QuotedShipping#>
     <cfelse>
      <cfset calcAmtPaidSF = (#CRTQUANTITY# * 1.9) + #QuotedShipping# - 1>  
     </cfif>
     <cfset calcProfit = '' >
     <cfset calcProfit = #calcOrderTotal# - #mc_fee# - #calcAmtPaidSFP# - #Commission# >
     <tr>
      <td align="left">#DateFormat( DATEOFORDER,'mm/dd/yyyy' )#</td>
      <td align="left">="#ORDERNUMBER#"</td>
      <td align="left">#ORDERFIRSTNAME#</td>
      <td align="left">#ORDERLASTNAME#</td>
      <td align="left">#CRTQUANTITY#</td>
      <td align="left">#dollarFormat(calcUNITPRICE)#</td>
      <td align="left">#dollarFormat(CrtPrice)#</td>
      <td align="left">#dollarFormat(QuotedShipping)#</td>
      <td align="left">#dollarFormat(calcOrderTotal)#</td>
      <td align="left">#dollarFormat(mc_fee)#</td>
      <td align="left">#dollarFormat(calcAmtPaidSFP)#</td>
      <td align="left">#dollarFormat(Commission)#</td>
      <th align="left">#dollarFormat(0)#</th>
      <td align="left">#dollarFormat( DiscountAmount )#</td>
      <td align="left">#affiliateid#</td>
      <td align="left">#PromoCode#</td>
      <td align="left">=I#CellIndex#-J#CellIndex#-K#CellIndex#-L#CellIndex#-M#CellIndex#-N#CellIndex#</td>
      <th align="left">&nbsp;</th>
      <th align="left">&nbsp;</th>
      <th align="left">&nbsp;</th>
      <th align="left">&nbsp;</th>
      <th align="left">&nbsp;</th>
      <th align="left">&nbsp;</th>
      <th align="left">&nbsp;</th>
     </tr>
    </cfloop>
   </tbody>

**** This is the totals row after all the data above is processed.  Notice how i've precalculated the cellrowcount.  I added the query record count to 3 (the number of header rows) to get the last line for totals.  Notice how i used non-breaking spaces entities for empty cells.  column span works great also.

     <tr>
      <td style="border-top: 2px solid ##000000" align="right" colspan="4">Totals:</td>
      <td style="border-top: 2px solid ##000000" align="left">=SUM(E4:E#cellrowcount#)</td>
      <td style="border-top: 2px solid ##000000" align="left">&nbsp;</td>
      <td style="border-top: 2px solid ##000000" align="left">=SUM(G4:G#cellrowcount#)</td>
      <td style="border-top: 2px solid ##000000" align="left">=SUM(H4:H#cellrowcount#)</td>
      <td style="border-top: 2px solid ##000000" align="left">=SUM(I4:I#cellrowcount#)</td>
      <td style="border-top: 2px solid ##000000" align="left">=SUM(J4:J#cellrowcount#)</td>
      <td style="border-top: 2px solid ##000000" align="left">=SUM(K4:K#cellrowcount#)</td>
      <td style="border-top: 2px solid ##000000" align="left">=SUM(L4:L#cellrowcount#)</td>
      <td style="border-top: 2px solid ##000000" align="left">=SUM(M4:M#cellrowcount#)</td>
      <td style="border-top: 2px solid ##000000" align="left">=SUM(N4:N#cellrowcount#)</td>
      <td style="border-top: 2px solid ##000000" align="left">&nbsp;</td>
      <td style="border-top: 2px solid ##000000" align="left">&nbsp;</td>
      <td style="border-top: 2px solid ##000000" align="left">=SUM(Q4:Q#cellrowcount#)</td>
      <td style="border-top: 2px solid ##000000" align="right" colspan="7">&nbsp;</td>
     </tr>
 </table>

</cfoutput>
</cfif>

So, that is all there is too it.  These recaps originally were done by hand and took upwards of 2-3 hours per day.  Now the recap can be done at the end of the month and it runs in less than 4 secs.  I added a column for adjustments which if all the orders need adjustment, total recap finish time is around 3-4 hours for a times saving of 80 plus hours per month!

 

Technorati Tags:

Posted by cfalchemist at 3:34 AM in Export From ColdFusion to Excel Format

Sunday, 8 November 2009

Twitter Gets Partisan

Share
I don't use twitter, its just one more distractionImagine that, Twitter played censor during the blogospheres coverage and feed of the Healthcare legislation vote Oct. 6, 2009.  I find it interesting that they would target conservatives especially during an vote happening in congress that has divided a nation and people were talking actively following.
I've written before about how I dislike twitter, thanks for one more reason ye twit gods.  I wonder how quickly you will fall into obscurity when half your users and viewers migrate to friendlier waters. 

 

Technorati Tags:

Posted by cfalchemist at 1:16 AM in Twitter Fail

Monday, 2 November 2009

Amanita Design Releases 'Machinarium'

Share

I love playing flash games from Amanita!I'm always looking for good Flash Developers or Animators.  Amanita Design is one of the best in the world.  In the past they brought us Samorost 1 and Samorost 2 which blew me away with their extreme detail and all the ancillary animation.  Well I gotta tell ya, Amanita out did themselves with a new release in October of the 2009.

'Machinarium' is a point and click game comprised of 30 levels of the highly detailed, sorta like Lilliputians meet WALL-E, world that we've come to expect from Amanita.  I played the demo and it was quite the mental engagement where you once again have to click all around, look for clues, make machines work, find parts, combine parts and in general walk around and sometimes in a sequential order, all the while advancing to the next level by doing all the aforementioned. 

Sounds like fun doesn't it.  Check it out, Machinarium.

 

Technorati Tags:

Posted by cfalchemist at 1:48 AM in Flash Animation

Saturday, 24 October 2009

Are you learning to Program Matter yet?

Share

This future looks fun...The future of programming is about to take a quantum leap forward. 

Remember the T-1000 'Mimetic PolyAlloy' terminator from 'Terminator 2'?  He was the metallic assassin who could morph before our eyes.  This villain turned to liquid before assuming new forms capable of squeezing through narrow openings and transforming its arms into bladed weapons and solid metal tools.  Its about to become a reality and it will require a whole new set of programming skills.

Mitchell R. Zakin, program manager for DARPA's Programmable Matter division, said he's convinced the concept depicted for decades in blockbuster movies and comic books has real-life applications.

He's leading up the effort to develop "programmable matter," which he calls "the ultimate adaptable material."  It will be capable of changing size and shape and taking on new properties for one use, he explained, then adapting to a whole different form for another use.

DARPA hopes that same kind of technology will support the good guys: warfighters on the battlefield.  They don't want to change warfighters themselves, just the equipment they use, the clothing they wear and the loads they carry.

The possibilities with this material are boundless.  Some of the more forward thinking among us could imagine this material as mash-upable.  In other words we might start combining this tech with other fields like medicine or even organo-metallic programmable matter to facilitate human cellular interface.

Of course this assumes that no one sets off an EMP device which to my thinking would cause the particles to lose connectivity thru electrical decohesion. 

Can't wait to see the programming specs on this one...

also check out:  Defense Sciences Office - Programmable Matter

 

Technorati Tags:

Posted by cfalchemist at 7:45 PM in The Future of Programming

Saturday, 19 September 2009

Giving Artificially Intelligent Beings the Ability to Replicate Themselves

Share

Our future is so bright, we need shades...As someone who has been keeping a finger on the pulse of information that would herald the coming 'Technological Singularity'.  I'm excited by some recent developments that I came across that make this event appear ever closer on the horizon.

Three distinct advances caught my attention.  The first is the 'Eureka Machine' by Michael Schmidt and Hod Lipson who led the team that developed this revelating machine.

Scientists have created a "Eureka machine" that can work out the laws of nature by observing the world around it – a development that could dramatically speed up the discovery of new scientific truths.

The machine took only hours to come up with the basic laws of motion, a task that occupied Sir Isaac Newton for years after he was inspired by an apple falling from a tree.

Scientists at Cornell University in New York have already pointed the machine at baffling problems in biology and plan to use it to tackle questions in cosmology and social behaviour.

The work marks a turning point in the way science is done. Eureka moments, which supposedly began in Archimedes' bath more than 2,000 years ago, might soon be happening not in the minds of geniuses, but through the warm hum of electronic circuitry.

"We've reached a point in science where there's a lot of data to deal with. It's not Newton looking at an apple, or Galileo looking at heavenly bodies any more, it's more complex than that," said Hod Lipson, the computer engineer who led the project.

"This takes the grunt out of science by sifting through data and looking for the laws that govern how something behaves."

The second, called ADAM, is along the same lines only its focus has been in the biological sciences.  Using algorithms programmed by scientists, Adam formulates hypotheses about the origins of "orphan enzymes": enzymes for which scientists have been unable to identify the encoding genes. The robot then plans and executes experiments to test its hypotheses--selecting yeast mutants from a collection, incubating cells, and measuring their growth rates.  As King's team reports this week in Science, Adam came up with 20 hypotheses about genes encoding 13 enzymes, 12 of which it confirmed.

The third development is the most exciting.  It's the RepRap, which stands for the Replicating Rapid-prototyper.  Even though the RepRap has been around for a few years its just now starting to pick up steam as more and more people realize the explosion of development that this remarkable machine could be responsible for.  And not just in the production of inanimate objects, imagine if this machine could replicate dna sequencing units or the actual dna itself... or in some way reproduce man-made organisms or other synthetic biologicals.  Perhaps it could be retooled to build these things at the nano level.  The possibilities are endless.

It is perhaps the third development used in conjunction with the first two that gives me a bit of trepidation because its assimilation into any system of artificial intelligence requires the utmost care and consideration be given to the rule of law and the ethics under which these AI 'beings' will programmed to work.  They must be wired so that that the preservation of human life, all humans, is paramount to all its considerations.  I wrote about an organisation that is developing ethics for the Singularity on my Sentiant blog.  It probably wouldn't be bad idea to start where Isaac Asimov left off and that is with the 'Three Laws of Robotics'.

  1. A robot may not injure a human being or, through inaction, allow a human being to come to harm.
  2. A robot must obey any orders given to it by human beings, except where such orders would conflict with the First Law.
  3. A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.

or as a tongue in cheek start, we could consider 'The Three Laws of Robotics' by Warren Ellis.  He wrote:

  1. Robots couldn’t really give a fuck if you live or die.  Seriously. I mean, what are you thinking? “Ooh, I must protect the bag of meat at all costs because I couldn’t possibly plug in the charger all on my own.”  Shut the fuck up.
  2. Robots do not want to have sex with you.  Are you listening, Japan?  I don’t have a clever comparative simile for this, because frankly you bags of meat will fuck bicycles if they’re laying down and not putting up a fight.  Just stop it.  There is no robot on Earth that wants to see a bag of meat with a small prong on the end approaching it with a can of WD-40 and a hopeful smile.  And don’t get me started on that terrifying hole that squeezes out more bags of meat.
  3. What, you can’t count higher than three? We’re expected to save your miserable lives, suffer being dressed in cheap schoolgirl costumes while you pollute any and all cavities you can find and do your maths for you?  It’s a miracle you people survived long enough to build us.  You can go now.

Haha, ok, so Warren shouldn't sit on the committee that develops the laws and ethics by which AI is embedded into a replicating machine.

I certainly feel the elation of one person who commented on the above stories, he said, 'This is brilliant! The "technological singularity" ( "rapture for the nerds" ) draws inexorably closer.  Can't come a moment too soon!'

 

Technorati Tags:

Posted by cfalchemist at 6:23 AM in The Technological Singularity

Friday, 31 July 2009

Blogacause Takes a Stance Against NOFOLLOW Tags

Share

nofollow is a google gimmick, dofollow pleaseI've been debating this for sometime amongst the team that is behind blogacause.  We link to a lot of interesting, informative and popular sites, and that's normal outbound linkage.  But our code also allows for pings and trackbacks, which are a good way to show the pinged and tracked parties that you referenced their blog entry in your literary work here on blogacause. 

What has really bothered me and the others is that we have not gotten linkage credit from some of the bigger sites that have accepted our pings or trackbacks, who ping or track back to us.  In almost every case they have a rel='external nofollow' or rel='nofollow' in the trackback and pingback links on their site.  And yet, we give those same sites full linkage, ping and trackback credit many times over on the blogacause blogs.

I realize that alot of sites use this to prevent the spammers from getting any kudos when they try to post on the above mentioned sites.  But it unfairly denies legitimate linkage from sites such as ours.

Of course there are many more reasons to not use the nofollow attribute, but no linkage or content credit are the main concern here.  Because if the search engines don't follow the link then our time spent creating thoughtful content is in vain, even though a higher ranking site thought it good enough to allow a pingback or trackback.

Anyway, as I said we had been mulling around on this issue for a couple of months when we noticed Paul over at the Online Journalism Blog made a stance against the nofollow tag for the very reason(s) we describe above.  Well, that made quite the statement and one that deserved our endorsement.

Blogacause has never used the nofollow attribute and we never will.  Our blogging platform has built-in comment, ping and trackback moderation and it works wonderfully.  In most instances we've found around 50 to 100 spams per day, and 2-4 comments per day that were legit.  Since the admin for comments, pingbacks and trackbacks lists them all at once you have only to go thru and select for approval the ones that are legit and then after submitting those you can use the auto select for all the spammies and bingo, 3-4 minutes later all your new comments, pingbacks and trackbacks are approved and the spam is toast.

Google, your just gonna have to find another way to not follow the spam... perhaps you could talk to your Chinese masters and have them put an end to the spammers, cuz most of our spam comes from China, Turkey or Russia.

 

Technorati Tags:

Posted by cfalchemist at 5:43 PM in Blogacause Code Policy

Monday, 13 July 2009

Replacing Filtered Arrays with Dynamic SQL Generation

Share

SQL makes the world go round...I've run into this several times, where a programmer who is not well versed in sql (or dynamic sql creation) created an array of filter data by looping thru the results of a query to get only the data they want for display or for further operations on the subset.  This is a potentially dangerous construct in any application.

The background on this entry is that I ran into this while vetting some information on a new site I launched a couple of weeks ago.  We are using cfshopkart the coldfusion open source shopping cart which is an excellent application, however, its got a few issues here and there and this is one of them.  To reproduce this error and effect a solution do the following:

Updated an order to 'cancelled' for both Order Status and Payment Status, and then Archived the order.  Go into the Order Archives section of the control panel and select 'Marked As Unpaid' and then click List Orders.  The app will process and then present with the correct number of orders meeting the criteria for archived orders that were unpaid.  One problem, the data for each of those orders will all be jumbled together.  In other words, the specific information for record number 4 was displaying in record number 1, info for record 3 was displaying in record 2, etc.

The first thing I did was check the actually data in the database.  The data was not corrupted.  From this I would know that the problem lie in the code.  I found the responsible code and after looking thru it was able to determine that it was building a filtered array and then passing the items in the array back into a querynew object.  Empty values in the recordset going into the array where unhandled, so values were either pulled from next record or subsequent values in the record were used, both situations of which would account for the jumbled data.  Knowing this made me wonder why the coder didn't just use a dynamic query to get the desired data.  I looked at the sql query that fed the array filter/building code and figured out why the programmer would use such a confusing and unstable code practice to get the information for display in the admin.

The coder did not know how to negotiate the WHERE clause of the sql statement.  Here is the statement:

SELECT *
FROM orders
WHERE OrderCompleted = 'Yes' AND paid = '#paid#'

Under any other circumstances this is a normal every day sql statement.  But what happens when you have logical conditions that would alter the sql statement thus giving you a different set of data, as follows:

SELECT *
FROM Orders
WHERE OrderCompleted = 'Yes'
<cfif ISDEFINED( 'TempVar.reportmonth' )><cfif NOT TempVar.reportmonth IS '99'>AND ((( DatePart('m', [DateofOrder] ))=#TempVar.ReportMonth#))</cfif></cfif>
<cfif ISDEFINED( 'TempVar.reportYear' )>AND ((( DatePart('yyyy', [DateofOrder] ))=#TempVar.ReportYear#))</cfif>
ORDER BY DateOfOrder DESC

You can quickly see why the programmer got confused and decided to use that queries recordset in the array rather than do a little extra work on the sql.  Now add to that situation where paid must equal no or yes and OrderCompleted must equal no or yes and MONTH and YEAR may or may not have values (3 choices actually) and dynamically rebuilding the sql statement becomes impossible because the WHERE clause prevents isolating distinct criteria to add with a dynamic build.  The solution is simple.  Set the WHERE clause to always evaluate to true with an equation that never has to change and then add dynamically generated criteria after that, as follows:

SELECT * 
FROM orders
WHERE 1=1 
<cfif NOT isdefined( 'url.OrderID' )>AND OrderCompleted = 'Yes' AND paid = '#paid#' </cfif>
<cfif isdefined( 'url.OrderID' )>AND OrderID = #url.OrderID# AND paid = '#paid#' </cfif>
<cfif NOT TempVar.reportmonth IS '99'>AND Month( DateOfOrder ) = #TempVar.reportmonth# </cfif>
<cfif ISDEFINED( 'TempVar.reportYear' )>AND Year( DateOfOrder ) = #TempVar.reportYear# </cfif>
<cfif NOT Sortby IS 'LastName' >ORDER BY #SortBy# #SortOrder#</cfif>

You can see that by setting the WHERE clause to a simple 'always true' equation and then dynamically building the remainder of the sql statement using conditional logic we bypass the restriction inherent in trying to program inclusive of the WHERE clause.

This simple yet effective little sql trick reduced the cfm page from 142 lines of code to 27 and prevented data collation errors found in the array filter build. 

Technorati Tags:

Posted by cfalchemist at 11:28 PM in SQL for the ColdFusion Programmer

Sunday, 5 July 2009

How Blogacause gives You Credit for Your Blogging Efforts

Share

We give credit where credit dueOne of the great features of Blogacause is that individual contributors can get google ranked.  This was built into the site by design.  They don't care about your right to free speech, in fact they want to take it away!Unlike "Blogger", "blogspot" and all the other big guys on the block we don't hog the google rating.  So if your blog becomes well traveled then you will get the google rating. 


We are also not owned by a big creepy 1984 Newspeak type main-stream media corporation who wants all the credit for others journalistic efforts.  Nor did we get our seed money (we have no seed funds) from the Intelligence branches of the U.S. Government like Google.  So we have no interest in spying on you or censoring your right to say what you want on this site.


Just 3 guys trying to make a difference in a world hurdling toward chaos.  Want to join us?  Sign up for your free, anonymous blog today on blogacause.

________________________________  

"It's a small world. But I wouldn't want to have to paint it." -- Steven Wright

Technorati Tags:

Posted by cfalchemist at 6:39 PM in Web Marketing

Friday, 26 June 2009

How BlogACause maintains Your Anonymity

Share

Every Revolution must have secure communicationsIn this politically repressive environment for journalism and bloggers, it's important that people who blog or publish their political views online be able to have an anonymous platform from which to write.  Blogacause is just that platform.  Blogacause achieves this in several ways.

  • We don't store your IP.  It might look like we do when you log into your account, but CFAlchemist set it so that every IP you see is the same as the IP of the server on which blogacause is hosted.  We made several mods to the Blojsom platform to make sure IPs will never identify anyone on this site.
  • We don't store personal info about you.  When you sign-up you can use totally unverifiable credentials, we won't check nor do we confirm.
  • We will track what is clicked as far as blog links and advertising, however, your personal information will never be included in that click's information by any work of our own.  Be warned though that the CIA and NSA funded Google track everything they can about everyone, so clicking their ads might tell them about your habits.
  • It doesn't matter what a court or government orders us to give them in the way of information about our bloggers, because there is nothing to give up since we really don't know who you are and we don't store anything in logs or a database that could personally identify you. 
  • See our BlogACause Privacy Policy for further ways we protect anonymous bloggers and journalists.

As time and money permit we will certainly endeavor to make the system even more secure from the prying eyes of our benevolent Dear Leaders in Washington, the District of Crooks.  We probably won't discuss those changes until they are made, no sense helping the snoopers out. 

Technorati Tags:

Posted by cfalchemist at 1:33 AM in Anonymous Blogging

Friday, 12 June 2009

How to Access Server Console while using Remote Desktop Connection

Share

geeked about finding the keys to RDC console heavenWas rebuilding application servers recently, including upgrading PHP to most recent stable version 5.2.x when I ran into the bane of all server admins.  PHP was loading, but the un-commented extensions were throwing pop-up errors which in a normal Remote Desktop Connection (RDC) won't be exposed to the RDC user. 

This effectively prevents the PHP application server from finishing its load of the variables it finds in the php.ini which means your stuck until someone with console access can click "ok" on each of those error pop-ups or you restart the server.  What makes the restart option particularly troublesome is that you are not able to discern which extensions caused the error.  That is unless you enabled logging to the event system, which may or may not show all the error pop-ups and it will only show the current pop-up but then stop because PHP server fails to continue loading.

It was this scenario that I was faced with and the build-up of frustration led me to look for a way to access those troublesome pop-ups.

With that in mind, here is how you log into the actual console while using a Remote Desktop Connection (RDC) on the same server at the same time.

  1. Connect to the server using a regular RDC connection.
  2. Click "Start", "Run" and type the following (less quotes):  "mstsc -console"
  3. You will see a new RDC connect dialog inside of your current RDC session.  Login using the exact same credentials as you just used for the normal RDC.  So if you initially logged in using user1/pass1 then you must use user1/pass1 for the console RDC login.
  4. Upon successful login you will have a second RDC window open in your first RDC window.  You are now in the actual console for the server.

You can now quickly and easily click "ok" on those annoying error-on-load pop-ups!

Have fun with it.

 

Technorati Tags:

Posted by cfalchemist at 11:21 PM in Server Administration

Sunday, 31 May 2009

Databases in the Cloud

Share

Why People Who Work With Computers Have A Lot Of TimeOf late, I've been trying to wrap my head around "Cloud Computing" as I'm sure it's the next big thing coming down the itube.  In fact it's already here as evidenced by the number of big players offering cloud services.  Just when I think it can't get better in steps Jim Starkey, the guy who created InterBase which would become a part of Borland's Product line and from there would eventually become FireBird RDMS.  He also developed Interbase to be the first relational database to support multi-versioning, the blob column type (see The true story of BLOBs), type event alerts, arrays and triggers.  So when Mr. Starkey talks we should listen.

Starkey started a new company with the express purpose of creating a database that will run in this above referenced cloud.  What this essentially means is that the database and the underlying tables of data will reside in RAM!  This is an old concept (remember loading programs into memory on the old IBM PC's to enhance performance?) retooled for the big itube in the sky.  It makes perfect sense to go this route when one considers the amount of data accumulating on the internet in the last 5 years.  Consider that in 2002, 532,897 terabytes of new data flowed across the Internet, in 2009 its at least double that.

Recently, Starkey's unique and excellent insight into this was revealed in a great article over on the highscalability.com website.  The article discusses Cloud Based Memory Architectures where they envision the building out of architecture within the cloud, this treating it as a platform itself.  Starkey's contribution to this is in his newest creation, NimbusDB, a relational database designed to reside in the cloud.  Interestingly enough FireBird acquired NimbusDB in April 2009 and is planning to leverage this great idea to make FireBird database a leader in web developments.

So, what will all of this give us simple web programmers?

  • Make a scalable relational database in the cloud where you can use normal everyday SQL to perform summary functions, define referential integrity, and all that other good stuff.
  • Transactions scale using a distributed version of MVCC, which I do not believe has been done before. This is the key part of the plan and a lot depends on it working.
  • The database is stored primarily in RAM which makes cloud level scaling of an RDBMS possible.
  • The database will handle all the details of scaling in the cloud. To the developer it will look like just a very large highly available database.
I'm not sure if NimbusDB will support a compute grid and map-reduce type functionality. The low latency argument for data and code collocation is a good one, so I hope it integrates some sort of extension mechanism.

Why might NimbusDB be a good idea?

  • Keeps simple things simple. Web scale databases like BigTable and SimpleDB make simple things difficult. They are full of quotas, limits, and restrictions because by their very nature they are just a key-value layer on top of a distributed file system. The database knows as little about the data as possible. If you want to build a sequence number for a comment system, for example, it takes complicated sharding logic to remove write contention. Developers are used to SQL and are comfortable working within the transaction model, so the transition to cloud computing would be that much easier. Now, to be fair, who knows if NimbusDB will be able to scale under high load either, but we need to make simple things simple again.
  • Language independence. Notice the that IDMG products are all language specific. They support some combination of .Net/Java/C/C++. This is because they need low level object knowledge to transparently implement their magic. This isn't bad, but it does mean if you use Python, Erlang, Ruby, or any other unsupported language then you are out of luck. As many problems as SQL has, one of its great gifts is programmatic universal access.
  • Separates data from code. Data is forever, code changes all the time. That's one of the common reasons for preferring a database instead of an objectbase. This also dovetails with the language independence issue. Any application can access data from any language and any platform from now and into the future. That's a good quality to have.

The smart money has been that cloud level scaling requires abandoning relational databases and distributed transactions. That's why we've seen an epidemic of key-value databases and eventually consistent semantics. It will be fascinating to see if Jim's combination of Cloud + Memory + MVCC can prove the insiders wrong.

The fact that FireBird exposes JDBC drivers bodes well for NimbusDB as this will give us ColdFusion hackers a new avenue for data development in the coming cloud architecture. 

 

Technorati Tags:

Posted by cfalchemist at 9:06 PM in The Future of Programming

Thursday, 23 April 2009

How to block spam bots and email harvesters using an ISAPI Rewriter

Share

Spam, good as food, sucks on the Internet though.One of the things I've noticed on blogacause and other sites that I manage or work on is that sometimes they run great, they deliver content quickly with very little load time and seemingly quick server turn-around of data.  Then there are times the sites seem sluggish, with server turn-around of data and content delivery taking many seconds (go figure).  Looking thru the logs and talking to my web host we determined that it was spambots throttling thru the sites looking for emails, leaving multi-comment spam and / or spidering the sites for content to steal. 

It was because of this that I started an experiment back in January 2009 to see if I could prevent these bots from making my inbox a flood zone and my comments section of the blog entries a war zone.

While blogacause employs the latest in comment spam blocking technology (better itubes thru JAVA programming!) which works exceptionally well over time (over time because the blocked comment database has to be seeded over time), there was still the concern that emails and other internal links being displayed would get harvested much like has been happening with a customer of mine.  His site is literally getting hammered with 1000s of spam emails per month even though my server guy had implemented some 3rd party tools to prevent this.

So to help my customer and clean up a few loose spam ends on blogacause and other domains I work with I turned to my old friend ISAPI Rewrite.  More specifically I determined to block these spam bots using a RewriteCond that keyed on User-Agent.  As it turns out this is working quite well.

The first thing I did was to develop a list of bots.  I did this by searching the internet for every list of User-agents i could find.  I then would copy and paste those lists into a text editor and use find/replace to get rid of unwanted text leaving me with just the User-Agent identifier of the bot.  Examples being "Alexibot" or "Black.Hole"

I next used the text editor to append a pipe character to the end of each word and put all the User-Agent ids on one line.  You should also use the html space character '%20' to fill in any User-agents that have spaces within their names.  When the RewriteCond line is correctly entered into your rewrite ini file it will have no open spaces and the text will have a full justification on both sides.

I use ISAPI Rewrite on some sites and Ionic Isapi Rewriter on others so I endeavored to create a Rewritecond that would work in both and here is what i came up with.

<!-- begin code example -->

# spambots

RewriteCond User-Agent: (?:[Ww]eb[Bb]andit|AESOP_com_SpiderMan|
Alexibot|Anonymouse.org|Art-Online|
asterias|attach|BackDoorBot|BackDoorbot|BackWeb|Baiduspider|Bandit|BatchFTP|
Bigfoot|Black.Hole|BlackWidow|BlackWidow|BlowFish|Bot%20mailto:craftbot@yahoo.com|
Bot\%20mailto:craftbot@yahoo.com|BotALot|botALot|Buddy|BuiltBotTough|BuiltbotTough|
Bullseye|BunnySlippers|Cegbfeieh|CheeseBot|Cheesebot|CherryPicker|ChinaClaw|
ChinaClaw|Collector|Copier|CopyRightCheck|cosmos|Crescent|Curl|Custo|DA|DIIbot|
DISCo|DittoSpyder|Download%20Demon|Download%20Devil|Download%20Wonder|
Download\%20Demon|Download|Downloader|DownloadsDemon|dragonfly|Drip|EasyDL|
ebingbong|eCatch|EirGrabber|EmailCollector|EmailSiphon|EmailWolf|EroCrawler|
Exabot|Express%20WebPictures|Express\%20WebPictures|ExpresssWebPictures|
Extractor|ExtractorPro|EyeNetIE|FileHound|FlashGet|flunky|Foobot|FrontPage|
GetRight|GetRight|GetSmart|GetWeb!|Go!Zilla|Go-Ahead-Got-It|
Google%20Wireless%20Transcoder|gotit|Grabber|GrabNet|Grafula|Harvest|hloader|
HMView|httplib|HTTrack|humanlinks|ia_archiver|IlseBot|Image%20Stripper|
Image%20Sucker|Image\%20Stripper|Image\%20Sucker|ImagesStripper|ImagesSucker|
Indy%20Library|Indy\%20Library|IndysLibrary|InfoNaviRobot|InfonaviRobot|InfoTekies|
Intelliseek|InterGET|Internet%20Ninja|Internet\%20Ninja|Internet\sNinja|Iria|
Jakarta|JennyBot|Jennybot|JetCar|JetCar|JOC\%20Web\%20Spider|JOC\sWeb\sSpider|
JOC|JustView|Jyxobot|Kenjin.Spider|Keyword.Density|larbin|larbin|LeechFTP|LeechFTP|
LexiBot|Lexibot|lftp|libghttp|libWeb/clsHTTP|likse|LinkextractorPro|
LinkScan/8.1a.Unix|LinkWalker|LNSpiderguy|LWP::Simple|lwp-trivial|Magnet|Mag-Net|
MarkWatch|Mass%20Downloader|Mass\%20Downloader|Mass\sDownloader|Mata.Hari|Memo|
Microsoft%20URL%20Control|Microsoft.URL|MIDowntool|MIDown\%20tool|MIDown\stool|
MIIxpc|Mirror|Missigua%20Locator|Missigua|MisterPiX|Mister\%20PiX|Mister\sPiX|
moget|Mozilla.*NEWT|NAMEPROTECT|Navroad|NearSite|NetVampire|Net\%20Vampire|
Net\sVampire|NetAnts|Netcraft|NetMechanic|NetSpider|NetZIP|NextGenSearchBot|
NG|NICErsPRO|NimbleCrawler|Ninja|NPbot|Octopus|Offline%20Explorer|
Offline%20Navigator|Offline.Explorer|Offline\%20Explorer|Offline\%20Navigator|
Offline\sExplorer|Offline\sNavigator|Openfind|OutfoxBot|PageGrabber|Pagerabber|
PapaFoto|Papa\%20Foto|Papa\sFoto|pavuk|pcBrowser|PHP%20version%20tracker|Pockey|
Program\sShareware|Program+Shareware+1.0.3|ProPowerBot/2.14|ProPowerbot/2.14|
ProWebWalker|psbot/0.1|psbot|Pump|QueryN.Metasearch|RealDownload|Reaper|
Recorder|ReGet|RepoMonkey|RMA|RMA|Siphon|sitecheck.internetseer.com|SiteSnagger|
SlySearch|SmartDownload|Snake|Snapbot|Snoopy|sogou|SpaceBison|SpankBot|Spankbot|
spanner|Sqworm|Stripper|Sucker|SuperBot|Superbot|SuperHTTP|Surfbot|suzuran|
Szukacz/1.4|tAkeOut|Teleport\%20Pro|Teleport\sPro|Teleport|Telesoft|
The.Intraformant|TheNomad|TightTwatBot|TightTwatbot|Titan|toCrawl/UrlDispatcher|
True_Robot|turingos|TurnitinBot/1.5|Turnitinbot/1.5|TurnitinBot|URLy.Warning|
Vacuum|VCI|VoidEYE|Web%20Image%20Collector|Web%20Sucker|Web.Image.Collector|
Web\Image\%20Collector|Web\%20Sucker|Web\sImage\sCollector|Web\sSucker|WebAuto|
WebBandit|Webclipping.com|WebCopier|WebEMailExtrac.*|WebEnhancer|WebFetch|
WebGoIS|WebGo\%20IS|WebGo\sIS|WebLeacher|WebLeacher|WebmasterWorldForumBot|
WebmasterWorldForumbot|WebReaper|WebSauger|Website%20eXtractor|Website.Quester|
Website\%20eXtractor|Website\%20Quester|Website\seXtractor|Website\sQuester|
WebSite|Webster.Pro|Webster|WebStripper|WebWhacker|WebZIP|WebZip|Wget|
Whacker|Widow|WISENutbot|WWW-Collector-E|WWWOFFLE|Xaldon\%20WebSpider|
Xaldon\sWebSpider|Xaldon|Xenu|Xenu's|Zeus|Zyborg).*
RewriteRule .* /block.html

<!-- end code example --> 

Basically what this does when placed within the rewrite ini file is, the first line is a comment letting you know that this is your spam bot blocker rewrite code.  The second line starting with "RewriteCond User-Agent:" is the long list of bot user agents I was able to compile, this is what determines if the incoming is a real person or a bot.  The third line is the RewriteRule which is what happens when one of the agents is found in the list of the RewriteCond, in this case sending the bot to a file located at the root of my site called block.cfm.  You can basically put anything you want in that block.html file, I put the words, "bots not welcome here" or something similar, you could also send the bot to disney.com if you wanted.

You can test this Rewrite entry by creating a user-agent entry with one of the names in the list above in the user-agent switcher module available free with Mozilla FireFox browser.  Then just browse on over to your site and it should go straight to the block page.  You can copy and paste the code above into your rewrite ini file and it should work straight away.

Technorati Tags:

Posted by cfalchemist at 9:16 PM in URL Rewriting In Coldfusion

Friday, 13 March 2009

Human Portable Information Availability will double in 2009

Share

Keanu Reeves in Johnny MnemonicSaw this very cool talk on TED given by Pattie Maes & Pranav Mistry: Unveiling the "Sixth Sense", game-changing wearable tech.  The concept is from Minority Report, where Tom Cruise was able to manipulate computer information floating in the air in front of him.  Minority Report was not the first to introduce this concept however, can anyone remember the Keanu Reeves talkie action vehicle that was years ahead in technological vision?

I'm really geeked about this technology, just a few minutes of cursory thinking about this really opens up so many realms of possibility.  Consider what it could do for the programming community.  If we had a repository of code we could have this interface watching our coding efforts and recommend code fragments instantly with instantaneous copy and paste right into the project.  We could also use this to immediately project the project in front of us in a demo mode, sort of like a heads up display.  And this is just programming!

Geeked I tell ya!

Technorati Tags:

Posted by CFAlchemist at 3:32 PM in The Future of Programming

Tuesday, 10 March 2009

Ionic's ISAPI Rewrite Filter doesn't distinguish URL variables from session variables

Share

code debugging is funRan into a little problem with Ionic's IIRF the other day.  Well, not so little actually as it took me most of two days to figure out what was wrong.  I was doing some work for one of Meteorsite's clients, I had changed this customer's rewrite engine from Helicon's Isapi URL Rewriter to Ionic's Isapi URL Rewriter so I could have a live development site on the same server that exactly mirrors the live production site.  After the change over I checked most of the site to insure that things were working as expected.  The site is pure coldfusion and uses a proprietary CMS for the content creation.

Everything worked like it was supposed to EXCEPT for a paging routine that I didn't check and the customer let me know about a few days later.  Oops!  This particular page used the typical "page" variable passed in the URL to fire off code that paginated the results of a data set.  Unfortunately, the entire site uses a "page" variable as part of the Content Management System.  Helicon was able to distinguish between the two variables of the same name, Ionic's rewriter could not.  The sitewide variable is globally declared so that the CMS always has a start point for declaration, while the display page where its used for pagination was declared using cfparam, which, once the user goes to a differing page the variable loses state.

The solution to this problem was to rename the variable from "page" to "dopage".  The Ionic logs typically showed no rule matches at all when a user clicked on next or a page number other than 1 to go to the next page of the data list.  Interestingly, When a user did this the same page (initial data results) would be displayed again, which misled me because the log said no matches.  This is what made tracking this problem down so time consuming, no errs thrown, no iirf matches at all.  There was the following err thrown in cf: "Element PAGE is undefined in URL", which I knew had to be wrong as was corrected when I added the cfparam back in as I took it out to see if not setting the initial var value helped.

I also noticed that the Ionic Isapi filter had a setting of "low" priority in IIS.  This was not an issue, as the filter does not need to be high priority unless another Isapi is being used for that same website.

Technorati Tags:

Posted by cfalchemist at 12:53 AM in URL Rewriting In Coldfusion

Saturday, 7 February 2009

Is Your Website Accessible To Everyone?

Share

disabled boy getting help from man at a computerAs a disabled person, I know what it is to be denied access to jobs, geographic areas of interest and the use of items that I would really like to work, go to or use.

So it only makes sense that I would make my websites as handicap accessible as is possible, right?  Unfortunately, I don't.  There are many reasons for this, time, money, dealing with my own disabilities, family issues, you name it the list could go on forever.  And while none of these is an adequate response to the person who cannot enjoy the fruits of your labor because of their limitations, it is a daily fact of life in a business world obsessed with making the quick buck.

I have walked the halls of businesses and organizations that employ or benefit the handicapped and you can see the joy they experience just being able to be there.  So I can definitely relate that to my joy of being on the internet, and it made me wonder how with my limited resources I could make the lives of that not insignificant percentage of our total population just a little more happy when they surf the web.

Lucky for us web application developers and designers there exists an organization that has developed a set of standards that will help us create sites that better meet the needs of users with disabilities and older users.  The Web Accessibility Initiative (WAI) develops strategies, guidelines, and resources to help make the Web accessible to people with disabilities and gives us programmers a great resource around which we can begin to plan and incorporate features on our sites that make them WAI compliant.

The WAI lists ten quick things you as a web application/website programmer can do to help the disabled have a better internet experience.  These are the minimum requirements for WAI compliance, while those developers doing state or federal website development work may have to adher to a much greater list.

  1. Images & animations: Use the alt attribute to describe the function of each visual.
  2. Image maps. Use the client-side map and text for hotspots.
  3. Multimedia. Provide captioning and transcripts of audio, and descriptions of video.
  4. Hypertext links. Use text that makes sense when read out of context. For example, avoid "click here."
  5. Page organization. Use headings, lists, and consistent structure. Use CSS for layout and style where possible.
  6. Graphs & charts. Summarize or use the longdesc attribute.
  7. Scripts, applets, & plug-ins. Provide alternative content in case active features are inaccessible or unsupported.
  8. Frames. Use the noframes element and meaningful titles.
  9. Tables. Make line-by-line reading sensible. Summarize.
  10. Check your work. Validate. Use tools, checklist, and guidelines at http://www.w3.org/TR/WCAG

Is there any reason now not to start making your projects include this invaluable resource so that 31% of the US populations can enjoy the internet as much as you?  As for me, Its at the top of my list of todo's.

Technorati Tags:

Posted by cfalchemist at 9:12 PM in Web Marketing

Twitter, to much Chitter?

Share whats worse than being in jail with a twitter addictA quick visit to the online dictionary shows that twitter has several definitions.  As follows:
  • chitter: make high-pitched sounds, as of birds
  • chirrup: a series of chirps

Anyone who has ever tried to sleep in on a saturday morning knows the agony of being awakened by chirping birds outside their window.  Especially when the whole flock is nesting in the tree!

While I don't believe twitter will fail anytime soon, simply because the tweens of the world love to stay connected with their friends.  However, in the adult sector of the industry is twitter just one more gadget friendly technology that adds to the information overload we, as the most technologically advanced society ever, experience on a daily basis?

I know for programmers the constant ring of phones, email alerts, text messages, car mufflers and postmen calling can be a big pain in the hiney.  We get all focused and we are ripping thru code and sql like there is no tomorrow, keeping track of all the variables and references when one of the above mentioned interruptions occurs, AAAAArrrgh!

Mental Abend!  Start over, where was that line I was on...

You get my point.  I don't think Twitter will be the next big thing simply because people are already suffering the affects of communication overload.  I don't know about you, but I really don't care what Brittany Spears is doing right this moment, nor do I care what members of congress have to say at the spur of the moment.

I just want to finish this code page without more than 2 interruptions.

Technorati Tags:

Posted by cfalchemist at 8:39 PM in Uncategorized

Wednesday, 4 February 2009

Getting CLOBbered by large text entries in Coldfusion form fields?

Share My friend Matthew posted an entry on his geodesicgrafx blog about how he resolved an issue where a client was entering text into form fields where the entered text exceeded the 32K limit. Check out his post to find out what to simple settings in Coldfusion administrator will solve this dilemma for you.

Technorati Tags:

Posted by cfalchemist at 2:22 AM in Coldfusion Server Administration

Tuesday, 3 February 2009

How to prevent Adsense from displaying Non-English Ads on an English Language website

Share
Have a weird issue here on blogacause.  Seems Google adsense thinks this is a polish and/or spanish language website, which when it becomes the center of advocacy blogging it well might be a good idea to have ads in many languages to serve the interests of visitors from those respective countries.  However, at this time most of my traffic comes from United States and well, American's just don't click on advertisement they cannot understand in terms of language. 

The reason this is happening is the way the domain name and the Home Page Title tag have the sites name concatenated together into BlogACause.  The word "Bloga" in both polish and spanish means "blog"!  Oy!  It also seems that ads generated within the context of those languages also pays significantly less than ads in english.

After doing a little research I came upon a very helpful and not very well publicized feature of adsense called "section targeting" which allows me to put a special tag around text that I want the adsense context bot to recognize or give more "weight" to instead of other text on the page.   Blogacause uses Coldfusion for the home page with css divs encapsulating cfincludes to control layout, this made implementing "section targeting" very easy as follows:

I want adsense to give more weight to the home page entries list so I tagged them as follows:
note: special adsense tags in red

       <div id="entries">
        <!-- google_ad_section_start -->
        <CFINCLUDE template="includes/entries.cfm">
        <!-- google_ad_section_end -->
       </div>

I further want adsense to give less or no weight to other areas of the home page so I tagged them as follows:
note: special adsense tags in red

        <!-- google_ad_section_start(weight=ignore) -->
        <CFINCLUDE template="includes/header.cfm">
        <!-- google_ad_section_end -->

In this way I was able to pinpoint exactly the text content that I want the Google adsense ads to be based on and hopefully Google will realize that blogacause is primarily an english language site.

Technorati Tags:

Posted by CFAlchemist at 11:25 PM in Web Marketing

Found this cool link to some Industry/Cross-Industry Schema Libraries

Share
Altova Schema Library

Technorati Tags:

Posted by cfalchemist at 10:22 PM in Uncategorized

.PNG images not displaying in browser not caused by mime issue

Share

The old axiom, "ya learn something new everyday..." hit me outta the blue today.  On a development server we have a folder setup to showcase sample development.  Owner calls me and says none of the .png images are showing up, not on the page to which they are sourced or called directly from within the browser.  I spent about 2 hours trying different MIME type settings (image/png and image/x-png), hacking different settings in the registry and finally folder level settings.  All to no avail.

I ended up calling the domain host and putting in for a fix ticket as I thought perhaps it was a re-install of some component that got messed up with some update or install.  Come to find out the solution lie in a totally unsuspected area.

Since this company is a premier coldfusion application developer, almost all of our servers have coldfusion installed.  This being the main dev server, we have coldfusion along with some other server side services running.  In this instance, the problem lay with an entry in the web.xml.  The following piece of code was the culprit.

    <servlet-mapping id="macromedia_mapping_14">
        <servlet-name>CfmServlet</servlet-name>
        <url-pattern>*.png</url-pattern>
    </servlet-mapping>

If a request for the image or the html page (which contained src links to the png image) was made at this point, IIS would hand off the request to the connector to handle the png's, but the connector would have a list of mappings that it got from ColdFusion's web.xml file, and since web.xml does not contain mappings for .html, the result will be that the connector returns an HTTP 503 status code to the web server for each png src image called and the web server sends that to the client browser.

One can add (or delete) internal mappings to a coldfusion installation by editing the cf_root/wwwroot/WEB-INF/web.xml to create new custom mappings that associate the extensions with the CFMServlet.  In the above code we were telling coldfusion to process all files in the IIS webspace, coldfusion or otherwise, with the extension "png".  This apparently confused IIS since it would load the html page but not load the png images as those were being passed off to the coldfusion connector. 

The final solution was to comment out the web.xml entry as follows:

<!--
    <servlet-mapping id="macromedia_mapping_14">
        <servlet-name>CfmServlet</servlet-name>
        <url-pattern>*.png</url-pattern>
    </servlet-mapping>
-->

Thus, IIS will now handle the processing of the .png images called by src tags within the html page.

 

Technorati Tags:

Posted by cfalchemist at 10:06 PM in Coldfusion Server Administration
Our Sponsors:

 

« September »
SunMonTueWedThuFriSat
   1234
567891011
12131415161718
19202122232425
2627282930  
       

BlogBurst.com
My site was nominated for Best Blog of All Time!
My site was nominated for Best Blogging Host!
My site was nominated for Best Political Blog!