Archive for the ‘Opinion’ Category

Document Formats

Thursday, April 3rd, 2008

Documents

In FLOSS circles, March 26 is celebrated as the Document Freedom Day.

Document Freedom Day (DFD) is a global day for document liberation. It will be a day of grassroots effort to educate the public about the importance of Free Document Formats and Open Standards in general.

This is when I realized that people actually use the office packages daily. I almost never use it. According to me there are three options to store text data.

  • Plain Text
  • HTML
  • Database

Plain Text

The simplest format there is. If there is something I should remember, I just put it in a text file and save it to the desktop. I used to use it a lot earlier - but I don’t use it much nowadays due to searchability issues. There are quite a few advantages in using the text format

HTML

If I need any formatting in the text, I create the document in HTML. It is easier for me to create the formatting using HTML code that using WYSIWYG Word Processors(like MS Word). I write all my blog posts in HTML - perhaps the only occasion where I need formatting.

Database

My favorite method to store text data is in a database. I am a web developer - so I always have a Web Server and Database server running on my system - so this system is perfect for me.

Interface

Remove that scared look on your face - I don’t use phpMyAdmin or any Database Administration tools as the interface to save/view the data. I use my own custom scripts or WordPress.

The best example of this is txt. Txt is my code snippets/commands repository. You can view the full story in the Saving Code Snippets post.

That’s an online example - I also have a personal wordpress blog running in my local server. I use it to record events, purchases, store receipts etc.

Advantages

Tagging
Tagging is heaven-sent to make information more findable - any del.icio.us user should know that. I used to install Ultimate Tag Warrior to get this feature - but WordPress now supports tags natively.
Searching
Searching for data within a database is much more easier, faster and provides more relevent results than searching for the data in a collection of file. Even if you are using a file indexing software like Google Desktop Search or Beagle/Recoll(for linux users), I find database searching more easier. Another advantage of using database to search is that you can create complex queries if you know SQL.

Disadvantages

Not for everyone
Let’s face it - installing and maintaining a web/database server is a tad in the geek zone. An average Joe will find it just a little bit out of their league.
Overhead
Running a web server and a database server is a bit demanding on the RAM.
Backing up a little more complicated - but easier
Backing up the data in a Database is not as straight forward as backing up files - but its actually easier if you know how.

Online

One extra method to store the data - online. This data is stored in a database - but you don’t have the disadvantages associated with using a database. More and more people are turning to this method now. I did not include it in the initial list because its not a data format - its more of a data storing method.

Learning a New Programming Language: The ‘Hello World’ Method

Thursday, March 6th, 2008

Hello World Learning

Learning a new programming language is fun - and essential if you want to stay competitive. I try to learn new languages all the time(my latest target is Haskell). As a result, I have a system to make learning new languages easier. This is for people who already know a programming language and want to learn another one.

Requirements

What you must have…

The interpreter/compiler of the language you are learning
You must be able to run the program after writing it.
Language reference manual/documentation
Usually found at the site of the language. Put a shortcut to that on your desktop - because you will be using this all the time.
An easy to follow tutorial
Search for it in Google. If you find one and its hard to follow, ditch it and get another. You may not need this - as manual for most languages have a tutorial in them.
A ‘todo’ project that you cannot live without
This is what forces you to learn the language - more on this later.

What I would recommend you have…

Having this will help you learn - but its not necessary.

A Net Connection
You may want to ask your doubt on the IRC channel. Or on a forum. Or to google the error message you got.
A Decent IDE
This may make your job easier - but if you have notepad, that’s enough.

What you don’t need

Books on the language
You may need a book to master the language - but you don’t need one to learn it.
A Teacher
Its helpful to have someone to clarify the doubts you may have - but no one can teach you anything you cannot learn yourself.

The Hello World Script

First you have to create the ‘hello world’ application. This is more than just ‘print “Hello World”‘ - it will act as a cheatsheet for you until you familiarize yourself with the language. The point of this application is to use all the most commonly used elements of a language and putting it in a single place so that you can refer to it later.

Your first job is to go to the tutorial, the manual and the internet until you create the Hello World application with the following stuff in it. I will provide an example - how the ‘hello world’ application will look in PHP.

After each step run the application and make sure it works.

Print “Hello World\n”

Why do you think we call it a hello world application? Write the code to print a string ‘hello world’ and save it to a file. Now run it using the interpreter - and make sure it works - see it in action.


