User:Gouzouni: Difference between revisions
Line 139: | Line 139: | ||
== N: News == | == N: News == | ||
I studied Octave's code for matrices and arrays and created the skeleton for adding matrix functionality on the multi-precision | I studied Octave's code for matrices and arrays and created the skeleton for adding matrix functionality on the [http://hg.code.sf.net/p/octave/multi-precision multi-precision] package. The skeleton was uploaded as a patch here [https://savannah.gnu.org/patch/?8429 8429]. | ||
The matrix support for the multi-precision | The matrix support for the [http://hg.code.sf.net/p/octave/multi-precision multi-precision] package is planned to be implemented by 2 classes. | ||
1) MpvNDArray class, subclass of MArray<octave_mp>, implementing N-dimentional arrays of multiple precision objects ( octave_mp objects ). | 1) MpvNDArray class, subclass of MArray<octave_mp>, implementing N-dimentional arrays of multiple precision objects ( octave_mp objects ). |
Revision as of 22:18, 31 March 2014
A: An introduction
* Please describe yourself in three sentences, one of them regarding your current studies. ** Which languages do you speak? ** What's your overall background?
- My name is Georgios Ouzounis. I am a fourth year undergraduate student in the School of Electrical and Computer Engineering in Aristotle's
University of Thessaloniki, Greece link (engineering bachelor includes 5 years of studies in my country). I love computer programming, mathematics and engineering and I hope to be able to stay involved with them through my whole life. My native language is Greek and I can also use English very well. As the title of my School indicates, my current field of study is Electrical and Computer Engineering involving subjects related to electrical and electronic circuits and also subjects related to computers and engineering such as control theory, analog and digital signal processing, computer networks etc...
* Why do you want to participate in the Google Summer of Code? What do you hope to gain by doing so? ** Please also describe your previous experience with the GSoC, if any.
- Applying for participation in the Google Summer of Code(GSoC) is my first step towards real world software development. Until now I have been programming mainly for university projects so what I hope to gain from GSoC is experience and knowledge on how to create software to be used by others. I have never had any similar to GSoC experience and it is the first time I get in touch with a programming community.
* Why are you choosing Octave?
- The past two years I had to deal with many university projects that required the use of software like Matlab or Octave. Using both of them I came
to realize the power of such tools. That is the main reason why I chose Octave. I have actually wanted to contribute to Octave long before finding GSoC but never found the nerve to try it until now.
C: Contact
* 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.
* Which time zone do you live in? Will that change over GSoC duration?
* Please state the timeframe (in UTC+0) when you feel most comfortable working during GSoC. Where are your time buffers?
- My nick in IRC, wiki.octave.org and the patch tracker is gouzouni (Gouzouni on the wiki). The time zone in my country is UTC+2
(Eastern European Time Zone) and this is not going to change during the whole GSoC period. I usually code around 15.00 to 23.00 but time is not really a matter. Mornings are good as well!
- Other contact informations are my e-mails ouzounis_georgios@hotmail.com, geoconstructor625@gmail.com and my Facebook account " Georgios Ouzounis ". You can also find me in Skype under the name (guess what :P ) " Georgios Ouzounis ".
E: Coding experience
* Please describe your experience with C++, Octave or Matlab m-scripts, OpenGL and Qt.
- I have been writing code in C and C++ for the last 4 years both for university projects and personal use. I have a very good understanding of these languages. I am well aware of the object oriented programming concept and I can use debuggers such as GDB very well. As far as Octave m-scripts are
concerned, I have been writing such code for the past 2 years mostly for university projects. I have written scripts for a wide spectrum of subjects such as optimization, image and signal processing, system recognition, control systems, machine learning and mathematics. I have very good knowledge of mathematics which helps in many ways such as writing vectorized code which is much faster than using loops. I have no experience using OpenGL or Qt.
* Please describe your experience with other programming languages.
- Other programming languages that I use frequently and I am comfortable with are Java and Assembly. I have also used Python for some time. I am comfortable with using PThreads, Cuda and MPI and I am comfortable with parallel computing in languages such as Java, C++ and Matlab/Octave.
* Please describe your experience with being in a development team. Do you have experience working with open source or free projects?
- I have no experience working with open source or free projects. I have good experience with being in a development team but only for small projects at the university, nothing as large as Octave.
* 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.
- The biggest project I have written code for is an Android application, a calculator, I developed last summer. It is about 2500-3000 lines of code. What I have mainly learned from that is if the small parts are well developed and documented then the big ones can be done quite easily. On the other hand, not being cautious in the first steps is going to be a big trouble on the later stages of a project. I was the only one working on that project so I had no specific role.
* Please state the commits and patches you already contributed to Octave.
- Until now I have committed the patches #8379, #8383 and #8384. The first one includes the uencode and udecode functions of the signal package, the second one includes the peak2peak function of the signal package and the third one includes the shiftdata and unshiftdata functions of the signal package.
F: Feeling fine
- I am new to IRC but I have been using mailing lists for a while. I am also new to Mercurial and generally source code management systems. I have been using wiki sites before ( wikipedia and other ) but this is the first time I am modifying one. I am comfortable with make, gcc and gdb but I wouldn't say I am a master of the last one.
- I intent to stay in Octave's community after GSoC is over no matter if I get picked to participate or not. I like programming and Octave's nature
(mathematics, digital and analog signals etc...) is what I am comfortable working on. I would love to continue contributing.
O: Only out of interest
- My access to Matlab was(and still is) limited only inside the university campus so if I wanted to work my projects at home and not stay until late in the campus I had to use other software. That is how I found out about Octave two years ago. I have been using it for the last two years and another
reason why I want to contribute to it, is to help make it bigger. What gave me a hard time was the lack of a fullest symbolic package, that is why I want to work on it sometime after GSoC.
- A thing that I had a little trouble finding an answer to how to contribute to Octave's development but I guess that was due to the fact that I had
no idea what a source code management system is.
P: Prerequisites
- For the past year I have been using Ubuntu 13.10(13.04 before) and before that I used windows 8. I have both these operating systems installed
on my laptop and I have root access to both of them.
- I have a 24/7 access on an Internet connection, a computer and a computer with my progressing work on.
- I am free to install any new software on my laptop.
S: Self-assessment
* Please describe how useful criticism looks from your point of view as committing student.
- After realizing that I was not born a good programmer (that was a long time ago :P ) I begun to appreciate any criticism. It's not that I like to be
told that I am wrong, but if I am, I try my best to correct my mistakes.
* How autonomous are you when developing?
- When I get a project on my hands I usually have a good deal of questions at first. Mostly clarification questions. After a while and when I get to
understand what is actually needed I can say I am pretty autonomous both in working on the project and solving the new questions coming up. What I like though, is a frequent feedback on whether I am on the right course or not. I hate what some of my university professors do, giving me a project and meeting me again a month after to check on what level I am. I like a frequent, say every 7 or 10 days, communication with other members on the project or the mentor in order to check if everything is ok. It's the more frequent the contact is the better the outcome will be.
** Do you like to discuss changes intensively and not start coding until you know what you want to do?
- My answer is yes, I do like to discuss changes intensively and not start coding until I know what I want to do. I don't expect to have everything figured out from the beginning but I like to have a decent schedule before starting writing code.
** 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 I do. I like to try many different ways of doing something in order to find the best. Since how will it turn out is not clear at the beginning,
throwing work away, even if it is a week's work, is a risk I am willing to take.
Y: Your task
- The task I have chosen is the implementation of "High Precision Arithmetic Computation". The part that I would like to focus on would be the completion and test of the multi-precision class along with the implementation of several linear algebra algorithms which will support the use of multi-precision inputs.
- A rough estimated timeline for my work on the task would be :
Beginning until the mid term period ( May 19th - June 22nd )
Include support for array and complex numbers on the already existent version of the multi-precision package.
Supposing a green light is given for the creation of a basic numerical type, this period's schedule will include working with Octave's core maintainers in order to embed the new type.
Implement upclassing on operations involving objects of the multi-precision class.
Milestone 1 : mid term evaluation : The goal at this moment will be to have a fully functioning multi-precision class, including array, complex number support and upclassing. Notes : If the creation of a new basic numerical type is accepted, then the goal will be to have the new basic type implemented and functioning among arrays and complex numbers. Due to the fact that this process includes cooperation with other Octave programmers, current time schedule might not be fully met at the mid term evaluation. Concretely there might be some functionality missing on the new basic type. As an example there might not be any support for complex numbers.
All deliverables will be tested and debugged during this period.
( June 23rd - June 27th )
Mid term evaluation, some testing and debugging. Planing on what to be done next. For example, if there is missing functionally on the new basic numerical type, plans will be made on when and how will this functionality be added.
( June 28th - July 11th )
Adding missing functionality on the new basic type. ( if any )
If there is no functionality missing, then the development of the linear algebra algorithms can begin. A rough estimate would be about four days per algorithm including testing and debugging.
( July 12th - August 11th )
Continue with the algorithms' development. Given the four days per algorithm estimation, about 7 - 8 different algorithms should be created during this period.
Milestone 2 : The goal for the end of this period will be to have a fully functioning multi-precision class ( or new basic numerical type ) and also a big enough arsenal of algorithms upon it.
A list of algorithms that will be implemented ( not necessary in this order ) to support multi-precision objects is given below :
Singular Value Decomposition ( SVD ), QR factorization, Cholesky factorization ( chol ), Inverse matrix computation, Eigenvalues and eigenvectors calculation, Solving linear systems, Root of non-linear function finder ( fzero ), Minimum value finder ( fmins ).
Imponderables like illness, bad days, Internet going down globally and such stuff are considered by the above schedule, this is why a precise estimation of days per algorithm is not given.
The only commitment I have for the summer is my university exam period which starts somewhere around June 6th and ends somewhere around June 27th. Despite that, I will keep coding during these days for about 5 - 6 hours everyday as stated above. Studying for the exams will be done the other hours of the day.
N: News
I studied Octave's code for matrices and arrays and created the skeleton for adding matrix functionality on the multi-precision package. The skeleton was uploaded as a patch here 8429.
The matrix support for the multi-precision package is planned to be implemented by 2 classes.
1) MpvNDArray class, subclass of MArray<octave_mp>, implementing N-dimentional arrays of multiple precision objects ( octave_mp objects ).
2) octave_mpv_matrix class, subclass of octave_base_matrix<MpvNDArray>, implementing matrices of multiple precision objects.
The goal is to imitate the implementation of FloatNDArray and octave_float_matrix classes, and adjust it to work on multiple precision objects.