Resume

 
The interesting thing that I am currently doing

Personal Profile
Name: C.K.Kashyap
Age: 28
Education: BITS Pilani graduate - 2000 passout
Experience: 6 years
Email address: ck_kashyap@yahoo.com

Core competencies
	C programming - 8 years
	x86 Assembly programming - 7 years
	Perl programming - 5 years
	C++ programming - 2 years
	Java programming - 3 years
	Have been exploring the linux kernel slowly but regularly for over 4 years
	Computer Programming - over 16 years (started with BASIC in 1990 in my 7th grade)

Other Skills
	•vi/gvim editor expert
	•perl expert level
	•gdb intermediate level - used it extensively
	•In depth knowledge of HTTP
	•Understood various file formats such as wav, midi, gif, elf.
	•Reverse engineered the BMP file format.
	•Explored file systems FAT32 and EXT2
	•Explore the source of GRUB - a popular boot loader.
	•Explored various 32 bit open source kernels including linux
	•Working on my own 32 bit kernel - details are given at the end
	•Adapted a VGA mode X driver for linux with the intent of using it in my kernel.
	•Explored the working of GRUB - the bootloader
	•Explored linux VFS
	•Exlored ARP - did some ARP poisoning (with the spirit of exploration)
	•Expolored PXE boot - Was able to set up a DHCP server in Linux and have
	 it point to the PXE boot code - nothing but a small piece of x86 real
	 mode code that printed Hello World.
	•Understand JPEG compression.

Work Experience

