Wednesday, November 12, 2025

The Vanishing Art of Handwriting in the Age of Printing and Digital Text

 There was a time, not so long ago, when the beauty of one’s handwriting was a mark of pride — a silent signature of personality, discipline, and refinement. A page filled with graceful curves and steady strokes could evoke admiration as easily as a well-composed poem. Teachers praised neat penmanship, offices prized clerks who could write swiftly yet beautifully, and calligraphers were sought after for their artistry in drafting certificates, scrolls, and invitations.


Handwriting, in those days, was more than communication — it was craftsmanship. Each letter carried the rhythm of breath and the pressure of the hand, each curve a trace of the writer’s mood and temperament. To read a handwritten page was to feel a presence — a living connection between the author’s thoughts and the reader’s eyes.


But the march of technology, steady and unrelenting, began to change the way words met the page. The typewriter first replaced the nib, trading individuality for efficiency. Then printing presses, and later computers, made uniformity the new virtue. What once required hours of careful movement could now be reproduced in seconds, flawlessly identical each time. Words became perfectly formed — and strangely lifeless.


Today, in offices and schools alike, handwriting has receded into the background. Certificates are printed by machine, signatures are digital, and correspondence lives inside glowing screens. The art that once earned admiration, and sometimes even employment, has become an afterthought — a nostalgic echo in an age of keyboards and touchscreens.


And yet, handwriting has not vanished entirely. In a quiet corner of modern life, it continues to bloom — in the hand of an artist tracing elegant calligraphy on wedding cards, in a student’s careful journal, or in a handwritten note slipped inside a gift. There is something deeply human about ink meeting paper — something no font can replicate. Each imperfection, each uneven curve, reminds us that we are not machines.


Perhaps this is why handwritten letters still move us. They carry the warmth of human touch, the sincerity of time spent, and the unspoken beauty of impermanence. The digital word may dominate our screens, but the handwritten word still lives — fragile, graceful, and profoundly personal — like a candle that refuses to be extinguished by the bright light of technology.

Saturday, March 27, 2021

 6174 is known as Kaprekar's constant. My friend Ayaz, had shared this with me. I thought of writing a program in python to check and find out the number with the max interations to reach 6174. The program is here. You can read more about Karekar's constant in the wiki article. Click here



def allnums(n):

    res = [int(x) for x in str(n)]

    if (res[0]==res[1] & res[1]==res[2] & res[2]==res[3]):

        return (0)


def kaprekar(m):

    lp=0

    n=m

    while (n != 6174):

        integers = [int(x) for x in str(n)]

        integers.sort(reverse=True)

        strings = [str(integer) for integer in integers]

        a_string = "".join(strings)

        a = int(a_string)

        if a < 1000:

            a=a*10

        integers.sort()

        str2 = [str(integer) for integer in integers]

        str3 = "".join(str2)

        b = int(str3)   

        n=a-b

        lp=lp+1

    return(lp)

######################################## program starts here

mx=0

mxn=1000

for x in range(1000,9999):

    if allnums(x)!=0:

        y=kaprekar(x)

        if (y > mx):

            mx=y

            mxn=x

print(mx,mxn)




==========================================================================

Run the program and the output is

7 1004

1004 is the first number that needs 7 iterations to reach 6174.


Sunday, April 05, 2020

R : A crash course for programmers - Chapter01

It was an idea for quite some time to write a blog on R, for the benefit of programmers. Basically Sr Managers in the organizations who were programmers or have good coding experience some time in their life.

How can R be used by them easily. The next series of blogs will be on R.

The contents are available in a book form, leave your email in comments and I will mail the book to you. (PDF)
=========================================================================

Chapter 1 Vectors


2.1 Introduction


Unlike in other programming languages in R the following are the differences.

a.    We don’t use the word variables, rather we use the word vectors. A vector is a data structure.

b.    In other programming languages for instances we have numbers (int and floats) and arrays etc. Where as in R everything is an array. So a number is essentially an array with a single element.

Let us take some examples.

> a<-10 span="">
> b<-c span="">
> a
[1] 10
> b
[1] 10
> class(a)
[1] "numeric"
> class(b)
[1] "numeric"

Vector a is defined as a number, where as b is defined as an array. But both are treated as an array of one number.
The class() function determines type of the array.
<- a="" and="" assign="" hyphen.="" is="" less="" operator="" span="" than="" the="" to="" value="">
> a[1]
[1] 10
> b[1]
[1] 10

