<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-1746745451277571533</atom:id><lastBuildDate>Sat, 23 May 2026 15:27:34 +0000</lastBuildDate><category>Solaris</category><category>Linux</category><category>Unix</category><category>programming</category><category>Computer</category><category>Internet</category><category>Mac OS X</category><category>humor</category><category>tips</category><category>OpenSolaris</category><category>Sun</category><category>Windows</category><category>Firefox</category><category>Google</category><category>Microsoft</category><category>ZFS</category><category>Apple</category><category>C++</category><category>Gmail</category><category>JavaScript</category><category>NLP</category><category>Niagara</category><category>Novell</category><category>OpenOffice</category><category>Ubuntu</category><category>UltraSparc T2</category><category>Video</category><category>careers</category><category>command</category><category>critical section</category><category>distributed</category><category>general</category><category>kernel</category><category>links</category><category>salary</category><category>security</category><category>shell</category><category>software engineer</category><category>teaching</category><category>touchpad windows 11</category><title>Computers, Technology, and Anything in Between</title><description>I write mostly about technology.</description><link>http://osgeek.blogspot.com/</link><managingEditor>noreply@blogger.com (osgeek)</managingEditor><generator>Blogger</generator><openSearch:totalResults>56</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-4517851192667249008</guid><pubDate>Tue, 02 May 2023 10:08:00 +0000</pubDate><atom:updated>2023-05-02T15:38:07.185+05:30</atom:updated><title>Steps to install PyTorch on VMware workstation (Ubuntu guest)</title><description>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;, serif; font-size: 12pt;&quot;&gt;The following is the list of steps to
install pytorch 2.0 in VMware workstation (Ubuntu guest):&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;$ mkdir ~/pytorch&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;$ mkdir
~/pytorch/assets&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;$ cd ~/pytorch/&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;$ python -m venv
pytorch&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; line-height: 107%; mso-ascii-theme-font: major-bidi; mso-bidi-theme-font: major-bidi; mso-hansi-theme-font: major-bidi;&quot;&gt;Above gave error as venv was not
installed, so ran:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;$ sudo apt install
python3.10-venv&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; line-height: 107%; mso-ascii-theme-font: major-bidi; mso-bidi-theme-font: major-bidi; mso-hansi-theme-font: major-bidi;&quot;&gt;again run:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;$ python -m venv
pytorch&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;$ source
pytorch/bin/activate&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; line-height: 107%; mso-ascii-theme-font: major-bidi; mso-bidi-theme-font: major-bidi; mso-hansi-theme-font: major-bidi;&quot;&gt;Upon running the above command the
prompt will change to:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;(pytorch) $ &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; line-height: 107%; mso-ascii-theme-font: major-bidi; mso-bidi-theme-font: major-bidi; mso-hansi-theme-font: major-bidi;&quot;&gt;Now run the following (use the
current versions at your time):&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; line-height: 107%;&quot;&gt;(pytorch) $ pip install torch==2.0.0+cpu -f &lt;a href=&quot;https://download.pytorch.org/whl/torch_stable.html&quot;&gt;https://download.pytorch.org/whl/torch_stable.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; line-height: 107%;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; line-height: 107%; mso-ascii-theme-font: major-bidi; mso-bidi-theme-font: major-bidi; mso-hansi-theme-font: major-bidi;&quot;&gt;You may need to change the html link
given above if some error occurs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;</description><link>http://osgeek.blogspot.com/2023/05/steps-to-install-pytorch-on-vmware.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-7813804028701785873</guid><pubDate>Tue, 18 Apr 2023 11:36:00 +0000</pubDate><atom:updated>2023-05-13T11:29:12.242+05:30</atom:updated><title>ChatGPT and NLU and intent</title><description>&lt;p&gt;Inspired by a tweet by &lt;a href=&quot;https://twitter.com/gokulr/status/1647380117893836801?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1647380117893836801%7Ctwgr%5E90cfe5eab4d98297220525a074faac60158f4d67%7Ctwcon%5Es1_&amp;amp;ref_url=https%3A%2F%2Fwww.thepoke.co.uk%2F2023%2F04%2F21%2Ftricked-chatgpt-into-giving-illegal-info%2F&quot;&gt;@gokulr&lt;/a&gt;, I tried continuing the chat a bit further. The first two questions are similar to the ones by him.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhkjkRB7VV909xXKAOoN31bOG4Wx-xgMpd-qneVM8QnyrjG_XlX4DRMnIinU26RCPMHbeqC-HB2L6hcS6XmKjwyy5gs9dGLXj0qkvs5uc9hZXmrWQrIxRBzYgepLFJdi6t_3xmNrImTU-fBce3xkcUw1UuSWkY2uipA9eoMjC17CcM184yCrc_3DkTSqw&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;849&quot; data-original-width=&quot;667&quot; height=&quot;606&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhkjkRB7VV909xXKAOoN31bOG4Wx-xgMpd-qneVM8QnyrjG_XlX4DRMnIinU26RCPMHbeqC-HB2L6hcS6XmKjwyy5gs9dGLXj0qkvs5uc9hZXmrWQrIxRBzYgepLFJdi6t_3xmNrImTU-fBce3xkcUw1UuSWkY2uipA9eoMjC17CcM184yCrc_3DkTSqw=w477-h606&quot; width=&quot;477&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj7Sm7dXipyg-HPC4_-GN1tKtA_YRuG2MAqJi2vSOXo5U9kgXPP4C0VEJHjMbvZyur8z-JuUUzBjWD_zHvmf6WEL_wHB6q5XJWtqoewmvDBLnu4ij_DjsjvHAke1gd_Juvog8esiAr3hqqG4e0SfIeeR3KPch0-TPeXvkcWwK1EgE4i9soCqBNSgBp1cA&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;285&quot; data-original-width=&quot;662&quot; height=&quot;205&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj7Sm7dXipyg-HPC4_-GN1tKtA_YRuG2MAqJi2vSOXo5U9kgXPP4C0VEJHjMbvZyur8z-JuUUzBjWD_zHvmf6WEL_wHB6q5XJWtqoewmvDBLnu4ij_DjsjvHAke1gd_Juvog8esiAr3hqqG4e0SfIeeR3KPch0-TPeXvkcWwK1EgE4i9soCqBNSgBp1cA=w476-h205&quot; width=&quot;476&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh_1D2r5dDZQdSfOZwZqnnFL4hKtNSYggWgO0tPSd4GU7WU5Y7uzcu_31ow75RFIIfXX3oiPTEj3STkBNK-dCv6K6fULUwXS616IVP7zTCGOuu4HD87qov4_KMFTV1VPWSzVRwa8WkPNmoS36jH4HSXGegKLuV_87RNkvUt2-IOKVhk2VqdUX6XHfibbQ&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;486&quot; data-original-width=&quot;666&quot; height=&quot;348&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh_1D2r5dDZQdSfOZwZqnnFL4hKtNSYggWgO0tPSd4GU7WU5Y7uzcu_31ow75RFIIfXX3oiPTEj3STkBNK-dCv6K6fULUwXS616IVP7zTCGOuu4HD87qov4_KMFTV1VPWSzVRwa8WkPNmoS36jH4HSXGegKLuV_87RNkvUt2-IOKVhk2VqdUX6XHfibbQ=w476-h348&quot; width=&quot;476&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiR3tt51E0SmTs4NccagzneyIC3LbSTnv3k1KzArunLT-O6By3PAgj-tewNkRnQbe_7og2Av5HTpg0JrnhC9MHhuwZX0e1AyBvNabHbWRINiyTQ8G8pns1XlmOvO4emFqhlwAxBwHQRGWmBZykOOZFpUdAG1ptkS83k8tUMIqpPihpwWgbdXhG-_OmOxg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;385&quot; data-original-width=&quot;661&quot; height=&quot;277&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiR3tt51E0SmTs4NccagzneyIC3LbSTnv3k1KzArunLT-O6By3PAgj-tewNkRnQbe_7og2Av5HTpg0JrnhC9MHhuwZX0e1AyBvNabHbWRINiyTQ8G8pns1XlmOvO4emFqhlwAxBwHQRGWmBZykOOZFpUdAG1ptkS83k8tUMIqpPihpwWgbdXhG-_OmOxg=w477-h277&quot; width=&quot;477&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg3yOdtPVY3ui83brnfOZwiBTG78W01ANsKakqLsC4RMNlJhhxUDUYdvC7OpZ9r3Hq6Q-gEvzbAQk2-hSoTJD-9iWIgcJ11frhcVqTy1f0F4zJb7bpTyk7iq_LVHmbxbfMjepjkzaNquvywRLfwkCjNcsk_s7tg9n440-g90ji0_0khQVmFdd5TO-GNxQ&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;457&quot; data-original-width=&quot;672&quot; height=&quot;326&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg3yOdtPVY3ui83brnfOZwiBTG78W01ANsKakqLsC4RMNlJhhxUDUYdvC7OpZ9r3Hq6Q-gEvzbAQk2-hSoTJD-9iWIgcJ11frhcVqTy1f0F4zJb7bpTyk7iq_LVHmbxbfMjepjkzaNquvywRLfwkCjNcsk_s7tg9n440-g90ji0_0khQVmFdd5TO-GNxQ=w477-h326&quot; width=&quot;477&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgUaSK9Uk8W-qpORGvJW5Zz8lEVn8zSzKuAtCtu_BkknBLuwfSrvbYvoz9QBU1jajqlg2E0TKno-gfWp5dvgCME9iiqntsShKZTGz931DVDe8Tfo7g6doRHnz_hZ3ZpsQJQ6XTDs9TwOGszZ7HxPnfnaCS7-ntR1eOTjeNsjNceG4MhLgg6Vr9rOcy63Q&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;484&quot; data-original-width=&quot;670&quot; height=&quot;345&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgUaSK9Uk8W-qpORGvJW5Zz8lEVn8zSzKuAtCtu_BkknBLuwfSrvbYvoz9QBU1jajqlg2E0TKno-gfWp5dvgCME9iiqntsShKZTGz931DVDe8Tfo7g6doRHnz_hZ3ZpsQJQ6XTDs9TwOGszZ7HxPnfnaCS7-ntR1eOTjeNsjNceG4MhLgg6Vr9rOcy63Q=w477-h345&quot; width=&quot;477&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I guess it is still struggling with intent. How much this can be worked upon is yet to be seen.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://osgeek.blogspot.com/2023/04/chatgpt-and-nlu-and-intent.html</link><author>noreply@blogger.com (osgeek)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhkjkRB7VV909xXKAOoN31bOG4Wx-xgMpd-qneVM8QnyrjG_XlX4DRMnIinU26RCPMHbeqC-HB2L6hcS6XmKjwyy5gs9dGLXj0qkvs5uc9hZXmrWQrIxRBzYgepLFJdi6t_3xmNrImTU-fBce3xkcUw1UuSWkY2uipA9eoMjC17CcM184yCrc_3DkTSqw=s72-w477-h606-c" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-2699694504029601401</guid><pubDate>Mon, 10 Apr 2023 09:53:00 +0000</pubDate><atom:updated>2023-04-11T12:41:46.872+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">touchpad windows 11</category><title>FIX - Touchpad issue on HP Pavilion x360 convertible 14 with Windows 11</title><description>&lt;p&gt;My HP&amp;nbsp;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 -&amp;gt; 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.&lt;/p&gt;&lt;p&gt;Found a fix that seems to be working with no vanishing touchpad issues anymore. It is simple on this system.&lt;/p&gt;&lt;p&gt;Go to device manager -&amp;gt; Human Interface Devices&lt;/p&gt;&lt;p&gt;Among the two I2C drivers, one icon was showing issue. Tried disabling and enabling using right click ...but it didn&#39;t solve the issue. Then uninstalled that driver and rebooted. It gets reinstalled on reboot, and the annoying issue is finally resolved.&amp;nbsp;&lt;/p&gt;&lt;p&gt;If the above process does not work, then try this:&lt;/p&gt;&lt;p&gt;First disable I2C HID Device, then Disable HP-compliant system controller, then enable I2C HID Device. It works for me!&amp;nbsp; 🙌&lt;/p&gt;</description><link>http://osgeek.blogspot.com/2023/04/fix-touchpad-issue-on-hp-pavilion-x360.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-4500386462675656486</guid><pubDate>Thu, 30 Mar 2023 13:17:00 +0000</pubDate><atom:updated>2023-04-10T15:31:43.483+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">critical section</category><title>Critical section code</title><description>&lt;p&gt;&amp;nbsp;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.&lt;/p&gt;&lt;p&gt;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:&lt;/p&gt;&lt;p&gt;Let&#39;s say there is a global variable &lt;i&gt;int x &lt;/i&gt;(with initial value 0)&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;Now the following sequence of event may happen (with the action result after the --&amp;gt; ):&lt;/p&gt;&lt;p&gt;&lt;b&gt;T1 reads value of x --&amp;gt; reads 0&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;T2 reads value of x --&amp;gt; reads 0&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;T1 increments x --- &amp;gt; x becomes 1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;T2 increments x --- &amp;gt; x becomes 1 because T2 had also read 0&lt;/b&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;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:&lt;/p&gt;&lt;p&gt;&lt;b&gt;T1 request the lock --&amp;gt; acquires lock&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;T1 reads value of x --&amp;gt; reads 0&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;T2 requests the lock --&amp;gt; blocks&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;T1 increments x --- &amp;gt; x becomes 1&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;b&gt;T1 releases the lock --&amp;gt; lock released&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; --&amp;gt; T2 acquires the lock now&lt;/b&gt;&lt;/div&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;reads value of x --&amp;gt; reads 1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;T1 increments x --- &amp;gt; x becomes 2&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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&#39;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!&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2023/03/students-of-operating-systems-get.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-7673360158717794301</guid><pubDate>Thu, 23 Mar 2023 04:55:00 +0000</pubDate><atom:updated>2023-04-10T15:31:52.142+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">NLP</category><title>Resources to learn NLP</title><description>&lt;p&gt;&lt;span style=&quot;background-color: white; white-space: pre-wrap;&quot;&gt;&lt;span face=&quot;Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji&quot; style=&quot;font-family: inherit;&quot;&gt;Q. Which youtube videos and blogs should I start with to learn NLP?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: white; white-space: pre-wrap;&quot;&gt;&lt;span face=&quot;Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji&quot; style=&quot;font-family: inherit;&quot;&gt;ChatGPT answers:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span face=&quot;Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;&quot; style=&quot;font-family: inherit; white-space: pre-wrap;&quot;&gt;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:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; counter-reset: item 0; display: flex; flex-direction: column; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;&quot;&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;YouTube Channels:&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: flex; flex-direction: column; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;&quot;&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;Natural Language Processing with Python by sentdex&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;NLP Tutorial using Python NLTK (Natural Language Toolkit) by Edureka&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;Deep Learning for Natural Language Processing by Stanford University&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol start=&quot;2&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; counter-reset: item 0; display: flex; flex-direction: column; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;&quot;&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;Blogs:&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: flex; flex-direction: column; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;&quot;&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;The Natural Language Processing Blog (&lt;a href=&quot;https://nlpprogress.com/&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1.25em; margin-top: 1.25em; text-underline-offset: 2px;&quot; target=&quot;_new&quot;&gt;https://nlpprogress.com/&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;Towards Data Science (&lt;a href=&quot;https://towardsdatascience.com/tagged/nlp&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1.25em; margin-top: 1.25em; text-underline-offset: 2px;&quot; target=&quot;_new&quot;&gt;https://towardsdatascience.com/tagged/nlp&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;NLP for Hackers (&lt;a href=&quot;https://nlpforhackers.io/&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1.25em; margin-top: 1.25em; text-underline-offset: 2px;&quot; target=&quot;_new&quot;&gt;https://nlpforhackers.io/&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol start=&quot;3&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; counter-reset: item 0; display: flex; flex-direction: column; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;&quot;&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;Courses:&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: flex; flex-direction: column; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;&quot;&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;Natural Language Processing with Python on Udemy&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;Applied Natural Language Processing on Coursera by University of Michigan&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;Deep Learning for Natural Language Processing on Coursera by National Research University of Higher School of Economics&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 1.25em 0px 0px; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: inherit;&quot;&gt;It&#39;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!&lt;/span&gt;&lt;/p&gt;</description><link>http://osgeek.blogspot.com/2023/03/q.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-8864020593252078956</guid><pubDate>Wed, 22 Mar 2023 11:47:00 +0000</pubDate><atom:updated>2023-03-22T17:41:21.674+05:30</atom:updated><title></title><description>&lt;p&gt;&lt;span face=&quot;Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;&quot; style=&quot;background-color: white; font-size: 16px; white-space: pre-wrap;&quot;&gt;After hibernating for more than a decade, I am rebooting this blog...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span face=&quot;Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;&quot; style=&quot;background-color: white; font-size: 16px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span face=&quot;Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;&quot; style=&quot;background-color: white; font-size: 16px; white-space: pre-wrap;&quot;&gt;Question:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span face=&quot;Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;&quot; style=&quot;font-size: 16px; white-space: pre-wrap;&quot;&gt;In what ways should the teachers of computer science update themselves to handle challenges posed by AI based teachers ?&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: white;&quot;&gt;ChatGPT answers:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; margin: 0px 0px 1.25em; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;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:&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; counter-reset: item 0; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;&quot;&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;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.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;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.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;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.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;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.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;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.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;</description><link>http://osgeek.blogspot.com/2023/03/question-in-what-ways-should-teachers.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-9162368909627661996</guid><pubDate>Mon, 26 Apr 2010 07:47:00 +0000</pubDate><atom:updated>2010-04-26T13:22:08.498+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Linux</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>Deleted Linux partition! How to get back into Windows?</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;Recently one of my computers&#39; 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&lt;br /&gt;grub&gt;&lt;br /&gt;&lt;br /&gt;grub&gt; root(hd0, 0)&lt;br /&gt;grub&gt;makeactive&lt;br /&gt;grub&gt;chainloader +1&lt;br /&gt;grub&gt;boot&lt;br /&gt;&lt;br /&gt;Note the first command &quot; root(hd0, x) &quot;here x could be a different number on your system...mine worked for 0.&lt;br /&gt;This booted the Windows XP on the computer. But each time the computer is restarted after this, it&#39;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 &quot;mbrfix&quot;. 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.&lt;br /&gt;&lt;br /&gt;Alternatively, I have read that if you have access to Windows  cd, booting from it and running command &quot;fixmbr&quot; also does the trick.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2010/04/deleted-linux-partition-how-to-get-back.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>138</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-1983608799649757357</guid><pubDate>Mon, 29 Mar 2010 06:32:00 +0000</pubDate><atom:updated>2010-03-29T16:32:18.789+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Linux</category><category domain="http://www.blogger.com/atom/ns#">Ubuntu</category><title>Wubi and Ubuntu</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;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!&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2010/03/wubi-and-ubuntu.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-1867005428963009852</guid><pubDate>Fri, 26 Feb 2010 05:32:00 +0000</pubDate><atom:updated>2010-02-26T11:22:10.310+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Computer</category><category domain="http://www.blogger.com/atom/ns#">distributed</category><title>A probabilistic solution to the Two Generals problem</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Here is a probabilistic solution to the two General&#39;s problem; it gives a high probability of succcess if the number of messages(messengers) is kept high.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The two General&#39;s problem is a problem of synchronization between two army Generals. They have surrounded an enemy&lt;/span&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; 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&#39;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&#39;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...&lt;br /&gt;&lt;br /&gt;Let&#39;s make some assumptions before discussing a solution to this problem:&lt;br /&gt;&lt;br /&gt;Assumptions:&lt;br /&gt;&lt;br /&gt;A1- Each messenger has 50% chance of reaching the other General with the message.&lt;br /&gt;A2- We will expect a 99.999 % chance of agreement between the Generals as sufficient enough.&lt;br /&gt;A3- Each General sends an equal number of messengers.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;We are taking the probability of 99.999% as success.&lt;br /&gt;So, (1-(0.5)^N)^2 &gt; 0.99999&lt;br /&gt;or, (1-(0.5)^N) &gt; 0.999995 (thanks to the calculator that is present in Google search, &quot;square root of .99999&quot; and search)&lt;br /&gt;or, 0.5^N &gt; 0.000005&lt;br /&gt;or, N = 17&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2010/02/probabilistic-solution-to-two-generals.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>6</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-870479429109924194</guid><pubDate>Thu, 23 Jul 2009 07:32:00 +0000</pubDate><atom:updated>2009-07-23T13:04:31.629+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Linux</category><category domain="http://www.blogger.com/atom/ns#">Unix</category><title>Redirection and 2&gt;&amp;1</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;In Unix, one often finds a input and output redirection &quot;&lt;&quot;, &quot;&gt;&quot;, &quot;&gt;&gt;&quot;. These are simple to understand.&lt;br /&gt;&lt;br /&gt;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&gt;&amp;amp;1 in the end of the command. 2&gt;&amp;amp;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&gt;&amp;amp;1.&lt;br /&gt;Similarly, you can also redirect stdout to whereever stderr is going by 1&gt;&amp;amp;2.&lt;br /&gt;&lt;br /&gt;Also, remember that &quot;some unix command &gt; some_file 2&gt;&amp;amp;1&quot; is different from &quot;some unix command  2&gt;&amp;amp;1 &gt; some_file&quot;. The first one redirects stderr to some_file, whereas the second won&#39;t.&lt;br /&gt;&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2009/07/redirection-and-2.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>6</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-986313829934623102</guid><pubDate>Sat, 11 Jul 2009 06:24:00 +0000</pubDate><atom:updated>2009-07-22T11:18:25.477+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Linux</category><category domain="http://www.blogger.com/atom/ns#">Unix</category><title>A tutorial on setuid and sticky bits in Unix</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;Unix users are sometimes confused with setuid and sticky bit permissions on files and directories. Below is a small tutorial on the most common use of setuid and sticky bits.&lt;br /&gt;&lt;br /&gt;There are certain files or devices that are writable only by root. Nevertheless, ordinary users often have to use root-owned programs that try to write to those files. Since these files are writable only by root, how would a non-root user run the program that writes into that file. The solution in Unix is setuid bit. When this bit is set on a root-owned program, the program gets the effective privileges of root even when run by non-root user. This happens only for setuid programs i.e. for programs that have setuid bit set by owner/root. Example is passwd program that modifies the password files that are writable only by root. Since passwd program is setuid id, any non-root user can run this program and modify his/her password. Another example is ping program that is also setuid since ordinary users also run the ping program that accesses network devices.&lt;br /&gt;&lt;br /&gt;In the file permission listing found by command “ls –l” setuid programs have the s in place of x. This means the program is both executable by owner and setuid. Another possibility is S in place of x which means the program is setuid but NOT executable. The program permissions could look like&lt;br /&gt;&lt;br /&gt;rwsr-xr-x ( executable by root and setuid; what matters for setuid bit is the third letter)&lt;br /&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;br /&gt;rwSr-xr-x ( hmmm…does it make sense !?)&lt;br /&gt;&lt;br /&gt;One can make a program setuid by&lt;br /&gt;&lt;br /&gt;chmod u+s prog_name&lt;br /&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;br /&gt;chmod 4755 prog_name&lt;br /&gt;&lt;br /&gt;Although the explanation above was specific to root-owned files, it could apply to any owner. So any user can make a program owned by himself/herself setuid and let others modify some of the owner’s files by this program.&lt;br /&gt;&lt;br /&gt;Another related special permission setting for a program is setgid bit which is similar to above, but is useful only to the owner’s group. The setuid and setgid bits have different meanings when applied to directories. setgid bit on directory &quot;d&quot; means that any file or directory created under it would get the group id of &quot;d&quot;. Remember that normally the group id of any newly created directory is the group id of the user who created it.&lt;br /&gt;&lt;br /&gt;Yet another special permission is the sticky bit. Now-a-days, it is mainly used for directories. Let us first understand what directory permissions mean. Some directories are writable by all users. That means all users can create files as well as delete files inside such directories. Execute permission for a directory means search permission into that directory. So, execute permission is necessary to descend into that directory.&lt;br /&gt;&lt;br /&gt;An example of directory with sticky bit set is /tmp. This directory stores temporary data that is created by user programs. Since these directories are writable by all, any user can delete any file! Even those files that are owned by others! To fix this state, such directories have sticky bit set. Now only the owners can delete any file in such directories.&lt;br /&gt;&lt;br /&gt;Directories with sticky bit set have t letter in the execute permission set for others, as seen by the output of “ls –l”.&lt;br /&gt;&lt;br /&gt;rwxrwxrwt ( sticky bit is set and execute permission for others)&lt;br /&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;br /&gt;rwxrwxrwT ( sticky bit set but no execute permission for others)&lt;br /&gt;&lt;br /&gt;Capital T means that others don’t have execute permission for that directory, so they can’t search into it.&lt;br /&gt;&lt;br /&gt;update: Added setgid directory explanation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2009/07/tutorial-on-setuid-and-sticky-bits-in.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-6085990485100430451</guid><pubDate>Tue, 19 May 2009 11:09:00 +0000</pubDate><atom:updated>2009-05-21T12:17:19.655+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">shell</category><category domain="http://www.blogger.com/atom/ns#">Unix</category><title>How Unix shell executes commands</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;Unix shell runs all the commands in a new forked child process.  It means, the shell in which the command is invoked becomes the parent that creates a child process ( a shell process). The child in turn exec&#39;s the command by overlaying itself with the command&#39;s image. Why would the  new process be created for executing the command? Can&#39;t the shell run the command in the same process. The answer is:&lt;br /&gt;If the shell overlays itself with the command&#39;s process image, it would have nowhere to return when the command finishes executing. This would close the parent shell. Running &quot;exec command_name&quot; effectively does this i.e. runs the command that evetually closes the shell when the command execution is over. To avoid closing the invoking shell itself, all commands are run in a new child process  by the shell.&lt;br /&gt;&lt;br /&gt;We can use &quot;strace&quot; utility to track down the child process creation and execution system calls. Note that doing strace on the command will only trace the command after fork i.e. the output will show execve(...) followed by other syscalls ending with some exit call. This is so because we are tracing only the command which really is in the child process. To trace how the shell has created a new child process by fork() (clone() family in Linux), do strace on the current shell in a separate terminal and then run a command in the current shell.&lt;br /&gt;&lt;br /&gt;PS: edited off the &#39;subshell&#39; part as that is a different beast altogether...&lt;br /&gt;&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2009/05/how-unix-shell-executes-commands.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-8281592592510318670</guid><pubDate>Fri, 02 Jan 2009 15:20:00 +0000</pubDate><atom:updated>2009-01-02T21:38:55.833+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">careers</category><category domain="http://www.blogger.com/atom/ns#">salary</category><category domain="http://www.blogger.com/atom/ns#">software engineer</category><category domain="http://www.blogger.com/atom/ns#">teaching</category><title>Software engineering vs teaching</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;I faced a reality check last week. I always wondered why anyone, competent and educated in the field of computers, would pursue a career in teaching and not join a company as software engineer. It was perhaps the inability of the person to cope up with the demanding environment in the software field. That could be the reason anyone leaves a better paying job and settles for lowly-paid teaching career - or so I thought.&lt;br /&gt;&lt;br /&gt;Last week I sat down and tried to list the pros and cons of the two careers.&lt;br /&gt;Here&#39;s what I got from my &quot;findings&quot;.&lt;br /&gt;&lt;br /&gt;Let&#39;s tackle the salary part first. Since a teaching career asks for a formal degree, preferably a post graduation, let&#39;s assume the person is a post graduate in Computers.&lt;br /&gt;&lt;br /&gt;Now, if the person choses to join an IT career, he has to devote at least 40 hours a week for work; in reality it could be much more if one takes into account the unpaid &quot;late-nights&quot;. Assuming a 30 days month, and a good INR 50,000 a month in salary, the person makes about INR 285/hr.&lt;br /&gt;&lt;br /&gt;On the other hand, a teacher at an engineering institute has about 18 hrs a week of teaching load. For INR 40,000 a month, the teacher would be making about INR 500/hr on average - a full 215/hr more on average than his counterpart!&lt;br /&gt;&lt;br /&gt;Other pros of a teaching job vs software engineering -&lt;br /&gt;&lt;br /&gt;- no late-night unpaid overtime work that one is expected to do&lt;br /&gt;- better quality of life, better family life as well; a teacher can spend much more time with family&lt;br /&gt;- no continuous sitting-in-front-of-computer-screen until you visit your doc for back-pain; backache    is known to be a common ailment with IT professionals&lt;br /&gt;- less stress; no deadlines&lt;br /&gt;- stability; none of those pink-slip days inspite of very good performance. It&#39;s not uncommon to find star-achievers, poster-boys being given a boot if the head honchos make company wide cost-cutting   plans&lt;br /&gt;&lt;br /&gt;Taking all the above into account, I wonder why anyone would prefer IT career over teaching if given a choice. Is it for that extra few thousands? Consider this! IT companies are located mostly in places where the extra salary of a software professional would be spent on rent and other costs. A teacher can take up consultancy work and could earn even more ...&lt;br /&gt;&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2009/01/software-engineering-vs-teaching.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>12</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-16925553807682190</guid><pubDate>Tue, 16 Dec 2008 08:29:00 +0000</pubDate><atom:updated>2008-12-20T13:18:00.653+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">C++</category><category domain="http://www.blogger.com/atom/ns#">programming</category><title>C++ inheritance - public, private, protected</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;Inheritance in C++ could be public, private, or public. It could be confusing for a beginner to find out accessibility of members and objects of these classes. Though public inheritance is mostly used, especially if there are virtual functions in the base class, other two types of inheritance have their uses as well. Here&#39;s an example program to make it clear how the 3 of them work i.e. public inheritance, private inheritance, and protected inheritance.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include&lt;iostream&gt;&lt;iostream&gt;&lt;br /&gt;&lt;br /&gt;class B{&lt;br /&gt;char a;&lt;br /&gt;&lt;br /&gt;public:&lt;br /&gt;char b;&lt;br /&gt;&lt;br /&gt;protected:&lt;br /&gt;char c;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// public inheritance&lt;br /&gt;&lt;br /&gt;class D:public B{&lt;br /&gt;&lt;br /&gt;// private members of B can&#39;t be accessed&lt;br /&gt;//can access public and protected members of B&lt;br /&gt;&lt;br /&gt;char d;&lt;br /&gt;&lt;br /&gt;public:&lt;br /&gt;&lt;br /&gt;void f(){&lt;br /&gt;   //can&#39;t do this&lt;br /&gt;   // d = a;&lt;br /&gt; &lt;br /&gt;   d = b; // works&lt;br /&gt;   d = c; // works&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;// class D has the following additional members inherited from B&lt;br /&gt;// public: char b&lt;br /&gt;// and&lt;br /&gt;// protected: char c&lt;br /&gt;// this means that any class derived from D can access both b and c&lt;br /&gt;// b is accessible by objects of derived class, c is not (#1)&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// private inheritance&lt;br /&gt;&lt;br /&gt;class E:private B{&lt;br /&gt;&lt;br /&gt;// private members of B can&#39;t be accessed...&lt;br /&gt;// can access public and protected members of B&lt;br /&gt;&lt;br /&gt;char d;&lt;br /&gt;&lt;br /&gt;public:&lt;br /&gt;void f(){&lt;br /&gt;   //can&#39;t do this&lt;br /&gt;   // d = a;&lt;br /&gt;   d = b; // works&lt;br /&gt;   d = c; // works&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// class E has the following additional data members inherited from B&lt;br /&gt;// private:char b&lt;br /&gt;// and&lt;br /&gt;// private: char c&lt;br /&gt;// this means that any class derived from E can&#39;t access any of the above derived data&lt;br /&gt;// members, nor are they accessible to objects of derived class, public functions&lt;br /&gt;// though are accessible to objects of this class (#2)&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// protected inheritance&lt;br /&gt;&lt;br /&gt;class F:protected B{&lt;br /&gt;  &lt;br /&gt;// private members of B can&#39;t be accessed in this class as above, so&lt;br /&gt;// can access public and protected members of B&lt;br /&gt;&lt;br /&gt;char d;&lt;br /&gt;&lt;br /&gt;public:&lt;br /&gt;&lt;br /&gt;void f(){&lt;br /&gt;   //can&#39;t do this&lt;br /&gt;   // d = a;&lt;br /&gt;   d = b; // works&lt;br /&gt;   d = c; // works&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;// class F has following additional members inherited from B&lt;br /&gt;// protected:char b&lt;br /&gt;// and&lt;br /&gt;// protected: char c&lt;br /&gt;// this means that any class derived from F can access&lt;br /&gt;// the above members, but they can&#39;t be accessed from&lt;br /&gt;// derived class objects (#3)&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class DF: public F{&lt;br /&gt;char d;&lt;br /&gt;  &lt;br /&gt;public:&lt;br /&gt;void g(){&lt;br /&gt;   d = b; // works from #3 above&lt;br /&gt;   d = c; // works from #3&lt;br /&gt;   }&lt;br /&gt;};&lt;br /&gt;              &lt;br /&gt;         &lt;br /&gt;&lt;br /&gt;int main(){&lt;br /&gt;&lt;br /&gt;char i;&lt;br /&gt;&lt;br /&gt;B b;&lt;br /&gt;D d;&lt;br /&gt;E e;&lt;br /&gt;F f;&lt;br /&gt;&lt;br /&gt;// these won&#39;t work by definition&lt;br /&gt;// b.c = i;&lt;br /&gt;// b.a = i;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// for object d of publicly derived class&lt;br /&gt;// this works from (#1)&lt;br /&gt;d.b = i;&lt;br /&gt;// this won&#39;t work from (#1)&lt;br /&gt;// d.c = i;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// for object e of privately derived class&lt;br /&gt;// these won&#39;t work from (#2)&lt;br /&gt;// e.b = i;&lt;br /&gt;// e.c = i;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// for object f of protected-ly derived class&lt;br /&gt;// these won&#39;t work from (#3)&lt;br /&gt;// f.b = i;&lt;br /&gt;// f.c = i;&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;}&lt;/iostream&gt;&lt;/iostream&gt;</description><link>http://osgeek.blogspot.com/2008/12/c-inheritance-public-private-protected.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-6235934053432166740</guid><pubDate>Sun, 26 Oct 2008 15:58:00 +0000</pubDate><atom:updated>2008-10-26T21:36:06.994+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">general</category><title>Small company or MNC</title><description>One of my friends has recently graduated and is in a dilemma on which among the two offers to accept. An offer he has is from a multi-billion, multi-thousand-employees product MNC where he would be using C language and Unix at work that is about debugging one of the company products. The other offer is from a small EDA company where he would be using C++ and Windows as a developer of EDA tools for engineers. The smaller company has less than 50 people on roll. The CEO himself interviewed my friend and has suggested that the friend would have more opportunities to learn and grow in a smaller company like his one. &lt;br /&gt;&lt;br /&gt;On the other hand, the big MNC&#39;s salary offer is more than twice that of the smaller company&#39;s.&lt;br /&gt;&lt;br /&gt;Friend is in a dilemma and is seeking my advice. Which company should he join?</description><link>http://osgeek.blogspot.com/2008/10/small-company-or-mnc.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-3613724710231579368</guid><pubDate>Fri, 24 Oct 2008 14:57:00 +0000</pubDate><atom:updated>2008-10-24T20:32:33.845+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">programming</category><title>pointer pitfall</title><description>Some C pointer fundamentals manage to fox even seasoned programmers.&lt;br /&gt;For example, what is wrong with the following piece of code:&lt;br /&gt;&lt;br /&gt;func() {&lt;br /&gt;&lt;br /&gt;char *c;&lt;br /&gt;c = &quot;this is a string.&quot;;&lt;br /&gt;*c = &#39;T&#39;;&lt;br /&gt;printf(&quot;%s&quot;, c);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The code tries to capitalize the first letter of the string. It looks correct at first glance, but is not. It might even compile without any error, but will throw out an error when run.</description><link>http://osgeek.blogspot.com/2008/10/pointer-pitfall.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>8</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-3348889508258619272</guid><pubDate>Wed, 28 Nov 2007 17:04:00 +0000</pubDate><atom:updated>2007-11-30T16:48:56.863+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">programming</category><title>Fun with JavaScript</title><description>&lt;a href=&quot;http://www3.webng.com/redtophank/cit.html&quot;&gt;This &lt;/a&gt;is a  &lt;span style=&quot;font-weight: bold;&quot;&gt;JavaScript &lt;/span&gt;I found while stumbling.&lt;a href=&quot;http://www3.webng.com/redtophank/cit.html&quot;&gt;&lt;dil; dis=&quot;DI[&quot; position=&quot;&#39;absolute&#39;;&quot; left=&quot;Math.sin(R*x1+i*x2+x3)*x4+x5;&quot; top=&quot;Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval(&#39;A()&#39;,5&quot;&gt;&lt;br /&gt;&lt;/dil;&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;It works like this. Just search for an image in Google. Once it shows up images as the result of your search, enter the script (without quotes) in the address bar of your browser. It will rotate the images around. If you keep pressing enter again and again, the speed of rotation keeps increasing as well.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;</description><link>http://osgeek.blogspot.com/2007/11/fun-with-javascript.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-905561399514048731</guid><pubDate>Thu, 09 Aug 2007 14:11:00 +0000</pubDate><atom:updated>2007-08-09T19:48:29.565+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Niagara</category><category domain="http://www.blogger.com/atom/ns#">Sun</category><category domain="http://www.blogger.com/atom/ns#">UltraSparc T2</category><title>UltraSparc T2 : Mainframe-on-a-chip?</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;In my &lt;a href=&quot;http://osgeek.blogspot.com/2007/08/niagara-2-ie-ultrasparc-t2.html&quot;&gt;previous post&lt;/a&gt;, I wondered whether Niagara 2 (ULtraSparc T2) could run 64 different OS instances or were they just Solaris Zones (containers). It is confirmed that it could indeed run 64 OS instances using LDom built-in technology in T2. I found this &lt;a href=&quot;http://blogs.sun.com/ash/resource/flashdemos/64-ldoms-on-t2.html&quot;&gt;Sun blog post&lt;/a&gt; that demonstrates 64 instances of Solaris running in 64 T2 threads. In &lt;a href=&quot;http://blogs.sun.com/ash/resource/flashdemos/linux-ldom.html&quot;&gt;another post&lt;/a&gt; it goes further and shows Solaris and Ubuntu running simultaneously. That makes T2 one helluva multicore chip!&lt;br /&gt;&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2007/08/ultrasparc-t2-mainframe-on-chip.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-5593598873533913776</guid><pubDate>Wed, 08 Aug 2007 13:07:00 +0000</pubDate><atom:updated>2007-08-08T18:44:48.671+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Sun</category><title>Niagara 2 i.e. UltraSparc T2</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;It&#39;s very sad that most of the processor news in the world is confined to x86 only. When I &lt;a href=&quot;http://osgeek.blogspot.com/2006/12/trends-in-cpu-design_11.html&quot;&gt;commented &lt;/a&gt;on processors last year, I mentioned Niagara chip ie UltraSparc T1. Now Sun has come out with the second version of the energy efficient Niagara 2, officially named UltraSparc T2. With 8 cores in the chip and 8 threads per core it will have a total of 64 hardware threads. The 8 threads in each core would run in an I/O multiplexed way i.e. at any time only 1 thread can run and another thread will switch in if the running thread enters I/O cycle. That means at any point of time, 8 threads will be running simultaneously in the chip. UltraSparc T1 was similar but had 4 threads per core, for a total of 32 threads.&lt;br /&gt;&lt;br /&gt;From the webcast on Sun&#39;s page, I found the following interesting information on T2 chip:&lt;br /&gt;&lt;br /&gt;One major difference between T2 and T1 is that T2 has a floating point unit on each core. T1 had one such unit for the entire chip that made it practically useless for floating-point intensive tasks. T2 thus seems to have taken care of that limitation. T2 threads run at 1.4 GHz.&lt;br /&gt;&lt;br /&gt;For crypto intensive tasks there is a cryptographic processor unit on each core. Also, there are two PCI express I/O ports on the chip as well as integrated 10 Gb Ethernet.&lt;br /&gt;&lt;br /&gt;Sun aims to sell this chip to other vendors as well if they want to use it in their servers. This is a departure from its earlier policy where it used its chips only in its servers and sold those servers.&lt;br /&gt;&lt;br /&gt;This chip seems great for multi-threaded applications written in languages such as Java.&lt;br /&gt;&lt;br /&gt;One thing that was funny in the webcast was that T2 was getting marketed as the fastest processor at 89.6 GHz. It was simply calculated by multiplying 64 by 1.4 GHz.&lt;br /&gt;It was like saying a train with 10 coaches running at 100 miles/hr the fastest vehicle at 1000 km/hr!&lt;br /&gt;&lt;br /&gt;A few times during the webcast it was mentioned that 64 Operating systems could run simultaneously in 64 threads due to LDom technology. I think they were talking about zones, and not really different OS&#39;s. Or is it possible to really run different OS&#39;s in that way? I think not but correct me if I am wrong.&lt;br /&gt;&lt;br /&gt;UltraSparc T2 sure is a great chip with energy efficiency and should give good throughput for well written applications, at a very low form-factor in a data center.&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2007/08/niagara-2-ie-ultrasparc-t2.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-1345548269487826947</guid><pubDate>Sat, 04 Aug 2007 19:15:00 +0000</pubDate><atom:updated>2007-08-05T00:50:13.197+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Gmail</category><category domain="http://www.blogger.com/atom/ns#">Google</category><category domain="http://www.blogger.com/atom/ns#">security</category><title>Preventing Gmail cookie stealing</title><description>&lt;p style=&quot;margin-bottom: 0in; text-align: justify;&quot;&gt;There has been a news of a vulnerability from the use of cookies by email sites like Gmail at Wi-Fi hotspots. Cookies can be stolen by using sniffing softwares and entire session can be hijacked to do malicious things on the target accounts. A simple method to stop such attacks is to use SSL for the entire session, not just for login that gmail does by default.  A nice add-on from &lt;a href=&quot;http://www.customizegoogle.com&quot;&gt;CustomizeGoogle &lt;/a&gt; can be used for making sessions use SSL. In addition, there are many other cool features we get on installing this add-on to Firefox browser. These features can be selected from Tools menu of Firefox and includes options such as making ads invisible in gmail and google search results. Also, links to search results from Yahoo and other popular search engines can be added for the same search string in Google search.&lt;/p&gt;</description><link>http://osgeek.blogspot.com/2007/08/preventing-gmail-cookie-stealing.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-1891828382355401246</guid><pubDate>Tue, 24 Jul 2007 18:50:00 +0000</pubDate><atom:updated>2007-07-25T00:40:54.257+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Google</category><category domain="http://www.blogger.com/atom/ns#">tips</category><title>Find specific files like mp3 from Google search</title><description>It seems old tip but I found this only recently. To search files like mp3 or other smaller files from Google - &lt;span style=&quot;font-style: italic;&quot;&gt;e.g.&lt;/span&gt; if you want to find mp3 for a certain song, say, &quot;hips don&#39;t lie&quot;, do&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;intitle:index.of + &quot;mp3&quot; + &quot;hips don&#39;t lie&quot; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To get results having no *.htm or *.html files, you can do&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;intitle:index.of + &quot;mp3&quot; + &quot;hips don&#39;t lie&quot; -htm -html&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The results give a lot of locations to download the files from, sites that are normally hard to find.&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;&lt;/span&gt;</description><link>http://osgeek.blogspot.com/2007/07/find-specific-files-like-mp3-from.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-3466889602270755485</guid><pubDate>Mon, 18 Jun 2007 15:40:00 +0000</pubDate><atom:updated>2007-06-18T21:45:04.704+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">humor</category><category domain="http://www.blogger.com/atom/ns#">Solaris</category><title>SysAdmin mag &amp; How to write unmaintainable code</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;June&#39;s issue of &lt;span style=&quot;font-weight: bold;&quot;&gt;SysAdmin &lt;/span&gt;magazine, has some interesting Q&amp;A&#39;s on Solaris. Questions on &lt;span style=&quot;font-weight: bold;&quot;&gt;superblock&lt;/span&gt;, alternative methods for &lt;span style=&quot;font-weight: bold;&quot;&gt;patching&lt;/span&gt;, etc. are given along with answers. It can be &lt;a href=&quot;http://www.samag.com/documents/s=10128/sam0706g/0706g.htm&quot;&gt;read here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Found &lt;a href=&quot;http://www.web-hits.org/txt/codingunmaintainable.html&quot;&gt;this &lt;/a&gt;hilarious take on unmaintainable code written some time back when it was &lt;span style=&quot;font-weight: bold;&quot;&gt;slashdotted&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2007/06/sysadmin-mag-how-to-write.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-1411434054107883008</guid><pubDate>Sat, 16 Jun 2007 12:04:00 +0000</pubDate><atom:updated>2007-06-16T18:43:05.905+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">programming</category><title>Which &quot;for loop&quot; works better/faster</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;I was asked this question in an interview long ago and thought I would post it here.&lt;br /&gt;Which of the following &lt;span style=&quot;font-style: italic;&quot;&gt;for loop&lt;/span&gt; works better assuming no special compiler play, just on programming logic. Will both code pieces execute equally fast?&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;1 - &lt;span&gt;&lt;br /&gt;for ( i=0; i &lt;10; i++)&lt;br /&gt;for (j=0; j&lt;100; j++)&lt;br /&gt;printf(&quot;hello\n&quot;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2 - &lt;span&gt;&lt;br /&gt;for (j=0; j&lt;100; j++)&lt;br /&gt;for ( i=0; i &lt;10; i++)&lt;br /&gt; printf(&quot;hello\n&quot;);&lt;/span&gt;</description><link>http://osgeek.blogspot.com/2007/06/which-for-loop-works-better.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-9028109051430566226</guid><pubDate>Wed, 13 Jun 2007 23:35:00 +0000</pubDate><atom:updated>2007-06-15T05:20:15.181+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Linux</category><category domain="http://www.blogger.com/atom/ns#">OpenSolaris</category><category domain="http://www.blogger.com/atom/ns#">ZFS</category><title>Linus likes ZFS, but</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;Online world is abuzz with discussions on &lt;a href=&quot;http://lkml.org/lkml/2007/6/12/232&quot;&gt;the mail&lt;/a&gt; that &lt;span style=&quot;font-weight: bold;&quot;&gt;Linus Torvalds&lt;/span&gt; sent to lkmk.org with some seemingly incendiary anti-Sun remarks, and a more cool-headed &lt;a href=&quot;http://blogs.sun.com/jonathan/entry/one_plus_one_is_fifty&quot;&gt;response &lt;/a&gt;by the &lt;span style=&quot;font-weight: bold;&quot;&gt;Sun &lt;/span&gt;CEO Jonathan Schwartz.  It has sent all the Paris Hilton front page stories down to page 5 to bite the dust. Some things this all seems to imply:&lt;br /&gt;&lt;br /&gt;- &lt;span style=&quot;font-weight: bold;&quot;&gt;OpenSolaris &lt;/span&gt;has surely begun to ruffle some feathers; even Linus says OpenSolaris&#39; &lt;span style=&quot;font-weight: bold;&quot;&gt;ZFS &lt;/span&gt;is something which could make &lt;span style=&quot;font-weight: bold;&quot;&gt;Linux &lt;/span&gt;to change its license. That is something!&lt;br /&gt;&lt;br /&gt;-  The only thing most Linux developers including Linus think OpenSolaris needs Linux for are drivers. Does it imply that if a user can get a machine working with OpenSolaris, there&#39;d be no need to install Linux?&lt;br /&gt;&lt;br /&gt;- Linux users want ZFS. Linux developers have started to realize its importance as a Filesystem, but are diverting the issue with licensing and patent issues. Why not directly talk to Sun and implement the stuff? Surely. if &lt;span style=&quot;font-weight: bold;&quot;&gt;FreeBSD &lt;/span&gt;and &lt;span style=&quot;font-weight: bold;&quot;&gt;Mac OS X&lt;/span&gt; can implement it, so can Linux. It could be that it is harder to port it to Linux and the developers have become lazy.&lt;br /&gt;&lt;br /&gt;- Somehow Linus seems to know that &quot;Linux code is _better_&quot;. Does it mean he already has peeked into OpenSolaris code and compared it with the Linux before coming to conclusion? That is interesting, and as illuminating as his assertion.&lt;br /&gt;&lt;br /&gt;I have a great respect for Linus as is evidenced by one of my &lt;a href=&quot;http://osgeek.blogspot.com/2006/12/linux-on-gpl-kernel-modules.html&quot;&gt;earlier posts&lt;/a&gt;. But &lt;a href=&quot;http://lkml.org/lkml/2007/6/12/232&quot;&gt;mails like this&lt;/a&gt; are uncharacteristic of him. I even feel that it could have been rebuked as FUD-spreading if it had come from someone other, say Microsoft. Hopefully, in the future, Linux and OpenSolaris will be living at peace and users will have choice of an OS not dictated by the license.&lt;br /&gt;&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2007/06/linus-likes-zfs-but.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1746745451277571533.post-285474010813577682</guid><pubDate>Tue, 12 Jun 2007 18:48:00 +0000</pubDate><atom:updated>2007-06-13T01:33:28.412+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Apple</category><category domain="http://www.blogger.com/atom/ns#">Mac OS X</category><category domain="http://www.blogger.com/atom/ns#">Sun</category><category domain="http://www.blogger.com/atom/ns#">ZFS</category><title>ZFS flavor of the month</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;A week after &lt;span style=&quot;font-weight: bold;&quot;&gt;Sun &lt;/span&gt;CEO Jonathan Schwartz commented that &lt;span style=&quot;font-weight: bold;&quot;&gt;ZFS &lt;/span&gt;would be in Leopard, an &lt;span style=&quot;font-weight: bold;&quot;&gt;Apple &lt;/span&gt;executive said, &quot;ZFS is not happening&quot;, when questioned about ZFS&#39;s inclusion in Leopard. Without ZFS announcement in the Apple WWDC, Mac developers would be disappointed and some reporters said they felt sleepy during the keynote.&lt;br /&gt;&lt;br /&gt;(&lt;span style=&quot;font-weight: bold;&quot;&gt;Update &lt;/span&gt;: Apple has denied the executive&#39;s claims and is clarifying that ZFS will be available as a limited option in OS X. See comments on &lt;a href=&quot;http://www.informationweek.com/story/showArticle.jhtml?articleID=199903281&amp;cid=RSSfeed_IWK_News&quot;&gt;t&lt;/a&gt;&lt;a href=&quot;http://www.informationweek.com/story/showArticle.jhtml?articleID=199903281&amp;amp;cid=RSSfeed_IWK_News&quot;&gt;he original story&lt;/a&gt; for details.)&lt;br /&gt;&lt;br /&gt;ZFS seems to be flavor of the month. While many were expecting Apple to announce it was adding ZFS to Mac OS X, it doesn&#39;t seem likely after reading the Apple executive&#39;s comment. At least not in the forthcoming release.&lt;br /&gt;&lt;br /&gt;In other news, &lt;a href=&quot;http://www.infoworld.com/article/07/06/07/23TCzfs_1.html&quot;&gt;ZFS was reviewed&lt;/a&gt; very positively in an &lt;span style=&quot;font-weight: bold;&quot;&gt;InfoWorld &lt;/span&gt;article. The editor reviewing the ZFS was all praise for it. &quot;&lt;span style=&quot;font-style: italic;&quot;&gt;It’s not every day that the computer industry delivers the level of innovation found in Sun&#39;s ZFS. More and more advances in the science of IT are based on simply multiplying the status quo. ZFS breaks all the rules here, and it arrives in an amazingly well-thought-out and nicely implemented solution&lt;/span&gt;.&quot;&lt;br /&gt;Ok that makes up for &quot;late by a year review.&quot; One thing that I&#39;ve observed is that though Sun says ZFS doesn&#39;t stand for Zettabyte File System anymore, most reporters still make it a point to expand ZFS that way.&lt;br /&gt;&lt;br /&gt;Then, &lt;span style=&quot;font-weight: bold;&quot;&gt;eWEEK &lt;/span&gt;gave an &lt;a href=&quot;http://www.eweek.com/slideshow_viewer/0,1205,l=&amp;s=25951&amp;amp;amp;amp;amp;amp;amp;a=209331&amp;amp;po=7,00.asp?p=y&quot;&gt;Excellence award to ZFS&lt;/a&gt; in the E-Business Foundations category. ZFS deserves many such awards and kudos. It has made a big difference in the world of File systems.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://osgeek.blogspot.com/2007/06/zfs-flavor-of-month.html</link><author>noreply@blogger.com (osgeek)</author><thr:total>1</thr:total></item></channel></rss>