Know more and connect with me on [Linkedin Profile].

Wednesday, January 31, 2007

Embedded Tool Guardians

From The Embedded Muse 138 -> Start

Tool Guardians
--------------
One difference between hardware and firmware development is the shelf life of the tools. Even when pushing the bleeding edge of technology, a five year old scope or logic analyzer is usually more than adequate. Some dedicated folks still crank out 8 bit systems using old Tektronix 545s - 30 year old vacuum tube beasts that invite a hernia each time they're moved.

Our software tools have lifetimes of microseconds. Microsoft's regular Patch Tuesday creates an organically-evolving OS and Office suite. Much of the current embedded hardware technology is all designed to speed firmware upgrades - flash memory lets us reprogram devices on the fly.



Of all the tools we use, though, compilers are the most problematic. Compilers create the code that is our product. A line of C is nothing more than a series of commands asking (pleading?) for a stream of machine code that implements an algorithm. Most other tools, like debuggers, fly in an orbit around the designer, helping him design and implement the product, but never becoming a part of the unit a customer sees.

A compiler problem becomes a product problem. A compiler change changes the product. When your compiler vendor releases a version that generates tighter code, simply recompiling changes the product. Though the tighter code is nice, it raises the specter of new, lurking bugs.

Before the vendors start sending unibomber email, I'm not implying that compilers are bug-ridden monstrosities. In my travels I see system after system that works until something changes. It may be a compiler upgrade, or perhaps a different set of parts used in manufacturing. Bugs lurk everywhere, and a compiler change often uncovers problems previously hiding in your code. Sometimes the risks of upgrading outweighs the benefits.

The problem is more severe for older products. If your five year old widget works great, and only needs a very occasional software tweak, do you instantly rebuild the code on each new compiler release? This implies a product change, with perhaps little benefit. Or, do you wait till a crisis requiring a code change hits, and then both fix the bug and use the new version. perhaps changing a ten minute fix to a week of hell?

The right thing to do - technically speaking - would probably be to rebuild all the old stuff. Who can afford that? The testing alone consumes vast amounts of valuable development time.

The risk is high, the benefits are vague. We need compiler guardians who keeps old versions around, with associated antique linkers and other support tools.

Perhaps "compiler guardian" is too narrow a focus. Most tools require some level of attention and management. Someone, or some group of people, have to keep all electronic tools metaphorically sharp. One friend told me this week that the old DOS editor he's been using for 20 years still runs under Windows XP, but for some reason sucks so much processor power his laptop batteries die very quickly. It's ironic that some change in Windows means this editor, which ran fine on an 8088 at 4.77 MHz, sucks every compute cycle a 2 GHz Pentium can provide.

Take for instance a PCB layout program, a staple of every engineering department. I was bitten by an upgrade to one of these products, and discovered to my horror that all of the libraries were now obsolete. What a joy it is to maintain both old and new versions of the software.

One friend addresses these sorts of problems by never upgrading. When the path becomes too rocky he idles, using the old but presumably reliable software for years after the vendor declares it obsolete. I worry that getting stuck in such a tool time warp will backfire. Support becomes non-existent.

However, "good enough" may be all that's required, as the goal of engineering is to get a product out on time, on budget, that meets specifications. Using the latest and greatest goodies does, I feel, keep us more productive. Does the continual upgrade cost balance the productivity increases? I wish I knew.


From The Embedded Muse 138 -> End

See all back issues of Embedded Muse at: http://ganssle.com/tem-back.htm
Subscribe to receive new issues from: http://ganssle.com/gnewsletter.htm




My Notes:
  1. You have to manage project configuration, as it is easy to lose the complier of an old embedded project. CMMi could help in this area.
  2. Upgrade only when necessary, upgrade costs a lot of time and effort and it is risky, so it should be a justified investment.


Tuesday, January 30, 2007

Management Organization in a Big Team

We have 30 engineers doing different processes. Unit Manager and Team leaders was cooperating on projects, as work increased and team members increased, we felt we should have dedicated project managers. Project Managers should apply professional project management discipline.

We organized the unit as following:

Team 1 (e.g. Hardware Team)
Team 2 (e.g. Software Team)
Team 3 (e.g. Product Development Services for issues like sourcing, manuals)
Team 4 (e.g. Testing Team for quality of products)
Team 5 (Project Management Team)
Team 6 (Quality Team for quality of the processes)


Here I am explaining each manager responsibilities.

