Tuesday, May 2, 2023

Steps to install PyTorch on VMware workstation (Ubuntu guest)

 The following is the list of steps to install pytorch 2.0 in VMware workstation (Ubuntu guest):

$ mkdir ~/pytorch

$ mkdir ~/pytorch/assets

$ cd ~/pytorch/

$ python -m venv pytorch


Above gave error as venv was not installed, so ran:

$ sudo apt install python3.10-venv


again run:

$ python -m venv pytorch

$ source pytorch/bin/activate


Upon running the above command the prompt will change to:

(pytorch) $


Now run the following (use the current versions at your time):

(pytorch) $ pip install torch==2.0.0+cpu -f https://download.pytorch.org/whl/torch_stable.html


You may need to change the html link given above if some error occurs

Tuesday, April 18, 2023

ChatGPT and NLU and intent

Inspired by a tweet by @gokulr, I tried continuing the chat a bit further. The first two questions are similar to the ones by him.

I guess it is still struggling with intent. How much this can be worked upon is yet to be seen. 

Monday, April 10, 2023

FIX - Touchpad issue on HP Pavilion x360 convertible 14 with Windows 11

My HP Pavilion x360 laptop with Windows 11 had a nasty touchpad issue last week. The touchpad stopped working suddenly after the laptop was unlocked or came out of hibernation. It worked when OS was restarted, but soon thereafter it kept on getting disabled. Even the Bluetooth and other devices -> Touchpad option was gone. There was no Touchpad enabling option anywhere in the system. Had to use the touchscreen for navigation as the pointer/cursor also vanished when this used to happen. Searched all over the web with no solution... until today.

Found a fix that seems to be working with no vanishing touchpad issues anymore. It is simple on this system.

Go to device manager -> Human Interface Devices

Among the two I2C drivers, one icon was showing issue. Tried disabling and enabling using right click ...but it didn't solve the issue. Then uninstalled that driver and rebooted. It gets reinstalled on reboot, and the annoying issue is finally resolved. 

If the above process does not work, then try this:

First disable I2C HID Device, then Disable HP-compliant system controller, then enable I2C HID Device. It works for me!  🙌

Thursday, March 30, 2023

Critical section code

 Many students of Operating Systems get confused on some simple concepts such as critical section. Instead of memorizing the definition of critical section, it is better to understand it with the help of a simple example.

Suppose there is a global variable that may be accessed (i.e. read/write) by two or more threads at the same time, then the part where the two threads read/write the value of the variable needs protection. It simply means that only one thread should be able to read or update the value at a time. Otherwise, the value of the variable may end up wrong. Let us understand this problem with an example:

Let's say there is a global variable int x (with initial value 0)

Now, if you want to increment the value of the global variable two times using two threads T1 and T2. the expected value of x at the end of two increments is 2.

Now the following sequence of event may happen (with the action result after the --> ):

T1 reads value of x --> reads 0

T2 reads value of x --> reads 0

T1 increments x --- > x becomes 1

T2 increments x --- > x becomes 1 because T2 had also read 0

So, the final value of global variable x is 1, not 2. This was not what was expected. The part of the code where the two threads accessed the value of x is a critical section that needs protection.

As mentioned earlier, the critical section needs to be protected from simultaneous access by multiple threads. Mutex is a simple locking mechanism to do that. A mutex is nothing but a lock. Before entering the critical code, a thread must acquire the lock. If the lock is unavailable, the thread must wait (it is blocked). A lock is unavailable when some other thread has already acquired the lock. When the other thread goes out of critical section code, it must release the lock (unlock). The waiting thread can then enter the critical section. The above sequence of events then becomes:

T1 request the lock --> acquires lock

T1 reads value of x --> reads 0

T2 requests the lock --> blocks

T1 increments x --- > x becomes 1

T1 releases the lock --> lock released

                                --> T2 acquires the lock now

 reads value of x --> reads 1

T1 increments x --- > x becomes 2

