Spot the web RSS 2.0
# Tuesday, March 04, 2008
  1. If your site's content can be turned into a widget somehow, such as with an RSS feed or just a mini version of your site (ex. the puzzles widget on this site) - do so - and then submit your widget to all the major widget-oriented websites such as iGoogle, Netvibes, Pageflakes, Facebook, Live, Widgetbox and Widgipedia - it will help drive a LOT of traffic to your site - think of it as a great form of content syndication.
  2. Do NOT: have a public link exchange on your site, sign your site up on link farms or on SEO directories - this will lower your rankings on Google a lot - take it from experience.
  3. Though CSS can replicate the styling brought from these tags, search bots love them - so they're worth using for SEO purposes: <h1> - <h5>, <strong>, <em>.
  4. Make sure your site supports the big four: Internet Explorer 6+, Firefox 1.5+, Opera, and Safari.
  5. Make sure your site fits down to a 1024 x 768 monitor resolution.
  6. Use the color wheel when creating layout themes. Try to keep your site layout down to three distinct colors.
  7. Create a website shell (a.k.a. template), so that if you decide to make another website down the road, it will be a lot quicker to make because you'll already have a framework set up.
  8. Create a to-do list for your site so you don't forget anything as it grows bigger - I like to jot sudden ideas I get down on it too.
  9. A successful website provides a service to its users - such as teaching (Wikipedia) and/or social networking (Facebook).
  10. Whenever possible, use onmousedown instead of onclick - it's ~100ms faster.
  11. Use file compression for your javascript and web page files so that your pages load faster - also if you can, put the script include tags at the bottom of your page - this will give the illusion that your site loads faster because browsers usually comb through an entire js file before continuing on with loading the rest of your page.
  12. If you have a rails site, I suggest checking out Mongrel and Monit for Mongrel (or God) if you are currently using Apache with FastCGI. You may notice your app is a lot faster with Mongrel clustering than on FastCGI.
  13. This one is more of a for-your-health point, but our eyes naturally look slightly downwards - so if your computer screen is straight in front of you at eye level or higher, trying moving it down to neck or chest level - you may notice that your eyes feel more relaxed -- (I learned this last point from an eye doctor and feel that it helps me.)
Tuesday, March 04, 2008 11:30:24 AM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
Programming | Web Design
# Monday, March 03, 2008

Object oriented programming has been around for quite some time and was made popular by C++ back in the day. Nowadays, even web scripting languages support the paradigm. JavaScript does not have true OO but allows you to use the design pattern in your code. Today, we will dive into using object oriented programming with the popular JavaScript framework Prototype.

Prototype makes it easy to declare your own objects by using the "Class.create()" method:

  1. var sampleObject = Class.create();  


Once you do that you can start writing your class specific methods and properties inside the "prototype" object:

  1. sampleObject.prototype = {   
  2. }  


To declare private properties you simply specify the name of the property followed by a colon and the value:

  1. sampleObject.prototype = {   
  2.     linkIDs: ['mainPageLink''cdmScreenLink''adminLink''helpLink'],   
  3.     statusMessage: '',   
  4.     currentLinkID: 'myLink'  
  5. }  


The important thing to remember is that each property needs to be separated from the next by a comma. As shown above, property values can be a array, a number, a string but cannot be empty value. While:

  1. currentLinkID: 'myLink',  


is valid while


is not.

Declaring your own functions is not any different. Before we look into functions however, there is one function that requires special attention: the "initialize" function:

  1. initialize: function() {   
  2. }  


The initialize function is what JavaScript calls automatically when you create an instance of your object. If you are familiar with OO, this function is the constructor of your object. Any setup and initial requirements for using your object should be done in here.

So to get back to regular functions, they are declared in the format functionName: function() {} as in:

  1. doSomething: function() {   
  2. }  


So far your object should like like this:

  1. var sampleObject = Class.create();   
  2. sampleObject.prototype = {   
  3.     linkIDs: ['mainPageLink''cdmScreenLink''adminLink''helpLink'],   
  4.     statusMessage: '',   
  5.     currentLinkID: 'myLink',   
  6.     initialize: function() {   
  7.     },   
  8.     doSomething: function() {   
  9.     }   
  10. }  


Big deal right, including that in your html page and/or a separate JavaScript file does not do anything for you. The next step in making it of any use is to actually create an instance of the object like so:

  1. var sampleObjectInstance = new sampleObject();  


Creating an instance of the object automatically calls all your code inside the "initialize" function. Here, a good practice is to wrap the creation of your object inside the windows load or dom:loaded (Prototype v1.6) event like:

  1. Event.observe(window, 'load'function() {   
  2.     var sampleObjectInstance = new sampleObject();   
  3. });  


Or

  1. document.observe("dom:loaded"function() {   
  2.     var sampleObjectInstance = new sampleObject();   
  3. });  


To expand on using properties inside your object, whenever you want to access a property such as "currentLinkID", you have to prefix it with "this" as in:

  1. this.statusMessage = 'Who Am I?';  


That is because inside your object's function, without "this", the code does not know about the property. The same applies to using function so you cannot simply called the "doSomething" function with:


but instead if you have to use:

  1. this.doSomething();  

 


This can get a little more complicated when it comes to using event listeners inside your code. Let me elaborate. To tie an event observer that will call the "doSomething" function when a users clicks the link with ID 'myLink', you would usually do:

  1. $(this.currentLinkID).observe('click'this.doSomething);  


While that will work, if you try to access any class properties (such as "statusMessage") inside the "doSomething" function, you will get "undefined" for their values. That is because, again as pointed out above, the function is not aware that it belongs to an object so it does not know that the object has properties. The remedy is simple, simply append .bind(this) to the function when it is tied to the event as in:

  1. $(this.currentLinkID).observe('click'this.doSomething.bind(this));  


A similar approach needs to be applied when using the prototype built-in Ajax object. If you want to tie your custom functions to the "onFailure", "onComplete" or "onSuccess" functions, you need to use the "bindAsEventListener" function:

  1. onSuccess: this.showContent.bindAsEventListener(this)  


"Bind" also needs to be used whenever you employ the "each" construct as described in Gotcha with Prototype.Bind and Arrays

Below is the full class:

  1. var sampleObject = Class.create();   
  2. sampleObject.prototype = {   
  3.     linkIDs: ['mainPageLink''cdmScreenLink''adminLink''helpLink'],   
  4.     statusMessage: '',   
  5.     currentLinkID: 'myLink',   
  6.     initialize: function() {   
  7.         this.statusMessage = 'Who Am I?';   
  8.   
  9.         $(this.currentLinkID).observe('click'this.doSomething.bind(this));   
  10.     },   
  11.     doSomething: function() {   
  12.         alert(this.statusMessage);   
  13.   
  14.         new Ajax.Request(   
  15.             $(this.currentLinkID).href,   
  16.             {   
  17.             method: 'get',   
  18.             onSuccess: this.processContent.bindAsEventListener(this),   
  19.             evalScripts: true  
  20.             }   
  21.         );   
  22.     },   
  23.     processContent: function(request) {   
  24.     }   
  25. }   
  26.   
  27. Event.observe(window, 'load'function() {   
  28.     var sampleObjectInstance = new sampleObject();   
  29. });  


To call the functions of the sampleObject from outside you would simply do:

  1. sampleObjectInstance.doSomething();  

While you can access it's properties with the syntax:

  1. alert(sampleObjectInstance.statusMessage);  


That concludes the basic guide to using object oriented programming with Prototype.

Monday, March 03, 2008 10:10:37 AM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
AJAX | Javascript | Programming
# Thursday, February 28, 2008

Over my course of .NET development, I have compiled a list of essential free tools for .NET applications. This is not a the alpha or the omega of tools, just a short list that I feel is essential.

  1. SharpDevelop

    http://www.icsharpcode.net/OpenSource/SD/Download
    An open source IDE for .NET. Check out the full feature tour.


  2. Visual Web Developer Express Edition

    http://www.microsoft.com/express/vwd
    Stripped down version of Visual Studio that allows you to write .NET web applications.


  3. TortoiseSVN

    http://tortoisesvn.net/downloads
    There is no better Subversion client for Windows. You need this if you are going to use VisualSVN with Visual Studio.


  4. NAnt

    http://nant.sourceforge.net
    .NET based automation tool that has many built in tasks but could be extended with custom code written in any .NET language.


  5. Snippet Compiler

    http://www.sliver.com/dotnet/SnippetCompiler
    Snippet compiler is a small tool to write and execute small chunks of .NET code without creating a Visual Studio project.


  6. .NET Reflector

    http://www.aisto.com/roeder/dotnet
    Reflector is the class browser, explorer, analyzer and documentation viewer for .NET. Reflector allows to easily view, navigate, search, decompile and analyze .NET assemblies in C#, Visual Basic and IL.


  7. Microsoft SQL Server Management Studio Express

    http://www.microsoft.com/downloads/details.aspx?FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796&displaylang=en
    Tool for database administration and development from Microsoft


  8. Quest Comparison Suite for SQL Server

    http://www.quest.com/Comparison-Suite-for-SQL-Server
    Compare and synchronize database schema and data


  9. XYPlorer

    http://www.xyplorer.com
    Awesome file manager. The older version is completely free.


  10. Convert C# to VB.NET

    http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx
  11. NAnt Add-In

    http://www.netlogics.ch/devcenter/display/NLC/NAntAddin
    Visual Studio add-in for NAnt integration


  12. NUnit Add-In

    http://www.netlogics.ch/devcenter/display/NLC/NUnitAddin
    Visual Studio add-in for NUnit integration
Thursday, February 28, 2008 2:53:42 PM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
.Net | Microsoft | Programming | Visual Studio
Navigation
Archive
<March 2008>
SunMonTueWedThuFriSat
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2010
Guy Levin
Sign In
Statistics
Total Posts: 63
This Year: 0
This Month: 0
This Week: 0
Comments: 14
Themes
All Content © 2010, Guy Levin