Saturday 26 December 2015

What is GSoC ?

Details about Google Summer Of code(GSoC)

what is GSoC?
Google Summer of Code (GSoC) is a program that matches  mentoring organizations with college and university student developers who are paid to write open source code. Each year, Google works with many open source, free software and technology-related groups to identify and fund proposals for student open source projects.
GSoC pairs accepted student applicants with mentors from participating projects. Accepted students gain exposure to real-world software development and an opportunity for employment in areas related to their academic pursuits. In turn, participating organizations are able to identify and bring in new developers more easily. Best of all, more source code is created and released for the use and benefit of all; all code produced as part of the program is released under an open source license.
This program has brought together thousands of students and mentors from over 100 countries worldwide. At the time of writing, over 200 open source projects, from areas as diverse as operating systems and community services, have participated as mentoring organizations for the program. Successful students have widely reported that their participation in GSoC made them more attractive to potential employers and that the program has helped greatly when embarking on their technical careers. This is the summer internship sponsored  by  Google.

Goals of the Program

The program has several goals:
  • Get more open source code written and released for the benefit of all.
  • Inspire young developers to begin participating in open source development.
  • Help open source projects identify and bring in new developers.
  • Provide students the opportunity to do work related to their academic pursuits during the summer: "flip bits, not burgers."
  • Give students more exposure to real-world software development (for example, distributed development and version control, software licensing issues, and mailing list etiquette).


What is student criteria ?
A student participating in GSoC is typically a college or university student;  the only academic requirement is that the accepted applicants should be enrolled in an accredited academic institution. Students must also be at least 18 years of age in order to participate. Students come from a variety of academic backgrounds, and though most students are enrolled in a Computer Science program there is no requirement that they be studying CS; past student participants in GSoC have come from disciplines as varied as Ecology, Medicine, and Music.
Students submit project proposals to the various organizations participating in GSoC. The organizations select which student proposals they would like to see funded by Google.

Selecting a Student

There are some student qualifications that are important for any successful GSoC experience. The student needs to be highly technically skilled, needs to have good communication skills, and needs to be a hard worker with sufficient available time to succeed. The entire selection procedure take place on this platform- https://www.google-melange.com/gsoc/homepage/google/gsoc2016
They select students on the basis of their contribution,interview performance & the proposal detailed about project’s implementation.


Types of Synchronizations

To avoid the race conditions in Parallel Programming there are two types of synchronizations between threads (Process).
1). High Level Synchronizations.
2).  Low Level Synchronizations.

  These kind of methods are useful for the shared memory computers.

Difference between High and Low Level Synchronizations

  Low level synchronizations affects one thread only where high level synchronizations affects many threads.

1. High Level Synchronizations Types

- Critical
  What critical does is mutually exclusion. The idea is to create one critical section, and this section can only executes one thread at a time. If one thread already code of that section then thread will wait until it completes the execution.

Atomic Access
  In programming, an atomic action is one that effectively happens all at once. An atomic action cannot stop in the middle: it either happens completely, or it doesn't happen at all. No side effects of an atomic action are visible until the action is complete. The atomic access is need for the general binary operations like a++, because it  does not describe an atomic action. Declaring an block of code atomic guarantees that operations made on the variables occur in an atomic fashion, i.e., that all of the substeps of the operation are completed within the thread they are executed and are not interrupted by other threads.

Barrier
  Barrier is the point in program at which threads stop and wait. When all the threads have reached the barrier, they can proceed. Synchronization barriers are useful for phased computations, in which threads executing the same code in parallel must all complete one phase before moving on to the next. Example - Suppose you have a null array of size 100. Your system can make only two threads to write data and to shift the data on the left side. So first of all you divide the array between two threads to write the data and then put the barrier on it to complete the phase of read data. After that if both the thread reach at the same barrier point then only able to shift the data.

