×

Welcome to the Slashdot Beta site -- learn more here. Use the link in the footer or click here to return to the Classic version of Slashdot.

Thank you!

Before you choose to head back to the Classic look of the site, we'd appreciate it if you share your thoughts on the Beta; your feedback is what drives our ongoing development.

Beta is different and we value you taking the time to try it out. Please take a look at the changes we've made in Beta and  learn more about it. Thanks for reading, and for making the site better!

Grad Student Looking To Contribute To Open Source

Soulskill posted more than 3 years ago | from the bring-the-donuts dept.

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

cancel ×
This is a preview of your comment

No Comment Title Entered

Anonymous Coward 1 minute ago

No Comment Entered

283 comments

C++ is convoluted and hard (-1, Flamebait)

Anonymous Coward | more than 3 years ago | (#33867254)

C++ is my first programming language - I am decent at it

Thus, those statements unfortunately contradict each other.

Re:C++ is convoluted and hard (4, Insightful)

somersault (912633) | more than 3 years ago | (#33867422)

Your intended point (while you stated it rather poorly, since it's stupid to suggest someone couldn't be a good programmer in a language simply because it's their first - I am still a "decent" BASIC programmer despite learning many languages since) is understandable and probably something that we all thought when reading the summary, but it does depend on your definition of "decent", and the poster's ability to self evaluate. Usually I take "decent" to mean "average to good". As an "Applied Math grad student" he has already demonstrated good logical ability and therefore probably has the makings of a good programmer.He didn't claim he was amazing, but presumably he can write code that works even if it's not amazingly efficient, and he clearly knows he has much to learn and is looking for avenues to improve.

Rather than simply making obvious criticisms, you could try to help. I unfortunately have very little experience with helping out in open source projects, and have no clue about Mathematics libraries so I can't offer any useful advice, but I'm certainly not just going to sit here and watch while some smug AC takes immature pot shots at a guy who is trying seriously to both better himself and help out other people in the process.

Re:C++ is convoluted and hard (0)

Anonymous Coward | more than 3 years ago | (#33867428)

I'm sorry but if you read the rest of the summary it contributes to grand parent's point.

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.

Re:C++ is convoluted and hard (4, Insightful)

somersault (912633) | more than 3 years ago | (#33867500)

Which is why I said:

Your intended point is understandable and probably something that we all thought when reading the summary

Still, being decent at a language and it being your first language are not contradictory things. Thinking he's decent at the language and not knowing much about templates is of course more contradictory, but you certainly don't have to be an expert to be "decent" at something.

Anyway, my point was that guy is obviously aware he has more to learn and is humbly asking us how he can do so. It's an attitude that should be encouraged, and it's sad that the first post is someone trying to insult him, with no actual helpful advice.

Re:C++ is convoluted and hard (3, Insightful)

mwvdlee (775178) | more than 3 years ago | (#33867854)

Knowing a bit about the Boost libraries, he's probably talking about template METAprogramming instead of mere template programming. The former is quite a bit larger of a bitch than the latter. You can be a quite decent C++ developer without ever having done template metaprogramming.

Re:C++ is convoluted and hard (0)

Anonymous Coward | more than 3 years ago | (#33867658)

Ah, you (and the moderators) got the point wrong then. The problem is not in the person but in C++.

It teaches you _wrong_stuff_.

And it's not that it would be impossible to get things right in C++. Just that seeing the world outside it helps greatly in achieving that.

Re:C++ is convoluted and hard (1)

somersault (912633) | more than 3 years ago | (#33867822)

Thankyou, that is almost helpful (and I feel better plainly stated rather than vaguely implied). What would you recommend instead?

Most of my projects at work have been Delphi or Perl based, and IMO they are fine for beginners, but I imagine many Slashdotters like to play around with newer IDEs and languages..

Re:C++ is convoluted and hard (3, Funny)

Joce640k (829181) | more than 3 years ago | (#33868000)

C++ doesn't teach you anything, you study it.

From the summary it sounds like he learned C, not C++. There's a huge, grand-canyon-sized difference between the two.

C++ is a safe, expressive, modern language - like Java but without all the horrible limitations. Yes it takes a bit of study and it's not for casual programmers, but the results are worth it.

C is much lower level, unsafe language. Good for what it does but dangerous and a very bad choice for large projects.

Obvious question first (2, Insightful)

mike260 (224212) | more than 3 years ago | (#33867260)

You did try googling for, say, 'open source c++ numerical library [google.com]' right?
I ask because that yields a fair few that welcome contributions; maybe if you told us what your issues with them are then that would help us find you some alternatives.

Re:Obvious question first (4, Insightful)

AngryNick (891056) | more than 3 years ago | (#33867866)

What seems pretty obvious is that the guy's question is about how to get involved in an OSS initiative, not how to find one. Cultural barriers aside, the perception from the outside is that many existing communities are closed, elitist kingdoms that are unwelcoming and intimidating to newbies. So, while providing a helpful search query may be clever, it does not address the essence of the question and serves to perpetuate the stereotype.

PATCH DAMN YOU !! LIKE YOU NEVER PATCHED BEFORE !! (0)

Anonymous Coward | more than 3 years ago | (#33867266)

Because you need to. You want to. You have to.

#2 or NUMBER TEN !!

Re:PATCH DAMN YOU !! LIKE YOU NEVER PATCHED BEFORE (3, Funny)

airfoobar (1853132) | more than 3 years ago | (#33867546)

Extrapolating from how #2 smells relative to #1, NUMBER TEN must smell really awful.

first? (1)

atari2600a (1892574) | more than 3 years ago | (#33867268)

I've only done 6502 ASM & whatever Macromedia/Adobe Director uses, but if I where to contribute my $0.02... Program something not retarded. Sure everyone starts out w/ a few little trinket programs (I recall my first 6502 ASM program cycling the BG color register on an atari 8-bit (emulated) from #$00-#$FF), but once you really dig yourself into a hole w/ an intention to get out of it, you have only scraped the barrel. Try, for example, programming something that inputs a complex file-format & outputs per it's standards. You don't even have to publish, chances are at this stage there's a better FLOSS alternative, but that's not the point. Or, alternatively, you can do what everyone else does & start out w/ their token patches & tweaks (sometimes just for linux-main, etc street-cred :P)

Re:first? (0)

Anonymous Coward | more than 3 years ago | (#33867940)

Yea! Hello World has no place in this world! If you are going to learn a language, at least start at the top!

boost == template programming (3, Insightful)

StripedCow (776465) | more than 3 years ago | (#33867270)

To understand most boost modules, you definitely need a thorough understanding of templates.

Re:boost == template programming (4, Insightful)

sqldr (838964) | more than 3 years ago | (#33867830)

last time I read a boost header, I found that an understanding of hardware/OS-specific optimisations and quirks was rather important too. By the time you've read through all the #defines and figured out which bit runs on *your* OS, you've forgotten what you were reading it for :-)

It's not just a useful library, it's supposed to be fast and get its data sizes right too. I'd start with something less industrialised.

Re:boost == template programming (0)

Anonymous Coward | more than 3 years ago | (#33868002)

I'm not an expert in Boost programming either, and also have written only toy programs. Can anyone tell me how I can write professional programs that also contribute to the world?

Maxima (3, Informative)

JohnFluxx (413620) | more than 3 years ago | (#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 :)

Re:Maxima (2, Interesting)

DMiax (915735) | more than 3 years ago | (#33867594)

Eigen is probably the best starting point, since it is quite used (so your work is not too obscured), simple to extend, with good help from main programmers. Another project that would be nice to extend is GiNaC [ginac.de]. They have a TODO list with different difficulty levels.

Re:Maxima (0)

Anonymous Coward | more than 3 years ago | (#33867638)

I would love to see work going to any existing promising solution (like the mentioned). I mean instead of solving problems with existing by starting completely a new project. Which will come next half working OS application.

Re:Maxima (5, Insightful)

jank1887 (815982) | more than 3 years ago | (#33867926)

I second this motion. You can immediately start USING Octave and Maxima. You're a math student, so just start doing math. You'll quickly uncover some bugs and limits. And as said above, you can see the bug reports for both. At that point, get to work.

Fix bugs (5, Insightful)

a_n_d_e_r_s (136412) | more than 3 years ago | (#33867274)

1. Join a big open source project.
2. Read the bug reports
3. Start churning out fixes for bugs
4. Profit!

Re:Fix bugs (5, Funny)

Anonymous Coward | more than 3 years ago | (#33867398)

4. Profit!

Wait, what?

Mods? (0)

Anonymous Coward | more than 3 years ago | (#33867644)

How is this 'Flamebait'? Srsly?

(Not the same AC)

Re:Fix bugs (3, Insightful)

SharpFang (651121) | more than 3 years ago | (#33867460)

Definitely yes. Start out with simple, contained bugs. Then move to the bigger ones, that span several modules. Once you get a good understanding of the structure of the project, you can move on to "Feature request" type bug reports.

Re:Fix bugs (1)

croane (957468) | more than 3 years ago | (#33867848)

I simply agree this this post, just join an open source project and start helping out, you'll be surprised at how many emails you get about this bug or that bug that they need help with. Start out slow, and gradually start fixing bugs, and trust me....you will profit in the long run. Good luck!

Various Resources (3, Informative)

Anonymous Coward | more than 3 years ago | (#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.

Kinematics (5, Interesting)

MichaelSmith (789609) | more than 3 years ago | (#33867298)

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.

Re:Kinematics (2, Funny)

phillips321 (955784) | more than 3 years ago | (#33867502)

You lost me pretty early on, i think after the 2 words "I work". What is this "work" thing you are on about? Fair play though, this would take a considerable amount of effort and time and i doubt anyone in the open source world would benefit from this unfortunately, please correct me if i'm wrong and provide an example of how an ATC system could be used 'at home'

Re:Kinematics (2, Informative)

MichaelSmith (789609) | more than 3 years ago | (#33867622)

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.

Re:Kinematics (1)

znerk (1162519) | more than 3 years ago | (#33867652)

please correct me if i'm wrong and provide an example of how an ATC system could be used 'at home'

One word: gaming.

And while we're on the subject, I'm absolutely certain that an open-source trig library like the phenomenal one that must be present in EVE Online [eve-online.com] would be a fantastic addition to the free (as in liberty) gaming community.

Re:Kinematics (1)

yumyum (168683) | more than 3 years ago | (#33867524)

I assume you have looked at LuciadMap [luciad.com]. It does much of this, though in Java, not C++.

Re:Kinematics (1)

e70838 (976799) | more than 3 years ago | (#33867946)

LuciadMap is closed source (and a bit bloated). If you know about an open source concurrent of LuciadMap, I am very interested.

Re:Kinematics (4, Interesting)

kinema (630983) | more than 3 years ago | (#33867544)

Speaking of kinematics, you might want to take a look at a EMC [linuxcnc.org] (Enhanced Machine Controller). EMC is a CNC [wikipedia.org] package originating from NIST. EMC has an active community using and developing it. There are known bugs in the forward and inverse kinematics for PUMA style robots that could really uses the eye of a trained mathematician.

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.

Re:Kinematics (3, Interesting)

awjr (1248008) | more than 3 years ago | (#33867584)

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:Kinematics (1)

MichaelSmith (789609) | more than 3 years ago | (#33867654)

This type of prediction is unnecessary and not very useful to air traffic controllers, particularly in Europe,

I assume you are referring to the simple example I gave above about trajectories intersecting volumes. Its actually really useful stuff though perhaps not if STCA is your whole business. OTH if your business is avoiding controlled flight into terrain then the example I gave might be more relevant.

That said my example was more intended to point out the ways in which real world coordinate systems could be better handled in OSS, and the applications which might exist in (say) games and UAVs.

It depends how you define complicated (1)

Viol8 (599362) | more than 3 years ago | (#33867768)

At the end of the days its just trigonometry and vectors. Writing software to do that is just a case of wrapping plug and play equations given to you by a friendly mathematician into a nice API. Coders shouldn't be expected to derive the maths from first principals themselves or even know it at all.

Re:It depends how you define complicated (1)

MichaelSmith (789609) | more than 3 years ago | (#33867818)

Since the poster is a maths guy I was hoping he could design the whole thing and (as you say) get some coders in on the software production.

Re:It depends how you define complicated (1)

Viol8 (599362) | more than 3 years ago | (#33867952)

Thats usually the best way. I've worked with a few maths types and very smart though they are they don't generally have particularly good coding skills. A lot of the time their code ends up messy, convoluted and if they don't know the language very well , hopelessly inefficient.

work hard for free so the 'community' grows (-1, Offtopic)

Anonymous Coward | more than 3 years ago | (#33867302)

at least a few more billionerrors would be in/an order. keep your 'fork' handy so you can reclaim your 'contributions' after someone else is making money off your work. no copyright, or left, just copy. don't fret, the 'community' takes care of it owned, & you might even get some empty praise.

'vote' with (what's left in) your wallet. ignorance is...... dangerous? sanity is.... properly applied military/industrial/political hypenosys/espionage/terrorism? literally killing the opposition?

you have the right to remain silent.

the search continues;
google.com/search?hl=en&source=hp&q=weather+manipulation

google.com/search?hl=en&source=hp&q=bush+cheney+wolfowitz+rumsfeld+wmd+oil+freemason+blair+obama+weather+authors

meanwhile (as it may take a while longer to finish wrecking this place); the corepirate nazi illuminati (remember, (we have been told) we came from monkeys, & 'they' believe they DIDN'T), continues to demand that we learn to live on less/nothing while they continue to consume/waste/destroy immeasurable amounts of stuff/life, & feast on nubile virgins with their fellow self worshippers, is always hunting that patch of red on almost everyones' neck. if they cannot find yours (greed, fear ego etc...) then you can go starve. that's their (slippery/slimy) 'platform' now. see also: http://en.wikipedia.org/wiki/Antisocial_personality_disorder

never a better time to consult with/trust in our creators. the lights are coming up rapidly all over now. see you there?

greed, fear & ego (in any order) are unprecedented evile's primary weapons. those, along with deception & coercion, helps most of us remain (unwittingly?) dependent on its' life0cidal hired goons' agenda. most of our dwindling resources are being squandered on the 'wars', & continuation of the billionerrors stock markup FraUD/pyramid schemes. nobody ever mentions the real long term costs of those debacles in both life & any notion of prosperity for us, or our children. not to mention the abuse of the consciences of those of us who still have one, & the terminal damage to our atmosphere (see also: manufactured 'weather', hot etc...). see you on the other side of it? the lights are coming up all over now. the fairytail is winding down now. let your conscience be your guide. you can be more helpful than you might have imagined. we now have some choices. meanwhile; don't forget to get a little more oxygen on your brain, & look up in the sky from time to time, starting early in the day. there's lots going on up there.

"The current rate of extinction is around 10 to 100 times the usual background level, and has been elevated above the background level since the Pleistocene. The current extinction rate is more rapid than in any other extinction event in earth history, and 50% of species could be extinct by the end of this century. While the role of humans is unclear in the longer-term extinction pattern, it is clear that factors such as deforestation, habitat destruction, hunting, the introduction of non-native species, pollution and climate change have reduced biodiversity profoundly.' (wiki)

"I think the bottom line is, what kind of a world do you want to leave for your children," Andrew Smith, a professor in the Arizona State University School of Life Sciences, said in a telephone interview. "How impoverished we would be if we lost 25 percent of the world's mammals," said Smith, one of more than 100 co-authors of the report. "Within our lifetime hundreds of species could be lost as a result of our own actions, a frightening sign of what is happening to the ecosystems where they live," added Julia Marton-Lefevre, IUCN director general. "We must now set clear targets for the future to reverse this trend to ensure that our enduring legacy is not to wipe out many of our closest relatives."--

"The wealth of the universe is for me. Every thing is explicable and practical for me .... I am defeated all the time; yet to victory I am born." --emerson

no need to confuse 'religion' with being a spiritual being. our soul purpose here is to care for one another. failing that, we're simply passing through (excess baggage) being distracted/consumed by the guaranteed to fail illusionary trappings of man'kind'. & recently (about 10,000 years ago) it was determined that hoarding & excess by a few, resulted in negative consequences for all.

consult with/trust in your creators. providing more than enough of everything for everyone (without any distracting/spiritdead personal gain motives), whilst badtolling unprecedented evile, using an unlimited supply of newclear power, since/until forever. see you there?

"If my people, which are called by my name, shall humble themselves, and pray, and seek my face, and turn from their wicked ways; then will I hear from heaven, and will forgive their sin, and will heal their land." )one does not need to agree whois in charge to grasp the notion that there may be some assistance available to us(

boeing, boeing, gone.

Fix bugs. Make something you'd use yourself. (2, Insightful)

redcloud (3426) | more than 3 years ago | (#33867304)

Is there a bug tracker on this project? Tracking down and fixing bugs will force you to become familiar with the codebase, and hopefully, expose you to code from which you can learn. Also, find projects that you will use personally on a regular basis--i.e. "scratch your own itch". You'll do better work if the end result is not just some code somewhere, but something that you need and make use of frequently.

Don't ask us, ask them! (2, Insightful)

draxil (198788) | more than 3 years ago | (#33867308)

You are best off asking this question on the mailing list/irc/whatever of the community you want to contribute to. They'll know what needs fixing, and nurse you through submitting a few patches to them.

Octave (0)

Anonymous Coward | more than 3 years ago | (#33867332)

http://www.gnu.org/software/octave/help-wanted.html

Team Up (4, Insightful)

Blrfl (46596) | more than 3 years ago | (#33867342)

Don't take this the wrong way, but you're in math, not CS. Call the CS department, find someone who's willing to team up with you on this and work together on turning the mathematical end of your contributions into good code. You'll come out of it with a better understanding of how software should go together, your CS cohort will get some insight into applied math and both of you will be better for the experience.

GTFO,ASAP (0)

Anonymous Coward | more than 3 years ago | (#33867752)

As another commenter points out below, it's all well and good to learn and get involved in new things in grad school, but you may just want to focus on getting finished and the fuck out of there as soon as possible. Because 'as soon as possible' can easily turn out to be a lot longer than you banked on, or never, if you aren't careful. Grad school is full of things you might like to do, but you need to finish the damn degree before it finishes you. Hate to be any of the people I know that have let their PhD drag on for more than a bit too long, or those that have finally quit their PhDs after several years of frustration (cf. Matt Groening's 'Bitterest person in the world [futurama-area.de]')

Re:GTFO,ASAP (0)

Anonymous Coward | more than 3 years ago | (#33867810)

DO NOT LEAVE GRAD SCHOOL YET.

The economy is not yet ready for you.

Wait until the job market is roiling again. Stay in grad school, learn as much as you can, and get experience in disciplines related to yours... writing code for math libraries is good both in terms of giving you new skills and as a sign to future employers (when the market is back) that you have more usefulness than the next schmuck.

Start with understanding the project (1)

nietpiet (836036) | more than 3 years ago | (#33867358)

First off: Well done for wanting to contribute!
I'd say the first step is to spend some significant time in reading and understanding the code of the project you want to contribute on. Not only on how it implements a certain algorithm, but also on how the project uses templates, inheritence and coding conventions (as these may change from project to project). Since you already know the basics, this will teach you the application of these techniques in the real world, and how they are used in this project.
If you want some more in-depth background reading which may guide you in understanding the techniques used in the project, i'd suggest "Design Patterns" by Gamma, Helm, Johnson, and Vlissides http://en.wikipedia.org/wiki/Design_pattern_(computer_science) [wikipedia.org]

gmp (0)

Anonymous Coward | more than 3 years ago | (#33867362)

Look at http://gmplib.org/
Boost code is same mess as stl

Entry points into Open Source... (3, Informative)

PhrostyMcByte (589271) | more than 3 years ago | (#33867380)

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.

Startup Work (0)

Anonymous Coward | more than 3 years ago | (#33867384)

I run housecall.md, an e-science, telemedicine startup, with a focus on expected value maximisation for healthcare decisions.
If that's a project you'd be interested in working on (for stock options), send an email to team@housecall.md describing a few
project ideas, and we can see if there is mutual interest in collaboration.

Math/numerical projects (0)

Anonymous Coward | more than 3 years ago | (#33867396)

People like you will be most useful where a strong math background is mandatory in order to be able to program decently complex algorithms. I'd hit computer algebra systems (GP/Pari, Macsyma), computer aided statistics (PSPP, R-Cran) or linear algebra/computational kits (Octave) if I were you. The open source community is sorely lacking mathematicians with a bit of time to spare and coding skills

Sage! (2, Interesting)

Anonymous Coward | more than 3 years ago | (#33867410)

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!

Look at Eigen (0)

Anonymous Coward | more than 3 years ago | (#33867482)

Eigen is a great library for linear algebra, which has picked up a lot of momentum recently:
http://eigen.tuxfamily.org/index.php?title=Main_Page [tuxfamily.org]

There is a similar library in boost (uBlas), but I much prefer the Eigen API.
Eigen is heavily templated (like boost), and also has an additional focus on performance.

Boost Linear Algebra (2, Interesting)

Anonymous Coward | more than 3 years ago | (#33867484)

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.

Project Suggestion: NT2 (1)

oneofthose (1309131) | more than 3 years ago | (#33867550)

NT2 http://github.com/jfalcou/nt2/ [github.com] is an emerging numerical computation library built on top of very modern C++ libraries and ideas. It is closely related to Boost libraries.
From the description: The Numerical Template Toolbox (NT2) is an Open Source C++ library aimed at simplifying the development, debugging and optimization of high-performance computing application by providing a Matlab like syntax that ease the transition between prototype and actual application.
A way to contribute would be to make yourself familiar with it's use (e.g. port some of your Matlab scripts). Try to understand the basics of how it works internally. You will find features missing that you could try to add. Above all though, you will learn a lot.

Re:Project Suggestion: NT2 (1)

loufoque (1400831) | more than 3 years ago | (#33867736)

NT2 is a high-performance numerical computation library, comparable to Intel ArBB or Eigen, but is built using very advanced and modern C++, and has a lot of interesting things going on around it, such as both a domain-specific embedded language compiled through meta-programming using Boost.Proto and a domain-specific language compiled through a "normal" compiler design. The DSL is compatible with Matlab while providing a 30x speedup.

NT2 is tightly related to Boost, as several of its developers are also Boost developers, and portions of it, such as the SIMD abstraction layer, are being submitted for acceptance into Boost itself.

This project is in great expansion, as a start-up is being created around the project (which is of course under a liberal open-source license), and the research team working on it is also expanding and hiring.

So if you're looking to work on an advanced Boost-like open-source C++ library with high-performance numerical computation, I think this fits the bill rather well.

Well (5, Insightful)

ledow (319597) | more than 3 years ago | (#33867552)

You're an amateur, like the thousands of others on the net, like me. This is not a programming skill problem - that comes from either practice or aptitude, not pure willing. This is a contribution problem. You're looking for a project that has many skilled users and also has a very, very basic need they have to meet but at a basic level and that they haven't already done themselves and probably won't take too long. See the problem?

You're asking entirely the wrong questions - I would suggest that instead of trying to add something to Boost or similar, that you try to do something yourself and thus work out why Boost and similar projects are quite complex, have certain standards, etc. The problem of patch submission, new features and bug-fixing is not one of people willing to write the code that fixes the problem - that part's easy, and the fun part - it's finding something interesting that fits within the scope of the project and it's the problem of getting that code into the shape that the project would be happy with too. Thus bug-identification and lots of the hard slog-work (test suites, etc.) are much more useful than anything else you can come up with. I guarantee that the first few ideas you have to contribute to a large project will be knocked back because a) they've been suggested a million times, b) they don't WANT to do it that way, c) they CAN'T do it that way for some reason or d) they just don't trust your code and would spend longer fixing it than just writing it themselves.

I would suggest that you do one of the following:

1) Write your own library, for something you know intimately. Publish it on a website, document it well, do it under a loose license. Chances are it will overlap with other projects but they are always alternatives for everything and if your library is BETTER than the others, it will be used in preference, code will be absorbed from it into other projects, or people will ask you to for more of it. Chances are that it will take you a LONG time to make it better than even the bare basic libraries you find on the net.

(I'll use an example that I'm familiar with - SDL has lots of graphics primitive libraries, but SDL_gfx is one of the best despite not being the only "big" one, despite being unofficial, despite being a one-man operation and yet is used in thousands of projects. All it does is draw circles and polygons and rotate images, for God's sake, but it works and it's simple and it's fast and it's documented so it gets followers)

I know that when I go looking for a library to solve my problems, I am happier with something tiny and in my language of preference (C instead of C++) than some huge generic library that does a million and one other things. I have been on hundreds of tiny sites and found some absolute gems where the author just knocked up the exact piece of code I was after and nothing more and then I've used it, extended it, reported bugs in it and it becomes part of my standard toolchain (as an example, I use LodePNG to save PNG images from SDL_Surfaces, not because that's the only way, or even the easiest way, but because I found it easier than trying to get libpng to do it for me - some of my projects actually use libpng for loading and LodePNG for saving PNG's!).

2) Meld into the community - hunt for bugs, be active on discussions, suggest features (after reading the FAQ's about what not to ask for, etc.), maybe even implement a few test routines to show how useful your feature-X would be. Produce test suites (horrible, horrible job that's incredibly boring but serves a useful purpose). Run valgrind, or some kind of mathematical analysis, on the code and report your fixes for anything found back to the community. The hard-slog but useful stuff that nobody really wants to do.

Everybody would love to be chosen to just insert thousands of lines of code into a big famous project - it very, very, very rarely happens. More likely is that you have a small project of your own that others find useful (because it avoids the bloat of Boost, for example) or that you sit doing tiny, boring stuff for a long time before your name appears in the credits. Especially if you're new to programming, you're not going to come up with some new feature and just code-drop it into a large project no matter how nicely you ask. But have a small library that a certain section of mathematical programmers keep using and then push for its insertion into another project? That's much more reasonable and by the time that push comes you've already proven and improved your programming skills automatically.

Open source contribution is a LOT harder than people make out if you're a beginner. If you're Donald Knuth, then yes, you can happily code-drop millions of lines of something new and people will just take it at face value. But for a beginner to get even close to a patch in a large project is incredibly difficult because there are thousands of others like them, and thousands of more important people on the projects themselves, who have to have accidentally ignored or overlooked a simple, fixable problem in order for you to fix it for them.

Just for your information: I don't program much that's useful to anyone else since I left university, it's mostly a hobby for me now, but I have a few patches here and there, but I get infinitely more satisfaction and recognition for the things that I did myself, even if they are just silly games. As part of my own projects, I spent two hours searching for a C-only A* pathfinding library that was easy to use for generic purposes before I gave up and wrote my own based on a Wikipedia pseudocode (which only took an hour or two itself). That's like saying that I couldn't find the answer to 2+2 anywhere on the Internet, in computing terms, so I had to work it out myself - it was ludicrous. I spent hours from there trying to hunt down a practical D* pathfinding implementation and found a single undocumented Google code file for a robotics project and a mathematical paper that originated the algorithm, so I ended up coding it myself from scratch again. This was despite there being numerous articles on Wikipedia and elsewhere about the practicalities of D* pathfinding and its usefulness to robotics. It's not like there are no pathfinding libraries out there - they were just hideously complicated (or hideously documented), in the wrong language or they would have needed as much glue code as just writing the damn thing myself. The code snippets I did find were code-dumps from first-year CS students, mostly, and I nearly slit my throat in preference to cleaning up their code (which should hint at how people will look at your code).

Now I *KNOW* for a fact that A* is first-year CS stuff, I did it myself, and that virtually every game ever written uses it for its pathfinding, but trying to find a basic library that JUST did A*, was portable, had clean code, had nice data structures that integrated well into lots of different projects, could handle the sizes/types of data that I wanted it to, was extensible and/or did it in a way that didn't include megabytes of crap along with it was almost impossible. I had the same problem for SDL graphics primitives (until I found SDL_gfx), MD5 hashes, parsing of Windows INI files,
PNG saving, hell in my latest game I basically ignore SDL's color-keying and do it myself. All that stuff I can't be the only person in the world looking for it. And that's in quite a popular area (SDL game programming is something that everyone likes to try their hand at at least once), so there are probably thousands of mathematicians crying out for a simple -whatever- library rather than including Boost or rolling their own.

I ended up pulling tons of code from my own projects to do things like image caching (e.g. remembering when an image has been rotated right by 90 degrees, its alpha channel adjusted and a palette colour replaced and knowing that's the same as the one in memory where we played with the alpha channel, then rotated 270 degrees in the opposite direction, then changed lots palette colours around several times), font caching etc. In the end, I ended up writing my own vector/list/hashtable routines because the generic ones just weren't flexible enough. I'm not the only person like that, because most projects that I use have a page where the author has thrown tons of similar "I needed it, so someone else might find it useful" code too. The author of PuTTY, for instance, follows the line of most good programmers in that he has several large contributions to important projects (e.g. NASM), several projects of his own (PuTTY - despite it being "just another terminal program" and some games), and lots of loose code, interesting algorithms, etc. (http://www.chiark.greenend.org.uk/~sgtatham/algorithms/).

Find your interest, code a library even if it duplicates others. The experience and use you will get out of it will be miles better than trying to bother large projects with your amateur code-drops.

octave (2, Interesting)

gatzke (2977) | more than 3 years ago | (#33867570)

Octave is a Matlab clone that now works pretty well. Go make a toolbox or two for octave.

Re:octave (0)

Anonymous Coward | more than 3 years ago | (#33867954)

Please write textscan [octave.org]. Many people will love you for it

Don't write software, write documentation (5, Insightful)

petes_PoV (912422) | more than 3 years ago | (#33867572)

Are there any other avenues where I can contribute to open source and improve programming skills?"

The internet is drowning in code and starving from lack of decent documentation on how to use it. if you want to transform a mediocre, existing OSS project into a world-class, standing head and shoulders above everything else in its field piece of exemplary work, then take ANY numerical library and write some examples for it, write explanations on how it works, what its limitations are (hell: even comment some of the source code itself). Write user guides, API guides, put together a FAQ or a Wiki. List the mistakes and create some workarounds.It's not sexy, but it's what we need most.

The other thing that inspecting other people's work will do (apart from really honking-off some of the more protective - read; poor - software authors) is to show you, close up and in the real world, some of the constructs and techniques that are employed. For better or worse, this will give you a lot of experience in good and bad techniques and will give you a much larger palette to choose from when you decide to endow the planet with yet another piece of OSS of your won making.

Re:Don't write software, write documentation (1)

DNS-and-BIND (461968) | more than 3 years ago | (#33867734)

Showing up to contribute to open source and then being told to write the documentation is rather like volunteering for a wildlife rescue only to be told to clean rocks with paper towels instead. By "contribute", I automatically assume "write code" rather than the unwanted task of "go into that foreclosed house and clean out the toilet that exploded."

Re:Don't write software, write documentation (1)

jellomizer (103300) | more than 3 years ago | (#33867776)

Exactly, code is only part of the project. And it is often the easiest piece to make (sure it might take more time but coding is easy of anyone with some skill). But there is a bigger part of the projects that need real smarts. Good documentation Is one part, accuracy and bug checking, prioritize bugs, following the direction of a project and keep it on course. Getting honest feedback. Keeping it up to modern standards. Security, Implementation, training...

Use your time wisely (1)

kegon (766647) | more than 3 years ago | (#33867578)

I think it's a massive simplification that you are going to join a project to "fix up stuff". You need to know what needs fixing, what is important to fix, what desperately needs to be fixed. Otherwise you are just going to be tweaking hardly used, unimportant, soon to be deprecated code. Your contribution will be welcome but irrelevant.

If you like Boost: download it. Use it. You absolutely must be using it. Read the mailing list. Find out where the real problems are for yourself. Then discuss making fixes with the other devs.

nice day on the beach east coast fl. (-1, Offtopic)

Anonymous Coward | more than 3 years ago | (#33867590)

http://www.youtube.com/watch?feature=player_embedded&v=sG65sPuukIE#!

mynuts won; stuff that doesn't matter?

I could use your skills... (2, Insightful)

znerk (1162519) | more than 3 years ago | (#33867596)

I am not a strong programmer, although I can at least code my way out of a wet paper bag, if given enough time. Similarly, math is not my strong suit.

I have a personal programming project which I will eventually end up releasing to the open-source community for several reasons;

  • I think the possible benefits to the information industry would outweigh any profit potential in it.
  • I can't figure out how to monetize it without massive litigation in our current patent system.

    The idea may actually already be patented, but I have a 1970's science-fiction story that contains the "prior art" if anyone wants to challenge me. I don't actually think there are any patent issues, but that doesn't necessarily mean that I'm correct, especially since I haven't done any actual research along those lines. I can say without a doubt that I don't believe the concept is currently in use in any field that I'm aware of.

  • My programming and math skills are not sufficient to bring it to fruition in a reasonable amount of time.

I haven't released the details "into the wild" yet because I want my name attached to the end product (for portfolio reasons, I guess, or maybe I'm just proud of the idea). I'm not entirely sure how to go about protecting my interests in this matter.

It deals heavily with prime factors of extremely long numbers (so long, in fact, that I believe I will eventually require 128-bit computing for efficiency with my current algorithm ideations; it appears that it would be best to work with 120 binary bits at a time (or some multiple thereof, but quantum computing is still a good ways off from consumer-grade products, I fear). I will still need to work with strings (as opposed to pure numerical constructs) due to the immense size of the numbers involved. I initially came up with the concept while reading about a related idea in a sci-fi novella from 40 or so years ago, and I started toying with it as a... well, I guess the best thing to call it would be an informal feasibility study. After some research and some limited testing, it seems to be holding up to my initial ideations, other than length of time involved to actually perform the process. It seems the process is a bit cpu-intensive, and my initial estimates of "several hours" for completion appear to have jumped several orders of magnitude. Distributed processing should ease that quite a bit, although threads are a bit out of my scope. I do have some good ideas on how the process might be parallellized (is that even a word?).

I have a basic grasp on most of the algorithm, but I am (go ahead, laugh) primarily a VB coder, and I believe this project would be better suited to C, or perhaps python (I have heard something about sci-py?) I am not going to trumpet about my skill set, obviously, but I do believe I can eventually finish this project on my own - I've bounced the idea around in my head for several years, and only recently started actually working on the code. Unfortunately, as I said earlier in this post, I think I'm using the wrong language; and I'm not currently in the best position to be learning a new one. I also seem to have some sort of mental block for languages other than VB (even .NET is problematic, most of my coding has been VB4 and VB5) or so-called "scripting" languages.

I'm not sure how best to get someone to contact me via slashdot, but if anyone is interested in a (probably) not-for-profit endeavor, and can throw me some contact info, I would cheerfully find a means of communication to give this project a productivity boost. I would be requiring an initial non-disclosure agreement, of course, but am totally willing to share credit (and any profit that may arise) from any actual release.

Re:I could use your skills... (1)

DoofusOfDeath (636671) | more than 3 years ago | (#33867836)

I don't mean to be a wet blanket, but there are a lot of warning flags in what you wrote.

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.

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

And regarding big numbers, you might want to look at the Gnu Multiple Precision library. It's meant for efficiently handling numbers bigger than 64 bits.

Re:I could use your skills... (1)

stardaemon (834177) | more than 3 years ago | (#33867944)

I don't mean to be a wet blanket, but there are a lot of warning flags in what you wrote.

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.

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

And regarding big numbers, you might want to look at the Gnu Multiple Precision library. It's meant for efficiently handling numbers bigger than 64 bits.

Even if it's flawed, it can still be a fun learning experience.
For me, at least, this would be enough of a reason to do something like this.
And even if the math of it is well known, it's still possible to create a new and useful implementation.

Re:I could use your skills... (0)

Anonymous Coward | more than 3 years ago | (#33867870)

I'm curious - why do you think that it's best to work with *strings* to hold your numbers? As opposed to, say, arrays of integers, with code to handle an overflow from one position in the array to the next-more-significant position? (There are already various arbitrary-precision arithmetic libraries, and I suspect - but don't know - that they use this latter method.)

Have a look at R (2, Interesting)

G3ckoG33k (647276) | more than 3 years ago | (#33867602)

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]

Re:Have a look at R (0)

Anonymous Coward | more than 3 years ago | (#33867636)

+1 Please have a look at http://en.wikipedia.org/wiki/R_%28programming_language%29 or else at http://en.wikipedia.org/wiki/Python_%28programming_language%29 Both enable you developing mathematical software very quickly. Also learn how to use the IDE (Integrated Development Environment) which is used in the respective developer community for fast debugging and many handy tools.

Forget the fame (1)

psavo (162634) | more than 3 years ago | (#33867614)

You know what? Forget this "contributing". fuck em all. Do what's interesting and the easiest thing for you. Find a project that does things you're interested in, look it through and find what will drive your own interests and make it better. Then when they update, update along. Notice that your changes tend to get lost. Learn making patches and send them to that project. They'll integrate them and your changes will not get lost when you get latest changes from that project. That's the laziest and easiest thing to do and have any fun at all.

Screw duty and selfless contributing, it'll only earn you ulcers. Do the fun and laziest thing and get integrated into community.

Forget about it. (1)

Eharley (214725) | more than 3 years ago | (#33867628)

Finish your degree as fast as possible. You don't want to burn any extra enthusiasm on anything that won't get you out of school. As it is, you will need every last drop.

Also, read this article: "Three Books For Surviving Graduate School," at http://www.npr.org/templates/story/story.php?storyId=125856586 [npr.org]

It's a piece by the author of this book: Surviving Your Stupid, Stupid Decision to Go to Grad School, http://www.amazon.com/Surviving-Your-Stupid-Decision-School/dp/0307589447 [amazon.com]

Welcome, young grasshopper. (0)

Anonymous Coward | more than 3 years ago | (#33867634)

First, a mild bit of critique. I don't think boost is a good place for a beginner to start "contributing". That because boost is supposed to be a gathering place for "standard library quality" things that aren't (yet) in the standard library. Though IMO it on occasion carries a bit much platform flavour and other silliness, that is it doesn't actually manage to cleanly live up to its intended goal. But that aside. It's not a good place to try and hone your skills.

Try again in, oh, ten years or so, as that (well, 10k hours) is what it takes for a human to become really good at something. No offense, but you're not there yet. That and talent, but you get that for free, or not at all.

The good news is that there are a gazillion open source projects you could dig into and if you see stuff that needs fixing, well, write a patch and submit it. Some projects won't care, others will. Look around.

And, of course, in the next few years, learn a couple more languages. FORTH, lisp, haskell, C, assembly, wrap your head around OO use, where it's appropriate and useful and also where it is not, and so on, and so forth. And, uh, don't forget to have some fun along the way.

Next stop: freshmeat and sourceforge. Happy hacking.

Re:Welcome, young grasshopper. (1)

cheekyjohnson (1873388) | more than 3 years ago | (#33867716)

"Try again in, oh, ten years or so"

That's a very large amount of time. I know it depends on the person, but I really doubt it would take that long to acquire the knowledge necessary to accomplish this task.

Re:Welcome, young grasshopper. (0)

Anonymous Coward | more than 3 years ago | (#33867948)

Why, yes, yes it is a large amount of time. But reasonable for the proposed contributing of useful things to something with as high standards as boost has. Perhaps a bit conservative, in fact.

Note that spending the time writing patches for other projects is a good idea indeed. The message is about gaining experience instead of trying to overreach without that, very necessairy, experience. It is empathically not about discouraging contribution in the general sense. Gaining experience was the point in the first place. That and picking the right place to do it.

In short: Boost is not a place where beginners can meaningfully contribute code. Pick another place, almost any other place. There are plenty.

Also, learn more languages. That is almost as imperative for the serious programmer. Perhaps especially so for open source programmers.

As for your doubt I offer this bit of wisdom [norvig.com]. I didn't write it, but I do agree with it.

be an active user (1)

Zecheus (1072058) | more than 3 years ago | (#33867650)

help specify requirements. discuss feature with project members. document existing features. teach your peers how to use it. evaluate multiple packages and blog. blog about these type of tools in general. show in your blog how to resolve common problems in the math knowledge domain with these tools.

I still haven't even had my coffee this morning.

a word on the matter (3, Insightful)

mariuszbi (1113049) | more than 3 years ago | (#33867686)

As a C++ developer and boost user, I advise against starting to code for it. API design and implementation are quite hard as opposed to "normal" programming, as you need to factor several other problems: building a easy-to-use generic interface, mandatory in a library, is much more difficult to code than in project that works with specific data models. Also, I had specific problems with boost::filesystem API so I can tell you getting a bug acknowledged and fixed in a particular version might be frightening at first(no, I don't want to update my boost version to get it... I want it backported). I suggest you find a piece of code that you are interested and find useful and follow this simple roadmap:
1.Install it and use it
2.Subscribe to user/devel mailing lists
3.Write missing documentation and unit tests for components
4.Offer to implement features/fix bugs that have been appearing for some time but have a low priority.

An Alternative Software Project Suggestion (3, Interesting)

digitalderbs (718388) | more than 3 years ago | (#33867700)

In addition to BOOST, you might want to consider looking at other projects. Some that might be a good fit, and might need developers are :

- 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!

Focus on quality assurance (1)

pieleric (917714) | more than 3 years ago | (#33867708)

Don't start by adding big features to the project. It's the hardest part, and there are many people doing this already. The best is to first concentrate on the quality assurance:
  * Look at bug reports, try to reproduce them, add your insights, and maybe even find a fix for them
  * Write test cases, that's what is most missing nowadays in open-source projects. It's the best way to ensure that the library will work correctly on every kind of hardware/software combination. Only someone like you who know both about programming and about the domain of the tool (mathematics) can do it right!

If yoy want to learn C++ don't bother with Boost (1)

Viol8 (599362) | more than 3 years ago | (#33867728)

Boost has its own conventions and using rather complicated templating they've managed to munge a lot of C++ syntax. Also as a hiring manager I'm rather tired of interviewing C++ candidates who can quote me the STL and Boost methods until they're blue in the face but couldn't explain pointer arithmetic or byte alignment issues if their lives depended on it.

Check out Sage (1)

highacnumber (988934) | more than 3 years ago | (#33867826)

Sage [sagemath.org] is an open source platform for mathematics and computation that ties together many C and C++ libraries with Python code. You could browse the project bug and enhancement tracker [sagemath.org] or the sage-devel google group [google.com] for some ideas of where to contribute and the project culture. There are a very wide range of things to do. With Sage, and probably most other projects, a very good way to get started is to help improve the documentation. This is not glamorous, but it is effective. It involves you with other people in the project, and gets you familiar with their development practices. Its usually well appreciated since documentation quickly gets out of date on an active project. Writing documentation will suggest some coding projects naturally - to adequately describe a current bug to users, for example, you will have to understand it somewhat, and that might suggest a solution.

Work on Battle City Classic! (0)

Anonymous Coward | more than 3 years ago | (#33867838)

Work on Battle City Classic! I could use some help ;)

http://github.com/Deceth/Battle-City

It's an open source game programmed in C++. It's a fully functional game, but it could use some optimizations, improvements and bug fixes. Also, the community would love some new features and have made many suggestions. It's a fun way to get involved with open source programming.

http://www.jerseys-2010.com (1)

amanda5211 (1915578) | more than 3 years ago | (#33867846)

[url=http://www.jerseys-2010.com/wholesale nfl jerseys[/url] [url=http://www.jerseys-2010.com/cheap nhl jerseys[/url] [url=http://www.jerseys-2010.com/football jerseys[/url] [url=http://www.jerseys-2010.com/nba shop[/url] wholesale nfl jerseys [jerseys-2010.com], cheap nhl jerseys [jerseys-2010.com], football jerseys [jerseys-2010.com], nba shop [jerseys-2010.com], wholesale nfl jerseys [jerseys-2010.com] cheap nhl jerseys [jerseys-2010.com] football jerseys [jerseys-2010.com] nba shop [jerseys-2010.com] [url=http://www.hatonsale.com/winter cap[/url] [url=http://www.hatonsale.com/red bull cap[/url] [url=http://www.hatonsale.com/monster hat[/url] [url=http://www.hatonsale.com/new era hats[/url] winter cap [hatonsale.com], red bull cap [hatonsale.com], monster hat [hatonsale.com], new era hats [hatonsale.com], winter cap [hatonsale.com] red bull cap [hatonsale.com] monster hat [hatonsale.com] new era hats [hatonsale.com] Monster Energy Hats [hatonsale.com] Dc Shoes Ken Block 43 Ford Monster [hatonsale.com] Dc Shoes Ken Block 43 Ford Monster [hatonsale.com] NBA Detroit Pistons [jerseys-2010.com] Reebok NFL Jerseys Philadelphia Eagles [jerseys-2010.com] Kids Kansas City Royals PHILLES [jerseys-2010.com] http://www.jerseys-2010.com/ [jerseys-2010.com] http://www.hatonsale.com/ [hatonsale.com]

my advice (0)

Anonymous Coward | more than 3 years ago | (#33867852)

I find that the easiest way to start contributing is to figure out what you want that piece of software to do. If there's a bug that you would really like to be fixed or a feature that you really think would be neat go with that. People on the mailing list will usually help you out. The secret is to find something you're interested in so that you can have fun with it.

os contribs (1)

mjwalshe (1680392) | more than 3 years ago | (#33867856)

if your into technical progamming / numerical stuff maybe work on the Open Source FORTRAN's as they are poor performers compared to the paid for counterparts.

Or even port some stuff to the CUDA side of things where i'me sure thier is a lot of interest

Have a math background? Go functional! (0)

Anonymous Coward | more than 3 years ago | (#33867858)

Seriously, there are many great C and C++ programmers who will beat your ass. I really don't see a math student down in the trenches with the rest of the template metaprogramming inline assembler using grunt workers (although sometimes library and algorithm design in these cases can be stunningly beautiful). Applying math to real world problems can also mean that you engage in the ongoing search for better abstractions and theoretic models in programming. The functional community (i.e. Haskell, the ML family, and the theorem prover guys) have a lot of meaty problems to tackle that can't be solved by people without degrees and a strong mathematical background. Why waste your degree and your knowledge on something that other people do very well already?

being an ahole now management 'quality' (0)

Anonymous Coward | more than 3 years ago | (#33867864)

http://www.cnn.com/2010/LIVING/10/12/dark.side.management/index.html?hpt=C2

so, if you have enough symptoms, one day you too could be a softwar gangster billionerror 'community' 'leader'.

Optimization and Machine Learning (1)

davis685 (1108357) | more than 3 years ago | (#33867884)

I run an open source C++ project which is, in large part, a machine learning, nonlinear optimization, and linear algebra library at http://dlib.net./ [dlib.net.] There are all kinds of interesting algorithms in this area which you could help add to the library. Let me know if you are interested and I'll try and point you to some interesting methods to implement :)

Some further considerations ... (1)

golodh (893453) | more than 3 years ago | (#33867894)

You posed two questions:

(a) How to start contributing?

(b) What project to contribute to?

There are a number of posts that address the "how", which basically advise: "look for bug reports, then fix those", which I think is good advice and there is little I have to add to it. Except perhaps this: if you're a graduate student you will probably be able to find ongoing on-campus research projects. Is there any among those which is staffed with people you'd like to work with and from whom you feel you could learn? Have you considered joining one of those projects? Have you considered asking on of the professors for ideas? The advantage is that you will be able to get face-to-face contact, which can speed up learning. The disadvantage is that you're not getting "outside" the university.

I will address question (2): what project to join. Now there is something basic about contributing to a project which I think you ought to think about

How much time you have available, is there anything specific you want to learn about, and what is your level of commitment going to be?

For example, making use of multiple cores of today's chips is a hot topic, one which needs help, and one which you might want to learn about. One caveat though, most basic high-performance mathematical subroutines are in Fortran, not C++, and they don't aim at being examples of "good programming technique", they aim at getting maximum performance by paying attention to things like optimising memory access, keeping hte silicon busy and avoiding stalls (keeping things as much as possible on-chip, within-cache, cache coherency, pipelining, and the like).

You could e.g. propose make existing low-level routines thread-safe, and change existing subroutine libraries so that they will attempt to make maximum use of all available cores when instructed to do so. Doing this for basic maths subroutine libraries is (to me at least) interesting work which is -in principle- well-suited to a Maths graduate (much more so than CS types as they usually won't understand the basic numerical algorithms). Or you could move into harnessing GPUs for specific calculations (CFD calculations come to mind, but there are others to which GPUs are particularly well-suited like linear algebra). Or you could delve into professional-level object-hierarchies (the Qt object hierarchy comes to mind), and learn about how to use those things to package subroutine libraries into applications rather focus on subroutine libraries. However there is a really big snag.

It's this. If, as you write, you're basically just a passing coder with a Maths background who wants spend a few weeks to gain a bit of practice, you probably won't be able or willing to take the time to understand the specifics of the project you will be assisting. Anything that requires a substantial amount of domain knowledge (which could elevate you from "just a drive-by coder" to "a project contributor") is therefore out, barring perhaps mathematical subroutine libraries (you ought to have some fairly decent background knowledge about those from your studies). That puts clear limits on your potential contribution, and is therefore something you should keep in mind because it limits the type of work you should aim for, and with it the project.

This probably means you're limited to lightweight, non-critical work as most project administrators will not want to have any drive-by coders mess with critical functionality. What they will accept from you is the sort of work that's not critical and can be easily maintained by others when you no longer show up.

If on the other hand you were interested in a specific topic (you did mention numerical work, but I mean a specific field of application), you could invest the time to acquire some domain knowledge on of what the library is about then you could aim to make a more substantial contribution. The fact of the matter is that the real "action" tends to be in application-specific projects, not in basic maths subroutine libraries since they already exist. Think of specialised libraries dealing with Computational Fluid Dynamics, Finite Elements codes, Operations research (simulation, optimisation, queueing problems), Statistics, Mathematical Finance, etc. etc.. You can look e.g. at SAL (Scientific appplications on Linux: http://sal.jyu.fi/sal1.shtml [sal.jyu.fi]) for a long but organised list of scientific projects. I suggest you look at the maths section first because that's where you have background knowledge.

What you dind't say is whether there is any subject you're really excited about and which you find fun to work on. You'll find that you can muster a lot more energy and learn much more much quicker, and have more fun into the bargain, when you pick a project that you can get enthousiastic about.

Having said that, lets move on to specifics of the "what project?" question.

How about operations research, e.g. the COIN (COmputational INfrastructure for Operations Research) project (see http://www.coin-or.org/ [coin-or.org]). This offers rich possibilities and would suit a maths grad student. It's a fairly "structured" project though.

team (0)

Anonymous Coward | more than 3 years ago | (#33867932)

Find an existing contributor and team up. May take a few tries to find one willing to do so, but the reward is likely to be an incredible jump start on your learning curve and ALOT more fun. If you get a real dud, learn what you can and find a better one. As someone who is strong on math, look for someone who is strong in CS. You can both help each other with projects and problems. If you really are going to program, a small network of smart people you know personally is worth 100 CS classes.

Joining an Open Source project is great, but you need to stop thinking small (you) and start thinking big (community). Many are drawn to math and CS because you can be an introvert and still succeed spectacularly. Don't let your possible tendency toward introversion cause you to miss out on the best part of the Open communities....the other people.

Testing maybe? (1)

MikeNash (1920048) | more than 3 years ago | (#33867950)

If you're keen to get started, I'd play with an existing project and volunteer my services as a tester, or documentation guy. Lots of people hate both of these things, but they are critically important and will help with your understanding and general programming skills (assuming, that the sort of testing and documentation you're doing is non-trivial, of course)

What about the Parma Polyhedra Library? (0)

Anonymous Coward | more than 3 years ago | (#33867998)

I think the Parma Polyhedra Library (a library that implements various kinds of numerical abstractions used by projects such as Graphite) could surely benefit from the help of a skilled mathematician. Try asking the development team (http://www.cs.unipr.it/ppl/).

Load More Comments
Slashdot Account

Need an Account?

Forgot your password?

Don't worry, we never post anything without your permission.

Submission Text Formatting Tips

We support a small subset of HTML, namely these tags:

  • b
  • i
  • p
  • br
  • a
  • ol
  • ul
  • li
  • dl
  • dt
  • dd
  • em
  • strong
  • tt
  • blockquote
  • div
  • quote
  • ecode

"ecode" can be used for code snippets, for example:

<ecode>    while(1) { do_something(); } </ecode>
Sign up for Slashdot Newsletters
Create a Slashdot Account

Loading...