Five Websites to Download Open Source Software

February 28th, 2010 by Kevin | 3 Comments | Filed in programming

1) Sourceforge

SourceForge.net is the world’s largest open source software development web site. As of February, 2009, more than 230,000 software projects have been registered to use their services by more than 2 million registered users, making SourceForge.net the largest collection of open source tools and applications on the net.

2) Freshmeat

freshmeat maintains the Web’s largest index of Unix and cross-platform software, themes and related “eye-candy”, and Palm OS software. Thousands of applications, which are preferably released under an open source license, are meticulously cataloged in the freshmeat database, and links to new applications are added daily. Each entry provides a description of the software, links to download it and to obtain more information, and a history of the project’s releases, so readers can keep up-to-date on the latest developments.

3) Google Code

Project Hosting on Google Code provides a free collaborative development environment for open source projects. Each project comes with its own member controls, Subversion/Mercurial repository, issue tracker, wiki pages, and downloads section. Project hosting service is simple, fast, reliable, and scalable, so that you can focus on your own open source development.

4) CodePlex

CodePlex is Microsoft’s open source project hosting web site. You can use CodePlex to create new projects to share with the world, join others who have already started their own projects, or use the applications on this site and provide feedback.

5) OSload

Links and downloads for open source software under the GNU-GPL licence.

 

Related Posts:

Tags:

Seven Qualities that Every Good Developer Possesses

February 27th, 2010 by Kevin | 6 Comments | Filed in development

Today I attended a session by Sudhi Herle, Vice President and Head of Handset R&D at Samsung. The session was to discuss about the future of the mobile industry. The session started with an introduction of how mobile technology has revolutionized business in the world in the last ten years. The phones that we hold today use the most sophisticated and complex technologies ever created. Yet even the common man can use them with relative ease. Companies like Apple, Nokia, Blackberry and Palm keep revolutionizing the mobile industry with innovative ideas. The question what that how was it possible for these companies to keep reinventing themselves with such innovation. The answer lies in the developers who come up with such ideas. A question asked what that why can’t we do what developers at Apple or Palm do. What is it that differentiates those developers from others?

Here are six traits or qualities we find that every good software developer possesses.

1) A detail oriented view

Developers tend to work on the problems at hand. While time to deliver or to fix a bug might be the reason to ignore a thorough understanding of the system, good software developers tend to get involved in the details of everything they do. They are not satisfied until they have an in depth understanding of the system that they are working with.

2) Good fundamentals

Development problems and their solutions can tend to get complex at times. However good developers are good at the fundamentals of solving such problems. This enables them to understand and explain them in a relatively simple manner which ensures better communication among peers and a quicker solution to the problem. A good understanding of algorithms and data structures is also essential to the repertoire of a good software developer.

3) Covering all corner cases

Any software created always generates corner cases which tend to be ignored. A good example is that of binary search which was published in 1946 but the first published binary search without bugs did not appear until 1962. This was be cause some of it’s corner cases were never understood at the time. Such corner cases can be covered only by extensive analysis of the solution and good test cases. Good developers tend to be good at both.

4) Handle lots of information

Herle mentions that good developers can hold a lot more information in their head than an average person.

5) Read books

Good books are a constant source of insight and understanding to good developers. This also holds for reading good blogs and articles by good developers.

6) Read source code

You cannot become a good developer without reading source code, both good and bad. Good developers read source code as often as then can. Because they know that if they want to solve a problem, many a times it is already done and in a much better way.

7) Productivity

Good developers are substantially productive. They enjoy spending their time on more important and newer objectives and leave the trivial stuff to automation. DRY (Don’t Repeat Yourself) is emphasized by good software developers.

 

Related Posts:

Tags:

Three Pitfalls To Avoid When Using Dynamically Allocated Memory

February 21st, 2010 by Kevin | No Comments | Filed in programming

While using programming languages which do not provide garbage collection, it is left to the programmer to be careful with his usage of  dynamically allocated memory. Improper usage of dynamic memory often leads to subtle bugs which are quite difficult and time consuming to track and resolve.

Following are three pitfalls to avoid while using dynamically allocated memory.

1) Memory Leaks

Dynamic memory is memory allocated and deallocated by the programmer as per usage. Memory leaks arise when we have allocated memory dynamically but have failed to free it. Memory leaks can have a significant impact on the application in situations such as:

  • where the program run for an extended time and consumes additional memory over time, such as background tasks on servers, but especially in embedded devices which may be left running for many years
  • where new memory is allocated frequently, such as when rendering the frames of a computer game or animated video
  • where the program is able to request memory—such as shared memory—that is not released, even when the program terminates
  • where the leak occurs within the operating system
  • where the leak is the responsibility of a system device driver
  • where memory is very limited, such as in an embedded system or portable device

An example:

char * myString = malloc(sizeof(char)*STRING_BUFFER_SIZE); //memory allocated but not freed
if(count > 10)
{
   return count;   //causes a memory leak because myString has not been freed
}
free(myString);
return count;

Avoid pitfall by:

  • Using garbage collection
  • Using reference counting for allocation/deallocation
  • Using static analysis tools such as splint

2) Trying to free already freed memory

Memory which has been dynamically allocated needs to be freed to avoid memory leaks. But for every memory allocation there should be a corresponding deallocation. Trying to free memory more than once can cause serious failure of your application.

An example:

char * myString = malloc(sizeof(char)*STRING_BUFFER_SIZE);
free(myString);
free(myString);   //this causes undefined behaviour. Segmentation fault, crash

Avoid pitfall by:

  • Using reference counting for allocation/deallocation
  • Using static analysis tools such as splint

3) Buffer overrun

Buffer overrun is an anomaly where a process stores data in a buffer outside the memory the programmer set aside for it. The extra data overwrites adjacent memory, which may contain other data, including program variables and program flow control data. This may result in erratic program behavior, including memory access errors, incorrect results, program termination (a crash), or a breach of system security.

An example:

char * myString = malloc(sizeof(char)*STRING_BUFFER_SIZE);
strcpy(myString, string); //Buffer overrun if the size of "string" is greater than STRING_BUFFER_SIZE

Avoid pitfall by:

  • Bounds checking. e.g: Using strncpy() instead of strcpy() to restrict length of copied data.
  • Using static analysis tools such as splint

It is quite difficult to detect and resolve these pitfalls during the program execution. Pitfalls like these can be detected early in the programming phase by conducting a thorough review of the source code. Those which are missed can be further detected and resolved using a good static code analysis tool.

 

Related Posts:

Tags: