Introduction

I speak Chinese and English. I have 12 year experience using Linux as desktop and I have seven-year experience of image processing and analysis in biomedical area, specifically writing custimized scripts with Octave/Matlab, ImageJ plugins in Java and macro scripting to process and analyze super-resolution images. Currently, I am a PhD student at New York University studying molecular topology network prediction using graph theory, primarily programming in C++ on Unix/Linux.

Why GSoC? Why Octave?

I have known about GSoC program since 2010 or 2011 from the maintainer/help mailing list. Initially in 2007 for image processing purposes, when I was searching Matlab alternatives for Linux system, I found Octave, so I started to subscribe Octave mailing lists started reading the contributor communication seeing passionate and serious discussion, hoping someday I also have an @octave.org email account. Until one day, I found people discussing topics regarding GSoC, four or five years ago. So I have been having this idea of contributing to the Octave community for a long time.

Contributing to open-source is a great way to improve myself, and has always been my plan to get to know how the work in real life is done. Participating Google Summer Code is going to enable me get an in-dept understanding of Google's spirit and culture. Work and communication with other software engineers and scientific computing scientist in the open-source community in an coorperative way will allow me grow up fast.

It will be an exciting and fruitful experience for me to code throught the summer, with the purpose also directly realted to my own research. My peer-review publication manuscripts will include much image processing/analysis, which will employ modules reated to Octave Image packages and topics about Image IO. Therefore, the GSoC project will directly benefit my research project and this motivate myself highly.

I chose Octave because it is Octave introduced me to open source community; to let me see how a particular open-source community grow and evolve; how Octave gets more and more powerful, over the last eight yeaers.

Contact

E-mail Address: daniel27183@gmail.com

IRC Handle: dl11159

Location: New York, New York, USA

Time zone: UTC-5

I usually code around 6.30 to 14.30 (UTC-5), i.e., 1.30 to 9.30 (UTC+0), and could also try to adjust to a different time slot upon discussion. The above information is effective during GSoC.

I can devote 40 hours per week and more if necessary. My PhD graduation will be in 2018.

Coding experience

I took C++ programming course during my undergrad and now I code in C++ on a daily basis for my PhD thesis project. I started using Octave in 2007 for image processing/analysis. Later on I started using it for any general processing/analyzing/computing/ploting purposes. I also used it for my Scientific Computing course in graduate school. I followed online tutorial C++ OpenGL programming, eventually made a single user game. I do not have experience with Qt, only installed it on my computer three years ago to see how it looks.

I worked in a development team during an business competition during undergrad. I was responsible for the database design and implementation.

My current PhD thesis work is the my biggest project so far. It's writtn in C++. I got to learn to get source code organized and its design pattern, even just the documentations plays very important role in maintaince and debugging efficicy.

Other related courses I took include Fundamental Algorithm, C programming, Java programming, Computer Nextwork, Database Management, and Big Data Programming (Hadoop ecosystem).

"""Progress of Commits and patches""": Not yet. I have been playing with imtranslate and imadjust. As we know imtranslate.m in Octave image package implemented the translation using Fourier interpolation for 2D images only, differing from or incompatible with the MatLab version.

I changed my computer lately for some reason, and there was only Matlab 2009 installed on the Mac OS, cannot run imtranslate. Yesterday I found I could access the Matlab 2014 version from the cluster of my universty, so I just got a chance to test it this morning.

I was trying to install the image package on Octave 4.0.0, found out the one of the dependency package --- control package has yet to work on Octave 4.0.0. So I may have to use 3.8.2 to test it and start implementing the imtranslate possessing both 2D and 3D processing capability and being compatible with Matlab.

I consider this a very basic exercise to warm me up before the dive into my real work on Image IO GNU/Octave GSoC 2015 project.

Experience with Open-Source Software/GNU products

I am an aficionado of any OSS.

I started using Linux twelve years ago. My desktop evolves from Redhat, Federo, Gentoo, Ubuntu, Archlinux, Mint, until now I have two laptops, one is for normal work on Ubuntu, the other has Archlinux just for fun.

I am familiar with most of the popular utilies/tools on Unix/Linux, including gcc, gdb, make, bash, perl, sed, awk, grep, cut, tr, ed, ldd, vim, ctag, tmux, screen....I have some experience with SDL, OpenCV and OpenGL.

Previoulsy, I played with them just for fun, so I never publically post anything, until I started thinking I could also be the one to produce some fun stuff.

Feeling fine

I am feeling fine with all (IRC, mailing lists, source management systems, make, gdb, gcc) except I dit not know Mediawiki or other wiki software. I have been studying in the list for many years, checking the mailing list everyday is a hobby of mine already. I will contribute more after the GSoC towards obtaining an octave.org domain email. That's my plan.



Prerequisites

  • I can work 40 hours per week during GSoC.
  • I have access to Mac OS high performance powerstation at my lab.
  • I have access to Linux on the univesity cluster.
  • I have access to Windows on my laptop
  • I have access to Linux on My labtop, will be used for most of the tasks of Image IO GSoC 2015 project.
  • I do not think it would be an issue even though I do not have administrator privileges over the Linux cluster/MacOS. Wouldn't --prefix be enough?

Self-assessment

  • Please describe how useful criticism looks from your point of view as committing student.

It is critically important, that's one of the reason I want to join Octave commnity.

  • How autonomous are you when developing? If you answer both subquestions with "Yes, definitely", we are a tad confused. ;-)

I have to say I am very self-motivated. But I need guidance to avoid unnecessary mistakes.

    • Do you like to discuss changes intensively and not start coding until you know what you want to do?

Yes, I tend to gather enough information. Sometimes, more than enought.

    • 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?

Yes. But I think it is not about like or not, it has to be in the workflow, not to mention that I am learning.

Project Description:

Improve Octave's image IO

I chose this project from the wiki <http://wiki.octave.org/Summer_of_Code_Project_Ideas> In scientific research at large, there are many data recorded in the form of image; there exist many varities of image format. Presently, Octave uses GraphicsMagic (GM), a library capable of handling many of them in one single C++ interface. Nevertheless, GM still has its limitations including: 1. GM has build option quantum defineing the bitdepth to use when reading an image makes difficult to find an balance between accessable depth of image and memory usage, implying it needs extra care to rescale the image. 2. "GM supports unsigned integers only thus incorrectly reading files such as TIFF with floating point data GM hides away details of the image such as whether the image file is indexed. This makes it hard to access the real data stored on file"

"This project would implement better image IO for scientific file formats while leaving GM handle the others. Since TIFF is the de facto standard for scientific images, this should be done first." (zz from http://wiki.octave.org/Summer_of_Code_Project_Ideas)


Detail Project Timeline

Community bonding period

   Getting familiar with the image package and octave packaing system and related octave/C++ source codes.
   Interaction with mentors and the community members when necessary

1st week (05/25 - 05/30)

       Determine the image format and make priority queue of the tasks.
       Fully communicating with mentors to figure out the feasibilities of different possibilities about listings of image formats in prority order and candidate C++ libraries to reference from. Study them briefly and start studing the target one(s).

2nd week (06/01/- 06/07)

       "Implement the Tiff class which is a wrap around libtiff, using classdef. To avoid creating too many private __oct functions, this project could also create a C++ interface to declare new Octave classdef functions." based on what I learn and continue learning.

3rd week (06/08-06/14)

       "improve imread, imwrite, and imfinfo for tiff files using the newly created Tiff class"

4th week (06/15- 06/21)

       "port the bioformats into Octave and prepare a package for it"

5th week (06/22 - 07/06)

       "investigate other image IO libraries"

Mid-Term Evaluation

       Load images of differnt formats and depths to test.

7th week (07/06 - 07/12)

       "clean up and finish the dicom package to include into Octave core"

8th week (07/13 - 07/19)

       "prepare a matlab compatible implementation of the FITS package for inclusion in Octave core"

9-10th week (07/20 - 08/02)

       Upon progress, flexible and add test modules for all previous work, fix bugs, make big changes and utilize new ideas if necessary

11th and 12th week(08/03 -08/16)

       Review and documentation.

Other Commitments

Seeing PT for recovery from a recent leg bone fracture, cannot do anything except GSoC.