HOME      WEB DEVELOPMENT      WEB DESIGN      PORTFOLIO      BLOG      ABOUT JS      CONTACT JS







Archive for the ‘Web Development’ Category

Fixing Dreamweaver CS3 Crashes

Monday, November 16th, 2009


Ok, just a quick post today about an issue that I personally encountered that about baffled the living hell out of me.  If you have Dreamweaver CS3, this is what happened to me….maybe it’ll help you.

Opened a file…php….and edited it and saved it no problem.  Went to another .php file in my same project directory and as soon as I hit the “{” character….I got the dreaded, “Adobe Dreamweaver Has Stopped Working”…and so it closes and the frustration began.  This also happened on a few .cfm ColdFusion files as well and in some cases it just involved me clicking in the code region like I was going to type something…but never got the chance as DW closed right away.

So after doing some digging that day, still couldn’t find anything.  Thankfully I found the answer which said the error was caused by….Daylight Savings Time!!!!  I had been in Arizona for many years and never changed my clocks on my computer since Arizona doesn’t change to and from Daylight Savings Time.

I thought about it and said you know, the problems did happen right on a Monday morning after the clock change…I wonder.  So following the instructions I went to C:\Users\<username>\AppData\Roaming\Adobe\Dreamweaver 9\Configuration. (or if you have XP or Pre-Vista – C:\Documents and Settings\[Your username]\Application Data\Adobe\Dreamweaver
9\Configuration), deleted the WinFileCache*.dat  from that directory, then restarted Dreamweaver….in a flash (no pun intended) it was working like a charm again.

I’m sure this has been fixed in later versions but just in case you’re not able to upgrade yet to CS4 and you’re still using CS3 like me, you’ll definitely want to make sure you watch for this in the future.  Hope it helps someone else….let me know if it does.

5 Things Web Developers Should Do to Avoid Getting Screwed by their Clients.

Thursday, January 15th, 2009


This has been bothering me over the past couple of months and I just thought I’d share some random thoughts about things you should make sure your clients understand about web development, their expectations, and what to expect from you as their developer through, during, and after the initial development process.

  1. Let the clients know that you do actually have other clients and even though their project isn’t less important than the other clients, but please be respectful of the time that needs to be shared across all client lines.
  2. You do get what you pay for and sometimes a little bit more.  Meaning my old philosophy was to always err on the side of the client…if there’s a contractual problem that results in a few extra hours, then go ahead and do it.  However I now realize that even though you go the extra mile, the old addage my mother used to say about giving people an inch and they’ll take a yard still holds true to this day.  So give the client what they paid for…and then if there’s a problem and they want something extra, explain to them why they need to pay for that as well.
  3. Write your contracts with no guarantees.  One of my favorite films is Tommy Boy and if you remember this film, his father “Big Tom” would tell potential customers who wanted a guarantee from him about his auto parts that you can take a piece of s**t, put it in a box and slap a guarantee on it…however all you’re guaranteeing is that it is just a guaranteed piece of s**t in a box.  The same holds true in web development.  If you do quality work, let that work speak for itself.  If they want a guarantee, let them know that you provide a service contract that they can purchase that will cover certain issues if there is a problem.
  4. Don’t let yourself be taken advantage of…have your clients pay for the programming hours before they are used.  I know this is a very bold statement, however in this wacky economy right now it’s necessary.  I have 4 clients who are 90+ days out on their payments.  I’ve even shut down a website because this person hasn’t contacted me about the final payment or anything.  It’s not fair to the developer who takes a lot of time to produce quality web development work and then gets left holding the bag.  If you go into a grocery store and say…bill me…they’ll tackle you and maybe even prosecute you for shoplifting.  In the web world you should space out your payments enough so that a client doesn’t waste a ton of money if the developer doesn’t pull through, but still can satisfy the web developer’s need to get paid for their time.
  5. Always keep detailed records of the time you’re spending on a project…even if it’s a flat fee project.  The reason…you can always show your client the amount of hours a certain task has taken and if they believe they’re not getting enough work from you, you have a good backup for those discussions.  It probably would help sending those hours summaries each week as well.

I’ll probably have a few followups to this subject, but if you have any horror stories you’d like to share and what you’ve done to avoid them in the future, I think we’d all like to see them.  I’m not ragging on all clients…I have several really really good ones who are great overall…but there are a few which really get your goat…and it really isn’t fair.  So take these suggestions for what it’s worth and I hope it makes for a better client experience for you and your web development company.

Experts in Data Mining, Screen Scraping, and Import to a Single Source

Thursday, December 18th, 2008


Ok, it’s time to toot our own horn today.  I’ve seen plenty of blogs on this where businesses and individuals are looking to grab data from multiple sources (that they are allowed to scrape mind you), and combine it all into one grand application or database…often to no avail and leave very frustrated comments about their trials and tribulations.

Well, we’ve been doing this for quite a while and I felt as though it was time to let other folks know about it since there are a lot of opportunities for businesses to save on some soft employee costs, reduce overhead, and increase productivity and data.

A Quick Word About Why You Should Hire a Web Development/Design Company
This is where web development companies are worth their weight in gold.  Yes, I know there’s plenty of cookie cutter do it yourself websites out there, and they are great and very affordable.  But when you have an idea that is unique, or a situation that is unique, you really don’t want what is out there available for everyone else.  I mean, honestly…if Dell used a cookie cutter build your own computer plugin, would they really be all that different from the other 100 web stores that offer the same thing at approximately the same cost?  No, you’d probably go to the place that was unique, professional looking, and looked as though they actually spent some money building a better mousetrap.  Ok…so there’s my two cents why you should actually use us….on to the good stuff.

Why You Would Need an Expert in Data Mining and Screen Scraping
Let’s say you are a company in Arizona who has an idea to put together a site that puts together all of the latest reduction in homes for sale prices.  Now there’s a bunch of websites out there that you’ve contacted and said you’re going to promote this site and obviously push the business to the various real estate agents involved.  Now comes the fun….gathering this data on a daily basis and putting it all into your application.  That’s where Justice Solutions comes in.

Grab Data, Massage Data, Import Data, Display Data
So now you hire Justice Solutions to do this seemingly impossible task.  We now take the web addresses of these various sites and create an application that will go out to each one, identify the way each site displays its data, grab it (even if it’s on multiple pages), and then perform some massaging scripts that will convert any text data into price data, etc.  We then import that data into your master database which will then be used to display the data to your website users in a unique format specific to your website.

Why It’s So Difficult
The reason this is usually such a daunting task is because if you’re not used to it, trying to identify data patterns and other things that go into dealing with data from multiple sources can be quite overwhelming.  Also, you have to be able to automate all of it so it happens quickly and without much user intervention.

We’ll Toot Today
So if you or a person you know has an idea like this, or an existing business that would benefit from this type of application, please refer them to us.  We gladly pay referral fees and would be happy to help in easing the fears of this commonly thought of, but rarely successful, business model.  Contact info@justicesolutionsllc.com for more information.

Until next time…happy coding…and mining….

Doug.

Fixed CSS Positioning in IE6, IE7, etc.

Monday, December 15th, 2008


See The Float In Action Here

    You know, nothing is more frustrating when you hear that something has been fixed in a particular software update, and then you find out that it really hasn’t. I ran into this today when I was trying to do some fixed positioning of a new web host that needed to be affixed to the bottom of the browser and to the right at all times. I heard that fixed positioning in IE7 was now possible, so like an idiot I went ahead and placed just position: fixed; into my CSS and uploaded it for testing.

    Of course in Firefox it looked and reacted fantastic. Then I opened IE7 and whoa……it was all the way shifted down at the bottom of my page like it never even looked at the CSS to position it. I’m not here to debate whether your version of IE7 works with this or not, but I can help you keep the IE6 and possibly some IE7 users who have messed up versions happy with your site design.

    The Fix
    Ok, short, simple sweet. That’s the way all web developers like it right? Well you’re gonna love this one then. First thing…add the following into your .css file or in your head tags of your page…it’ll work either way:


    * {
    margin: 0;
    }
    html, body {
    height: 100%;
    overflow: auto;
    }
    .wrapper {
    position: relative;
    width: 100%;
    height: 100%;
    overflow: auto;
    }

    With me so far? Ok, next go ahead and create 2 more entries in your CSS substituting whatever name you are going to call the div that will contain your desired “floating” layer. In this case I’m calling it floatHer.


    #floatHer {
    position:fixed;
    bottom:0;
    right:0;
    width:720px;
    height:480px;
    z-index:7;
    }
    * html #floatHer {
    position: absolute;
    }

    Finally….and this is the cool part…just put

    around the code of the page that IS NOT SUPPOSED TO FLOAT. Keep the div that you are wanting to float outside of this tag since this is part of the magic that happens when all of this comes together on your page.

    Now upload/test your page in any browser you’d like and you’ll find your floating layer reacting just fine in IE6, Your screwed up version of IE7 like mine, Firefox, Safari, etc. Now obviously there’s some issues when it comes to scroll bars, etc., but for the basic ad you want to float on top of the web page (that’s why you googled this right?) this will work just fine.

    Until next time…happy coding!

    Doug.

    .NET Shopping Cart Example Using Only Session Variables

    Friday, November 21st, 2008


    Shopping carts are basically a dime a dozen.  But there’s always some component of them that doesn’t quite fit into your current model.  So what do you do when you are up against a deadline and need to quickly produce a basic front end of a shopping cart to hold items and quantities in .NET using on Session Variables?

    I came up with this solution after thinking about a quick way to avoid having to read and write to a database, but not storing elaborate arrays and such to try and accomplish a very simple shopping cart structure.


    // Get the Item We're Going to Add to the Cart
    int itemID = Convert.ToInt32(Request.QueryString["itemid"]);

    // Get the Item (I use a Business Logic here, but you could easily grab the item information from your //database call or items from a grid, etc.
    item m = new item();
    itemAssembler ma = new itemAssembler();
    m = ma.ReadSingleByKey(itemID);

    // Now grab a random number so we can track the items in the cart individually

    Random rand = new Random();
    int x;
    x = rand.Next(100000, 999999);

    // Check and see....Do we have a cart already?
    if (Session["cart"] == null)
    {

    // Add the item to the cart
    NameValueConfigurationCollection cart = new NameValueConfigurationCollection();

    //Add an Item to the cart ("ITEM",Variance, ItemID,Quantity)
    NameValueConfigurationElement nvc = new NameValueConfigurationElement("ITEM," + x.ToString() + "," + "1", m.id.ToString());
    cart.Add(nvc);
    Session["cart"] = cart;
    }
    else
    {
    NameValueConfigurationCollection cart = Session["cart"] as NameValueConfigurationCollection;

    //Add an Item to the cart ("ITEM",ItemID,Quantity)
    NameValueConfigurationElement nvc2 = new NameValueConfigurationElement("ITEM," + x.ToString() + "," + "1", m.id.ToString());
    cart.Add(nvc2);
    Session["cart"] = cart;
    }

    // Now take your user to the cart view page you'd create
    Response.Redirect("your_cart.aspx");

    Now on our “your_cart” page, you can now loop through the items in the cart and display them however you’d like.


    // Let's load the items from the shopping cart into the table
    NameValueConfigurationCollection cart = Session["cart"] as NameValueConfigurationCollection;
    foreach (NameValueConfigurationElement n in cart)
    {

    //Now split the value for the Item Type, the ID, and the Quantity
    String typelist = n.Name;
    char[] sep = { ' ', ',', '.', ':', '\t' };
    String[] typeitems = typelist.Split(sep);

    //Hold these values in some String Variables
    String type = typeitems[0];
    String cartitem = typeitems[1];
    String qty = typeitems[2];

    //Now set up our currency display
    System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
    nfi.CurrencyDecimalDigits = 2;
    nfi.CurrencySymbol = "$";

    //Take your business/data logic and grab the information
    item i = new item();
    itemAssembler ia = new itemAssembler();
    itemCriteria ic = new itemCriteria();

    if(ia.ReadSingleByKey(Convert.ToInt32(n.Value)) != null)
    {
    i = ia.ReadSingleByKey(Convert.ToInt32(n.Value));

    // Get the Retail Price
    int productid = i.id;
    pricing pps = new pricing();
    decimal retailprices = Convert.ToDecimal(i.retail);// +Convert.ToDecimal(i.shipping);

    //Now take the Table you have on your display page and add rows to it...
    HtmlTableRow mainrow = new HtmlTableRow();
    HtmlTableCell maincell = new HtmlTableCell();
    maincell.InnerHtml = "
    " + i.name + " Remove Item

    ";
    mainrow.Cells.Add(maincell);
    tblCase.Rows.Add(mainrow);

    }

    System.Globalization.NumberFormatInfo tnfi = new System.Globalization.NumberFormatInfo();
    tnfi.CurrencyDecimalDigits = 2;
    tnfi.CurrencySymbol = "$";

    // Now populate the items on the Total Costs Table
    lblSubtotal.Text = String.Format(tnfi, "{0:c}", subtotal);
    lblTax.Text = String.Format(tnfi, "{0:c}", tax);
    lblShipping.Text = String.Format(tnfi, "{0:c}", shipping);
    total = subtotal + shipping + tax;
    lblTotal.Text = String.Format(tnfi, "{0:c}", total);
    }

    You now have a simple shopping cart in just a few lines of code since most of the code is used to get the information about your particular item and can be streamlined even more if you wanted to store all of that into the string as well. Ok, so now that you have a way to put together a quick cart for your client before morning….happy coding

    Why Web Developers Should Take Some Basic Networking Web Server Classes

    Wednesday, November 19th, 2008


    Windows Server 2003

    Windows Server 2003

    At some point in your web development or web programming career, you will find yourself faced with the task of having to go on to a web server, perhaps Linux Apache or Microsoft IIS, and need to do some system tasks such as adjust some security settings, etc.

    But what if you’ve never read or taken any education in regards to a web server?  You could find yourself in a situation where you can cause more harm than good.

    Here’s an example.  A client of mine had a stack of servers co-hosted at a location.   The servers were delivered pretty much as-is with some basic virus software on it and Windows Server 2003.  I took over one of the three servers and the other developer took on the other.   We discovered tonight after a hack attempt, that the other developer had never disabled the local Admin account…big whoops.

    So for those of you who would like to pass Networking/Server Support 101…here’s what you do.  Go to Computer Management under the Administrative Tasks location on the Start menu.  Next, click on users, and then you’ll see in the right hand pane a list of users.  Now this is very important, make certain you have created a new user or updated an existing one…let’s say johnsmith, and added her/him to the Administrators Group.  If you don’t do this you could find yourself in a heap of trouble.  Ok, now that you’ve done/verified that, right click on the Administrator user and click Properties.  In the dialogue, check the “User is Disabled” checkbox.  This will essentially disable this user and you may avoid a low level attack on your web server as a result.

    Be careful though, there’s a lot to networking and support in these systems, so be very sure to double check everything you do not only with a site like this one, but others as well…there’s always new information coming out every day about hack attempts and you’ll want to make sure that you are up to date with the information that will keep your information safe and secure as possible.

    Until next time…happy coding.

    Doug.

    Transfer MS SQL 2005 Database to MySQL

    Monday, November 17th, 2008


    Ok…did you ever have one of those days where at the end of the day you’re sitting there going….man I wish I would have known that earlier…I could have saved myself a lot of time and heartache.  Well that was me today.

    You would think with all of the databases I work with I would have had this come up, but surprisingly enough I’ve never had to migrate or transfer an entire database structure from MS SQL 2005 to MySQL.  I googled just about every combination out there and came up with all of these programs from overseas that claimed to

    MySQL Migration Toolkit is Just What You Need!

    work perfectly, but even in their trial modes they failed miserably.

    The Solution…MySQL Migration Toolkit

    I tried one more google which happened me on to an article which was written by a colleague who wanted to let people know about turning on TCP/IP addressing in MSSQL 2005 if they were having trouble using the MySQL Migration Toolkit.  I quickly clicked on the link for the MySQL Migration Toolkit (which is a part of the MySQL

    GUI Tools) and in almost 5-10 minutes later I had my entire MSSQL database moved to MySQL.

    Now it seems a little bit more complex than it actually is.  Literally all you really need are the username/passwords for the respective databases and the name of the database you will need to connect to and obviously transfer to MySQL.  The only pitfall I ran into was during the creation of one of the tables in the database where it didn’t like the default of a 1 or “true” value in a boolean field.  I went ahead and clicked the “Advanced” button at the bottom, looked at the SQL statement, took out the DEFAULT (1), and then clicked the “Recreate Objects” button.  It worked like a charm after that.

    Don’t Have “One of those Days”

    So hopefully someone will also google this and if I’ve been taught well by my SEO expert friend Mat Siltala has taught me correctly….you’ll have found this article and will already be moving on to your next task of the day.  Happy Migrating!

    Doug.

    Web Design Flat Fee Projects vs. Charging Hourly

    Friday, November 14th, 2008


    Many times this question comes up from both potential clients and fellow web programmers.  “Should I or Could I get a Flat Fee for this Job?”.  The answer isn’t so simple in many cases and can get you into a lot of problems as far as what to provide for your client, how to handle change requests, and more.

    Why You as an Employer Shouldn’t Ask for a Flat Fee

    As a business owner who is ready to get their idea going on the web, the first thing you need obviously is a product or service to sell/offer, and then get a website to do just that.  You would love to have a fixed cost associated with developing the website idea and know that when all is said and done…that’s the price you pay.  However you’ll find in many situations, that this creates a strain on the relationship between you and the devleopment company you choose.

    Changes…They’re Inevitable.

    We all believe that as good business people, we spec out a plan, spec out a website, know all of the drop downs we want, the pages, the look, the feel, etc.  I can tell you from over 18 years of experience of designing webpages I have yet to have a project where a client hasn’t wanted to change something.  In many cases I’ll hear, “This is just a small change.”.  But because of the backend programming…it may not be.  Here’s where the trouble of a fixed cost project comes in.

    But that’s more than I wanted to spend!

    So the client changes their mind, I tell them that according to our Flat Fee project agreement, this is different than what was agreed to and hence a change fee is now going to be charged because now the hours I thought the project was going to take is now going to be longer than expected, which means other projects coming up may need to be shifted back some, or I may have to get another developer to work on it which may be a higher cost, etc.  You see where this is going.  Now we’re into an argument over why its a change request when it’s just a small change.  Now the relationship is experiencing strain.

    Hourly Rates to Save the Day

    Now, if we took that same scenario, and placed it into an hourly contract.  We see it is much more manageable.  The client makes a change…no problem…we say that change is about 2 hours worth of work, and we do it.  Everyone is happy…no change fees, etc.

    Real Desires vs. Lofty Desires

    When a project is hourly, the client has direct control over the final cost of the project.  When bidding, we give them a range of what we feel the project will take to complete it.  So they know the top end, and try to stay under it.  So you find those “creative changes” are kept to a minimum and thus…so does the project’s cost.

    Web Developers Nickle and Diming Clients

    Now, I’m not saying the hourly projects don’t have their drawbacks.  You need to really feel good about working with the development company you choose, and don’t be afraid to ask for references.  I personally do not charge my clients for every single email I answer and every phone call I get.  Now, if the phone call ends up taking 30 minutes, or the email requires me to research some items to get back with the client…certainly….but ask your company how they bill.  If they say in houly or half-hour increments…that could be pretty expensive.  Justice Solutions personally bills in 15 minute increments since usually an email that required research or a phone call takes in total at least 15 minutes to do.

    Ask for a Weekly Time Sheet

    Also don’t be afraid to ask for a time sheet showing the hours for the week.  If you know where the project is every week, the final bill or quarterly bill won’t be so shocking.

    Conclusion

    Flat fee projects sound great at first, but can very quickly strain a relationship between you and the developer.  Ask for an hourly contract and then have them put into the agreement a guide to give you an idea as to what the project will ultimately cost.  Now if you change the way the website will behave, you can do so without worry, but make sure to get an estimate on the hours the change will cost.  It will help you decide if you should make that change now, or maybe wait until a future phase of the project.

    Thanks for reading and hopefully this will help you keep a good relationship between you and your clients, or you and your developers.

    Doug.