AKA Marketing.com Logo            VISIT THE BLOG            

Blogged thoughts, is our web blog. Expect views, opinion, rants and tirades about everything and anything 

« Home / Forums »        

 


Subscribe to our SEO / IT related blog by entering your email address below

Blogged thoughts

| by the www.akamarketing.com team

Welcome to our blog, the blog will (mostly) contain postings related or loosely related to the IT sector in general, although you may find a high occurance of SEO (search engine optimisation / search engine marketing) related posts as this is our particular area of expertise. Expect some personal and general topical stuff on occasion also. The postings could be general comments, opinion, code samples, product reviews, service reviews, website reviews, rants or whatever, nothing too serious though.

Country list for developers

August 20th, 2007

Recently while looking for a list of countries to populate a country dropdown box I required I came across a real gem which provided me with exactly what I was looking for. An easy to work with comma separated file (CSV) of 273 countries and territories is available from http://www.andrewpatton.com/countrylist.html. The figure of 273 is based on what various international organizations count as countries.

The data contains not just your basic name column but many other columns too such as 2 letter code, 3 letter code (letter codes are useful for the value property of dropdown/select boxes), TLD, capital, currency code, currency name, telephone code and two or three others as well. Budding software and web developers should find this handy, I know it saved me a good bit of time anyhow. Incidentally the chap that maintains the list has the goal of visiting 50 countries before he’s 50, now that’s a goal.

Cheap as chips SEO link building

August 20th, 2007

We all know that links are what makes the world go round as far as search engine optimisation is concerned, they can literally be the difference between position 100 and position 1 in the search results. Links can be aquired on a shoestring budget, they can even be aquired with no budget at all. In this post I’m going to outline how I regularly get links for sites I’m working on.

Starting then - I download the lastest directory excel file from http://info.vilesilencer.com/. This regularly updated excel file basically lists all free SEO friendly directories (along with PR information) that are actively adding sites. At the moment there are about 500 directories maintained in the list. It’s quite a time consuming, tough and boring task but what I do is literally submit to each and every one of them, even those with a PR of zero. I’d say about 60% of links I get from these directories are of less than average standard but it’s a numbers game and every little helps.

Most of the time submitting to these 500 or so directories results in about 150 new links within four or five weeks of completing the last submittal. If you were to attempt something similar I recommend using two or three variations of your target keyword for your listing title because this is what most of the directories use to link to the listing URL and using only one variation might look like artificial link building to Google, MSN and the other search engines. Be sure to use a throw away email address as some of the directories will send you spam. If your not in an uber competitive industry these links will shoot you right up the rankings.

After I’ve a good base of links from free directories, I then move on to using content to get more higher quality links. If I’m promoting a site about something I’m knowledgeable in I will write up two or three articles myself, if however I’m working with a client that’s in the gardening industry for example which I know nothing about I’ll hop on to http://www.elance.com and have one of my regular content writers do up the articles. Elance have a tonne of talented freelance writers who can do up content about pretty much any topic for very moderate amounts of money.

Articles in place, I then use Google to search for sites which may be interested in publishing them in return for an embedded link of course. Examples of search queries which I might use include ‘keyword1 inurl:submitarticle’, ‘keyword1 keyword2 inurl:addarticle’, ’keyword1 keyword2 intitle:”submit article”‘ as well as a couple of other variations. Sites which are returned from searches like this are highly targeted and therefore likely to publish your articles, these sites will most likely publish a lot of ‘guest’ articles however and thus your link(s) will be of lesser value.

What I often do is just search for related sites (without any ’submit’,'article’,'content’ type keywords) and simply just email the webmaster of each appropriate result asking him/her if they’re interested in publishing my articles. With this approach I find that I usually have about a 20% (assuming content is always at a high standard) success rate, which I think is pretty decent. This means that to get published 20 times (which equals 20 links) I would have to visit and email approximately 100 sites which is obviously time consuming but well worth it as it can result in some very high quality links which can do wonders for your rankings. After being published by a site I add that sites details such as url, topic, webmaster name, webmaster email etc. to a excel file so I can try and have content published on that site again at some stage in the future. Additionally I pretty much always submit my articles to the top ten or so article directories which usually results in another handful or so of variable quality links.

There you have it, cheap, perhaps free (if you can write content yourself) methods of link building. I use these same methods all the time when working with akamarketing.com and with clients and I’ve seen really good results. Be warned though that link building, no matter what approach you take is a very time consuming task. Happy linking!

Repeater paging with an SqlDataSource in ASP.Net

August 17th, 2007

The ASP.Net repeater control has over the last while become one of my favourite controls due to the fact it can be highly customised because it’s a templated control. Two shortcomings with the current implementation of the repeater control however are its lack of paging and sorting capabiltites. Of these I believe paging is perhaps the more desirable feature and thus I will now provide an outline of how to implement paging with a repeater using an SqlDataSource. I’ve chosen to work with an SqlDataSource as this I imagine is the most common underlying data source used with repeaters. 

PagedDataSource class
The most popular way ASP.Net developers enable repeaters to page through large amounts of results is with the help of the PagedDataSource class. This is a class which

Encapsulates the paging-related properties of a data-bound control (such as DataGrid, GridView, DetailsView, and FormView) that allow it to perform paging and is used by control developers when providing paging support to a custom data-bound control.

Since this class can be used to provide paging support to custom data-bound controls it can of course be used by built in data-bound controls such Repeaters and DataLists to provide the same support. If you look on the MSDN page which I have linked to above you’ll notice however that the class implements the ICollection interface. This means that any underlying source you want to feed into the PagedDataSource class (which in turns feeds into the repeater itself) must also implement ICollection. The SqlDataSource class does not implement this interface and thus we must put the data into some class that does implement ICollection, in this case we are using a DataView. OK lets look the c# code behind.

  1. public partial class _Default : System.Web.UI.Page
  2. {
  3.     PlaceHolder innerPlaceHolder = new PlaceHolder();
  4.     protected void Page_Load(object sender, EventArgs e)
  5.     {
  6.         Session[“pageNumber”] = 1;
  7.         Page_with_Repeater();
  8.         int totalResults = (int)Session[“totalResults”];
  9.  
  10.         //five represents the page size - could you session/viewstate
  11.         //to avoid hardcoding but for this sample it’s fine.
  12.         float numOflinks = ((float)totalResults / 5);
  13.        
  14.         //determine how many links to create/display
  15.         if (numOflinks % 1 == 0) numOflinks = (int)numOflinks;
  16.         else if(numOflinks % 1 != 0) numOflinks = (int)numOflinks + 1;
  17.        
  18.         for (int i = 1; i < numOflinks+1; i++)
  19.         {
  20.             LinkButton PagingLink = new LinkButton();
  21.             PagingLink.ID = “pagelink” + i.ToString();
  22.             PagingLink.Text = i.ToString();
  23.             PagingLink.Visible = true;
  24.             PagingLink.CommandArgument = i.ToString(); //used to detect result page required
  25.             PagingLink.Command += new CommandEventHandler(PagingLink_Command);
  26.             innerPlaceHolder.Controls.Add(PagingLink);
  27.         }
  28.     }
  29.  
  30.     public void Page_with_Repeater()
  31.     {
  32.         //SqlDataSource does not implement ICollection and
  33.         //thus will not work with PageDataSource we therefore use
  34.         //a DataView instead which implements all required Interfaces
  35.         DataSourceSelectArguments arg = new DataSourceSelectArguments();
  36.         DataView dv = (DataView)SqlDataSource1.Select(arg);
  37.  
  38.         //Instantiate an instance of PagedDataSource
  39.         //and sets its main properties
  40.         PagedDataSource PagedResults = new PagedDataSource();
  41.         PagedResults.DataSource = dv;
  42.         PagedResults.AllowPaging = true;
  43.         PagedResults.PageSize = 5; //CHANGE THIS ABOVE TOO
  44.  
  45.         int pageIndex;
  46.         Int32.TryParse(Session[“pageNumber”].ToString(), out pageIndex);
  47.         PagedResults.CurrentPageIndex = pageIndex-1; //because this is indexed based
  48.  
  49.         //after the PagedDataSource class is in place we can then
  50.         //feed this into the repeater itself
  51.         repeater1.DataSource = PagedResults;
  52.         repeater1.DataBind(); //repeater does not bind natively
  53.  
  54.         //configure paging number - Google Style
  55.         //to do this we dynamically create X amount of links based on the total
  56.         //results and the PageSize - we can’t create these buttons here as
  57.         //events will only run if added in design time or page_init/page_load
  58.         Control OuterPanel = FindControlRecursive(repeater1, “placeLinks”);
  59.         OuterPanel.Controls.Add(innerPlaceHolder);
  60.     }
  61.  
  62.     protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
  63.     {
  64.         //variable used to create X amount of buttons
  65.         Session[“totalResults”] = e.AffectedRows;
  66.     }
  67.  
  68.     protected void PagingLink_Command(object sender, CommandEventArgs c)
  69.     {
  70.         Session[“pageNumber”] = c.CommandArgument.ToString();
  71.         Page_with_Repeater();
  72.     }
  73.  
  74.     private Control FindControlRecursive(Control root, string id) { } //removed for clarity
  75.  
  76. }

All the important paging related code is encapsulated in the Page_with_Repeater() function, it’s all commented so I won’t repeat myself here. As far as what the code does, well it displays 5 rows of data at a time from the underlying datasource (in this case SqlDataSource1) in a repeater. LinkButtons are dynamically created and then added to the repeater to display page numbers as links to allow the user to select a specific result page. Often interfaces allow the user to select a specific page (as in this example) and to use previous and next buttons for working his or her way through data, on that note a good example of using buttons for repeater paging is given on the 4guysfromrolla.com website. 

The corresponding .aspx markup for the c# code is very simple and contains a repeater (named ‘repeater1′) with an embedded panel (named ‘placeLinks’) and an SqlDataSource (named ‘SqlDataSource1′) which specifies an event hander for the ’selected’ event in order for us to create the correct amount of paging links.

Incidentally you may notice in the C# code above that I have used a custom function called FindControlRecursive to enable me to add the dynamically created placeholder (which contains all the page number linkbuttons) to the statically created panel within the repeater. This is a handy function I came across recently and which I often use in conjunction with repeater controls (and many other controls too). It accepts a root control and an id of the target control to look for. It works in a similar way to the standard FindControl method except it searches all controls (including child controls) in a control tree hierachy whereas FindControl will only search the specific control you pass it without examining any child controls.

That’s it - paging with a repeater using an SqlDataSource is implemented. As you can see it is not too difficult. If you have any questions please feel free to ask.  

Adwords - Bidding on a competitors name

August 12th, 2007

Was doing a search earlier today for a Dublin based company called Sureskills who provide a variety of IT Services & Training. Logically my first step was to search for ‘sureskills‘ on Google as I wasn’t sure of the exact URL. Google being Google returned their site #1, however I noticed that one of Sureskills competitors namely New Horizons Ireland was running an Adword ad triggered by the keyword ’sureskills’. This is obviously an attempt by New Horizons Ireland at taking business directly from their competitors and is completely allowed under the terms and conditions of Google Adwords. If however a competitor of Sureskills tried to plug the term ’sureskills’ into their actual ad text well that’s something that can find its way into court quite quickly.

I found another example when I searched for ’Webtrade‘. Webtrade are a web dev/design company (who I actually interviewed for a couple of years ago) based in Rathfarnham, Dublin. In this case however not one but two competitors are bidding on Webtrades’ name. Not quite sure where I stand in regards to the question of ethics in relation to bidding on competitors names, the more striking question for me however would be the value (or lack of value) of bidding on competitors names. If someone is searching for a specific company, for example Sureskills, is it likely that they will click through to a website that isn’t that of Sureskills? Perhaps it’s useful for a competitor to simply get their URL/ad seen anyhow just in case the searcher might visit them after being on the Sureskills website?

Incidentally you may also notice a lot of companies actually bid on their own names. Examples of companies which I’ve spotted doing this recently include Vodafone, PaddyPower & Clearscape. These companies are doing this perhaps as a counter-measure to anyone else bidding on their name. Whatever the reason the technique of bidding on your own name is advocated by one of Irelands leading PPC experts and thus may be worth some consideration.

Hanover Quay Apartments - the definition of style

August 9th, 2007

Has anyone seen shots of (or been in) any of the apartments in the new docklands development? From the ground this whole development looks stunning however it was only when on daft.ie the other day (I’m looking at renting options) that I actually got my first look inside this developments’ apartments. I have to admit that I was just blown away by some of the apartments, most notably though those in Hanover Quay. The contemporary style & decor is right down my street, unfortunately the prices are not. Judge for yourself, here’s some pictures (credit to daft.ie for these shots - I did not take them!). Click on the thumbnails to open fully sized pictures in new windows.

Hanover Quay Apartment Hanover Quay Apartment Balcony View Hanover Quay Apartment Hanover Quay Apartment

As you can see the main living room area has a contempory well lit design and is particularly impressive, as is the very large balcony area, whether or not it ever stops raining to use the balcony is another thing though. Hanover Quay (and the docklands development in general) certainly beats the socks of the new developments down my way (Santry) anyhow.              

If a certain someone up above could arrange for me to win the euromillions on friday I’d definitely snap one of these up straight away. One thing is for sure though, if I ever get to live in a place like that everyone will be leaving their shoes in the hall.

Microsoft Certified Technology Specialist (MCTS)

August 9th, 2007

Booked myself in for one of the two exams required for the MCTS - .NET Framework 2.0 Web Applications certification yesterday. The exam I’m going for is the Microsoft .NET Framework 2.0 - Web-Based Client Development exam (code 70-528). I’m booked in for mid September to do it with New Horizons Ireland at a cost of €140. New Horizons seem to be the only Dublin based exam center available.

The exam focuses on using ASP.Net 2.0 to build highly dynamic, secure and scalable web applications and questions a developers knowledge of such things as standard & custom controls, data access via ADO.Net, web parts, membership, state management, mobile web applications, management & deployment of web apps and much much more. To help me prepare I got the training kit book by Glenn Johnson and Tony Northrup covering this specific exam and reviewed two very highly rated Wrox ASP.Net books which I bought last year. Additionally the fact I’ve been doing most of this stuff in my daily 9 to 5 for a good while now means I’m feeling pretty confident. In fact I anticipate much more difficulty with the other exam required for this certification - the Microsoft .NET Framework 2.0 - Application Development Foundation exam (code 70-536).

Incidentally I’m also considering going for another certification. It’s the ISEB Foundation Certificate in Software Testing. I think everyone would agree that software testing and software development are very complementary skills. Not sure where this can be done though and if classroom training is required, ideally I would just like to get stuck into a good book for a few weeks.

HOME | ABOUT US | CONTACT US | SITEMAP | GOOGLE SITE SEARCH | TOP
12 Lorcan Crescent, Santry, Dublin 9, Ireland +353 87 9807629