Posts by Nirupam Biswas

I am not the one who goes out a lot, but likes to know about the outside a lot. Likes to make friends, well have lots of them, fortunately. Loves programming, well ‘am still learning.

How to Reset the Root Password of MySql in Linux

I am posting this for my future reference. Also it my help passers by.

If you are using CentOS 6 (maybe others too). To reset the root password use the following steps:-

  1. sudo service mysqld stop
  2. sudo service mysqld startsos
  3. mysql -u root
  4. Now you will be at mysql prompt. Here type:-
    1. UPDATE mysql.user SET Password=PASSWORD(‘NewPassHere’) WHERE User=’root’;
    2. FLUSH PRIVILEGES;
    3. quit;
  5. sudo service mysqld restart

iFlickr PHP Script: Create mRSS feed of interesting pictures on Flickr.com

Did you notice the “Flickr Gallery” on top right corner of the home page of this blog? The picture slide show is provided by Google’s Ajax Slide Show, but this post is not about that. Google’s Slide Show needs a mRSS feed, which it parses to get the list of thumbnails it wants to present. mRSS is just a normal RSS feed particularly tailored for presenting media. It gets its ‘m’ from media. In this case it is picture media. For my blog’s “Flickr Gallery”, I have scheduled a cron job which runs every day at 5.30 am UTC. This way every day my blog gets fresh set of interesting pictures to present. You can get a good example of mRSS feed on my site at http://www.applegrew.com/util/if.xml. Safari and Firefox will use their own styling rules to style this XML. If you want to check it out the way I want it, then view it in Google Chrome.

The Script

This PHP script spits out mRSS feed of the interesting pictures on Flickr.com. This script can be invoked from web or directly from command line. When invoked it connects to Flickr using its API and gets the list and all related infos from there. Flickr likes to call this list – Flickr Interestigness.

Download package (License GPL v2)

How to use this script

This scripts accepts a number of parameters:-

  • api_key (Default: NoKeyGiven) – The Flickr API key. Get it from here.
  • pg (Default: 1) – Which page to fetch. This is to help you paginate if that makes sense for you.
  • per_pg (Default: 10) – How many pictures you want per page. So, if you want 11th to 20th most interesting pictures then set pg to 2 and per_pg to 10.
  • thumbnail_type (Default: , i.e. not set) – Possible values are – SquareThumbnail, Small, Medium or *Large. *The picture of the type set here is set as thumbnail picture. If the type specified is not available then no thumbnail is mentioned. If this is not set then all possible picture sizes would be listed as thumbnails in the feed, with the bigger pics at the top.
  • min_size (Default: 0, i.e. not set) – If set (i.e. it is not set to zero) then the pic which is equal or just larger than this dimension will be chosen as thumbnail.

This script can be run from command line as shown below:-

$ /usr/bin/php iflickr.php --api_key=key_here --min_size=240 > mrss.xml

When run from web:-

http://example.com/iflickr.php?api_key=key_here&min_size=240

Please note: To be able to run this from web, you need to set $bind_address variable in the script as empty string.

Script that notifies via email when your server has updates

If you are the administrator of a server then you definitely understand the importance of keeping your system updated always.

The following script will send you a mail whenever your server needs an update. The content of the mail will list out all the available updates.

The script

[code lang=”shell”]
#!/bin/bash
# Author: AppleGrew
# Site: www.applegrew.com
# License: GPL v2

yum check-update > /tmp/checkupdate.log
if [[ $? == 100 ]]
then
mail -s "New YUM updates available" -r admin@example.com $MAILTO < /tmp/checkupdate.log
fi
[/code]

Notes:

  • This script has been tested on CentOS 6 but should run on all RedHat based systems.
  • In the above script, change admin@example.com to any valid email id which your server is authorized to send. This the email id for the ‘From’ field. For example you can not set this to (say) someone@gmail.com. Since Google did not authorize your server to send emails on behalf of gmail.com.

Installation notes

  • Copy this script to some directory in your server and give it execute permission.
  • Now schedule a cron job for this script. You can set this job for any user, since this script does not need root privileges.
  • In the cronjob make sure to set the MAILTO environment variable. The script uses this variable to determine the recipient of the notification.

Example cronjob

[code lang=”plain”]
MAILTO=yourmail@email.com
0 0 * * * /home/user1/checkupdate.sh
[/code]

Digit Math Application: Proving that all numbers ending with 5 are divisible by 5


