6/23/2009

Want to get promoted? Read this.

Great tips on How to Get Promoted from lifehack.org. Quote:

1. Do your job well. I know that this is stating the obvious but it is the starting point. For promotion it is a necessary but not a sufficient requirement that you perform your current duties diligently. Many people think that this is all they need to do and that the rewards, recognition and promotion will follow. Corporate life is not ‘fair’ in this sense. Many people do great work and are passed over. You need to excel in your current role and do much more to climb the ladder.

2. Get noticed. One of the best ways to be promoted is if a senior manager in another department wants you. But this can only happen if they are aware of you. So you have to find ways to get in front of other people, particularly senior people, in a way that displays your good qualities and makes you memorable.

3. Volunteer. If someone is needed to present a proposal on behalf of your department, volunteer. If members are needed for a cross-departmental task force, volunteer. If the social committee want someone to help organize the staff barbecue, volunteer. Take on additional responsibilities both inside and outside your department. This shows that you are willing to get involved and it gets you noticed.

4. Discuss your ambitions with your manager. Make sure that your boss and your boss’s boss know that you are keen to be promoted. You can do this in a quiet professional way. Do not threaten or demand. Have a discussion where you ask the question, ‘What do I have to do to get promoted?’ Develop a plan. Senior managers understand ambition and there is nothing wrong with being ambitious so make sure that they understand your goals.

5. Work well with people. Many people who are technically proficient and excellent at task management do not get promoted because they lack people skills. Be aware of how you are perceived. Ask for feedback. It is not a question of popularity; it is more about communication, trust and dependability. Try not to make enemies. Find ways to work effectively with other people and you are more likely to be seen as ‘management material’.

6. Contribute ideas. Make positive, constructive suggestions for how things could be done better. Most managers (though not all) welcome this and it will signal that you are someone who can think about bigger issues. It shows that you welcome rather than fear change.

7. If you cannot move up, move across. Look for ways to broaden your experience. It you cannot move up in your area then consider moving across into a different area of the business at the same level so that you can learn new skills and make new contacts.

8. Have a plan. Set yourself goals for advancement and measure progress against them. If you need to acquire certain skills or experiences then plan to do so. If you are turned down for promotion, ask why. If you cannot meet your plan in your current organization or if you can make no more progress or if you no longer enjoy the work then look elsewhere. There are plenty of opportunities for ambitious people who work hard and are keen to learn.

5/27/2009

How to download a file from the Web using Perl

Simple enough, use LWP!

Back to Index

NAME

get, head, getprint, getstore, mirror - Procedural LWP interface

SYNOPSIS

 perl -MLWP::Simple -e 'getprint "http://www.sn.no"'

use LWP::Simple;
$content = get("http://www.sn.no/")
if (mirror("http://www.sn.no/", "foo") == RC_NOT_MODIFIED) {
...
}

if (is_success(getprint("http://www.sn.no/"))) {
...
}

DESCRIPTION

This interface is intended for those who want a simplified view of the libwww-perl library. It should also be suitable for one-liners. If you need more control or access to the header fields in the requests sent and responses received you should use the full object oriented interface provided by the LWP::UserAgent module.

The following functions are provided (and exported) by this module:

get($url)

The get() function will fetch the document identified by the given URL and return it. It returns undef if it fails. The $url argument can be either a simple string or a reference to a URI object.

You will not be able to examine the response code or response headers (like 'Content-Type') when you are accessing the web using this function. If you need that information you should use the full OO interface (see LWP::UserAgent).

head($url)

Get document headers. Returns the following 5 values if successful: ($content_type, $document_length, $modified_time, $expires, $server)

Returns an empty list if it fails. In scalar context returns TRUE if successful.

getprint($url)
Get and print a document identified by a URL. The document is printed to STDOUT as data is received from the network. If the request fails, then the status code and message are printed on STDERR. The return value is the HTTP response code.
getstore($url, $file)
Gets a document identified by a URL and stores it in the file. The return value is the HTTP response code.
mirror($url, $file)
Get and store a document identified by a URL, using If-modified-since, and checking the Content-Length. Returns the HTTP response code.

This module also exports the HTTP::Status constants and procedures. These can be used when you check the response code from getprint(), getstore() and mirror(). The constants are:

   RC_CONTINUE
RC_SWITCHING_PROTOCOLS
RC_OK
RC_CREATED
RC_ACCEPTED
RC_NON_AUTHORITATIVE_INFORMATION
RC_NO_CONTENT
RC_RESET_CONTENT
RC_PARTIAL_CONTENT
RC_MULTIPLE_CHOICES
RC_MOVED_PERMANENTLY
RC_MOVED_TEMPORARILY
RC_SEE_OTHER
RC_NOT_MODIFIED
RC_USE_PROXY
RC_BAD_REQUEST
RC_UNAUTHORIZED
RC_PAYMENT_REQUIRED
RC_FORBIDDEN
RC_NOT_FOUND
RC_METHOD_NOT_ALLOWED
RC_NOT_ACCEPTABLE
RC_PROXY_AUTHENTICATION_REQUIRED
RC_REQUEST_TIMEOUT
RC_CONFLICT
RC_GONE
RC_LENGTH_REQUIRED
RC_PRECONDITION_FAILED
RC_REQUEST_ENTITY_TOO_LARGE
RC_REQUEST_URI_TOO_LARGE
RC_UNSUPPORTED_MEDIA_TYPE
RC_INTERNAL_SERVER_ERROR
RC_NOT_IMPLEMENTED
RC_BAD_GATEWAY
RC_SERVICE_UNAVAILABLE
RC_GATEWAY_TIMEOUT
RC_HTTP_VERSION_NOT_SUPPORTED

The HTTP::Status classification functions are:

is_success($rc)
True if response code indicated a successful request.
is_error($rc)
True if response code indicated that an error occured.

The module will also export the LWP::UserAgent object as $ua if you ask for it explicitly.

The user agent created by this module will identify itself as "LWP::Simple/#.##" (where "#.##" is the libwww-perl version number) and will initialize its proxy defaults from the environment (by calling $ua->env_proxy).

5/20/2009

How to optimize your perl code!

Great resource on how to Optimize Perl. This helped me speed up my 3 hour long script to be able to run under 10min!!!

Quote below:

Sloppy programming, sloppy performance

I'll be honest: I love Perl and I use it everywhere. I've written Web sites, administration scripts, and games using Perl. I frequently save time by getting Perl to do and check things automatically for me, everything from my lottery numbers to the stock markets, and I even use it to automatically file my e-mail. Because Perl makes it so easy to do all of these things, there's a tendency to forget about optimization. In many cases this isn't the end of the world. So what if it takes an extra few milliseconds to look up your stock reports or parse those log files?

However, those same lazy habits that cost milliseconds in a small application are multiplied when dealing with larger scale development projects. It's the one area where the Perl mantra of TMTOWTDI (There's More Than One Way To Do It) starts to look like a bad plan. If you need speed, there may be only one or two ways to achieve the fastest results, whereas there are many slower alternatives. Ultimately, sloppy programming -- even if you achieve the desired result -- is going to result in sloppy performance. So, in this article I'm going to look at some of the key techniques you can use to squeeze those extra cycles out of your Perl application.


Approaching optimization

First of all, it's worth remembering that Perl is a compiled language. The source code you write is compiled on the fly into the bytecode that is executed. The bytecode is itself based on a range of instructions, all of which are written in a highly optimized form of C. However, even within these instructions, some operations that can achieve similar results are more highly optimized than others. Overall, this means that it's the combination of the logic sequence you use and the bytecode that is generated from this that ultimately affects performance. The differences between certain similar operations can be drastic. Consider the code in Listings 1 and 2. Both create a concatenated string, one through ordinary concatenation and the other through generating an array and concatenating it with join.


