Spot the web RSS 2.0
# Tuesday, March 18, 2008

Google updated their charts API, which they first released back in December 2007. First of all, the old limit of 50,000 queries per user per day has been removed (though Google asks you email them if you receive more than 250,000 queries a day so they can better scale this).

Also, there are several extended or new features. Among them are radar charts, sparklines, and maps. The last one is perhaps the most interesting, as it lets you display and color a map. While you can already use the Google Maps API for certain needs, this is a much more minimalist map that might come in handy for illustrations, games, traffic visualization and other things. As usual, generating maps or any other chart type consists of simply formulating a special URL.

Tuesday, March 18, 2008 9:08:39 AM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
Google | Web 2.0
# Monday, March 17, 2008

If you've done any Ajax development then you know that much of the loading of data is done in the background. This is great from a developers stand point, but from a users stand point it can be confusing as to what is happening while the data is being loaded. The solution to this is to show a loading indicator.

A loading indicator is a great idea and a nice animated image that could be hidden would be nice. However, if you are like most developers making a nice animated image may not be your strongest point. Well, today while seeing what was getting bookmarked on del.icio.us, using the del.icio.us Spy, I found an interesting and simple service that makes it very easy to get a nice looking loading indicator.

The service is call Ajaxload and is very easy to use. You simply choose the loading icon that you like and the background/foreground colors (you can even have the background transparent). Then you just save it to your computer using the "Download It" button and then you have your own customized loading indicator.

You can go to the service by clicking here.

If you have used this or a similar service I would love to hear about your experience with it (you can leave a comment, or if you would like you can write a blog post about it on this blog, using your free Ajaxonomy account). So, remember that your users would love to see a loading indicator when it is appropriate.

Monday, March 17, 2008 10:33:41 AM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
AJAX | Programming | Web 2.0 | Web Design
# Tuesday, February 19, 2008

In this tutorial, i will be teaching you how to create a mini javascript framework. Now its not going to be anywere near as feature rich as other frameworks such as mootools and jquery but its a start.



Step 1 : Create the files

index.htm, Our html file
framework.js, Our javascript file



Step 2 : Populate the index.htm file

Ok first things first, lets get some html code into our index file.

Code
GeSHi (html4strict):
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5. <title>Framework</title>
  6.  
  7. </head>
  8.  
  9.  
  10. </body>
  11. </html>
  12.  
Created by GeSHI 1.0.7.20


The above code is pretty self explanatory.

Now, add the link to our javascript file inbetween the head tags

Code
GeSHi (html4strict):
  1. <script type="text/javascript" src="framework.js"></script>
Created by GeSHI 1.0.7.20


Next thing to do, add some functions from the frame work we will create. Add this after the first script tags

Code
GeSHi (html4strict):
  1. <script type="text/javascript">
  2. <!--
  3. window.onload = function() {
  4.  
  5. Framework.Effects.add("box", 'blink', function() {
  6.    // Functions here
  7. });
  8.  
  9. Framework.Effects.start();
  10.  
  11. }
  12. //-->
  13. </script>
Created by GeSHI 1.0.7.20


Explanation of the above:

window.onload = function() { }
This tells the browser to run the code inside the function after the page has fully loaded.

Framework.Effects.add("box", 'blink', function() {
   // Functions here
});

This is a function that we will create. It has three parameters, object id, effect type and function.
The first parameter should be a string of the id for the object we want to put the effect on.
The second parameter is the effect type. For this tutorial, there will only be one effect, "blink".
The third and final parameter is the function. Here you put what ever code you want to run when ever the effect starts.

Framework.Effects.start();
This is another framework function that we will create. All it does is tell the browser to start the effects.



Step 3 : The framework itself

This is the longest step in the tutorial so pay attention.
In this step, open up framework.js as this is the file we will be editing.

Firstly, we have to create our framework object. Put this code at the top of the page:

Code
GeSHi (javascript):
  1. var Framework = new Object();
Created by GeSHI 1.0.7.20

This just tells the browser that the variable Framework is an object.