Project Manager Responsibilities: (focus on projects and tasks on the short term)
- Project initiation
- Project planning
- Project execution and tracking
- Project closure (to collect lessons learnt and evaluate everything)

Team Manager Responsibilities: (focus on improving team quality/productivity on the medium/long term)
- Processes: e.g. develop/evaluate work procedures
- Tools and Technologies: Research to adapt tools and technologies to improve quality and productivity; e.g. version control or email system.
- Team Development: e.g. Satisfaction, morale, hiring, evaluation, and training

With the Team Manager focus on team development and maintenance to gain quality and productivity, and with project manager focus on projects and tasks on the long term, everyone has his focus that will lead to organization success. In case of conflict that can not be resolved within the team, an escalation procedure is followed.


As project management practices became mature nowadays, every efforts in the organization should be managed as a project.

Monday, January 29, 2007

Open Source ARM Compiler



1) WinARM is a collection of GNU and other tools to develop software for the ARM-family of controllers/processors on MS-Windows-hosts. Unlike other collections WinARM does not depend on a cygwin or mingw-environment. All needed tools are in the distribution-package. WinARM has been tested with Philips LPC2106, Philips LPC2129, Philips LPC2138, Philips LPC2148 and Atmel AT91SAM7S64, AT91SAM7S256, AT91RM9200 ARM7TDMI(-S) controllers (the list is based on own tests and user feedback). The gnu-toolchain and the supplied tools should work with all microcontrollers based on ARM(-TDMI/Thumb etc.) architecture. WinARM has been made in the spirit of WinAVR which is a collection for Atmel AVR 8bit-Controllers.

http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html

2) ARM Cross Development with Eclipse
http://www.sparkfun.com/tutorial/ARM/ARM_Cross_Development_with_Eclipse.pdf


3) Look also here:
http://winarm.scienceprog.com/


Sunday, January 28, 2007

Lessons Learned from a Failed Business



  • It is important but not sufficient to create good products, you must be able to market them.
  • The experience needed to market/sell product is not less than the experience required to develop it.
  • Experience has no substitute to make sure of someone. A good seller in some business area is not necessarily good in other areas.
  • Local market is essential for any startup business, just master the local market then look at the region and internationally.
  • To share someone in business, you must study carefully the added value he can add to the corporation, it is good to have investors, but there exist many other ways for fund without sharing.
  • A business plan is essential to start and continue your business.
  • No diversification is risky to any business, no one can be sure of what the market need (unless you already a successfully merchant)
  • Local market success is essential to any region or international success.
  • Before being a successful software manufacturer, you must be a successful software merchant.
  • Sell solutions/final-product that is assembled from third parties, after being successful, you can try to develop/build your own sub-product and overtime increase your added value.
  • Trust yourself, apply your vision strictly, you are the responsible one. Sure discuss issues before taking a decisions.
Of course this lessons are related to my experience environment and context, so apply your judgment before taking it.

Saturday, January 27, 2007

Four Fantastic Phrases at Work

Let's say you agree with me, that being happy at work is really important. That coming to work day after day, year after year, simply for the paycheck is just not enough. Hey, we spend most of our waking hours at work, so we might as well enjoy it, right?

Assuming that: What can you do to be happy at work? Specifically, what can you do right here and right now? Something simple, easy and fun, that will make a positive difference for you and your co-workers.

If that's where you're at, there are Four Fantastic Phrases you should know. Four simple things to say that make work a lot more fun. Four phrases whose absence is guaranteed to make work absolutely miserable.

Here they are:
1: "Thank you"
It's so simple: People are constantly helping each other out at work and doing stuff for co-workers, and a simple "thank you" can really make a difference.

Take it a step further and praise people while you're at it. Remember that you can praise people both for what they do and for who they are. As in "Thanks for getting that report to me a day early" or "I really like working with you because you're so dependable" respectively. Both are good!

Praise and thank-you's take no time and cost no money, but really brighten people's day.

2: "I'm sorry"

Let's face it, we all screw up once in a while. When you do, don't hesitate to apologize. In fact, the sooner you apologize, the easier it is.

Some people think apologizing is a sign of weakness, but in reality it shows that you take responsibility for your actions and it makes it easier to move on after making an error. It also shows that you learn from your mistakes, provided, of course, that you don't keep making the same mistake over and over.