Listing 1. Concatenating a string, version 1
my $string = 'abcdefghijklmnopqrstuvwxyz';
my $concat = '';

foreach my $count (1..999999)
{
$concat .= $string;
}




Listing 2. Concatenating a string, version 2
my $string = 'abcdefghijklmnopqrstuvwxyz';
my @concat;

foreach my $count (1..999999)
{
push @concat,$string;
}
my $concat = join('',@concat);

Running Listing 1, I get a time of 1.765 seconds, whereas Listing 2 requires 5.244 seconds. Both generate a string, so what's taking up the time? Conventional wisdom (including that of the Perl team) would say that concatenating a string is a time-expensive process, because we have to extend the memory allocation for the variable and then copy the string and its addition into the new variable. Conversely, adding a string to an array should be relatively easy. We also have the added problem of duplicating the string concatenation using join(), which adds an extra second.

The problem, in this instance, is that push()-ing strings onto an array is time-intensive; first of all, we have a function call (which means pushing items onto a stack, and then taking them off), and we also have the additional array management overhead. In contrast, concatenating a string is pretty much just a case of running a single opcode to append a string variable to an existing string variable. Even if we set the array size to alleviate the overhead (using $#concat = 999999), we still only save another second.

The above is an extreme example, and there are times when using an array will be much quicker than using strings; a good example here is if you need to reuse a particular sequence but with an alternate order or different interstitial character. Arrays are also useful, of course, if you want to rearrange or reorder the contents. By the way, in this example, an even quicker way of producing a string that repeats the alphabet 999,999 times would be to use:

$concat = 999999 x 'abcdefghijklmnopqrstuvwxyz';

Individually, many of the techniques covered here won't make a huge difference, but combined in one application, you could shave a few hundred milliseconds, or even seconds, off of your Perl applications.


Use references

If you work with large arrays or hashes and use them as arguments to functions, use a reference instead of the variable directly. By using a reference, you tell the function to point to the information. Without a reference, you copy the entire array or hash onto the function call stack, and then copy it again in the function. References also save memory (which reduces footprint and management overheads) and simplify your programming.


String handling

If you are using static strings in your application a lot -- for example, in a Web application -- remember to use single quotes rather than doubles. Double quotes force Perl to look for a potential interpolation of information, which adds to the overhead of printing out the string:

print 'A string','another string',"\n";

I've also used commas to separate arguments rather than using a period to concatenate the string first. This simplifies the process; print simply sends each argument to the output file. Concatenation would concatenate the string and print it as one argument.


Loops

As you've already seen, function calls with arguments are expensive, because for the function call to work, Perl has to put the arguments onto the call stack, call the function, and then receive the responses back through the stack again. All of this requires overhead and processing that we could probably do without. For this reason, excessive function calls in a loop are generally a bad idea. Again, it comes down to a comparison of numbers. Looping through 1,000 items and passing information to a function will trigger the function call 1,000 times. To get around this, I just switch the sequence around. Instead of using the format in Listing 3, I use the approach in Listing 4.


Listing 3. Loop calling functions
foreach my $item (keys %{$values})
{
$values->{$item}->{result} = calculate($values->{$item});
}

sub calculate
{
my ($item) = @_;
return ($item->{adda}+$item->{addb});
}




Listing 4. Function using loops
calculate_list($values);

sub calculate_list
{
my ($list) = @_;
foreach my $item (keys %{$values})
{
$values->{$item}->{result} = ($item->{adda}+$item->{addb});
}
}

Better still, in a simple calculation like this one or for any straightforward loop work, use map:

map { $values->{$_}->{result} = $values->{$_}->{adda}+$values->{$_}->{addb} } keys %{$values};

Remember also that each iteration through the loop wastes time, so rather than working through the same loop a number of times, try to perform all the actions in one pass through the loop.


Sorts

Another common operation related to loops is sorting information, particularly keys in a hash. It's tempting in this instance to embed some processing of list elements into the sort operation, such as the one shown here in Listing 5.


Listing 5. Bad sorting
my @marksorted = sort {sprintf('%s%s%s',
$marked_items->{$b}->{'upddate'},
$marked_items->{$b}->{'updtime'},
$marked_items->{$a}->{itemid}) <=>
sprintf('%s%s%s',
$marked_items->{$a}->{'upddate'},
$marked_items->{$a}->{'updtime'},
$marked_items->{$a}->{itemid}) } keys %{$marked_items};

This is a fairly typical sort of complex data, in this case ordering something by date, time, and ID number by concatenating the numbers into a single number that we can then sort numerically. The problem is that the sort works through the list of items and moves them up or down through the list based on the comparison operation. In effect, this is a type of loop, but unlike the loop examples we've already seen, a sprintf call has to be made for each comparison. That's at least twice for each iteration, and the exact number of iterations through the list will depend how ordered it was to begin with. For example, with a 10,000-item list you could expect to call sprintf over 240,000 times.

The solution is to create a list that contains the sort information, and generate the sort field information just once. Taking the sample in Listing 5 as a guide, I'd rewrite that fragment into something like the code in Listing 6.


Listing 6. Better sorting
map { $marked_items->{$_}->{sort} = sprintf('%s%s%s',
$marked_items->{$_}->{'upddate'},
$marked_items->{$_}->{'updtime'},
$marked_items->{$_}->{itemid}) } keys %{$marked_items};
my @marksorted = sort { $marked_items->{$b}->{sort} <=>
$marked_items->{$a}->{sort} } keys %{$marked_items};

Instead of calling sprintf all those times, we call it just once for each item in the hash in order to generate a sort field in the hash, and then use that sort field directly during the sort. The sorting process only has to access the sort field's value. You have cut down the calls on that 10,000-item hash from 240,000 to just 10,000. It depends on what you are doing in that sort section originally, but it's possible to save as much as half the time it would take using the method shown in Listing 6.

If you produce these hashes through results from a database query -- through MySQL or similar -- using sorting within the query and then recording the order as you build the hash, you won't need to iterate over the information again.


Using short circuit logic

Related to the sort operation is how to work through a list of alternative values. Using many if statements can be incredibly time consuming. For example, look at the code in Listing 7.


Listing 7. Making a choice
if ($userchoice > 0)
{
$realchoice = $userchoice;
}
elsif ($systemchoice > 0)
{
$realchoice = $systemchoice;
}
else
{
$realchoice = $defaultchoice;
}

Aside from the waste of space in terms of sheer content, there are a couple of problems with this structure. From a programming perspective, it has the issue that it never checks if any of the variables have a valid value, a fact that would be highlighted if warnings were switched on. Second, it has to check each option until it gets to the one it wants, which is wasteful, as comparison operations (particularly on strings) are time consuming. Both problems can be solved by using short circuit logic.

If you use the logical || operator, Perl will use the first true value it comes across, in order, from left to right. The moment it finds a valid value, it doesn't bother processing any of the other values. In addition, because Perl is looking for a true value, it also ignores undefined values without complaining about them. So we can rewrite the above into a single line:

$realchoice = $userchoice || $systemchoice || $defaultchoice;

If $userchoice is a true value, Perl doesn't even look at the other variables. If $userchoice is false (see Table 1), then Perl checks the value of $systemchoice and so on until it gets to the last value, which is always used, whether it's true or not.

Table 1. $userchoice values

Value Logical value
Negative numberTrue
ZeroFalse
Positive numberTrue
Empty stringFalse
Non-empty stringTrue
Undefined valueFalse
Empty list (including hashes)False
List with at least one element (including hashes)True

Use AutoLoader

One of the most expensive portions of the execution of a Perl script is the compilation of source code into the bytecode that is actually executed. On a small script with no external modules, the process takes milliseconds. But start to include a few of your own external modules and the time increases. The reason is that Perl does little more with a module than importing the text and running it through the same compilation stage. That can turn your 200 line script into a 10,000 or 20,000 line script very quickly. The result is that you increase the initial stages of the compilation process before the script even starts to do any work.

During the normal execution of your script, it may be that you only use 10 percent, or even 5 percent, of all the functions defined in those modules. So why load them all when you start the script? The solution is to use AutoLoader, which acts a bit like a dynamic loader for Perl modules. This uses files generated by the AutoSplit system, which divides up a module into the individual functions. When you load the module through use, all you do is load the stub code for the module. It's only when you call a function contained within the module that the AutoLoader steps in and then loads and compiles the code only for that function. The result is that you convert that 20,000 line script with modules back into a 200-line script, speeding up the initial loading and compilation stages.

I've saved as much as two seconds just by converting one of my applications to use the AutoLoader system in place of preloading. It's easy to use by just changing your modules from the format shown in Listing 8 to that shown in Listing 9, and then making sure to use AutoSplit to create the loading functions you need. Note that you don't need to use Exporter any more; AutoLoader handles the loading of individual functions automatically without you have to explicitly list them.


Listing 8. A standard module
package MyModule;

use OtherModule;
require 'Exporter';
@EXPORT = qw/MySub/;

sub MySub
{
...
}

1;




Listing 9. An autoloading module
package MyModule;

use OtherModule;
use AutoLoader 'AUTOLOAD';

1;

__END__

sub MySub
{
...
}

The main difference here is that functions you want to autoload are no longer defined within the module's package space but in the data section at the end of the module (after the __END__ token). AutoSplit will place any functions defined here into the special AutoLoader files. To split up the module, use the following command line:

perl -e 'use AutoSplit; autosplit($ARGV[0], $ARGV[1], 0, 1, 1)' MyModule.pm auto


Using bytecode and the compiler back ends

There are three ways to use the compiler: bytecode production, full compilation, or simply as a debugging/optimizing tool. The first two methods rely on converting your original Perl source into its compiled bytecode form and storing this precompiled version for execution. This is best used through the perlcc command. These two modes follow the same basic model but produce the final result differently. In bytecode mode, the resulting compiled bytecode is written out to another Perl script. The script consists of the ByteLoader preamble, with the compiled code stored as a byte string. To create this bytecode version, use the -B option to the perlcc command. For example:

$ perlcc -B script.pl

This will create a file, a.out. The output, however, is not very Web friendly. The resulting file can be executed with any Perl executable on any platform (Perl bytecode is platform independent):

$ perl a.out

What this does is save Perl from having to compile the script from its source code into the bytecode each time. Instead, it just runs the bytecode that was generated. This is similar to the process behind Java compilation and is in fact that same one-step away from being a truly compiled form of the language. On short scripts, especially those that use a number of external modules, you probably won't notice a huge speed increase. On larger scripts that "stand alone" without a lot of external module use, you should see a noticeable improvement.

The full compilation mode is almost identical, except that instead of producing a Perl script with the compiled bytecode embedded in it, perlcc produces a version embedded into C source that is then compiled into a full-blown, standalone executable. This is not cross-platform compatible, but it does allow you to distribute an executable version of a Perl script without giving out the source. Note, however, that this doesn't convert the Perl into C, it just embeds Perl bytecode into a C-based application. This is actually the default mode of perlcc, so a simple: $ perlcc script.pl will create, and compile, a standalone application called a.out.

One of the lesser-known solutions for both debugging and optimizing your code is to use the Perl compiler with one of the many "back ends."

The back ends are actually what drive the perlcc command, and it's possible to use a back-end module directly to create a C source file that you can examine. The Perl compiler works by taking the generated bytecode and then outputting the results in a variety of different ways. Because you're looking at the opcodes generated during the compilation stage, you get to see the code after Perl's own internal optimizations have been applied. Providing you know the Perl opcodes, you can begin to identify where the potential bottlenecks might be. From a debugging perspective, go with back ends such as Terse (which is itself a wrapper on Concise) and Showlex. You can see in Listing 10 what the original Listing 1 looks like through the Terse back end.


Listing 10. Using Terse to study bytecode
LISTOP (0x306230) leave [1]
OP (0x305f60) enter
COP (0x3062d0) nextstate
BINOP (0x306210) sassign
SVOP (0x301ab0) const [7] PV (0x1809f9c) "abcdefghijklmnopqrstuvwxyz"
OP (0x305c30) padsv [1]
COP (0x305c70) nextstate
BINOP (0x305c50) sassign
SVOP (0x306330) const [8] PV (0x180be60) ""
OP (0x306310) padsv [2]
COP (0x305f20) nextstate
BINOP (0x305f00) leaveloop
LOOP (0x305d10) enteriter [3]
OP (0x305cf0) null [3]
UNOP (0x305cd0) null [141]
OP (0x305e80) pushmark
SVOP (0x3065d0) const [9] IV (0x180be30) 1
SVOP (0x3065f0) const [10] IV (0x1801240) 999999
UNOP (0x305ee0) null
LOGOP (0x305ec0) and
OP (0x305d50) iter
LISTOP (0x305e60) lineseq
COP (0x305e10) nextstate
BINOP (0x305df0) concat [6]
OP (0x305d70) padsv [2]
OP (0x305dd0) padsv [1]
OP (0x305ea0) unstack
concat1.pl syntax OK


Other tools

What I've covered here looks entirely at the code that makes up your applications. While that's where most of the problems will be, there are tools and systems you can use that can help identify and locate problems in your code that might ultimately help with performance.

Warnings/strict execution

It's a common recommendation, but it really can make a difference. Use the warnings and strict pragmas to ensure nothing funny is going on with variable use, typos, and other inconsistencies. Using them in all your scripts will help you eliminate all sorts of problems, many of which can be the source of performance bottlenecks. Common faults picked up by these pragmas are ambiguous references and de-references, use of undefined values, and some help identifying typos for unused or undefined functions.

All of this help, though, comes at a slight performance cost. I keep warnings and strict on while programming and debugging, and I switch it off once the script is ready to be used in the real world. It won't save much, but every millisecond counts.

Profiling

Profiling is a useful tool for optimizing code, but all it does is identify the potential location of the problem; it doesn't actually point out what the potential issue is or how to resolve it. Also, because profiling relies on monitoring the number of executions of different parts of your application it can, on occasion, give misleading advice about where a problem lies and the best approach for resolving it.

However, profiling is still a useful, and often vital, part of the optimization process. Just don't rely on it to tell you everything you need to know.

Debugging

To me, a badly optimized program means that it has a bug. The reverse is also true: bugs often lead to performance problems. Classic examples are badly de-referenced variables or reading and/or filtering the wrong information. It doesn't matter whether your debugging technique involves using print statements or the full-blown debugger provided by Perl. The sooner you eliminate the bugs, the sooner you will be able to start optimizing your application.


Putting it all together

Now that you know the techniques, here is the way to go about using them together to produce optimized applications. I generally follow this sequence when optimizing:

  1. Write the program as optimized as possible using the techniques above. Once you start to use them regularly, they become the only way you program.
  2. Once the program is finished or at least in a releasable state, go through and double check that you are using the most efficient solution by hand by reading the code. You'll be able to spot a number of issues just by re-reading, and you might pick up a few potential bugs, too.
  3. Debug your program. Bugs can cause performance problems, so you should always eliminate the bugs first before doing a more intense optimization.
  4. Run the profiler. I always do this once on any serious application, just to see if there's something -- often obvious -- that I might have missed.
  5. Go back to step 1 and repeat. I've lost track of the number of times I've completely missed a potential optimization the first time around. Either I'll go back and repeat the process two or three times in one session, or I'll leave, do another project, and return a few days, weeks, or months later. Weeks and months after, you'll often have found an alternative way of doing something that saves time.

At the end of the day, there is no magic wand that will optimize your software for you. Even with the debugger and profiler, all you get is information about what might be causing a performance problem, not necessarily any helpful advice on what you should do to fix it. Be aware as well that there is a limit to what you can optimize. Some operations will simply take a lot of time to complete. If you have to work through a 10,000-item hash, there's no way of simplifying that process. But as you've seen, there might be ways of reducing the overhead in each case.

4/14/2009

Freeware password recovery tools and lot more freewares

Can find them here: http://www.nirsoft.net/utils/index.html#password_utils

Quote:

MessenPass v1.24 - Instant Messenger Password Recovery
MessenPass is a password recovery tool that reveals the passwords of the following instant messenger applications: MSN Messenger, Windows Messenger (In Windows XP), Windows Live Messenger (In Windows XP And Vista), Yahoo Messenger (Version 5.x/6.x), ICQ Lite 4.x/5.x/2003, AOL Instant Messenger, AIM 6.x, AIM Pro, Trillian, Miranda, and GAIM.
Asterisk Logger v1.04
Automatically reveals the passwords stored behind the asterisks ('***') in standard password text-boxes of Windows.
Dialupass v3.01 - Dialup Password Recovery
This utility enumerates all dialup/VPN entries on your computers, and displays their logon details: User Name, Password, and Domain. You can use it to recover a lost password of your Internet connection or VPN.
Dialupass also allows you to save the dialup/VPN list into text/html/csv/xml file, or copy it to the clipboard.

Protected Storage PassView v1.63
This utility reveals the passwords stored on your computer by Internet Explorer, Outlook Express and POP3 accounts of MS-Outlook. The passwords are revealed by reading the information from the Protected Storage.

IE PassView v1.15
IE PassView is a small utility that reveals the passwords stored by Internet Explorer browser. It supports the new Internet Explorer 7.0/8.0, as well as older versions of Internet explorer, v4.0 - v6.0

PasswordFox v1.11
PasswordFox is a small password recovery tool that allows you to view the user names and passwords stored by Mozilla Firefox Web browser. By default, PasswordFox displays the passwords stored in your current profile, but you can easily select to watch the passwords of any other Firefox profile. For each password entry, the following information is displayed: Record Index, Web Site, User Name, Password, User Name Field, Password Field, and the Signons filename.

ChromePass v1.05
ChromePass is a small password recovery tool that allows you to view the user names and passwords stored by Google Chrome Web browser. For each password entry, the following information is displayed: Origin URL, Action URL, User Name Field, Password Field, User Name, Password, and Created Time. You can select one or more items and then save them into text/html/xml file or copy them to the clipboard.

Network Password Recovery v1.20
When you connect to a network share on your LAN or to your .NET Passport/Messenger account, Windows XP/Vista allows you to save your password in order to use it in each time that you connect the remote server. This utility recovers all network passwords stored on your system for the current logged-on user.
AsterWin IE v1.03
This utility reveals the passwords stored behind the asterisks in the web pages of Internet Explorer 5.0 and above. You can use it for recovering a lost web site password, if it's stored on your computer.
It was developed in Visual Basic environment and requires the Visual Basic Runtime library.
Source code is included !

Mail PassView v1.50 - Email Password Recovery
Recovers the passwords and other email accounts information of the following email applications: Outlook Express, Microsoft Outlook 2000 (POP3/SMTP Accounts only), Microsoft Outlook 2002/2003/2007, Windows Mail, IncrediMail, Eudora, Netscape Mail, Mozilla Thunderbird, Group Mail Free, and Web-based email accounts.

PstPassword v1.12
PstPassword is a small utility that recover lost password of Outlook .PST (Personal Folders) file.

WirelessKeyView v1.26
WirelessKeyView recovers all wireless network keys (WEP/WPA) stored in your computer by the 'Wireless Zero Configuration' service of Windows XP and by the 'WLAN AutoConfig' service of Windows Vista. It allows you to easily save all keys to text/html/xml file, or copy a single key to the clipboard.

Remote Desktop PassView v1.01
Remote Desktop PassView is a small utility that reveals the password stored by Microsoft Remote Desktop Connection utility inside .rdp files.

LSASecretsView v1.20
LSASecretsView is a small utility that displays the list of all LSA secrets stored in the Registry on your computer. The LSA secrets key is located under HKEY_LOCAL_MACHINE\Security\Policy\Secrets and may contain your RAS/VPN passwords, Autologon password, and other system passwords/keys.

LSASecretsDump v1.20
LSASecretsDump is a small console application that extract the LSA secrets from the Registry, decrypt them, and dump them into the console window. The LSA secrets key is located under HKEY_LOCAL_MACHINE\Security\Policy\Secrets and may contain your RAS/VPN passwords, Autologon password, and other system passwords/keys.
This utility is the console version of LSASecretsView.

PCAnywhere PassView v1.11
Reveals the passwords stored in PCAnywhere items. Both login information and the protection passwords are revealed instantly.

Access PassView v1.12
This utility reveals the database password of every password-protected mdb file that created with Microsoft Access 95/97/2000/XP or with Jet Database Engine 3.0/4.0
It can be very useful if you forgot your Access Database password and you want to recover it.

Win9x PassView v1.1
The Win9x PassView utility reveals the passwords stored on your computer by Windows 95/98 operating system.

Content Advisor Password Remover v1.01
Removes the Content Advisor password in Internet Explorer (versions 4.x and above).
Visual C++ Source code is included.

Enterprise Manager PassView v1.00
Reveals the passwords that SQL Server Enterprise Manager stores on your computer.

AsterWin v1.20
This utility reveals the passwords stored behind the asterisks in standard password text-boxes.
It supports the following operating systems: Windows 95, Windows 98, Windows ME, Windows NT, Windows 2000 and Windows XP.

VNCPassView v1.01
VNCPassView is a small utility that recover the passwords stored by the VNC tool. It can recover 2 of passwords: password stored for the current logged-on user (HKEY_CURRENT_USER in the Registry), and password stored for the all users.
AspNetUserPass v1.00
AspNetUserPass is a very simple console-based utility that displays the password of ASPNet user on your system.
Netscapass v2.03
Reveals the stored mail password (POP3 server password) for Netscape Communicator 4.x, Netscape 6.x and Netscape 7. It can also reveal the stored web-sites passwords in Netscape 6.x/7.x

3/30/2009

Complete perl reserved variable list

Amazingly complete perl's reserved variable list!

Source: http://www.sarand.com/td/ref_perl_reserve.html

Quote:

Reserved Literals
__END__ indicates the logical end of the script (^D and ^Z are synonyms)
__FILE__ current filename
__LINE__ current line number
Reserved Filehandles
<> Null filehanedle - input from either stdin, or files specified on the command line. Psuedonym for internal filehandle .
DATA read data only from the main script, but not from any required file or evaluated string.
STDERR Output to stderr
STDIN Input from stdin
STDOUT Output to stdout
Reserved Variables
$_ The default input and pattern-searching space. The following pairs are equivalent:
while (<>) {...} while ($_ = <>) {...} # only equivalent in while!
/^Subject:/ $_ =~ /^Subject:/
tr/a-z/A-Z/ $_ =~ tr/a-z/A-Z/
chop chop($_)
Also: $ARG
@_ The parameters passed to a subroutine. The array itself is local to the subroutine, but its values are references to the variables that are passed so updates to the members of the array will update the corresponding parameter value.
Contains the subpattern from the corresponding set of parentheses in the last pattern matched, not counting patterns matched in nested blocks that have been exited already. These variables are all read-only.
$& The string matched by the last successful pattern match (not counting any matches hidden within a BLOCK or eval() enclosed by the current BLOCK). This variable is read-only.
Also: $MATCH
$` The string preceding whatever was matched by the last successful pattern match, not counting any matches hidden within a BLOCK or eval enclosed by the current BLOCK. This variable is read-only.
Also: $PREMATCH
$' The string following whatever was matched by the last successful pattern match (not counting any matches hidden within a BLOCK or eval() enclosed by the current BLOCK). Example:
$_ = 'abcdefghi';
/def/;
print "$`:$&:$'\n"; # prints abc:def:ghi
This variable is read-only.
Also: $POSTMATCH
$+ The last bracket matched by the last search pattern. This is useful if you don't know which of a set of alternative patterns matched. For example:
/Version: (.*)|Revision: (.*)/ && ($rev = $+);
This variable is read-only.
Also: $LAST_PAREN_MATCH
$* Set to 1 to do multiline matching within a string, 0 to tell Perl that it can assume that strings contain a single line, for the purpose of optimizing pattern matches. Pattern matches on strings containing multiple newlines can produce confusing results when " $* " is 0. Default is 0. Note that this variable only influences the interpretation of " ^ " and " $ ". A literal newline can be searched for even when $* == 0 . The '/m' modifier should be used instead when pattern matching.
Also: $MULTILINE_MATCHING
$. The current input line number of the last filehandle that was read. This variable should be considered read-only. Remember that only an explicit close on the filehandle resets the line number. Since " <> " never does an explicit close, line numbers increase across ARGV files.
Also: $NR, $INPUT_LINE_NUMBER, input_line_number HANDLE EXPR
$/ The input record separator, newline by default. Works like awk 's RS variable, including treating blank lines as delimiters if set to the null string. You may set it to a multicharacter string to match a multi-character delimiter. Note that setting it to "\n\n" means something slightly different than setting it to "" , if the file contains consecutive blank lines. Setting it to "" will treat two or more consecutive blank lines as a single blank line. Setting it to "\n\n" will blindly assume that the next input character belongs to the next paragraph, even if it's a newline.
undef $/;
$_ = ; # whole file now here
s/\n[ \t]+/ /g;
Also: $RS, $INPUT_RECORD_SEPARATOR, input_record_separator HANDLE EXPR
$| If set to nonzero, forces a flush after every write or print on the currently selected output channel. Default is 0. Note that STDOUT will typically be line buffered if output is to the terminal and block buffered otherwise. Setting this variable is useful primarily when you are outputting to a pipe, such as when you are running a Perl script under rsh and want to see the output as it's happening.
Also: $OUTPUT_AUTOFLUSH, autoflush HANDLE EXPR
$, The output field separator for the print operator. Ordinarily the print operator simply prints out the comma separated fields you specify. In order to get behavior more like awk, set this variable as you would set awk 's OFS variable to specify what is printed between fields.
Also: $OFS, $OUTPUT_FIELD_SEPARATOR, output_field_separator HANDLE EXPR
$\ The output record separator for the print operator. Ordinarily the print operator simply prints out the comma separated fields you specify, with no trailing newline or record separator assumed.
Also: $ORS, $OUTPUT_RECORD_SEPARATOR, output_record_separator HANDLE EXPR
$" Delimiter used when interpreting an array as a scalar. This value separates each element of the array in the resulting string - default a space.
Also: $LIST_SEPARATOR
$; The subscript separator for multi-dimensional array emulation, which can be declared directly in v.5. If you refer to a hash element as
$foo{$a,$b,$c}
it really means
$foo{join($;, $a, $b, $c)}
But don't put
@foo{$a,$b,$c} # a slice--note the @
which means
($foo{$a},$foo{$b},$foo{$c})
Default is "\034", the same as SUBSEP in awk . Note that if your keys contain binary data there might not be any safe value for " $; ".
Also: $SUBSEP, $SUBSCRIPT_SEPARATOR
$# The output format for printed numbers. The initial value is '%. 20g'. Deprecated in Perl 5.
Also: $OFMT
$% The current page number of the currently selected output channel.
Also: $FORMAT_PAGE_NUMBER, format_page_number HANDLE EXPR
$= The current page length (printable lines) of the currently selected output channel. Default is 60.
Also: $FORMAT_LINES_PER_PAGE, format_lines_per_page HANDLE EXPR
$- The number of lines left on the page of the currently selected output channel.
Also: $FORMAT_LINES_LEFT, format_lines_left HANDLE EXPR
$~ The name of the current report format for the currently selected output channel. Default is name of the filehandle.
Also: $FORMAT_NAME, format_name HANDLE EXPR
$^ The name of the current top-of-page format for the currently selected output channel. Default is name of the filehandle with _TOP appended.
Also: $FORMAT_TOP_NAME, format_top_name HANDLE EXPR
$: The current set of characters after which a string may be broken to fill continuation fields (starting with ^) in a format. Default is S<" \n-">, to break on whitespace or hyphens.
Also: $FORMAT_LINE_BREAK_CHARACTERS, format_line_break_characters HANDLE EXPR
$^ L What formats output to perform a formfeed. Default is \f.
Also: $FORMAT_FORMFEED, format_formfeed HANDLE EXPR
$^ A The current value of the write() accumulator for format() lines. A format contains formline() commands that put their result into $^ A . After calling its format, write() prints out the contents of $^ A and empties. So you never actually see the contents of $^ A unless you call formline() yourself and then look at it.
Also: $ACCUMULATOR
$? The status returned by the last pipe close, backtick ( `` ) command, or system() operator. Note that this is the status word returned by the wait() system call, so the exit value of the subprocess is actually ( $? >> 8 ). Thus on many systems, $? & 255 gives which signal, if any, the process died from, and whether there was a core dump.
Also: $CHILD_ERROR
$! If used in a numeric context, yields the current value of errno, with all the usual caveats. (This means that you shouldn't depend on the value of " $! " to be anything in particular unless you've gotten a specific error return indicating a system error.) If used in a string context, yields the corresponding system error string. You can assign to " $! " in order to set errno if, for instance, you want " $! " to return the string for error n , or you want to set the exit value for the die() operator.
Also: $ERRNO, $OS_ERROR
$@ The Perl syntax error message from the last eval() command. If null, the last eval() parsed and executed correctly (although the operations you invoked may have failed in the normal fashion).
Also: $EVAL_ERROR
$$ The process number of the Perl running this script.
Also: $PID, $PROCESS_ID
$< The real uid of this process.
Also: $UID, $REAL_USER_ID
$> The effective uid of this process. Example:
$< = $>; # set real to effective uid
($<,$>) = ($>,$<); # swap real and effective uid
Also: $EUID, $EFFECTIVE_USER_ID
$( The real gid of this process. If you are on a machine that supports membership in multiple groups simultaneously, gives a space separated list of groups you are in. The first number is the one returned by getgid() , and the subsequent ones by getgroups() , one of which may be the same as the first number.
Also: $GID, $REAL_GROUP_ID
$) The effective gid of this process. If you are on a machine that supports membership in multiple groups simultaneously, gives a space separated list of groups you are in. The first number is the one returned by getegid() , and the subsequent ones by getgroups() , one of which may be the same as the first number.
Note: " $& lt; ", " $& gt; ", " $( " and " $) " can only be set on machines that support the corresponding set[re][ug] id() routine. " $( " and " $) " can only be swapped on machines supporting setregid() .
Also: $EGID, $EFFECTIVE_GROUP_ID
$0 Contains the name of the file containing the Perl script being executed. Assigning to " $0 " modifies the argument area that the ps(1) program sees. This is more useful as a way of indicating the current program state than it is for hiding the program you're running.
Also: $PROGRAM_NAME
$[ The index of the first element in an array, and of the first character in a substring. Default is 0, but you could set it to 1 to make Perl behave more like awk (or Fortran) when subscripting and when evaluating the index() and substr() functions.
As of Perl 5, assignment to " $[ " is treated as a compiler directive, and cannot influence the behavior of any other file. Its use is discouraged.
$] The string printed out when you say perl -v . It can be used to determine at the beginning of a script whether the perl interpreter executing the script is in the right range of versions. If used in a numeric context, returns the version + patchlevel / 1000. Example:
# see if getc is available
($version,$patchlevel) =
$] =~ /(\d+\.\d+).*\nPatch level: (\d+)/;
print STDERR "(No filename completion available.)\n"
if $version * 1000 + $patchlevel < 2016;
or, used numerically,
warn "No checksumming!\n" if $] < 3.019;
Also: $PERL_VERSION
$^ D The current value of the debugging flags.
Also: $DEBUGGING
$^ F The maximum system file descriptor, ordinarily 2. System file descriptors are passed to exec() ed processes, while higher file descriptors are not. Also, during an open() , system file descriptors are preserved even if the open() fails. (Ordinary file descriptors are closed before the open() is attempted.) Note that the close-on-exec status of a file descriptor will be decided according to the value of $^ F at the time of the open, not the time of the exec.
Also: $SYSTEM_FD_MAX
$^ I The current value of the inplace-edit extension. Use undef to disable inplace editing.
Also: $INPLACE_EDIT
$^ P The internal flag that the debugger clears so that it doesn't debug itself. You could conceivable disable debugging yourself by clearing it.
Also: $PERLDB
$^ T The time at which the script began running, in seconds since the epoch (beginning of 1970). The values returned by the -M , -A and -C filetests are based on this value.
Also: $BASETIME
$^ W The current value of the warning switch, either TRUE or FALSE.
Also: $WARNING
$^ X The name that the Perl binary itself was executed as, from C's argv[0] .
Also: $EXECUTABLE_NAME
$ARGV The name of the current file when reading from <>.
@ARGV The array @ARGV contains the command line arguments intended for the script. Note that $# ARGV is the generally number of arguments minus one, since $ARGV [0] is the first argument, NOT the command name. See " $0 " for the command name.
@INC The array @INC contains the list of places to look for Perl scripts to be evaluated by the do EXPR , require , or use constructs. It initially consists of the arguments to any -I command line switches, followed by the default Perl library, probably "/usr/local/lib/perl", followed by ".", to represent the current directory.
%INC The hash %INC contains entries for each filename that has been included via do or require . The key is the filename you specified, and the value is the location of the file actually found. The require command uses this array to determine whether a given file has already been included.
$ENV {expr} The hash %ENV contains your current environment. Setting a value in ENV changes the environment for child processes.
$SIG {expr} The hash %SIG is used to set signal handlers for various signals.
Environment Variables
These are available as the '%ENV' hash, and retrieved as follows:
$variable = $ENV{'variable'};
The following are commonly used:
CONTENT_LENGTH The number of bytes of data passed through standard input via the POST method.
DOCUMENT_ROOT Path on the server to the web site (root URL) being accessed.
GATEWAY_INTERFACE Protocol used to communicate with the server.
HTTP_COOKIE The contents of all cookies that are visible to the script - each cookie delimited by a semicolon (';').
HTTP_USER_AGENT The name (eg. 'Mozilla') and version (eg. '4.03') of the browser used to access the server and the type of platform used by the browser (eg. 'Macintosh;I;PPC').
HTTP_REFERER The URL of the page that was being viewed when the script was accessed, either via a link or by direct entering o fthe URL. Can be used to check that the user has come from a recognised source, to help with security.
QUERY_STRING Holds the data input via the GET method.
REQUEST_METHOD Either "POST" or "GET", depending on what is set on the method attributes of the form tag. NB This value will be "POST" if method="POST", even if some data is passed via GET (eg. data appended directly to the action URL).
The following will cause both methods to be used, even though $REQUEST_METHOD="POST":
openanglebraket form action="cgi/proc?A=1&B=2" method="post" closeanglebraket
SERVER_SOFTWARE Name and version of the web server.

