Never Pay for Another Book Again

May 24, 13 by admin

In my life, I try to live frugally.  I am one of the people who refused to buy into the iPod craze and later the iPad.  I typically wait a few years before buying into new technologies.  I canceled my cable TV subscription a while back and switched to over-the-air TV broadcasts.  This is a growing trend in America due to the high costs of combining Internet and TV service (not to mention cellular service – I use pre-paid phones instead of subscriptions).

In this post I will share one of my favorite money-saving “secrets” on how to save money buying books.  Many people know that you can save money by buying e-books instead of the dead trees version.  I usually buy most of my e-books from Amazon and recently have been getting all of my books for free.  I bought a book one time for $2.99 just to try out the store several years ago.  I haven’t bought another e-book since but I have a great collection of books both classic and modern books, fiction and non-fiction.

ancient-tomeTo find really great deals on books and lots of other items, you need to use a deal aggregation site.  My favorite is DealAgg.  This site loads a list of deals from 12 of the most popular online shopping deal websites.  The list of deals is collapsed which makes searching the web page difficult.  You will need to expand each deal list by clicking on the More link at the bottom of each of the 12 lists.

If you have never searched a web page before, you do so by hitting Ctrl-F on your keyboard.  This opens a search box on the top or bottom of your browser window which allows you to enter keywords to search for items on your current web page.  Entering the search term will find the first matching item on the web page.   Use the next button to find the all subsequent matches on the page.

So now that you have opened the DealAgg web page, expanded all of the deal lists, and know how to search the web page, how do you find the free ebooks?  Simple, just hit Ctrl-F and enter the keyword ” ebook” in the search box without the quotes.  Please note there is a leading space in front of the term “ebook”.  This leading space will eliminate faulty matches to “notebook” which will appear in a lot of places.   You will want to find a item that reads something like “Amazon Kindle Top FREE eBooks at Amazon”.   When you follow this link, you will see links to books being offered for free on Amazon.  Sometimes these books are textbooks that normally sell for $40 or more.

Other searches you can do are for “nook” or “kindle”.  Using this method you can find some really great books absolutely free.  You can also use this site to find lots of other great deals.  Search for “refurb” or ” hot” or “blowout” or “free”.  This site is great for finding all sorts of deals.

The best thing about Kindle eBooks is that you don’t even have to own an Amazon branded reading device in order to read your books.   The Amazon Cloud Reader allows you to read your books on almost any device you have.  They have a Windows 8 app which I personally love.  All the books you own are stored in the cloud for free which makes them available wherever you are.

Of course this method works best if you are not picky about which titles you want to read next.  If you collect books for a while as I have, you will always have a wide selection to pick and choose from.  My library only has 65 books so far but since I’m not a voracious reader, this is just fine for me.   My library is growing at a rate of about 4 books per week thanks to free eBook downloads found at Amazon.

I would be remiss if I didn’t mention the thousands of free out-of-copyright books you can download from Project Gutenberg.  They provide high quality books in eReader formats such as mobi) which can be transferred to your favorite reading device.  Free software such as Calibre can be used to convert the book file into Amazon’s preferred format and then load it onto your device.  This requires a little bit of technical know how so you might need your son or daughter to do this for you.

I hope these tips help you to stay frugal and spend more time (not money) enjoying life!

Linux Website Deployment Strategy

May 20, 13 by kenrich

Recently, I put together a set of steps for deploying new code to our Linux websites.  Below is a list of all of the steps we take to deploy new code.  Note that this is a work in progress and is still being improved and expanded upon with each deployment.

Feel free to adopt any of these strategies for your own business.  It is always best to do deployments after the peak hours which is around midnight on the West Coast.  You should also try to keep your maintenance periods as short as possible.   Performing a dry run before the actual deployment should help you meet this goal.

Put the site into maintenance mode

Uncomment the code in the .htaccess file at the website root

# Uncomment the following to enable maintenance mode
# RewriteCond %{REMOTE_ADDR} !=127\.0\.0\.([0-9]|1[0-9])
# RewriteRule ^maintenance.html$ http://%{HTTP_HOST}/ [R,L]

