The Brave Programmer
Most Recent Posts

Top 10 SEO Tips

1. good keyword research.

make sure that before you build a site, you figure out exactly what kinds of keywords you will want to target. your site should include keywords that your prospective clients key into the major search engines. useful keyword research tools include wordtracker, overture, keyword discovery and webceo.

another factor to consider is the competition for your keywords. you do not want to use keywords that your competitors are already competing for. the result being that you will probably not rank well.

you need to have keywords that have a high kei or keyword effectiveness indicator. this is how effective your keywords are in the world of search engines. you do not want to have a keyword phrase that no one uses, nor do you want to have a keyword that has loads of competition. the kei is the balance between well used search phrases and less competition.

2. content is king.

without great content any thing else is pointless. users will not return to your site. users will not stay long on your site. the search engines will disregard your site, not index it or even ban your site. writing good usable applicable content is the number one priority for any seo or any website for that matter.

websites that are designed for people, offering easy navigation and fresh, unique content will attract search engine spiders that will want to index the pages.

it is really frustrating when visiting a site looking for up-to-date information, only to find that it hasn’t been updated for weeks. you are then forced to get on the phone to find out the information; so what’s the point in having a website?


websites that have not been updated regularly will discourage prospective clients and spiders alike. make sure that your website is constantly updated with fresh, unique content.

3. build internal links

make sure  that you have a high-quality link structure and good navigation on your site, so that not only potential customers, but also search engine spiders can find and index all the pages on your site.

a common mistake is to assume that every visitor will start at your home page. most will but it's important to check that each page on your site is linked to the other pages. this helps the search engine spiders to quickly index your site. remember that the way you structure your site navigation will have an effect on how people judge you and your business.

4. building inbound links

getting other sites to link back to yours is probably the #1 item of importance for your rankings. if “content is king” then “linking is queen”. importantly though, is that pages that link to you should be related to your content. one-way links from sites carry far greater weight than links that are reciprocated.

links act like votes for your site and you can't rank well without them. buying links or being indiscriminate in the places you link to and places you request links from is no longer considered good practice and could potentially get your site banned. quality rather than quantity.

5. keyword density

the amount of times your selected keywords or phrases appear in your content, the relevancy it has in your content and the correct usage of proper grammatical syntax revolving around those keywords is of prime importance. the search engines nowadays, derive the importance of a particular topic from the usage of keywords and their density.

for example, if your site is about programming, but this keyword only appears one in your content, but the word computer appears ten times. search engines will assume that your site is about computers rather than programming.

be careful to not overdo it. search engines take a very dim view on too many keywords in content. this causes it to look un-natural, and is often termed as keyword stuffing.

6. optimise your page titles

a very important seo technique is to include your keywords within the title description for each page. it is of prime importance that the title tag is unique to the subject matter of each page for the benefit of the search engines.

in other words, each page must have a unique title tag. this will help your search engine rankings as well as help users to identify the content of the page.

7. crawlability issues

never hide your navigation and or content behind flash, , or images. always try to use text for search engines to crawl your navigation. if you absolutely must have a flash menu or image-based menu then the best practice is to create a text-equivalent alternative in the footer of your site. css can give your text-based navigation similar styling to that of images and the functionality of roll over similar to menus. spiders have a hard time crawling flash, and equally, perhaps even more difficult time with , and they can’t read text that is made from an image.

8. keyword emphasis.

use italics, bold and underlining to further emphasize your keywords. think of a newspaper and how the bold ,different, bigger titles draw your attention to the detailed story. users and search engines are no different. usage of strong and h1 –h6 tags show users and search engines what is important on your site, and draws their attention to it. it separates the keywords from the normal text in a visual and search engine friendly way.

9. site maps.

a site map, in addition to a clear navigation bar and links between pages, will help visitors to your website find what they are looking for. it will also ensure that search engine spiders visit and index each of your pages. then submit the site map along with the site to the popular search engines to tell them where you are.

10. monitor your progress.

track your progress with a web analytics program. use a tool such as “google analytics”. it is easy to use, versatile, and it's free. google analytics provides a wealth of information to help you further optimise your site.

Don't Ever Give Up!


Most know of the great overpowering giant called Microsoft. Many of the small software operations either die out, or are completely overshadowed by the giant beast. Sometimes Microsoft will just devour them. When you have been with a programming language for close to 20 years, changing to another one is a frightening and daunting task. Nevertheless it can be done. I did, so you can too. The trick is to start and take small baby steps. Here is a rehash into the modern age of an old cartoon that should embody the fight of the small guy.

\Dont GIve up\

Programmers Can Cook

Recently my wife had back surgery. She went into theatre at 14h45 and came out at 20h00. Apparently she only went into surgery at 17h00. But that is still three hours. 

Anyway while she was in hospital for three days, my sister looked after our two children. So I promised to repay her for her kindness, not that she did not enjoy it. I decided to cook her a meal. So I made mushroom and potato soup for starter. Then Apricot-Maple Glazed Pork Chops with veg. Then we had creme brulee for desert. 

She was so excited, because she did not believe that theses keyboard fingers could ever make a meal. But I did. So what I decided to do is to give you the recipe of the Apricot-Maple Glazed Pork Chops here on my blog, but put it into a type of code syntax. 

//Pork Chops   PorkChops APC = New PorkChops();
APC.Number = 4;
    APC.Measure.Inch = true;
    APC.Thick = 0.25; 
 //Butter
    Butter But = New Butter();
    But.Measure.Teaspoon = true;
    But.Amount = 2;   
//Shallots
    Shallot Shallot = New Shallot();
    Shallot.Measure.Cup = true;
    Shallot.Amount = 0.25;
    Shallot.Dice(); 
 //Apricot Nectar   
ApricotNectar Nectar = New ApricotNectar();   
Nectar.Measure.Cup = true;   
Nectar.Amount = 0.5;   
Nectar.Refrigerated = true;   
//MapleSyrup   
MapleSyrup Syrup = New MapleSyrup();   
Syrup.Amount.Cup = 0.25;   
//Chicken Bouillon   
ChickenBouillon Bouillon = New ChickenBouillon ();   
Bouillon.Measure.Teaspoon = true;   
Bouillon.Amount = 0.25;   
//Apricot   
Apricot Ap = New Apricot();   
Ap.Amount = 4;   
Ap.Type = "Dried";   
Ap.Cut().ToHalf().ToThinSliced();   
//Parsley   
Parsley Par = New Parsley();   
Par.Measure.Tablespoon = true;   
Parsley.Chopped().ToFine();   
//Pot   
Skillet Pot = New Skillet();   
Pot.Size = "Large";   
Pot.Add(but);   
Pot.But.Melt();   
Pot.Add(APC);   
Pot.APC.Cook();   
Pot.APC.Turn(1);   
Pot.APC.Cook.Pink = false;   
//Serving Plate   
Plate Plates = New Plates();   
Pot.Collection().Transfer(Plates);   
//Sauce   
Pot.Add(Shallot)   
Pot.Shallot.Cook();   
Pot.Shallot.Stirring("Frequently").TillTender();   
Pot.Add(Nectar);   
Pot.Add(Syrup);   
Pot.Add(Bouillon);   
Pot.Collection(Sauce).BringToBoil();   
Pot.Collection(Sauce).ToStirring = "Frequently";   
If Pot.Collection(Sauce) = Thick;   
Pot.Collection(Sauce).Remove();   
Sauce.Pour().OnToPork();   
Ap.Sprinkle().ToPork();   
Par.Sprinkle().ToPork();

..  
..   
Enjoy = true;   
Return; 

Now I know that this might not be syntactically correct. But I have done this so that those who read this who are not into programming, might by some sort of imagination, understand what is going on. 

Below are some Pictures as to how this turned out. 

HPIM4778blog    Apricot-Maple Glazed Pork Chops

  HPIM4777BlogMushroom and Potato Soup
Technorati Tags: ,,

 
del.icio.us Tags: ,,

Can you remember your password?

\Password Please\

SQL and Running totals and Grouping

Ok so I had to do some graphs for a client. Which was not too bad. I created a view in MS SQL database, which took me a while because my mind was totally focused on one way of doing it. I then went to the MS forums and got some great Ideas.

The graph was a total of things per process per month. SO this worked, but it did not include the missing months. So I had to come up with a way to include counts of 0 for the missing month, have them included in the result set as rows so that I can graph them. What did I do?

I search the News Groups and got some responses but eventually did a combination of suggestions.

First I creates a list of joins like so:

SELECT     y.ProcessId, x.mnth,
            CASE WHEN y.month = x.month THEN y.issuecount ELSE 0 END AS Issuecount,
            CASE WHEN y.month = x.month THEN y.month ELSE x.month END AS month
    FROM (SELECT     'January' AS month, 0 AS IssueCount, 1 AS mnth
           UNION
           SELECT     'February' AS month, 0 AS IssueCount, 2 AS mnth
           UNION
           SELECT     'March' AS month, 0 AS IssueCount, 3 AS mnth
           UNION
           SELECT     'April' AS month, 0 AS IssueCount, 4 AS mnth
           UNION
           SELECT     'May' AS month, 0 AS IssueCount, 5 AS mnth
           UNION
           SELECT     'June' AS month, 0 AS IssueCount, 6 AS mnth
           UNION
           SELECT     'July' AS month, 0 AS IssueCount, 7 AS mnth
           UNION
           SELECT     'August' AS month, 0 AS IssueCount, 8 AS mnth
           UNION
           SELECT     'September' AS month, 0 AS IssueCount, 9 AS mnth
           UNION
           SELECT     'October' AS month, 0 AS IssueCount, 10 AS mnth
           UNION
           SELECT     'November' AS month, 0 AS IssueCount, 11 AS mnth
           UNION
           SELECT     'December' AS month, 0 AS IssueCount, 12 AS mnth

Which gave me a list of Months with at least a 0 count. I then added my initial query:

SELECT     TOP (100) PERCENT DATENAME(mm, Issue.CreatedDate) AS Month, COUNT(*) AS IssueCount, dbo.ActivityTask.ProcessId
FROM dbo.Issue AS Issue
INNER JOIN
dbo.ActivityTask ON Issue.ActivityTaskId = dbo.ActivityTask.ActivityTaskId
GROUP BY DATENAME(mm, Issue.CreatedDate), MONTH(Issue.CreatedDate), dbo.ActivityTask.ProcessId

and then did a cross join on this. The final query looked like this.

SELECT     TOP (100) PERCENT p.ProcessId
, SUM(p.Issuecount) AS issuecount
, mnth
,
month
FROM (SELECT y.ProcessId, x.mnth
,
CASE WHEN y.month = x.month THEN y.issuecount ELSE 0 END AS Issuecount
,
CASE WHEN y.month = x.month THEN y.month ELSE x.month END AS
month
FROM (SELECT 'January' AS month, 0 AS IssueCount, 1 AS mnth
UNION
SELECT
'February' AS month, 0 AS IssueCount, 2 AS mnth
UNION
SELECT
'March' AS month, 0 AS IssueCount, 3 AS mnth
UNION
SELECT
'April' AS month, 0 AS IssueCount, 4 AS mnth
UNION
SELECT
'May' AS month, 0 AS IssueCount, 5 AS mnth
UNION
SELECT
'June' AS month, 0 AS IssueCount, 6 AS mnth
UNION
SELECT
'July' AS month, 0 AS IssueCount, 7 AS mnth
UNION
SELECT
'August' AS month, 0 AS IssueCount, 8 AS mnth
UNION
SELECT
'September' AS month, 0 AS IssueCount, 9 AS mnth
UNION
SELECT
'October' AS month, 0 AS IssueCount, 10 AS mnth
UNION
SELECT
'November' AS month, 0 AS IssueCount, 11 AS mnth
UNION
SELECT
'December' AS month, 0 AS IssueCount, 12 AS mnth) AS x
CROSS JOIN
(
SELECT TOP (100) PERCENT DATENAME(mm, Issue.CreatedDate) AS Month, COUNT(*) AS IssueCount, dbo.ActivityTask.ProcessId
FROM dbo.Issue AS Issue
INNER JOIN
dbo.ActivityTask ON Issue.ActivityTaskId = dbo.ActivityTask.ActivityTaskId
GROUP BY DATENAME(mm, Issue.CreatedDate), MONTH(Issue.CreatedDate), dbo.ActivityTask.ProcessId) AS y) AS p
GROUP BY p.ProcessId, month, mnth
ORDER BY p.ProcessId, mnth

This worked great. It gave me totals per process id and per month. I was no able to graph this and then also include a 0 count if there was no processes identified in the database. But this was not enough. The client now wanted a second axis on the graph, showing a YTD figure. But not just the grand total of all the months per client, but a running total per client.

Now a running total is pretty much easy to implement. All you have to do is insert a sub-query as the field for the running total. Something like this using adventureworks:

select count(*) Customers
,(
select count(*) as Running from Sales.Customer a
where a.TerritoryID <= b.TerritoryID
)
Runningfrom Sales.Customer b
group by TerritoryID
Customers Running
3433 3433
64 3497
71 3568
4581 8149
97 8246
1685 9931
1850 11781
1820 13601
3631 17232
1953 19185

Ok so that's a running total. But when you have multiple groups, you want the running total to reset after every group. Simple solution. Create a view with all the rows, then using the were clause you can make sure which groups need to be reset. So with the final query above (not the adventureworks one) in a view I created a second query utilizing the view and added my running total.

select *,
(
select top 1 sum(issuecount) from view_IssuecountByMonthProcess a
where a.processId = b.processid
and a.mnth <= b.mnth
) as YTD
from view_IssuecountByMonthProcess b
order by processid, mnth

This might not be the most elegant way of doing it. But it works great for me.

If you think you might have something to add. If you think you might have a better solutions. Let me know. Leave a comment.

Now back to my website to do some business.

 

del.icio.us Tags: ,,,
Technorati Tags: ,,,

About eBay | Announcements | Safety Centre | Partner Centre | VeRO Protecting IP | Policies | Feedback Forum | Site Map | Help
Copyright © 1995-2008 eBay Inc. All Rights Reserved. Designated trademarks and brands are the property of their respective owners. Use of this Web site constitutes acceptance of the eBay User Agreement and Privacy Policy.
eBay official time