More free online courses!

More of great free online courses by Wendy Boswell from lifehacker.

Quote below:

Free online college courses

books.png

Grab some larnin' from the University of Washington's free online courses; Greek mythology, American Revolution, Heroic Fantasy are just some of the offerings. If you get tired of that, you can study economics at the University of Nebraska.

Teach yourself sign language from Michigan State University. Browse through the vast treasures at the Library of Congress. View free videos on all sorts of subjects from Annenberg Media, a major supplier to most distance learning universities, or read the core documents of American democracy.

Feel like a little light reading? You can study theology at Covenant Seminary; course offerings are delivered via a combo of free downloadable .pdf files and podcasts, and include subjects ranging from Church History to the Modern Reformation.

Learn mathematics with this extensive list of free online math courses from Whatcom Community College. Visit Carnegie Mellon University and take Biology, Causal Reasoning, Statistics, and more, all for free.

college.png

Penn State University offers a free Swedish language course, in addition to a free Hungarian language course. Or, you can take an Italian language and culture course from Brooklyn College. California State also offers a free Conversational Mandarin Chinese course, and you can learn Turkish via the University of Arizona.

The University of Washington School of Medicine offers free CPR classes online, complete with video and instructional guides. You can also take health courses from the Johns Hopkins Bloomberg School of Public Health; anything from adolescent health to population science.

Prepare for the US citizenship test from the Missouri Southern State University. Learn linear algebra from the University of Puget Sound. Learn about bioterrorism (really) and other hazards from the University of North Carolina.

Get free online mathematics textbooks, videos, and lecture notes from New York University. Take advantage of Tufts University's open courses on dentistry, medicine, nutrition, and more. Learn about cognitive science from Hampshire College.

Take eight different courses via the Sofia Project, a collaborative effort between select California community colleges. Brigham Young University offers independent study in subjects such as Family History, Family Life, and Religious Scripture Study. Get access to ten free seminary courses from Gordon-Conwell Theological Seminary.

Learn about human resources in 52 (!) different free courses from ERI. Browse a huge variety of materials in the University of Michigan's courses and seminars on Internet laws.

Ivy League

Take advantage of Stanford University's free CS education library. Go to college by taking free classes at MIT. Go to Berkeley with your iPod.The University of Pennsylvania has an extensive online library; over 25,000 books are listed here.

shelf.png

Just debuted, you can take free courses from Yale (funded by HP) on such diverse subjects as the Old Testament or Physics. Watch or read free online lectures in archival format from Princeton. Get a free Introduction to Probability text from Dartmouth.

Google tricks

Using the right keywords, find course syllabi (insert your own subject), lectures, tutorials, notes, podcasts, and various sorts of online books using Google.

12/23/2008

Great htaccess tip for web masters!

These are one of the best tips and tricks involving .htaccess capabilities listed in 16 Useful .htaccess Tricks and Hacks For Web Developers! Check it out.

Quote:

1. Creating a custom error page with .htaccess on a linux apache is a very simple task. Using you a text editor like notepad you create an .htaccess files. Custom error pages give your website an professional look and catch those visitors who reach your website following a back link.

ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

2. How to set the timezone on your server

SetEnv TZ America/Houston

3. Block IPs Using htaccess
Sometime you need to block certain IPs from accessing your entire site or directory. Its pretty simple task. All you have to do is inside the .htaccess file is put the following code.

allow from all
deny from 145.186.14.122
deny from 124.15

If you use the whole IP or a part of the IP to block and add the new ones in a new line.
When someone trying to access your site from the banned ip they will get a 403 error access forbidden message.

4. SEO Friendly 301 permanent redirects for bad/old links and moved links

Redirect 301 /d/file.html http://www.htaccesselite.com/r/file.html

5. Set the Email Address for the Server Administrator - Using this code you can specifying the default email address for the server administrator.

ServerSignature EMail
SetEnv SERVER_ADMIN default@domain.com

6. Hotlinking protection with .htaccess is very important because anyone can hot link to your images and eat up all your bandwith of your server. The following code will help you to prevent that.