Ordered
  Every execution has a synchronization order. A synchronization order is a total order over all of the synchronization actions of an execution. For each thread t, the synchronization order of the synchronization actions in t is consistent with the program order of t.

2. Low Level Synchronizations

- Flush
  Used to make a thread's view of shared data consistent with main memory. Shared data are stored in main memory locations that are supposed to be accessible by all threads. The modified data has to be stored in main memory before the flush can complete, and unchanged data has to be read again from the main memory after the flush is complete. Flush allows us to keep memory consistent in a cross platform way.

- Locks



Sunday 1 November 2015

FreeBSD Setup

How to install FreeBSD on your Mac OS (Yosemite) ? 


  Today I am writing this blog post about how to install FreeBSD OS on your Mac machine. Let me first introduce about FreeBSD organization.

  FreeBSD is an advanced operating system for modern server, desktop, and embedded computer platforms. FreeBSD provides advanced networking, impressive security features, and world class performance and is used by some of the world's busiest web sites and most pervasive embedded networking and storage devices.

So Ready To install it ??

  Here is the page about how to set up your developer environment.

  If you wanted to install it on remote machine (AWS) and then wanted to use it then go with the second option mentioned in the above url.  This environment however requires you to be online each time you want to do something.

Let me talk about how did I install FreeBSD os on my local machine :
  I used Virtualbox to run FreeBSD along with the Mac OS. First of all I created separate virtual machine with BSD 64-bit os, certain amount of RAM and virtual hard disk. After that I selected .iso as the "content" of my virtual CDROM drive and made it bootable. So now Virtualbox able to boot the FreeBSD os from the CDROM drive and I am able to use it :).
  A FreeBSD installation will require a minimum 64 MB of RAM and 1.5 GB of free hard drive space for the most minimal installation. However, that is a minimal install, leaving almost no free space. RAM requirements depend on usage. Specialized FreeBSD systems can run in as little as 128MB RAM while desktop systems should have at least 4 GB of RAM.


Install VirtualBox

  Virtualbox gives ability to install and run multiple Operating Systems on your desktop or laptop computer in virtual environment without disturbing the host OS. You can have Windows XP, Linux OS and even Windows 95 on your latest Windows 7 laptop. In this case, your laptop will be the ‘host’ and virtual machines will be the ‘Guest’s. You can download it from here - https://www.virtualbox.org/

Choose Image

 The FreeBSD installer can be downloaded in a number of different formats including CD (disc1), DVD (dvd1), and Network Install (bootonly) sized ISO Disc Images, as well as regular and mini USB memory stick images. Later versions of FreeBSD are also offered as prebuilt expandable Virtual Machine images, and as SD Cards for embedded platforms.
  There are already FreeBSD images available to run it on virtual environment. You just need to choose an image according to your machine architecture and run it using virtual environment. Computers with more than 3 GB of memory should use amd64 image. If the computer is an older, 32-bit only model, use i386 image. My machine has 4 GB memory and 2.5 GHz Intel Core i5 64-bit system. So amd64 would be the best image for me.

Install Image

  To boot os from the CDROM I need the installer image. I am using FreeBSD 10.2 release bootonly i so image (amd64) for the bootable CDROM drive. It boots a small image from the CD/DVD that then gets the rest of the installation from an online repository.
Link to amd64 installer images - ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/10.2/


Image showing selected iso file.

  Now whenever I run this machine it will automatically boot my virtual PC from the CDROM and I am able to install the system. It uses Copy-On-Write disks by default, so it won't waste too much space on my disk.




Image of running FreeBSD os

Saturday 10 October 2015

GSoC Proposal 2015

GSOC-Idea Create new interactives for Investigations      curriculum units

Personal Information

  • Name - Rishi Shah
  • Age - 18
  • Address - Ahmedabad, Gujarat-380013, India.
  • Phone number(s) - +91-9824513046
  • E-mail address- rishiloyola98245@gmail.com