Next, we create our first sub-object: Styles
Put this code after the framework variable.

Code
GeSHi (javascript):
  1. Framework.Styles = {
  2. add: function(obj, styles) {
  3. for (style in styles) {
  4. obj.style[styles[style][0]] = styles[style][1];
  5. }
  6. },
  7.  
  8. rem: function(obj, styles) {
  9. for (style in styles) {
  10. obj.style[styles[style][0]] = null;
  11. }
  12. },
  13.  
  14. get: function(obj, style) {
  15. return obj.style[style];
  16. }
  17. };
Created by GeSHI 1.0.7.20


Now to explain it all.

Framework.Styles = {};
This creates the Styles object in the Framework object.

add: function(obj, styles) {
   for (style in styles) {
      obj.style[styles[style][0]] = styles[style][1];
   }
},

This is the first function in our styles object. It takes two parameters, a html object and an array.
The object is simply:
... document.getElementById('objid') ...

The array format is like so:

Code:
Array {
Array {
'styletype',
'styles'
}
}

The styletype would be a css attribute like color and the styles would be a value like #ff0000

for (style in styles) {
   obj.style[styles[style][0]] = styles[style][1];
}

This creates a simple for loop. It works in the same way as a PHP foreach loop.

PHP

Code
GeSHi (php):
  1. foreach ($styles as $style) {}
Created by GeSHI 1.0.7.20


Javascript

Code
GeSHi (javascript):
  1. for (style in styles) {}
Created by GeSHI 1.0.7.20


As you can see its almost identical.

obj.style[styles[style][0]] = styles[style][1];
This gets the objects styles and then edits the styletype with the styles.

If coding this literally, it would be:

Code:
obj.style.color = "#ff0000";


rem: function(obj, styles) {
   for (style in styles) {
      obj.style[styles[style][0]] = null;
   }
},

This does exactly the same thing except each styletype in the array is removed from the object.

get: function(obj, style) {
   return obj.style[style];
}

Byfar the simplest function in the Styles object, this just gets the object, the style specified and returns the styles contents.

Example usage:

Code:
var object = document.getElementById("box");

// Setting the styles using the previous add function
Framework.Styles.add(object, [
['color', '#ff0000']
]);

alert(Framework.Styles.get(object, 'color'));
// Will alert, you guessed it, #ff0000


The Effects Object
Now we are going to create the main effects object. This is the part the tutorial has been building up to.
Here is the beast in all its glory:

Code
GeSHi (javascript):
  1. Framework.Effects = {
  2. effects: [],
  3. timers: [],
  4.  
  5. add: function(obj, type, func) {
  6. Framework.Effects.effects.push([type, obj, func]);
  7. },
  8.  
  9. blink: function(obj, func) {
  10. var obj = document.getElementById(obj);
  11.  
  12. setInterval(function() {
  13. if (Framework.Styles.get(obj, 'visibility') == 'hidden') {
  14. Framework.Styles.add(obj, [['visibility', 'visible']]);
  15. } else {
  16. Framework.Styles.add(obj, [['visibility', 'hidden']]);
  17. }
  18.  
  19. func();
  20. }, 500);
  21. },
  22.  
  23. start: function() {
  24. for (effect in Framework.Effects.effects) {
  25. var effect = Framework.Effects.effects[effect];
  26. Framework.Effects.timers[effect[0] + effect[1]] = false;
  27.  
  28. switch (effect[0]) {
  29. case 'blink':
  30. Framework.Effects.blink(effect[1], effect[2]);
  31. break;
  32. }
  33. }
  34. }
  35. };
Created by GeSHI 1.0.7.20


Confusing huh? Well not to worry, I shall explain it all. Before I do, add that code under the Styles object.
Now lets explain it.

Framework.Effects = {};
This creates another object just like the Styles object.

effects: [],
timers: [],

These are two empty arrays. Yes, thats right, arrays. You can define arrays in two ways in javascript:
var array = new Array();
or
var array = [];
Guess which one I use.

add: function(obj, type, func) {
   Framework.Effects.effects.push([type, obj, func]);
},