Most of the time, a mistake is not your fault alone, but you can always take responsibility for the part that is your fault and apologize for that. When it's both your fault and somebody else's fault, apologize first , instead of waiting for the other guy to do it. He may be waiting for you too, you know :o)

3: "Help"

Ask for help when you need it. Many people actually like being asked, since it makes them feel appreciated and needed, so there's a chance to make somebody happy at work right there.

Also: Offer your help, even when not asked. Some people feel too busy to offer their help, but when we all help each other, we each become more efficient and get more work done. When everybody's thinking "I really don't have time to help others" everybody gets less work done, and the statement becomes self-fulfilling.

4: "Yes, and…"

A co-worker comes to you with a new idea. "Let's try a new approach on the Hansen project. Why don't we [insert new idea here]?" Here are some potential responses:

* "No, that'll never work"
* "Yes that sounds interesting, but we don't have time for that"
* "Yes that sounds interesting, and I'd like to hear more"

No's and yes-but's discourage people. It's a sign that you're not really open to new ideas. Yes-and means you're willing to listen and consider new ideas in depth. People love being listened to.

NB: Yes-and is not about saying yes to everything. If you do that, you'll never survive :o) Yes-and is about being open to other people's suggestion instead of immediately rejecting them.

Four Fantastic Phrases

So.

Imagine a workplace where people:

  • Constantly thank and praise each other
  • Apologize freely when they make mistakes
  • Easily offer and ask for help
  • Are always open to each other's ideas

That would have to be a nice place to work. On the other hand: Imagine a company where people rarely or never use those four phrases. Scary thought, huh?

Here's the deal: Each of the four phrases is contagious. The best way to spread the virus is to use them yourself. The more you thank others, the easier it will be for them to thank you. The more you admit your errors, the more your co-workers can do it too. Etc…

And start now. Find a co-worker and praise her. Have you made a mistake recently? Go apologize right now. Are you stuck on some task? Go ask for help. Does one of your colleagues look stressed? Go offer him your help.

Anybody can use these phrases, employees, executives, middle managers, techies, receptionists, janitors, office workers, everyone. I will say this though: Coming from managers, they have an even stronger impact. But that's no excuse for the rest of us not to use them, until management does :o) Remember: Something happens when you do something. Not before.

Will it make a big difference? Not immediately. But it gets the ball rolling and makes you and others a little happier at work every day.

This post is from a friend at my company, after a little research it seems belongs to:
http://positivesharing.com/2006/05/four-fantastic-phrases-at-work/

Friday, January 26, 2007

Authenticating Users with Windows Active Directory from Java

Authenticating Users with Windows Active Directory from Java

Here is a sample code that works with me:



/////////////////////////////////////////////////////////////////////

import java.util.*;
import javax.naming.*;
import javax.naming.directory.*;

public class Main {

public static void main(String[] args) {

try {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL,
"LDAP://my.ldap.server:389"); //replace with your server URL/IP
//only DIGEST-MD5 works with our Windows Active Directory
env.put(Context.SECURITY_AUTHENTICATION,
"DIGEST-MD5"); //No other SALS worked with me
env.put(Context.SECURITY_PRINCIPAL,
"user1"); // specify the username ONLY to let Microsoft Happy
env.put(Context.SECURITY_CREDENTIALS, "secret1"); //the password

DirContext ctx = new InitialDirContext(env);

ctx.close();

} catch(NamingException ne) {
System.out.println("Error authenticating user:");
System.out.println(ne.getMessage());
return;
}

//if no exception, the user is already authenticated.
System.out.println("OK, successfully authenticating user");
}

////////////////////////////////////////////////////////////////////

I stripped comments to make the blog shorter.

Resources Helped Me:

Notes:
  1. The RFC2829 - http://www.ietf.org/rfc/rfc2829.txt - at section "6. Password-based authentication" states that supporting authentication with a password using the DIGEST-MD5 SASL mechanism is mandatory, so I am confident Microsoft will not drop its support.
  2. This is tested on JDK 1.5, I am sure it works on JRE1.5 and even may work with 1.4.


Thursday, January 25, 2007

Prepare to be a Champion: Dream . Plan . Execute . Achieve!



Prepare to be a Champion: Dream . Plan . Execute . Achieve! ®
Dream….BIG! The many GREAT people that we all remember were initially average people who simply had a dream!
Plan…..individual and team short/long term goals for your own personal and team success.
Execute….. the plan with a commitment to excellence.
"Every DAY is an opportunity to WIN!" - Martinov
Achieve….in many more ways than you ever expected!