Options +FollowSymlinks
# Protect Hotlinking
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domainname\.com/ [nc]
RewriteRule .*\.(gif|jpg|png)$ http://domainname.com/img/hotlink_f_o.png [nc]

7. Block all requests from user agent - by creating a perfect .htaccess ban list, you can block all of unwanted user agents that will keep your server load down. Also Check out this interesting thread on webmaster world about the 228 user agents ban list.

## .htaccess Code :: BEGIN
## Block Bad Bots by user-Agent
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]

Order Allow,Deny
Allow from all
Deny from env=bad_bot

## .htaccess Code :: END

8. Redirect everyone to different site except few IP
-If you want to redirect all the visitors to a different IP. Also give access to certain few IPs. You can use the code below

ErrorDocument 403 http://www.youdomain.com
Order deny,allow
Deny from all
Allow from 124.34.48.165
Allow from 102.54.68.123

9. Don’t want to display download request - Usually when you try to download something from a web server you get a request asking whether you want to save the file or open it.
To avoid that you can use the below code on your .htaccess file.

AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mov

10. Change the file type - Make any file be a certain kind of file type Makes image.jpg, index.html, default.cgi all act as php


ForceType application/x-httpd-php
SetHandler application/x-httpd-php

11. Block access to your .htaccess file - By adding he following code to your htaccess file will prevent attempts to access your htaccess file. This extra layer of security protects your htaccess file by displaying a 403 error message on the browser.