Education

   I am an ICT (Information and Communication Technology) undergraduate student at Dhirubhai Ambani Institute of Information and Communication Technology (DA-IICT),Gandhinagar, India which is a hotbed for open source developers in my country. I am currently in my first year, slated to get my degree in 2018. I am an active member of the Google Developer Group chapter of DA-IICT.


Courses I have completed -
  • Introduction to C Programming
  • Object Oriented Programming using Java
  • Data Structures and Algorithms


  These courses laid the foundations of my programming skills which made it easy for me to learn , use and contribute to open source.
  I went to school ST.Xavier’s Loyola, which is the one of the top 10 schools in my state. I completed my higher senior secondary in 2014. I belong to science stream. I am very passionate about programming and coding. During my first sem of college I jumped into the coding and development world. I made a snake game using HTML & javascript, and made a solid state web-app. My inspiration for this app drew from the problems I faced visualizing 3D geometry in my schooling. I have good knowledge of physics, chemistry, and maths. I am very creative and enjoy painting and designing.


Work and Open-Source Experience

Startup Experience
Employer Name - Rygbee(Social network)
Job - Web developer,
       -My job is to design front end part using AngularJS and I have to make linkage between   
        servlet and JADE gateway through Spring framework .                                 
Date - 5th January to April 2015


Open Source Experience
Organization Name - Sugar Labs
Project - Sugar Labs Developer
              Made Web App based on HTML5,Javascript & CSS
Date - December 2014 onwards


Organization Name - Code Combat
worked - Solved & issued bugs related to Javascript, coffeescript and CSS
Date - December 2014 onwards


Organization Name - The Concord Consortium
worked - Improved few lab-interactives
Date - December 2014 Onwards

Programming Experience

  • Proficient in Javascript,C,HTML
           Used HTML & Javascript to build web-apps.
  • Significant experience with Java,CSS,PHP
           Used PHP & CSS to make landing page for Rygbee.
  • Frameworks - AngularJs,Jquery,Spring
           Used Jquery to make Solid state web application and used AngularJs to make web page
  • Database - OrientDB

Operating System Experience

  • Linux(Fedora & Ubuntu 14.04 LTS)  
  • Windows

Which Project(s) Do You Want to Work On?

Priority Wise :
1.Create new interactives for Investigations curriculum units
2. Move popular materials from Java to HTML5
3. Control of simulations with gesture input


How Will You Successfully Complete Your Project?

   For this project my job is to develop new interactives which can be fit into curriculums units.It is very essential and important project because users directly get into touch with it. so it all depends on how I am developing it interactive and user friendly by just adding few features related to interactive. To add more features I need to edit lab framework, lab grapher, lab interactives.
 I know the basic code flow of lab grapher and lab interactives and I’m trying to understand code flow of lab framework. Even when I understand it, I research a lot and do not hesitate to take help of my mentor, of course after web surfing.
 In my previous experience with the concord consortium, to understand basic work flow, I played with the code locally until I got a grip of the project I was working with. Before my internship starts I would like to understand the whole working of the system from starting to end so that I can work on the code with full swing and without any hesitation.
  My mentor is at GMT - 5:00 and I am at GMT: +5:30 so to work together I will contact to my mentor during his active time.

Motivation

     Many people advised me to go for KDE or such organizations so that I have a better prospect. But it isn’t just about getting selected.
     First, the idea itself intrigues me a lot. During my primary education I faced many problems to understand concepts of science by visualization. We didn’t have sufficient experimental apparatus or any kind of software to experiment or understand it.Through this project I want to make new interactives so that others will not face the same problem that I faced during my school time.We can make science more interesting through these models.
   Today the world is changing continuously. With the help of new technologies, computational science, & softwares we can build models to understand,to test, and to play with science. I think The Concord Consortium approaches the problem of unavailability of labs component in a nicer way.
  Additionally I like how The Concord Consortium offers a very welcoming environment to new contributors even if they don't have any experience with open-source projects.I would love to push The Concord Consortium forward to become more popular, either through Google Summer of Code contributions or just through contributions in my leisure time.

