Where to Start With Contributing to Ubuntu (and other distros) [closed] - c++

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
The learning days of my development started with C++, but the days since then have been many. I would like to look into contributing to Ubuntu (or Chromium), but I'm not sure where to start. I am extremely rusty when it comes to C++ and especially in such a large project. Is there a good place for me to start?
I'm mainly looking for resources on where to start in the plethora of code (since there's SO much code) and hopefully a helpful blog/tutorial for picking back up on C++ (preferably directed towards large open-source projects like Ubuntu)

Ubuntu is a distribution, that means it's a bunch of programs packed together in a nice way. You can contribute in many ways to distributions: maintaining package repositories, checking for bugs, artwork... If you're interested in the programming side, I'm sure you'll enjoy fixing bugs for the many packages that Ubuntu is made of (which are open source projects on their own.) Think of it as a layered approach, and you've got to settle in a layer to help.
Dive into their bugtrackers, find a bug, fix it and submit the patch.

There are a couple of c++ projects that come to mind: LibreOffice and KDE.
LibreOffice has already made a list of easy hacks so you should start there http://wiki.documentfoundation.org/Easy_Hacks
KDE has also a few tasks marked as Junior Jobs:
http://techbase.kde.org/Contribute/Junior_Jobs
As a rule of thumb the place to start contributing to a project is the bug tracker. Also start following the project from their public VCS compile->run->report bug->provide patch.

I'm not a C++ coder, so I can't help there beyond Googling for tutorials, but if you want to figure out where to start in any open source project, the easiest way is to check out their bug tracker, find a bug, and try to fix it. If you try to dive into something like Ubuntu without direction, you're likely to get lost and overwhelmed.
You can find Ubuntu's bug tracker here: https://launchpad.net/ubuntu

I bealive you would be more interested on Chromium project for a setout. The browser code can be manipulated on Linux, Windows and Mac with the more appropriate tools. They have a IRC channel too, there you can clarify your doubts.
Generally, when you get on great code, it is allways good to resort to the one with more means to do things quickly and easier. Google has a lot of tools and informations that fit to start-up programmers.
There is a list of help-wanted tasks on http://code.google.com/p/chromium/issues/list?q=label:helpwanted&can=2.
Claudio M. Souza Junior
Developer

If you're looking to start contributing to the Linux kernel itself(written in C, not C++) the lecture Write and Submit your first Linux kernel Patch given at the FOSDEM conference by Grek Groah Hartman, core member of the Linux Kernel team himself, is a great start and motivating factor. As a bonus point, the advices and contributing points revealed in the lecture are applicable to any other open source project in my opinion.
There's nothing standing in your way to contributing to Open Source. Start right now with as low as documentation, minor bug fixing or even adding/improving or fixing grammar issues with comments to existing code. All of these are important and they also help develop your knowledge about a given project or part of a project, which will then enable you to dive deeper in more complex aspects of your chosen project.

Related

How to move on from Turbo C++? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 5 years ago.
Improve this question
In my school, they only teach on Tubro C++. I can program well in the DosBox but I want to develop my own applications, algorithms, etc. The problem is that I don't know where to start. The spectrum is so broad, I don't know what gcc or g++ are other than the fact that they are compilers.
I don't know how to use VS Code (mac) to compile & run. I don't know anything about the modern C++.
Where should I start?
I wanna do Machine Learning related stuff and GUI.
I actually have a browser based application in mind where I'd be needing Artificial Intelligence, cool GUI, etc.
That is a very good question. I think these steps would be the easiest for you -
Install Linux on your laptop or use macOS. I say this because you can develop in windows but it would be much easier on Linux or a mac because of the sheer size of the community.
Get familiar with the command line on Linux/macOS. You should try on Ubuntu which is one of the most popular versions of Linux. You must be able to use commands like - ls, cd, pwd. You can find lots of content for this easily.
Get familiar with the vim text editor.
After writing your first HelloWorld program on C++ using vim, you should learn how to use the g++ command to compile and run your code.
After you are familiar with all of the above, to make your work easier you can download and use text editors like Atom or Sublime.
These were my initial steps in the world of programming. I would also recommend you create an account on Github and browse other open source community projects, also learn git. Lastly explore also other domains and languages like web development, machine learning, python etc. Otherwise, if you are into competitive coding, C++ is indeed an excellent choice. For this, you can visit platforms like CodeChef, Hackerrank, SPOJ etc.
For tutorials, you can find many sites like Udacity, Coursera, edX. MIT OCW is a popular resource on YouTube for formal courses like Algorithms and Data Structures.
PS. Do not waste your time learning everything about everything. Instead, you should keep on experimenting and look up on the web whenever some error or a bug pops up.
Since TurboC++ was just a compiler, maybe you'd be happiest just moving into a full blown IDE(Integrated Development Environment)!
For Mac, I might recommend Eclipse. It's a very popular IDE and can be used for C++.
However, you'll need a compiler. GCC is a good compiler for Mac, but as far as I know you need Apple's "XCode" IDE to install GCC in the first place. So if you were to go through all of that effort you may just want to stick with XCode.
You'd need an Apple Developer login, but here's a tutorial on getting GCC up and running.
https://www.mkyong.com/mac/how-to-install-gcc-compiler-on-mac-os-x/
Of course, nothing is keeping you from sleeping around with some new languages, but if you want to stick to C++ I'd say get your compiler, find an IDE you like and get to learning.
First of all you need to know How compiler works and the program structure.
I recomend you an excelent course called "Programming Paradigms", from Stanford University. You can find it in ITunes University and it is free.

