Computers in 5 years

8:44 AM in Programming by Vic Russell

I have been an avid system builder for the past 12 years.  I started computing with Apple IIe, Commadore64, and Sanyo MBC 550.  These computers were floppy disk units only – with the exception of the Commadore64 which was a cassette tape-drive.  I purchased a used Leading Edge computer with a 10MB hard drive in the late 80′s.  That was a tremendous boon since the floppy flip could be stopped, and the speed of program load was tremendous.  Since these were all DOS only machines – no windowing software so 1 program at a time could be run- that was a significant performance boost.

I spent over $2,000 on a Leading Edge Intel 486-d 16 MHz system with a 100MB hard drive in the early 90′s.  This amount of storage and having Windows 3.1 for Workgroups was another performance boost.  A lighting strike killed that computer about 2 years after I purchased it, forcing me to purchase another – a Packard-Bell 100MHz Pentium with 8MB of RAM and a 1GB Hard drive.  Wow, I would never use all that drive space!

Once I decided to upgrade to Windows 95 (at a very reasonable $95.00), I needed another 8MB of RAM ($120.00) which gave me a total of 16MB of RAM – adequate for running Win95.  I quickly ran out of hard drive space, so I had to purchase a 2GB hard drive as a slave for $220.00.  That system performed adequately for 6 years – our kids played educational games, I was on dial-up internet through Netscape and then AOL, and life was good.

Then, we purchased a second computer – an HP 750MHz Athalon XP system with a 30GB hard drive and Windows ME OS with a color monitor for around $850.00.  Now, we had two systems, but only one phone line.  We decided that the primary HP system that the kids had access to was our main system.  I could use the 100MHz system only when the HP was not online, and, we were not using the telephone.  This latter issue was a big deal given the cost of cellular minutes in the late 90′s and early 2000′s.  Consequently, I did much computing late in the evening.

Very soon after the purchase of the HP, we began to purchase systems at around 1.5 per year.  This ranged from a 600MHz Citrix chip-based system to 3GHz P4 dual core.   These were Bare Bones systems purchased primarily through Tiger Direct and New Egg, and costing around $200 to fully build.  Eventually, we were up to 6 running systems – 2 laptops, 1 server, 3 desktops.

In the years between the HP and today, we upgraded to Cable broadband.  We had a 100KBit connection for a couple of years – which was adequate for 2-3 computers (mid 90′s), which is what we had at the time.  Now, we have 1.5+ MBit connection that isn’t effected by any amount of network traffic (unless, we have 4 systems playing Hulu or streaming YouTube videos at the same time).

Future

The significance of the iPad and the recently talked-about Motorolla Droid based pad computer must not be underestimated.  These are the computing platforms of the future – small, powerful, and transportable.  The issues that will be overcome in the next couple of years include:

This increasingly mobile computing platform will be more and more integrated with everything we do.  Work, play, socialization, financial transactions, and most other life-events will become computer-enhanced.

Some theorists are predicting implant technology within the next decade – something that will merge the human mind with the storage, retrieval, and processing of information in near-real-time.  If we are able to think and receive direct sensory input from a computing device, how much longer before we are fully integrated into the ‘web’.  Thought theft may be a new crime, particularly when some ideas are worth millions of dollars.

That point in time where computers or computer networks become self-aware – the so called ’singularity’, may not be as far off as we once thought.  While the human brain may take another 100 years to replicate in a silicon-biological hybrid form factor, that may not be needed if we begin to feed our network with thought, emotion, dreams, and raw information on a regular basis.  All that is required is an algorithm that ties everything together

WordPress Permalink break – created then resolved

8:13 PM in WordPress by Vic Russell

Changing the WordPress Permalink structure of your website to something that is SEO friendly is something you may want to do – using the default ?id=1234 method is not reflective of your page content.  How you go about making the change to your Permalink format is critical.

I had already changed the WordPress Permalinks to /year/month/post-name/ format.  I wanted additional SEO alignment by updating to  /category/post-name/ [NOTE: the 'category' will be the first/lower one checked for that article if there are more than 1 category used].

To initially make the change, I changed the WordPress Permalink structure to /%category%/%postname%/ using the form field on the following admin page:

http://your.domain.com/worpress/path/wp-admin/options.php

Once I made the change, I could no longer access any post page – they appeared on the main blog page (home page), but when I clicked any post-link, I received a ‘post not found’ error.

THEREFORE, Please Do Not Use the above page to change your WordPress Permalink structure -

DO use the admin dashboard -> Settings -> Permalink page only to change the format of your Permalinks.

Here is a link to the article that will give a very good explanation on what to do if your Permalinks are messed up:

http://wordpress.org/support/topic/plugin-advanced-permalinks-cannot-open-old-posts