Make sure to substitute your IP address in the RewriteCond so that the developers still have unrestricted access to the site for deployment and testing. You can retrieve your local IP from my former site: http://www.whatip.com/

Test that maintenance mode is activated successfully

We need to access the website from a different IP address.  See Ensure the Site is Really Live below for instructions on how to do so.

Upload the Latest Sync Code (if necessary)

If we have made updates to the synchronization code, upload this first to make sure that everything goes well.

If any database schema or data changes need to be made to support the synchronization process, make these changes manually before proceeding.

Perform the Database Schema Sync

Initiate this on the development (or staging) machine.  Analyzes differences between the local database and the production.  Prompts the user to deploy changes to production that will modify the schema and bring it into sync with local.

Perform the Database Data Sync

Much like the schema sync, the data sync will look for database records on the local machine that are out-of-sync with the production server.  It will then prompt the user to deploy these changes to production.  The user will have the ability to confirm or reject changes selectively.

Perform the Code Sync

Next we need to perform the code synchronization.  This includes server-side scripts, javascripts, resources (images, videos and .htaccess files).  An automated script will analyze and present the user with all change detected.  At this point the administrator may approve or reject changes and deploy them to production.

Smoke Test the Application

Now that all of the code and database modifications have been made, we need to verify that the site is working properly.  Since the site is available for us (due to the RewriteCond we placed in our .htaccess), we can run our tests on the live site.

 

Some tests should not be run on the live server such as those which make database changes that cannot be easily undone.  These should be done on a staging server instead.  Smoke testing usually involves a human tester going through most of the features of the site to check that they look okay.

Take the Site Out of Maintenance Mode

Comment the code in the .htaccess file at the website root so it looks like the following:

# Uncomment the following to enable maintenance mode
# RewriteCond %{REMOTE_ADDR} !=127\.0\.0\.([0-9]|1[0-9])
# RewriteRule ^maintenance.html$ http://%{HTTP_HOST}/ [R,L]

Ensure the Site is Really Live

Load your web site using a different IP than the one you excluded in your RewriteCond.  There are websites available to do this.  One of them is http://www.webpagetest.org/.

How to Setup Android Studio on Debian 7

May 16, 13 by kenrich

Android-logoLast night I installed Android Studio on Debian 7.  I use the term “install” loosely since you really don’t perform an install, you just extract the files to a folder and then run it.  After creating a project skeleton, I noticed an error when trying to run the project.  The system mentions that ADB is unable to run (well it really says it’s unavailable).  After performing some searches on Google(tm), I noticed that this was due to my having the AMD64 architecture and the ADB requires i386 references which didn’t exist on my system.