How you find out about us?
I am very passionate about creating innovative scientific models, which makes science easy to understand. My hobby is to make new applications based on simulations which enable users to interactively visualize and analyze the dynamics of scientific concepts. So to develop such kind of activities I need some good enough platform which provides me an initial kind of push up. Of course such kind of help and encouragement are generally provided by open source organizations.  So after surfing on net on these kind of platforms, I came to know about The Concord Consortium. I instantly started liking it and started contributing to it.


Code

                        Using  HTML5,Javascript,CSS,Canvas


                                         Using  HTML5,Javascript,Jquery,CSS,Canvas


Contribution in The Concord Consortium
  • Radio Activity Model
  • Breaking Molecular Bond
 
    Submitted Patches
  • Breaking molecular bond table version
  • Making breaking bond:dissociation energy
  • Lab-grapher : To hide axis values

Schedule

  I have my final exams from 27th April to 2nd May 2015. I don't have any other obligation other than my GSOC Project  and intend to devote more than 40 hours a week for this project. My college vacations are from early May to late July. Also just after college reopens, there would not be any load due to college curriculum, so I will be able to devote my maximum time towards my project. I am even ready to work at the weekends if the project demands so.


Eligibility

Yes, I am eligible to receive payments from Google.

Sunday 13 September 2015

My Ambitions

I have interest in algorithmic challenges, data structures, parallel programming, and distributed systems. My goal is to work at a top software company, where developers drive the business, where people are trying to make a world better place that will give me the ability to work with blazingly smart people and learn exciting new stuff every day. Because life is just too damn short not to love your job, I want to find a place where I can develop code that will be used by millions of happy people. It's a very self-satisfying and substantial achievement to know that you - yourself - wrote pieces of the software along with other brilliant programmers used by half of the world. It's motivating and a big sign of success.
I want to work at a company where I can wake up every day and be happy to go to work. Yes, this is possible. As weird as the concept of enjoying going to work may sound to lots of old-fashioned people, software development careers are actually one of the few where one can genuinely love his job. This is probably the number one key step to building successful and delightful software products: be happy and work for a great company.

Sunday 6 September 2015

GSoC Proposal

                        Google Summer Of Code-2015

Personal Information

  • Name : Rishi Shah
  • Age : 18 years
  • E-mail address : rishiloyola98245@gmail.com
  • University :  Dhirubhai Ambani Institute of Information and Communication Technology,  
                               Gandhinagar (DA-IICT)
  • Location (City, Country and/or Time Zone) :  Gandhinagar, India. GMT: +5:30

Brief Background

 I   am an ICT( Information and Communication Technology) undergraduate student at Dhirubhai Ambani Institute of Information and Communication Technology (DA-IICT),Gandhinagar, India. I am very passionate about programming and coding from a very young age. I am a person who always wants to learn new things. I am a quick self-learner and persistent. I like to learn from my mistakes. Even when learning, I research a lot and do not hesitate to take help , of course after web surfing a lot.
 I have a keen interest in data structures, algorithms and programming. Besides this, I am a tech person who is always updated with different technologies and the impact it has on society. I am a Linux user from past 1 year.

Work and Open-Source Experience

Startup Experience
Employer Name - Rgybee(Social network)
Job - Web developer,
        My job is to design front end part using AngularJS and I have to make linkage between   
        servlet and JADE gateway through spring framework .                                 
Date - 5th January to March 2015

Open Source Experience
Organization Name - Sugar Labs
worked - Made one Web App based on HTML5,Javascript & CSS
Date - December 2014 onwards

Organization Name - Code Combat
worked - Solved bugs based on Javascript & coffeescript and CSS
Date - December 2014 onwards

Organization Name - The Concord Consortium
worked - Improved few lab-interactives
Date - December 2014 Onwards