Thank you,

Vic

New Domain – jqueryform.info

2:43 PM in jQuery, Programming by Vic Russell

jqueryform.info is a domain I just purchased to use for dedicated jQuery forms blogging.  The jQuery ‘forms’ topic is huge, as anyone who uses jQuery knows.

Sample topics:

  • validation (client and server side handling/callbacks/etc)
  • AJAXifying forms
  • processing select, checkbox, and radio button tags
  • presenting error information elegantly
  • Myriad of plugings related to forms and form processing

I am going to try GoDaddy for hosting this site round.  I am not being critical of Hostmonster, I just have to test another hosting solution before I pony-up for a dedicated server or VM.

If anyone has a suggestion re: a hosting provider – and I mean direct experience – feel free to reply to this post. Please include the reason(s) why you like or do not like the provider – submissions with only a link and sales text will be removed.

Til Tomorrow…

Vic.

960grid versus Blueprint CSS Framework

8:13 AM in 960grid, BlueprintCss, CSS, jQuery by Vic Russell

Recently, I began using the 960grid and Blueprint CSS frameworks.

For fast page prototyping, these css libraries (i.e. grid frameworks) are very useful.  I did notice many issues when attempting to use more complex layouts – there is little room for any deviations, such as adding borders (Blueprint in particular)!

That is when I began adding float-fixes and other css classes to compensate for the issues inherent in these CSS frameworks.

This begged the question - did this truly save me time over a custom css framework based on the specific page layout?

Yes, I do believe it did save time.  The basic page structure can be created super-fast.   I didn’t have to worry about any heavy lifting just to get a container, subcontainers, and ribbon menus aligned and floated properly.  It was just a matter of adding a class definition for the element (<div id=’mydiv’ class=’span-6′>).

NOTE: I trashed the YUI layout grid trial – too much overhead for my taste.  That is not a critique, but I love jQuery and don’t want to integrate another JS lib for a basic grid system.  If I am incorrect in my assumption – and someone can point me in the direction of simplistic get-er-up-and-running-fast documentation (versus Yahoo!’s rather messy but comprehensive docs), I will invest an afternoon.

I will go into more detail as time permits, and I am going to try the YUI layout grid system.  Then I will do a comprehensive analysis of the features and drawbacks of each.

I will also cover how the following jQuery stacks integrate with each framework:

  • jQuery UI
  • jQuery plugins

Thanks,

Vic.

Quick Link To My Development Site

9:40 AM in 960grid, BlueprintCss, CodeIgniter, CSS, jQuery, Programming by Vic Russell

Here is a link to my dev server and the current dev projects I am involved with.

Finally have the CI site up and running on a hosted site:

www.randaweb.com

Here are links to our DEV server:

Page using the 960grid framework – many jQ features – check out each tab.

Page using the blueprint css framework – interesting MAC-like menu (hover over the solar system planets)

Another BP css page – sales page

linux chown example

3:55 PM in Linux, Programming by Vic Russell

chown

chown – change owner of file system resources on Linux/Unix systems

To change the owner of a file name ‘myfilename.jsp’, do the following:

sudo chown jamessmith myfilename.jsp

To change ownership AND group for All directories and files below the current working directory:

sudo chown -R jamessmith:wheel ./ .*

It IS a CAPITAL R ( – Recursive)  and there is a space between the ‘./’ and the ‘.*

