<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" 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" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0cARHo9cSp7ImA9WhJQEko.&quot;"><id>tag:blogger.com,1999:blog-3769372590898987194</id><updated>2012-07-25T20:57:25.469-07:00</updated><category term="linux" /><category term="lenovo laptip" /><category term="OLPC" /><category term="ubuntu" /><title>Blogging Computer science</title><subtitle type="html">I read a lot of technical blogs. It encouraged me to write my own technical blog.
I will be writing about my experience, the trouble i come upon, problems i solved etc etc ;)</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://manish-cs.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://manish-cs.blogspot.com/" /><author><name>Manish Regmi</name><uri>https://plus.google.com/109325762214628705622</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-PoTDyR4bksM/AAAAAAAAAAI/AAAAAAAAKa0/KjATfGWpYy4/s512-c/photo.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>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/BloggingComputerScience" /><feedburner:info uri="bloggingcomputerscience" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D0AEQn86eCp7ImA9WxFSF04.&quot;"><id>tag:blogger.com,1999:blog-3769372590898987194.post-3561586973063804442</id><published>2010-04-19T20:55:00.000-07:00</published><updated>2010-04-19T20:55:03.110-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-19T20:55:03.110-07:00</app:edited><title>compiling the linux kernel easy way in ubuntu.</title><content type="html">If you are a person who likes to play with newest kernels and change the code every now and then, you might find the debian style kernel compiling too frustrating. For me it takes ages to create a dpkg kernel package. Since i configure kernel with debugginng information, its huge. even the dpkg file is few hundred MB and takes an aweful lot of time to create it using make-kpkg.&lt;br /&gt;
&lt;br /&gt;
We can easily compile the kernel the old way. just do&lt;br /&gt;
make oldconfig/menuconfig/xconfig/whateverconfig&lt;br /&gt;
make&lt;br /&gt;
sudo make modules_install&lt;br /&gt;
sudo install&lt;br /&gt;
sudo mkinitramfs -o /boot/initrd.img-yourversion yourversion&lt;br /&gt;
sudo update-grub&lt;br /&gt;
&lt;br /&gt;
its that easy and fast :-)&lt;img src="http://feeds.feedburner.com/~r/BloggingComputerScience/~4/upliElgBv4A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://manish-cs.blogspot.com/feeds/3561586973063804442/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3769372590898987194&amp;postID=3561586973063804442" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/3561586973063804442?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/3561586973063804442?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BloggingComputerScience/~3/upliElgBv4A/compiling-linux-kernel-easy-way-in.html" title="compiling the linux kernel easy way in ubuntu." /><author><name>Manish Regmi</name><uri>https://plus.google.com/109325762214628705622</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-PoTDyR4bksM/AAAAAAAAAAI/AAAAAAAAKa0/KjATfGWpYy4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://manish-cs.blogspot.com/2010/04/compiling-linux-kernel-easy-way-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AMRn4-eCp7ImA9WxFSEUQ.&quot;"><id>tag:blogger.com,1999:blog-3769372590898987194.post-5146264583975203449</id><published>2010-04-13T14:31:00.000-07:00</published><updated>2010-04-13T14:56:27.050-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-13T14:56:27.050-07:00</app:edited><title>How Intel Virtualization and KVM Works?</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;How Intel Virtualization and KVM Works?&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Virtualization is a Processor technology which enables a Virtual machine to run Natively in processor (Not all Instructions) without Emulation. Your Hardware must support Intel Vt-x or SVM to support hardware virtualization.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;It supports Virtualization with the use of new operating Modes called VMX root operation and VMX non Root Operation. Before Virtual machines can make use of Virtualization features, it should be turned on with VMXON Instruction. It can be turned off using VMXOFF. It is usually done by Virtualization driver when loaded. The processor runs the instruction of the virtual machine in VMX non root operation. Only certain instructions can be run in this mode. When the VM runs critical instructions like I/O (can be controlled using I/O bitmap), write to CR etc, the mode is switched to VMX root operation and the control is passed to Virtualization driver (aka VM Monitor or Hypervisor). The Hypervisor takes care of that instruction by emulating it and again enters VMX non root operation.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;In KVM, the kvm driver on insert checks if the hardware supports VT-X, creates IOCTL handlers for the KVM device file /dev/kvm.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;the IOCTL handles a number of operations including, getting version, getting/setting registers, creating memory map for guest, creating/destroying virtual machine instance etc.&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The Application like QEMU uses KVM by doing IOCTL calls to kvm through /dev/kvm. Basically it does it through the use of libkvm. it,&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;calls kvm_init to inititialize kvm vmm&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&amp;nbsp; * it registers a set of call backs which is on when running preveledged instructions like I/O instructions.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&amp;nbsp; * opens /dev/kvm and checks the versions and stuffs.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&amp;nbsp; * initializes kvm_context structure and returns.&lt;br /&gt;
&lt;br /&gt;
calls kvm_create to create a VM.&amp;nbsp;&lt;/span&gt; &lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&amp;nbsp; * it pass the size of memory vm should allocate and returns the start address (the image is loaded there.).&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&amp;nbsp; * creates VCPU by calling KVM_CREATE_VCPU IOCTL&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&amp;nbsp; * mmaps the said memory is to applications address space using mmap.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
Initializes all the hardwares to be emulated.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Calls kvm_run to run the virtual machine.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;* It calls KVM_RUN IOCTL to start running the VM.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;These are the basic things done by the application that uses KVM but not all. I am also currently writing the brief Walk through of the KVM code which i learned while reading the KVm code.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Regards,&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Manish Regmi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BloggingComputerScience/~4/kvWZlkipvac" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://manish-cs.blogspot.com/feeds/5146264583975203449/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3769372590898987194&amp;postID=5146264583975203449" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/5146264583975203449?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/5146264583975203449?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BloggingComputerScience/~3/kvWZlkipvac/how-intel-virtualization-and-kvm-works.html" title="How Intel Virtualization and KVM Works?" /><author><name>Manish Regmi</name><uri>https://plus.google.com/109325762214628705622</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-PoTDyR4bksM/AAAAAAAAAAI/AAAAAAAAKa0/KjATfGWpYy4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://manish-cs.blogspot.com/2010/04/how-intel-virtualization-and-kvm-works.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIERHo4eyp7ImA9WxFSEUw.&quot;"><id>tag:blogger.com,1999:blog-3769372590898987194.post-362501975929409917</id><published>2010-04-12T16:05:00.000-07:00</published><updated>2010-04-12T16:05:05.433-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-12T16:05:05.433-07:00</app:edited><title>How to create statically linked executables in QT4?</title><content type="html">Recently i used QT for Ext2read project. (http://ext2read.sf.net).&lt;br /&gt;
I  found out that the default installation of QT is configured such that it  dynamically links with all the QT library (like QT4core.dll etc) and  Mingw runtime (like mingwm10.dll). It means that you cannot just deploy  the executable you created. You will need to deploy the dlls that your  application use which include a lot of qt*.dll and mingw*.dll.&lt;br /&gt;
&lt;br /&gt;
If  you want to configure QT to generate static code, you need to compile  QT statically. But that is not enough. you also need to change  qmake.conf.&lt;br /&gt;
&lt;br /&gt;
First go to mkspecs\win32-g++\qmake.conf and add  -static in the line QMAKE_LFLAGS&lt;br /&gt;
now it will look like this,&lt;br /&gt;
QMAKE_LFLAGS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  = -static -enable-stdcall-fixup -Wl, ...&lt;br /&gt;
&lt;br /&gt;
Now recompile your QT  Library. To do that follow the steps below.&lt;br /&gt;
First make sure the QT  bin directory and Mingw Bin directory is in your PATH envirnoment  variable.&lt;br /&gt;
If not add C:\qt\2010.02.1\qt\bin and  C:\qt\2010.02.1\mingw\bin (or wherever QT is installed) to your PATH  envirnoment variable. for that right click on your computer, click  properties, go to advanced system settings, click Envirnoment variables.&lt;br /&gt;
Now,  open command enterpreter and go to qt\src directory and type&lt;br /&gt;
configure  -static -debug-and-release -no-exceptions (NOTE: you can add any other  parameters. see configure -help for details. But -no-exceptions is  required.)&lt;br /&gt;
&lt;br /&gt;
After the configure is run sucessfully. type,&lt;br /&gt;
mingw32-make  sub-src&lt;br /&gt;
&lt;br /&gt;
This will take a long time to compile. after it is  completed you are ready to build your project statically.&lt;br /&gt;
To build  your project as static release, type&lt;br /&gt;
qmake -config release&lt;br /&gt;
mingw32-make&lt;br /&gt;
&lt;br /&gt;
You can use a tool called dependency walker to find out the dlls your  application depends on. You can download it from &lt;a href="http://www.dependencywalker.com/"&gt;http://www.dependencywalker.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Regards,&lt;br /&gt;
Mainsh Regmi&lt;img src="http://feeds.feedburner.com/~r/BloggingComputerScience/~4/1NHYS2r9Oho" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://manish-cs.blogspot.com/feeds/362501975929409917/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3769372590898987194&amp;postID=362501975929409917" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/362501975929409917?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/362501975929409917?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BloggingComputerScience/~3/1NHYS2r9Oho/how-to-create-statically-linked.html" title="How to create statically linked executables in QT4?" /><author><name>Manish Regmi</name><uri>https://plus.google.com/109325762214628705622</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-PoTDyR4bksM/AAAAAAAAAAI/AAAAAAAAKa0/KjATfGWpYy4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://manish-cs.blogspot.com/2010/04/how-to-create-statically-linked.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4FRno8fCp7ImA9WxFTEEo.&quot;"><id>tag:blogger.com,1999:blog-3769372590898987194.post-5531867753065812882</id><published>2010-03-31T15:27:00.000-07:00</published><updated>2010-03-31T15:35:17.474-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-31T15:35:17.474-07:00</app:edited><title>How Ext4 Extents Work?</title><content type="html">How Ext4 Extents Work?&lt;br /&gt;
&lt;br /&gt;
Earlier Ext2 and Ext3 had the limitation on the size of the file. It used 32 bit block number to&amp;nbsp;access the data blocks. So that limited the maximum size of file to be 2^32 * blocksize(eg. 4k**) =&amp;nbsp;16TB*. Also the access time for large Files were slow because in had to go through lots of&amp;nbsp;indirection.Ext4 Filesystem can support very large files it has 48 bits to adress a block. Also its&amp;nbsp;uses extents to store data so access time is faster for large files.&lt;br /&gt;
&lt;br /&gt;
The information for the data blocks are stored in the i_data of the inode structure. In a system&amp;nbsp;without Extents, the first 12 entries contains the block numbers of the first 12 blocks of data. Then&lt;br /&gt;
&amp;nbsp;it contains the block number for the Indirect blocks. That block contains the array of block numbers&amp;nbsp;which point to the data. Similarly, there is Double indirect block and triple indirect block. So if&amp;nbsp;we need to get the data from a very large file, we need to go through those indirection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
How to determine if the Filesystem uses Extents or indirect Mapping?&lt;br /&gt;
&lt;br /&gt;
To determine whether the inode has extent based mapping or indirect mapping. We need to look at the&amp;nbsp;EXT2_EXTENTS_FL bit in the i_flags in inode structure. The root directory always has the indirect&amp;nbsp;mapping instead of the block mapping.&lt;br /&gt;
&lt;br /&gt;
What does the Ext4 Extents Data Structure Look like and where it is stored?&lt;br /&gt;
&lt;br /&gt;
In extenxt based block mapping, the i_data of inode contains Extent structures. &amp;nbsp;There is a extent&amp;nbsp;header, Extent and Extent index. The following structures define those structures.&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&amp;nbsp;* This is the extent on-disk structure.&lt;br /&gt;
&amp;nbsp;* It's used at the bottom of the tree.&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
struct ext4_extent {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t ee_block; /* first logical block extent covers */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t ee_len; /* number of blocks covered by extent */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t ee_start_hi; /* high 16 bits of physical block */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t ee_start_lo; /* low 32 bits of physical block */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&amp;nbsp;* This is index on-disk structure.&lt;br /&gt;
&amp;nbsp;* It's used at all the levels except the bottom.&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
typedef struct ext4_extent_idx {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t &amp;nbsp;ei_block; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* index covers logical blocks from 'block' */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t &amp;nbsp;ei_leaf_lo; &amp;nbsp; &amp;nbsp; /* pointer to the physical block of the next *&lt;br /&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;nbsp; * level. leaf or next index could be there */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t &amp;nbsp;ei_leaf_hi; &amp;nbsp; &amp;nbsp; /* high 16 bits of physical block */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t &amp;nbsp; ei_unused;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&amp;nbsp;* Each block (leaves and indexes), even inode-stored has header.&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
typedef struct ext4_extent_header {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t &amp;nbsp;eh_magic; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* probably will support different formats */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t &amp;nbsp;eh_entries; &amp;nbsp; &amp;nbsp; /* number of valid entries */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t &amp;nbsp;eh_max; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* capacity of store in entries */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t &amp;nbsp;eh_depth; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* has tree real underlying blocks? */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t &amp;nbsp;eh_generation; &amp;nbsp;/* generation of the tree */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
(NOTE: They are stored as little endean and Linux code has __le32 types used)&lt;br /&gt;
&lt;br /&gt;
The Extent is implemented as a B+ Tree. Only the leaf nodes has the Extent Structure. Others have&amp;nbsp;Extent Index Structure.&amp;nbsp;The extent information starts with the header and then either Extent or Extent Index.In the i_data&amp;nbsp;there is only space for header and 3 more Extent structures. If more extent information needs to be&amp;nbsp;stored, than whole bocks with extent index structures are used. In the non leaf nodes, extent index&amp;nbsp;structures are used. It contains the block number of the block where next level of nodes are stored.&lt;br /&gt;
The logic can be described by the following 2 figures.&lt;br /&gt;
&lt;br /&gt;
(Please click the images to see full image)&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_EHkZWU3tdyc/S7PL3YYyuOI/AAAAAAAAIOg/T9dN0c9JPIw/s1600/extent-i_block.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_EHkZWU3tdyc/S7PL3YYyuOI/AAAAAAAAIOg/T9dN0c9JPIw/s640/extent-i_block.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_EHkZWU3tdyc/S7PMJSmNhaI/AAAAAAAAIOw/w8oVgXUftoo/s1600/extent-idx.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/_EHkZWU3tdyc/S7PMJSmNhaI/AAAAAAAAIOw/w8oVgXUftoo/s640/extent-idx.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;The eh_magic field in the header is always 0xf30a (little endean).&lt;br /&gt;
The eh_entries field determines the no of valid extents in that extent array.&lt;br /&gt;
The eh_depth is the depth of the B+ tree. if the depth is 0, the extents in that array are always&amp;nbsp;extent structures and not the extent index structures.&lt;br /&gt;
&lt;br /&gt;
I have implemented this feature in ext2read project (http://ext2read.sf.net).It hasn't been tested yet though for very large files.&amp;nbsp;The Ext4 also uses HTree for directory entries. I am currently studying it and implementing.&lt;br /&gt;
&lt;br /&gt;
Please let me know if you have any questions.&lt;br /&gt;
Manish Regmi (regmi dot manish at gmail dot com)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BloggingComputerScience/~4/M09s0ip7uPM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://manish-cs.blogspot.com/feeds/5531867753065812882/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3769372590898987194&amp;postID=5531867753065812882" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/5531867753065812882?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/5531867753065812882?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BloggingComputerScience/~3/M09s0ip7uPM/how-ext4-extents-work.html" title="How Ext4 Extents Work?" /><author><name>Manish Regmi</name><uri>https://plus.google.com/109325762214628705622</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-PoTDyR4bksM/AAAAAAAAAAI/AAAAAAAAKa0/KjATfGWpYy4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_EHkZWU3tdyc/S7PL3YYyuOI/AAAAAAAAIOg/T9dN0c9JPIw/s72-c/extent-i_block.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://manish-cs.blogspot.com/2010/03/how-ext4-extents-work.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUEQnk-fip7ImA9WxBWGUk.&quot;"><id>tag:blogger.com,1999:blog-3769372590898987194.post-7427828236658985877</id><published>2010-02-11T18:53:00.000-08:00</published><updated>2010-02-11T18:53:23.756-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-11T18:53:23.756-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="lenovo laptip" /><title>Installing ubuntu 9.10 on a Lenovo ideapad Y550 (or any other system that uses Intel 4500 chip)</title><content type="html">&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Tahoma&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-bidi-theme-font: minor-bidi;"&gt;&lt;b&gt;Installing ubuntu 9.10 on a Lenovo ideapad Y550 (or any other system that uses Intel 4500 &lt;/b&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Tahoma&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;b&gt;chip)&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I wanted to install ubuntu in my new Lenovo ideapad Y550 but the problem was i just got blank screen. Just after the CD boots and when I press to eithr install or boot through CD, I got blank screen. I could figure that the system was booting. It was just the screen which was blank.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;No matter what other options I use, I could not get it to work. I tried safe mode graphics , acpi=off option and what not but all in vein. After&amp;nbsp; a little study I figured out that I needed to pass, i915.modeset=0 as a kernel parameter. To do that, just press F6, esc and add that line in the end of the kernel parameter. &amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;This has something to do with a new kernel feature called kernel mode setting (KMS). &lt;/span&gt;&lt;span class="apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;KMS is a feature now in Linux kernel which will do the work of setting your screen resolution, depth, colors, etc. Earlier this was done by the XOrg graphics drivers. For example, before the kernel version 2.6.28, when you use to change your screen resolution from your GNOME/KDE, the XOrg driver use to do it. Now the same task is moved into the Linux kernel to speed up the things.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; Ubuntu comes with a kernel&amp;nbsp; confured &amp;nbsp;with KMS and the value for 915 based chipsets set to i915.modeset=1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;There is another problem. The new ubuntu comes with a new version of grub. This not as straightforward as older one in which you just edit a file called grub.conf or menu.lst. This one is a pain in the ass to customize. If u edit the grub.cfg file to add the i915.modeset=0 parameter, the setting will be gone next time you upgrade kernel. And a new grub.cfg is generated automatically and you have to add the parameter again. Also learn to console based editors like vim, GUI editors wont let you write to the grub.cfg file. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I will write about grub customization when I have time. Enjoy ubuntu in your laptop.&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BloggingComputerScience/~4/QoPrtZuJsrc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://manish-cs.blogspot.com/feeds/7427828236658985877/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3769372590898987194&amp;postID=7427828236658985877" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/7427828236658985877?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/7427828236658985877?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BloggingComputerScience/~3/QoPrtZuJsrc/installing-ubuntu-910-on-lenovo-ideapad.html" title="Installing ubuntu 9.10 on a Lenovo ideapad Y550 (or any other system that uses Intel 4500 chip)" /><author><name>Manish Regmi</name><uri>https://plus.google.com/109325762214628705622</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-PoTDyR4bksM/AAAAAAAAAAI/AAAAAAAAKa0/KjATfGWpYy4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://manish-cs.blogspot.com/2010/02/installing-ubuntu-910-on-lenovo-ideapad.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUMSH4zfip7ImA9WBFVEEQ.&quot;"><id>tag:blogger.com,1999:blog-3769372590898987194.post-5268011838706932096</id><published>2007-04-08T21:47:00.000-07:00</published><updated>2007-04-08T21:51:29.086-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-04-08T21:51:29.086-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OLPC" /><title>Start testing power management in OLPC</title><content type="html">Start hacking OLPC for power management.&lt;br /&gt;&lt;br /&gt;   Now there are words of succsssful suspend and resume on OLPC, it is time to do some testing.&lt;br /&gt;For this we need at least a B2 OLPC machine. Apart form that we need the powermgmt branch of olpc-2.6 git tree found at git://dev.laptop.org/olpc-2.6 and an experimental firmware version q2c00.rom and higher.&lt;br /&gt;&lt;br /&gt;first download the things (git tree and firmware) in your PC&lt;br /&gt;here are the steps you need to follow for flashing new firmware&lt;br /&gt;&lt;br /&gt;put the firmware in your usb drive.&lt;br /&gt;then boot the OLPC B2 machine.&lt;br /&gt;interrupt the boot process by pressing "any key". (dont search wor a key named any, just press your favourate key ;))&lt;br /&gt;at the ok prompt, type "flash disk:\&lt;your&gt;"&lt;br /&gt;eg. ok flash disk:\q2c01.rom&lt;br /&gt;after updating your firmware, the system will shut down.&lt;br /&gt;Now you have a power management capable firmware.&lt;br /&gt;&lt;br /&gt;You will also need the powermgmt branch of the official OLPC kernel tree.&lt;br /&gt;If you dont already have the tree just clone it.&lt;br /&gt;$ git clone git://dev.laptop.org/olpc-2.6 olpc-2.6&lt;br /&gt;&lt;br /&gt;else if you already have the tree just pull latest ones by doing&lt;br /&gt;$ git pull&lt;br /&gt;&lt;br /&gt;else if you already have the tree but not the powermgmt branch, you can pull that branch just by doing&lt;br /&gt;$ git pull git://dev.laptop.org/olpc-2.6 olpc-2.6 powermgmt&lt;br /&gt;But i suggest you just write this to your .git/remotes/origin file&lt;br /&gt;URL: git://dev.laptop.org/olpc-2.6&lt;br /&gt;Pull: refs/heads/master:refs/heads/origin&lt;br /&gt;Pull: refs/heads/libertas:refs/heads/libertas&lt;br /&gt;Pull: refs/heads/linus:refs/heads/linus&lt;br /&gt;Pull: refs/heads/mtd:refs/heads/mtd&lt;br /&gt;Pull: refs/heads/geode:refs/heads/geode&lt;br /&gt;Pull: refs/heads/powermgmt:refs/heads/powermgmt&lt;br /&gt;Pull: refs/heads/stable:refs/heads/stable&lt;br /&gt;Pull: refs/heads/devtree:refs/heads/devtree&lt;br /&gt;Pull: refs/heads/zones_of_death:refs/heads/zones_of_death&lt;br /&gt;Pull: refs/heads/experimental:refs/heads/experimental&lt;br /&gt;&lt;br /&gt;after doing git pull, all branches will be updated/created.&lt;br /&gt;&lt;br /&gt;now switch to the powermgmt branch by doing&lt;br /&gt;git checkout powermgmt&lt;br /&gt;&lt;br /&gt;Now start editing and compiling the kernel.&lt;br /&gt;make xconfig&lt;br /&gt;make&lt;br /&gt;make modules_install&lt;br /&gt;&lt;br /&gt;not after everything is compiled, put the arch/i386/boot/bzImage and /lib/modules/&lt;just&gt; to your usb drive.&lt;br /&gt;(Note: you can ask make modules_install to install the modules directly to your usb disk by using INSTALL_MOD_PATH variable)&lt;br /&gt;&lt;br /&gt;now boot the OLPC and copy bzImage to /boot/ (you can rename it to vmlinuz-version to follow naming convention.) and copy modules to /lib/modules/ folder.&lt;br /&gt;now reboot and start booting your new kernel.&lt;br /&gt;&lt;br /&gt;(Note: i have troubles creating new fth file and doing setenv boot-device nand:\boot\my.fth. ??? )&lt;img src="http://feeds.feedburner.com/~r/BloggingComputerScience/~4/bAWdMPnFkx4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://manish-cs.blogspot.com/feeds/5268011838706932096/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3769372590898987194&amp;postID=5268011838706932096" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/5268011838706932096?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/5268011838706932096?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BloggingComputerScience/~3/bAWdMPnFkx4/start-testing-power-management-in-olpc.html" title="Start testing power management in OLPC" /><author><name>Manish Regmi</name><uri>https://plus.google.com/109325762214628705622</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-PoTDyR4bksM/AAAAAAAAAAI/AAAAAAAAKa0/KjATfGWpYy4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://manish-cs.blogspot.com/2007/04/start-testing-power-management-in-olpc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkICQH4yeSp7ImA9WBFREE4.&quot;"><id>tag:blogger.com,1999:blog-3769372590898987194.post-8858311935751703069</id><published>2007-02-20T01:32:00.000-08:00</published><updated>2007-02-20T20:02:41.091-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-02-20T20:02:41.091-08:00</app:edited><title>Writing a power aware driver in Linux.</title><content type="html">Writing the power aware device driver is one of the most challenging task in Device driver development.&lt;br /&gt;I feel that power aware device drivers are not only necessary important to Laptops and embedded devices but also to desktops. For example, my desktop with 450 Watts of power supply eats a of electricity.&lt;br /&gt;Most hardwares support different kinds of power modes where they use different amounts of power. They can also be suspended and resumed But it requires that the device driver has a suspend() and resume() routine in it.&lt;br /&gt;The suspend() routine is called on direct user request (eg. laptop lid close, press suspend), system power policy (eg. sleep after 30 minutes of console inactivity) or device power policy (eg. power down device after 5 minutes of inactivity). Similarly the resume routine is called when the user starts using the device again (usually known by interrupt arrival). Similarly, the resume() routine is called when an interrupt is received.&lt;br /&gt;&lt;br /&gt;On the suspend event, the system is supposed to turn off the device or put the device in low power mode (if it supports it). But when the device is turned off , the state of the device might be lost and so can  the values in its internal registers. So, the driver is supposed to store the state of the device, the value of the registers etc (actually it is device dependent). Now when the suspend function is called, the device driver, stores the Device State, value of internal registers (or whatever that is lost on power off) and it disables the device (powers it off) or changes it to low power state.&lt;br /&gt;&lt;br /&gt;On the resume event, the system is supposed to turn on the device or put the device in “normal” mode. The important thing the driver needs to do is to restore the previous state of the device. So, when the resume routine is called the driver restores the device state. Some device may also require to run the initialization sequence of the device.&lt;br /&gt;&lt;br /&gt;The core suspend() and resume() are actually provided by the bus drivers. They reside in struct bus_type. The suspend and resume requests are first serviced by bus drivers and they forward the request to each of the devices attached to the bus serially. Its the job of the bus driver to act on bus specific power management registers, don't touch them.&lt;br /&gt;&lt;br /&gt;for example, if your device is a PCI device,&lt;br /&gt;&lt;br /&gt;int  mydevice_suspend(struct pci_device *pdev, pm_message_t state)&lt;br /&gt;{&lt;br /&gt;   if (state.event == PM_EVENT_SUSPEND) {&lt;br /&gt;       // Save device context  &lt;br /&gt;       // put your device into low power state&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int  mydevice_resume(struct pci_device *pdev)&lt;br /&gt;{&lt;br /&gt;   // put device into normal state&lt;br /&gt;   // restore device context&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;static struct pci_driver mydevice = {&lt;br /&gt;   .name        = "mydevice",&lt;br /&gt;   .id_table    = mydevice_id_table,&lt;br /&gt;   .probe        = mydevice_probe,&lt;br /&gt;   .remove    = mydevice_remove,&lt;br /&gt;   .suspend    = mydevice_suspend,&lt;br /&gt;   .resume    = mydevice_resume&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;for more details see Documentation/pm.txt and Documentation/power/*&lt;img src="http://feeds.feedburner.com/~r/BloggingComputerScience/~4/g_UFqaEbkCA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://manish-cs.blogspot.com/feeds/8858311935751703069/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3769372590898987194&amp;postID=8858311935751703069" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/8858311935751703069?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/8858311935751703069?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BloggingComputerScience/~3/g_UFqaEbkCA/writing-power-aware-driver-in-linux.html" title="Writing a power aware driver in Linux." /><author><name>Manish Regmi</name><uri>https://plus.google.com/109325762214628705622</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-PoTDyR4bksM/AAAAAAAAAAI/AAAAAAAAKa0/KjATfGWpYy4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://manish-cs.blogspot.com/2007/02/writing-power-aware-driver-in-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QMR3g_fSp7ImA9WBFSEUw.&quot;"><id>tag:blogger.com,1999:blog-3769372590898987194.post-2429811624921044310</id><published>2007-02-10T06:04:00.000-08:00</published><updated>2007-02-10T05:49:46.645-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-02-10T05:49:46.645-08:00</app:edited><title>Blogging Computer Science.</title><content type="html">I read a lot of technical blogs. It encouraged me to write my own technical blog.&lt;br /&gt;I will be writing about my experience, the trouble i come upon,  problems i  solved etc etc ;)&lt;img src="http://feeds.feedburner.com/~r/BloggingComputerScience/~4/qZ6k-RQSbbo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://manish-cs.blogspot.com/feeds/2429811624921044310/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3769372590898987194&amp;postID=2429811624921044310" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/2429811624921044310?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3769372590898987194/posts/default/2429811624921044310?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BloggingComputerScience/~3/qZ6k-RQSbbo/blogging-computer-science.html" title="Blogging Computer Science." /><author><name>Manish Regmi</name><uri>https://plus.google.com/109325762214628705622</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-PoTDyR4bksM/AAAAAAAAAAI/AAAAAAAAKa0/KjATfGWpYy4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://manish-cs.blogspot.com/2007/02/blogging-computer-science.html</feedburner:origLink></entry></feed>