// Printing(IO)
print "Hello World!\n";
	
Comments

Put a single line comment(like //) on top of the “print ‘hello world’” code and if your language supports it, a multiline comment(/* - */) as well. Run the script to make sure the comments work as advertised.


// Single line comment.
/*
Mulitline comment.
*/
	

I was just kidding about running the script to test the comments - you did’nt do it, did you?

Use a variable(a string and an integer) and a concatenation operator.

Create a variable called name(string) - and give it your name as the value. Create another integer variable and give it the current year. You don’t have to find it programatically - just put it as 2008 or something. Now you have to print out the a string “Hello, <name> - Welcome to year <$year>”. This string will let you concatenate two different type variable to a string - and it makes me feel like a time traveler ;-).

Yeah - the value of variable name should appear at <name>. Use the concatenation operator if possible - in PHP, write

print "Hello, " . $name . " - welcome to year " . $year;

instead of

print "Hello, $name - welcome to year $year";

This is because different languages have different concatenation operators. The other stuff is the same almost universally. + refers to addition. - refers to subtraction. * is multiplication. My point is that if you know the operators for one language, you know the operators for almost all languages. But the concatenation operator differs from language to language - its ‘+’ in javascript, ruby. Its ‘.’ in Perl, PHP, etc.

There are exceptions to this rule - ‘=’ is the equality operator in SQL while it all other language its ‘==’. The assignment operator is ‘:=’ in pascal - in all other it is ‘=’. If you notice any difference in any operator write some code using that operator in this section.

Use if/else if/else

Create something like this pseudo code…

if (year > 2008) {
	print "Welcome to the future - yes we have flying cars!"
}
else if(year < 2008) {
	print "The past - please don't change anything. Don't step on any butterflies. And for the sake of all that's good and holy, stay away from your parents!"
}
else {
	print "Anything wrong with your time machine? You have not gone anywhere, kiddo."
}

In PHP, this section will look like this…

//If,else conditions
if ($year > 2008) {
	print "Welcome to the future - yes, we have flying cars!";
}
else if($year < 2008) {
	print "The past - please don't change anything. Don't step on any butterflies. And for the sake of all that's good and decent, stay away from your parents!";
}
else {
	print "Anything wrong with your time machine? You have not gone anywhere, kiddo.";
}
print "\n";
	

If you use switch(and the new language supports switch), you can write an example of switch here.

Print ‘Hi there!’ 3 times using a for loop

A PHP example of using for loop(my all time favorite loop)…

// For loop
for($i=0; $i<3; $i++) {
	print "$i) Hi there!\n";
}
	
Create a list(array) and iterate through it using while/for/foreach loop.

I am using a while loop here - to keep things different…


//Numerical Array, While
$rules = array(
	'Do no harm',
	'Obey',
	'Continue Living'
);
$i = 0;
while($i<count($rules)) {
	print "Rule " . ($i+1) . " : " . $rules[$i] . “\n”;
	$i++;
}	
Create a hash(associative array) and iterate through it.

If the language you are going to learn have ‘foreach’, this maybe the best time to use it…

// Associated array, foreach
$associated = array(
	'hello'	=>	'world',
	'foo'	=>	'bar',
	'lorem'	=>	'ipsum'
);
foreach($associated as $key => $value) {
	print "$key: $value\n";
}
Create a function with an argument and a return.

If you need, you can create an example for call by reference, optional arguments, default argument value, variable argument count etc. as well - but they are not essential. Make sure you include the code to call a function as well.

// Function, argument, return, call
function hello($name) {
	return "Hello " . $name;
}
$hello_string = hello("Binny");

Optional Code

I don’t usually included some of these in my ‘hello world’ scripts - but they can be useful in some cases. Some may find them useful - so if you think you are going to use any of these, include it in your file.

Class, Objects, Member variables and functions

If you are a big fan of OOP, create the code for a class. Make sure it has all the following elements…

  • At least one member variable
  • At least two member functions
  • Access the member variable and the other function from within a member function.
  • Create an object of this class
  • Call a member function using the object.
// One for the OOP fanboys - Class, members, objects and stuff.
class Movie {
	public $name = '';
	public $rating = 0;

	function __construct($name) {
		$this->name = $name;
		$this->rateMovie();
	}
	function rateMovie() {
		$this->rating = (strlen($this->name) % 10) + 1; //IMDBs rating algorithm. True story!
	}