Remember when we used the add function on the HTML page? Well this is the function that gets called.

Quik Recap:

Code
GeSHi (javascript):
  1. // This is what we wrote on the HTML page
  2.  
  3. Framework.Effects.add("box", 'blink', function() {
  4.   // Functions here
  5. });
Created by GeSHI 1.0.7.20


Now the first parameter is a STRING not an Object like the functions in the Styles object. There is a reason for this but I will not explain it in this tutorial.
The second parameter is the effect type. Also a string.
The third is the function. Now if left empty, nothing will run when the effect blink is run. If there is code in it, it will be run every time the blink effect is run.

Framework.Effects.effects.push([type, obj, func]);
This just pushes a new array into the effects array we defined earlier. It contains the effect type, object id and function.

blink: function(obj, func) {
   var obj = document.getElementById(obj);

   setInterval(function() {
      if (Framework.Styles.get(obj, 'visibility') == 'hidden') {
         Framework.Styles.add(obj, [['visibility', 'visible']]);
      } else {
         Framework.Styles.add(obj, [['visibility', 'hidden']]);
      }
      
      func();
   }, 500);
},

Here we go. Our first effect in the mini framework. It takes two parameters, object id and function.

var obj = document.getElementById(obj);
This creates a new variable called obj which contains the object of the id given.

setInterval(function() {
   if (Framework.Styles.get(obj, 'visibility') == 'hidden') {
      Framework.Styles.add(obj, [['visibility', 'visible']]);
   } else {
      Framework.Styles.add(obj, [['visibility', 'hidden']]);
   }
   
   func();
}, 500);

This is the most important part of our blink effect even though its very simple.
The first part is to create an interval. Some of you may know it as setTimeout. setInterval is the samething but I prefere using it. This interval is set to run at every 500 milliseconds or every half second in simple terms.

if (Framework.Styles.get(obj, 'visibility') == 'hidden') {
   Framework.Styles.add(obj, [['visibility', 'visible']]);
} else {
   Framework.Styles.add(obj, [['visibility', 'hidden']]);
}

Here we make use of some functions we created in the Styles object. The if statement uses the get function in the Styles object to check the value of the objects visibility style.
If its hidden, use the add function to make the visibility visible else make it hidden again. This will just loop over and over so you get the blink effect.

func();
Now this is the function that we put as the third parameter on the index page. Remember?

Quik Recap:

Code
GeSHi (javascript):
  1. // This is what we wrote on the HTML page
  2.  
  3. Framework.Effects.add("box", 'blink', function() {
  4.   // This is the third parameter
  5.  
  6.   // Functions here
  7. });
Created by GeSHI 1.0.7.20


Because it was passed through a variable, to run the function inside, all we have to do is put brackets at the end. Neat huh?

start: function() {
   for (effect in Framework.Effects.effects) {
      var effect = Framework.Effects.effects[effect];
      Framework.Effects.timers[effect[0] + effect[1]] = false;
      
      switch (effect[0]) {
         case 'blink':
            Framework.Effects.blink(effect[1], effect[2]);
         break;
      }
   }
}

Yay, the final function in the Effects frame work. I am happy because its 2:45am and I am very tired.
Now we create a function called start. We ran it once on the index page.

Quik Recap:

Code
GeSHi (javascript):
  1. window.onload = function() {
  2.  
  3. Framework.Effects.add("box", 'blink', function(){});
  4.  
  5. // Here we go
  6. Framework.Effects.start();
  7.  
  8. }
Created by GeSHI 1.0.7.20


This function makes it all work. It goes through the effects array we looked at in the add function, gets the effect type and sends the appropriate information to the appropriate effects functions.

for (effect in Framework.Effects.effects) {
   var effect = Framework.Effects.effects[effect];
   Framework.Effects.timers[effect[0] + effect[1]] = false;
   
   switch (effect[0]) {
      case 'blink':
         Framework.Effects.blink(effect[1], effect[2]);
      break;
   }
}
Here we have another for loop. Same type as the one I explained earlier.