Programming interest & strength

Programming Experience
  • Proficient in Javascript,C,HTML
          Used HTML & Javascript to build web-apps.Used C language for competitive coding    
          purpose  
  • Significant experience with Java,CSS,PHP
          Used PHP & CSS to make landing page for Rgybee. Used Java language for competitive
          coding purpose
  • Frameworks - AngularJs,Jquery,Spring
  • Database - OrientDB  
  
  

Interest
   I love web development. I always like to play with javascript and html components. I contributed a lot to three open source organizations. All of my contribution is related to web development.
    I wanted to spend my whole summer with open source projects. I wanted to dive more into web development and wanted to make some fantastic projects. I would also like to learn how to make real time connection applications.

Interest and background in biology & bioinformatics
   I have deep interest in biology & bioinformatics. During my school days I had courses related to biology. In future I also wanted to do research in this field. My specific interests are in DNA self-Assembly & DNA computational.
   I am always keen to learn more about biology, and I think it would be a great way to spend my summer.

Project Idea - Javascript component for interactive time-series data visualization


Motivation
   Many people advised me to go for KDE or such organizations so that I have a better prospect. But it isn’t just about getting selected.
    First, the idea itself intrigues me a lot. Today the world is changing continuously. With the help of new technologies, computational science, & softwares we can build models to understand,to test, and to play with biology. I have deep interest in biology, and also wanted to do research in bioinformatics. This project will give me push up to dive in biology.


Implementation Details:
    My project would try and accomplish the aim of to enable users to interactively visualize and analyze the dynamics of their network models.
 On concentrating above aim I will implement the following features using D3.js library and techniques of AJAX to make it real time simulation.
 I wanted to use D3.js because it is easy to bind data with DOM elements. It is as flexible as the client side web technology stack (HTML, CSS, SVG). Along with D3.js I will use javascript and jquery to manipulate the DOM elements. Instead of HTML5 canvas I would use SVG elements,  because it is vector based technique.
So, basically my graph will look like this. It will be available in two sizes medium and large. Along with x-y axis labels and graph title.
Screenshot from 2015-03-23 15:47:31.png

Features To Add (Along with details of implementing) :

  • Zooming
         I would like to use zoom functionality of D3.js. zoomHandler() function is fit to do zooming     
         with SVG elements. Everything I need to do is just to apply the zoom function on the svg  
         elements.
  • Panning
  • Scrolling
         Users can scroll x-y axis to set the new range of axis. The graph will    
            self adjustable to this. By this feature users can observe graph efficiently.
  • Interaction with data points
           On hover to data points it will show additional text box to show its x-y     
           axis values. On hover to line graph it will show popup text box to show its  
           properties and name of it.
         step0001.png


  • Chart annotations
           I am going to add four types of annotations in this model.
       1.Draw vertical annotations
       2.Draw horizontal annotations
       3.Draw vertical bar annotations
       4.Draw horizontal bar annotations
       Looks of All these annotations are shown below.
  Screenshot from 2015-03-23 14:37:17.png

 Along with it I will add the reset button to reset the graph so that all annotations will be   
