all repos — h3rald @ 094cbf1fcfdc95b070b55df063af2916e6858843

The sources of https://h3rald.com

Fixes
h3rald h3rald@h3rald.com
Sun, 17 Mar 2024 12:24:03 +0100
commit

094cbf1fcfdc95b070b55df063af2916e6858843

parent

6b243ded05a7593922d198634c681075de1c12e2

M contents/articles/sqlyog5-review.htmlcontents/articles/sqlyog5-review.html

@@ -4,4 +4,246 @@ content-type: article

timestamp: 1141131000 tags: "databases|review" ----- -MySQL[1] is a great database solution. Literally millions of people who use it can tell you that it is a well-performing, feature-rich database solution for almost any size project: it is low-cost (often free), and available on the majority of webservers all over the world. When I first discovered MySQL while learning some basic PHP programming, I almost immediately wondered how I'd effectively access MySQL and manage my databases other than through PHP code or command line. I was pointed to PHPMyAdmin[2], which I still use as a quick, general-purpose MySQL front-end. However, I wondered if there was anything better than that, and maybe not confined within a browser window...<br /><br />There are a few desktop "cousins" of PHPMyAdmin out there, especially for Windows, which is not surprising. After a quick search, three products come up immediately: MySQL-Front[3], Navicat MySQL[4] and SQLyog[5], all of them are proprietary solutions and seem to be the most popular ones around. <br /><br /><em>Alright, which one is the best?</em><br /><br />There are many different criteria available to choose a winner among these three products. The easiest for me was simply: "which one is free?"<br /><br />- SQLyog, with some restrictions, is our instant winner. Both MySQL-Front and Navicat MySQL offer a 30-day trial, while SQLyog can be free for life but only with basic features. However, the number of basic features is considerable.<br /><br /><strong>First impressions</strong><br />After launching SQLyog (free edition), a small and not-too-annoying nag screen appears: you click on it and it goes away, it doesn't last for 10 seconds like some others. The same screen appears when you try to access the power tools and advanced features which are not included in the free edition. I got used to it after a short while, and that's the only annoyance of the free version of the product. <br /><br />The program's interface seems a bit unconventional for the traditional Windows user, especially if compared to the other two products. The main window is divided into four parts: the main menu and a navigation bar underneath it, a left column listing all the databases and tables in an expandable tree, the top half of the main window which hosts a SQL editor, and the lower half with everything else, including a tabbed area for displaying query results, messages, table data, table structure and history.<br /><br />It seems as if the SQL editor should be in a tab as well, but after using SQLYog for a while, you understand why is not: the editor has been positioned such that it can be used often, easily, and immediately. It took me a while to figure this out, but once you embrace this philosophy, you'll never stop using this program; all front-ends include a query editor, but it's often relatively hidden, meaning that it is at least one or two clicks away from the rest of the interface.<br /><br /><br /><strong>Main Features</strong><br />After specifying your credentials, the program will connect to the MySQL server and list all of the available databases in an Explorer-like left side panel. All tables can be accessed by clicking once on the corresponding database. All column fields, indexes and triggers (if any) are displayed by clicking on each table name.<br /><br /><em>So when I click on a database or a table the corresponding structure is displayed, right?</em><br /><br />Wrong. When you do that, nothing happens. Remember the multi-tabbed lower panel, which is supposed to display results, table data, objects, etc.? Well, the focus is set to the <em>Result</em> column by default, so if you want to display the database or table structure you need to click on the <em>Objects</em> table, and voil� , the structure appears. Fortunately this behaviour can be changed by modifying the program's options, through the Tools menu.<br /> <br />Clicking on <em>Table data</em> will display the first 50 records of the selected table, while the <em>Result</em> and <em>Messages</em> tabs will still be empty; the editor wasn't used, so there's no result to show, and we didn't get any errors or other messages from MySQL yet, so everything is as it should be.<br /><br />The most interesting feature from an educational point of view, so far, is actually the <em>History</em> tab, which is just one click away and shows the following:<br /><br /><code><br />/*[11:11:11 AM][ 0 ms]*/ show variables like '%character%'<br />/*[11:11:11 AM][ 0 ms]*/ Set character_set_connection=latin1<br />/*[11:11:11 AM][ 0 ms]*/ Set character_set_results=latin1<br />/*[11:11:11 AM][ 0 ms]*/ Set character_set_client=latin1<br />/*[11:11:11 AM][ 0 ms]*/ set sql_mode=''<br />/*[11:11:11 AM][ 15 ms]*/ show databases<br />/*[11:11:22 AM][ 0 ms]*/ use `zzine_drupal`<br />/*[11:11:23 AM][ 203 ms]*/ select `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` <br /> where `TABLE_SCHEMA` = 'zzine_drupal' and `TABLE_TYPE` = 'BASE TABLE'<br />/*[11:11:32 AM][ 47 ms]*/ show full fields from `zzine_drupal`.`node`<br />/*[11:11:32 AM][ 140 ms]*/ show keys from `zzine_drupal`.`node`<br />/*[11:11:32 AM][ 0 ms]*/ select * from `zzine_drupal`.`node` limit 0, 50<br /></code><br /><br />The above is a log of all the SQL commands which were sent to the server so far: the program connected and showed all the databases, I clicked on the "zzine_drupal" database, got some info about it, and then clicked on the <em>node</em> table and displayed the first 50 records. So, if you are new to SQL and want to learn the syntax to query the database you can just have a glance at this tab every so often.<br /><br />Note that the time to execute a query is displayed in ms, and it's not wrong! SQLyog actually performs quite well, as boasted on the official site's features page[6]: <em>"[it] uses native MySQL C API - the fastest way to communicate with MySQL server"</em> - and they do mean it.<br /><br /><em>What else does SQLYog offer?</em><br /><br /> The free version includes the most used features, like the very two most basic operations: you can query the database by typing an SQL query into the editor and executing it (F5 or F8 if you want to edit the results) and change the value of each field through a convenient blob editor, which can display text or images, import content from a file or save it locally.<br />Then the program groups all functionalities in standard dropdown menus on the top bar, and also presents the most used operations as clickable icons as well. Now, this can be handy, but the program displays 25+ icons without any text underneath, so either you keep hovering your mouse on each one waiting for an explanation message to appear, or you just use the standard dropdown menus anyway. The authors did an outstanding job creating an icon for (literally) every action: they are quite well made and explanatory enough if you look at them carefully, but they are still very similar, and too numerous to memorize.<br /><br />However, SQLyog is also 100% keyboard friendly, as almost every function has a shortcut. Memorizing just a few of them, and it's worthwhile, as it makes everything much faster. At any rate it's better than memorizing all the icons instead!<br /><br />Let's examine each dropdown menu and the functions listed in them.<br /><br /><span style="text-decoration:underline;">File</span><br />This menu lists all the functions concerning database connection and disconnection, opening and saving SQL files, and opening new query tabs - the SQL editor panel can have multiple tabs.<br /><br /><span style="text-decoration:underline;">Edit</span><br />This menu refers to the SQL editor, not to the query results! It includes functions like execute queries, copy, paste, cut, undo, redo and find/replace, which does not find strings in a record/table/database, but only in the SQL editor. I do believe the "Find in Database" function is missing in SQLyog, and is present in some of the competitors, but you can search your database using the appropriate SQL queries, right? Maybe - in my opinion - an advanced <em>Find <something> in <somewhere></em> wizard or dialogue should be implemented - as the developers seem to be very good at creating those types of things, we'll soon find out.<br /><br /><span style="text-decoration:underline;">DB</span><br />Maybe I'd have called this "database" for the sake of newbies, but this menu indeed groups all database-related functionalities together. Create/truncate/drop databases, create table and create view (maybe they could have been placed under the <em>table</em> menu), and other interesting features like creating an HTML schema on the database and even copying a whole database (or just a few tables) to a different host (even remote, if accessible) with a single click! It works, just don't try to copy a database onto another remote server on a 56K dialup connection, like I did...<br /><br /><br /><span style="text-decoration:underline;">Tables</span><br />Another self-explanatory menu, listing all table-related operations like create, alter, rename, empty, drop, import, export tables, manage indexes, rearrange columns, etc. All these functions can be performed through wizards, dialogues or other equally simple methods that any average Windows user should be familiar with. There are only a few exception here and in other menus: when wizards would be inappropriate or inadequate for certain actions, SQLyog prepares a "template query" and lets the user fill it in, typically for more advanced needs, such as if you want to create a new (MySQL 5.0+ only) <em>trigger</em> named <em>test</em> on the <em>node</em> table of the aforementioned zzine_drupal database. For this, SQLyog prepares the following query template: <br /><br /><code><br />DELIMITER $$;<br /><br />DROP TRIGGER `zzine_drupal`.`test`$$<br /><br />CREATE TRIGGER `zzine_drupal`.`test` BEFORE/AFTER INSERT/UPDATE/DELETE on `zzine_drupal`.`node`<br />FOR EACH ROW BEGIN<br /><br />END$$<br /><br />DELIMITER ;$$<br /></code> <br /><br />...just remember to modify it according to your needs!<br />Do you like SQLyog's query templates? Check out Edit->Insert Templates and there's almost everything for every taste.<br /><br /><br /><span style="text-decoration:underline;">Objects</span><br />Presumably the authors created this menu to group some advanced or new functionalities together, but everything listed here is already present in one of the other menus: management of functions and triggers, view-related actions, and stored procedures... except for the <em>Drop Column</em> action, which is only available under this menu.<br /><br /><span style="text-decoration:underline;">Tools</span><br />This menu also lists two actions which we already saw under the <em>DB</em> menu, which is exporting or importing a database. however, there is also an <em>Export resultset</em> wizard, as well as a very handy user management tool, information about the current database, and the program preferences.<br /><br />The program preferences apparently have two settings which perhaps should be changed by default, which concern the previously mentioned weird tab focus: if you'd like something more intuitive and you don't need (or want) to use the SQL editor a lot, you can safely unclick the "Keep focus on SQL Editor after query execution" and click the "Always select Objects tab when a new item is selected".<br /><br />Believe it or not, you get all this for free. No charge, no trial periods: these are the actual features offered by the free edition of SQLyog! No surprise that over 500,000 people already downloaded it!<br /><br />What's in the <em>Professional</em> and in the <em>Enterprise</em> edition then? Nothing much, and <em>Power tools</em>.<br /><br /><br /><strong>"Power Tools"</strong><br />When I wrote <em>nothing much</em> earlier I actually referred to the Professional Edition, which - as the feature matrix shows[8]- doesn't offer anything more than the free edition: basically you pay $9 to get rid of the nag screens, which are normally not very intrusive...<br /><br /><span style="text-decoration:underline;">Tunneling</span><br />On the contrary, the Enterprise Edition ($49) has a lot of very interesting advanced tools which are actually worthwhile to have. Perhaps the most essential feature missing in the free version, especially for people using a remote hosting solution, is <em>tunnelling</em>. You can use SQLyog to connect to a remote server, theoretically; in reality though, in order to do so your hosting provider must allow privileged remote connections to the database (i.e. <user>@% instead of <user>@localhost), which is not permitted 98% of the time for security reasons. So how can you use SQLyog to access your remote database(s)? With tunneling.<br />The concept is simple: even if privileged remote connections are normally not permitted, privileged local connections are. So all you need to do is place a PHP script on your server, somewhere accessible, and specify it as a parameter for HTTP tunneling before establishing the connection; SQLyog will then access the script and the script will basically forward SQLyog's instruction to the database server, just as if the commands were issued locally. <br /><br /><em>I will never allow commands to be sent to my server unencrypted and through a PHP script, which can be exploited by the first script-kiddie passing by!</em><br /><br />This is a common, slightly biased, but ultimately reasonable concern, and for $49 you can also get SSH tunneling, provided that your host allows you to connect to the server through a SSH shell. I tried this option and it worked perfectly: with a 2MB/s ADSL connection all went smoothly and fast: the program proved to be a valid alternative to PHPMyAdmin in terms of speed and responsiveness. <br />Do not try this on a 56K connection! It's not worthwhile, and probably not even conceived of by the developers. As I always want to try extreme solutions, I also tried SSH tunneling on dialup and my final conclusion was: <em>stick with PHPMyAdmin</em>. SQLyog seems to have been developed in order to achieve relatively immediate responses, as a result, when a low speed connection is used to connect to a remote database, the program may hang for a little while before delivering results and executing queries as normal. Perhaps there's room for improvement here: it would be great to have progress bars display when an operation takes more time than normal.<br /><br /><span style="text-decoration:underline;">Database Synchronization and Migration</span><br />A common and useful feature you should expect from a MySQL front-end is a synchronization utility, and SQLyog has one: by clicking on <em>Database Synchronization</em> under the Powertools menu you can start a quick and easy synchronization wizard, to automatically update two databases. Simply provide the connection details (even if they are on different hosts or require tunneling), and select the databases you want to synchronize, also specifying if you want a two-way synchronization or only one way. A similar function is <em>structure synchronization</em>, which can be used to keep only the structure (not the data) up-to-date between two databases. You won't be asked to create two new connections, but the operation can only be performed on databases that are already accessed by SQLyog.<br /><br />For more information on how to take advantage of SQLyog's advanced synchronization features, I recommend reading a very informative article specifically devoted to this subject, available online[8].<br /><br />Another VERY interesting features SQLyog offers (which has been the subject of a whole article on DatabaseJournal.com[9]) is the possibility to easily migrate to MySQL from other ODBC sources. Through a relatively painless wizard it is possible to migrate from another database type to MySQL, while making sure that any errors are handled as expected.<br /><br /><span style="text-decoration:underline;">Periodic Tasks and Management</span> <br />MySQL is a wonderful relational database, but it fundamentally lacks the ability to execute scheduled queries and operations, which are normally accomplished by server-side scripts. SQLyog offers you the opportunity to easily create and administer periodic tasks, notifications and backups via a few wizards: the <em>Notification Services</em> wizard, which can be used to send the result of a particular user-defined periodic query to an email address or execute maintenance queries, and the <em>Scheduled Backups</em> wizard to automate full or partial database backups and exports. Webyog[10] itself offers an informative how-to[10] on these tasks, step-by-step with screenshots. Last but not least, you can manage all these scheduled jobs through a very handy <em>job manager</em> located in the <em>Powertools</em> menu.<br /><br /><br /><strong>Final Judgement</strong><br />SQLyog is a well-rounded, multi-functional front-end for MySQL which can be used by both newbies and more experienced users to manage their databases. I'd clean up and reorganize the interface a little bit and remove a lot of the icons as well as list all the functions under the top menus, possibly <em>without</em> the icons and without repeating the same function anywhere.<br /><br />Apart from those small items, SQLyog is definitely worth a shot, and the Webyog team definitely did a good job in this fifth version by incorporating all the latest MySQL 5 functionalities in an already excellent program. The free version in particular offers quite a wide range of functionalities with no trial period, and this certainly helped the program to grow in popularity. I would never buy the Professional edition, simply because it only gets rid of nag screens without offering nothing new over and above the Free Edition. On the other hand, the Enterprise Edition is an excellent and inexpensive solution if you need the power tools.<br /><br />SQLyog is just a few clicks away[11], only 7 Megabytes, and ready to install! <br /><br /><br /><strong>Notes</strong><br /><small>[1]MySQL - Official Site: <a href="http://www.mysql.com/">http://www.mysql.com/</a> <br />[2]PHPMyAdmin - Official Site: <a href="http://www.phpmyadmin.net/home_page/index.php">http://www.phpmyadmin.net/home_page/index.php</a><br />[3]MySQL-Front: <a href="http://www.mysqlfront.de/">http://www.mysqlfront.de/</a><br />[4]Navicat MySQL: <a href="http://www.navicat.com/">http://www.navicat.com/</a><br />[5]Webyog Website: <a href="http://www.webyog.com/">http://www.webyog.com/</a><br />[6]SQLyog, feature page: <a href="http://www.webyog.com/sqlyog/index.php ">http://www.webyog.com/sqlyog/index.php </a><br />[7]SQLyog, features matrix: <a href="http://www.webyog.com/sqlyog/featurematrix.html">http://www.webyog.com/sqlyog/featurematrix.html</a><br />[8] Peter Laursen & Quy Ton, "Using SQLyog Enterprise to Effectively Synchronize MySQL Databases" (PDF):<br /><a href="http://www.webyog.com/articles/Using_SQLyog_Enterprise_to_Effectively_Synchronize_MySQL_Databases.pdf">http://www.webyog.com/articles/Using_SQLyog_Enterprise_to_Effectively_Synchronize_MySQL_Databases.pdf</a><br />[9] Peter Laursen, "Migration to MySQL with SQLyog ver 4.1" : <a href="http://www.databasejournal.com/features/mysql/article.php/10897_3550146">http://www.databasejournal.com/features/mysql/article.php/10897_3550146</a><br />[10]Webyog, "How to use Scheduled Backups with SQLyog": <a href="http://www.webyog.com/articles/how_to_use_scheduled_backup.html">http://www.webyog.com/articles/how_to_use_scheduled_backup.html</a><br /></small><br /> + +<p>MySQL[1] is a great database solution. Literally millions of people who use it can tell you that it is a + well-performing, feature-rich database solution for almost any size project: it is low-cost (often free), and + available on the majority of webservers all over the world. When I first discovered MySQL while learning some basic + PHP programming, I almost immediately wondered how I'd effectively access MySQL and manage my databases other than + through PHP code or command line. I was pointed to PHPMyAdmin[2], which I still use as a quick, general-purpose + MySQL front-end. However, I wondered if there was anything better than that, and maybe not confined within a browser + window...</p> +<p>There are a few desktop "cousins" of PHPMyAdmin out there, especially for Windows, which is not surprising. After a + quick search, three products come up immediately: MySQL-Front[3], Navicat MySQL[4], and SQLyog[5], all of them are + proprietary solutions and seem to be the most popular ones around.</p> +<h4>Alright, which one is the best?</h4> +<p>There are many different criteria available to choose a winner among these three products. The easiest for me was + simply: "which one is free?"</p> +<ul> + <li>SQLyog, with some restrictions, is our instant winner. Both MySQL-Front and Navicat MySQL offer a 30-day trial, + while SQLyog can be free for life but only with basic features. However, the number of basic features is + considerable.</li> +</ul> +<h3>First impressions</h3> +<p>After launching SQLyog (free edition), a small and not-too-annoying nag screen appears: you click on it and it goes + away, it doesn't last for 10 seconds like some others. The same screen appears when you try to access the power + tools and advanced features which are not included in the free edition. I got used to it after a short while, and + that's the only annoyance of the free version of the product.</p> +<p>The program's interface seems a bit unconventional for the traditional Windows user, especially if compared to the + other two products. The main window is divided into four parts: the main menu and a navigation bar underneath it, a + left column listing all the databases and tables in an expandable tree, the top half of the main window which hosts + a SQL editor, and the lower half with everything else, including a tabbed area for displaying query results, + messages, table data, table structure and history.</p> +<p>It seems as if the SQL editor should be in a tab as well, but after using SQLYog for a while, you understand why is + not: the editor has been positioned such that it can be used often, easily, and immediately. It took me a while to + figure this out, but once you embrace this philosophy, you'll never stop using this program; all front-ends include + a query editor, but it's often relatively hidden, meaning that it is at least one or two clicks away from the rest + of the interface.</p> + + +<h3>Main Features</h3> +<p>After specifying your credentials, the program will connect to the MySQL server and list all of the available + databases in an Explorer-like left side panel. All tables can be accessed by clicking once on the corresponding + database. All column fields, indexes, and triggers (if any) are displayed by clicking on each table name.</p> +<h4>So when I click on a database or a table the corresponding structure is displayed, right?</h4> +<p>Wrong. When you do that, nothing happens. Remember the multi-tabbed lower panel, which is supposed to display + results, table data, objects, etc.? Well, the focus is set to the <em>Result</em> column by default, so if you want + to display the database or table structure you need to click on the <em>Objects</em> table, and voilà, the structure + appears. Fortunately this behavior can be changed by modifying the program's options, through the Tools menu.</p> +<p>Clicking on <em>Table data</em> will display the first 50 records of the selected table, while the <em>Result</em> + and <em>Messages</em> tabs will still be empty; the editor wasn't used, so there's no result to show, and we didn't + get any errors or other messages from MySQL yet, so everything is as it should be.</p> +<p>The most interesting feature from an educational point of view, so far, is actually the <em>History</em> tab, which + is just one click away and shows the following:</p> +<pre><code class="sql"> + /*[11:11:11 AM][ 0 ms]*/ show variables like '%character%' + /*[11:11:11 AM][ 0 ms]*/ Set character_set_connection=latin1 + /*[11:11:11 AM][ 0 ms]*/ Set character_set_results=latin1 + /*[11:11:11 AM][ 0 ms]*/ Set character_set_client=latin1 + /*[11:11:11 AM][ 0 ms]*/ set sql_mode='' + /*[11:11:11 AM][ 15 ms]*/ show databases + /*[11:11:22 AM][ 0 ms]*/ use `zzine_drupal` + /*[11:11:23 AM][ 203 ms]*/ select `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` + where `TABLE_SCHEMA` = 'zzine_drupal' and `TABLE_TYPE` = 'BASE TABLE' + /*[11:11:32 AM][ 47 ms]*/ show full fields from `zzine_drupal`.`node` + /*[11:11:32 AM][ 140 ms]*/ show keys from `zzine_drupal`.`node` + /*[11:11:32 AM][ 0 ms]*/ select * from `zzine_drupal`.`node` limit 0, 50 + </code></pre> +<p>The above is a log of all the SQL commands which were sent to the server so far: the program connected and showed all + the databases, I clicked on the "zzine_drupal" database, got some info about it, and then clicked on the + <em>node</em> table and displayed the first 50 records. So, if you are new to SQL and want to learn the syntax to + query the database you can just have a glance at this tab every so often. +</p> +<p>Note that the time to execute a query is displayed in ms, and it's not wrong! SQLyog actually performs quite well, as + boasted on the official site's features page[6]: <em>"[it] uses native MySQL C API - the fastest way to communicate + with MySQL server"</em> - and they do mean it.</p> +<h4>What else does SQLYog offer?</h4> +<p>The free version includes the most used features, like the very two most basic operations: you can query the database + by typing an SQL query into the editor and executing it (F5 or F8 if you want to edit the results) and change the + value of each field through a convenient blob editor, which can display text or images, import content from a file + or save it locally.</p> +<p>Then the program groups all functionalities in standard dropdown menus on the top bar, and also presents the most + used operations as clickable icons as well. Now, this can be handy, but the program displays 25+ icons without any + text underneath, so either you keep hovering your mouse on each one waiting for an explanation message to appear, or + you just use the standard dropdown menus anyway. The authors did an outstanding job creating an icon for (literally) + every action: they are quite well made and explanatory enough if you look at them carefully, but they are still very + similar, and too numerous to memorize.</p> +<p>However, SQLyog is also 100% keyboard friendly, as almost every function has a shortcut. Memorizing just a few of + them, and it's worthwhile, as it makes everything much faster. At any rate it's better than memorizing all the icons + instead!</p> +<p>Let's examine each dropdown menu and the functions listed in them.</p> + + + +<h4>File</h4> +<p>This menu lists all the functions concerning database connection and disconnection, opening and saving SQL files, and + opening new query tabs - the SQL editor panel can have multiple tabs.</p> +<h4>Edit</h4> +<p>This menu refers to the SQL editor, not to the query results! It includes functions like execute queries, copy, + paste, cut, undo, redo, and find/replace, which does not find strings in a record/table/database, but only in the + SQL editor. I do believe the "Find in Database" function is missing in SQLyog, and is present in some of the + competitors, but you can search your database using the appropriate SQL queries, right? Maybe - in my opinion - an + advanced <em>Find <something> in <somewhere></em> wizard or dialogue should be implemented - as the developers seem + to be very good at creating those types of things, we'll soon find out.</p> +<h4>DB</h4> +<p>Maybe I'd have called this "database" for the sake of newbies, but this menu indeed groups all database-related + functionalities together. Create/truncate/drop databases, create table and create view (maybe they could have been + placed under the <em>table</em> menu), and other interesting features like creating an HTML schema on the database + and even copying a whole database (or just a few tables) to a different host (even remote, if accessible) with a + single click! It works, just don't try to copy a database onto another remote server on a 56K dialup connection, + like I did...</p> +<h4>Tables</h4> +<p>Another self-explanatory menu, listing all table-related operations like create, alter, rename, empty, drop, import, + export tables, manage indexes, rearrange columns, etc. All these functions can be performed through wizards, + dialogues or other equally simple methods that any average Windows user should be familiar with. There are only a + few exceptions here and in other menus: when wizards would be inappropriate or inadequate for certain actions, + SQLyog prepares a "template query" and lets the user fill it in, typically for more advanced needs, such as if you + want to create a new (MySQL 5.0+ only) <em>trigger</em> named <em>test</em> on the <em>node</em> table of the + aforementioned zzine_drupal database. For this, SQLyog prepares the following query template:</p> +<pre><code class="sql"> + DELIMITER $$; + + DROP TRIGGER `zzine_drupal`.`test`$$ + + CREATE TRIGGER `zzine_drupal`.`test` BEFORE/AFTER INSERT/UPDATE/DELETE on `zzine_drupal`.`node` + FOR EACH ROW BEGIN + + END$$ + + DELIMITER ;$$ + </code></pre> +<p>...just remember to modify it according to your needs!<br />Do you like SQLyog's query templates? Check out + Edit-&gt;Insert Templates and there's almost everything for every taste.</p> + + + +<h4>Objects</h4> +<p>Presumably the authors created this menu to group some advanced or new functionalities together, but everything + listed here is already present in one of the other menus: management of functions and triggers, view-related + actions, and stored procedures... except for the <em>Drop Column</em> action, which is only available under this + menu.</p> +<h4>Tools</h4> +<p>This menu also lists two actions which we already saw under the <em>DB</em> menu, which is exporting or importing a + database. however, there is also an <em>Export resultset</em> wizard, as well as a very handy user management tool, + information about the current database, and the program preferences.</p> +<p>The program preferences apparently have two settings which perhaps should be changed by default, which concern the + previously mentioned weird tab focus: if you'd like something more intuitive and you don't need (or want) to use the + SQL editor a lot, you can safely unclick the "Keep focus on SQL Editor after query execution" and click the "Always + select Objects tab when a new item is selected".</p> +<p>Believe it or not, you get all this for free. No charge, no trial periods: these are the actual features offered by + the free edition of SQLyog! No surprise that over 500,000 people already downloaded it!</p> +<p>What's in the <em>Professional</em> and in the <em>Enterprise</em> edition then? Nothing much, and <em>Power + tools</em>.</p> + + + +<h3>"Power Tools"</h3> +<p>When I wrote <em>nothing much</em> earlier I actually referred to the Professional Edition, which - as the feature + matrix shows[8] - doesn't offer anything more than the free edition: basically you pay $9 to get rid of the nag + screens, which are normally not very intrusive...</p> +<h4>Tunneling</h4> +<p>On the contrary, the Enterprise Edition ($49) has a lot of very interesting advanced tools which are actually + worthwhile to have. Perhaps the most essential feature missing in the free version, especially for people using a + remote hosting solution, is <em>tunnelling</em>. You can use SQLyog to connect to a remote server, theoretically; in + reality though, in order to do so your hosting provider must allow privileged remote connections to the database + (i.e. <user>@% instead of <user>@localhost), which is not permitted 98% of the time for security reasons. So how can + you use SQLyog to access your remote database(s)? With tunneling.</p> +<p>The concept is simple: even if privileged remote connections are normally not permitted, privileged local connections + are. So all you need to do is place a PHP script on your server, somewhere accessible, and specify it as a parameter + for HTTP tunneling before establishing the connection; SQLyog will then access the script and the script will + basically forward SQLyog's instruction to the database server, just as if the commands were issued locally.</p> +<p><em>I will never allow commands to be sent to my server unencrypted and through a PHP script, which can be exploited + by the first script-kiddie passing by!</em></p> +<p>This is a common, slightly biased, but ultimately reasonable concern, and for $49 you can also get SSH tunneling, + provided that your host allows you to connect to the server through a SSH shell. I tried this option and it worked + perfectly: with a 2MB/s ADSL connection all went smoothly and fast: the program proved to be a valid alternative to + PHPMyAdmin in terms of speed and responsiveness.</p> +<p>Do not try this on a 56K connection! It's not worthwhile, and probably not even conceived of by the developers. As I + always want to try extreme solutions, I also tried SSH tunneling on dialup and my final conclusion was: <em>stick + with PHPMyAdmin</em>. SQLyog seems to have been developed in order to achieve relatively immediate responses, as + a result, when a low-speed connection is used to connect to a remote database, the program may hang for a little + while before delivering results and executing queries as normal. Perhaps there's room for improvement here: it would + be great to have progress bars display when an operation takes more time than normal.</p> + + +<h4>Database Synchronization and Migration</h4> +<p>A common and useful feature you should expect from a MySQL front-end is a synchronization utility, and SQLyog has + one: by clicking on <em>Database Synchronization</em> under the Powertools menu you can start a quick and easy + synchronization wizard, to automatically update two databases. Simply provide the connection details (even if they + are on different hosts or require tunneling), and select the databases you want to synchronize, also specifying if + you want a two-way synchronization or only one way. A similar function is <em>structure synchronization</em>, which + can be used to keep only the structure (not the data) up-to-date between two databases. You won't be asked to create + two new connections, but the operation can only be performed on databases that are already accessed by SQLyog.</p> +<p>For more information on how to take advantage of SQLyog's advanced synchronization features, I recommend reading a + very informative article specifically devoted to this subject, available online[8].</p> +<p>Another VERY interesting features SQLyog offers (which has been the subject of a whole article on + DatabaseJournal.com[9]) is the possibility to easily migrate to MySQL from other ODBC sources. Through a relatively + painless wizard it is possible to migrate from another database type to MySQL, while making sure that any errors are + handled as expected.</p> +<h4>Periodic Tasks and Management</h4> +<p>MySQL is a wonderful relational database, but it fundamentally lacks the ability to execute scheduled queries and + operations, which are normally accomplished by server-side scripts. SQLyog offers you the opportunity to easily + create and administer periodic tasks, notifications and backups via a few wizards: the <em>Notification + Services</em> wizard, which can be used to send the result of a particular user-defined periodic query to an + email address or execute maintenance queries, and the <em>Scheduled Backups</em> wizard to automate full or partial + database backups and exports. Webyog[10] itself offers an informative how-to[10] on these tasks, step-by-step with + screenshots. Last but not least, you can manage all these scheduled jobs through a very handy <em>job manager</em> + located in the <em>Powertools</em> menu.</p> + +<h3>Final Judgement</h3> +<p>SQLyog is a well-rounded, multi-functional front-end for MySQL which can be used by both newbies and more experienced + users to manage their databases. I'd clean up and reorganize the interface a little bit and remove a lot of the + icons as well as list all the functions under the top menus, possibly <em>without</em> the icons and without + repeating the same function anywhere.</p> +<p>Apart from those small items, SQLyog is definitely worth a shot, and the Webyog team definitely did a good job in + this fifth version by incorporating all the latest MySQL 5 functionalities in an already excellent program. The free + version in particular offers quite a wide range of functionalities with no trial period, and this certainly helped + the program to grow in popularity. I would never buy the Professional edition, simply because it only gets rid of + nag screens without offering nothing new over and above the Free Edition. On the other hand, the Enterprise Edition + is an excellent and inexpensive solution if you need the power tools.</p> +<p>SQLyog is just a few clicks away[11], only 7 Megabytes, and ready to install!</p> +<h3>Notes</h3> +<small> + <ul> + <li>[1] MySQL - Official Site: <a href="http://www.mysql.com/">http://www.mysql.com/</a></li> + <li>[2] PHPMyAdmin - Official Site: <a + href="http://www.phpmyadmin.net/home_page/index.php">http://www.phpmyadmin.net/home_page/index.php</a> + </li> + <li>[3] MySQL-Front: <a href="http://www.mysqlfront.de/">http://www.mysqlfront.de/</a></li> + <li>[4] Navicat MySQL: <a href="http://www.navicat.com/">http://www.navicat.com/</a></li> + <li>[5] Webyog Website: <a href="http://www.webyog.com/">http://www.webyog.com/</a></li> + <li>[6] SQLyog, feature page: <a + href="http://www.webyog.com/sqlyog/index.php ">http://www.webyog.com/sqlyog/index.php</a></li> + <li>[7] SQLyog, features matrix: <a + href="http://www.webyog.com/sqlyog/featurematrix.html">http://www.webyog.com/sqlyog/featurematrix.html</a> + </li> + <li>[8] Peter Laursen & Quy Ton, "Using SQLyog Enterprise to Effectively Synchronize MySQL Databases" (PDF): <a + href="http://www.webyog.com/articles/Using_SQLyog_Enterprise_to_Effectively_Synchronize_MySQL_Databases.pdf">http://www.webyog.com/articles/Using_SQLyog_Enterprise_to_Effectively_Synchronize_MySQL_Databases.pdf</a> + </li> + <li>[9] Peter Laursen, "Migration to MySQL with SQLyog ver 4.1" : <a + href="http://www.databasejournal.com/features/mysql/article.php/10897_3550146">http://www.databasejournal.com/features/mysql/article.php/10897_3550146</a> + </li> + <li>[10] Webyog, "How to use Scheduled Backups with SQLyog": <a + href="http://www.webyog.com/articles/how_to_use_scheduled_backup.html">http://www.webyog.com/articles/how_to_use_scheduled_backup.html</a> + </li> + </ul> +</small>
M contents/articles/thoughts-on-firefox3-and-opera95.htmlcontents/articles/thoughts-on-firefox3-and-opera95.html