	function printMovieDetails() {
		print "Movie : {$this->name}\n";
		print "Rating : " . str_repeat('*', $this->rating) . "({$this->rating})\n\n";
	}
}
//Create the object
$ncfom = new Movie("New Country for Old Men"); //It's a sequel!
$ncfom->printMovieDetails();
File IO

Include this code - it is sure to come in useful someday. Unless you are learning JavaScript.

// File IO
// File reading, easy method...
$contents = file_get_contents('hello.php');
// Writing to a file
$file_handle = fopen(’/tmp/hello.txt’, ‘w’);
fputs($file_handle, “Hello World”);
fclose($file_handle);
	
Command Execution

I tend to include this - but it may be unnecessary for you.

// Command Executing
print `ls`; //Execute the command 'ls' and print its output
Regular Expressions

I always include them - I am a big fan of regular expressions. I have lost count of how many times they have saved the day.

// Regular Expressions
$string = "Hello World";
if(preg_match('/^Hell/', $string)) print "Yup - its evil\n";
print preg_replace('/l([^l])/’, “$1″, $string); //Remove an ‘l’ from both words. Should print ‘Helo Word’
	

Specialized Code

The language you learn may have a specialized field which we may have not used yet. If so, put it down here.

If you are learning javascript, write some code to access DOM nodes here. If you are using PHP, database connectivity will go well here. If you are learning any web server side languages, write the code to fetch the POST/GET request values. For PHP, it may look something like this…


// Database connectivity(native)
mysql_connect('localhost', 'root', '') or die("Cannot connect to the Database server");
mysql_select_db('Data') or die('Could not find a database called "Data"');

// Executing Query
$sql_handle = mysql_query('SELECT name,url,description FROM Comment LIMIT 1') or die('Query Error: ' . mysql_error());
while($row = mysql_fetch_assoc($sql_handle)) {
	print "Name	:	$row[name]\n”;
	print “URL	:	$row[url]\n”;
	print “Desc	:	$row[description]\n\n”;
}
// Just a note here - if you are going to use PHP with database in a production system(and you will, trust me), use a Database abstraction layer rather than the above mentioned native methods.

print $_REQUEST['username']; // Method to get the value of the field ‘username’ after a form submit. Will not work at CLI execution
	

Project

Next thing you need is a project - which you are going to build using the new language. Some points that you have to look for when choosing the new project…

  1. It should not be a huge project.
  2. At the same time, it should not be something trivial.
  3. There must be something about the project which would force you to finish it.

The third point needs a little explaining. You should not just pick any project that pops into your mind. It must be something that you need - something you could not live without. If it is important to you, you will have a motivation to finish the project. Otherwise, you will drop the project at the first sign of trouble. But if its important to you, you will spend more time on it - you will look at documentation, post the problem in forums, ask others in IRC channels. And eventually, you will fix the problem. And you will finish the project.

While working on the project, keep the ‘hello world’ open - you will find yourself referring to it often.

Defining Web 2.0 - At 3 Levels

Wednesday, January 23rd, 2008

Web 2.0

Web 2.0 - almost everyone have heard the term - but few are sure about its meaning. Unfortunately, it cannot be defined easily. People in different fields have their own unique definitions for the term. In this article, I will attempt to define the term at three different level - the Philosophy, the Technology and the Design.

Disclaimer: Before anyone reacts violently to the term Web 2.0, let me make myself very clear…
Web 2.0 is an ambiguous buzz word. It has been used and abused so many times that it does not have a consistent meaning - so people are free to interpret it as they see fit. And this is how I interpret it.

Philosophy

The design philosophy of a web site can make it a Web 2.0 site. This is perhaps the key difference between a Web 1.0 site and a Web 2.0 site…

Web 1.0 is a web site where there is a one way communication between the web master to the visitor. A Web 2.0 site is a site where the visitors can communicate with each other.

For example, compare the Encyclopedia Britannica to Wikipedia. In Encyclopedia Britannica, the web master creates the content and gives it to the visitor - the visitor has no way of talking back. But in Wikipedia, the visitor create the content for other visitors.

Technology

The keyword here is “Internet as a platform”. In Web 2.0, the net became the platform rather than just a data transfer mechanism. For a simple example, when you visit a site, the videos in it come from YouTube, the images from Flickr, the search is done using Google API and you can bookmark pages using the API from del.icio.us.

Some technologies that are described as Web 2.0…

  • Ajax
  • Valid Markup
  • Microformats
  • Tagging, Tag Clouds
  • APIs
  • Feeds
  • Mashups

Some features that makes a technology Web 2.0…

Speed
For example, Ajax makes simple tasks much faster.
Ease of Use
A good example of this is Tagging. It is a much easier approach when compared to hierarchies.
Enabling Mashups
APIs, Feeds, etc. makes this possible.
Bringing Web Apps closer to the Desktop
Ajax, AIR, etc.

Design

This is perhaps the only area where the term Web 2.0 can be defined with a reasonable level of accuracy. A site with a Web 2.0 design is one that has at least some of these elements…

Simple Design

Stonewall

Lots of white space

Browse Happy

Nice Icons

37Signal Icons

Violators/Badges/Star Flashes

A List Apart Violator

Big Fonts

37Signal Font

Gradients

Stonewall

Reflections

Curve 2 Reflections

Shadows

Shadows

And More…

Web 2.0 Design Style Guide

For More Information

Human Generated Spam

Monday, December 10th, 2007

Spam

I am looking at some spam I received at LinDesk. These are not your average spam - they are real good. I even let one through before I understood they were spam.

  • spartan300 | tcssey@aol.com | dolcemp3.com | IP: 64.12.116.138
    Hhmmm,, this sounds good. but I not yet into upgrading my Fedora7 to 8. i’m not that afraid of changes, but I might incur another error with my linux. I still have lot of work to do, maybe i’ll try this later next week. Thanks though for this blog. :)
    In article Sound Issue in Fedora 8
  • 2cool2sexy | tcssey@aol.com | dolcemp3.com | IP: 64.12.116.138
    Have you checked on its system requirements? You should try checking of their site. http://banshee-project.org/
    I believe there are helpdesk there that can support you.
    In article Banshee - Music Management and Playback for GNOME
  • audio-fanatic | tcssey@aol.com | dolcemp3.com | IP: 64.12.116.138
    another nice review here Lin. You really adore using Linux-based software? I think this mp3 software is the one fit for my notebook.
    In article Audacious Media Player