NOTE: chown can be a very dangerous command – it cannot be undone.  Exercise caution when changing ownership on files/directories en mass without a more targeted wildcard (e.g. “chown  meuser:mygroup *.jsp” will change ownership of only .jsp files in the present working directory – these are NOT system files and will not result in a system-wide error – though they may mess up your Java App server :( )

IRS EIN Number – Protect Your Identity

7:54 AM in Business, tax by Vic Russell

IRS.gov is a very helpful website – fairly well designed and full of useful, and sometimes scary (i.e. penalties and fines), information.

What we all must do as an employee or independent contractor or corporation is file the proper IRS tax forms when they are due.  Don’t be late or you may incur a penalty on top of what you owe.

A start to creating a business entity is to decide on what form that business will take – sole proprietor, independent contractor, limited liability corporation (LLC), S-Type Corporation, or a full-fledged C-Type corporation.

Many consultants would opt for the sole-proprietor or LLC – the simplest forms that require the least administrative overhead.  To limit personal liability you must choose other than a sole proprietor which requires registering with a State as a corporate entity.  All this info is covered at the IRS website and others (legalzoom.com).

The EIN, or Employer Identification Number, is a number you receive from the IRS that is associated with your business.  This allows you to use this number in place of your social security number.  Best news – it is FREE and VERY EASY to acquire.

Get your EIN here: http://www.irs.gov/businesses/small/article/0,,id=102767,00.html

Now, scroll down near the bottom of the page and click the Apply Online Now link text (or use CTRL-F and search for this text).

IRS EIN Link

Click here to start the process to acquire your EIN

You will need: your name, your business name, social security number, address, a phone number, email address, and general business area (manufacturing, consulting, retail, etc).

That is it – Just remember to ALWAYS use your IRS-issued EIN in place of your SS# whenever possible, file your requisite tax forms ON TIME, and enjoy your newfound freedom (and responsibility) as an entrepreneur!

Vic

Small versus Large Companies – culture versus resources

7:03 AM in management by Vic Russell

I was recently employed by a very small company as a consultant through a regional tech employment agency.  It was my first experience working for a small company with fewer than 2000 employees – this company had less than 12.

During the interview, I noticed there was the personable and relaxed atmosphere.  The company was comprised of individuals who had worked together for 12+ years.  Even so, as an outsider, I felt very welcomed.

Being used to more formal environments, this was going to be a welcome change; at this small company, there appeared to be a very hands-off management style.

I question the effectiveness of a rules-based organizational culture (versus a person-centered culture) that some of todays corporations institute.  At times, such an environment can be so focussed on the rules that they create an oppressive and micromanaged culture that is too beaurocratic to be effective.

After doing my very best to acclimate myself to the new code environment – a proprietary framework written in Java/J2EE within - using Eclipse (Helios) , I got down to work creating JSP pages, integrating jQuery (jQuery core and jQuery UI, and plugins – validate, default-value, alphanumeric, extjsoncookie, simplemodal).  The documentation for the custom framework as well as the assigned project was very scarce, consisting of a few use-case documents (no diagrams, just words).  The data schema was ‘evolving’ during the project, and, the data definitions and relationships were verbally defined – difficult to reference :(

All in all, not enough documentation to get down and dirty with a project that had a very fast timeline.  There were 3 complete site redesigns (aka major changes)  in 4 weeks – just when you get progress, you have to start from the beginning.

What I learned from this experience is:

  • Clear, concise, and complete documentation is VERY important – not just words, but diagrams (use-case, process, flow, data, etc) – for any web application.  Smaller companies may not necessarily have the resources to accomplish this in a meaningful way, so be sure to set time aside upfront to create the essential docs to keep your team productive.
  • A large enough team to bounce ideas off of is a tremendous asset – 3 or more developers working together with different skill sets is, in my experience, a minimum number - when there is a tight timeline.  That provides you with the necessary division of labor – MVC.  If time is not a primary factor, then a team of one front and one back-end developer would suffice.
  • Having the developers intimately involved with the evolving design (database, page flow, SEO, UI, etc) benefits the company greatly.  There is an internalization and participation with the requirements that adds value during the code creation process – the more you know, the more you can do.
  • Timing is critical - having the third-party designs ready BEFORE a developer gets on site, a development path defined, class and data definitions documented (particularly with a custom framework), and a team of resources that are available at a moments notice for any roadblocks that arise.

The working environment and culture at the small company was far superior to that of a large corporation for my personality and work style.  I was lucky in two more ways – the company president was exceptionally competent and creative (with a tech background), and the lead Java framework developer was a very gifted programmer.

When approached to take on a project with a speedy timeline, it behooves the consultant to weight the pros and cons of working with any business entity.  Before agreeing to consult:

  • review the available documentation for the project -
    • are they concise, appropriate, and cover the breadth of the project?
  • get a list of assets you will have ready access to during the various phases of the project life-cycle.
    • who will you be able to contact for business/marketing and technical issues outside of your area of expertise?
      • Business analysts, project managers, content experts, etc.
  • make sure that the budget is realistic and you will not push the project over that thin, and sometimes arbitrary, profit-margin.
    • You don’t want to get on a sinking ship – if the budget is not realistic, let the company know.
  • is the time-line reasonable/attainable given the above information?
    • If you see a lack of  any of the above attributes, you may be wise to walk away IF the company is not receptive to scaling back, adding assets, or proactively creating the necessary documentation.  If they want to understand and are willing to alter core aspects of the project, you may be joining a winning team that extends beyond this project.

When analyzing most things in my life, I use the simplistic who, what, when, where, how, why matrix.  That, I will define in a later blog – if it even needs defining :)

Thank you for reading – Vic.

“The only reason for time is so that everything doesn’t happen at once.” – Albert Einstein

PHP CodeIgniter Framework – directory helper and directory_map()

7:25 PM in Programming by Vic Russell

CodeIgniter is my (current) favorite development platform for the PHP language.  It is lightweight, robust, and fairly easy to learn compared to Zend or Symfony.

As with every framework, there are issues with the documentation being too light or too heavy – seldom just right.  CodeIgniter documentation is excellent – once you get past the first couple of days digesting the syntax of the framework.

I was attempting to use the ‘directory’ helper.  This is a helper composed of a method that gets the names of files (and subdirectories) within a path and populates a multi-dimensional array with the results.  Two lines of code rather than around 10 for a pure PHP version that has the same features.

The key to getting this method to work was using the relative path and not an HTTP request.  If you use the base_url(), it will not work.  For my need, it was simply hard coding the path into my code:

$dirPath = "./this/is/the/directory/to/scan/";
$this->load->helper('directory');
$arrDirList = directory_map($dirPath);

Then, I used

foreach ($arrDirList as $key=>$value) { ... }

using the $key as the directory names to build my anchor tags and name the link.

foreach ($themeFiles as $key=>$value)                {

I had originally used a

$dirPath = $base_url() . "path/to/directory/"; // BAD X X X

Thanks, Vic Russell

jQuery 1.4.x and jQuery UI 1.8.x tabs

10:20 AM in Programming by Vic Russell

Tabs are simple to implement in jQuery – once you understand the basic structure of the tab element.

First, be sure to include the appropriate jquery libs – jquery base and the jquery ui.  Also, the jquery ui tabs lib must be included – this is usually done through jquery.ui.base (containing only @import directives [@import url("jquery.ui.tabs.css");]).

When using the jquery ui library for tabs, you must create tabs using an unordered list and list items containing <anchor html elements:

<ul>
    <li>
        <a href='#tabs-1'>This is tab 1</a>
    </li>
    <li>
        <a href='#tabs-2'>This is tab 2</a>
    </li>
</ul>
jQuery UI Tabs thus degrade gracefully to a list of links when Javascript is turned off in a client browser

You must also wrap the tabs in a container that is bound to an object reference and listener that implements the 'hidden' jquery ui tab classes on your custom tab.

Now, wrap the ul in a tab that will not close until the content panes are defined....

<div id='tabs'>
<ul>
    <li>
        <a href='#tabs-1'>This is tab 1</a>
    </li>
    <li>
        <a href='#tabs-2'>This is tab 2</a>
    </li>
</ul>
...
<!-- close the 'tabs' container>
</div>

Now that the <div id='tabs' and the referenced <anchor tabs are properly named, you can define the contents of each tab pane.

<div id='tabs-1'>
    This is the contents of tabs-1
</div>

<div id='tabs-2'>
    This is the contents of tabs-2
</div>

Now, place the contents WITHIN the < div id='tabs' > container...

<div id='tabs'>
<ul>
    <li>
        <a href='#tabs-1'>This is tab 1</a>
    </li>
    <li>
        <a href='#tabs-2'>This is tab 2</a>
    </li>
</ul>
<div id='tabs-1'>
    This is the contents of tabs-1
</div>

<div id='tabs-2'>
    This is the contents of tabs-2
</div>

</div>

Now, we need to associate the above construct with a jQuery initializer - linking the <tabs> with the jQuery UI code containing the binding code:

<script type='text/javascript'>
// listener for profileDemogForm
$(document).ready( function() {
$(function() {
    $("#profileTabMenu_id").tabs({
        collapsible: true
    });
});
</script>

For your test page, use the default jQ UI library (after you have downloaded or linked to it via Google ...)


<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

<link type='text/css' href="js/jquery_ui/jquery-ui-1.8.2/themes/base/jquery.ui.all.css" rel='stylesheet' />
<link type='text/css' href="js/jquery_ui/jquery-ui-1.8.2/themes/base/jquery.ui.core.css" rel='stylesheet' />
<link type='text/css' href="js/jquery_ui/jquery-ui-1.8.2/themes/base/jquery.ui.theme.css" rel='stylesheet' />
<link type='text/css' href="js/jquery_ui/jquery-ui-1.8.2/themes/base/jquery.ui.base.css" rel='stylesheet' /><<<

Some tips:

You can name a jquery tabs container anything - you just have to use that for the content pane tabs.

<div id='myTabs'>

Each bookmark reference would then follow the following semantic:

<a href="#myTabs-1">  and <a href="myTabs-2">

The -1 and -2 (dash 1 and dash 2) are very significant and must be followed for the jQ UI to pain these anchors as tabs.

content pane (aka: contentpane) the wrapper (named anything - I like contentpane or tabs_contentpane) that contains the container divs that further contain the html to display when the tab is clicked (in focus).

This content can be

  • inline html
  • an included page  using jQuery .load("url")
  • a pre-fetched server-side include (<%@ include file='tabcontent2.jsp %> or <? include("filename.php") ?>