Saturday, November 26, 2016

Small Business Special

At the dawn of the Internet, I realized that small business was likely to get the shaft while big businesses make big deals between themselves to dominate the web.

I decided that I wanted to do something to help small business; So I started making little directories for local businesses in select towns in the Mountain West.

The original idea was that I would build directories and web services for small communities. The directories would be funded by affilate ads from big business. The big businesses would pay for free services for small businesses and charities. This worked okay for awhile.

This year, I decided to experiment with selling ads directly to small businesses. The ad rate will be $25.00 for 100,000 page views. The Ads are 728x90 banners that gone in the upper fold. Note, I serve the ads in SVG and they scale to screen size. The ads can be a 728x90 banner or just plain text. I present the Text in SVG. The ads scale to screen size.

The sites show at most one ad per per page. The click through rate on my old affiliate ads was a little over one click per thousand page views.

I am only interested in local ads from small business. The directories are in the mountain west. I have select towns in Utah, Colorado, Wyoming and Montana. I have a county by county directory for Arizona.

The work flow for ordering an ad is: You select a directory and a subject within a directory. You then define the ad. The Text ads have two lines. The title line should be under 28 characters and the text line under 75.

If you have a 728x90 image on line, you can enter a link for the image. I will copy the the image to my server.

I also use box ads (336x280). These ads go on calendar events. My ad inventory for these box ads is really small. So I am not pushing the box ads.

When you order an ad I require that you give me your name and an email address.

If I approve the ad; I will place the ad on apropriate areas on my site. After placing the ad, I will send you an invoice via Paypal to your email address for $25. The invoice includes a link showing the placement along with ad stats. You can then review the placement.

If you are unhappy with the placement; don't pay the invoice!

Note, I do not offer a money back guarantee after you pay the invoice. I am giving you a review period in lieue of a money back guarantee.

Some ad campaigns have a fixed duration. If your ad expires in the next 90 days, enter the expiration date. I charge only $12.50. I turn fixed duration ads off when they expire or have 40,000 page view, which ever comes first. I cannot guarantee 40,000 page views and don't offer a prorated refund as calculating a prorated refund for $12.5 is a pain in the tush.

This program is in an experimental phase. I do not mind if people order the ads just to test the program. Write in the note area that the order is a test.

Here is the ad ordering page for Park City. The first line of the program lets you select the site for your ad. Park City is the only site on my new server. This new ad program goes live as I move sites to the new server.

Wednesday, September 07, 2016

Demise of ITT Tech

Looks like The Obama Administration was successful in shutting  down ITT Tech. I wander if they will be able to shut down the University of Phoenix this year?

The closure of ITT Tech makes me sad. A decade ago the school had a curriculum that was better than most local community colleges. ITT Tech students were actually getting a higher return for the amount of money they invested in education than other schools.

ITT Tech was briefly owned by ITT and was truly focused on giving students the skill sets needed for the technology environment of the day.

Businesses tend to align with their funding source. The primary funding source was the Federal Government and guaranteed student loans.

So, instead of focusing on developing a better curriculum for less. It appears that ITT Tech took the low road and turned into a mill for processing student loans.

Even worse, ITT Tech appears to have devolved into a student loan mill during a weak job market. The poor students would pop out of the company into a soft job market and simply be umemployed and deeply in debt.

I had the misfortune of wasting two years of my life as an instructor for a student loan mill in Utah. The company was very good at getting students to sign the dotted line on the loan application, but was providing a subpar product.

Many public universities appear to be little more than student loan mills. Since the universities don't have private investors, they don't get raise the ire of the public. When public universities go bad, Democrats simply yell for higher taxes.

Anyway, now that the Obama Administration has the formula for closing down private for profit schools, I wonder how many schools he will be able to close before the end of his administration.

Tuesday, September 06, 2016

Replacing Affiliate Ads with Direct Ads

I am upgrading the Community Color Web Sites to PHP 7. I am also replacing MySQL with SQLite3 and upgrading to HTML5. It's a big project that I hope to complete this week.

As part of the upgrade I will replace the Adsense Ads and Affiliate Ads on the site with direct local ads.