IDE for realtime collaboration that works with C/C++, C#, .Net [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
I'm looking for an IDE that I can collaborate with other people. I'd like to have real-time editing and color coordination (meaning if Bob is online and changes some code it will high lite his changes, similar to sharing a Document on Google).
I've tried searching via Google but I can't find anything that actually suits my needs. I'm currently a college student and have projects to do with other class mates, but using Pastebin is a bit cumbersome as I have to have an IDE open + a web browser, then copy paste, share etc.
Is there any IDE out there that will compile for C/C++, C#, .Net etc with real-time collaboration? If I have to set up a server on my desktop to make it work I have no problems doing so
I believe that in practical terms, using a distributed versioning system (like git, perhaps thru gitorious or github) is a wiser idea, at least for usual programming languages like C (and you need a social convention, at least like Bob is working on file foo.c or on function foofoo while Alice focuses on bar.c or on function barbar). You may want to communicate in real time using IRC, chat, pastebin, etc .... in addition of git. You probably won't edit the same line (or perhaps even the same function) two distant people at a time.
The semantics of programming language like C is not fit to the idea of a simultanous edition of a single source at the very same time. (Defining languages friendly to this co-development idea is still a research topic).
BTW, you don't need an IDE to code in C or C++ (especially on Linux, which gives you a lot of other tools emacs or perhaps vim or gedit or geany, grep, make, ctags, git, awk, ... to use together). A big lot of very large C or C++ free software programs (GCC, the Linux kernel, Gnome/GTK, Qt/KDE, LibreOffice ....) are coded by many qualified people without IDEs. This is IMHO quite significant.
I suggest to try:
http://moonedit.com/ - simple real-time editor
http://www.saros-project.org/DemoVideo - real-time editor for Eclipse (so you could use C++ there)
at http://en.wikipedia.org/wiki/Collaborative_real-time_editor there are plenty suggestions.
This is an old thread but in case others are still interested in this topic/capability there are a bunch of web based IDEs nowadays. If you Google "web ide", you'll get a decent list of collaborative web IDEs. For completeness, I'll list one that I've used and liked:
Cloud9 IDE
Aside from small homework assignments, you are better off using a version control system like GIT or Hg. Though they are overkill for most small homework assignments; especially if it's an intro class and most students are already having a hard enough time learning the programming material by itself.
One other note is that a web based IDE is not necessarily mutually exclusive to using VCS. You can use GIT inside of Cloud9 IDE.
Save yourself the trouble and use version control of some sort. Be it git, hg, svn, or what have you. Pick your poison, but this is a large part of what version control exists for. For communication? AIM, IRC, Skype, it doesn't really matter.
In this case, you can either have good version control, a good IDE, and a good Chat program or you can have one program that syncs your code, allows you to chat, and allows you to edit code, but does all of the above poorly.
Check out Squad:
http://squadedit.com/
Hosted service so setup is easy, and it supports C++ syntax highlighting.
Have a look at EFC, http://www.eclipse.org/ecf/.
More specifically Cola, http://vimeo.com/1195398.

Can i have input for creating a Build Tool? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 1 year ago.
Improve this question
I'm a student and i want make a build tool as a side project for myself because none of the current build tools seem to attract me. There's ant, but i really dislike looking at XML (i don't know why, but i really don't see the appeal of tags; it puts me off visually and cannot be made neat in my eyes). There's maven, but i really don't want to be working on a project just to have it fail all of a sudden (this is based on the research I've done where people say that there are times that maven fails to build all of a sudden. This could just be total BS but i'd rather not find out the hard way), plus there's some XML involved. I really liked make, but it isn't portable, and even though the chances of me using a non-Windows PC are next to nil, I am unfortunately, a computer science student who has been properly trained to always assume the worst case.
Currently, i am looking into Gradle. I'm still trying to figure it out (i am a really slow learner) but i like the syntax. It might also be beneficial to note that i am so shallow that i don't really care about the back end stuff or any of the advanced features cause i don't really understand dependency management and stuff just quite yet. All i care about is that the configuration syntax or make file looks clean, that it works without requiring internet access, absolute paths, or anything of the sort, and that it works consistently and doesn't take too long. I believe that the syntax is important because, like all code, if it looks ugly, you won't want to read it.
I want to make a build tool that is simple, functional, and portable (i'm gonna be running it off my External HDD with Java in it). I'd really appreciate any suggestions this community has to offer, such as "It really is better to just stick with ant or maven cause they work already" or "be sure to avoid make's dependency issue". This will just be a side project so i can work on my Java and maybe learn something new so even if i fail, i still might learn something new so no need to comment on that.
If you haven't already tried it, try Automated Build Studio. We have used if for a couple of years now and it works fine for us.
Another existing tool you might choose to ignore is SCons. It's written in Python and has some very nice features including, possibly relevant to you, easy extensibility.
And yes, I think you are going to crash and burn. Far better to learn one of the existing tools properly than to reinvent this particular wheel. Use your creative urges and time to write something truly new.
Furthermore, and since you are a student allow me to stand on my soap-box: one of the lessons that new entrants to the IT profession have to learn is to use the tools you are given, not to expect to be allowed the time and money to develop a new one. Don't expect to be able to rock up to work on day one and try to make a case for writing 'MyMake' because GNU Make (or whatever) doesn't float your boat.
Here's just an idea:
ant is really not such a bad tool. Maybe you could consider building a front end for it that translates a DSL (Domain Specific Language) of your own design into ant's XML, and hide the XML from your tool's users?
You may also want to take a look at Rake. Someone recently ranted in his blog about how terrible Maven is (and the debate goes on) and he much, much prefers Rake.
I started one, some 7 years ago. I am still using it. No one else uses it. http://gna.org/projects/maker/
I started on some same ground than you: multi platform (was Linux, DEC Alpha, and Windows at the time) with a new shiny lanquage: Python. I was getting ideas from Miller's Recursive Make Considered Harmful in the sense that I had a source file for each executable (same for shared library, or static library) that was listing the C/C++ source files, and dependencies on other libraries. The main feature was to generate on the fly a makefile that is fed into gmake (that does a perfect job, provided it has a perfect makefile) to build all the binaries in one call, managing all the dependencies (with gcc -MD options).
Over time. it evolved mostly into a tool that can use Visual Studio C++ project and solution files to compile on Linux. And I am struggling to keep it up-to-date with new versions of Visual, and new values of project parameters and project properties that my coworkers use.
I wouldn't recommend starting a new tool.
Why would using Maven mean that your build fails "all of a sudden"?
I would advocate always using continuous integration (e.g. cruise control for ant or Hudson for maven) regardless of the build tool you use. This should eliminate a build failing "all of a sudden"
There's maven, but i really don't want to be working on a project just to have it fail all of a sudden.
What does that mean?
Anyway, if you're into Groovy, I recommend Gant.
Cobbling together your own build tool doesn't sound like a great use of your time, especially when established tools such as ant and maven exist and have such vast user bases that are finding (and fixing) bugs with those tools.
I don't understand your comment about maven causing build failure all of a sudden.
XML will haunt you everywhere you go. Invest in an excellent XML visualizer / editor, and go to town with Ant anyhow!

Recommendations for an open-source project to help an experienced developer practice C++ [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a book, tool, software library, tutorial or other off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 8 years ago.
Improve this question
I'm looking for recommendations for open-source projects written in C++ that will help me "get my chops back". A little background:
I've been working heavily in Java for the last three years, doing a lot of back-end development and system design, but with a fair amount of work in the presentation layer stuff, too.
The last C++ projects I worked on were a Visual C++ 6 project (designed to interact with Visual Basic) for mobile devices and several projects using the GNU toolchain circa gcc versions 2.x to 3.2
I'm looking to get back up to speed on the language and learn some of the popular frameworks, specifically the basics of boost (although boost seems fairly sprawling to me, similar to the kitchen-sink feel of Spring in the java space) and test driven development in C++.
What I'm looking for:
Specific recommendations for small to mid-size open source projects to poke through and perhaps contribute to as I level my C++ skills back up. The problem domain isn't important, except that I would like to work on something in a new area to broaden my experience.
Edit:
A few people have commented that it's difficult to provide a recommendation without some indication of the problem domain I'd like to work in. So, I've decided that I'm most interested in graphics applications or games, two areas which I haven't worked in before.
If you like visual stuff, openFrameworks is a C++ Framework for doing Processing-type applications. http://www.openframeworks.cc/ I'm not sure how viable it still is, but it looked pretty cool.
It's hard to suggest something like this, you really don't have any itches you want to scratch??
I would personally be working on Unladen Swallow if I wasn't absurdly busy starting my own personal venture. Dynamic language optimisation looks pretty cool to me.
You could also look at Wt
Why not Boost itself? It's a very active project, it's right at the core of what C++ is about, and it could need some help.
You mentioned test driven development. The Boost Unit Test Framework, for example, is powerful, but IMHO suffers from extremly bad documentation. That'd be a place to start, would teach you everything there is to know about that particular part of Boost, and I am sure you could find your way into one of the Boost modules from there.
I think you're going to have to be more specific. As a quick check, I did an apt-cache showpkg libstdc++6 on my Debian squeeze system, to find all the packages that depend on the C++ library — and found 4,537 of them. Obvious examples include:
most of KDE
Firefox, Thunderbird, etc.
apt-get itself
It'd really help if you specified what field you're interested in.
You can find many projects on GitHub. If you find a nice project, you can fork it (it's like creating a local copy you can work on) and start coding. Once you have done something nice, you can make a "Pull request" to ask the guy you made your fork from to merge your work.
I like being able to commit without having to ask for an access and be able to make smalls contributions to many projects without having to contact anybody, simply with a couple of clicks.
You can also check Gitorious and Bitbucket, both site work a bit like Github.

Simple GUI IDE? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 9 years ago.
Improve this question
I'm looking for a GUI Linux IDE.
Specs:
simple and fool proof. normal look & feel
full as-you-type indentation in most languages
a compile+run button, a debugger, auto-refactoring for C++
basic unintrusive support for common buildsystems - straight make, cmake, qmake, autotools
smooth workflow. proper keyboard support, no jarring transitions between debugging/coding modes, etc
What i've tried:
KDevelop is bloated and buggy, makes it difficult to even transfer projects between machines etc
jEdit is ugly, feature poor and it's difficult to find things. but it does indentation well.
Anjuta, Geany and a bunch of other micro-IDEs for GNOME fail at indentation and misc features
Code::Blocks only does C++, it's pretty complex and it can be hard to get things working with libs etc
vi and e-macs are nice but I'm not taking the time to learn them right now, and I want something coworkers can use as well
NetBeans has a terrible Swing look, weird code editor. also it's pretty slow and seems complicated. great features though.
Eclipse. pretty huge and complex, I don't like the UI. I feel like I can't do anything without a tutorial
Presently I use KDevelop for work and gedit+terminal for hobby dev, but wanted to see if I'm missing out.
You could try QtCreator. It's not quite complete (as of this this posting at least), but it might be closer to what you want than some of the others you've tried. It's very keyboard friendly.
I tried PIDA after this answer, and I think it's pretty good. You'd still have to learn vi/emacs to use it, though.
I'd also suggest you take a look at MonoDevelop. It's basically M$ Visual Studio for Linux, and it has all the features you listed.
maybe just try kate. it's a great editor with plenty of plugins, ability to use built in terminal, code folding, and it fits nice in kde desktop. Plus it's very fast.