<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-32179994</id><updated>2011-07-30T15:30:15.158-07:00</updated><category term='Kernel'/><category term='Linux'/><category term='File systems'/><category term='FUSE'/><title type='text'>Core Dump</title><subtitle type='html'>Evolutionary Response...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ashutoshadkar.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ashutoshadkar.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ashutosh</name><uri>http://www.blogger.com/profile/13520896234133202310</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_ooYuXMpIL4g/SEDOQjATM7I/AAAAAAAAAh4/EHLK2WrRjqo/S220/pic1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-32179994.post-3181260262894092746</id><published>2010-03-06T23:36:00.000-08:00</published><updated>2010-03-06T23:37:17.827-08:00</updated><title type='text'>Modifying class VTABLE at runtime</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; border-collapse: collapse; color: rgb(51, 51, 51); line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;First of all, I am very grateful to Jaydeep Bhalerao and Vijay Balani for sharing&lt;br /&gt;such cool stuff with me. Thanks a lot guys.&lt;br /&gt;&lt;br /&gt;Disclaimer : This code is meant for experimental purposes only. Use it at your own risk.&lt;br /&gt;I am not responsible for any consequences (good or bad)that may result due&lt;br /&gt;the use of the code given herein.&lt;br /&gt;&lt;br /&gt;The compiler generates a separate VTABLE for each class that either&lt;br /&gt;defines its own virtual methods or inherits virtual methods from&lt;br /&gt;another class or both. The VTABLE is used by the runtime environment&lt;br /&gt;to dispatch virtual method calls at runtime. Another thing to note is&lt;br /&gt;that the VTABLE is shared by ALL the objects of a class.&lt;br /&gt;&lt;br /&gt;I wont go into the details of VTABLES here, for a more in-depth&lt;br /&gt;discussion of VTABLES and their implementation use Wikipedia&lt;br /&gt;entry for "VTABLE".&lt;br /&gt;&lt;br /&gt;Here's another link : http://www.relisoft.com/book/lang/poly/2implem.html&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now here, I am going present some (very platform dependent) code&lt;br /&gt;that changes the contents of a class' virtual table at runtime.&lt;br /&gt;&lt;br /&gt;This works ONLY on Windows.&lt;br /&gt;&lt;br /&gt;We start with a class that defines some virtual methods, as follows,&lt;br /&gt;&lt;br /&gt;class Base&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;public:&lt;br /&gt;virtual void fun1(){cout&lt;&lt;"\nfun1";}&lt;br /&gt;virtual void fun2(){cout&lt;&lt;"\nfun2";}&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Next up we shall define global function that shall later find a place in the Base class VTABLE,&lt;br /&gt;&lt;br /&gt;static void fun3()&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;printf("\nThis is the modified virtual function");&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now that we have these two things in place. In the main function we need a Base object&lt;br /&gt;&lt;br /&gt;Base* ptr = new Base;&lt;br /&gt;&lt;br /&gt;Calling these virtual functions gives expected results,&lt;br /&gt;&lt;br /&gt;ptr-&gt;fun1();&lt;br /&gt;ptr-&gt;fun2();&lt;br /&gt;&lt;br /&gt;Now comes the ugly part. We use the Win32 VirtualQuery function to retrieve information about the range of pages in the virtual address space of the calling process used by the VTABLE. The VirtualQuery function requires a pointer to a struct of type MEMORY_BASIC_INFORMATION to fill information about the pages.&lt;br /&gt;&lt;br /&gt;LPDWORD* lpVtabl = (LPDWORD*)ptr;&lt;br /&gt;lpVtabl = (LPDWORD*)*lpVtabl ;&lt;br /&gt;MEMORY_BASIC_INFORMATION mbi1;&lt;br /&gt;&lt;br /&gt;if(VirtualQuery( (LPVOID)(lpVtabl), &amp;amp;mbi1,&lt;br /&gt;sizeof(mbi1)) != sizeof(mbi1))&lt;br /&gt;&lt;br /&gt;return -1;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now get the base address of the VTABLE,&lt;br /&gt;&lt;br /&gt;PVOID pvRgnBaseAddress1 = mbi1.BaseAddress;&lt;br /&gt;&lt;br /&gt;Normally, the protion of the virtual address space where the VTABLE resides is write protected, if we have to modify the VTABLE we must subvert this protection mechanism. The Win32 VirtualProtect function allows you change the read-write access permissions of a range of pages. We pass it the base address of the VTABLE and the flag PAGE_EXECUTE_READWRITE to make it writable.&lt;br /&gt;&lt;br /&gt;if(FALSE == ::VirtualProtect( pvRgnBaseAddress1, 4,&lt;br /&gt;PAGE_EXECUTE_READWRITE, &amp;amp;dwOldProtect11))&lt;br /&gt;return -1;&lt;br /&gt;&lt;br /&gt;Now the code that follows changes the VTABLE contents, substituting address of function "fun3" in place of a virtual member function,&lt;br /&gt;&lt;br /&gt;DWORD dw = reinterpret_cast&lt;dword&gt;(fun3);&lt;br /&gt;memcpy((LPVOID)(lpVtabl + 0), (LPVOID)(lpVtabl + 1), 4);&lt;br /&gt;memcpy((LPVOID)(lpVtabl + 1), (LPVOID)&amp;amp;dw, 4);&lt;br /&gt;&lt;br /&gt;Voila, there you go. Now try calling the virtual methods,&lt;br /&gt;&lt;br /&gt;ptr-&gt;fun1();&lt;br /&gt;ptr-&gt;fun2();&lt;br /&gt;&lt;br /&gt;The output is as follows,&lt;br /&gt;&lt;br /&gt;fun2&lt;br /&gt;This is the modified virtual function&lt;br /&gt;&lt;br /&gt;If anybody wants the full code, leave your email address in the comment, I will mail it to you.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32179994-3181260262894092746?l=ashutoshadkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashutoshadkar.blogspot.com/feeds/3181260262894092746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32179994&amp;postID=3181260262894092746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/3181260262894092746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/3181260262894092746'/><link rel='alternate' type='text/html' href='http://ashutoshadkar.blogspot.com/2010/03/modifying-class-vtable-at-runtime.html' title='Modifying class VTABLE at runtime'/><author><name>Ashutosh</name><uri>http://www.blogger.com/profile/13520896234133202310</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_ooYuXMpIL4g/SEDOQjATM7I/AAAAAAAAAh4/EHLK2WrRjqo/S220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32179994.post-49123693483347578</id><published>2007-11-10T10:33:00.000-08:00</published><updated>2007-11-13T10:39:00.636-08:00</updated><title type='text'>Using the GNU Debugger</title><content type='html'>&lt;div style="text-align: justify;"&gt;The GNU debugger(gdb) comes standard with any Linux installation(Okay maybe not, but its can be selected during installation).Also, it comes with the Bloodshed Dev-CPP C/CPP IDE for Windows. Its a very useful but often overlooked tool for C/CPP development.Most programmers resort to multiple printfs at various points in the code to trace out the error. This approach seems paleolithic when you see the advantages offered by gdb.&lt;br /&gt;For one thing, the printfs make the code messy.Secondly, debugging is a very painstaking process when using printfs.This comes from personal experience of course.&lt;br /&gt;Also after you are done debugging,you have to cleanup those print statements.&lt;br /&gt;These are just a few reasons.Start using gdb and more will become obvious to you.&lt;br /&gt;&lt;br /&gt;Thats why I emphasize the use of gdb.&lt;br /&gt;&lt;br /&gt;Now a lot of people have come to me asking me the procedure for using gdb. I guess from now on I can just throw the blog at them&lt;br /&gt;&lt;br /&gt;Lets look at the steps involved.&lt;br /&gt;(For Linux only, Bloodshed offers a GUI interface,which is pretty straight forward.If you still want a tute.Leave a comment)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1.Compile with symbol table information&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can use either "cc" or "g++" depending on your language of choice.For the sake of simplicity,we will assume cc for the duration of this discussion.Similar arguments apply to g++.&lt;br /&gt;When compiling use the "-g" option/flag.This allows your program to be debugged by gdb.&lt;br /&gt;&lt;br /&gt;Basically, this tells the compiler to store symbol table information (source level symbols) in your&lt;br /&gt;object file or load module.&lt;br /&gt;&lt;br /&gt;For example,suppose we are trying to a compile are C source file dfs_ops.c. This file is standalone and does not link with any other object files other than the standard C library.&lt;br /&gt;The Command to execute is&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;:&gt; cc dfs_ops.c -g -o dfs_ops&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;This will tell the compiler to compile dfs_ops.c into an executable file dfs_ops and also store the symbol table information in the file.&lt;br /&gt;As is obvious, storing the symbol table in your executable increases its physical size. So make sure you dont do this in your final deliverable.(Which will hopefully be thoroughly tested. :-))&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Start a debugging session for your program with gdb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Next, you need to enter into a session with gdb, to interactively debug your program with gdb.&lt;br /&gt;This means the program must be started under control of gdb.&lt;br /&gt;To do this you can do either of the following in a shell...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; i) :&gt; gdb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;  In this approach , you start gdb but do not specify any program to debug.In this case you must  run a program expicitly from the gdb prompt to start a debugging session.&lt;br /&gt;This can be done as follows.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;  gdb:&gt; run &amp;lt;program_name&amp;gt;&lt;program_name&gt;&lt;program_name&gt;&lt;/program_name&gt;&lt;/program_name&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; &lt;/span&gt;Here &lt;program_name&gt; &lt;program_name&gt; is the name of a program that you want to debug.This could be a full path or just the program name in the current directory.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ii) :&gt; gdb &amp;lt;program_name&amp;gt;&lt;program_name&gt;&lt;program_name&gt;&lt;/program_name&gt;&lt;/program_name&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this approach, you explicitly specify the program which you want to debug.&lt;br /&gt;&lt;br /&gt;After you have entered in a session with gdb, you should see a gdb prompt. Similar to this..&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;gdb:&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3.Setting a breakpoint&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Now that you have entered in a session with gdb, using either of the two approaches in step 2, you must set an execution break point.This is a point in the program where the gdb will pause execution and give control to you.You can then perform various actions like looking at variable values,register values, funtion returns,step wise execution etc.&lt;br /&gt;To set a break point, use the "break" command at the gdb prompt.&lt;br /&gt;You can set a break point either by specifying a line number or function name.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;gdb:&gt; break &amp;lt;line_num&amp;gt;&lt;line_number&gt;&lt;line_number&gt;&lt;/line_number&gt;&lt;/line_number&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;gdb:&gt; break &amp;lt;func_name&amp;gt;&lt;func_name&gt;&lt;br /&gt;&lt;br /&gt;&lt;function_name&gt;&lt;/function_name&gt;&lt;/func_name&gt;&lt;/span&gt;Note: Pressing TAB here, will list available functions and class methods&lt;br /&gt;&lt;br /&gt;For example :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;gdb:&gt; break 80&lt;/span&gt;    // Pauses execution at Line 80 w.r.t to the Source file line numbers&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;gdb:&gt; break main&lt;/span&gt; //pause execution when program control enters function main&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;You can specify multiple break points&lt;br /&gt;&lt;br /&gt;More to come...just wait....&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/program_name&gt;&lt;/program_name&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32179994-49123693483347578?l=ashutoshadkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashutoshadkar.blogspot.com/feeds/49123693483347578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32179994&amp;postID=49123693483347578' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/49123693483347578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/49123693483347578'/><link rel='alternate' type='text/html' href='http://ashutoshadkar.blogspot.com/2007/11/using-gnu-debugger.html' title='Using the GNU Debugger'/><author><name>Ashutosh</name><uri>http://www.blogger.com/profile/13520896234133202310</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_ooYuXMpIL4g/SEDOQjATM7I/AAAAAAAAAh4/EHLK2WrRjqo/S220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32179994.post-5556270039246552806</id><published>2007-11-03T21:57:00.000-07:00</published><updated>2007-11-10T10:32:42.796-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='File systems'/><category scheme='http://www.blogger.com/atom/ns#' term='FUSE'/><title type='text'>Linux File System Development using FUSE</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;FUSE (Filesystems in User Space) &lt;/span&gt;is an open source project that allows developers to create file systems as user application as against a kernel module (which is the normal case). It is obvious to developers familiar with FS development to notice that ,a  filesystem in userspace would mean a significant performance penalty. Certainly there is a performance hit because the filesystem application communicates with the FUSE module which in turn handles VFS communication introducing an extra level of indirection.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;So why bother?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;FUSE is certainly worth the performance trade-off for a number of reasons :&lt;br /&gt;&lt;br /&gt;1.FUSE offers a higher level interface which much simpler than the VFS interface.This forms an excellent starting point for budding file system developers to get the hang of things.&lt;br /&gt;2.FUSE also offers a lower layer interface which is akin to the VFS interface.This allows developers familiar with VFS to test out their File system code in user space before introducing it as a kernel module.Those who know about kernel panics and constant reboots and kernel re-compilation that are part of Linux kernel development will know why this convenience is of such great value.&lt;br /&gt;3.For some file systems where performance is not an issue, developing file systems is not only easier but also a much faster process, because the now the developers have a the whole C library at their disposal which will be linked to their file system application.Means lots of utility functions.&lt;br /&gt;&lt;br /&gt;Although, the documentation and tutorials for FUSE are few and far between.And whatever  there are, are not easily accessible.So I will try to include a tutorial for FUSE on my blog some time later.No promises..&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32179994-5556270039246552806?l=ashutoshadkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashutoshadkar.blogspot.com/feeds/5556270039246552806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32179994&amp;postID=5556270039246552806' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/5556270039246552806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/5556270039246552806'/><link rel='alternate' type='text/html' href='http://ashutoshadkar.blogspot.com/2007/11/linux-file-system-development-using.html' title='Linux File System Development using FUSE'/><author><name>Ashutosh</name><uri>http://www.blogger.com/profile/13520896234133202310</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_ooYuXMpIL4g/SEDOQjATM7I/AAAAAAAAAh4/EHLK2WrRjqo/S220/pic1.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32179994.post-116704109862801090</id><published>2006-12-25T01:36:00.000-08:00</published><updated>2006-12-25T02:04:58.640-08:00</updated><title type='text'>YUMmy!!!</title><content type='html'>The New Fedora Core distro is out viz.Fedora Core 6.Like it the earlier versions it still sucks as far as features are concerned,especially media players.&lt;br /&gt;Fortunately it comes with a very handy tool for installing RPMs from an online repositories.Its called&lt;br /&gt;'yum' (Yellow Dog Updater,Modified).Using 'yum', installing RPMs is a breeze.&lt;br /&gt;&lt;br /&gt;Here's something to get you started with  'yum'  :&lt;br /&gt;1.Before you can install from online repositories ,add support for them on your system .Do the following in your terminal ,in the super user mode of course ,&lt;br /&gt;&lt;br /&gt;&lt;pre class="HL"&gt;# rpm -ihv http://ayo.freshrpms.net/fedora/linux/6/i386/RPMS.freshrpms/freshrpms-release-1.1-1.fc.noarch.rpm&lt;br /&gt;&lt;b&gt;32 bit version:&lt;/b&gt;&lt;br /&gt;# rpm -ihv http://rpm.livna.org/fedora/6/i386/livna-release-6-1.noarch.rpm&lt;br /&gt;&lt;b&gt;64 bit version:&lt;/b&gt;&lt;br /&gt;# rpm -ihv http://rpm.livna.org/fedora/6/x86_64/livna-release-6-1.noarch.rpm&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;/span&gt;&lt;/pre&gt;You can browse the packages available there at &lt;a href="http://rpm.livna.org/fedora/6/i386/"&gt;http://rpm.livna.org/fedora/6/i386/&lt;/a&gt; and &lt;a href="http://zod.freshrpms.net/"&gt;http://zod.freshrpms.net/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;2.Now you can use yum in the following manner to install new packages ,&lt;br /&gt; &lt;span style="font-style: italic;"&gt; #yum install  package_name1[package_name2][package_name3].....[package_nameN]&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;  You can use the '-y' if you dont wanna answer y/n questions&lt;br /&gt; &lt;br /&gt;3.You can also use yum to update existing packages,&lt;br /&gt;&lt;br /&gt; &lt;span style="font-style: italic;"&gt;#yum update package_name1[package_name2][package_name3]...[package_nameN]&lt;br /&gt; &lt;/span&gt;If no package name is specified yum will update all installed packages&lt;br /&gt;&lt;br /&gt;4.Similarly the command to remove packages is&lt;br /&gt;&lt;span style="font-style: italic;"&gt; #yum remove package_name1[package_name2][package_name3]....[package_nameN]&lt;/span&gt;&lt;br /&gt; "erase" can also be used instead of "remove".&lt;br /&gt; Apart from this are a lot of options for searching packages ,group  install  etc.Go check out the man page.&lt;br /&gt;&lt;br /&gt;One of the bugs that I had with the yum version that ships with FC6 occurs when an instance of yum terminates improperly, giving the following error everytime "yum" is run,&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  Existing lock /var/run/yum.pid: another copy is running. Aborting.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To avoid this please update to the latest version of yum before using it..i.e&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  #yum update yum&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32179994-116704109862801090?l=ashutoshadkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashutoshadkar.blogspot.com/feeds/116704109862801090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32179994&amp;postID=116704109862801090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/116704109862801090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/116704109862801090'/><link rel='alternate' type='text/html' href='http://ashutoshadkar.blogspot.com/2006/12/yummy.html' title='YUMmy!!!'/><author><name>Ashutosh</name><uri>http://www.blogger.com/profile/13520896234133202310</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_ooYuXMpIL4g/SEDOQjATM7I/AAAAAAAAAh4/EHLK2WrRjqo/S220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32179994.post-116620345838591059</id><published>2006-12-15T09:18:00.000-08:00</published><updated>2006-12-15T09:24:18.400-08:00</updated><title type='text'></title><content type='html'>This is the summary of speech Given by &lt;span style="font-weight: bold;"&gt;Alex Stepenov&lt;/span&gt; (The man behind STL ; Principal Scientist, Adobe Systems) at Adobe India on 30 Nov 2004. It's really a great speech. I think every programmer should read it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Study , Study and Study&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- Never ever think that you have acquired all or most of the knowledge which exists in the world. Almost everybody in US at age of 14 and everybody in India at age of 24 starts thinking that he has acquired all the wisdom and knowledge that he needs. This should be strictly avoided.&lt;br /&gt;&lt;br /&gt;- You should be habituated to studies...exactly in the same way as you are habituated to brushing teeth and taking bath every morning. The habit of study must become a ‘part of your blood’. And the study should be from both the areas: CS, since it is your profession, and something from non-CS...Something which doesnot relate to your work. This would expand your knowledge in other field too. A regular study, everyday, is extremely essential. It doesnot matter whether you study of 20 minutes of 2 hours, but consistency is a must.&lt;br /&gt;&lt;br /&gt;- You should always study basics and fundamentals. There is no point in going for advanced topics. When I was at the age of 24, I wanted to do PhD in program verification, though I was not able to understand anything from that. The basic reason was that my fundamental concepts were not clear. Studying ‘Algebraic Geometry’ is useless if you donot understand basics in Algebra and Geometry. Also, you should always go back and re-read and re-iterate over the fundamental concepts. What is the exact definition of ‘fundamental’? The stuff which is around for a while and which forms basic part of the concepts can be regarded as more fundamental. Of course, everybody understands what a fundamental means.&lt;br /&gt;&lt;br /&gt;- Here are &lt;span style="font-weight: bold;"&gt;few books which I would strongly recommend&lt;/span&gt; that every CS professional should read and understand.&lt;br /&gt;&lt;br /&gt;i. &lt;span style="font-weight: bold;"&gt;“Structure and Interpretation of Computer Programs”&lt;/span&gt; by &lt;span style="font-weight: bold;"&gt;Albenson and Sussman&lt;/span&gt; I personally donot like the material present in this book and I do have some objections about it but this is the best book I have ever seen which explains all the concepts in programming in a clear and excellent way. This book is available online at &lt;a href="http://mitpress.mit.edu/sicp/"&gt;http://mitpress.mit.edu/sicp/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ii. &lt;span style="font-weight: bold;"&gt;Introduction to Computer Architecture&lt;/span&gt;: by &lt;span style="font-weight: bold;"&gt;Hennessy and Patterson&lt;/span&gt;. How many of you have shipped the programs by writing them in assembly? A very good understanding of basics of how a computer operates is what every CS professional must have. H&amp;P Wrote two books on CA. I am talking about their first book, the introductory text for understanding basic aspects of how a computer works. Even if you feel that you know whatever is written in that book, donot stop reading. It’s good to revise basics again and again.&lt;br /&gt;&lt;br /&gt; iii. &lt;span style="font-weight: bold;"&gt;“Fundamentals of Programming” by Donald Knuth.&lt;/span&gt; The core of CS is algorithms and Data structures. Every CS professional must have the 3 volumes of Knuth’s Book on programming. It really doesnot matter if you take 30 years of your life to understand what Knuth has written, what is more important is that you read atleast some part of that book everyday without fail. iv. Introduction to Algorithms by Cormen, Leiserson and Rivest This book should be read daily to keep your concepts fresh. This is the best book for fundamental concepts in algorithms.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Learn Professional Ethics&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- As a CS Professional, you are morally obliged to do a good job. What this means is that you are supposed to do your job not for your manager but for yourself. This is already told in Bhagwatgeeta : Doing duties of your life.&lt;br /&gt;&lt;br /&gt;- The direct implication of this is: never ever write a bad code. You don’t need to be fastest and run after shipping dates; rather you need to write quality code. Never write junk code. Rewrite it till it is good. Thoroughly test every piece of code that you write. Do not write codes which are “sort of alright”. You might not achieve perfection, but atleast your code should be of good quality.&lt;br /&gt;&lt;br /&gt;- Let me quote my own example in this context. You might have heard about STL, The Standard Template Library that ships in with C++ compilers. I wrote it 10 years ago, in 1994. While implementing one of the routines in the STL, namely the “search routine”, I was a bit lazy and instead of writing a good linear order implementation of KMP which was&lt;br /&gt;difficult to code, I wrote a best quadratic implementation. I knew that I could make the search faster by writing a linear-order implementation, but I was lazy and I did not do that. And, after 10 years of my writing STL, exactly the same implementation is still used inside STL and STL ships with an inefficient quadratic implementation of search routine even today!! You might ask me: why can’t you rewrite that? Well...I cannot, because that code is no more my property!! Further, nobody today will be interested in a standalone efficient STL ...people would prefer one which automatically ships out with the compiler itself.&lt;br /&gt;&lt;br /&gt;- Moral is, you should have aesthetic beauty built inside you. You should “feel” uneasy on writing bad code and should be eager to rewrite the code till it becomes upto the quality. And to the judge the quality, you need to develop sense regarding which algorithms to use under what circumstances.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Figure out your Goals&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- Always aspire doing bigger things in life&lt;br /&gt;&lt;br /&gt;- “Viewing promotion path as your career” is a completely wrong goal. If you are really interested in studying and learning new things, never ever aspire for being a manager. Managers cannot learn and study...they have no time. “Company ladder aspiration” is not what should be important for you.&lt;br /&gt;&lt;br /&gt;- You might feel that you want to do certain things which you cannot do till you become a manager. When you become a manager, you will soon realize that now you just cannot do anything!&lt;br /&gt;&lt;br /&gt;- You will have a great experience as programmers. But if you care for people and love people, you will never enjoy being a manager...most good managers are reluctant managers. If you see people as people, you cannot survive at management level.&lt;br /&gt;&lt;br /&gt;- Always aspire for professional greatness. Our profession is very beautiful because we create abstract models and implement them in reality. There is a big fun in doing that. We have a profession which allows us to do creative things and even gives nice salary for that.&lt;br /&gt;&lt;br /&gt;- The three biggest mistakes that people usually make are aiming for money, aiming for promotion and aiming for fame. The moment you get some of these, you aspire for some more...and then there is no end. I donot mean that you shouldnot earn money, but you should understand how much money would satisfy your needs. Bill Clinton might be the richest person in the world; he is certainly not the happiest. Our lives are far better than his.&lt;br /&gt;&lt;br /&gt;- Find your goal, and do best in the job that you have. Understand that what is in your pocket doesnot matter...what is in your brain finally matters. Money and fame donot matter. Knowledge matters.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. Follow your culture &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have seen the tradition that whatever junk is created in US, it rapidly spreads up in the rest of the world, and India is not an exception for this. This cultural change creates a very strong impact on everybody’s life. Habits of watching spicy Bollywood or Hollywood movies and listening to pop songs and all such stupid stuff gets very easily cultivated in people of your age...but believe me, there is nothing great in that. This all just makes you run away from your culture. And there is no wisdom in running away from your culture. Indian culture, which has great Vedas and stories like Mahabharata and Bhagwatgeeta is really great and even Donald Knuth enjoys reading that. You should understand that fundamental things in Indian culture teach you a lot and you should never forget them. Finally, I would like to conclude by saying that it’s your life...donot waste it on stupid things...develop your tests, and start the fight.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32179994-116620345838591059?l=ashutoshadkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashutoshadkar.blogspot.com/feeds/116620345838591059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32179994&amp;postID=116620345838591059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/116620345838591059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/116620345838591059'/><link rel='alternate' type='text/html' href='http://ashutoshadkar.blogspot.com/2006/12/this-is-summary-of-speech-given-by.html' title=''/><author><name>Ashutosh</name><uri>http://www.blogger.com/profile/13520896234133202310</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_ooYuXMpIL4g/SEDOQjATM7I/AAAAAAAAAh4/EHLK2WrRjqo/S220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32179994.post-115608589399585384</id><published>2006-08-20T07:46:00.000-07:00</published><updated>2006-08-20T07:58:14.036-07:00</updated><title type='text'>Juxta it is then!</title><content type='html'>Yes.I have finally zeroed in on my first sem project.Its actually an application that implements the JXTA P2P protocol.Looks exciting.Time will tell....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32179994-115608589399585384?l=ashutoshadkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashutoshadkar.blogspot.com/feeds/115608589399585384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32179994&amp;postID=115608589399585384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/115608589399585384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/115608589399585384'/><link rel='alternate' type='text/html' href='http://ashutoshadkar.blogspot.com/2006/08/juxta-it-is-then.html' title='Juxta it is then!'/><author><name>Ashutosh</name><uri>http://www.blogger.com/profile/13520896234133202310</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_ooYuXMpIL4g/SEDOQjATM7I/AAAAAAAAAh4/EHLK2WrRjqo/S220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32179994.post-115503640193269621</id><published>2006-08-08T04:23:00.000-07:00</published><updated>2006-08-08T04:26:41.946-07:00</updated><title type='text'>Game Torrents</title><content type='html'>Well its seems the major torrent sites dont always have the game that you want.In that case I suggest you visit this site,&lt;br /&gt;http://www.blackcats-games.net/&lt;br /&gt;It has all the latest game torrents as well as torrents for some classic games...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32179994-115503640193269621?l=ashutoshadkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashutoshadkar.blogspot.com/feeds/115503640193269621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32179994&amp;postID=115503640193269621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/115503640193269621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/115503640193269621'/><link rel='alternate' type='text/html' href='http://ashutoshadkar.blogspot.com/2006/08/game-torrents.html' title='Game Torrents'/><author><name>Ashutosh</name><uri>http://www.blogger.com/profile/13520896234133202310</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_ooYuXMpIL4g/SEDOQjATM7I/AAAAAAAAAh4/EHLK2WrRjqo/S220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32179994.post-115470709594408310</id><published>2006-08-04T08:53:00.000-07:00</published><updated>2006-08-04T08:58:15.953-07:00</updated><title type='text'>Looking for projects</title><content type='html'>Well here goes...&lt;br /&gt;Looking for a MCS-I Sem I project.&lt;br /&gt;Currently evaluating a J2ME project.&lt;br /&gt;Its client-server data transfer application that communicates using  Bluetooth.&lt;br /&gt;Probably gonna be guided by some people  from Symantec.&lt;br /&gt;If you have any suggestions mail me...&lt;br /&gt;Will keep the blog updated with my project developments(Yawn...how interesting!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32179994-115470709594408310?l=ashutoshadkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashutoshadkar.blogspot.com/feeds/115470709594408310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32179994&amp;postID=115470709594408310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/115470709594408310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32179994/posts/default/115470709594408310'/><link rel='alternate' type='text/html' href='http://ashutoshadkar.blogspot.com/2006/08/looking-for-projects.html' title='Looking for projects'/><author><name>Ashutosh</name><uri>http://www.blogger.com/profile/13520896234133202310</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_ooYuXMpIL4g/SEDOQjATM7I/AAAAAAAAAh4/EHLK2WrRjqo/S220/pic1.jpg'/></author><thr:total>0</thr:total></entry></feed>