I like the basic concept of affiliate advertising. A site with a product to sell offers a commission on sales. Web sites run their ads and get an occasional commission.

There are tens of thousands of merchants with affiliate programs. These merchants offer millions or products.

I believe that affiliate marketing is a good thing. Because there are so many products, web sites can run ads for things they support without compromising their message.

The problem I have with affiliate marketing is that the huge networks that offer affiliate ads aggressively track user activity. These use the information they gather to manipulate user behavior. They often engage in activities that undermine the sites that run their ads.

I believe that my sites are well enough established to break from the clutches of the big marketing firms and that I will be able to replace the ads. Currently, I have over 10,000 page views a day. My 10 year old server freezes up when I have more. I believe the new new server and improved code will be able to handle a hundred times more traffic.

I decided that the best way to handle local advertising is to sell the ads in blocks of 100,000.  I am currently getting about $30 for every 100,000 page views. Since I will bill in advance, I decided to charge $25 for every 100,000 page views. This is a super low rate of 25¢ CPM.

The new site will go live in a week or so. I would love to have a few people buy ads before the site goes live so that I can tweak the program.

The ad is a 728x90 banner that is in the upper fold of the page (between the page title and contents). I put text ads in a stylized SVG block. You can pre-order ads on my test server.

Use this form to order text ads.
Use this form to order a banner ad (you need a link to a 728x90 banner).

The ads won't go live until I switch to the new server which I hope to do soon.

I only have 10,000 page views per day (which I've split into targets). I only want ads related to the target. I don't want to show ads for Denver Lawyers on the Moab Real Estate page. The flow of the program is as follows. A person orders an ad. If I have a relevant target, I will approve and place the ad.

Some time after the new site is live, I will send the user a payment request using Paypal (Paypal accepts Visa, Mastercard, etc). The request will show the ad placement. If the person is happy, they can pay the bill. If not I will remove the ad. I am using a delayed payment instead of a money back guarantee.

Monday, September 05, 2016

Still No Date Picker in Firefox

I am bummed out. Firefox still hasn't implemented the date picker that was in the HTML 5 specs that came out a few years back.

I hold that the date picker should be provided by the browser because it gives the client a unified experience across sites. Here is a sample form with the new HTML date types. Chrome and the other browsers I tested have date pickers. Firefox does not.

This means I can't depend on the feature. Arrrggggggghhhhhhhh!

Friday, September 02, 2016

New Privacy Policy

I created a new privacy policy page for the Communtiy Color sites.

The privacy policy tells the world that [gasp] I track activity on the site.

I track the activity to see what parts of the site people visit. I use this data to figure out how to expand the site. If people are interested in sports, I add more info about sports. If they are interested in history, I add more pages about history.

Our leaders and media vilify small sites for using cookies and tracking activity. The EU requires that web sites apologize if they use cookies.

A cookie is simply a device that allows web sites to carry information between pages. I do not use cookies for casual visitors to the site. However, I do drop a session cookie when a user logs in to the site. I need the cookie so that they can modify the information on their account.


Now, I find the idea that every site provides a privacy policy to be absurd. The only privacy risk of small sites is that they might send spam if they require a user's email address. This risk is adverted by being careful in giving out one's email address. Personally, I use multiple emails addresses and never give up my most private addresses.



As for this new policy:

I've been hoping to replace my large national advertisers with small local advertisers; So, I am using the privacy policy to sell my new local advertising product.

My advertising product seeks to replace advertisements from large national advertisers that track user activity with small local advertisers that do not.

So, while I think the demand that every site includes a privacy statement to be foolish, I am not adverse to using the page to sell a product. If advertisers bought their ads directly from sites, it would help replace ads from big advertisers that create user profiles with small sites that do not.

Thursday, September 01, 2016

Online Advertising

I've been working on upgrading the Community Color sites. The process is taking longer than I had hoped.

The new design will offer targeted local advertising.

The way this works is I assign each page a target. The Design an Ad page allows advertisers to select a target and create an ad related to the target. The program will allow both text and image ads. I create the text ads with SVG.

The cost for the ads will be $25 for 100,000 ad views. That is an ad rate of 25¢ per thousand ads. This is an extremely low rate.

The catch is that it might take several years for me to display 100,000 ads on some of the smaller targets.

The new design is not yet live, but my test server is up.

The process will work as follows. Advertisers can design ads on my test server. If I approve the ad; I will send a Paypal invoice to the advertiser after the new site goes live. Advertisers can then accept the placement by paying the invoice or reject it by not paying the invoice.

You can order an ad. See what it looks like on the site and then cancel the ad just by ignoring the Paypal invoice.

It would be fun to have a few ad orders before going live. That way I could test the program with live data.

Monday, August 08, 2016

SQL Table Object

I open sourced the code for the object I use to create simple HTML tables. This is somewhat of a Swiss Army Knife object that can be used to create tables in multiple ways.

To understand the object you will want to look at both the source code and the demonstration page.
The object I use to produce forms is much more complicated. I am updating it for Forms 4.0.


NOTE: The program uses the sqlRow() function which  encapsulates the PHP PDO object. It uses the htag() function which indents the output; so that my HTML is well formatted.

Friday, August 05, 2016

Path to Citizenship?

In 2013, the US naturalized 777,416 immigrants. The chart on uscis.gov indicates that the United States has naturalized well over a half million immigrants every year this decade.

Hillary Clinton's claim that there is no "path to citizenship" is a lie. The fact that the United States continues to have the most generous immigration systems on the planet proves Clinton to be a liar. (Not surprising for a person married to a convicted perjurer).

The problem we face isn't the lack of a "path to citizenship" but the fact that that millions of people are blatantly ignoring immigration laws which makes it much more difficult to define that path to citizenship.

In today's speech, Clinton made the claim that illegal immigrants pay some $13 billion into Social Security.

I need to point out that it is the employers who pay into social security.

The true statement that employers paid some $13 billion into social security.

Quite frankly, this same amount of money, if not more, would have been paid into the system on the behalf of US citizens if the employers hired US citizens instead of illegal immigrants.

I personally do not hire illegal immigrants. Many illegal immigrants appear to be part of a shadow economy and the people in the shadow economy work in cash and do not pay social security.

The claim that Republicans are anti-immigration is a blatant lie. We have a path to citizenship proven by the half million people who make it through that path each year.

The problem is that we don't have an effective path for denying citizenship.
As for deportations, If I were president, I would make enforcing visas a priority. A visa is a contract. People violating the terms of their visa show a contempt for contracts and the rule of law.

Hillary's statement that she would only enforce immigration laws in regards to violent offenders is horrible. We need to enforce visa laws to have an effective visa system. By openly declaring that she would not enforce Visa laws, Hillary has made it more difficult to have a liberal visa system.

Aggressive enforcement of visas is not anti-immigrant because it allows for a greater liberalization of visa laws. The idea that being granted a visa should be seen as a path to citizenship is absurd.

Quite frankly, since violating the terms of a visa shows contempt of law, I would say that people who grossly violate the terms of the visa should be kicked off the path to citizenship. Showing respect for contracts, including a visa contract, should be part of the path to citizenship.

Monday, August 01, 2016

Redirects and Broken Links

The migration to the new server is going slow. I am rewriting each line of code. Oddly, my programming style is becoming more Spartan. with time.

Here is the code for the primary redirect program. A redirect program simply records a hit and sends the user to destination for a link.

Most users don't like web sites recording their links. So, I only use the redirect program on merchant ads and paid links. I only track usage for about 5% of the links in the site.

My stat counters say that the redirect program has been called 1.7 million times; So, I figure that I have sent well over 20,000,000 hits to sites listed in the directory.

There are several robots, eg Googlebot, that read the site. Many of these robots are created by companies that send traffic to web sites. I believe my local directories have had a positive impact on local commerce.

Anyway, I made two huge improvements with this new version of my redirect program.

The first is that the program now produces full blown pages, instead of a cryptic message, when links aren't found.

The really big improvement is that I decided to start recording information about broken redirects.

I did not do this before because my site verify the existence of a link before generating the code for the link.

While coding this site, I realized that, if I began using redirects for more links, then I would be in a better position to discover broken links as they occur.

So, I will probably come back and visit this redirect page after I finish the migration to my new server.

Thursday, July 21, 2016

First Page

I am still extremely unhappy with the PHP Object Model. But I simply have to move my sites to a new server or perish.

Anyway, I just created the first official page for the new design. I decided to start with something simple; So, I created the About page . Each site in the project has an about page with a blob of text about the project. I store the blob in a SQL table.

As promises I am open sourcing the code. The code for this page is four lines long. The page simply calls the framework and says: I want to print a page with this data.

Here is the code for the About Page.

Okay, I could have reduced the size of the page to three lines of code.

PS: I am still working on the CSS and overall page layout. I will finish the work on the layout after I put up several pages with more complex content.

PPS: Okay, Okay. I removed the fourth line of code. The whole point of this project is that if one has a decent framework, then thee pages themselves will be short and fast.

Monday, July 18, 2016

Recoding Site

I need to get myself in gear and start programming again.

The problem I face is that PHP deprecated the mysql_query() function and wants people to use a hideous piece of code called PDO.

I have yet to find a single implementation of PDO that does not turn my stomach. I am to the point of giving up on PHP altogether and just writing everything in C. Let's face it, the only reason I used PHP was because my webhost wouldn't let me write and compile code on the server.

PHP is a programming language that is commonly used to create HTML for display on a browser. Most PHP programmers don't care about the quality of the HTML, but I want the HTML produced by my programs to be well formed and well formatted.

PHP does not allow programmers to override the echo command; So I wrote a function called htag() which keeps track of the indentation level of the HTML code.

As for PDO, I created a function called dbConn() to encapsulate the PDO Object. I make the calls to the database with functions called sqlValue(), sqlRow() and sqlExec().

Being a good netizen, I will open source the PHP for the Community Color project on the site prog.communitycolor.com. The program includes a schema viewer which lets you see the create statements for the tables used by the site and a code viewer which lets you look at the PHP for select files in the program.

The first piece of code I present is the code viewer. This pieced of code was just a brute force program I wrote to show formatted code. It is not well designed.

The cool thing about these viewers is that they pull and display code from the live web site.

Saturday, May 21, 2016

Starting the Web Site Move

Users of the Community Color sites may have noticed that the sites are overloaded. I added some come that drops the page when the serverload is over 85%. Without that code, the sites would be crashing every hour or so.

The sites are dropping several thousand of pages each day.

This should not be happening. I bought enough resources that I should be able to handle ten times the current traffic.

The solution is to redesign the site and move to a new server. Back in December, I experimented with PHP7 on Ubuntu 14.04. Several of the features of PHP7 did not work correctly; So, I decided to wait until PHP7 was available on a Linux distribution with long term support.

That finally happened about ten days ago.

The day after I bought the new account, my father passed away. Since that event, I've been unable to get a block of time sufficient to test the server and start the migration.

This morning, I decided there was insufficient time to fully test the new server; So, I started the migration. I turned off the ability to register as a user and started the migration.

Five minutes after taking that action, a family member came to the house with ambitious plans that will consume the next three days. I probably won't get an opportunity to work on the migration until next Wednesday or Thursday.

I apologize for the inconvenience.

Thursday, May 12, 2016

In Passing

My father passed away today. It was an expected event after months in rehab and hospice; So, I didn't get a chance to work on my website migration as I had hoped. I will probably be busy for a few days.

Migration to VPS.net

Hurray, VPS.net finally added a template for Ubuntu 16.04 (Xenial Xerus). This LTS (Long Term Support) release includes PHP7. LTS means that a company called Canonical will provide security and product upgrades for 5 years.

I plan on migrating the Community Color sites to this new service. My site has been on its current server for about eight years. One should upgrade servers about every five years or so; So, this upgrade is long past due.

I will be using the VPS SSD account. The account is actually hosted on an array stack of SSD memory rather than a traditional hard disk.

I already moved my email accounts to the new service and am extremely pleased with the performance of the server.

I don't send a lot of email; So, I purchased a single node account for my mail server. The cost of a single node is $5/month or $60 per year.

Webhosts often put email same server as the email. This means that people who attack your email accounts can attack your website and people who attack your web site can get their fingers into your email.

Putting the email on its own server also frees up resources on the web server for delivery web pages.
Email tends to be disk intensive; so it is an ideal application for an SSD cloud account. I am using VPS.net. To get an account do the following:

  • Copy the number 69032. This code gives you a $10 discount on the service and gives me a $10 discount.
  • Go to www.vps.net/products/ssd-vps and select a single node for $5 month.
  • Select the data center which is closest to you. At this point in time, I would select Ubuntu operating system and the Ubuntu 16.04 template (which was just released.)
  • VPS.net will ask for billing information. Paste the number 69032 into the coupon box. This gives you $10, which offsets the cost for the first months.
  • I installed the following packages for my web server: Postfix (a mail transfer agent), Dovecot (email server). Setting up an email server is a pain in the tush. The default settings of these programs often work, but it is best to read the online manuals to fine tune the configuration.
  • I like to read email online; So, I installed Apache2 (a web server), PHP7 and SquirrelMail. (Most of the tutorials have you install MySQL, but you don't need it.
  • As only a few people use my email server. I decided to use a self-signed SSL Certificate. If multiple users use the server, you might one to get one from a certificate authority.
  • The hardest part of the installation was setting up the DNS. This is different for different domain registrars.
Setting up an email server is a real pain in the tush. But I highly recommend putting email on a separate account from the main server.

Saturday, April 16, 2016

Account Maxed

I apologize for the intermittent delays and outages on the Community Color sites. It appears that I've maxed out the resources on my account with Westhost.com. I am using the Westhost cloud service with costs $50 a month. I could double the capacity of the account by going to the next service level, but this would cost another $50/month.

But the sites don't generate $50/month in revenue!

I cannot a $50 a month upgrade!

So, what I am going to do is to switch to an SSD Cloud account on VPS.net.

The Westhost account is a managed account. I includes the CPanel management tool.

I will have to do all the management for the VPS.net account. I will have to use an SSH Shell instead of CPanel ... but I will save $20/month.

As I don't want to spend a lot of time configuring Linux. I decided to go with a basic install of the Ubuntu framework. Ubuntu goes through a little bit more testing that Debian or Centos.
I want to use the Xenial Xerus release of Ubuntu which is scheduled for release on April 21, 2016. I don't know how long it will take VPS.net to offer this on their service.

I am excited about this release.

Xenial Xerus uses PHP7 which includes some major performance improvements. I also intend to switch from using MySQL to SQLite which should also result in performance improvements.

The final problem I face is with the structure of my code.

I wrote two different versions of the site. The first version follows best practices and uses the object-oriented syntax of PHP. The second version uses structured functions.

Despite the fact that object-oriented syntax is considered to be the best form of programming. Traditional structured programming seriously outperform the object-oriented style.

The universities, Fortune 500 firms and governments that prefer class-based object oriented programming can overcome the inherent inefficiencies of this programming style by throwing more hardware at the problem.

But, even $5.00 a month is a huge difference for a small company or individual. (My performance tests all tell me that using the class-based object code in PHP will cost me $5.00 a month.)

Since I am struggling to survive, my temptation is to simply scrap all of my class-based code and just stick with functions.

This leads to my final problem: I have the naive notion that I should open source all of my code. I would be publishing a bunch of functions to people who've been taught that class-based objects are superior to functions.

So, I've been spinning my wheels trying to develop a collection of objects that do not take up more resources than traditional procedural programming. And simple can't nail down a design.

Anyway, I want to apologize for the down time people are experiencing on the Community Color sites. It would cost me $50 a month to fix the problem on my current server. So I am stuck waiting for a software release hoping to lower my costs so that I can keep the sites live.

I anticipate that I will be able to move the sites within a few days after Xenial Xerus becomes available on VPS.net. Until then, I am only able to apologize for down time. I anticipate the release being available some time in early May.

Saturday, February 13, 2016

At the Center of Every Tribe There is a Chief

Many groups and businesses these days have taken to calling themselves "tribes."

At first I thought the trend was cute. The term "tribe" has friendly echoes of community.

For the most part, when I see groups outside the Native American community using the term "tribe," I see a group that is trying to create a deeper senses of community.

I should point out that there is a long (and mostly positive) history of community organizations like the boy scouts that frequently use terms from the native culture.

But after reading blogs by self-proclaimed tribal leaders, I've started getting the willies when I come across efforts to establish a new tribalism in America. Some of the leaders of this new tribalism seem to be going beyond promoting a sense of community. They seem to want to tell people who to think.

I was perplexed by a reading a blog by a "tribal leader" of the new tribalism a week ago. This morning the sentence popped into my head: "At the center of every tribe their is a chief."

This sentence makes a nice gauge for testing groups declaring themselves a tribe.

So, lets say you have a job interview with a group using the term "tribe" in its literature. You should look closely at the political structure of the group. If you can find a person or small group in the organization trying to set themselves up as chief; you should stay clear of the company.

Self-declared chiefs in self-declared tribes tend to be control freaks and it best to stay clear of such creatures.

Control freaks are not seeking to promote community at large, but are seeking to gain power by dividing people and setting them against each other.

In tribal societies of old, the leaders often fit the model of war lords and tribalism was not an ideal society but an extremely fractured existence with the tribes set against each other in fierce conflict.

While I still associate the term "tribe" with friendly ideals about small local communities, I fear that the New Tribalism taking hold in our communities is source of division and not of unity.

Sunday, January 17, 2016

Referrer Report and Link Development

The migration to my new server is taking longer than expected. I keep hitting diversions and suffer long interruptions.

Yesterday, I had a short break; so I created a referrer report and opened a disqus forum titled Link Development.

Rather than just starting a new web site. I want to draw people into a discussion about the direction of the Internet itself.

The World Wide Web was written in a language called HTML (HyperText Markup Language). The defining trait of HTML is the Hyperlink.

Hyperlinks are an interactive feature. You can click on a link and go to a different internet resource.

The configuration of links is actually a very interesting topic, but I rarely come across people openly talking about the overall configuration of links.

Right now, the Internet is dominated by large repositories of links called "search engines." I question if this domination of link repositories is healthy because it effectively centralized power and concentrates wealth.

If centralized repositories are not the best structure, what alternatives can we develop?

I developed the Community Color web sites are simply human edited directories which list links for select towns in the mountain west. I developed the directories to investigate the natural links between local entities. I live in Salt Lake. It frustrates me to no end that there is so little local internet in the direction the Internet is headed.

But there might be people in the broader world who find a discussion of the linking structure of the Internet interesting.

The referrer report tallies up info from the REFERER variable submitted by web browsers that visit my new site. The Link Development is a stub for a section of articles on the topology of links and internet traffic and steps that individuals can take to help keep the Internet a level playing field.

I have to complete the site redesign before writing the articles. But I think it's fun to discuss web design while knee deep in the process.

Wednesday, January 06, 2016

Privacy Policy for New Site

I am working on a major upgrade for the Community Color sites.

I am developing the code on yintercept.com.

I added a code viewer so that I can claim the site is open source.

I decided to log statistics for the site in a SQLite Database.

When writing the "privacy policy" I decided to show the information that the site has collected.

I did this to emphasize that the data collected by small sites like mine is basically harmless.

The reason I track data is to answer questions about the site. For example, I want to know how many people visit a page and the amount of resources consumed by a page.

About seventy percent of the traffic on the web is robots and webcrawlers. I want to know what the robots are doing.

I want to be able to defend the site against DDOS attacks.

I learned the painful lesson that one cannot offer interactive features to the public, like a guestbook, without attracting a great deal of spam.

I require a log in for interactive features.  I use a system of User IDs and Sessions to track usage.  Interactive sites require an id, otherwise they can't respond to the things that you are doing.

The privacy concerns we face on the Internet are not the result of cookies or web owners monitoring their sites. The problem is with huge corporations (and governments) seeking to dominate the Internet by tracking individual activity in minute details.

Unfortunately, the self declare privacy rights activists use methods that make life very difficult for small sites.

The fact that small sites use cookies to provide interactive features is not a problem.  The big sites that monitor activity can do so without cookies.

I hope that my showing the details I track on the site to the public, people will learn that independent web sites are not a threat, but it will probably backfire.