Archive for the ‘Categorized’ Category

Using sIFR for rich flash text without affecting SEO

Friday, August 7th, 2009

sIFR, an abbreviation for Scalable Inman Flash Replacement with current version 3.0 is a combination of JavaScript and flash, allows you to dynamically view text, especially headings, using flash. This can improve your website’s look dramatically, because it will look the same in every browser and is much smoother than basic HTML text. For example, if you take a look at <h2></h2> tag in IE6, you will notice the pixels isn’t very smooth while in IE7, they look smooth and nice. But that’s not what sIFR can do for you. It allows you to display a more detailed rendered text in any browser. However, there are a few minor points about sIFR:

• Websites must have flash installed and enabled.
• Titles will not work on many mobile devices such as PDAs and mobile phones.
• Websites can become a bit slower.

The sIFR zip file contains flash, JavaScript and CSS files. The basic files you need are:

• css/sIFR-print.css
• css/sIFR-screen.css
• js/sifr.js
• js/sifr-config.js
• flash/sifr.fla

Before uploading everything, one first needs to edit the flash file (sifr.fla) in flash folder using Adobe Flash.

siFR Setup in Flash

Fig. 1

You’ll begin with simply a white box (refer Fig. 1). This is because the flash file is divided into layers. In order to change the font family of the sIFR you are going to use on your website, you have to double click in the white box and the text will show “Bold Italic Normal” (refer Fig. 2).

Fig. 2

Now click the text line to go into the text edit mode (refer Fig. 3). The default font is Verdana. You can use the font chooser to pick your desired font, for example, choose Tahoma.


Fig. 3

NB: Please note that you do not need to change any other options, font size, color and other text styling options can be changed using the JavaScript included in sIFR zip file.

Now we need to compile it to a .swf in order to display flash on your website.

In order to make sIFR work, you need to upload the needed files (i.e., sIFR-print.css, sIFR-screen.css, sifr.js, sifr-config.js and sifr.swf) to your website’s respective directories. After uploading, one has to include the following JavaScript and CSS files between the <head></head> tag as follows:

<link rel="stylesheet" href="styles/sIFR-screen.css" type="text/css" media="screen">
<link rel="stylesheet" href="styles/sIFR-print.css" type="text/css" media="print">
<script src="includes/sifr.js" type="text/javascript"></script>
<script src="includes/sifr-config.js" type="text/javascript"></script>

Finally, before sIFR will replace defined text with flash, it needs to be configured. The configuration takes place in the sifr-config.js file.

After configuring, the sifr-config.js should look like:

var tahoma = {
    src: 'flash/sifr.swf'
};

sIFR.activate(tahoma);

sIFR.replace(tahoma, {
     selector: 'h2'
    ,css: [
         'a { color: #333333; }'
          ,'a:link { color: #333333; }'
         ,'a:hover { color: #0066CC; }'
     ]
});

Don’t forget the “,” otherwise the CSS will not apply or sIFR might stop working. Another important thing is that you have to write the color hexadecimal codes completely!

  • Share/Save/Bookmark

Authenticate your website using Facebook Connect API

Monday, June 15th, 2009

Facebook connect API allows users to dynamically connect their identity information from Facebook, such as basic profile, friends, photos information and more, to third party websites, as well as desktop and mobile applications.  The article here describes how to provide Facebook Connect authentication for your web application.

Steps to connect your site to Facebook :

1. If you don’t already have a Facebook API key for your site, create an application with the Facebook Developer application.

  • Go to http://www.facebook.com/developers/createapp.php to create a new application.
  • Enter a name for your application in the Application Name field.
  • Accept the Developer Terms of Service, then click Save Changes.
  • If you have a Facebook API key,follow from next step

  • On the Basic tab, keep all of the defaults.
  • Take note of the API Key, you’ll need this shortly.
  • Click the Connect tab. Set Connect URL to the top-level directory of the site which will be implementing Facebook Connect. You can include a logo that appears on the Facebook Connect dialog. Next to Facebook Connect Logo, click Change your Facebook Connect logo and browse to an image file. The logo can be up to 99 pixels wide by 22 pixels tall, and must be in JPG, GIF, or PNG format.
  • If your site is going to implement Facebook Connect across a number of subdomains of your site , you need to enter a Base Domain
  • Click Save Changes.

2. Create a cross-domain communication channel file called xd_receiver.htm and place it in a directory relative to the Connect URL that you entered in the previous step. Include following script into this file.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/XdCommReceiver.js" type="text/javascript">
</script>
</body>
</html>

3. Next, in your Home Page ,ie page of facebook connect page,Place Html tag as following

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">

4. include following javascript file with in your body tag NOTE IN HEAD TAG

<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>

5. Place facebook login Button in your page

<fb:login-button></fb:login-button>

6. Finally, Include following script after the login button

<script type="text/javascript"> FB.init("YOUR_API_KEY_HERE", "<path from web root>/xd_receiver.htm"); </script>

You should now be able to click on the facebook connect logo and use your facebook credentials to login to your web site.

  • Share/Save/Bookmark

Generating a Google Sitemap via PHP

Monday, June 15th, 2009

A sitemap is  an XML file,that lists the URLs of a site.  The sitemap file can be used to inform search engines like google on the pages available on a site and when those pages have been modified.  The search engines require a particular format for the sitemap xml file. Let me give a brief on sitemap creation for google.

Create an xml file(say sitemap.xml). Its better to create the xml file dynamically using the scripting language like php, jsp etc.

Format of sitemap xml  accepted by google:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">
<url>
<loc>http://domain.tld/</loc>
<lastmod>2008-01-01</lastmod>
<changefreq>daily</changefreq>
<priority>0.1</priority>
</url>
</urlset>