During the process of preparing to be a champion, we must develop the necessary skills to become the best at what we hope to accomplish. The term "prepare" signifies the importance of how we all are constantly preparing for something in life . . . preparation is ongoing. Whether we take action or not, we are making a statement of how our future will unfold.
"Prepare to be the best in everything you do!"
Becoming a Champion is obviously the mantle for success. A person's expectations can pave the road to individual success or failure. Because, if you think you are beaten…then you are. You've got to think high to rise before you can ever win a prize. For out in the world, you will find success begins with a person's will, it's all in a state of mind. And, sooner or later, the person who wins is the person who thinks he can!!
Develop your own personal 3 Ps:
"The Power to Pursue your Passion"
Dream BIG, make a plan of both short/long-term goals for your own personal success, execute the plan with a commitment to excellence and you will achieve in many more ways than you ever expected!
...
Your personal success begins by expecting great things of yourself as a person, a teammate, and as a leader of others.
"Leadership is . . . . . inspiring others to excel through personal courage"


Friday, January 19, 2007

Kids and Computers, Not Just Games




I have a relative whose age is 12 years, he is very interested in computers, but he knows nothing more than playing games. He plays a lot with Windows XP, reinstalls it, explores all Windows options, and so on. He is excited and capable to do more.

I got the idea of researching Web to find programming languages for kids, but I found that it will be hard for him. I got another idea of letting him learn HTML, I researched Web for open source tools and found an excellent HTML editor called Nvu, I will show him how to create rich web pages and insert his pictures into it.

The point is what beyond this, he should learn HTML tags and spend some time using the tool full features. The tool has many concepts and keywords that will encourage him to do more research to understand them.

I hope this will be the start, next I will research to find an easy tool to create multimedia applications like the Macromedia Dreamweaver tool, sure should be open source tool.

Thursday, January 18, 2007

Requirements Document Template for Small Projects

Requirements document is an important document in system - hardware/software - development. There exist a well known methodology called Volere, they have a very good template, but it too big for our small project, I developed a small template that is just sufficient to us.







In all cases you have to read basic info about Volere from http://www.systemsguild.com/GuildSite/Robs/Template.html

The template is just a structured way to remind us to the basic sections of requirements, of course in any project some of the titles will be not applicable.

The document will be filled with Product Managers, Hardware Team and Software Team collaboratively. Look at CMMI 1.2 Requirements Management key process area.


Project Requirements Specifications


Revision History:

Revision

When

Who

What, Where, Why

1

ahm507

18-1-2007

Created; This template is based on Volere, look at http://systemsguild.com/GuildSite/Robs/Template.html



PROJECT DRIVERS


1. The Purpose of the Product

2. Client, Customer, Stakeholders

ID

Name/Title

Company

Phone

email

Notes








4. Users of the Product



PROJECT CONSTRAINTS


4. Mandated Constraints

5. Naming Conventions and Definitions

6. Relevant Facts and Assumptions


FUNCTIONAL REQUIREMENTS


7. The Scope of the Work

8. The Scope of the Product

9. Functional and Data Requirements


9.1 Group 1:

ID

Description

Originator

Priority

Notes

9.1.1





9.1.2






9.2 Groups 2:


ID

Description

Originator

Priority

Notes

9.2.1





9.2.2






9.3 Groups 3:

ID

Description

Originator

Priority

Notes

9.3.1





9.3.2






NON-FUNCTIONAL REQUIREMENTS


10. Look and Feel

11. Usability and Humanity

12. Performance

13. Operational

14. Maintainability and Support

15. Security

16. Cultural and Political

17. Legal

PROJECT ISSUES

18. Open Issues

19. Off-the-shelf Solutions

20. New Problems:

21. Tasks

22. Migration to the New Product

23. Risks

24. Costs

25. User Documentation

26. Waiting Room

27. Ideas for Solutions



Wednesday, January 17, 2007

Source Code Changes Exchange Using Patches


The current process of coding - in my company - is to make peer review before committing changes to subversion - our version control system - I want to enforce code reviews, usually developers have permissions to update svn - subversion - directly, but we request them to not commit until the peer review. I think we need a better tool support to make exchanging changes, reviewing and testing it easier as we have many developers running in parallel on the same code base.