Quik Recap:

Code:
PHP
foreach ($styles as $style) {}

Javascript
for (style in styles) {}


This for loop gets all the effect arrays in the effects variable.
var effect = Framework.Effects.effects[effect];
The effect variable now contains this iterations array contents.

Framework.Effects.timers[effect[0] + effect[1]] = false;
Because this is not needed in this framework for this tutorial, I will not explain it. Leave it in there though as it will be needed for future parts to this tutorial.

switch (effect[0]) {
   case 'blink':
      Framework.Effects.blink(effect[1], effect[2]);
   break;
}

Here we have a simple switch statement. Works in the same way as a PHP switch statement. For those of you who dont know what a switch statement is, think of it like this:

Code:
switch (variable) {
case "a":
alert("a");
break;

case "b":
alert("b");
break;

case "c":
alert("c");
break;

default:
alert("Unknown letter");
break;
}

IS

if (variable == "a") {
alert("a");
} else if (variable == "b") {
alert("b");
} else if (variable == "c") {
alert("c");
} else {
alert("Unknown letter");
}


The switch statement simply gets the effect type and sends the object id and function to the particular effect.



And there you have it. An introduction to a simple javascript mini effects framework. I hope you have learned alot from this tutorial.

Tuesday, February 19, 2008 5:39:11 PM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
Javascript | Web 2.0
# Sunday, February 17, 2008

Six months after Facebook came out with a version of its social network for the iPhone, LinkedIn is finally coming around to releasing a mobile version of its own.

It is live now. Just go to http://m.linkedin.com/ on any mobile browser. Of course, if you have an iPhone, you will see a version optimized just for that device.

This isn’t exactly what we had in mind when we noted there is still an opportunity to create a kick-ass mobile social network.

 linkedin-iphone-small-1.png

But the basic functionality is all there. You can look up people’’s profiles, invite people into your network, and see updates from your contacts. More fully-featured, downloadable mobile apps geared to specific phones may be coming in the future.

Even limited mobile browser accessibility should help LinkedIn keep its members happy. The regular Website has been on a tear lately, nearly tripling in unique visitors over the past year in the U.S., to 3.6 million in January 2008, according to comScore.

No signs of social networking fatigue there.

linkedin-chart.png

Sunday, February 17, 2008 5:37:15 PM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
Site Reviews | Web 2.0
# Monday, February 04, 2008

Bramus introduces a new version of jsProgressBarHandler with bugfix to making multiple barImages properly work with Safari and addition of an internal queue.

Javascript progress bar demo

jsProgressBarHandler is a Javascript based Percentage Bar / Progress Bar, inspired upon JS-code by WebAppers and CSS-code by Bare Naked App. Next to a structural rewrite of the WebAppers code, this javascript progress bar can easily be extended and tweaked just by setting a few parameters.

jsProgressBarHandler has been tested and verified working in IE6, IE7, FireFox 2 and Safari 3.0.3. Other browsers should work fine too (untested though).

This is one of the coolest javascript progress bars I’ve ever seen. You can find non-ajax demo here and a bit less cool Ajax demo here.

Monday, February 04, 2008 11:30:43 AM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
AJAX | Javascript | Web 2.0 | Web Design
# Monday, January 14, 2008

Optimizing Symbol Resolution

How to speed up in a late binding world. Discusses the scope chain from vars to the DOM itself, and how to make sure that you don’t keep running around the chain.

JavaScript Code Inefficiencies

To make string manipulation more effience in IE:

  • Use local vars
  • Cache strings from IE objects
  • Use Array.join for concatenation

(I prefict that array.join will stick around even when it isn’t faster, just like the equivilent in Java land).

Some other thoughts:

  • Don’t use eval unless you really have too. Instead of parameterized code
  • SWITCH is costly for large sets, consider a hash table wrapped in a try/catch
  • WITH is costly due to symbol lookups everywhere, use manual iterators
  • Don’t use your own get/set accessors

IE Performance Considerations