Please read Digit Math: Introduction before you continue.

The problem

It seems I have developed a fascination for the number 5, so here we go again. Here I would be using Digit Math to prove that all integers  which end with digit 5 are always divisible by 5.

The proof

Case 1:

Take a two digit number \(x\omega 5\), i.e. \(x\) has only one digit.

\(x\omega 5\) is divisible by 5, if \(x\omega 5 \times \frac 1 5\) (i.e. \(x \omega 5 \times 0.2\)) leave no remainder.

So, \(x\omega 5 \times 2\) must end with one zero.

$$
\begin{align}
&x\omega5 \times 0\omega2\\
&= 0 \omega 2x \omega 10\tag{Using Bimultiplication}\\
&= (2x + 1) \omega 0\tag{1}
\end{align}
$$

Since (1) ends with zero so it is proved.

Case 2:

\(x\omega 5\) is a number where \(x\) has \(n\) digits.

Multiplying \(x\omega 5\) by \(10^{(n-1)}\) to make both sides of \(\omega\) equal in number of digits.

So,

$$
\begin{align}
&x\omega (5 \times 10^{n-1}) \times 0 \omega (2\times 10^{n-1})\\
&= 0 \omega (2x\times 10^{n-1})\omega (10\times 10^{n-1})\\
&= (2x\times 10^{n-1})\omega 10^n\\
&= (2x\times 10^{n-1} + 1) \omega ]0[^n\tag{Moving extra 1 to left}
\end{align}
$$

In the above equation it is easy to see that the result ends with \(10\) after we divide the \(10^{n-1}\). Therefore, this is not going to leave any remainder. (Proved)

Case 3:

\(\frac 5 5 = 1\). (Proved)

Yeah, this is a trivial case, but for the sake of completeness.

Check out other applications of Digit Math

Link to list of other applications of Digit Math.

Digit Math Application: Proving the correctness of shortcut method to squaring numbers ending with 5


Please read Digit Math: Introduction before you continue.

The problem

Someday, somewhere I came to know that any number which ends with the digit 5 can be easily squared. The trick can be easily demonstrate using an example. Suppose we want to find the square of 25.

Trick is to take the number before 5 (which will be 2 here), add one to it (2 + 1 = 3) and then multiply them together (2 x 3 = 6). Now the final answer would be the product followed by the number 25, i.e. 625 in this case.

Now let’s try it out yo find \(215^2\).

$$
\begin{align}
215^2 &= (21 \times (21 + 1)) \omega 25\\
&= (21 \times 22) \omega 25\\
&= 462\omega25\\
&= 46225\tag{Answer}
\end{align}
$$

This always seemed to work out very well. The problem was, can I trust this trick? Will this always hold true? I didn’t have answers to those questions, until I proved it myself using Digit Math. Good news is that this trick will always hold true.

The proof

Let the number be \(x = a\omega 5\).  \(a\) can have any number of digits.

Case 1:

\(a\) has exactly one digit. So, \(]a[ = ]5[ = 1\).

$$
\begin{align}
\therefore (a\omega 5)^2 &= aa\omega (5a+5a) \omega 5.5\tag{Using Bimultiplication formula}\\
&= a^2 \omega 10a \omega \underline{2}5\\
&= a^2 \omega (a\omega0) \omega \underline{2}5\\
&= a^2 \omega (a\omega2) \omega 5\\
&= (a^2 + a) \omega 2 \omega 5\\
&= \big(a(a+1)\big) \omega 25\tag{Proved}
\end{align}
$$

Case 2:

\(a\) has more than one digits. So, \(]a[ > (]5[ = 1)\).

But to apply Bimultiplication formula \(a\) must have the same number of digits in \(5\), which is obviously not the case here. So, we will use one trick. We will pad \(5\) with some number of zeroes on the right, so that, \(]a[ = ]5\omega c[\), where, \(c\) is all zeroes and \(]c[ = ]a[ – 1\). So, if \(a = 123 \Rightarrow c = 00\).

$$
\begin{align}
\therefore (a\omega 5)^2 &= \big(a \omega ]5 \omega c[^{]a[}\big)^2\\
&= a^2 \omega \big(a(5\omega c) + a(5\omega c)\big) \omega (5\omega c)^2\tag{Using Bimultiplication}\\
&= a^2 \omega 2a(5\omega c) \omega (5\omega c)^2\\
&= a^2 \omega (10a \omega 2ac) \omega (5\omega c)^2\\
&= a^2 \omega (10a \omega c) \omega (5\omega c)^2\tag{Since, c is all zeroes}\\
&= a^2 \omega (a \omega 0 \omega c) \omega (5\omega c)^2\\
&= a^2 \omega (a \omega 0 \omega c) \omega (25 \omega 10c \omega c^2)\\
&= a^2 \omega (a \omega 0 \omega c) \omega (25 \omega c \omega c)\tag{1}
\end{align}
$$

Since each digit group must have \(]a[\) digits, so let us move one zero from the middle \(c\) in \(25 \omega c \omega c\) to the rightmost \(c\). So, now that group becomes \(25\omega d\omega e\), where \(]d[ = ]c[ – 1\) and \(]e[ = ]c[ + 1\).

$$
\begin{align}
\therefore (1) &= a^2 \omega \big( (a \omega 0 \omega c) + (25 \omega d)\big) \omega e\\
&= a^2 \omega \big( a \omega (0+25) \omega (c+d) \big) \omega e\\
&= a^2 \omega ( a \omega 25 \omega d ) \omega e\tag{2}
\end{align}
$$

Now,

$$
\begin{align}
]25 \omega d[ &= ]25[ + ]d[\\
&= 2 + (]c[ – 1)\\
&= 2 + \big((]a[ – 1) – 1\big)\\
&= ]a[
\end{align}
$$

So, in the group \(a \omega 25 \omega d\), \(a\) is excess.

$$
\begin{align}
\therefore (2) &= (a^2 + a) \omega (25 \omega d) \omega e\\
&= a(a+1) \omega 25 \omega d \omega e\\
&= a(a+1) \omega 25 \omega c \omega c\tag{Shifting a zero from e to d}\\
\end{align}
$$

So finally,

$$
\begin{align}
&(a\omega 5 \omega c)^2 = a(a+1) \omega 25 \omega c \omega c\\
&\Rightarrow \big((a\omega 5) \times 10^c\big)^2 = \big(a(a+1) \omega 25 \omega c\big) \times 10^c\\
&\Rightarrow (a\omega 5)^2 \times 10^{2c} = \big(a(a+1) \omega 25\big) \times 10^{2c}\\
&\Rightarrow (a\omega 5)^2 = a(a+1) \omega 25\tag{Proved}
\end{align}
$$

So, we see that this trick is applicable for all kinds of whole numbers that end with 5. 

Check out other applications of Digit Math

Link to list of other applications of Digit Math.

Digit Math Application: Proving that multiplying with 10**n puts n zeros at the end


Please read Digit Math: Introduction before you continue.

The problem

This is a very fundamental concept that we were taught when we were in junior schools. Now, think of it, what it says. If you add \(x\) ten times then you will get \(x\omega0\). If you add \(x\) hundred times then you will get \(x\omega00\); and so on. How do we know that this will always be true? We know it since we have never seen one violation of it, but, anyway I will try to prove it know to rest the uneasy souls.

The proof

Before I continue with this proof, I must make sure we understand another empirical rule.

When any number is multiplied by zero then the result is always zero. This is not hard to see why. When you multiply \(x\) by \(2\) then it is like adding \(x\) twice. When you multiply \(x\) by \(1\) then it is like adding \(x\) once. When you multiply \(x\) by \(0\) then it is like adding \(x\) zero times, which in other words is that we never added \(x\) in the first place so \(x\) never existed, so we had nothing, and that nothing is zero.

Back to proof.

Let the number \(a\omega b\) be multiplied by \(1\omega d\), where \(d\) is all all zeroes, \(n\) times. To use Bimultiplication forumula we need to make sure that \(b\) too has \(n\) digits. We can always partition a number such that \(b\) will always have \(n\) digits. For example if \(d = 000\) and \(a\omega b = 2\) then we make \(a = 000\) and \(b = 002\).

So,

$$
\begin{align}
& a \omega b \times 10^d\\
&= a \omega b \times 1 \omega d\\
&= a.1 \omega (a.d + b.1) \omega b.d\tag{By Bimultiplication}\\
&= a \omega (d + b) \omega d\tag{Since d is all zeroes}\\
&= a \omega b \omega d\tag{Since d is all zeroes}
\end{align}
$$

So, in the above equations we see that multiplying a number by \(10^d\) will give us the same number, but followed with \(d\) zeroes. (Proved)

Check out other applications of Digit Math

Link to list of other applications of Digit Math.