Public application template
This part is answered in public on your user page. Please copy its source (edit tab) and then fill. Delete any examples and annotations afterwards. Same for questions that do not apply to your situation.
A: An introduction
- Please describe yourself in three sentences, one of them regarding your current studies.
- I am a third year undergraduate in the Department of Electrical Engineering, IIT Kharagpur (India). My hobbies include playing chess, reading novels and coding. I am an introvert, and code to make my life easy (as a defining feature of my life is laziness :P )
- Why do you want to participate in the Google Summer of Code? What do you hope to gain by doing so?
- 1. Its fame: Like most people, I am attracted to the glory of participating in the Google Summer of Code. What this means is that I have a substantial reason (in my mind) for "staying the course" as they say, and not abandoning ship when (if) the project gets uninteresting.
- 2. Interest in the topic: I am really interested in the topic I am pitching for. It is a subject where I was exposed to the theory in a class I took, but not enough in the practical part, something I hope of gaining in this experience.
- 3. Knowledge : By coding under seasoned mentors, I hope to get a professional critique to my coding style and the knowledge in my domain, which will help me grow.
- Why are you choosing Octave?
- 1. I have used octave, and find it pretty useful, but still rough and wanting when compared to Matlab. I consider this my contribution for creating a viable open source alternative to such a powerful and versatile tool.
- 2. It is a brilliant project which is neither too mature (like Python or C++) nor too unidirectional (like Sage Mathematics). It appeals to me in a way not many other applicants to the GSoC do.
- Please state the (unique and identical where possible) nick you use on IRC and any other communication channel related to Octave. We really want unique nicks. You might want to bold it.
- Which time zone do you live in? Will that change over GSoC duration? Perhaps DST adjustment or a relocation. Note that both UTC and GMT are not aware of daylight saving time! Please state UTC+x or -x.
- UTC+5.5 (Indian Standard Time)
- Please state the timeframe (in UTC+0) when you feel most comfortable working during GSoC. Where are your time buffers? Example: I usually code around 9.00 to 18.00 and could also try to start earlier (~7.00) for few days ;-)
- Usually between 03:00 to 13:00, but could go up to 04:30 or even later (UTC)
E: Coding experience
This part is one of the more important ones in your application. You are allowed to be as verbose as you want, as long as you stay on topic ;-)
- Please describe your experience with C++, Octave or Matlab m-scripts, OpenGL and Qt.
- C++ : C++ is my favorite language for coding competitions (like HackerEarth). Though I participate infrequently (about once a month), I am familiar with classes, STL and important algorithms related to STL and can code competently.
- Octave : I mainly use Octave for Machine Learning algorithms, or large algorithms. On my github account (again with username richukuttan), I have created a genetic algorithm function, which helped me in a project. Similarly, I have experience in Fuzzy Logic, Back Propogation NN and Regression based on Gradient Descent. I have taken Andrew NG's class on Machine Learning, which again uses Octave as the main coding language. I have frequently used both function files and script files.
- OpenGL and Qt: Unfortunately, I have no programming background in these languages.
- Please describe your experience with other programming languages.
- Python: For small scale projects, python is my favorite prototyping language. For projects where a small speedup is not essential (mainly personal projects), I have used Python as my preferred language. I have created small project based on detecting the language using trigrams, which is available on GitHub. I have also created a project to download anime from online sites like Gogoanime, which unfortunately was rendered useless by the anti DDOS protections.
- Bash Scripting: As I am an Ubuntu user, Bash scripting is an invaluable tool for making my life easier. From renaming files to executing complicated commands repeatedly to the trusty /configure /make /make install, bash scripting lets me automate many tedious jobs.
- ASP.NET programming: I have worked on creating forms on the web as part of data collection in a Data Analytics internship in Deloitte.
- Please describe your experience with being in a development team. Do you have experience working with open source or free projects?
- While I have no experience in open source or free projects, I have been a part of a local startup (AliveHome), as an IoT firmware developer for 2 months. I also have a similar 2 month internship with Deloitte Mumbai, where I worked as a data analyst. Finally, I have a couple of projects which I have created as a part of a group project, spanning a semester (4 months).
- Please describe the biggest project you have written code for and what you learned by doing so. Also describe your role in that project over time.
- There are 2 projects I can recall, one in Octave and one in C. The Octave one, a recreation of the Genetic Algorithm Function to satisfy my needs, is up at my GitHub account. It was completely created by me, originally as a research into whether speeding up the convergence of crossover improves the overall efficiency. It has thereafter been refactored into a matlab compliant, highly responsive code with a comprehensive error checking piece. The C cod was a project to recreate the DES algorithm in C. It was about 300 - 400 lines long, completely written by me.
- Please state the commits and patches you already contributed to Octave. This question (one of the most important parts by the way) is the only part of your application our wiki admins will edit for you even after the application deadline. Code sometimes speaks louder than many words do.
- Nothing yet.
F: Feeling fine
- Please describe (in short) your experience with the following tools: We only use this question to determine where you need guidance, not for rating! We by no means expect you to be familiar with all of these and you'll won't necessarily need them while working with us.
- IRC and mailing lists
- Very little
- Mercurial or other source code management systems
- I have used GitHub quite frequently. I have used SVN on a much lower scale.
- Mediawiki or other wiki software
- make, gcc, gdb or other development tools
- I have used each of these a lot. Being a Ubuntu user, I have often complied from source. Gcc is currently the only compiler I use for C and C++ development. I have use Gdb much less (comparatively), as I usually make do with debugging using print statements.
- What will make you actively stay in our community after this GSoC is over? You can also tell us after applications close and we'll happily try to fulfill :-)
- I plan to use Octave quite frequently even after GSoC, mainly due to it being open source and free (as in free beer :P). Other than that, I am quite unhappy with its GUI, and if I was more accustomed to working on GUI, I would have opted to work on it. Basically, Matlab has more interactive toolbars. For example, the fuzzy logic toolkit in Matlab can be easily configured by click, while in Octave, I have to use long winded commands for the same.
O: Only out of interest
- Did you ever hear about Octave before?
- If so, when and where? How far have you been involved already?
- In my second year, when I was taking Andrew NG's course on Machine Learning on Coursera. As already mentioned, I have created a Genetic Algorithm function with it. I use it regularly to create Soft Computing and Machine Learning algorithms, along with Control Theory solutions.
- What was the first question concerning Octave you could not find an answer to rather quickly? Of course more than one question can be stated. We try to improve based on this each year! Includes learning how to use it, code, website, GSoC application, …
- How to use Back Propagation Neural Networks on Octave.
- Please state the operating system you work with.
- A few Linux distros (Ubuntu mainly, but have worked with OpenSUSE Tumbleweed, Raspbian, Kali Linux and Arch Linux).
- Windows (Not my favorite)
- If you have access to more than one, please state them and the conditions under which you are granted this access.
Use Ubuntu as my main OS, with access to other Linux distros (and windows) via VirtualBox.
- Please estimate an average time per day you will be able to access
- an internet connection
- Full access
- a computer
- Full access
- a computer with your progressing work on
- Full access
- Please describe the degree to which you can install new software on computers you have access to.
- Full access
- Please describe how useful criticism looks from your point of view as committing student.
- How autonomous are you when developing:
- Do you like to discuss changes intensively and not start coding until you know what you want to do?
- I like to think about the code intensively before starting. However, an overview is acceptable as far as discussion is concerned.
- Do you like to code a proof of concept to 'see how it turns out', modifying that and taking the risk of having work thrown away if it doesn't match what the project or original proponent had in mind?
- I have rarely coded on projects where the only options are accepted code or "thrown out" code. Usually, I prefer cucles of coding and feedback, as the code starts resembling what the original proponent has in mind. If that is impossible, it depends on the length of the code. If it is a comprehensive project, or one where the execution time is measurable in days, I prefer a proof of concept. Else, I prefer to start working right away.
Y: Your task
- Did you select a task from our list of proposals and ideas?
- If yes, what task did you choose? Please describe what part of it you especially want to focus on if you can already provide this information. Please also wiki-link the page for your elaborated proposal here.
- Yes, I have chosen Convolutional Neural Networks as my project. I will be focusing primarily on the basic implementation of the toolbox, and the Python interface. I know I can handle the basic implementation. I find using TensorFlow in Octave a challenging idea. The Python Interface, however, will be new for me, however equally challenging. I have some experience in parallellizing code in Octave using pararrayfun and parcellfun. However, since in my experience, Matlab has different parallelizing functions, I am unsure as to maintaining Matlab compliance while ensuring parallelization.
- Please provide a rough estimated timeline for your work on the task. This should include the GSoC midterms and personal commitments like exams or vacation ("non-coding time"). If possible, include two or three milestones you expect.
- May 30 to June 25: Learn how to interface Python and/or C++ with octave, and how to therefore use the interfaces to call Google TensorFlow from Octave.
- June 30 to July 15: Basic toolbox, with full functionality, including the porting of TensorFlow to Octave, and the use of the same to create a basic CNN.
- July 15 to July 23: Unavailable.
- July 28 to August 20: Creating Example codes, help files and other documentation as necessary.