Company Period Location
Very large MNC December 2005 - Bangalore
Microsoft March 2005 - December 2005 Hyderabad
Sun Microsystems September 2004 - March 2005 Bangalore
inSilica semiconductors October 2003 - September 2004 Bangalore
Virtusa March 2002 - October 2003 Hyderabad
Seranova July 2000 - March 2002 Hyderabad
Project done at work: Current job: November 2006 onwards - Lead the development of the core modules of the product. December 2005 - November 2006 - Lead two members in my team to build and maintain the Linux version of the product. Title: Virtual Server and Virtual PC Responsibilities: Bug fixing and maintenance Duration: March 2005 - December 2005 Platform: Windows Company: Microsoft Description: Work in the project involves maintenance of Microsoft Virtual Server and Virtual PC. Job also involved mentoring junior members of the team. Title: SunOne WebServer Responsibilities: Bug fixing and maintenance Duration: September 2004 to March 2005 Platform: Solaris/Linux/Windows Company: Sun Microsystems Description: As a part of this team I was responsible to fix bugs reported on the Sun's Webserver. Also, I was in charge of setting automated GAT(General Acceptance Test). Automated GAT involved writing Perl script to continuously check out the source, do a build and run the test suite. Since the repository was in a remote location, I had implemented a kind of "double buffer" to speed up the process. During the course of work here, I had opportunity to understand PKI. Title: 802.11 network stack. Responsibilities: Development and testing. Duration: October 2003 to September 2004 Platform: Linux Company: inSilica semiconductors Description: The goal of this project was to implement the 802.11 protocol stack. During the development of the stack, the wireless hardware was still being fabricated. Therefore, ethernet is used to emulate the physical layer. Also, an extensive test-suite was designed and developed in perl to test the stack from a central controller. Title: Pega expression compiler. Responsibilities: Development and testing. Duration: March 2003 - October 2003 Platform: Windows 2000 Client: Pega Systems. Company: Virtusa Description: This project involved writing an expression compiler for the Pega system's rules engine. ANTLR (lex/yacc equivalent in the java world) was used for this purpose. Developing the front end of this project involved extensive use of java-script to dynamically make HTTP connections to the server and parsing the retrieved XMLs. Title: EMC EDM Linux Port. Responsibilities: Development and testing. Duration: March 2002 February 2003. Platform: Solaris, Linux Client: EMC Corporation. Company: Virtusa Description: The goal of the EMC EDM Linux Port project is to port EDM (EMC's Data Manager) from Solaris to Linux. EDM contains 2.5 million lines of C and C++ programs. The UI part of EDM is in Java. The project was carried out in multiple phases. The first phase involved replacing the Solaris specific calls in the application source base with the POSIX equivalent. The second phase involved compiling the whole thing on Linux. The third phase involved executing the application and debugging on both the platforms. Title: Standard Implementation Framework (SIF) Responsibilities: Development and testing Duration: December 2000 to October 2001. Technologies: Vignette Story-Server, Java, XML Platform: Windows Company: Seranova (Now part of Cognizant) Description: Standard Implementation Framework is the name of the web content management utility developed for a fortune 500 American client. This utility was developed using Vignette's Story-Server. Using the tool a person with no knowledge of HTML could create and update web-content of the corporate web site. The tool allowed creation of page layouts on the fly. This was achieved using a JAVA applet. All the information about the layout and web contents were stored using XML. Title: SIF Support Responsibility: Attend to client calls and resolve issues Team size: 1 Duration: November 2001 to March 2002 Company: Seranova (Now part of Cognizant) Description: This project involved doing night shifts and waiting for client calls and resolving issues with SIF. Project done at school and college: Master Text Coder and Decoder - A text editor with pull down menus, written in QBASIC. This was my 10th standard computer project. Many of the features of MS EDIT were available on this piece of software. Technical Library Management Software - This program was written in Borland C++(it was a C program). This program had GUI (Text Mode). It was written as a part of the practice school program during the summer holidays after the second year. Wall Tracing - Wall tracing algorithm was implemented using an AGV (Autonomous Guided Vehicle) mounted with ultra-sonic sensors. The host code was written in C and assembly. Tape Tracking - Infrared sensors mounted on the AGV was used to implement tape tracking. The sensors were fabricated as a part of the project. Initially, interfacing with the computer was done through the parallel port. Later, a PCL 221 card was used for the purpose. Multitasking DOS - Code in assembly was written to enter protected mode form DOS, do preemptive multitasking of two 32-bit tasks, using the timer interrupt and then return back to DOS. Projects done at CAIR (Center for Artificial Intelligence and Robotics), Bangalore: 3D reconstruction - I wrote a program in C++ using the QT library, which generated a 3D model from a pair of stereo images. Microprogramming - The mobile robot I worked on was essentially a couple of DC servomotors. An 80196 micro-controller based card was used for controlling and driving the motors. Writing the micro-code for the micro-controller was a part of my project. 3D vision based navigation - For 3D vision based navigation, I mounted a pair of black & white cameras on the robot. A couple of vision based demo programs were developed. The first program made the robot chase a stick - keeping a safe distance from the stick. The second program made the robot play with a ball suspended in air. Stereo display - The gray-level images being captured by the cameras on the robot were merged and a pseudo color image was generated. The pseudo color images when viewed through a pair of special glasses gave the depth perspective. My kernel Aim: To develop a DOS like kernel that exports minimum device IO functionalities such as disk access, network card access. The kernel will be single tasking just like DOS, however, the difference will be that the user can terminate the task whenever he/she pleases and of course, the user will have access to the complete physical memory minus the space occupied by the kernel. The user task cannot corrupt the OS memory area. Snap shots of the work done so far as follows: pic1 The above picture shows the startup of my kernel. My kernel is a 32Bit ELF executable and is loaded by GRUB. Three lines following the message saying "OS starting up" display various values passed to the kernel by GRUB. The kernel first setup up the Global Descriptor Table followed by the Interrupt Descriptor Table and then reprograms the Programmable Interrupt Controller (PIC). Since interrupt vectors from 0-31 are reserved in protected mode, the PIC must be reprogrammed to generate vectors outside that range for the IRQs. After this, the kernel checks for the existence of 32 bit BIOS. I just started working on this. At this stage the timer interrupt is enabled. The timer ISR continuously prints characters on the top right corner of the screen. The keyboard interrupt is also enabled and a ring buffer is implemented to store the keys. The table to map scan codes to ASCII is just about enough. Logic for shift keys is not yet implemented. pic2 Right now, only three commands are implemented in the shell. The use of two of which are shown in the above figure. init-ide detects the ATA disks and initializes some house keeping data structures. In a sense, it selects the "root device". load-partition-table, as the name suggests, reads the 0th sector of the hard disk and fills in the partition table structure. After this it goes through the entries in the partition table and checks for FAT32 partitions. If a partition is of the type extended, then it goes into that partition and reads in the partition table and checks for FAT32 partitions. It does not trace extended partitions further. The hard-disk IO routines have been developed from scratch by referring to the specifications. pic3 mount, I have not finalized the name of this command(in fact none of the commands). This command lists the root directory of any of the detected FAT32 partitions.