After some research I found the open source community already use the concept of patchs. developer A could make a bug fix or a new feature, generate a patch and send it to code committer - the person who have authority to commit changes to version control -, this person apply the patch to his current code base, try it, discuss it and finally commit the patch to the code base if OK.

I found the patch technique is useful to use it, I applied it in a pilot project and after being familiar with it, we applied it in all the projects, here I will specify the tools needed to do so in Windows XP, but the tools is open source and available in many other platforms, so the same tools and commands is usable across platforms.

1) You need of Cygwin if your using Windows.
2) You need subversion.
3) Generate Patch:
- Change directory to where your local working directory exist:
- $ svn diff > patch1.patch
- If you added or deleted files, you have to execute these commands before
- $ svn add file1.c
- $ svn delete file1.c

The add and delete will mark the files, so the svn diff command can generate the correct patch file.

4) Apply Patch:
- if you are using Linux, you have to install patch command if not found.
- if you are using Windows, use cygwin to install it.
- $ patch -p0 <>Note the -p parameter enables you to skip parts of the file path, you can read about through "man patch" manual page.

-
if you are using Windows, you may have a problem with CR LF - carriage return line feed -, the patch command may replace all CR LF with LF only, if so you have to convert LF back to CR LF, so use the following command on the shell prompt
$ unix2dos file1.c file2.c file3.c


How could you know if the CR LF is replaced? You can use Programmer's Notepad to know about it


Tuesday, January 16, 2007

I want to backup my blog!


I want to make backup to my blog (), I made some research and found some alternatives.

1) blogspot have a way to backup all your blogs. Change the template to show ALL your posts in one page, then save it and just return to your old template. I did not like this way, I think the reader can guess why!



2) From LifeHacker web site I got the idea of offline browsing my blog, so I searched for open source offline browser and found WinHTTrack.

After running WinHTTrack, it downloaded more than 68 Mega of content, I know my blog size is far smaller, it is just 30 posts of around 2 Mega, after some investigation, I found my blog entries are accessible through many ways; as example individually, through my navigation bar, through "Older Posts" link, and through the "Blog Archive" section

3) When I scanned my "Blog Archive", I found that I can simply view all year or all month blog entries in one page, so simply I viewed 2005, 2006, and 2007 blog entries and just saved it to my disk as a complete page using FireFox. I really like simple tricks that do the task, my backup is simply done.



4) Another nice alternative is through reading my atom, so I used Thunderbird to read my atom (yes, Thunderbird has excellent RSS and Atom reader). The atom link is found at the end of blog home page, find "Subscribe to: Posts (Atom)"

5) In blogger.com, there is an option to receive email with each post, this will enable you to have a copy of your post to your email.

Monday, January 15, 2007

Public-Key Cryptography with Open Source Software


Public key cryptography, also known as asymmetric cryptography, is a form of cryptography in which a user has a pair of cryptographic keys - a public key and a private key. The private key is kept secret, while the public key may be widely distributed. The keys are related mathematically, but the private key cannot be practically derived from the public key. A message encrypted with the public key can only be decrypted with the corresponding private key.

Conversely, Secret key cryptography, also known as symmetric cryptography uses a single secret key for both encryption and decryption.

Digital Signature:
A digital signature certifies and timestamps a document. If the document is subsequently modified in any way, a verification of the signature will fail. When the sender sign a file using his private key, the receiver can verify the signature using the sender's public key.

Look at this image:

The full wikipedia article is at:
http://en.wikipedia.org/wiki/Digital_Signature

Encrypting Documents:
A public and private key each have a specific role when encrypting and decrypting documents. Public key means the key will be known by all involved parties, private key will be your secret key, no one ever know it, if it is forged, you will have to revoke (generate obsolete certificate) the key and create new one.

Assume Ahmed and Samy each has his own pair, public and private key. When Ahmed want to send Samy a document, Ahmed will encrypt the file with Samy public key, Samy only can decrypt the file using his own private key. The encryption algorithm ensue the Samy's private key is the only one can decrypt the file. This means the sender always encrypt using the receiver public key. The receiver only can decrypt using his own secret key.

By utilizing this Digital Signature and Encryption/Decryption, the sender can encrypt file with receiver public key, and sign it with his private key and send to the receiver. The receiver can verify the signature using sender public key, and then decrypt using his own private key. This ensure secure communications.

This scheme ensure secure communications but of course requires the exchange of public keys, there exist public key repository, such as https://keyserver.pgp.com/ . You can also send it by email to your friends.

