# Starting Point for OR-Related Computer Projects

 4 You can't contribute code to a software project, if you don't know the programming language of the project. Programming language is a general divisor. Very few programmers are successful polygot programmers. You won't see me (= Java guy) contributing to C or C++ projects: not because I don't want too, but because I don't have the skill (I only know the syntax decently, not the tools or the API's). It would take me days to do a useful contribution. However, I regularly contribute to other open source project in Java, build in Maven and on GitHub, mostly to scratch my own itch. In some cases I 've been able to get the code, build it, fix it, test my fix and contribute my changes back in under an hour. Why? Because I am used to Java, Github, Maven and IntelliJ and those projects are in Github, written in Java and build by Maven. Had I been used to C++, Github, Make and Emacs, I 'd be contributing to other projects. Starting point for Drools Planner specifically: For the Drools platform we got a starting point document, that goes through setting up all the tools. It's long and very detailed, but you can skip big portions of it. Note that in the example commands, replace the word guvnor (another project in the drools platform) by drools-planner. Basically that document helps you install and use these tools on the project: Git and GitHub: to get the source code, commit changes and send those changes back to the project Maven: to build the project binaries from source code (and download any dependencies). This is a command-line build tool, but you don't need to run this often, as the Java editor does it for you. Java editor (IntelliJ or Eclipse): to write, run and incrementally build the code. After following that document, look for the class DroolsPlannerExamplesApp in drools-planner-examples and run it. The examples are often inspirational to find things to improve. If, instead, you're looking for any easy task, check this list. answered 20 Jul '12, 01:22 Geoffrey De ... ♦ 3.6k●3●27●64 accept rate: 6% 2 Agreed. Part of the programming experience's always to develop a healthy awareness that there is no "universal community" - communities spring up around particular languages/operating-systems/developmental environments that they've grown to love. And a first (generally long) step in contribution's always to get to know the community (communities) you're trying to help (bridge) (20 Jul '12, 01:53) yeesian
 2 I might be completely off, but what is often understated's to scratch your own itch: 'valuable tools' tend come from people who work on problems that they actively encounter, rather than problems they imagine other people will face. One problem I do face: moving from a theoretical algorithm on paper to 'working code' I am not embarrassed to make public. There is already a huge amount of choices out there, from the modelling/programming language (C/C++/Python/Java/Matlab/Octave/etc) you can use, to the solvers/libraries that are available (Google OR-Tools, COIN-OR, OpenOpt, CVXOPT, CPLEX, matlab/numpy/other libraries, etc). Not to forget the need to document your code (see: What are good ways to document scientific software?) have version-control (svn/mercurial/git) record the environment under which your code runs (eg. sumatra) (optional) weave your code into your report (eg. sweave, knitr, Pweave) work with LaTeX manage the flow of data when to keep them in memory read them from the many different file formats(.lp/mps/xml/json/csv) by scraping from the web/reading from a database pass them around in memory, (i) allocating them to the heap/stack, (ii) using the various data structures (matrices/arrays/lists/sets/dictionaries/etc) observe good software engineering practices (whatever that means) finding/generating (valid) test-data that holds up to scrutiny All of these on top of keeping abreast with 'current research', rushing to meet deadlines, while managing teaching commitments/school work?. I think being observant of the software and workflow that people actually do use, and actually trying them out (and observing how many hours it took you; how you can make it easier for someone new) will generally give you a good nose to sniff out what'll be nice to work on next. (It'll be nice if you can share your journey/problems with many of us here, of course - the problems you do encounter will likely be faced by someone now/in-the-future. That's what's nice about a Q&A format website :P) I mention all these, rather than the sleek/polished/state-of-the-art commercial solvers/studios available from IBM, because they're equally relevant 'tools' that we seldom acknowledge (perhaps because we don't use them). And very few people in the OR-community are actually know what to do if their matlab code doesn't run fast enough for them, and wants to probe deeper into programming language level APIs, but is intimidated by the need to build an open-source library/solver on their own, perform some/all of the tasks above, and often only has a few examples from cplex/cvx(opt) in the language that they use to go on by. answered 20 Jul '12, 01:29 yeesian 846●2●10 accept rate: 3% Agreed too :) Especially on the statement that you can't imagine problems. You need to experience them. The best way to experience them is write production code or at least prototype examples on real examples with real constraints. (20 Jul '12, 03:28) Geoffrey De ... ♦ 1 I completely agree about creating tools to solve my problems (first). I actually did it several times. However, I have seen that there are lots of projects going on and I feel I am missing something important. Because rather than waiting problems arise, I can help other people's problems, as common in Q&A websites. The thing here is, although dealing with various problems is beneficial in terms of broadening the knowledge, I would be happy to perform jobs to increase my depth. Thank you for your detailed answer. (20 Jul '12, 05:23) Sertalp Bilal 1 Just to add to the list of available and open libraries, GLPK (GNU Linear Programming Kit), which also includes MIP. (24 Jul '12, 04:52) Carleton @Carleton, thanks! Perhaps we can start threads on (i) the libraries (open/closed) we do use, and (ii) the order in which we picked them up. Because I did try to use some of the libraries from COIN-OR, and google's or-tools - but I am very new (year 2 undergrad), and require extensive documentation/tutorials/examples to guide me along - I settled for cplex (the free preview) through its python API, because they have alot of help available through examples/user manuals available. And I think people usually pick up open libraries only after they've been weaned on their proprietary counterparts (24 Jul '12, 05:32) yeesian Thanks @yeesian I agree a list would be good. I agree with your point. When first starting the APIs can seem cryptic, but in time you know what to expect. your post reminded me of another good open resource, http://commons.apache.org/math/userguide/optimization.html. (25 Jul '12, 19:33) Carleton
 1 Here's a good starting point: Interactive tutorial to try Git and GitHub in 15 minutes. No matter the programming language or even what software tool you're going to work on, you'll find that every community project either: is on git (or mercurial) is going to move to git (or mercurial) doesn't know it yet that it will want to move to git (or mercurial) some day ;-) SVN, CVS, VSS, ... are just not community friendly: they lack a good way for outsiders to provide code contributions. Since mercurial is very similar to git, learning either is a big step forward. answered 20 Jul '12, 01:34 Geoffrey De ... ♦ 3.6k●3●27●64 accept rate: 6%
 0 binary options Naturally one seeks always to find the quickest and easiest solutions to the problems of misinformation, with the possibilities that the web gives us all kinds of courses online, found a new variant to enable us both in the handling of new computer programs and its derivatives answered 25 Jul '12, 15:46 ronnie 0●1 accept rate: 0%
 toggle preview community wiki

By Email:

Markdown Basics

• *italic* or _italic_
• **bold** or __bold__
• image?![alt text](/path/img.jpg "Title")
• numbered list: 1. Foo 2. Bar
• to add a line break simply add two spaces to where you would like the new line to be.
• basic HTML tags are also supported

Tags: