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?"
Obvious question first (Score:3, Insightful)
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 (Score:5, Insightful)
Comment removed (Score:4, Insightful)
Not that closed, but also not the local pub (Score:3, Insightful)
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.
Most communities seem closed because the internet is vast and there are a lot of idiots and trouble makers out there who at best waste time and at worst wreak havoc with a project. Since FOSS projects don't have employment processes and hiring forms, they need mechanisms to make sure they are working with the right people for the job.
Here are some hints to help you get through the initial barrier of egotism end rudeness that many projects use to protect themselves:
1. Join the mailing lists.
2. You may if you
boost == template programming (Score:4, Insightful)
To understand most boost modules, you definitely need a thorough understanding of templates.
Re:boost == template programming (Score:5, Insightful)
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: (Score:3, Insightful)
Good points. But we're talking about the actual programming, and then it really boils down to doing a lot of template stuff.
The ideas behind Boost are great, but I really hope that somebody, somewhere, will sooner than later invent a new generic-programming language that will allow an implementation of the Boost ideas without the major ugliness of abusing C++ templates to the max.
Maxima (Score:4, Informative)
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: (Score:2, Interesting)
Re:Maxima (Score:5, Insightful)
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.
Re: (Score:2)
And if you lean more towards statistics you can hack away at R
Re: (Score:3, Funny)
I mean Lisp is fun for penalizing CS freshmen and all, but seriously?
MIT was forced to cancel 6.001 after SCOTUS ruled that learned Lisp was cruel and unusual punishment.
Fix bugs (Score:5, Insightful)
1. Join a big open source project.
2. Read the bug reports
3. Start churning out fixes for bugs
4. Profit!
Re:Fix bugs (Score:5, Funny)
4. Profit!
Wait, what?
Re: (Score:3, Informative)
Re: (Score:3, Funny)
FOSS programmers who learn to check they're spelling the correct word correctly, get 73 virgins, and you get to choose which gender (or genders) they are, because you so obviously pay attention to small details.
Re:Fix bugs (Score:4, Insightful)
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.
FIND bugs! (Score:3, Interesting)
Re: (Score:2)
Various Resources (Score:3, Informative)
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 (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.
Re: (Score:2, Funny)
Re: (Score:3, Informative)
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, av
Re: (Score:2)
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: (Score:2)
I assume you have looked at LuciadMap [luciad.com]. It does much of this, though in Java, not C++.
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.
Re: (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 pl
Re: (Score:2)
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 (Score:2)
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: (Score:2)
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: (Score:2)
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.
Re: (Score:3, Informative)
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).
After one hour where will it be...? (Score:2)
You haven't solved those problems yet?? I thought they would have been solved 20 years ago.
I'm flying next week and suddenly I'm nervous.
Re: (Score:2)
Fix bugs. Make something you'd use yourself. (Score:2, Insightful)
Don't ask us, ask them! (Score:2, Insightful)
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.
Re: (Score:2)
Pinkushun Likes This (Y)
Team Up (Score:5, Insightful)
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.
Re: (Score:2, Interesting)
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. :-)
Entry points into Open Source... (Score:4, Informative)
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.
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 sta
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.
Well (Score:5, Insightful)
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 t
Re:Well (Score:5, Funny)
Mod this up! This is so insightful it should be a tattoo!
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.
octave (Score:3, Interesting)
Octave is a Matlab clone that now works pretty well. Go make a toolbox or two for octave.
Don't write software, write documentation (Score:5, Insightful)
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: (Score:2)
Re: (Score:2)
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...
Write documentation for BOOST (Score:2)
I started using boost recently to have a look at their graph library. Hell, what kind of mess is that.
The documentation is less than poor. I mean, they believe it is documented. But it is clearly not understandable.
There are no links between concepts and types that implement them. Almost no useful code example. Everything is presented as a template spec which is quite useless if you do not know the overall project.
So if you want to contribute to boost, I suggest you start writing "readable" documentation fo
I could use your skills... (Score:3, Insightful)
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;
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.
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: (Score:2)
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 v
Re: (Score:3, Informative)
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
Re: (Score:2)
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.)
I'm actually doing something similar to what you suggest, but using arrays of bytes instead of integers - since I'm using VB, I think of an arbitrary-length array of bytes as a string, instead of an array of characters. Using strings to hold my bytes just seemed logical, since the "length" of my "strings" can be arbitrarily assigned, and a single "digit" takes up one position. Come to think of it, I suppose I actually am using arrays, and just wasn't thinking of them as such.
I understand that C/C++ consider
Re: (Score:2)
I don't know why I'm bothering to respond to an off-topic AC cross-post troll, but here we go...
You posted that 20 minutes ago; Saying that I was unable to reply to it is jumping the gun a bit. To be honest, I haven't even read your response, since I was in another thread (this one) and hadn't read my email to even see that you had responded yet.
Attacking my programming skills (which I think I've been fairly obvious about not being "pro" in) is kinda silly, when the original subject of your post is a system
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]
Forget the fame (Score:2)
Take a look at The Boost C++ Libraries... (Score:2)
It sounds like the Boost project might be something for you:
http://www.boost.org/ [boost.org]
Re: (Score:2)
Ah. Forget about it. TL;DR
Forget about it. (Score:2)
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]
a word on the matter (Score:3, Insightful)
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 (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!
Focus on quality assurance (Score:2)
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 wh
If yoy want to learn C++ don't bother with Boost (Score:2)
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.
Re: (Score:2)
Indeed, Boost uses templates to the point where it becomes abuse. If you want to learn how to use C++ in a decent way, stay away from Boost. However, if you have mastered C++ basics, and want to be able to solve real-life problems in an efficient way, then come back to Boost. In the meantime, you can hope that somebody invents a better language.
Making a Boost Library (Score:2)
os contribs (Score:2)
Or even port some stuff to the CUDA side of things where i'me sure thier is a lot of interest
Some further considerations ... (Score:2)
(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 l
Easy Question (Score:3, Insightful)
Linux Drivers (Score:2)
There is an awful lot of work needed on Linux drivers of all types. I love the idea that you are eager to help. From what I have read on the web, this is an area where a) you can get a lot of information and b) your skills will grow very quickly.
To get help and/or ideas, get connected with your local LUG (Linux User Group). They can give you all kinds of help and encouragement.
Best of luck and thanks - I wish every grad would give a little of their time like you wish to
Some more math-specific ideas (Score:3, Informative)
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.
The best advice I can give you (Score:2)
Is study many languages other than C++. For example, learn Scheme through The Structure and Interpretation of Computer Programs. [mit.edu]
As a "one language" developer you will always be fifth-rate, in tools, techniques, and thinking.
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
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 develop
Octave. ARM. (Score:2, Interesting)
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:C++ is convoluted and hard (Score:5, Insightful)
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: (Score:3, Insightful)
Not taking the side of the parent, but from reading the summary I get the idea that the person asking *isn't* decent at C++ (at least by your definition of average-good). I base that only on the statement that they've used "some" OOP concepts in toy projects. To be decent at C++ you need to be able to understand the implications of the fact that it is statically bound. If you don't, you're not going to be able to write decent C++ code. You might be able to "make things work". A good programmer in C++ s
Re:C++ is convoluted and hard (Score:5, Insightful)
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 (Score:4, Insightful)
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: (Score:2)
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 (Score:4, Funny)
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.
Re:C++ is convoluted and hard (Score:4, Insightful)
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.
It's good you've been rated funny rather than insightful. C++ is every bit as unsafe as C.
Yes, they are very different languages, as C is intended for low-level systems programming, managing individual memory locations and stuff like that, whereas C++ has modern OO concepts badly tacked on top of that in a wrong way. It combines all the problems of Java with all the problems of C, and then adds some more. The end result is quite powerful, but not something I'd ever dare to call "safe".
Re:C++ is convoluted and hard (Score:5, Insightful)
The end result is quite powerful, but not something I'd ever dare to call "safe".
C++ is as safe as you want to make it.
eg. Did you know that Visual C++ operator[] does range checking in all standard container classes/strings?
If you do stuff like that and ban raw pointers (ie. all pointers have to be objects and thus subject to RIAA) then most of your traditional C++ problems disappear. It just takes a bit of practice and getting over the C mentality.
In return you get multiple inheritance, timely freeing of resources, operator overloading and much more expressive power than Java.
A good portion of Java code is just copy/paste because you can't inherit implementation and try/finally blocks to get your files closed at the end of functions, not just when the garbage collector feels like it (which might be 'never'). In C++ you write code once in a library and it stays written.
Re:C++ is convoluted and hard (Score:5, Insightful)
Did I really type RIAA instead of RAII? Oh, dear...
Re: (Score:2)
You did, but it may intentionally have managed to be both funny and insightful.
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, et
Re: (Score:2)
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.
You need to read: When Interfaces Kill: What Really Happened to John Denver [asktog.com]
It's not about whether you can do something, it's about whether there is an impedance miss-match between the technology and the operator. It's about how easy it is to shoot yourself in the foot, not whether it is possible. To wit; if there are tons and tons of bad code in a certain language, that tells you something about that language. (Not all, there could for example be bias in the type of programmers that are active/attracted to
Re: (Score:3, Informative)
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.
Re: (Score:3, Informative)
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
Re: (Score:2)
And yet since C++ is a superset of the C language (essentially anyway), everything that was "unsafe" about good old C is still there. I'm not really sure where you came to conclusion that C++ is in any way "safe". All the damage you could do in C is still there, maybe your compiler will complain more but if you want it to do something dangerous it should still work. Perhaps with a few more explicit casts, I'm not of the opin
Re: (Score:3, Informative)
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.
All good languages are "unsafe" (Score:2)
Are you unaware that one of the largest Open Source projects on the planet is a C project some of us affectionately refer to as the Linux kernel?
There is no such thing as a good and "safe" language. When you write real software you need to be good at what you do, understand the implications of the decisions you make, and be aware of the pitfalls of the language you are using. Calling C a
Re: (Score:2)
I'm aware of the Linux kernel, I also think it could be a lot better/safer if a bit of C++ was allowed into it. The only reason it's 100% C is because Linus doesn't really grok C++ (he's demonstrated this quite clearly in his anti-C++ rants).
The reason I say C is unsafe is because there's no way to enforce safety in C. It's all down to the programmer to get it 100% perfect, every time.
eg. If you're using a smart pointer in C++ there's no way you can forget to initialize it to null, the compiler does it for
Re: (Score:2, Funny)
Re:PATCH DAMN YOU !! LIKE YOU NEVER PATCHED BEFORE (Score:4, Funny)
Re: (Score:2)
"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: (Score:2)
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 Boo
Re: (Score:2)
Why breathe?