Showing posts with label Projects. Show all posts
Showing posts with label Projects. Show all posts

06 June 2017

Internship for Students

Image result for internship
Writing this after a while. 

I was thinking of doing something like this for a very long time (many years probably) but took while. Dr. Sankaran's post is one of the reasons [Thank you Sir]

Hope you guys still remember OpenGyan. I am planning to do something similar but for folks who are really want to take programming to next level. The thinking is to come up with real world problems and TRY solving it and on the way you will learn some cool things. It will be like internship (of course with no stipend).

Program Structure:
  1. Identify folks who are interested to do this. Ideally someone with good (this is purely relative) programming skills and willing to put efforts to learn something new. Should be doing graduate or post-graduate course in a college (and interested in computers)
  2. Willingness to put 4-5 hours of efforts per week. I think this will be a big differentiation. 
  3. Willingness to work in latest technologies - cloud/containers/tools/http/REST (some of these are highly talked about in industry)
  4. Has Google hangout or similar tool for interaction
  5. Talking to geeks and learning from them (expands your learning)
  6. Planning to do for two teams each containing not more than two people. The members of team are co-located (either from same college or live near by each other or connected by Google hangout in the order of preference)
  7. Finally a demo of your work (a write-up on what you have done and learnt) and move on to next problem (if you are still interested)

What you will probably get (no guarantee):
  1. Problems that the world is trying to solve (tough part)
  2. How some of the problems are solved (easy part once tough part is found)
  3. Get hooked to problems (disciple)
  4. Apply what you learnt. If you have not learnt anything, learnt it first and apply it (consistency)
  5. Learn tools that professional use to debug/solve problems (smart work)
What you pay:
  • Your fee is through your commitment and valuing the folks' bandwidth
  • No exchange of money or favour to be involved