# secure htaccess file

 order allow,deny
 deny from all


12. Protect access to certain specific file on your server - this can be done by adding the below mentioned code. For example you want to block with the file name default.jpg This will prevent the viewing of this file.

# prevent access of a certain file

 order allow,deny
 deny from all


13. Prevent access to unauthorized browsing - Protecting specific directory browsing can be done by intructing the server to serve a Forbidden and Authorization required message while anyone requests to view that particular directory. Usually if you site doesn’t have a default index page any files within that directory is accessible to the visitors. To avoid that use the following code in the .htaccess file.

# disable directory browsing
Options All -Indexes

14. Setting the default page
- You can set the default page of a directory to any page you like. For example in this code the default page is set as about.html instead of index.html

# serve alternate default index page
DirectoryIndex about.html

15. Password protect your directories and files
- You can create authentication for certain files and directories from being access. The code has examples of both password protection for a single file and password protection for a entire directory.

# to protect a file

AuthType Basic
AuthName “Prompt”
AuthUserFile /home/path/.htpasswd
Require valid-user

# password-protect a directory
resides
AuthType basic
AuthName “This directory is protected”
AuthUserFile /home/path/.htpasswd
AuthGroupFile /dev/null
Require valid-user

16. Redirect an old domain to a new domain
- Using htaccess file you can redirect a old domain name to a new domain by adding the following code into the htaccess file. Basically what it does is it will remap the old domain to the new one.

# redirect from old domain to new domain
RewriteEngine On
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]

12/16/2008

Side job that can be done to make extra cash money

In this economic downturn it is hard to make extra cash to get by. Here's the list from lifehack.org that might save you from current environment.

Quote:

  1. Selling collectibles — From antique books to teddy bears, there are plenty of opportunities to buy and sell collectibles. It’s important to familiarize yourself with the collectible of your choice but if you choose something that you’ve been collecting for a while, you’ve got a head start.
  2. Locating apartments — It can take time to sort through apartment listings, but you can make some money by finding the perfect apartment for a renter.
  3. Baby proofing — New parents often prefer to bring in an expert to make sure their home is safe for a new baby.
  4. Calligraphic writing — If you’ve got elegant handwriting, you can pick up gigs writing or addressing wedding invitations, holiday cards and more.
  5. Selling coupons — Search on eBay for coupons right now and you’ll see thousands of listings for coupons. It’s just a matter of clipping and listing what you find in your Sunday newspaper.
  6. Pet training — A surprising number of people don’t know where to start in training a pet. Even teaching Rover simple commands like ‘Sit’ and ‘Stay’ can bring in a few dollars.
  7. Running errands — A wide variety of people want to outsource their errands, from those folks who aren’t able to leave their homes easily to those who have a busy schedule.
  8. Researching family trees — Amateur genealogists often call in experts, especially to handle research that has to be done in person in a far off place. If you’re willing to go to a local church and copy a few records, you can handle many family tree research requests.
  9. Supplying firewood — The prerequisite for selling firewood is having a source of wood; if you’ve got some land where you can cut down a few trees, you’ve got a head start.
  10. Hauling — As more people trade in their SUVs for compact cars, hauling is becoming more important: people have to rent a truck or hire a hauler for even small loads.
  11. Image consulting — Image consultants provide a wide variety of services, ranging from offering advice on appearance to teaching etiquette.
  12. Menu planning — For many people, the trip up in eating home-cooked or healthy meals is knowing what to prepare. Meal planners set a schedule to solve certain dietary problems.
  13. Microfarming — Cultivating food and flowers on small plots of land allows you to sell produce easily.
  14. Offering notary public services — Notary publics can witness and authenticate documents: a service needed for all sorts of official documents.
  15. Teaching music — If you’re skilled with a musical instrument, you can earn money by offering lessons.
  16. Mystery shopping — Mystery shoppers check the conditions and service at a store and report back to the store’s higher-ups.
  17. Offering research services — Just by reading up on a topic and compiling a report on it can earn you money.
  18. Personal shopping — Personal shoppers typically select gifts, apparel and other products for clients, helping them save time.
  19. Pet breeding — Purebred pets can be quite value, especially if you can verify their pedigree.
  20. Removing snow — During the winter months, shoveling walks can still be a reliable way to earn money. You might be asked to take care of the driveway too.
  21. Utility auditing — As people become environmentally-concious, they want to know just how efficient their homes are. With some simple testing, you can tell them.
  22. Offering web hosting services — Providing server space can be lucrative, particularly if you can provide tech support to your clients.
  23. Cutting lawns — An old standby, cutting lawns and other landscaping services can provide a second income in the summer.
  24. Auctioning items on eBay — Want to get rid of all your old stuff? Stick it up on eBay and auction it off.
  25. Babysitting — Child care of all kinds, from babysitting to nannying, can offer constant opportunities.
  26. Freelance writing — If you’ve got the skills to write clearly, you can sell your pen for everything from blogs to advertising copy.
  27. Selling blog and website themes — Do a little designing on the side? Customers that don’t want to pay full price for a website will often pay for a template or theme.
  28. Offering computer help — Particularly with people new to computers, you can earn money by providing in-home computer help.
  29. Designing websites — It may require a little skilled effort, but designing websites remains a reliable source of income.
  30. Selling stock photography — For shutterbugs, an easy way to put a photography collection to work is to post it to a stock photography site.
  31. Freelance designing — Check with local businesses: you can provide brochures, business cards and other design work and get paid a good fee.
  32. Tutoring — Math and languages reamin the easiest subjects to find tutoring gigs for, but there is demand for other fields as well.
  33. Housesitting / petsitting — Stopping in to check on a house or pet can earn you some money, and maybe even a place to stay.
  34. Building niche websites — If you can put together a site on a very specific topic, you can put targeted ads on it and make money quickly.
  35. Translating — The variety of translating work available is huge: written word, on the spot and more is easy to find even on a part-time basis.
  36. Creating custom crafts — No matter what kind of crafts you make, there’s likely a market for it. Etsy remains one of the easiest places to sell crafts.
  37. Setting up a wi-fi hotspot — With a little bit of equipment, you can set up a wi-fi hotspot and charge your neighbors for the access they’ve been ‘borrowing.’
  38. Selling an e-book — You can write an e-book about almost anything and put it up for sale online.
  39. Affiliate marketing — If you’re willing to market other companies’ products, you can earn a cut of the sales.
  40. Renting out your spare room — From looking for a long-term roommate to listing your guest room on couch surfing sites, that spare room can make you money.
  41. Offering handy man services — Handling small household tasks can provide you with plenty of work, although you’ll probably be expected to have your own tools.
  42. Teaching an online class — Share your expertise through a website, an online seminar or variety of other methods.
  43. Building furniture — For those with the skill to create handmade furniture, selling their creations is often just a matter of advertising.
  44. Providing personal chef services — Personal chefs prepare meals ahead of time for customers, leaving their customers with a full freezer and no mess.
  45. Event planning — From planning corporate events to bar mitzvahs, an event planning business can require plenty of work and offer plenty of pay.
  46. Installing home safety products — Particularly as Baby Boomers age, people able to install handrails and other home safety products are in demand.
  47. Altering / tailoring — If your sewing skills are up to par, altering garments is coming back as people try to stretch more wear out of their clothing.
  48. Offering in-home beauty services — Hair cuts, makeup and other beauty services that can be performed at home have a growing demand.
  49. Business coaching — Helping others to establish and develop their businesses can provide many opportunities to earn money.
  50. Writing resumes — Writing resumes can provide a reliable income, especially if you can put a polish on a client’s credentials.