@@ -4,7 +4,7 @@ content-type: article

timestamp: 1213327080 tags: "browsers|review|firefox|opera" ----- -<p>Opera 9.5 is out, Firefox 3 too (more or less), so, which browser are you going to use today?<br /> +<p>Opera 9.5 is out, Firefox 3 too (more or less), so, which browser are you going to use today? This new generatio of browsers offers plenty of new, innovative features and improvements over the past, in both cases:</p> <ul>

@@ -19,12 +19,12 @@ development team came up with <span class="caps">FOUR</span> different themes, aiming to camouflage Firefox as a

native application for all the major OSes.</p> <p>Personally, while I was really impressed by the new Opera theme, I was not too sure of the new direction taken for Firefox UI. Why a different theme for each different major operating system? In particular the XP theme could have - been better, in my opinion. <br /> + been better, in my opinion. Not a huge deal though, as both browsers are skinnable (although I'm not gonna alter the way Opera - looks!).<br /> - <br /> - <br /> - <br /> + looks!). + + + </p> <h3>The speed of light</h3> <p>My main complaint about Firefox 2 was its slow startup and generally slowness due to several memory leaks. This

@@ -33,7 +33,7 @@ <p>Firefox 3, luckily, is much faster and more memory-efficient than its predecessor, as the development team squashed

most of the memory-related bugs. The introduction of jemalloc as the new memory allocator and also the new cycle collectory improved things quite a bit.</p> <p>Opera 9.5 still &#8220;feels&#8221; faster at startup and also the <span class="caps">GUI</span> is a bit more snappy - than Firefox's, but Firefox 3 is <em>terribly</em> fast at interpreting Javascript.<br /> + than Firefox's, but Firefox 3 is <em>terribly</em> fast at interpreting Javascript. As a result, sites like Gmail or Google Reader are rendered almost instantaneously in Firefox 3, while Opera 9.5 is slightly slower.</p> <h3>Address Bar 2.0</h3>

@@ -47,7 +47,7 @@ <p>As an Opera user, I must admit that Firefox is really way ahead with this. Unfortunately, Opera toolbar still is not

that smart.</p> <h3>Sync'ing up</h3> <p>Opera offers the ability to sync your bookmarks, notes, custom toolbars and Quick Dial pages via the new <a - href="http://link.opera.com/">Link</a> service.<br /> + href="http://link.opera.com/">Link</a> service. It looks awfully similar to <a href="https://services.mozilla.com/">Mozilla Weave</a>, an experimental extension aiming to synchronize the whole Firefox profile.</p> <p>Currently, Weave allows users to sync bookmarks, history and passwords in a very secure way: this truly preserve the

@@ -59,7 +59,7 @@ href="http://arstechnica.com/news.ars/post/20080409-first-look-mozilla-fennec-targets-handheld-browser-market.html">looks

very promising</a>.</p> <h3>Be nice, be open</h3> <p>Firefox is <span class="caps">THE</span> (only?) open source browser. Opera has always been (and always will be?) a - proprietary, freeware, <em>closed source</em> app.<br /> + proprietary, freeware, <em>closed source</em> app. Some people are really bothered by this, especially Linux users of course: it really comes down to how religious you are about the software running on your machine.</p> <p>Being open source, Firefox is more hacker-friendly: this release, especially, also delivers an awful lot of useful

@@ -118,7 +118,7 @@ <p>In the past release, Opera added widget to let developers unleash their creativity. And I must admit that they are

quite cute and work well enough (a few of them at least).</p> <p>One of the most frequently-missed feature was a Firebug equivalent for Opera. Luckily, this was fixed in this release with the introduction of <a href="http://www.opera.com/products/dragonfly/">DragonFly</a>, which is already bundled - with the browser itself. <br /> + with the browser itself. I'm pretty sure this will make <em>a lot</em> of web developers very happy.</p> <p><img src="/images/opera_dragonfly.png" alt="" /></p> <p>Personally, I still miss an equivalent of the del.icio.us extension in Opera, but I guess I can survive with just a
M contents/articles/web-promotion.htmlcontents/articles/web-promotion.html

@@ -4,4 +4,165 @@ content-type: article

timestamp: 1134133707 tags: "internet|webdevelopment" ----- -Everybody from magazines to canned pasta sellers wants a website to promote their business, but you need to promote your site before you promote your products or services through it. In Part 1 of this article, I will explain some of the basics of promoting a website, and show you how to implement a cost-free strategy to get the search engine placement you need to promote your website.<strong>The Necessity of Website Promotion</strong><br />As the World Wide Web kept growing over the years, people soon realised that keeping updated <em>list</em>s of all the available pages on the Net was an impossible and pointless job. It became necessary to develop a new way to easily find and access the massive amount of content on the Web, and that is when <em>search engines</em> became a reality.<br /><br />Everyone should know the <em>legend</em> of the two lads from Stanford University who became multi-millionaires in a few years after developing and successfully marketing their easy-to-use, ultra-powerful search engine called Google. <br /><br />After it became clear that the Web was going to be (quite literally) dominated by search engines, IT professionals started developing strategies to cause their site to appearon the first page of search results. These strategies and techniques soon became known as <em>Search Engine Optimizations</em> (SEO). Call it ?science?, ?magic? or simply a way to make money, SEO is a business, and so-called "SEO experts" often <em>do</em> get a lot of cash just to take care of your website.<br /><br />Whether you like it or not, any website must be promoted in order to get visitors; some sort of marketing strategy <em>is</em> necessary if you want to stand out from the crowd, and even if you just want someone to find your page.<br /><br />Now let's assume that you don't want to spend a penny marketing your site, but you still want to be known and noticed among either competitors or friends and get some visitors to your new, exceptional (for you) and extremely innovative (to your eyes) website. Is it possible to do this, or do you need to shell out some money to an SEO expert'<br /><br />I think that a zero-cost marketing strategy does exist, and I tried to put one into practice myself. I achieved relatively good results without spending anything but time. Patience and dedication are the keys to success in a zero-cost method: if you don't have those two qualities, you either need to start working on them or find a job to make money to spend for a <em>proper</em> (but sometimes risky) marketing campaign.<br /><br /><br /><strong>1. Plan your website</strong><br /><br />Don't skip this part, because it's the most important step in the whole process: you have to come up with some clever ideas to make your site look unique and original!<br /><br /><em>2. Have a look around</em><br /><br /><em>?Well, if I were able to do <strong>that</strong> I wouldn't need to promote my site at all, and I wouldn't be reading this article?</em><br /><br />This is true to some extent - coming up with an original idea nowadays is difficult if not impossible. <em>Offering something different</em> or <em>presenting it in a different way</em> can be done, as can offering the same thing <em>but better</em> (that's what Google did). Once again, you need patience, dedication, and the belief that it is worth it.<br /> <br />The best way to decide if it's worth creating a new website is to study your potential competitors, i.e. any other website that deals with the same stuff. Study the way these websites are created, list their weaknesses and strengths, and after comparing a few of them, start thinking about what <em>you</em> can do to create a <em>better</em> website.<br /><br />Then, <em>objectively</em> evaluate your idea and decide if you have the ability to do it, what risks are involved, and how long it would take to create. After all this brainstorming, if you still want to spend time on your project, you can go on; if not, <em>this is your last chance to stop and think about something completely different</em> - it doesn't mean you?re a coward, it just means you are capable of understanding your limits, which is something many people have trouble doing these days.<br /><br /><em>4. Create an identity</em><br />Now it's time to think about a proper <em>identity</em> for your site, and this involves the following steps:<br /><br /><ul><br /><li>Define your objectives and purposes</li><br /><li>Define the audience of your site</li><br /><li>Think about a good name for your site</li><br /><li>Create some graphics and a logo</li><br /><li>Create slogans and descriptions </li><br /></ul><br /><br />Of course, defining the objectives and purposes of your site is the most important thing on that entire list. Again, you have to be honest with yourself and not be afraid to admit your limitations: if you find you can't do something you?d like to, try to imagine your site without that particular feature, and if there?s still a hope of success, go ahead. If not, try looking at your ideas from a different point of view.<br /><br />A different point of view could mean a different audience: if you see that there?s absolutely no chance of selling canned pasta to Italians,you might have better luck with the English. Audience is extremely important: it's a factor which influences both the content and the design of your site, as well as the features offered. Doing something the way <em>you</em> like it doesn't mean other people are going to like it, and for people to want to come to your site, they have to like it!<br /><br />Now, think about a good name for your site: it must be easy to remember, be somehow related to what you do, and most importantly, the domain must be available. Check on that before you commit to a particular name, or you might be in for a shock. There are plenty of places on the Net that can tell you if a particular domain with a particular TLD is available[1].<br /><br />Next, I think you should come up with a logo, though some people say it's premature to think about graphics at this stage. It's probably true, but I find that having a visual representation of your goal can often be a morale booster that will help you to keep going. <br /><br />The last step is a slogan or a description. This is an important part of creating your site's identity. It should be honest, yet promising: it has to stick in the consumer's mind. How you do this is entirely up to you, and it can also be the most time-consuming step of the process - it will probably take you a few tries to come up with something you really like.<br /><br /><br /><em>4. Features, Services and Architecture</em><br /><br />Now it's time to do something less idealistic and slightly more practical: you should start listing the features and services your site will offer, and start thinking about how to present them. Don't plan on doing too many things or implementing unnecesssary features on your site - having a forum, a newsletter <em>and</em> a blog on CannedPasta.com could be a bit too much, whereas having a gallery and a Testimonials area could be a much better use of resources. In short, add features because they can be useful, not because it's trendy to offer them.<br /><br />After you decide on your features, you have to think about the <em>architecture</em> of your site, or <em>how</em> people are going to find the services you offer on your site. Menus and navigation bars are a must, but keep them relatively uncluttered and easy to use: you must be able to grab the visitor?s attention and communicate what you do in the first 10 seconds; then, if the visitor remains on the site for another minute or two, he must be convinced by then that you are selling the best canned pasta he?s ever tried and cheaper than anyone else. This is accomplished mainly by putting links to relevant pages in at the right places: if a visitor can't find your content, he?ll never be persuaded to try your product!<br /><br /><br /><strong>Site Development</strong><br /><br />It's now time to start coding your site. Whether you do it yourself or have someone do it for you, the web developer should follow some important guidelines when coding the site. I will only touch on them very briefly.<br /><br /><em>Make it simple</em> -don't do something unless you have to. The layout of your site must be decided according to the site?s purpose - that's why movie sites have a lot of graphics, Flash[3] and other eye-catching things, and why forums and news sites don't need that stuff at all. Show your products and describe them with the minimum amount of content; people who want to buy canned pasta normally don't want to know the history of it: they just want to see if it's worth buying it. <br /><br /><em>Cleaner is better</em> -the code of your site should be clean,support web standards, and contain no errors. Although code validation[4] is not critical to acquire good placement in search engines, it can help to a certain extent. <br /><br />For the sake of code clarity, I normally recommend not using deprecated tags or and its attributes. Avoiding using tags attributes altogether, if possible: CSS[5] was created for a reason, and that's for making your life easier. A discussion of CSS is beyond the scope of this article, but I have included a reference link[6] for you to learn more about it.<br /><br /><em>Fundamentals of an SEO Strategy</em><br /><ul><br /><li>Always provide an ALT attribute for your image </li>(crawlers[7] will process that instead of the image)<br /><li>Always provide a relevant TITLE attribute to your links</li><br /><li>Always use properly formatted h1, h2, etc. tags for your titles.</li><br /><li>The tag in the of every page should be different each time and either reflect the page?s content or provide a proper title for it. It should also be one of the first tags on the page.</li><br /><li>Always remember to provide an icon for your site </li>(favicon[8])<br /><li>Don't forget a valid robots.txt</li>[9] file in the root directory of your site.<br /></ul><br /><br /><em> Meta Tags</em><br />Although Google doesn't seem to care about them any more, you should always include some meta tags in every page, particularly for keywords and the site description. Ideally, these should vary according to the page's content, contain not more than 10-15 relevant keywords, and give a brief yet complete description of the page.<br /><br /><em> Search Engine Friendly (SEF) URLs</em><br />Even though all the major search engines can process dynamic URLs correctly, a URL like <a href="http://www.cannedpasta/products/spaghetti.php">http://www.cannedpasta/products/spaghetti.php</a> is much better than something like <a href="http://www.cannedpasta.com/index.php?a=show&cat=1256&id=234.">http://www.cannedpasta.com/index.php?a=show&cat=1256&id=234.</a> The first one will not only be crawled by ANY search engine with no problems at all, but more importantly, users will remember it. If your site is dynamic (as are the majority of websites these days) and your pages are therefore automatically generated, you could try using mod_rewrite to transform complicated URLs into their simplified but more effective counterparts[10].<br /><br />That's all for this part of the article. Next time I?ll discuss the final phases of your site?s zero-cost promotion campaign: website promotion, website maintenance, and what to do once you get things going.<br /><br /><br /><strong>Notes, related links, and further reading:</strong><br /><br />[1]You can do so here, for example: <a href="http://www.mydomain.com">http://www.mydomain.com</a><br />[2]The domain is fictitious and used as an example<br />[3]Macromedia Flash: <a href="http://www.macromedia.com/software/flash/">http://www.macromedia.com/software/flash/</a><br />[4]W3C validator: <a href="http://validator.w3.org/ ">http://validator.w3.org/ </a><br />[5]CSS: <a href="http://www.w3.org/Style/CSS/ ">http://www.w3.org/Style/CSS/ </a><br />[6]Official CSS tutorial: <a href="http://www.w3schools.com/css/default.asp ">http://www.w3schools.com/css/default.asp </a><br />[7]Web crawler, Wikipedia page: <a href="http://en.wikipedia.org/wiki/Web_crawler">http://en.wikipedia.org/wiki/Web_crawler</a><br />[8]Favicon, Wikipedia page: <a href="http://en.wikipedia.org/wiki/Favicon">http://en.wikipedia.org/wiki/Favicon</a><br />[9]Robot.txt tutorial: <a href="http://www.searchengineworld.com/robots/robots_tutorial.htm">http://www.searchengineworld.com/robots/robots_tutorial.htm</a><br />[10]Apache mod_rewrite: <a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html ">http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html </a><br /> + +<p>As the World Wide Web kept growing over the years, people soon realised that keeping updated <em>list</em>s of all + the available pages on the Net was an impossible and pointless job. It became necessary to develop a new way to + easily find and access the massive amount of content on the Web, and that is when <em>search engines</em> became a + reality.</p> + +<p>Everyone should know the <em>legend</em> of the two lads from Stanford University who became multi-millionaires in a + few years after developing and successfully marketing their easy-to-use, ultra-powerful search engine called Google. +</p> + +<p>After it became clear that the Web was going to be (quite literally) dominated by search engines, IT professionals + started developing strategies to cause their site to appear on the first page of search results. These strategies + and techniques soon became known as <em>Search Engine Optimizations</em> (SEO). Call it "science," "magic," or + simply a way to make money, SEO is a business, and so-called "SEO experts" often <em>do</em> get a lot of cash just + to take care of your website.</p> + +<p>Whether you like it or not, any website must be promoted in order to get visitors; some sort of marketing strategy + <em>is</em> necessary if you want to stand out from the crowd, and even if you just want someone to find your page. +</p> + +<p>Now let's assume that you don't want to spend a penny marketing your site, but you still want to be known and noticed + among either competitors or friends and get some visitors to your new, exceptional (for you) and extremely + innovative (to your eyes) website. Is it possible to do this, or do you need to shell out some money to an SEO + expert'</p> + +<p>I think that a zero-cost marketing strategy does exist, and I tried to put one into practice myself. I achieved + relatively good results without spending anything but time. Patience and dedication are the keys to success in a + zero-cost method: if you don't have those two qualities, you either need to start working on them or find a job to + make money to spend for a <em>proper</em> (but sometimes risky) marketing campaign.</p> + +<h3>1. Plan your website</h3> +<p>Don't skip this part, because it's the most important step in the whole process: you have to come up with some clever + ideas to make your site look unique and original!</p> + +<h3>2. Have a look around</h3> +<p><em>"Well, if I were able to do <em>that</em> I wouldn't need to promote my site at all, and I wouldn't be reading + this article?"</em></p> +<p>This is true to some extent - coming up with an original idea nowadays is difficult if not impossible. <em>Offering + something different</em> or <em>presenting it in a different way</em> can be done, as can offering the same + thing <em>but better</em> (that's what Google did). Once again, you need patience, dedication, and the belief that + it is worth it.</p> +<p>The best way to decide if it's worth creating a new website is to study your potential competitors, i.e. any other + website that deals with the same stuff. Study the way these websites are created, list their weaknesses and + strengths, and after comparing a few of them, start thinking about what <em>you</em> can do to create a + <em>better</em> website.</p> +<p>Then, <em>objectively</em> evaluate your idea and decide if you have the ability to do it, what risks are involved, + and how long it would take to create. After all this brainstorming, if you still want to spend time on your project, + you can go on; if not, <em>this is your last chance to stop and think about something completely different</em> - it + doesn't mean you're a coward, it just means you are capable of understanding your limits, which is something many + people have trouble doing these days.</p> + +<h3>3. Create an identity</h3> +<p>Now it's time to think about a proper <em>identity</em> for your site, and this involves the following steps:</p> +<ul> + <li>Define your objectives and purposes</li> + <li>Define the audience of your site</li> + <li>Think about a good name for your site</li> + <li>Create some graphics and a logo</li> + <li>Create slogans and descriptions</li> +</ul> +<p>Of course, defining the objectives and purposes of your site is the most important thing on that entire list. Again, + you have to be honest with yourself and not be afraid to admit your limitations: if you find you can't do something + you'd like to, try to imagine your site without that particular feature, and if there's still a hope of success, go + ahead. If not, try looking at your ideas from a different point of view.</p> +<p>A different point of view could mean a different audience: if you see that there's absolutely no chance of selling + canned pasta to Italians, you might have better luck with the English. Audience is extremely important: it's a + factor which influences both the content and the design of your site, as well as the features offered. Doing + something the way <em>you</em> like it doesn't mean other people are going to like it, and for people to want to + come to your site, they have to like it!</p> +<p>Now, think about a good name for your site: it must be easy to remember, be somehow related to what you do, and most + importantly, the domain must be available. Check on that before you commit to a particular name, or you might be in + for a shock. There are plenty of places on the Net that can tell you if a particular domain with a particular TLD is + available[1].</p> +<p>Next, I think you should come up with a logo, though some people say it's premature to think about graphics at this + stage. It's probably true, but I find that having a visual representation of your goal can often be a morale booster + that will help you to keep going.</p> +<p>The last step is a slogan or a description. This is an important part of creating your site's identity. It should be + honest, yet promising: it has to stick in the consumer's mind. How you do this is entirely up to you, and it can + also be the most time-consuming step of the process - it will probably take you a few tries to come up with + something you really like.</p> + +<h4>4. Features, Services and Architecture</h4> +<p>Now it's time to do something less idealistic and slightly more practical: you should start listing the features and + services your site will offer, and start thinking about how to present them. Don't plan on doing too many things or + implementing unnecessary features on your site - having a forum, a newsletter <em>and</em> a blog on CannedPasta.com + could be a bit too much, whereas having a gallery and a Testimonials area could be a much better use of resources. + In short, add features because they can be useful, not because it's trendy to offer them.</p> +<p>After you decide on your features, you have to think about the <em>architecture</em> of your site, or <em>how</em> + people are going to find the services you offer on your site. Menus and navigation bars are a must, but keep them + relatively uncluttered and easy to use: you must be able to grab the visitor's attention and communicate what you do + in the first 10 seconds; then, if the visitor remains on the site for another minute or two, he must be convinced by + then that you are selling the best canned pasta he's ever tried and cheaper than anyone else. This is accomplished + mainly by putting links to relevant pages in at the right places: if a visitor can't find your content, he'll never + be persuaded to try your product!</p> + + +<h3>Site Development</h3> +<p>It's now time to start coding your site. Whether you do it yourself or have someone do it for you, the web developer + should follow some important guidelines when coding the site. I will only touch on them very briefly.</p> +<p><em>Make it simple</em> - don't do something unless you have to. The layout of your site must be decided according to + the site's purpose - that's why movie sites have a lot of graphics, Flash[3] and other eye-catching things, and why + forums and news sites don't need that stuff at all. Show your products and describe them with the minimum amount of + content; people who want to buy canned pasta normally don't want to know the history of it: they just want to see if + it's worth buying it.</p> +<p><em>Cleaner is better</em> - the code of your site should be clean, support web standards, and contain no errors. + Although code validation[4] is not critical to acquire good placement in search engines, it can help to a certain + extent.</p> +<p>For the sake of code clarity, I normally recommend not using deprecated tags or and its attributes. Avoid using tags + attributes altogether, if possible: CSS[5] was created for a reason, and that's for making your life easier. A + discussion of CSS is beyond the scope of this article, but I have included a reference link[6] for you to learn more + about it.</p> + +<h4>Fundamentals of an SEO Strategy</h4> +<ul> + <li>Always provide an ALT attribute for your image (crawlers[7] will process that instead of the image)</li> + <li>Always provide a relevant TITLE attribute to your links</li> + <li>Always use properly formatted h1, h2, etc. tags for your titles.</li> + <li>The tag in the of every page should be different each time and either reflect the page's content or provide a + proper title for it. It should also be one of the first tags on the page.</li> + <li>Always remember to provide an icon for your site (favicon[8])</li> + <li>Don't forget a valid robots.txt[9] file in the root directory of your site.</li> +</ul> + +<h4>Meta Tags</h4> +<p>Although Google doesn't seem to care about them anymore, you should always include some meta tags in every page, + particularly for keywords and the site description. Ideally, these should vary according to the page's content, + contain not more than 10-15 relevant keywords, and give a brief yet complete description of the page.</p> + +<h4>Search Engine Friendly (SEF) URLs</h4> +<p>Even though all the major search engines can process dynamic URLs correctly, a URL like <a + href="http://www.cannedpasta/products/spaghetti.php">http://www.cannedpasta/products/spaghetti.php</a> is much + better than something like <a + href="http://www.cannedpasta.com/index.php?a=show&cat=1256&id=234.">http://www.cannedpasta.com/index.php?a=show&cat=1256&id=234.</a> + The first one will not only be crawled by ANY search engine with no problems at all, but more importantly, users + will remember it. If your site is dynamic (as are the majority of websites these days) and your pages are therefore + automatically generated, you could try using mod_rewrite to transform complicated URLs into their simplified but + more effective counterparts[10].</p> + +<p>That's all for this part of the article. Next time I'll discuss the final phases of your site's zero-cost promotion + campaign: website promotion, website maintenance, and what to do once you get things going.</p> + +<strong>Notes, related links, and further reading:</strong> +<ul> + <li>[1] You can do so here, for example: <a href="http://www.mydomain.com">http://www.mydomain.com</a></li> + <li>[2] The domain is fictitious and used as an example</li> + <li>[3] Macromedia Flash: <a + href="http://www.macromedia.com/software/flash/">http://www.macromedia.com/software/flash/</a></li> + <li>[4] W3C validator: <a href="http://validator.w3.org/ ">http://validator.w3.org/ </a></li> + <li>[5] CSS: <a href="http://www.w3.org/Style/CSS/ ">http://www.w3.org/Style/CSS/ </a></li> + <li>[6] Official CSS tutorial: <a + href="http://www.w3schools.com/css/default.asp ">http://www.w3schools.com/css/default.asp </a></li> + <li>[7] Web crawler, Wikipedia page: <a + href="http://en.wikipedia.org/wiki/Web_crawler">http://en.wikipedia.org/wiki/Web_crawler</a></li> + <li>[8] Favicon, Wikipedia page: <a + href="http://en.wikipedia.org/wiki/Favicon">http://en.wikipedia.org/wiki/Favicon</a></li> + <li>[9] Robot.txt tutorial: <a + href="http://www.searchengineworld.com/robots/robots_tutorial.htm">http://www.searchengineworld.com/robots/robots_tutorial.htm</a> + </li> + <li>[10] Apache mod_rewrite: <a + href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html ">http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html + </a></li> +</ul>