Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Open Source Programming

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?"
This discussion has been archived. No new comments can be posted.

Grad Student Looking To Contribute To Open Source

Comments Filter:
  • Maxima (Score:4, Informative)

    by JohnFluxx ( 413620 ) on Tuesday October 12, 2010 @05:18AM (#33867272)

    The KDE C++ math classes are "eigen": http://eigen.tuxfamily.org/index.php?title=Main_Page [tuxfamily.org]
    This is just a library (well actually a set of inline header files)

    More generally, there are programs like "maxima" (symbolic manipulation, integration, etc) and "octave" (like mathlab).

    I would love to see more work go into maxima :)

  • Various Resources (Score:3, Informative)

    by Anonymous Coward on Tuesday October 12, 2010 @05:19AM (#33867278)

    Boost (boost.org) is broad and pretty fancy. Eigen (eigen.tuxfamily.org) is narrower in scope - linear algebra - and just might be closer to your interests. To learn the details of templates, Alexandrescu's book -- Modern C++ design -- is a way of diving in deep quickly. Reading the Loki sources is also a good way of going about it ( http://en.wikipedia.org/wiki/Loki_(C++) ). Those are resources I can come up with off the top of my head. And general advice also hold: try stuff. Make a source repo for yourself (git, mercurial, darcs, whatever) and pick a small problem to solve and hack at the templates there. Use version control so you can come up with one solution and refine it and look over your own development history.

  • by PhrostyMcByte ( 589271 ) <phrosty@gmail.com> on Tuesday October 12, 2010 @05:40AM (#33867380) Homepage

    The easiest way to enter Open Source to write patches for existing software. Learn how to communicate with other developers, how to be flexible and adopt their coding styles and practices. Chances are this will help you learn the most, because you'll be writing smaller amounts of code and it will always be under review by someone else. Once you've shown your competency, you're usually given commit access to the project.

    Boost can be a very helpful community. Submitting a new library to Boost typically follows a few steps: gauge interest, put up code/examples/documentation for informal comments, submit for review. It sounds like you've got a lot to learn in C++ so it might be a long road (Boost has a very high bar to meet), but if you've got perseverance and are eager to learn, you can make it happen.

  • Re:Kinematics (Score:3, Informative)

    by MichaelSmith ( 789609 ) on Tuesday October 12, 2010 @06:55AM (#33867622) Homepage Journal

    Lets say you want to build UAV to fly significant distances around the world. It is going to have to fly a great circle trajectory and it will have to understand the volumes of airspace it is flying through. Airspace is a bit like the skin on a apple. It can't be treated as a simple Cartesian volume the way most simple games do it. The curvature of the Earth varies from place to place. This also affects your ground track.

    So your UAV will have to follow a route through the skin of the apple, so to speak, avoiding known danger spots, sometimes by flying above or below them. To do this it will need a library which can do coordinate conversions, and that is what kinematics do.

  • by znerk ( 1162519 ) on Tuesday October 12, 2010 @08:28AM (#33868078)

    All I'm saying is that before you start hiring employees, you should probably invest a lot more effort in vetting your idea.

    I'm not "hiring employees", I'm asking for help with a project that might have some form of profit associated with its completion. That profit may or may not be monetary, and is much more likely to be the bragging rights of being able to point at the finished project and say "I helped build that". Whether the project is brag-worthy would be something that could be discussed after an NDA is signed, at which point more details about the project would be forthcoming. If it's not a worthy project, then the NDA won't matter. If it is worthy, the NDA allows me some legal means to protect myself, should you decide to "fork" the project before I am ready for that to happen. I will say that I have been "kicking around" this idea for several years, and I believe it to not only be a worthy project, but an actual innovation.

    Long story short: I see your point, but you're not helping.

    It's pretty common for us to have ideas that seem great and innovative, but because of our lack of expertise in a given field, we don't realize that the idea is either flawed, or has already been refined and applied. I expect this is especially true with difficult math problems, such as large-number factorization.

    You are absolutely correct, and looking back at some of my ideas, they were awful. On the other hand, I have a habit of coming up with ideas, mentioning them to someone who has something to do with the field most appropriately aligned to produce something from it, and then watching something "come out" a year or two later. Simultaneous ideation is not something I am unaware of, nor am I so arrogant or ignorant to believe that mine was the only idea in the field, but I do tend to have good ideas and simply lack the means of expressing them in a manner that guarantees my own profit. This particular project is, in my opinion, something that is not in the same vein as my "ooh, shiny!" ideas of the past. The scope is breath-taking, for one thing.

    Bah, now it sounds like I'm all self-important, and I think this project is the best thing since sliced bread. It's not. It's a significant advancement in a particular segment of information technology, and one that I'm not aware of anything in the field that has anything within several orders of magnitude of the apparent efficiency of my method. More testing is *obviously* required, either to disprove my theories or to produce a working prototype of the process. You're aware of the "cheap/fast/good; pick two" business rule, yes? Well, this is supposed to be free and excellent - speed is the issue that I'm having with my current Procedures, and I don't have enough of the appropriate education to "fix" it myself. Shame on me for not finishing college.

    Suffice it to say that this idea has been (at least preliminarily) vetted to my own satisfaction, and that I will be completing it regardless of whether I receive any assistance. It may take me several years, perhaps a decade, to do it on my own, whereas someone who already knows an appropriate language and already has an affiliated skill-set could help me to implement it in a matter of months.

    Again, I'm not "hiring" anyone - I'm a poor broke slob like the rest of us, and the economic downturn combined with an unfortunate date of moving to another state (and the already saturated IT field in my destination) has been harder on me than some others. When I say I'm broke, I mean exactly that; I'm about to start losing possessions due to being unemployed. To be honest, I'm looking for work, myself. I'm hoping to get something in the fast-food industry in the next couple days, before I lose my phone and/or car.

    I was under the impression that the original poster was looking for an open-source project that would welcome a "decent coder". My project isn't currently "open", but only because I don't want to lose control of it before it's "re

  • by Joce640k ( 829181 ) on Tuesday October 12, 2010 @09:11AM (#33868444) Homepage

    everything that was "unsafe" about good old C is still there.

    So, um, don't use those bits...use std::vector and std::string instead.

    This is where 'learning' C++ comes into play, as opposed to just hacking around and copying/pasting C source code until it works.

    If you're doing it right the only problems you should have in C++ are null pointer exceptions - just like Java.

    Any real safety still needs to come from the experience of the programmer

    That, and having a teacher who smacked you down every time you tried to use a C-style array or didn't do RIAA.

  • by GlobalEcho ( 26240 ) on Tuesday October 12, 2010 @09:14AM (#33868500)

    I see a lot of posts from non-mathematicians here. Most are correct and useful, but not necessarily fitted to your situation. As a fellow mathematician who has dabbled in this stuff over the years, I can think of a few projects where your particular skills may be helpful:

    (1) Work on the GSL. This is the highest-quality numerics library out there. I'm not aware of particular weaknesses - it's really great - but I'm sure there's something.
    (2) Work on the open-source spreadsheets. These are basically OpenOffice, Gnumeric and KSpread. All three lack some numerical routines that could be useful.
    (3) Work on Scipy/Numpy, R, Octave or Maxima. The numerics routines in these libraries are not always GSL-quality, particularly special functions. The built-in optimization routines tend to be basic and sometimes light on features. Even translating unit tests between packages would be a useful, enlightening and somewhat interesting project that I believe no one has ever undertaken.
    (4) Work on an open-source optimization library, such as OpenOpt.
    (5) Performance/accuracy comparisons of existing spreadsheets, libraries, and programs.

  • by Anonymous Coward on Tuesday October 12, 2010 @10:08AM (#33869198)

    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.

    Nonsense. You should learn about mixins. The key is to be very careful (meaning generally avoid) data in your multiply-inherited classes. But MI is extremely useful for packaging up chunks of pure functionality in a way that's trivially-easy to add wherever you need it. Occasionally it even makes sense to include some data members, but you really need to know what you're doing and why if you go there.

  • by Joce640k ( 829181 ) on Tuesday October 12, 2010 @10:23AM (#33869446) Homepage

    OK, you had me until there. If you are using multiple inheritance you have a flaw at the architectural level.

    That's just a knee-jerk reaction.

    You could make a coding rule that forbids multiple inheritance of classes other than base classes, I'll accept that, but multiple inheritance is needed.

    nb. Java tries to enforce that rule by only allowing "one base class plus interfaces". That's OK as far as it goes but it forces you to copy/paste the default implementations of interface classes all over the place which is stupid (and can lead to some major editing sessions if the design ever changes). Much better to let the programmer decide for himself - he's the one with knowledge of the job at hand, not the compiler.

  • by Joce640k ( 829181 ) on Tuesday October 12, 2010 @10:37AM (#33869666) Homepage

    e.g. humans just aren't good at always getting tedious details right.

    This is where C++ really towers above C - all those tedious details can be handed to the compiler and the compiler never forgets them.

  • by pjt33 ( 739471 ) on Tuesday October 12, 2010 @11:41AM (#33870740)

    It's actually uglier than "just trigonometry and vectors". If you're willing to use a spherical approximation to the globe then yes, but WGS84 is an ellipsoid. To get an idea of how complicated it is, check out this paper [noaa.gov] (and note the references to numerical analysis).

  • Re:Fix bugs (Score:3, Informative)

    by ModernGeek ( 601932 ) on Wednesday October 13, 2010 @02:40AM (#33879900)
    Yeah, it's a great way to build your resume and show that you aren't just some lingo slobbering hipster. Most companies would rather hire someone with some code on the 'net with their name on it than someone who is fresh out of school with no real experience.

They are relatively good but absolutely terrible. -- Alan Kay, commenting on Apollos

Working...