12/15/2008

So many lay offs going on in current economic downturn. It you want to see which companies are getting affected every day, BusinessPunit has a great list of sites which keep them tracked.

Quote:

1. It Died: Editor Glenn Fleishman describes this new hit as “keeping track of hosted services as they lay dying.” The blog does exactly that, potentially protecting people with precious goods in those services from rude discoveries. The commentary is also good.

2. F*ckedStartups:
Reminiscent of the dot-com era’s fabled F*edCompany.com, this snarky blog covers rumors, insider tips, and companies MIA as well as standard layoffs.

3. The Wired.com Tech Layoff Tracker: Real-time headlines, plus a comprehensive tally make this one of the Web’s best go-to resources.

4. TechCrunch’s Deadpool :
This oldie-but-goodie covers key tech demises as well as product deaths, such as Google’s Lively.

4. The Media is Dying (Twitter feed): A self-explanatory, handy feed.

5. Timely Demise: This blog covers retailers, parts suppliers, and other terminally ill companies that sell tangible stuff.

6. Layoff Blog:
Useful, newsy, mainstream coverage.

7. Screwdd:
Very readable media headline and blog coverage. Lots of quoted material, aggregated into a one-stop shop.

8. Gawker.com’s new Layoff Daily: Another media death tracker. Will there be any media left after the layoffs are done?

9. ClickZ’s Digital Marketing Layoff Tracker: This complete chart covers the digital ad-driven niche. Wait…isn’t that our niche?

10. Layoff News: This blog has been covering major layoff headlines since October of this year.

12/11/2008

WinCVS: How to remove sticky tag

I keep on running into this problem. Whenever you submit the file into CVS and force a revision value, it always enforce revision value through sticky tag. The problem with sticky tag is that, when you try to remove the file from CVS, you first need to remove the sticky tag.

How to do this is quite simple. In WinCVS, you first do update by "Update settings" where under tab "Update options" select "Reset and sticky tags/date/kopts". This will remove any existing sticky tags. Then you can "Modify" -> "Remove", then Commiting the file will remove the file from CVS.

12/07/2008

Free online Python programming guides

Erica put together a great Python tutorial site information. If you want to learn Phthon, this can point you to where to start:
Getting a grip on Python: six ways to learn online

Article quote below:

Online Python tutorials

Official Python Tutorial It's hard to go wrong when Python.org provides the tutorial for you. The official tutorial offers an excellent language overview with all the details you could hope for. That being said, the tutorial reads like a language manual, which it is. This may be exactly what you're looking for or something you'd prefer to avoid.

People with passive-voice allergies are advised to grab some Claritin before reading. Here's an actual quote from the write-up "Perhaps the most well-known statement type is the if statement. For example: There can be zero or more elif parts, and the else part is optional. The keyword ‘elif‘ is short for ‘else if’, and is useful to avoid excessive indentation. An if ... elif ... elif ... sequence is a substitute for the switch or case statements found in other languages."

Strengths: Complete and correct coverage.
Weaknesses: Not especially user friendly introduction.

Python Rocks! Kent S. Johnson provides a terrific overview of the Python language—and why you should be excited by it—in his "Python Rocks!" rant on his personal website. His brief language tour covers a lot of the language highlights for anyone who wants to understand the big Python picture before settling down to a core Python tutorial. It's a great place to start to get you in the mood for learning the language.

Strengths: Helps you understand why Python rocks.
Weaknesses: Short, not a full language overview.

Dive Into Python Mark Pilgrim's online book offers a highly regarded survey of the language. First published in 2004, Dive Into Python is considered one of the best comprehensive overviews by some of our Ars staffers. Presented in outline format, the book covers language basics including statements, data types, objects, regular expressions and more. If you have the time to spare, this book offers exhaustive detail. The last chapter, which covers performance tuning, looks like a real gem for advanced programmers.

Strengths: Really detailed
Weaknesses: Slightly dated, with noticeable typos.

A Byte of Python Swaroop C H's online book offers many, many little knowledge chunks. Each page offers a tiny bit of Python knowledge, with clean formatting and good examples. It is not, however, a book that you'll want to sit and read through as there's little narrative flow from this Yahoo! employee. Instead, it works well as a reference. Click through to the if statement, for example, to find out how to put this one statement together or to the tuple page to see examples of grouped data elements.

Strengths: Just the facts.
Weaknesses: Just the facts.

Learning With Python (2nd Edition) For the experienced programmer who's looking to get up and going with a language as quickly, Jeffrey Elkner, Allen B. Downey and Chris Meyers' Learning with Python site (aka, "How to Think Like a Computer Scientist") provides a simple data dump. Expressions, functions, conditionals, iteration, strings and more are covered in short, pointed chapters.

Each of the 11 chapters is presented on a single webpage with lots of well-focused sample code. It's a great resource for anyone who knows object oriented programming and scripting already but needs to quickly produce results in the new language.

Strengths: Direct and to the point; my favorite site
Weaknesses: Misses advanced best practices.

Learning to Program Alan Gauld's "Learning to Program" offers a series of tutorials that assume little or no programming background. Using Python examples, it start with a surey of language basics and then moves on to more advanced topics including event-driven programming and file manipulation, touching on some basic CS introductions to functional programming and recursion.

You'll probably find his "Python in Practice" and "Working with Databases" sections to be valuable, regardless of your background as it covers very practical applied Python. Sadly, his "Writing Web Clients" and "Writing Web Applications" topics are referenced but not available online at this time.

Strengths: Suitable for new programmers
Weaknesses: Some topics are missing in action.