OS X – How to Search For a Substring Inside of GZIP and BZ2 Files

This tip is really a generic *Nix command so it should not only work in OS X but also in other flavors of UNIX such as Linux.

In OS X a lot of the log files are auto-archived into compressed GZIP files in Tiger (Mac OS X 10.4) and BZ2 files in Leopard (Mac OS X 10.5). If you need to search for an occurrence of a word or other string of text in a compressed GZIP file, you can use the following terminal command:

zgrep someString theLogFileName.log.gz

As an example, say you want to search for the word “error” in a compressed system log in Tiger. To do this you would launch the Terminal application and run the command:

zgrep error /var/log/system.log.0.gz

Alternatively you can search all compressed system log files in a single command by using an asterisk (*) as a “wild card” character:

zgrep error /var/log/system.log*

Leopard uses the BZ2 compression scheme for most of its log files and you can similarly search those files by using the bzgrep command. For example, say you wanted to search all the application firewall logs for instances of the word “connection”. To do this you would run the following command in the Terminal application:

bzgrep connection /var/log/appfirewall.log*

If you need to search for a string that consists of more than one word separated by spaces, you would need to surround the search string in quotation marks:

bzgrep "connection attempt" /var/log/appfirewall.log*

Sherlock

PHP – How to Display REQUEST, POST, and SESSION Variables

Here is some quick and dirty PHP code to display all request variables available to a page. This is useful while debugging:

foreach($_REQUEST as $var=>$val)
{
   echo "$var=$val";
}

Replace _REQUEST with _POST or _SESSION and you can see those variables too.

Code

C# – How to Create an MD5 Hash

MD5 hashes are useful for when you need a string of characters that will always be generated given the same input. MD5 hashes are used to uniquely identify files based on their contents and they have also been used to store passwords in an “encrypted” format.

A word of caution on using MD5 hashing to store passwords in a database is that there exists searchable online databases of strings to MD5 hash mapping which allow someone to do a reverse lookup of what a password is by looking up the MD5 hash to plain text password mapping. So if you are relying solely on a straight MD5 hashing to store you password in a database you may want to consider doing something else such as applying a salt to the resultant hash string before you store it in the database.

Here is sample C# code to generate an MD5 hash from a string:

string password = "foo";
System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bs = System.Text.Encoding.UTF8.GetBytes(password);
bs = x.ComputeHash(bs);
System.Text.StringBuilder s = new System.Text.StringBuilder();
foreach (byte b in bs)
{
   s.Append(b.ToString("x2").ToLower());
}
password = s.ToString();

MD5 Algorithm

CentOS – How to Configure the Software Update Application to Use a Proxy Server

To get the Software Update application in CentOS to use a web proxy server, add the following line to the /etc/yum.conf file:

proxy=http://www.theProxyServer.com:port/

Replace “www.theProxyServer.com:port” with the URL and port number of the proxy service running on the proxy server. The “/” at the end is important so don’t forget to add it.