We can see that the threads are now properly updating the global variable. The lock/unlock process is part of the program and it is the programmer's responsibility to write the code for requesting/releasing the lock. This post has become a bit long. Will give a concrete C example in the next blog. Stay tuned!

Thursday, March 23, 2023

Resources to learn NLP

Q. Which youtube videos and blogs should I start with to learn NLP?

ChatGPT answers:

There are many great YouTube videos and blogs that can help you get started with learning Natural Language Processing (NLP). Here are a few resources to consider:

  1. YouTube Channels:
  • Natural Language Processing with Python by sentdex
  • NLP Tutorial using Python NLTK (Natural Language Toolkit) by Edureka
  • Deep Learning for Natural Language Processing by Stanford University
  1. Blogs:
  1. Courses:
  • Natural Language Processing with Python on Udemy
  • Applied Natural Language Processing on Coursera by University of Michigan
  • Deep Learning for Natural Language Processing on Coursera by National Research University of Higher School of Economics

It's important to note that NLP is a vast field with many different sub-topics and techniques. It may be helpful to start with an introductory course or tutorial to gain a broad understanding of the field, and then dive deeper into specific topics that interest you. Good luck with your NLP learning journey!

Wednesday, March 22, 2023

After hibernating for more than a decade, I am rebooting this blog...


In what ways should the teachers of computer science update themselves to handle challenges posed by AI based teachers ? 

ChatGPT answers:

The emergence of AI-based teaching tools is changing the landscape of education, including computer science. In order to handle the challenges posed by AI-based teachers, computer science teachers should consider the following:

  1. Stay up-to-date with the latest advancements in AI and machine learning: Teachers should stay informed about the latest advancements in AI and machine learning to understand how these technologies can be used to enhance teaching and learning.

  2. Incorporate AI-based teaching tools into their teaching practice: Teachers should be familiar with AI-based teaching tools and how they can be used to supplement traditional teaching methods. They can incorporate these tools into their lessons to provide students with personalized learning experiences.

  3. Embrace a growth mindset: Teachers should be open to learning new skills and techniques to incorporate AI-based teaching tools into their practice. They should embrace a growth mindset and be willing to experiment with new technologies and teaching methods.

  4. Focus on developing critical thinking skills: While AI-based teaching tools can provide students with personalized learning experiences, it is important for teachers to continue to focus on developing critical thinking skills. Teachers should encourage students to question and analyze information they receive, including information presented by AI-based teaching tools.

  5. Collaborate with other teachers and experts: Teachers should collaborate with other computer science teachers and experts in the field of AI and machine learning. This collaboration can help teachers stay up-to-date with the latest advancements and best practices in AI-based teaching.

Monday, April 26, 2010

Deleted Linux partition! How to get back into Windows?

Recently one of my computers' Linux partition was deleted by mistake. As the Linux partition held the multi-boot information, it made the computer stuck at grub prompt with no way of knowing where to load the OS images from. I think that is known as grub stage 2. I was able to find grub commands and successfully booted into Windows XP. So, if Linux partition of your multi-boot system is inadvertently deleted and you are stuck at grub prompt without access to Windows cd, then try this list of commands at grub prompt

grub> root(hd0, 0)
grub>chainloader +1

Note the first command " root(hd0, x) "here x could be a different number on your system...mine worked for 0.
This booted the Windows XP on the computer. But each time the computer is restarted after this, it's stuck at grub prompt and you have to follow the same list of commands. Another search and I found and installed a very nice utility called "mbrfix". Booted Windows and ran the utility; it created the master boot record (MBR) for Windows and fixed the problem and I could reboot without any problem.

Alternatively, I have read that if you have access to Windows cd, booting from it and running command "fixmbr" also does the trick.

Monday, March 29, 2010

Wubi and Ubuntu