As a proof that both are the same description we can try to print the first element in the array. Note a also behaves like an array because it is one.








2.2 Operations in R.




R is rich in operators. Operators can evolve to a numeric value or to a logical value. Just as I told earlier all variables are essentially arrays, so a operator works on an array jus like a number.

Look at the following examples.

> a<-10 b="" c="" span="">
> a;b
[1] 10
[1] 10 20 30
> a+10;a*10;a^2;a%%3
[1] 20
[1] 100
[1] 100
[1] 1
> b+10;b*10;b^^2;b%%3
[1] 20 30 40
[1] 100 200 300
> b+10;b*10;b^2;b%%3
[1] 20 30 40
[1] 100 200 300
[1] 100 400 900
[1] 1 2 0

The ; can be used to separate multiple commands to be issued in the same row.
The arithmetic operators +, - * , / are self explanatory. ^ is for the power of.
a^2 here means a2

%% is the modulus operator, it gives the remainder. 
> a>10;b>10
[1] FALSE
[1] FALSE  TRUE  TRUE

Logical operators are supported as well. >, >=, <. <=, !=.
The logical operators return a logical output.






2.3 Name in R.




The elements of a vector are accessed by using integers. The first item is at index 1. R is more interesting in one aspect and that is naming. You can name a vector’s columns. And then you can use those names for accessing the items. Look at the following examples to understand more. Remember any line that begins with a # is treated as a comment.

> sales<-c span="">
> sales
[1] 120 190  90
> sales[1]
[1] 120
> sales[3]
[1] 90

Here the sales vector is defined with three numbers. You can check by entering class(sales) and you get an output NUMERIC.
The elements are accessed using numbers 1,2… etc.
> names(sales)<-c an="" ar="" eb="" span="">
> sales
Jan Feb Mar
120 190  90

The names function gives names to the columns. Since we have three columns in the sales vector, we give three names. (Jan, Feb and Mar).
> max(sales)
[1] 190
>
> sales==max(sales)
  Jan   Feb   Mar
FALSE  TRUE FALSE

The max is an inbuilt function that goes thru the vector (sales) and lists the column that has the max value.
When you list the sales vector with sales==max(sales), it gives us a logical vector with TRUE/FALSE values.
> sales[max.sales]
Feb
190
> class(sales)
[1] "numeric"
> class(max.sales)
[1] "logical"

Here we create a new logical vector called max.sales. Remember that vector names can have . or _ or lower/upper case characters.
The sales[max.sales] is used to display that column that has the TRUE value.





That brings an end to chapter 1.

The next page has some exercises for you to try.




2.4 Exercises




1.     Download the R. Goto the following web site to download R.


b.   

c.     Create a folder called c:\R

d.     Install R in this folder.

e.     You don’t need anything else for the time being, There are some good IDE for you to work, one of them is R Studio. You can download it from https://rstudio.com/products/rstudio/download/

f.     Choose the R studio desktop free version and install it in the c:\R folder

2.    Run the R.exe from the C:\R\R-3.6.3\bin, if you installed it in c:\R

a.    You can do all the remaining questions from here. If you use R studio then you can do the exercises from here.

b.   

c.     Increase the size of “Console” window and you can do the exercises from here. If you run R.exe then the screen looks like this

d.    

e.     The back ground is black and fonts are small by default. Right click on the title bar, goto to properties

f.    

g.    You can set the colors and fonts from here.

3.   Questions that you need to do.

a.    You can run the sample code that I used during the chapter to test if you see the same output as the one I have shown.

b.    Declare a numeric vector called train.late with the following (12, 16, 14, 21, 3, 19,9)

c.     Give a heading from Mon to Sun.

d.     Assuming that the numbers are in minutes, find the following

                                          i.    On which day was the train min late

                                         ii.    On which day was the train max late.

                                        iii.    What is the average late in minutes for the train.

                                       iv.    On which days was the train more than 10 minutes late

e.     Find the value of the following equations

                                          i.    32+64

                                         ii.    32+25*4

                                        iii.    32-(25+16)*12

                                       iv.    Remainder of 100 divided by 9.

f.     Create a nums.list vector with the following numbers 1,2,3,4

g.    Create a nums.list2 with the following numbers 2,4,6,8

h.    Find the following

                                          i.    Nums.list + nums.list2

                                         ii.    Nums.listnums.list2

                                        iii.    Nums.list2nums.list


4.  You define x<- span="">

a.    What is the output of sort(x)?

b.    What if you want the output in reverse order (max to min)?