First of all, do you agree with me? Are these spam?

The reason why I think they are spam are the following…

  • Same URL and Email - but different names.
  • Zero content comments - they add no value to the post.
  • My previous experience has taught me that comments with @aol.com email addresses are often spam.
  • This guy has only commented on MP3 related posts - his URL leads to an MP3 site.

The reason why they may not be spam are just as valid.

  • These comments are written by humans - not bots.
  • The writer of the second comment(about banshee) has obviously read the post.
  • The commenter has at least a passing knowledge of Linux and Linux softwares.

So, have you received any spam like this - comments that you are unsure about? These three comments are still in my moderation queue. I need advice on how to deal with them.

I could let them through - if no one looks closely, they will think these are actual comments. That will give the articles an appearance of popularity. It is a good thing for me. But I have a zero tolerance policy towards spam. If the comment is a spam, I will not allow it on my site. Its a matter of principle.

A Secret Source for Great Free Icons for your Desktop and Web Apps

Wednesday, December 5th, 2007

Desktop and Web application needs icons. Icons make the app more usable than an all-text application. If you are building a desktop application, your framework may provide some stock icons. But if you are making a web application, you will need external icons.

I have seen a lot of pages that lists many icon sets…

But when I want some icons I have a better place to look.

KDE and Gnome Icon themes.

I prefer using these icons because of the following reasons…

Multiple Size Icons

Most themes provide the same icon in various sizes. The available sizes are 128×128, 64×64, 48×48, 32×32, 24×24, 22×22, 16×16 and sometimes even a scalable SVG set. Not all themes have all the sizes - but most have. I don’t have to tell you how useful this is.

Multiple Size Icons

Lots of Choice

KDE Look Icons page have 86 pages with 15 icon themes per page. That makes a total of 1290 icon sets. And I am not counting the Gnome Look Icons.

That’s a lot of choice. Granted, not all will be good. Not all will have the icon I am searching for. Not all have the size I way want. There will be some duplication. But its still a lot.

Free - in both sense of the word

Most of these icons uses GPL and LGPL licenses. So you can use if for your application without paying for them. You can modify them. You can share it with others. You can… you get the idea. The point is there are no restrictions.

Even if you are building a proprietary application, I think you can use the icons because you are not compiling it into the application. But I am not sure about that - if anyone reading this knows, please leave a comment.