The points to be remembered when creating a sitemap are:

1. Sitemap should start with the tag <urlset> and end with </urlset>
2. Each set of xml entry shouild start with <url> and end with </url>
3. <loc></loc> contains the url
4. The <lastmod> tag expects a date in the  format YYYY-MM-DD,  or the date format can be in w3c format.
5. The <changefreq> tag expects one of the  values: always, hourly, daily, weekly, monthly etc.
6. The <priority> can be a value between 1.0 and 10

7. Replace special charecters from xml file.
Character                   Replacement
Ampersand     &         &amp;
Single Quote    ‘         &apos;
Double Quote  “         &quot;
Greater Than   >        &gt;
Less Than       <        &lt;

8. Encoding should be UTF-8 mode
9. The maximum permitted size of a sitemap file is 10 MB.

Sample PHP  code for sitemap generation:

$xml = '';
$xml =  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"."\n";
$xml .= "<urlset xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\" xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">"."\n";
for($i=0;$i<$subLimit;$i++){
$title = str_replace("&","&amp;",strip_tags($response['title']));
$loc = str_replace("&","&amp;",strip_tags($response['location']));
$com = str_replace("&","&amp;",strip_tags($response['company']));
//$loc1 = $row['job_jobs_location'];
$title = htmlentities($title, ENT_QUOTES, "UTF-8");
$com = htmlentities($com, ENT_QUOTES, "UTF-8");
$loc = htmlentities($loc, ENT_QUOTES, "UTF-8");
$date = $response['date'];
$date = strtotime($date);
$date = date(DATE_W3C, $date);   //Date in w3c format
$xml .= "<url>"."\n";
$xml .= "<loc>http://www.jobtreks.com/jobresult/$title/$com/$loc/$id</loc>"."\n";
$xml .= "<lastmod>$date</lastmod>"."\n";
$xml .= "<priority>0.50</priority>"."\n";
$xml .= "<changefreq>weekly</changefreq>"."\n";
$xml .= "</url>"."\n";}
$xml .= "</urlset>";
$fh = fopen('sitemap.xml', 'w'); //After exceuting this file, an xml file called sitemap.xml is created.
  • Share/Save/Bookmark

java.lang.OutOfMemoryError when indexing large databases in Solr

Saturday, May 16th, 2009

When indexing large databases in Solr, if you encouter java.lang.OutOfMemoryError, this could be caused due to a bug in the mysql jdbc driver.  To resolve this, add include batchSize=”-1″ parameter in your dataSource entry of you data-import.xml file.  The entry should look something like :

<dataSource type="JdbcDataSource" name="ds-2"
          driver="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:8889/mysqldatabase" batchSize="-1"
          user="root" password="root"/>

Reference:

http://wiki.apache.org/solr/DataImportHandlerFaq#head-346bc6622c328a146d1691bc4ed6deb51086d9b3
  • Share/Save/Bookmark

Using Solr / Lucene for full text search with MySQL DB

Thursday, May 14th, 2009

Solr is a standalone webservice application that can be installed on any servlet container like tomcat, jetty etc.  It uses the popular Lucene java library to provide enterprise level search results from databases, filesystem, web services etc.    Solr runs as a web service, so in effect it provides a cross platform search engine.  The results can be accessed from php, java, RoR or .NET by invoking its web service.  The only requirement on your server is that it should allow you to run java application or have deploy solr as a webapp in an existing servlet container such as tomcat or jetty.

This article shows how to get Solr index and provide search results for a simple MySQL table.  The search results will be provided in XML, so you can get your web application to read the results, parse it and display it any form desired. (more…)

  • Share/Save/Bookmark

’Cabot Trail’ in Munnar!

Monday, May 11th, 2009

I am not sure if the road to Munnar can be compared to the famous North American Shore drive, Cabot Trail, but this past weekend, there was surely some Cabot in the air at Munnar where our team headed out for a fun team building trip. The trip has been long in the planning and the last delay is attributed to me and the team waited patiently for me to join the organization and then go on the trip. (more…)

  • Share/Save/Bookmark

Follow us on Twitter..

Friday, May 1st, 2009

Yes, we are on twitter now as cabotsolutions.

Out twitter url is http://www.twitter.com/cabotsolutions/

  • Share/Save/Bookmark

PHP development with SVN using Eclipse PDT and Subclipse in Ubuntu 8.10

Friday, May 1st, 2009

Eclipse’s PDT project provides an excellent development tool for LAMP developers.  It provides  great features like code completion, zend debugger,  error checking and all the goodness that comes with default eclipse package.   One of the nice things that PDT lacks out of the box is SVN support.  This can be easily achieved using subclipse plugin available for eclipse.   This is how you would install PDT, subclipse and get productive in less than 15 minutes (depending on your bandwidth).  For this article, we are using Ubuntu 8.10, so change use commands specific to your favorite flavour of linux. (more…)

  • Share/Save/Bookmark

Getting Openfire Groups to work with Zimbra OpenLDAP Authentication

Friday, April 10th, 2009

Its quite easy to get openfire and spark messenger to authenticate with Zimbra’s OpenLDAP by selecting OpenLDAP directory server during initial openfire setup.  One of the biggest drawbacks is that the groups feature will not be available.  Group feature is important for enterprises with large number of users and wnat to provide preset groups in spark like IT, HR, Sales etc. (more…)

  • Share/Save/Bookmark

5 best practices we use in our Joomla builds.

Sunday, March 8th, 2009

We have started to standardise certain practices on all our Joomla builds.  These are aimed to increase security, usability and seo of the site. (more…)

  • Share/Save/Bookmark