The solution was to install the i32-libs package using Apt to make all of this work.  Of course, it wasn’t as simple as this.  I had to first add the i386 (intel 386) architecture as an alternate platform to support using “sudo dpkg –add-architecture i386″.  Even that was not enough.  I had added some additional repositories to /etc/apt/sources.list that needed to be removed, then I had to  run “apt-get update” and then finally “apt-get install i32-libs”.  Finally, my system was ready and ADB ran properly (you can test this by running “./adb version” in the platform-tools folder.

So now my skeleton builds and runs using the virtual devices.  I believe the install took about a gigabyte of space, but that’s okay.  Oh, I should also mention that Android Studio recommends using the Oracle (Sun) Java runtime and tools since there are known bugs with the openjdk that comes installed default with Debian 7.  You have to add a third-party repository (from Canonical, makers of Ubuntu Linux) to your sources.list in order to get this installed (Google on how to do this).   With these two steps I was up and running and ready to develop Android applications.

Fun times with InstallShield 2009

May 05, 13 by kenrich

installshieldLately, I’ve been fighting with InstallShield (because there is no other better way to put it) to manage some basic installer functinoality.  Actually, I’ve been learning all the various different facets of the software off and on over the past few months.  I know that its used by a lot of different companies and seems to be powerful to do lots of different things, but I have to say that the experience has left me kind of sour.

I have to admit that a lot of the problems I have dealt with have been my own making.  But there were others that were clearly a fault of InstallShield itself.  Now bear in mind that I was using InstallShield 2009 Premier and not the latest version, so some of this may not apply to the newest version.  An upgrade to 2012 is in the works but these issues are only in regards to 2009.

First of all, let me mention the project file format.  It is a combination of binary and plain text.  This makes it virtually impossible to do change revision on the project files.  It makes it difficult for users to see what changes were made and how to undo those changes.  I am dealing with Basic MSI projects and sometimes I can see XML based rules and sometimes I cannot.  I haven’t been able to figure out why this is the case, but its very annoying.

Second, I’d like the mention the horrible user interface.  I get the fact that they are trying to make it look like an IDE (and * have no problem with that).  The tree node navigation is a little non-standard but I guess it is somewhat consistent.  I am wondering what’s with the tabs though.  Sometimes they are on the top and sometimes on the bottom.  You also have the same tables (like string tables) represented in multiple ways in the application.  The Features and Setup nodes mostly represent the same information except one allows you to manage components and one does not.

Next there is the issue of error reporting.  Many of the errors can be cryptic such as when you have a file path which is too long.  Sorry InstallShield, excuse me for having a long path on my development drive.  It’s not like InstallShield creates long paths itself… oh wait a minute, it does!   I had a particularly nasty error  message while creating a chained installation package that read “build error 6151 (Cannot save target database)”.  After days of research, I found out this error occurs when the installer package name is longer than 9 characters in length.  Gee, InstallShield could have just limited the name in the IDE to just 9 characters but instead I get this cryptic message.  (FYI: this has been fixed as of IS 2010).

There are a lot more flaws I could mention here, but I’ll save most of those for another post.  One last point, when trying to build a release, if you have Windows Explorer or a command prompt open to one of the directories under the release folder, InstallShield shows you an error that reads “Cannot rename folder because it is currently in use”.  If programs like Visual Studio can create builds when the folders are open, I don’t understand why InstallShield can’t.

As an aside, I’ve invested time in learning Nullsoft installer and WiX installer.  My preference is to convert everything over to the WiX installer.  WiX is fairly simple, straightforward, and all files are text-based and can easily be version controlled.  Plus, an added bonus is that I don’t have to worry about licensing issues so multiple people can work on the same project at the same time (and the software is totally free).  For now, I am stuck with InstallShield but I hope to be leaving soon.

Rathmann Auto Works in Poway

April 03, 12 by kenrich

If you need to have any service done to your car, or any repair, or if you have a project car, please check out this business located in Poway.  Erik is a master mechanic who can tackle just about any job.  They are located in the Poway business part just off of Scripps Poway Parkway.

This is a new business that is willing to go the extra mile to make sure you are satisfied.  So for quality auto service, choose Rathmann Auto Works, Inc.

Time Warner’s Internet Monopoly

March 07, 11 by kenrich

There is a problem with the cable TV industry here in America.  These companies have a virtual monopoly when it comes to high-speed Internet in many of the big cities.  For the consumer there are no other options when you are stuck with poor cable Internet service and lousy customer service.  They know they have a monopoly and they use this to their advantage to charge outrageous fees, increase them every year without providing anything additional in return.

In most cities you don’t have any other choice for high-speed internet unless you count DSL.  DSL or Digital Subscriber Line is a technology that utilizes phone lines to transfer Internet.  This is a system that is inherently flawed.  For one thing, they use the same connection that your phone uses.  This means that voice and Internet communication are all shared on the same line.  Another issue is that speed varies based on your distance from the ISP hub.

The typical speed of DSL is 256Kb to 40Mbit/s for downloads and even slower for uploads.  Compare this to 15Mbit/s download speed for cable Internet and you see how huge the gap is.  In worst cases, using DSL is not much better than using dial-up Internet that we used to have in the old days.

Let me get back to what Internet companies have been taking away.  One example is Usenet newsgroups which were one of the original applications written for the Internet.  Imagine a massive collection of message boards shared throughout the Internet (if you don’t know what I’m referring to here).  This service was taken away from Time Warner high-speed Internet customers at the same time they raised their fees.

Another thing that Time Warner is horrible at is customer service.  They often keep customers waiting for 45 minutes by placing them on hold.  I’m sure this keeps their call volume down when 90% of their customers hang up the phone in disgust so they only have to deal with about 10% of all customer service calls.  For the amount of money we all pay for cable TV and Internet services, you would think companies like Time Warner could provide a modicum of quality customer service to their customers.  But then again, they have a monopoly so why bother!

Google’s New Page Rank Algorithm

March 03, 11 by admin

Google Search (How I Hate Thee)One of the things I really find discouraging is the page ranking algorithm created by Google.  I’ve been hosting web sites for well over ten years now and I have a handful of sites that have been continuously hosted during that period.  During the early years, I saw my page rank grow to a respectable number along with the number of backlinks. Business was good and I was relatively happy during that period.

I did a little bit of work on SEO for my sites to help improve my rankings a bit in those early years.  I made some mistakes along the way venturing into schemes that are known today as black hat SEO.  However, some of the things considered black hat today weren’t deemed that just five years ago.  Another error I made was migrating sites to another host and scripting language.  This is an operation fraught with many perils in itself.

The net result of these actions is that when the new page algorithms were launched, my sites started going downhill.  It didn’t happen all at once either.  My site rankings gradually decreased over time as each new algorithm was launched.  The purpose of the Google changes was to eliminate irrelevant results from their search results.  The problem was that my sites are very content rich so they deserved a little bit of page rank.

So today my main business site is doing okay with a page rank of three.  This is not a very good ranking for a website that has been around since 2000 and has had hundreds of valid backlinks.  As of today, my website has backlinks of zero, yes that’s right, zero!  Just a few weeks ago, my backlinks stood at five which is still an insult.

I’ve taken a few steps to rectify the situation.  After studying good white hat and black hat SEO techniques, I took steps to clean up my website and make it more search engine friendly.  I have all of the correct title and meta tags on all of the different pages.  I eliminated a lot of the duplicate content that appears on the site.  I also removed any links on the site that were part of a paid linking scheme as well as any links that may be considered irrelevant (unrelated) to my core business.  After doing all this, I then petitioned Google to reconsider my site for inclusion in the search engine.

Actually, my site already does show up in the search engine, its just that I felt I was being penalized due to my black hat SEO techniques.  It has been less than a month since I submitted this petition.  I haven’t seen any positive effects of doing this.  Hopefully, there will be some positive changes coming in the future.  Otherwise, I think I should consider exiting this business and getting into something else.

The major change launched by the latest page rank algorithms was to mark down the page rank of content farms which just scrape (steal) content from other sites and then republish that content on their own site.  Sometimes, this content is manipulated to change the grammar and structure.  The purpose is to score big points for having lots of content and keyword-rich content that search engines love.  The downside of this approach (for searchers), is that non-authoritative content is given to searchers when it would have been more appropriate to show them the original article.

How to Create a Branch in Subversion

December 08, 10 by admin
Tortoise SVN

Subversion Client for Windows

I recently came across the need to create a new branch for my Subversion repository.  Below are my notes on how to perform this task using the SVN command-line under Unix/Windows and also instructions for performing the same task using TortoiseSVN (a windows GUI interface and client for Subversion). I hope this information is helpful for others needing to branch their own source repository.

1)    Checkout at the top-most level (above the trunk) into a working folder