I have to warn you that not all icons sets use these licenses - so make sure you look at the license of an icon set before using it.

Great Icons

Most of the icons are created by professional designers. Sure there are some duds among the collection - but the majority of them are good.

Some Recommended Icon Sets

Crystal Project

Crystal Project

Nuvola

Nuvola

Crystal Diamond

Crystal Diamond

black + white icons

Black White

Crystal Clear

Crystal Clear

And there are hundreds more for you to find out…

AGPL License

Tuesday, November 20th, 2007

License

AGPL or Affero General Public License Version is a new License released by FSF. This is aimed at Web Applications.

The GNU GPL allows people to modify the software they receive, and share those modified versions with others, as long as they make source available to the recipients when they do so. However, a user can modify the software and run the modified version on a network server without releasing it. Since use of the server does not imply that people can download a copy of the program, this means the modifications may never be released. Many programmers choose to use the GNU GPL to cultivate community development; if many of the modifications developed by the programs users are never released, this can be discouraging for them. The GNU AGPL addresses their concerns. The FSF recommends that people consider using the GNU AGPL for any software which will commonly be run over a network. (Emphasis mine)

Say I used AGPL for Nexty. You decide that it is a nice program - so you download it and use it. Then you make some changes to the code. So far so good.

Then you decide that you can put the modified version on your web server. The visitors can use the modified version of nexty - that is, you are not ‘distributing’ the software. If I used GPL, you could have gotten away with it - but if I use AGPL, you have to publish the code you modified as well.

The end result is that the end user is in a lot of confusion about what they should do with respect to the license. If they are not lawyers, they will not be able to understand what the license says. I have opted to use the BSD license due to factors like this - BSD license basically gives you the right to do anything with it - except claim that you wrote it.

Related Links

Hacker: The ‘Correct Meaning’ - And Why its Wrong

Thursday, November 8th, 2007

Ever been to a LUG meeting where a member uses the term ‘Hacker’ when they should have said ‘Cracker’? The others crucify the poor soul within seconds. In programming circles, a hacker is a rather good programmer. “A person who enjoys exploring the details of programmable systems and how to stretch their capabilities, as opposed to most users, who prefer to learn only the minimum necessary.” (Jargon File). In the popular media, the term hacker refers to a person who breaks security on a system. Programmers call them Crackers.

Before 1985, there was no word for ‘Crackers’ - both good an bad hackers were know as, well, hackers. Soon the good hackers got tired of being lumped together with the bad guys. So they created a term for the baddies - the Crackers. And they got very upset when the media did not use the new word.

What I don’t get is why people cannot understand that the word ‘hacker’ has two(or more) different but equally valid meanings. I believe that the term ‘hacker’ can be used in the place of ‘cracker’ - as long as the understood that the word has two meanings.

The term hacker comes from the word hack - and the most valid meaning for the term is to circumvent the security of a system. As in “I can hack into your computer within minutes.” So people who ‘hack’ are called hackers.

Conclusion

In short, don’t get upset when others use the term hackers in the ‘wrong way’. If you want you can continue using the term cracker - that will solve the issue of ambiguity of the term ‘hacker’. Just don’t try to enforce your meaning upon others.

I am sure many of you would disagree, but you are all Schizophrenics - why should I care what you have to say? ;-)

Related Links

Tk Verses Gtk(And Python verses Tcl)

Wednesday, October 31st, 2007

Back when I was using Windows, I searched for some language that would let me create GUI application. I knew C++ - but creating a GUI using C++ was very, very hard. After some searching I found Tcl/Tk - it was perfect. I liked Tk so much that I used it to create GUI in perl programs. And in Ruby. And in Python. I even wrote tutorials for Tcl/Tk and Perl/Tk. Then I discovered Linux. initially I was glad that I did not choose VB - that would mean that I have to throw away all my custom programs. But since I used open languages like Tcl, Perl, Ruby etc, they will run on Linux as well.

But when I actually ran the programs in Linux, I got the shock of a lifetime. The applications I created looked bad - really bad…

TK Screenshot - Ugly

I still use many Tk programs - but because of the looks issue, I decided to stop using Tk for my new programs. So I decided to try GTK. I even created a small application using PyGTK(my first) to view the harddisk space usage in Linux - Frees.

Frees Screenshot