DOM is expensive in IE, especially due to the generic nature of the platform. Also watch out for layout improvements such as hover CSS style.

HTTP Performance

Simplify and reduce:

  • Script in on JS file
  • Styles in one CSS file
  • Fewer, smaller, unscaled images
  • Simplify layout
  • Use HTTP compression (lots of detail on cache control)

Tools and Techniques

  • Developer Toolbar
  • Fiddler: HTTP traffic watching
  • Ajax View: New from MS Research. On the fly rewrite the JavaScript and add instrumentation code.
Monday, January 14, 2008 4:41:00 PM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
Web 2.0 | AJAX
# Thursday, January 10, 2008

xobni

Xobni (that's inbox backwards - cute!) is the next big idea in terms of productivity enhancements for your inbox. The Xobni software is an add-on for Microsoft Outlook that offers email management and quick access to important information in your email. But more than that, Xobni claims to "expose the hidden social network" in your email. That's ingenious because everyone I know is in my email...somehow, somewhere...but they may or may not be my friend on MySpace, Facebook, flickr, YouTube, etc. This is especially true for my family members over 40!

Xobni taps into email's hidden social network by creating information-rich profiles out of every person you have ever corresponded with by mining your email for information about them.

The Xobni software has several features, including fast email search, email analytics, automatic phone number discovery, threaded conversations, and more.

The email search is fast and begins finding the people and/or emails you're looking for as you type. A search for a contact will pull up their profile and every email where you two have corresponded...in 0.3 seconds!

A Xobni profile is created for every person you've emailed with and is displayed on the right side of Microsoft Outlook inside the Xobni sidebar. Each profile displays relationship statistics, contact information, related people, threaded conversations, shared attachments, and the author of the message you are currently looking at.

xobni

The relationship statistics show things like the time of day when you receive emails from the contact, the balance of incoming and outgoing messages, and the person's rank out of all of your contacts. These statistics are created by Xobni's powerful analytics engine, which can also be accessed from a menu option to further analyze your email habits with numbers, charts, and graphs.

A contact's phone number is displayed in the Xobni sidebar by automatically extracting that information from your emails. This way, you can see someone's phone number even if you've never actually entered them into your Outlook contacts. If you hover over the phone icon next to the number, you can see the text of the email from which their phone number was extracted.

phone_button

Further down, the related people section shows other people who are connected to that person in some way, exposing your shared friends as well as your contacts relationships to each other. Clicking on the name of one of the "related people" will take you to their profile in the Xobni sidebar.

Beneath the related people pane, a recent conversations area shows your most recent previous correspondence with that contact. This can be very useful to help jog your memory when replying to a new email, as you can quickly recall what had already been said. It can also save you time because you never have to navigate away from the current conversation to locate previous emails. The conversations are listed by date, and by clicking on them, you can then view the emails themselves. You can also reply or forward one of those emails right in the Xobni sidebar, or you can choose to open the email in Outlook. Attachments they've sent you or you've sent them are underneath the conversations area, again saving you from having to navigate away from the current conversation to find the email with the attachment you need.

Xobni also helps with scheduling. It displays your appointments, schedule, and to-do list, and in the Xobni sidebar, there is a "Schedule Time" link below each contact. Clicking this link opens up a pre-composed email with your availability. This saves you time as you don't need to check your calendar every time you need to schedule a meeting. Xobni knows when you have an opening. Another interesting feature is that Xobni also automatically identifies people you've lost touch with by looking at the dates of your last correspondence with them.

Outlook is Only the Beginning

Although currently for Microsoft Outlook only, Xobni's blog hints that this may just be the beginning by calling Outlook "the first platform we’ve integrated with." They said they chose Outlook because it is used by 350 million people, but they also say that they "don’t want to force our users to change email clients or social networks to use Xobni. Our software seamlessly integrates with the environments and systems that you already use to communicate and build relationships." This makes me think that we will see integration with more platforms in the future.

Xobni's brilliance is in providing you with a true social network filled with information that can help you stay productive and get things done. It will never replace the fun of building a customized profile page on a social network like Facebook or MySpace, but it uncovers the network already present in what is perhaps the main area of your life where you communicate and build the most relationships. This makes Xobni not just useful, but one of those, "how did I ever live without it" kind of things.

Xobni is currently in an invite-only beta, but you can sign up to try it here.

Thursday, January 10, 2008 4:54:04 PM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
Site Reviews | Web 2.0
# Wednesday, January 09, 2008

If you are looking for a ASP.NET Google Map Control, your search is now over.

Jacob Reimers from http://www.reimers.dk/ offers a great asp.net control in 2 flavors.

The free version which lets you easily display a map with markers and/or lines and a licensed version which gives you the full power of Google Maps.

Download the free control, unzip it to your Bin folder in your web app and add a reference to it.

 

This is a sample asp.net page:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="GoogleMap" Namespace="Reimers.Map" TagPrefix="Reimers" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"> 
    <title>Google Map test</title>
</head>
<body> 
    <form id="form1" runat="server"> 
        <div> 
            <reimers:googlemap id="GMap" runat="server" width="349" height="354" onmarkerclick="GMap_MarkerClick"  /> 
        </div> 
    </form>
  </body>
</html>

and the code behind:

using System;

using System.Web.UI;

using Reimers.Map;

 

public partial class _Default : Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        GMap.GoogleKey = "Your API Code here";

        GMap.MapType = MapType.Map;

        GMap.TypeControl = MapTypeControl.None;

        GMap.MapControl = ControlType.Small;

 

        GoogleMarker testMarker = new GoogleMarker("newMarker", new GoogleLatLng(43.611611, -88.952931));

        testMarker.MarkerText = "Test Marker";

        GMap.Markers.Add(testMarker);

 

        GMap.Latitude = testMarker.Latitude;

        GMap.Longitude = testMarker.Longitude;

        GMap.Zoom = 10;

    }

 

    protected void GMap_MarkerClick(GoogleMap GMap, GoogleMarker Marker, ref String MapCommand)

    {

        MapCommand = Marker.OpenInfoWindowHTML(GMap, Marker.MarkerText);

    }

}

