Grad Student Looking To Contribute To Open Source
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?"
You did try googling for, say, 'open source c++ numerical library' 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.
Because you need to. You want to. You have to.
#2 or NUMBER TEN !!
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)
To understand most boost modules, you definitely need a thorough understanding of templates.
If Pandora's box is destined to be opened, *I* want to be the one to open it.
The KDE C++ math classes are "eigen": http://eigen.tuxfamily.org/index.php?title=Main_Page
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 :)
1. Join a big open source project.
2. Read the bug reports
3. Start churning out fixes for bugs
4. Profit!
Just saying it like it are.
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.
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.
http://michaelsmith.id.au
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.
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.
https://openhatch.org/
http://code.google.com/soc/
http://www.gnu.org/software/octave/help-wanted.html
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.
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)
Look at http://gmplib.org/
Boost code is same mess as stl
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.
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.
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
Applied math student...knows C++...dude. Contribute to Sage.
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 and start with Sage!
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.
which is totally what she said
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.
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
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.
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.
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.
which is totally what she said
Extrapolating from how #2 smells relative to #1, NUMBER TEN must smell really awful.
NT2 http://github.com/jfalcou/nt2/ 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.
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
Octave is a Matlab clone that now works pretty well. Go make a toolbox or two for octave.
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.
politicians are like babies' nappies: they should both be changed regularly and for the same reasons
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.
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.
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Have a look at R, http://www.r-project.org/, which is math related.
Their developers page is at http://developer.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 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
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.
fucktard is a tenderhearted description
It sounds like the Boost project might be something for you:
http://www.boost.org/
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
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
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.
How is this 'Flamebait'? Srsly?
(Not the same AC)
I still haven't even had my coffee this morning.
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.
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.
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 : 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 and possibly GRACE.
- 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!
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!
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.
I recommend that you visit this course wiki. It contains free material relevant to participating in an open source projects. The course, "Open Source Software Practice" is a taught at RPI. http://public.kitware.com/OpenSourceSoftwarePractice
http://www.rrsd.com/software_development/boost/oopsla05.pdf
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')
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.
http://osl.iu.edu/research/mtl/
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..
which is totally what she said
Sage 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 or the sage-devel google group 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! 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.
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.
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.
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
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
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?
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'.
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./ 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 :)
(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 libra
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.
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)
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/).
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.
No sig today...
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.
No sig today...
The Parma Polyhedra Library implements various (mostly polyhedral) numerical abstraction used by projects such as Graphite (which is included in GCC). They could surely benefit from the help of a skilled mathematician: take a look at http://www.cs.unipr.it/ppl/Contribute/ and consider getting in touch the developers.
If you have any interest in writing algorithms or leanring MATLAB, there's the open source MATLAB hyperspectral toolbox. http://matlabhyperspec.sourceforget.net. We are just starting out, get downloaded at least twice a day, and are looking for people to code up algorithms for us.
Head over to Stack Overflow -- a website for answering programming questions ( including C++ ). I found that I've learned a great deal by simply trying to answer the questions as posted and researching them if I don't know the answers. If you have time, you might also check out either stats.stackexchange.com or math.stackexchange.com, sites specific to statistical and mathematical questions respectively. Ps. If you haven't read "Joel on Software" you might also check it out.
Tell you the truth, when you put your mind into contributing to an Open Source project, you shouldn't worry about if you don't know anything. I believe that draws the line between people who contributes and people who don't. It is fear. When I started contributing to Google Chrome's open source browser, Chromium, I had no clue what I was doing. I didn't know any C++, Python, or JavaScript (which were the main languages that Chromium uses. All I did was reading their development wiki and try to get my first build up and running. I had no clue how to even build it because the wiki was not that great (now it is phenomenal), so luckily they had a mailing list and an IRC channel. I kept asking questions, and eventually I got my build working. After that, I tackled smaller bugs, and later on bigger bugs and features. At the end, I am happy, I ended up knowing C++ pretty well (the Google way), JavaScript ninja (almost), and Python (ya). But the most important, I am part of an open source group that really changes the world, and my fear of doing something that I don't know it is possible at that time, has drifted away.
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++ should also be able to grok most of the template code in Boost.
Having said all that, I think this person has picked a good project to work with. They can move from being a beginner in C++ and move through being decent to even being good. This is especially true because they are likely more than decent in the subject matter in the Boost library.
For advice, I recommend to keep following the development list. Check out all the changes and read them. Try to understand what they are doing. If you don't understand, it might be possible to ask specific questions to the person who wrote it (be diplomatic, though, as they may be tremendously busy). Try to fix a bug yourself. Send in a patch with the disclaimer that you are a beginner and would like feedback. There are many people who will be happy to help you.
There are some good books that explain how to do the template stuff that Boost is doing. Unfortunately it's been a donkey's age since I did any C++, so I can't remember the names of any. Perhaps someone here can help. If not, I'm sure you can post on the Boost mailing list that you want to find a book on C++ templates and are looking for suggestions.
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.
If Pandora's box is destined to be opened, *I* want to be the one to open it.
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".
The answer to your question is quite easy. Take whatever your thesis is, and create high quality software tools to help you to that end. Work where you're (trying to be) an expert. If tools already exist, expand those tools in the direction of your thesis.
http://it.slashdot.org/comments.pl?sid=1815608&cid=33868046 and you were unable to even reply or speak after all of your terribly erroneous statements were disproved or outright put into the waste bin. You have nothing to show for yourself here in this reply as to your "programming" because to be blunt about it, I strongly suspect you haven't done a damn thing in coding at all, much less anything that anyone has seen and said was good in say, written publications that are respected and reputable.
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 opinion that makes it more "safe" in any meaningful way. Any real safety still needs to come from the experience of the programmer, it's not inherently provided.
Fear is the mind killer.
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 - Linux would be, hands-down, the standard operating system.
*** Don't be dull.***
If you know the math, you should be able to come up with regression tests and find corner cases and invalid approximations and so forth. In other words, you should be able to find bugs, or prove that certain bugs aren't present. This is a very valuable service, and you can get familiar with the code by writing the tests that use it and understanding the ways it implements the algorithms involved.
PHEM - party like it's 1997-2003!
Most projects love off-loading working onto eager, but inexperienced, contributors. You can't go wrong with most groups by going to them with a good attitude, stating what you can do and asking what you can do to help out. If you get grief from them for that, you can safely write them off as terminal assholes because no reasonably well-balanced human being would slap down someone who approaches them like that.
I've been contributing to a project for a while where the core contributors are far better and more knowledgeable than the average contributor. The community has an elitist reputation, but what I've found from watching how others are treated is that those core contributors will treat the small time contributors very well if they contribute according to their abilities (meaning they don't flood the core contributors with trashy git commits for obviously complicated problems) and work as a team.
Part of the problem is that a lot of people don't like hierarchies and resent the hell out of them. The fact is, however, that they not only exist, but are necessary for social organization.
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 configuration file, not programming (regardless of my "correctness").
And again, I'm wasting my time responding here, because you'll never see this post; you're still an Anonymous Coward.
Mods, feel free to throw this particular bit in the "off-topic" bin; my karma can take it.
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
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.
No sig today...
http://it.slashdot.org/comments.pl?sid=1815608&cid=33868046 is where Znerk messed up on a dozen technical points after he ad hominem attacked someone here yesterday. Znerk was unable to even reply or speak after all of his horribly erroneous technical statements were disproved or outright put into the waste bin. Znerk, You're full of it, incompetent, and your technical mistakes list there is unbelievable. Your foul mouthed name calling only made you look even worse than your outrageous technical blunders. Go away noob. You don't know enough about the computer sciences and the proof's in the url I just posted above.
I would suggest that you start making a high level tool first (for example some sort of physics or engineering application). Once you have enough experience/knowledge then go down to a lower level (to a specific math library). It might be a longer road but its more worth while.
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.
Is study many languages other than C++. For example, learn Scheme through The Structure and Interpretation of Computer Programs.
As a "one language" developer you will always be fifth-rate, in tools, techniques, and thinking.
you had me at #!
This is absolutely the correct way to go about this.
Perhaps you might be interested in a smaller project where the number of developers is also small, but quite open to new blood. All of the current developers would be very happy to get you started with the ooRexx project. The source code is mostly C++ and we do not use templates, mainly because we have no need of them for our requirements.
ooRexx is an interpreter for multiple platforms and has a very interesting math library. All interpreter calculations are done in floating decimal, not binary. The current library supports most typical math functions (add, subtract, divide, multiply, remainder) but it lack higher order functions such as trig functions.
If this sounds interesting to you feel free to use the contact list at http://www.oorexx.org/contact.html to email one of us and we can get you started or supply you with more information.
David Ashley
Project Leader, ooRexx Project
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.
No sig today...
Hello, anonymous submitter,
About I year ago I've started a small project with a friend, written in C++, that does some improvements to lossless audio compression (currently to FLAC). It calculates the autoconvolution of the audio signal to find similar parts in the audio. Especially for electronically generated music, this can be used to predict other parts in the audio, and thus reduce the entropy of the signal (i.e. compress the file better).
If you (or anybody else) are interested in further development, I would open-source the project, and may be start working on it again a bit myself. Just drop me a line, at polarspaceflo (at) googlemail (dot) com.
Inkscape has been under a long, drawn-out port to C++. I helped port the UI frontend to C++/Gtkmm about 5 years ago or more.
Now that Inkscape is nearing 0.50, there's another big push to complete other parts of the C++ effort.
C++ is probably the under-appreciated language out there. We'd really improved Inkscape's C code switching to C++, we've drastically reduced line-count is certain components. C++ is just awesome but treated like a bastard step child.
C++ is all the benefit of C with all the goodies of Java & C# (plus more goodies since those languages are sub-par rip-offs of C++ in the first place).
Inkscape uses libgc for garbage collection, btw.
List c&&(!c++). Some C programmers will decline the job offer after they know they'll actually use C++, though.
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 an unsafe language is like saying that Smith and Wesson doesn't make good hunting rifles because they are unsafe. It is exactly the power when used properly by a skilled person that makes any tool useful and efficient in the right hands, and "unsafe" in the wrong hands.
Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
Did I really type RIAA instead of RAII? Oh, dear...
No sig today...
Comment removed based on user account deletion
Improve Octave. Specifically, for ARM. Remember that open-source does not necessarily mean architecture independent. Practically all software is written with the perception that the compiler optimizes any poorly written C / C++ code and that the target is a PC. While this is good for x86, relying on hardware instruction rescheduling to make code more 'efficient', it's pretty awful for anything else. Having done a lot of work with ARM / NEON optimizations myself, I can tell you first-hand that gcc does not do a great job of optimizing C code at all. This is going to become increasingly important as ARM outpaces x86, so please do everyone a favour, and write the code correctly the first time. There are several books about why this is so important, e.g. this one, but you'll probably find that its easier to just dive right in. Look at the Android source code, that's always a good example. uClibc / uClibc++ are also good examples.
OK, you had me until there. If you are using multiple inheritance you have a flaw at the architectural level. There is a saying among Software Engineers: "Just because you can do it, doesn't mean you should do it." Multiple Inheritance is the poster concept for this statement.
Other than that, as a SE versed in numerous languages of all types, including C and C++, I can attest that every person saying "C" is better, or "C++" is better, or "C" is unsafe, etc. are simply people that lack a basic understanding of software engineering on some level, and completely lack an understanding of the language they are criticizing. Neither is "safe", or "better", or "implemented incorrectly", etc. (I promise you if you are one of these critics that Bjarne Stroustrop, Dennis Ritchie, and Brian Kernigan are smarter than you, and know much, much, much more than you do about language design.)
I especially love it when people cite bad code as proof of poor language design. It is like saying you can prove that English is a horrible language by referencing a Rap song. Any good language can be misused, misunderstood, and abused and said abuse is not proof that the language itself is inferior or flawed.
Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
Trying to implement new functionalities is not easy if you're not an experience programmer.
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.
Template metaprogramming is functional programming with a nasty syntax. The grad student ought ot forget c++ and start programming with erlang or haskell ... it's probably a better fit for him (given his background) and there's more opportunity to contribute.
I am really sorry, but this guy should first read this book: http://norvig.com/21-days.html . With that said, the best way to contribute to open source is first to forget all the fancy, overcomplicated and hyped libraries (like boos), and to actually do his own little library doing exactly what he wanna to contribute. Maybe he should start programming for linux, and as they are saying, to develop a program that is doing one simply thing, but extremely well.
Eigen2 is looking for talent...
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 for it.
"you'll never see this post; you're still an Anonymous Coward." - by znerk (1162519) on Tuesday October 12, @09:09AM (#33868424)
As per usual, you spoke too soon and erroneously: I do see it (despite /. making changes to TRY to stop me, as they have before attempting to ban me to no avail, lol, just because I know how to overcome their "10 posts per 24 hour period for AC posters" restriction).
So here, you've shot yourself down, yet again once more.
Just as you shot yourself down with your huge errors one after another, and on every so-called "point" you made -> http://it.slashdot.org/comments.pl?sid=1815608&cid=33865512 (which were all disproven and showing you as an erroneous and loudmouthed noob who calls others names and yet, was shown to have inserted his foot in his mouth on each statement you made there) you name tossing erroneous noob loudmouth.
Nice part about being an Anonymous Coward is that I enjoy all the benefits you registered users do that matter to me (I have literally unlimited posting, do you?), and yet I am not 1/100th as easily trackable as you "almighty wannabe 'registered lusers'" are because of your posting histories. So, keep chasing your useless "karma points", and keep up the erroneous replies Znerk, you noob.
Did I really type RIAA instead of RAII?
You did, but it may intentionally have managed to be both funny and insightful.
Wow, my very own anonymous slashdot cyberstalker. I don't know whether to be amused, or terrified. How many of my posts have you responded to in your attempt to discredit me with your poorly-constructed rantings?
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Passing around objects isn't very efficient. Raw pointers is very helpful for say any console running a risc processor. (load/store) http://en.wikipedia.org/wiki/Reduced_instruction_set_computing
Open Office and Sage which would give you something similar to Scientific Notebook would be a very useful project.
Passing objects by value would be bad, yes, but passing around a reference to an object is just as efficient as passing a raw pointer (simple logic: references are really just pointers in disguise).
You can use a raw pointer in the middle of tight loop if you want, I'm fine with that, often do it myself in fact, but keep raw pointers *local*, ie. they die at the end of the function. Don't pass raw pointers around and don't store them long-term.
PS: I'm the sort of person who regularly looks at the assembly output of my compiler, just to be sure...
No sig today...
This is the second example I've run into today of someone running around with a programming language looking for problems to solve.
How are you supposed to be able to contribute anything of value if you don't even use the tool yourself? You'll end up gold plating your way to being banned from the mailing lists in no time at all.
Write something you need, something you care about.
I worked on a project several years ago that had a lot of statistical calculations (standard deviation, correlation, distributions, etc.) and was surprised to find that PHP doesn't offer these functions so I had to write my own PHP code to calculate this stuff. I was thinking that implementing an optimized library of various commonly used stats functions would be something that might fit your skill set well. PHP is written in C (and possibly some C++ but I'm not sure). I am re-learning my long lost C chops at the moment in order to contribute to AMFEXT:
http://pecl.php.net/package/amfext
AMFEXT is an extension to PHP and can either be compiled into the PHP executable itself or compiled as a shared object -- a separate file. This extension structure makes it pretty easy to expand PHP because your extension is entirely optional for folks building PHP so it would not be critical to write perfect code right away. In order to get started developing such an extension, there are a variety of tricks to get oriented.
One is to read the pecl-dev mailing list:
http://news.php.net/php.pecl.dev
Another is to read some tutorials. This one is pretty good:
http://devzone.zend.com/article/1021
Here's a quick start guide describing how to make your own 'hello world' extension:
http://blog.slickedit.com/2007/09/creating-a-php-5-extension-with-visual-c-2005/
You don't need permission to download the source and compile it yourself and start building your own extension. If you want it to be included in the PECL repository, you just have to join the mailing list and submit your extension for the other contributors to see. They'll let you know what further steps to take.
I could also use some help with my open source project:
http://flashmog.net/
Thats the main lesson I took away from one of the better movies I've seen about hacking: The Social Network (ignoring all the soap-opera filler). We hackers learn our craft and the respect from each other by writing something elegant. It doesnt have to be big and full of fancy features. And get it out there to the public as a website or App. Its does nothing sitting on your computer.
Start with something you know. Since you've been a student most of your life, maybe it could be some sort of educational software, perhaps a a clever way of illustrating something in mathematics.
In linus' view, it does not matter if something requires more effort or oversight in regards to code so long as architecturally it is better
Of course C can be made perfect ... but so can assembly language so why not use that? (Ignoring portability for a moment...)
I hope you'll agree that writing (eg.) Linux in assembly language would need an order of magnitude more effort than writing it in C. I see the C vs. C++ argument in exactly the same way.
Linus is *wrong*, there's no downside to using C++ instead of C. If a bad program results from using C++ then it's the fault of the programmer, not the language.
No sig today...
Anyone is free to read these 2 urls below and to decide for themselves as to how Znerk's "performance" was (technically he was destroyed, but if he was auditioning for a comedy or clown act?? He'd win, lol! Read on!)
http://it.slashdot.org/comments.pl?sid=1815608&cid=33865512
and
http://it.slashdot.org/comments.pl?sid=1815608&cid=33869788
"... and yet you didn't notice the reply to your lunatic ravings, despite having linked to the post I responded to in this post's parent." by znerk (1162519) on Tuesday October 12, @10:48AM (#33869826)
You FINALLY replied but the 2nd url above only shows you being SHOT DOWN easily as you were in the 1st url above... you are truly technically INCOMPETENT (no doubt about it, anyone can read the 2 url's above and see that despite all your name calling and other reprehensible childish behavior, that your big mouth wrote checks your know-how could not cash).
Znerk was shot down, badly, in the 2 urls above. On every so called ERRONEOUS "point" he tried to make (he did so tossing names rampantly, and only to have himself be shot down by programmatic and networking technology facts as well as testimonials by respected people in this art & science of computing)?
LMAO!
You LOSE Znerk, but that's what you get for having a BIG name tossing mouth and no real skills in this field of computing. Next time you try to take on your clear betters in this science, know what you're talking about.
---
"If you're evading a ban, do you realize that you can be sued for fraudulent use of a service? Real-world application of internet logging features are wonderful. Did you post this stuff from home? Do you realize that IPs are logged here on slashdot?" by znerk (1162519) on Tuesday October 12, @10:48AM (#33869826)
First of all: Nobody is evading a "ban"!
As they don't typically "BAN" here.
However - The so-called "security system" here (OR WHATEVER IT IS YOU WANT TO CALL IT THAT IS)? It's easily circumvented, IF you know what you're doing that is (you clearly, don't).
So you can be an AC and post as much as you like and can you show me a written rule here on this website that's older than this week, lol, that says one cannot do this Znerk?
(As per usual? Znerk will evade this question too, for lack of any evidence of it is why)
---
"... and still no name to respond to. You're no fun whatsoever." by znerk (1162519) on Tuesday October 12, @10:48AM (#33869826)
You're a NOBODY done-nothing "ne'er do well", you have NO name whatsoever in this field and it shows (lol, especially in the 2 url's above)...
C++ is as safe as you want to make it.
In other words, it's not safe. A safe language isn't one where you can write safe code, it's one where you can't write unsafe code. As long as you can blow your foot off using legal C++ constructs, C++ isn't a safe language.
I'm happy to see any contributions to Octave - the open Matlab-sort-of-immitation. It's great in principle, but still somewhat rough around the edges.
Do something, when you find a bug or limitation in the available library, fix/add it.
It could be code, it could be documentation, both are contributions.
I'm not a strong programmer, but I've filed a few number of small (tiny) fixes with a number of projects.
Bug fixes are almost always appreciated. Clear bug descriptions (so the "real" developers can solve the problem) are also quite valuable.
If you make something that solves a real need, maybe someone else will use it. If the core library authors don't want to include your contribution, you can release a supplemental library.
The real key to success is to do something useful.
To start contributing, easiest way is to find a lib that looks promising, but which have not been developed for some time. Developers cannot do it too long, and many projects are forgotten. The high profile libs have very strict requirements of who is able to contribute, but taking a not-so-high profile lib and make it world class. It's very large amount of work, but in the end it'll be worth the effort.
Write a new PCB autorouter for KiCAD! If that is not appealing you could integrate the Topological autorouter with KiCAD.
http://anthonix.resnet.scms.waikato.ac.nz/toporouter/
I really like KiCAD and use it often. However the built in autorouter needs some serious rework and someone with a mathematical background to fix the PCB autorouting. It is a very complicated problem.
Thanks!
Andrew Lynch
PS, yes, I am aware of and use FreeRouting.net. They are great but are a closed source proprietary tool.
I would like to reiterate the octave suggestion. They made a ton of progress in the 3.x branch, and now the language and core libraries are all pretty much compatible with Matlab. However, there are still a bunch of functions in the various toolboxes that are not implemented, or partially implemented, or not compatible the Matlab version. I run into these on a weekly basis, and while I have spent some time fixing things, I just don't have to fix everything I find, and often fall back to using Matlab on my university account.
Most of this will be implemented in the matlab language itself, and not C++, but other than that it is right down your alley. All applied math. The functions needing implementation are small enough for a beginner to handle and the requirements are documented fairly well by looking at online matlab help files. Since you are a student you probably have access to matlab through your university so you can test if you implementation is compatible, and check corner cases not described in the help files.
This would be a very valuable contribution from someone in your position.
The pedants are revolting!
No sig today...
I've found that the best way to help an open source project is with documentation. Not necessarily user manuals, but just code commenting. There's plenty of code that has zero explanation about what a particular function does, or how it works. If you've found a project that fits this, then start working on documentation so that (a) you will understand what the code does, (b) everyone else following you will understand what the code does, and (c) the developers themselves will understand what the code does, because sometimes you find bugs just by trying to figure out what the code does. That being said, (warning: personal opinion ahead) I second the opinion that you should stay away from template classes. There are plenty of worthy numerical projects out there that do not rely on a maze of twisty little code fragments, all alike.
Towards the Singularity.
http://it.slashdot.org/comments.pl?sid=1815608&cid=33865512
and
http://it.slashdot.org/comments.pl?sid=1815608&cid=33869788
You're correct that Znerk has no clue and not just in programming: Znerk called others names on every so called erroneous "point" Znerk tried to make in the 2 urls above, and in the end, Znerk was cleanly shot down by programmatic and networking technology facts as well as testimonials by respected people in this art & science of computing!
However, Znerk's attitude and name calling is what really makes him look poorly, and he is quoted in it as he is shot down on every so called "point" he tried to make in the 2 urls above today.
Grow up Znerk, and realize something: Around here, you are SQUAT in your so called "know how" (very poor based on the above 2 urls here posted), and you ought to be a little more humble and realize you are NOT as good as you *THINK* you are in this field (despite your mommy saying you are, lol, but nobody else is).
Assuming that you've already chosen the right project and language, then the one thing you can do that will both give you experience and earn you street-cred is to go through the bug lists and find things to fix.
XML is a known as a key material required to create SMD: Software of Mass Destruction
Without being able to blow your foot off at times, you'll never learn not to point your gun at your foot. You'll also never write extremely fast code.
As a mathematician, you have a leg up on many of us non-maths folks in your domain. As an engineer I often reach for tools that make use of math libraries such as Matlab, Scilab and python with scientific add-ons. However, when it comes time to integrate solutions into C++ code, things get hairy. The boost libs are not yet complete and while I admire use of the template library, I find it is often difficult to work with. Perhaps that's my own shortcoming. In the past, I have often resorted to linking against LAPACK within AMD's core math library (since it's free on Windows & Linux), which stretches my ability to sanely configure projects and to use the linear algebra and other special-purpose functions appropriately. It would be great to see more examples of how to use this stuff effectively and how to go from high-level tools like python to lower-level stuff safely. As a math person, maybe you have more insight into that than the average engineering/software guy.
Boost is really much more than template programming. To get the most out of it, it helps to understand the more general concepts of meta-programming and generic programming. C++'s template system just happens to be how you use those paradigms in C++.
Here's a good overview of generic programming:
http://www.boost.org/community/generic_programming.html
Dave Abrahams' book is a good intro to template meta-programming:
http://www.amazon.com/Template-Metaprogramming-Concepts-Techniques-Beyond/dp/0321227255
I've also found Python to be a great language for learning both concepts. While you won't get all the performance benefits of C++, Python's rapid development cycles make it easy to play around with the both techniques.
-Chris
Forget it. Just write your own library -- seriously.
I'm designing an FPGA based motion controller for a reprap (www.reprap.org). Repraps are open source 3D printers designed to make copies of ourselves. It is the invention most likely to free the human race from being slaves to the man.... It's also the invention most likely to bring about the robot apocalypse...
Anyway, I could use some help on the math. If you could pitch in on the project I would be very greatful. It's all open source. Complex vector math like the intergals of bezier curves (just doing numeric integration right now), curvature and such.
Brian dot korsedal at gmail dot com
-Brian
Madagascar is an open-source software package for multidimensional data analysis and reproducible computational experiments, used by geophysicists but also by others. We warmly welcome new contributors in the project. As a plus, most participants work either in the oil industry, or in environmental science (both interested in imaging the underground), and you may be able to get yourself known by several professionals and get into one of these fields if you are interested.
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.
If Pandora's box is destined to be opened, *I* want to be the one to open it.
What wrong stuff? Please be specific.
In what way is it wrong? That's a pretty bold statement to make.
Here's an example of what the ledow is talking about with point #1. Or at least a corollary of his point in action. About a decade ago, I wanted to play with XML files in C++. There were no good, small libraries to do that. There were a couple of ridiculously large, complicated libraries that would handle XML files, but you'd lose more time learning the library than you would ever put into your actual code. So I created libxml++, to scratch my own personal itch. It was, at the time, a small but useful wrapper around libxml. Very basic, and demonstrated mostly that I knew less about either C++ or XML than I thought I did.
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.
Stuff like BLAST is enormously complicated even for a Graduate level mathematician. If you actually want to contribute to these you should have taken several very in depth courses in numerical analysis.
See some references on languages and automata, and then learns
metalanguages used in projects, develops and uses tools
that automate the process of acquiring information about the project.
You really have no clue how _anything_ works in the Open Source world, do you? Just contribute, don't be a pain in the butt about it. I can't believe this is on slashdot's mainpage.
Agreed. They got soooo close with when concepts almost made it into C++ 0x: http://www.devx.com/cplus/Article/42365
-Chris
1) Locate their trac where all the open issue tickets are listed.
2) Find an issue that looks like it might be (relatively) easy to solve.
3) Fix it.
4) Create a patch containing your fixes.
5) Submit it to the trac or to the devel list. If it does it what it says it does without introducing any more issues then it will most likely be accepted by the committers and brought into the project.
6) Repeat.
7) ....
8) Don't expect any profit.
Fixing issues like this will accomplish so many things for you. It will force you to become familiar with the source tree, which is about 99% of the work of becoming involved, in my experience, esp. with a large source tree of a large project. It will force you to figure out how to solve problems without much help. It will make you better at solving and thinking about problems. It will improve your knowledge of your language.
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 like, send an introduction to the mailing lists, but do not say anything else until you get an idea of the culture of the community, what netiquette guidelines do they follow, who is who, and the general tone that people use to address each other. Aslo try to figure out if there is certain sorts of questions the project doesn't like to answer. It's possible they deliberately obscure certain configurations, etc. in order to guarantee consulting income. If you think this wrong, and you want to be some kind of maverick coder vigilante, call them out and publish the tricks widely. If on the other hand you want to be a dev on the project, accept that this is the real world, and these devs are doing enormous good giving this volume of code away, free to use for anybody smart enough and interested enough to figure it out and at small once of consulting fees to those who aren't so inclined. Be kind to them, don't answer questions that seem to fit into this category, don't publish the fixes anywhere, think of it as a gift and keep it in your pocket for your own consulting career.
3. How long you lurk varies greatly from project to project, but it will always be longer for dev lists than for user lists. Once you have figured out the community a bit, start showing your worth by being helpful on those questions that come in to the user list that you can answer. A community is not going to accept code contributions from someone who can't figure out the part of their project that they expect users to be able to understand. So show you understand what they are doing.. At this point, it's probably best to be friendly and helpful, but if it is one of those lists where a lot of the popular (not to be confused with profusive) posters are boastful and have a bit of a bite, it's probably safe to start showing a bit of a swagger already.
You can also use this time to start climbing into the code, get to understand the architecture of the project, the existing coding culture (is code readably formatted, is code commented well, are they cowboys or nazis? When reading about fixes or changes in the dev list, look at the code, try to understand what they are talking about, how it all hangs together.
4. Once you have demonstrated that you understand their project well, are helpful and involved. You have mirrored their preferred modes of behaviour! You already seem like one of them just waiting to be adopted! You start contributing to the dev lists when you've understood the code sufficiently to make a contribution. It doesn't have to be a particularly brilliant contribution. It could be something a 5 year old could have spotted, and you just happen to be the first one to see the incoming mail. Don't write out the full function in perfect code with every excpetion caught, all nicely commented and logging in all the right places. Don't try get commit writes to the project, just formulate a solution, implement rought it in your local copy to make sure it works and describe it on the mailing list. If you've solved the problem correc
You're an applied mathematics student, so look for applied math projects. That way, you're newbie skills will be best put to use leveraging what you already know. There'll still be plenty you'll have to learn along the way, so put what you know to good use. Instead of projects like boost, sage, or octave, look for projects that have heavy applied math requirements like BRL-CAD, Blender, CGAL, and many many others.
Pick a community that interests you. Download the source code, compile and run the software, find their bug list, start fixing bugs. Introduce yourself when you have something useful to contribute (not just vaporware) or if you get stuck and need help.
Plenty of math-specific projects at http://www.dmoz.org/Science/Math/Software/ too.
Cheers!
Sean
This actually answers the original question! (How did that happen?)
The OP has something specific he'd like to do involving a particular piece of software. Naturally, the right thing to do is ask an entirely DIFFERENT group how to go about doing it.
You'll get a lot farther, and waste a lot fewer people's time, if you just ask the people you want to work with how to go about doing it.
This is rather like the old joke about the guy looking for his lost ring under the streetlamp even though he dropped it across the street because it's easier to look there. This isn't the right place to ask. This is the easy place to ask. Just like looking under the streetlamp, the results you got are probably not what you hoped.
A bit of mathematics is a good start. There are certainly lots of mathematically-oriented free software projects out there that could use an extra hand.
A bit of programming is a problem. If you're new to templates and inheritance then by trying to do any design work you risk doing as much harm as good. Trying to contribute to Boost without being a C++ expert may not be a good idea.
But a bit of eagerness to contribute is a very good thing. The trouble with open source in general is that people focus on the fun work first and the necessary support work second and then leave the grunt work for third or for never. You should have no trouble finding projects that don't have a big enough test suite (or finding projects that don't have any test suite, for that matter), and unit tests and regression tests are something you can create that will teach you libraries that you can use in your own research apps, expose you to others' good code, give you a chance to practice writing your own good code, but still not leave you responsible for creating tricky designs or performance-critical implementations yourself yet.
If you want to contribute to a mathematical open source C++ project which has helpful people on the mailing lists and on Slashdot, my biased suggestion is libMesh. There are lots of other good suggestions here, though; my unbiased advice would be to think ahead to your possible dissertation research topics and pick something that is likely to be useful for them. Doing intellectually stimulating things for fun is great (otherwise you wouldn't want to be a grad student), but it's also good to keep an eye out for when "fun" and "personally useful" can overlap.
just saw your post. Could you please go back to doing my C++ programming for me, and stop searching for displacement activities? I'm going to carry on reading Slashdot now and I don't expect to see you on it anymore for the rest of today. Come by my office later and let me know how far you've got since the last time we chatted.
Programming languages are never safe or unsafe.
It's the code which is.
It's a topic that comes up very often, and I've written an article answering it already. The short version, for people who don't want to click on the link:
The more programming languages that you learn from different paradigms, the better a programmer you will be in any language. The ones that I'd recommend:
Even if you never actually write code in any of these languages, learning them will help you think about the languages that you do use more clearly.
I am TheRaven on Soylent News
QuantLib is another opportunity- C++ open source library for quantitative finance. Fun and possibly rewarding!
Maybe you can add something meaningful to the scilab project? http://www.scilab.org/
If you're going for Boost, you're diving into a sea of angry template-metaprogramming. What's seriously needed in the world of mathy software is more really good computational geometry packages. What doesn't exist right now (to my knowledge) is an open source implementation of M. Held's algorithm for generating generalized voronoi diagrams from poly-line curves (arcs and lines). Open source manufacturing is picking up and the algorithms to actually take the level sets, generate toolpaths, and all this are just starting to bubble up. This would be an excellent domain for an applied mathematician to dive into. Just make sure to try and get someone to watch over your shoulder to make sure the API is nice.
Python is pretty much established as the leading open-source foundation for high-level scientific computing, competing head-on with tools like Matlab and IDL, either via the pure 'python stack' (Numpy, Scipy, Matplotlib, ipython - http://www.scipy.org/ and tools around them) or a project like Sage (http://sagemath.org).
I suggest you find a *topic* that interests you, that you're likely to work on for fun. If it's something that can benefit your research, even better. Then try to improve the specific package that covers that problem. Python is a much easier language to get into than C++, yet there are ways (with Cython and C/C++/Fortran) of getting performance when needed.
The range of topics where significant contributions can be made ranges from the very low-level, hard-core optimization work to high level user interface and visualization libraries. Special functions, ODE integrators, statistics, code generators, visualization, you name it, there's work to be done and welcoming communities in Python. If you'd like more specific pointers, drop an email to the Numpy discussion list as a starting point, indicating with a bit more precision what topics you find interesting intellectually. You'll find a welcoming reception and guidance on where to go from there, until you can find a project to focus your energy on.
"Safe" is not the same as "idiot-proof".
simple open src principle.....
but only mess with ur local branches
News for nerds. Resumes that matter.
You could get the STL Tutorial and Reference Guide which will get you started with templates Meyer's Exceptional STL and Exceptional C++ will help. Herb Sutter's Exceptional C++ Style will get you going. Then you'll be ready for C++ Template Metaprogramming by Abrahams and Gurtovnoy. As a mathematician you'd probably enjoy Elements of Programming by Stepanov and McJones which teaches you a LOT about template programming.
The issue is twofold.
1. You aren't decent at C++ if you don't get OOP.
2. You won't get OOP if you've only done C++.
Using only "some" OOP concepts in C++ is natural, since it doesn't force feed them down your throat. Thus you have to resort to kludges like templates for as simple things as basic containers.
...you sure are stupid.
No, I'm not flamebaiting or trolling...but seriously. Use your head, Pal.
1. Google is your friend
2. See #1
But for the sake of argument...let's call you Dave....So Dave, I have a really hard time believing you're a student at all, because a student that has made it all the way to gradschool as a programmer, would already have the deductive reasoning skills necessary to answer that question for himself.So Dave, I have to question how old you really are. Let's see some ID, Dave. The other possibility is that you matriculated to a really substandard school that wasn't able to properly light that spark in your that would allow you to have the grasp of concept in order to ask and answer these questions on your own.The third alternative is that you're really a Vo-Tech student who's about to "grad-jee-ate"...you've not done too many Google searches in order to find the answers to things, and I'll wager you've never kissed a girl, let alone know what one smells like. Would I be right, Dave?
So Dave, after careful consideration, I've broken your original question down, and made a few inferences about you and your current level of skills.
1. I'll wager that you really couldn't program your way out of a paper bag, let alone educated as a programmer.
2. I can tell by your question that you're not a grad student, but in fact probably still in High School and are asking the community from the perspective of a grad student, in which I have to commend you on your ambition, but Dave....seriously...don't lie to us, we'll see right thru you.
3. I think you might have enough grasp of what programming is, to think that you can participate in an open source project to learn enough to give you a leg up in your future studies so that you'll appear competent to your instructors, possibly even allowing you to participate in special projects, or even scholarships.
Seriously, Dave...if you are in fact a grad student, you were severely shorted by your educational institution, I'd ask for my money back.
There are 2 groups of people you can make fun of on the Internet without fear of attack. The illiterate, and the Amish.
See subject-line and realize that nobody pities you here: Is it anyone here's fault you f'd up highschool (sounds it from your description)? No. You did that to yourself. Is it anyone here's fault on anything else that has happened to you that didn't end up daisies and balloons?? No. In case you didn't realize it man, this is life and this is how it is sometimes. Shit happens, and whether you are at fault or not, you have to clean it up. It happens to the rest of us also. Get over it and realize we are not going to do your work for you, and that is that. You're going to learn that writing code is work, like anything else decent usually is. Nobody has "superior skills" in anything much of the time. It's usually how hard and long they are willing to sweat over whatever it is that's being made. I've watched you call others names here constantly in many of the exchanges you've been in the past day or two, and you expect others to help you? You came in here, self-taught (which is fine and in some ways, if done long enough (like 20 yrs.), it's better than schooling, in SOME ways (except you have to run into and figure out what schooling would have shown you answers to on MANY "jams" out there)). I know, been there for 16++ yrs. as a coder and network administrator combined in the sciences of computing. However, you came into a post with myself, calling me names (and I never did so to you once before you did to I), and then you absolutely f'd up every so-called "point" you made on HOSTS files vs. AdBlock here -> http://slashdot.org/comments.pl?sid=1815608&cid=33865512 and again here after that -> http://slashdot.org/comments.pl?sid=1815608&cid=33869788 and still you had the nerve to call me names and you also were caught lying about calling me names (but your own words quoted where you called me an idiot, totally unprovoked, & in your first post there no less) did you in. You expect help from others here, and you treat them with disrespect as you do?? Grow up and realize that perhaps the problems you're having in this life you expect us to "pity you" about are of your own making... doubtless they are, with your attitude towards others. You attack and act as if "you know something and only YOU are right" (you, the highschool drop out or near to it from the sounds of your 'speech' I replied to now)... well, hate to break this to you, but based on the 2 urls I put up above where I was forced to publicly ANNIHILATE you (anyone is free to read them and make their own decision on that, and I know they won't go YOUR way, lol)? You brought it on yourself, by first calling me an idiot (where you were NOT provoked by myself to do that), and I cut you to shreds. Did you honestly think a highschool dropout "self-taught" wannabe superman in computing like yourself was going to "walk in here and sweep the floor" with the likes of people like myself or others here (many of whom are like myself: Multiply degreed and many times published in the sciences of computing for decent works &/or wares etc./et al)?? Guess again. Bottom-line though - in summation, you had better learn to treat others with respect and to not think of yourself as "great" because based on your showing here this week and your lack of skills shown in them (such as the 2 urls above)? Buddy, you ain't much!
Wow. Pretty good response, eh? Here is my suggestion: 1) Consider focusing on C and Python as well as or instead of C++ 2) Go crazy at Sugarlabs as they are always looking for help. Let me offer the disclaimer that I know nothing about programming or computers or git or subversion. However, I am kind of kinky and like to watch people. As such, I have noticed that a number of people that seem inappropriately comfortable with mathematics also seem to tend or bend toward C and Python. As for Sugarlabs, it would seem that they are already comfortable with the idea that everything is everything and that would include math, so you might feel at home....or not. Whatever. Anyway, I couldn't help myself.
To the OP: please contact me, I am in a similar situation, have some ideas, would like to chat.
jacobmarbleatgmaildotcom
Try working with Sage http://www.sagemath.org/ Useful math tools that cover your interest area.
Your response has no bearing on the ridiculous claim that C++ is a safe language.
Look, grab any open source content and poke around to learn how to program from the code as examples, but its laughable that if you have to ask how to contribute then perhaps you should not contribute to it, especially if you don't understand actual C++ concepts like OOP and templating.