It was a very simple application - all I had to do is run the ‘df’ command, parse its output, and display a small table using that data. I was expecting around 100, 150 lines of code at the most. But after I created the app, I have 500+ lines of code.

At first, I thought that it was a mistake on my part - I thought that I was not using the best method. But then I came across an article in Reddit - gnocl or PyGtk?.

PyGtk is still the most recommended binding for Gtk. A lot of programs in Linux is written using PyGtk. So naturally there are a few advantages for using it…

  • It will be the more ‘road-tested’ binding.
  • Many system will have it installed by default.
  • Bigger community - so…
    • more support
    • more examples
    • more tutorials
    • etc.

One the other hand, I have to write more code.

Conclusion

If it is a private script - only useful for myself, then I will use Tcl/Tk or Gnometcl. If the script could be distributed, like Frees, then I will use Python GTK.

What about the other options…

  • wxWidgets
  • PyQT
  • Ruby/GTK
  • Perl/GTK

Any recommendations for me on which library to use? Please leave it in the comments.

Case Sensitivity in URLs

Wednesday, October 17th, 2007

I am an open source guy - so naturally I prefer the flagship OSS software Apache to the proprietary Microsoft IIS. But there is one area where IIS does a better job than Apache - the case sensitivity of URLs.

Are URLs Case Sensitive?

They should not be - but they sometimes are. Domain names are not case sensitive - for example http://www.apache.org/ and http://WWW.Apache.Org/ goes to the same location. But in the LAMP platform, the path is case sensitive…

But in the case of Microsoft IIS server, this is not true - try…

Reason: Linux Filesystem is Case Sensitive

The root cause of this is that the filesystem in the Linux OS is case sensitive - while FAT32/NTFS filesystems in Windows are not.

Dynamic URLs

Now Dynamic/friendly/clean URLs are appearing in many CMS tools. A good example for this is the ‘permalink structure’ in WordPress. These dynamic URLs could be case sensitive or not - it depends on the software. In WordPress they are case insensitive. Del.icio.us is also case insensitive. TinyURL is another service that uses case insensitive URLs. But it is possible for the tool to make the URLs case sensitive.

From the SEO perspective

If the search bot visits two urls say, example.com/MyWebPage/Index and example.com/mywebpage/index , will the bot index both page contents? If they are same, will one get the duplicate content penalty? Or will google just index the URL with lower case and ignore the other - remember, in Linux/Apache, both pages may have different content.

Conclusion

The RFC for URL says they must be case insensitive.

For resiliency, programs interpreting URLs should treat upper case letters as equivalent to lower case in scheme names (e.g., allow “HTTP” as well as “http”).

Apache must not use the filesystem as an excuse - I really hope they provide case insensitive URLs

Between Web Application and Desktop Applications

Sunday, August 26th, 2007

There is a distinct line between web application and desktop applications. But over the last few years, this line is becoming thinner. Due to faster internet connection and technologies like ajax, web applications are becoming much faster and more responsive. And, if you have a local web server installed, a ‘web’ application can become desktop application.

I have a web server(Apache), and a database server(MySQL) running at all times on my local system. Since LAMP is my preferred platform of development, if I need a new software, I will create it on LAMP. A good example of this is Nexty. Over time, I have discovered that web application can be used as desktop applications. All you need is a web server, a database server and a browser.

There must be some changes to the current model to make this system work. These are a few I could think of…

  • Web Server must run as the current user. That way, you can read/write to any file using PHP(or equivalent).
  • The application must not be available over the network. Or, the web server must only accept connections from 127.0.0.1
  • An installer for these kind of applications must be made.

Advantages

  • Familiarity: People are already used to web applications - so it will be easy to switch.
  • User Customizable: Users can change the appearance of the application(user stylesheets), and to a limited extent, the functionality(GreaseMonkey).
  • Open Source: If the code is in PHP or Ruby on Rails, or anything similar, the code will be available for study or even modification.
  • Cross Platform: The same program can be installed in Windows or Linux or whatever - as long as it has a Web server.

Disadvantages

  • Imaginary: As of yet no such system exists.
  • High Level: The system will not be able to do low level system operations.
  • Limited: There will be some very serious limitation to the application unless the current systems are modified. For example, the browser cannot read or write to the filesystem.

I have been using some web applications as desktop applications for a while now - these include WordPress(for keeping notes), activeCollab(project management), Nexty(to do list), and Tiker(time tracker).

Subscribe to Feed