Wednesday, January 09, 2008 1:23:22 PM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
.Net | Google | Programming | Visual Studio | Web 2.0
# Tuesday, January 08, 2008

1. Web Developer Toolbar

The must have tool for any web developer.
Download Web Developer Toolbar

2. Firebug

Another must have extension for any developer. View, edit, debug, and monitor CSS, HTML, and JavaScript live in any web page.
Download Firebug

3. View Source Chart

Draws a color coded chart of a web page’s source code and includes automatic indentation to make source code easier to read.
Download Source Chart

4. HTML Validator

Adds HTML validation to the view page source of the browser.
Download HTML Validator

5. SEO Quake

Quick view of site parameters in the search engine results pages
Download SEO Quake

6. ColorZilla

This extension adds a small eyedropper tool to the bottom left of the status bar which when clicked upon allows you to hover over any part of a web page to view the colour that is being used.
Download ColorZilla

7. Colour Contrast Analyser

A nice accessibility extension to check whether there is sufficient contrast between foreground and background colours of a web page.
Download Colour Contrast Analyser

8. Foxmarks

The Foxmarks Bookmark Synchronizer automatically synchronizes your bookmarks between two or more computers running Firefox.
Download Foxmarks

9. Adblock

Not so much a development tool but useful nonetheless. This extension allows you to block adverts within web pages easily and effectively.
Download Adblock

10. Dust Me Selectors

Dust-Me Selectors is a Firefox extension that finds unused CSS selectors.
Download Dust Me Selectors

Tuesday, January 08, 2008 1:13:34 PM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
Design | Web 2.0 | Web Design
# Saturday, January 05, 2008

There are numerous spots that are good for page breaks made especially for printing:

  • Between page sections (h2 or h3 tags, depending on your site format)
  • Between the end of an article and subsequent comments / trackbacks
  • Between longs blocks of content


Luckily, using page breaks in CSS is quite easy.

The CSS Code

  1. @media all  
  2. {   
  3.     .page-break { display:none; }   
  4. }   
  5.   
  6. @media print  
  7. {   
  8.     .page-break { display:blockpage-break-before:always; }   
  9. }  

The XHTML Code

  1. <DIV class=page-break></DIV>  

The Usage

  1. <H1>Page Title</H1>  
  2. <!-- content block -->  
  3. <!-- content block -->  
  4. <DIV class=page-break></DIV>  
  5. <!-- content block -->  
  6. <!-- content block -->  
  7. <DIV class=page-break></DIV>  
  8. <!-- content block -->  
  9. <!-- content -->  

		
Saturday, January 05, 2008 11:52:19 AM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
CSS | Web 2.0
# Wednesday, December 26, 2007

What does Assembla do?
Assembla provides tools and services for building software quickly using global teams.

Is the service free?
Yes, the online service is free for individuals and small groups. We make money when we have larger groups that need premium tools, portfolios, and private servers.

500MB of SVN for free…

I have been using Subversion for project work for some time now, and it seems that most agree that it is the best Open Source solution available. I have enjoyed the use of SVN provided by clients or employers, but only recently started considering replacing my old local VSS server with a web-enabled SVN server of my own. My motivation is to get code that I own off-site and have some redundancy along with improved accessibility. I am also interested leveraging the benefits of the continual development and refinement of SVN as an Open Source project. TortoiseSVN is a good example of that.

I started by researching the requirements for installing SVN server. Installation on a local Windows host seemed doable, but I wanted to install it on my web server. Since my host doesn’t support applications, I’m on my own. I don’t even know what OS the server is running. From what I’ve read, installing SVN on a site would be a chore. Plus it would compete for space with site content. An alternative would be to pay for a specialized SVN hosting service. Hard to justify the continual overhead for that.

So I Googled for free SVN. One result stood out as promising: Assembla. They give away a 500mb SVN account with unlimited users and an integrated bug tracking setup (Trac). For the quick, small projects I am looking to use it for, I can accept the risk that Assembla flakes out as a business entity. Worst case I will still have my latest build on my local. Assembla’s business model seems pretty sound to me anyway - a successful freelance coder will eventuallly need more space if they get cosy using the free service and will become a paying customer.

Here aro some of the Assembla tools:

Subversion

Subversion is the most popular centralized source code repository and version control system.  Our subversion includes email alerts on commit, Trac code browsing, and a post-commit hook to trigger.  And, we know that reliability is important for subversion users, so we backup to failover servers in real time.  Learn more.

Trac

Trac is a popular open source ticketing system, with the mission to "help developers write great software while staying out of the way."   You can import and export trac projects from Assembla.  We enhance trac with simplified team management, HTML alerts (called "notifications" in trac), and hourly and weekly alert summaries.  We support a few trac plugins, including XML-RPC for Eclipse integration.

Scrum

The scrum tool collects reports from your team members in the stand-up meeting format:  "What did I do, What will I do, What do I need."

Chat

The chat tool provides a persistent chat room that you can use for daily meetings or just to drop in.

Wednesday, December 26, 2007 8:11:34 PM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
Programming | Project Management | Site Reviews | SVN | Web 2.0
# Tuesday, December 18, 2007

Web design is simpler than ever, and that's a good thing. web 2.0 design means focused, clean and simple design that is all about the content.

Why simplicity is good?

  1. Web sites have goals and all web pages have purposes.
  2. Users' attention is a finite resource.
  3. It's the designer's job to help users to find what they want (or to notice what the site wants them to notice)
  4. Stuff on the screen attracts the eye. The more stuff there is, the more different things there are to notice, and the less likely a user is to notice the important stuff.
  5. So we need to enable certain communication, and we also need to minimise noise. That means we need to find a solution that's does its stuff with as little as possible. That's economy, or simplicity.

How?

There are two important aspects to achieving success with simplicity:

  1. Remove unnecessary components, without sacrificing effectiveness.
  2. Try out alternative solutions that achieve the same result more simply.

Whenever you're designing, take it as a discipline consciously to remove all unnecessary visual elements.