Look at wikipedia article at http://en.wikipedia.org/wiki/Public-key_cryptography The article has graphs that simplifies the document encryption/decryption procedure.

Software
Encryption Tool on Windows:
Download Windows version from:
http://www.gnupg.org/download/

You can use command line just the same as in Linux section with the same format, there exist also a GUI client tool that could make it easier for you, download Windows Privacy Tray from:
http://winpt.sourceforge.net/en/

These screen shots could show how it could be helpful.

Key manager allow you to manage your key-pairs.









File Manager will help you encrypt, decrypt files and many other functions, you can also drag and drop files.
















Software Encryption Tool on Linux:

Download Linux version from
http://www.gnupg.org/download/

List Current Keys: (dollar sign mark the shell you are using)
$ gpg --list-keys

Generate New Key-pair:
$ gpg --gen-key

Encrypting Documents:
$ gpg --output docs.zip.gpg --encrypt --recipient blake@cyb.org docs.zip

Decrypting Documents:
$ gpg --output docs.zip --decrypt docs.zip.gpg

Generate Signature: (in a separate file and in clear text)
$ gpg --detach-sign --armor file1

Verify Signature: (the public key should exist in your key ring, if not, you to import it first)
$ gpg --verify file1


Look at the "The GNU Privacy Handbook" at http://www.gnupg.org/gph/en/manual.html

Now I can backup my sensitive files without worrying that the server administrators could access my sensitive files, I can even backup it on public places without any worry, thanks to Open Source and GnuPG.

You can also send and receive encrypted and/or signed emails using Thunderbird, you have to download enigmail extension from
http://enigmail.mozdev.org/

Sunday, January 14, 2007

Agile CMMI: No Oxymoron

...
CMMI (1.2) focuses on learning at the organizational level (and provides both project-based and organizationally based mechanisms for such learning). But some organizations implementing CMMI struggle to create the necessary environment and infrastructure for individual and team empowerment. TSP provides a "how to" solution consisting of team roles and other guidance that directly implement most CMMI practices while addressing the needs of both teams and individuals. A concise description of TSP with examples can be found in Watts Humphreys' Winning with Software: An Executive Strategy (Addison-Wesley, 2002). The TSP website also provides information about TSP technology, training and adoption reports, including a mapping to CMMI.

...

Agility vs. the Team Software Process
Agile software development is anything but antithetical to TSP.

Agile Value Statement How TSP Relates
Individuals and interactions over processes and tools TSP holds that the individual is key to product quality and effective member interactions are necessary to the team's success.
  • Project launches strive to create gelled teams.
  • Weekly meetings and communication are essential to sustain them.
  • Teams define their own processes in the launch.

Working software over comprehensive documentation

TSP teams can choose evolutionary or iterative lifecycle models to deliver early functionality—the focus is on high quality from the start. TSP does not require heavy documentation.

  • Documentation should merely be sufficient to facilitate effective reviews and information sharing.

Customer collaboration over contract negotiation

Learning what the customer wants is a key focus of the launch. Sustaining customer contact is one reason for having a customer interface manager on the team.

  • Focus on negotiation of a contract is more a factor of the organization than of whether TSP is used.

Responding to change over following a plan

TSP teams expect and plan for change by:

  • Adjusting the team's process through process improvement proposals and weekly meetings.
  • Periodically relaunching and replanning whenever the plan is no longer a useful guide.
  • Adding new tasks as they are discovered; removing tasks that are no longer needed.
  • Dynamically rebalancing the team workload as required to finish faster.
  • Actively identifying and managing risks.

...

Read the full article at:
http://www.ddj.com/dept/architect/184415287

Friday, January 12, 2007

Wednesday, January 10, 2007

Sending email from the command line

In developing automated scripts that scheduled to run periodically, I need to send email from inside the script to know about the script execution status and if there is any error. Here what I did to install, configure and test an email tool.


Prerequisite:
- This is tested on Windows XP, sure it works on any Linux distribution.
- You should have cygwin, install from: http://www.cygwin.com/
- It is important to be familiar with command line environment.

Run the Cygwin tool, and select "email" tool, see the picture.

After installation is complete, open the console and run:
$/usr/bin/email-config

You will get a series of questions and will have to type answers, like the SMTP server used to send email, and so on...

After finish, you can easily edit your configuration, use:
$ nano /etc/email/email.conf

You can edit your email signature file by:
$ nano /etc/email/email.sig