disappeared.

  • Chart styling options
           We mostly just need line chart. So for this I will add color feature to distinguish line  
           charts. Graph will contain different colors for multiple data lines. I will add button  on the  
           side of the graph that will give information related to data line's  color.
  • I will use font  awesome toolkit to render creative charts and icons. Font Awesome gives   
           scalable vector icons that can instantly be customized — size, color, drop shadow, and     
           anything that can be done with the power of CSS.
           Link - http://fontawesome.io/
      
  • Data thresholds
           For this I will add one graph controller bar below to the graph. It contains following     
           buttons.
           -rewind
           -fastforward
           -play
           -stop
               User can set threshold data to stop rendering graph after that point.If values reach   
          over there then graph automatically stops rendering and  play button becomes active.
          Through this controller bar users can fast forward and rewind the graph.
          I will create separate text boxes of x-y axis to set data thresholds.
               Here is the good example of controller bar that I am talking about. I also worked on t   
          this feature so had good enough knowledge to develope it.


  • Ability to add and remove series(Data table)
             On the side of graph there will be one data-table in which details of line chart are    
           availables.Properties of this table are
           -Colour of Data line
           -Name of the data line
           -Check box to show that line chart. User can manually add or remove data lines from
            chart by just clicking on this check box

  • Self-adjusting View Window
           After the crossing certain values of x-y axis,graph will automatically adjust  
           range of axis to maintain range and view of graph.

  • Support for multiple data sources:
           Local Data – requires minimal effort to load data from local array. JSON Data – chart can  
           be loaded from JSON data using AJAX request. It will continuously talk with the server &    
           the server sends the list of drop-down items as a JSON  and caller function places the
           HTML at the appropriate place and update graph components using AJAX & will make it
           real time data visualization.To make this success.
             Here is the link to good example of this technique -  

  • Data Adapters  
         d3.json asynchronous function this is a wrapper that acts on all the code within it bringing
         the data in the form of graph to the remaining code.Only when the data is received from
         the backend, the callback function passed to it will be called.This command will load  
         data from json file and attach its behaviour to graph components according to function we
         define.We can then add nodes,title links etc, into our graph according to data derive in
         json. D3.js doesn't require a specific format. It all depends on your application.

  • Cross Browser
                
            The link mentioned below has the good example of grapher made by The Concord Consortium organization.This model fully based on javascript,jquery and D3.js. All the data input is in JSON format and will render it using svg elements.
      I contributed in this model. So I have sufficient experience and understanding of these tools to develop such grapher .

This list of features to be added is not the end. After further work on the project and discussion with my mentor, other features that deem themselves useful or necessary for this application will also be implemented after verifying feasibility and time constraints.

Tentative Timeline :

Coding, documentation and bug fixing will be more or less done simultaneously
in phases as mentioned below so that much work is not left for the last.

April 27-May 25 (Pre-selection period and Community Bonding period)
  • Discussion with the mentor(s) for any change in the project abstract plans.
  • Start understanding D3.js and related libraries.
  • Implementing basic graph components, including zooming & panning feature.

Coding PHASE I
Basically work on frontend part of graph components.

May 25-June 1
  • Add more features to graph.(Chart annotations,Chart styling options)
June 1-June 8
  • Implementing support for multiple types of chart
June 8-June 15
  • Implementing Data-threshold &  controller bar

June 15-June 30
  • Add feature related to data reply
  • Starting with documentation, bug-fixing for Phase-I
  • Mid-term evaluation

Coding PHASE II
July 1 - July 7
  • Implementing Self-adjusting View Window
  • Researching D3.js functionality for the data adapters and about it support to multiple data sources
July 8 - July 15
  • Implementing support for multiple data sources using AJAX GET request
July 15-July 22
  • Add feature to control the graph component using JSON objects
  • Implementing interaction with data points
  • Implementing data table
July 23-August 17
  • Adding new features to graph components according to need
  • Cleaning the new code, documentation, bug-fixing for Phase-II
  • Testing the whole system

Pencil down PHASE III

August 17 – August 31
  • Submitting code to Google
  • Wrapping up the project
  • Documentation
 
    I will be able to achieve the milestones as scheduled above by giving at least 6 hours to code every day on weekdays and 3 hours on weekends. Weekends will be devoted to the evaluation of my week's work and scheduling the piece of code to be done next week (documenting code of previous week and scheduling milestones for each day in coming week). I will be in touch with the mentor.




Your commitment this summer
             
 I don't have any other obligation other than my GSOC Project and intend to devote more than 40 hours a week for this project. My college vacations are from early May to late July. My college course load is light so even after the start of the next academic semester, I will not have many time constraints. I will be able to work for about 40 hours a week.

Link to my CV :