Concentrate particularly on areas of the layout that are less relevant to the purpose of a page, because visual activity in these areas will distract attention from the key content and navigation.

Use visual detail - whether lines, words, shapes, colour - to communicate the relevant information, not just to decorate.

Tuesday, December 18, 2007 10:38:00 AM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
CSS | Programming | Web 2.0 | Design
# Sunday, December 16, 2007

If you are an Outlook user, this is the tool (below) that can be helpful if you use Facebook. Now you can update your Facebook statuses, and stay updated with your friend activities right from your Outlook. (Without having to open a browser).

FBLook - Outlook + Facebook

  • Update your Facebook status directly from Outlook.
  • Set your status to the name of the song you're playing in iTunes or WMP.
  • See your friend statuses.
  • See notifications of new Friend Requests, Messages, Invites, Pokes, etc..


Free Download|More info

*Not working with Outlook Express.

Sunday, December 16, 2007 10:36:01 AM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
Web 2.0 | Facebook
# Wednesday, December 05, 2007

Yesterday I have recieved an invitation to be an alpha tester of Knocka TV.

Tried to register yesterday but got a screen that said - "Knocka TV is down for maintenance", allready not a good start.

After registering today, I can forgive them about yesterday. The site is designed properly, quite easy to control for the common user and the most important thing - it works very nice, the videos are smooth, the content is a bit small but hey - it is still an Alpha version.

Knocka is an Internet television network. It has "channels" of streaming content. Unlike video sharing sites like YouTube, users can't randomly select videos to play when they wish (except clips they've already seen in a stream), nor can they embed Knocka vids in other sites. Kncoka is a destination site, not a media library.

But even though Knocka can be watched in passive mode, like television, Interactivity and community are a big part of the Knocka equation. Viewers can text chat with each other in a window under a running show, and can engage in person-to-person Webcam video chats with their friends. And content is chosen through a combination of user voting and editorial oversight. On the current alpha site, users can vote on clips that play in the channels, and the voting will affect the rotation of a show: Good vote, more plays; bad votes, less. Eventually, Knocka will let its users further upstream in the editorial process. It will let users vote on videos in the submissions bin to help decide what makes it into the channels themselves.

Can the internet community create professional TV? That’s the core question behind the Knocka TV project. Knocka TV offers a stage for creative content produced by the community, supporting individual producers and small production houses in their original creation.

Knocka TV is a User Generated Professional Television Network (or in short UGPTN). It’s a democratic, interactive, and collaborative social television:

  • Democratic: By casting your votes, you choose what’s on.
  • Interactive: Live broadcasting on the internet will allow you to participate and at real-time affect the course of the program. Participate in live interactive shows, go live with your webcam, manipulate the program content in real time together with other viewers and much more.
  • Collaborative: Everyone can participate in creating Knocka TV, from creating channels and programs to cooperating together in creating content.
  • Social: While you watch Knocka TV you can chat, video conference and talk to your friends.

Here is a captured screen:

As I will test it and play with it a bit further I will post updates.

Wednesday, December 05, 2007 1:20:59 PM (Jerusalem Standard Time, UTC+02:00)  #    Comments [1] - Trackback
KnockaTV | Web 2.0
# Monday, December 03, 2007

What is Snooth (http://www.snooth.com/)?

Snooth is a web-based social shopping experience that is simplifying how people select, interact with and purchase their favorite wines. It hopes to become a kind of Facebook for the wine world. It may not sell wine but it already has a database of more than one million reviews, from the public and established critics.

Snooth offers both casual and aspiring wine drinkers personalized wine recommendations, ratings & reviews, as well as a wine information search tool that seamlessly connects users to the websites of top online merchants and wineries worldwide.

The main screen:

Search results screen:

Monday, December 03, 2007 2:03:37 PM (Jerusalem Standard Time, UTC+02:00)  #    Comments [0] - Trackback
Site Reviews | Web 2.0
Navigation
Archive
<July 2010>
SunMonTueWedThuFriSat
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
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