If you are interested - write to me GRABYOURFREEDOM AT GMAIL DOT COM
If you feel it will help someone that you know (or don't know) - Just Share.


13 April 2009

Hotswap Agent for Java Virtual Machine (Part 1)

Before joining my company and in fact until two years after I joined my company, C, 8085/8086 ALP and Perl are the programming languages I knew. I learned C and ALP at college and Perl at my office to write a simple CGI utility. Two years later, I started to learn Java as I was moved to development team and I started to learn Java with certain amount of dislike. After a short period of time, I started to read about Java Virtual Machine specification and writing tools with the help of JPDA. Writing tools using JDI/JPDA is relatively simple as JPDA gives you enough infrastructure. This post contains specification/requirements for writing a small and powerful agent to reload classes of live JVM. As you may know, Java source code is compiled and bytecodes are produced. These bytecodes (generally .class files) are loaded into JVM and are much like machine instruction but the fact is that only JVM can understand it. These bytecodes are your program and decides how your application is executed.

If you are a developer, your daily job might be writing code or fixing bugs or both. During development, you may need to change the logic of your program, recompile the source and restart the application. Restarting the application is stopping the running JVM and starting a new JVM process. This is a very lengthly process if your work involves changes to source code multiple times. Sun HotSpot VM comes with a feature called HotSwap. Using this feature one can replace the classes that are loaded in the JVM. Once reloaded, the objects that are already created also takes effect with new changes. This tool will improve the productivity of developers when frequent restart of the applications is required. Here is the specification.

Specification
Write a simple tool which let you to reload classes in a running JVM without restarting your application. Also provide a simple user interface (probably using SWING).

Steps
1. Use Java Debug Interface API to connect to remote JVM. In order to connect to remote JVM, you the hostname/ip address of the remote box and port number on which your JVM runs. In order to hotswap the classes, you need start JVM in debug mode and if you start JVM using "socket" debugger.

2. Also subscribe for few important events such as JVM Exit, Disconnect Event. (for more info refer Java Debug Interface API Spec).

3. If the connection is successful, you get an instance of the remote JVM and you can once again use JDI to replace classes.

4. You have to write the logic of reading the class file (flat file) from the file system and give to JDI. JDI pumps the class file to remote JVM which reloads the class after making lot of checks.

In next couple of days, I m planning to write a post on how to do this with a small example (thanks to Veeru for pointing this out).

04 November 2008

Mini Project #3 - Process Tree in Linux

Mini Project #3 - Process Tree in Linux

A process is a program in execution together with a state comprising of open files, environment variables and pending signal. In any operating system, a process is normally created by another process. And the process dies when it calls the system call "exit" explicitly or implicitly. Each process has relationships with other processes in the system. This mini project is to write a simple tool that dumps the process tree - how one process is related to other processes. The output can be text which can be parsed by other tools.

You have come up with the format and information that should be displayed which can be of use to the users of the tool. The information can be like state, total run time, files opened and pending signals. Here the key is the performance and hence implementing this kernel module or system call is recommended. Initially, the focus should be on getting the information not the formatting the data. Later, the output from the kernel module or system call can be read by parsers implemented in Java or other programming languages.

After implementing this mini projects, the team members will get a good understanding on Linux kernel, important data structures and they can continue to learn Linux on their own by just walking through Linux source code. If you are interested, please submit your intent through email.

All the mini-projects hosted here are open and free. Free to learn and free to be modified. This is a attempt to help students community. This mini project and all other mini projects help you understand the respective areas and gives you insight by doing it.

30 October 2008

Mini Project #2 - Object Visualization

Mini-Project #2
Java Virtual Machine takes care of garbage collection. An implementation of garbage collector needs to have so many algorithms to reclaim the memory of unreferenced object. An important condition for garbage collection is reachability of objects and the objects have to be live. The objects that are reachable from root objects are said to be live and hence not eligible for garbage collection. The objects that are not reachable from root objects are said to be dead and thus can be garbage collected.

The idea is to implement a object visualization tool for JVM which gives a map of live objects, dead objects and various areas of JVM. One more requirement is to have a strong design that helps to build features at later point of time. If you already know Java, you can implement this tool in six months (and with two hours of work everyday) and if you need to learn Java, may be you need 7 months. But be ready for a strong learning curve. This project can be done group of 2-3 people.

If you are interested to do this mini-project, you can get the full details through email.


28 October 2008

Launching Mini-Projects with Project Specification

Mini Project #1

The latest and past few versions of Java supports "Hot swap". The host swap is nothing but a term usually refers to changing the components of the system without stopping system. Java Virtual Machine also allows to hot swap the loaded classes and the developers can modify the class and request of reload. This is particularly useful for developers when they are working on code. In order to implement this simple tool, we need to use Java Debug Interface.

Now, this requirement is for writing a simple tool using which one can connect to JVM running in a remote machine and load classes from the local machine. If you want to know more details, please do email. (This is an academic project and person who is new to Java can implement this within 3-4 months timeframe. Also, this gives an excellent exposure to many aspects of JVM which will make your understanding of JVM better).

27 October 2008

Students Corner - Projects for You

My thought on improving knowledge is to learn and share. By learning one gets theoretical and practical knowledge. This is the first level of knowledge. But this knowledge might not give enough insights and deeper understanding of the subject. Only when we share and discuss with like minded people, my brain stretches itself for a deeper understanding. This is one of the reasons why I share write articles and speak at conferences. In that way, I am purely selfish.

I m so much excited to talk with students, work with them and help them to build their career. In this section, I am planning to roll out few mini-projects. These mini-projects are nothing big. They are pretty much easier to do and these projects will help you to understand a specific area such as Computer Networks, Operating Systems, Network Security, Java, Algorithms and etc. Since the tools/projects are simple, it can easily be done forming a small group with your friends (and of course I shall help you through email). Remember simple things leads to extraordinary things.

If you are interested in taking of any of the projects, please do write to me (My Email).