$ svn checkout http://svn.servername.com/repos/reponame mybranch

2)    Create a copy of the project in the repository using SVN COPY command

$ cd mybranch
$ svn copy trunk branches/my-development-branch

$ svn status

A  +   branches/my-development-branch

3)    Commit the newly added branch to the repository

$ svn commit -m “Adding a new branch of /reponame/trunk.”
Adding         branches/my-development-branch

Committed revision 255.

4)    An easier method combining all of the three steps above!

$ svn copy http://svn.servername.com/repos/reponame/trunk \
http://svn.servername.com/repos/reponame/branches/my-development-branch \
-m “Creating a private branch of /reponame/trunk.”

Committed revision 255.

Of course if you are using the TortoiseSVN for Windows, you can simply perform the following steps:

  1. Right click on the main repository folder, under “TortoiseSVN” select the menu item: “Branch/tag…”
  2. Under “create copy in the repository from:”, select “HEAD revision in the repository”.
  3. Enter the new URL for the branch folder like “http://svn.servername.com/repos/reponame/branches/my-development-branch”
  4. Enter a comment for your new branch like “Creating a new branch of the repository”

That’s it, your branch has been created and you can check out this new branch into a new working folder using the normal SVN checkout procedure.  Just make sure to specify the new branch URL that you entered in step #3 above.  Good