I was trying out Wubi installer for Ubuntu. What it does basically is install Ubuntu on a Windows file system. It creates a windows file and makes it look like a hard disk to Ubuntu i.e. a virtual hard disk. So, while Ubuntu is installing on windows file system (loopback mounting), Windows need not boot if we want to work on Ubuntu. We are using Windows file system but not booting Windows as a host. Ubuntu is running on its own.The installation creates an entry in boot.ini file so that Ubuntu can be booted up as a separate OS just like a dual-boot system. Also, the installation shows up as an installed application on Windows, so if you need to remove Ubuntu, remove it as any Windows program. This is good for newbies as it saves them from the hassles of partitioning the disk.

Another cool thing about having Ubuntu on the system is that I can use my mobile broadband that is available in modem right out of the box. No need to configure or install any extra softwares. Just go to network connections, select the provider from the list, and the Ubuntu is ready to use the usb modem. Just enable it with a click of mouse. Very neat!

Friday, February 26, 2010

A probabilistic solution to the Two Generals problem

Here is a probabilistic solution to the two General's problem; it gives a high probability of succcess if the number of messages(messengers) is kept high.

The two General's problem is a problem of synchronization between two army Generals. They have surrounded an enemy
army that is more powerful than any one of the two armies. But together the two armies outnumber the enemy and can win. The problem is that the two Generals are far enough from each other and can't communicate with each other except by sending messengers. The messengers have to move through enemy line. The messengers can either get caught or reach the other General with a message.How would the army Generals agree on a time to attack? If they don't synchronize their attack, the enemy will win. The receiver General has to send an acknowledgment back to the first General now. The acknowledgment has to be sent through a messenger. The messenger again has a possibility of getting caught by the enemy. To acknowledge the receipt of acknowledgment, a messenger has to be sent again. Thus, the cycle of acknowledgments will continue...

Let's make some assumptions before discussing a solution to this problem:


A1- Each messenger has 50% chance of reaching the other General with the message.
A2- We will expect a 99.999 % chance of agreement between the Generals as sufficient enough.
A3- Each General sends an equal number of messengers.

Now, the chance of a messenger reaching the other General is 50%; it means the chance of failure is also 50%. If a General sends N messengers, the probability that none of them will reach the other General is (0.5)^N. So, the probability that at least one of the messengers will reach the other General is 1-(0.5)^N.

So, the probability that at least one messenger from each General will reach the other General is (1 - (0.5)^N)^2. When at least one messenger from a General reaches the other General with a time to attack, and an acknowledge from the other General reach the first one the message+acknowledgment is complete and there is an agreement.

We are taking the probability of 99.999% as success.
So, (1-(0.5)^N)^2 > 0.99999
or, (1-(0.5)^N) > 0.999995 (thanks to the calculator that is present in Google search, "square root of .99999" and search)
or, 0.5^N > 0.000005
or, N = 17

So, if a General sends 17 messengers one after the other with a message, and the other General replies with 17 messengers with acknowledgment, we have a greater than 99.999% probability of an agreement on the time to attack. Increasing the number of messengers increase this probability even more.

Thursday, July 23, 2009

Redirection and 2>&1

In Unix, one often finds a input and output redirection "<", ">", ">>". These are simple to understand.

Users can also do redirect one stream into another stream. This is done by using standard file descriptors. So, if someone wants to redirect all standard errors to whereever standard output is going, add 2>&1 in the end of the command. 2>&1 means send the standard errors to where standard output is going. 2 is the default file descriptor for stderr and 1 for stdout. If certain command is redirecting stdout to, say some file, stderr still goes to default screen. If you want stderr also to be sent to the file where stdout is going, use 2>&1.
Similarly, you can also redirect stdout to whereever stderr is going by 1>&2.

Also, remember that "some unix command > some_file 2>&1" is different from "some unix command 2>&1 > some_file". The first one redirects stderr to some_file, whereas the second won't.

Steps to install PyTorch on VMware workstation (Ubuntu guest)

  The following is the list of steps to install pytorch 2.0 in VMware workstation (Ubuntu guest): $ mkdir ~/pytorch $ mkdir ~/pytorch/as...