Now you can send email very easily:
write your email text to the file mail.txt, as example:
$echo "this is a test email" >> mail.txt
Now send the emai by:
$email -s "my email subject" myemail@mycompany.com <>

for email tool details, type:
$man email


Tuesday, January 09, 2007

Nice Linux Console Editor, nano!




When I try to be familiar to command line, I always need a simple and good editor, of course vi is great but I always find myself unable to save the opened file or save my changes, I always forget the shortcut keys, I find a very good editor called nano. nano has all basic operations of opening, editing and saving your changes, what is really cool is the status bar has all necessary shortcuts, have a look at the attached image.

I am using nano on Ubuntu (it is installed by default), also I use it on Cygwin, it is not installed by default there so I installed it manually. So now I enjoy editing files from the console, no more suffering :)

To make nano my default editor instead of vi, edit your .bash_profile

$nano ~/.bash_profile

Scroll to the end of file using Page-Down and add the line:
export EDITOR=nano

Congratulation, nano will make your life much easier, have a look at nano website: http://www.nano-editor.org/




Monday, January 08, 2007

Open Source Software For Windows




I have found a large list of open source software on Windows, look at:
Before trying to master Linux, try to taste the open source products even on your current Windows operating system.

For server administrators, start using cygwin to experience the power of automating tedious tasks. There exist also tons of open source Java applications at http://java-source.net/

Sunday, January 07, 2007

cygwin text and graphical consoles



cygwin can run console based programs and GUI programs like gvim, xman, and xemacs; But you have to run startx to start graphical system at first. Typically xemacs can run form the text console but gvim and xman need to run from the graphical console.

In order to develop good automated shell scripts you have to learn bash, greb, and sed. Tutorials and references are available over the Internet. I am just studying :)

Saturday, January 06, 2007

Building Voice Infrastructure in Developing Regions



The "VoIP-4D Primer" is a free guide available in four major languages. The work is an effort to disseminate the use of telephony over the Internet in developing regions.

The 40-page guide targets both technical and non-technical readers. The first part presents the essentials of telephony over the Internet.


For those interested in the more technical details, hands-on guidelines and configuration files are included in the second part. The examples provide essential background to build your own low-cost telephony system.

English Version:
http://www.it46.se/downloads/voip4d/en_voip4d_it46_release_web.pdf
Arabic Version:
http://www.it46.se/downloads/voip4d/ar_voip4d_it46_release_web.pdf

The website URL is: http://www.it46.se/voip4d/voip4d.php?lang=en

The guide uses the popular open source system named Asterisk.

Friday, January 05, 2007

Ignorance is Bliss!



- Ignorance sometimes means we don't have to worry.
- Knowledge that does not help is like ignorance that does not harm.
- Some doctors believe ignorance is bliss and don't give their patients all the facts.
- Ignorance of things that have no effect on our lives frees our mind to learn about things that affects us.

Thursday, January 04, 2007

What is ONE?



ONE is a new effort by Americans to rally Americans – ONE by ONE – to fight the emergency of global AIDS and extreme poverty. ONE is students and ministers, punk rockers and NASCAR moms, Americans of all beliefs and every walk of life, united as ONE to help make poverty history. ONE believes that allocating an additional ONE percent of the U.S. budget toward providing basic needs like health, education, clean water and food would transform the futures and hopes of an entire generation in the world's poorest countries. ONE also calls for debt cancellation, trade reform and anti–corruption measures in a comprehensive package to help Africa and the poorest nations beat AIDS and extreme poverty.



Wednesday, January 03, 2007

cygwin can run GUI applications!



cygwin can run GUI applications!
Cygwin not only run console applications but also can run GUI applications such as gvim, xman, and xemacs; But you have to run startx to start graphical system at first. Typically xemacs can run form the text console but gvim and xman need to run from the graphical console, i.e. after executing startx.



Tuesday, January 02, 2007

What is Open Source Software?



This is actually my answer to one of my friends who wonder, what is open source software.

An excellent Arabic white paper about open source software:
http://www.freesoft.jo/people/kefah/freesoftware_whitepaper_arabic.pdf

Wikipedia, have have a good article about open source software, look at:
http://en.wikipedia.org/wiki/Open_source_software

List of open source software for Windows:
http://ahm507.blogspot.com/2007/01/open-source-software-for-windows.html

List of open source software packages:
http://en.wikipedia.org/wiki/List_of_open_source_software_packages