GoldFire Internet Services

December 03, 10 by admin

This is the first article in a series of articles that detail some of the business ventures that I have been involved in over the course of my 10 years of running a technology company here in San Diego.  Most of the articles will detail my post business pursuits including many ideas that have failed and many more that just never got off the ground.  My goal in writing about this is to underscore the importance of never quitting and also to seek some sort of closure on many projects that are just hanging in limbo.

Let me start this article series with my original business idea which was begun in the early days of the Internet.  My first online venture was a small site named GoldFire Internet Services.  For this business venture, I acquired the domain name gfire.com (no longer in my possession).  At the time, this website was pretty well designed.  It had a clean interface with rounded boxes to hold the navigation and the site news.

In these early days, I was creating websites using Perl CGI since it was easy to administer under a Linux server.  CPAN really allowed me to install and update modules necessary to create advanced functionality on the website.  Another related technology I used was Mason which allowed you to mix Perl and HTML together just like PHP does it today.  It also had the added benefit of being very efficient and a high performance server-side scripting language.

On my website I offered professional services for creating and designing web sites, creating e-commerce applications, and helping with database design and administration.  Without doing much Search Engine Optimization, I was still able to obtain pretty good exposure on the search engines.  Back then, Google was still being developed in a garage and the best search engine was AltaVista (remember those days?)  A lot of the big search engines back then are no longer around.  Website directories were more important in those days and Yahoo’s front page had a directory of websites along with a search box.

This website was mostly a content site with a lot of marketing materials and promotional ideas.  I did take out some advertising for the business in a local publication.  Responses to the ad were not great.  My first exposure to print advertising was not exactly a good experience.  Like most other online businesses, I prefer to advertise online now.  With certain services, the amount you pay directly corresponds to the number of click-throughs you receive.  This seems like a fair way for both the buyer and the seller.

This business was in operation for a couple of years while I also worked on other projects.  A few of which I will detail in a future post.  It was a good exposure to starting a new service business and the many difficulties you will encounter.  I definitely just got a taste of what running your own business is like with this venture.  I don’t have many regrets with this project.  The amount of knowledge I gained included: Linux, MySQL database, Perl, CGI, and Apache administration.  Most of this knowledge I am still using today in most of my current projects.

At the same time I worked for a small Internet startup in San Diego that was also building web applications.  Our technology consisted of mostly Windows servers and a horrible scripting language which has thankfully died out called SMX.  We did some good things back in those days and had a lot of fun doing it.  Together with my startup business, I got a well-rounded knowledge of the different website hosting platforms.  GoldFire was run on a FreeBSD system (technically not Linux) but I had previous experience with RedHat that helped me in various different projects.

Using Google Voice to Make Phone Calls

September 15, 10 by admin

Recently, I’ve been using the Google Voice product to place free phone calls within the United States and Canada to a land-based phone from your computer. I have been very impressed with the quality of the service and the convenience of making phone calls right from your computer.  Using a headset, I can easily talk to someone while working on my computer.  The voices sound so clear it seems to even rival my land-based phone.

Google has said that calls will be free to U.S. and Canada until the end of this year.  I hope that they decide to keep it free a while longer so I can continue enjoying their service.  It is also great for international calls.  Other popular countries like the U.K., Mexico, France and China only cost $0.02 per minute which I consider very reasonable.  Google seems to give you a $0.10 credit the first time you use their service.  So go out there and try it out!

http://www.google.com/voice/