Grad Student Looking To Contribute To Open Source 283
An anonymous reader writes "I'm an Applied Math grad student who knows a bit of Mathematics and a bit of programming. C++ is my first programming language — I am decent at it. I wish to start contributing to a numerical library with two purposes — contribute to open source and develop my C++ skills at the same time. I looked at the Boost libraries and joined the developer list. However, I have no idea on how to start contributing. I'm not an expert in template programming, having written only toy programs to understand that concept. I've used some of the OOP constructs like inheritance,but only for very small projects. Do you have any tips on how to get started on contribution? Are there any other emerging numerical libraries to which I can contribute? Are there any other avenues where I can contribute to open source and improve programming skills?"
Kinematics (Score:5, Interesting)
I work in air traffic control and kinematics are a big deal for us. This is the software which takes care of coordinate systems, motion and transformations. Say you have a vehicle with a particular WGS84 coordinate. Its moving at a particular speed in a particular direction relative to true north. After one hour where will it be in three dimensions relative to its original position? How much distance will it have covered? What happens if its trajectory went within two metres of the south pole? What path in 3D will it follow if it maintains a constant altitude above the datum along the way?
Ok now say it is not allowed to fly into (say) North Korea which has a particular shape. How can you project its path forwards to determine if it goes into the air space over that country?
And so on. Its bloody complicated stuff and I reckon a lot of open source software would benefit from a library which did this. Ideal for a maths guy.
Sage! (Score:2, Interesting)
Applied math student...knows C++...dude. Contribute to Sage [sagemath.org].
The goal of the Sage project is to creating a viable free open source alternative to Magma, Maple, Mathematica and Matlab. It is based on Python, but has many components written in C and C++. It has good capabilities for numerical computation, but more help is needed. It's pretty easy to dive in and start fixing bugs, and your work would immediately benefit thousands of mathematicians and mathematics students.
Sign up for the sage-devel list [google.com] and start with Sage!
Boost Linear Algebra (Score:2, Interesting)
Hi,
please contribute to the Boost Linear Algebra library, uBLAS.
You or any other interested in contributing new algorithms can contact me directly on the boost ublas developpers mailing list.
I'm the new maintainer of this library and will be happy to talk about any new contributions you want to make.
This library is great and need serious love.
Re:Kinematics (Score:5, Interesting)
I'm sure there are are plenty of other areas that the EMC project could utilize your math skills. There are many, many users and developers of EMC that would appreciate your skills.
octave (Score:3, Interesting)
Octave is a Matlab clone that now works pretty well. Go make a toolbox or two for octave.
Re:Kinematics (Score:3, Interesting)
I was part of the team that developed the short-term collision alert system for Swanick, UK. This type of prediction is unnecessary and not very useful to air traffic controllers, particularly in Europe, where each air space has a different way of dealing with traffic.
For example, pilots want to get their aircraft to specific altitudes to conserve fuel (usually around 29,000ft). In the UK, ATC keeps strict vertical and horizontal seperations, in France, they just let them hit the altitude they want, then play a complicated game of checkers with the planes.
In Greece, seperation over certain space is maintained by transponders on the ground, so spacing has to be a lot more forgiving, which also limits the throughput of the aircraft.
So in principle a plane, will fly at an optimum altitude and at a certain speed at that altitude primarily to conserve fuel. However when coming into an airport, control of altitude (and speed to a certain extent) will be handed to local ATC.
Of note, ATC will 'hand off' a plane to the next air space by assigning a new frequency upon which the plane should be communicating. Planes fly with a specifi flight plan.
Now unguided rockets.....that's a completely different matter.
Re:Maxima (Score:2, Interesting)
Have a look at R (Score:3, Interesting)
Have a look at R, http://www.r-project.org/ [r-project.org], which is math related.
Their developers page is at http://developer.r-project.org/ [r-project.org]
The R Project has again participated in the Google Summer of Code during 2010 http://www.r-project.org/soc10/index.html [r-project.org] which had several projects in C++
I think R could be nice as it combines a high level approach with the lower level of C++.
They also have forum at http://groups.google.com/group/gsoc-r/topics [google.com]
An Alternative Software Project Suggestion (Score:4, Interesting)
- GSL [gnu.org] : The GNU Scientific Library is a scientific toolset for C and C++. These tools are quite modular, and you might be able to find your own module to code.
- Plotting software : Help to any of the plotting programs would be a real boon for all scientists. This could involve developing non-linear fitting algorithms, GUI, or statistical analysis. Look at SciDAVis [sourceforge.net] and possibly GRACE [weizmann.ac.il].
- non-linear fitting : C++ Minuit, or a CERNlib project may be a good match--I'm not sure whether these are only developed internally.
good luck!
FIND bugs! (Score:3, Interesting)
Open Object Rexx (Score:2, Interesting)
Perhaps you might be interested in a smaller project where the number of developers is also small, but quite open to new blood. All of the current developers would be very happy to get you started with the ooRexx project. The source code is mostly C++ and we do not use templates, mainly because we have no need of them for our requirements.
ooRexx is an interpreter for multiple platforms and has a very interesting math library. All interpreter calculations are done in floating decimal, not binary. The current library supports most typical math functions (add, subtract, divide, multiply, remainder) but it lack higher order functions such as trig functions.
If this sounds interesting to you feel free to use the contact list at http://www.oorexx.org/contact.html [oorexx.org] to email one of us and we can get you started or supply you with more information.
David Ashley
Project Leader, ooRexx Project
Join/inherit my audio compression project (Score:2, Interesting)
About I year ago I've started a small project with a friend, written in C++, that does some improvements to lossless audio compression (currently to FLAC). It calculates the autoconvolution of the audio signal to find similar parts in the audio. Especially for electronically generated music, this can be used to predict other parts in the audio, and thus reduce the entropy of the signal (i.e. compress the file better).
If you (or anybody else) are interested in further development, I would open-source the project, and may be start working on it again a bit myself. Just drop me a line, at polarspaceflo (at) googlemail (dot) com.
Re:Team Up (Score:2, Interesting)
What you are purposing is that the only people who would be qualified to work on the libraries he's interested in are those with a PhD in Math & CS, which frankly isn't going to happen. You might also want to check out the degrees that a lot of CS professors have. You might be surprised to find out that they all don't have CS degrees. Some even have liberal arts degrees.
Octave. ARM. (Score:2, Interesting)
C++ is hard or easy based on knowlege and skill (Score:3, Interesting)
OK, you had me until there. If you are using multiple inheritance you have a flaw at the architectural level. There is a saying among Software Engineers: "Just because you can do it, doesn't mean you should do it." Multiple Inheritance is the poster concept for this statement.
Other than that, as a SE versed in numerous languages of all types, including C and C++, I can attest that every person saying "C" is better, or "C++" is better, or "C" is unsafe, etc. are simply people that lack a basic understanding of software engineering on some level, and completely lack an understanding of the language they are criticizing. Neither is "safe", or "better", or "implemented incorrectly", etc. (I promise you if you are one of these critics that Bjarne Stroustrop, Dennis Ritchie, and Brian Kernigan are smarter than you, and know much, much, much more than you do about language design.)
I especially love it when people cite bad code as proof of poor language design. It is like saying you can prove that English is a horrible language by referencing a Rap song. Any good language can be misused, misunderstood, and abused and said abuse is not proof that the language itself is inferior or flawed.
Fix memory leaks in existing programs or libs (Score:3, Interesting)
I recommend starting with an existing program or lib and try to fix the memory leaks. By doing that you will look at many lines of code, learn about coding standards, and still be able contribute. You'll also learn how to debug, which is the hard way to learn. And write proper code. Use valgrind.
Hint: start with libxml2. And good luck.
Re:Team Up (Score:5, Interesting)
I think you completely misread what I'm suggesting. What I propose is that the OP, who describes himself as a neophyte when it comes to software, find someone with some experience in that field to be a mentor and help get him off to a good start.
Here's my rationale: I've been writing software for 31 years and have 25 years of industry experience. For the last seven years, I've been working for a company that is staffed mostly by electrical engineers who specialize in signal processing and are really, really good at it. A lot of what they write works, but software isn't their bailiwick, and it lacks the organization and forethought about how it might be used in the future that people who've been around the block tend to put into it.
By teaming up with someone in CS, the OP won't be figuring out how to do it right by trial and error and perhaps turning out ugly code in the first place, and he gets to spread some of the applied math gospel to the heathens over in CS. :-)
Example of Parent's Point (Score:5, Interesting)
But people used it. (They also used my CLI Yahoo Messenger client, but that became defunct after I handed it off to other developers, due to the then-rapidly changing Yahoo protocol. The single most touching e-mail I have ever received was from a user of that client.) One of them submitted some patches, and eventually in 2002 I passed off ownership of the libxml++ project to him. I don't code in C++ much anymore, so I don't use my own library, but I do check in on it every so often. There are regular commits, including one last week, and an active mailing list, with several thousand messages. It's in Debian's main package repository and a number of diverse other packages depend on it.
All of this is the result of an itch I had ten years ago. Don't let anyone tell you that this kind of thing never happens and that there are just a billion useless libraries and programs half-written out there. There are a billion of those, but if you have a need for something that nothing on the market seems to fill, the chances are good that you're not alone in that unfilled need. Fill it and make it easy for others to use it and contribute to it, and see where it ends up in 2020.