Hi everybody,
As I have some time until July for "doing nothing" a few hours a day ;) , I'd like to volunteer for doing something, ie. Inkscape things. I'm learning C++ currently (Stroustrup's book). I use Ubuntu Linux on i386 and did quite some programming using Python and PyGTK in the last few months.
What is needed / do you use aside from cvs, g++ and a text editor? (And what text editor, as I used Emacs, tried Vim, and use gedit currently. No flamewars please, I'm glad there are so few of them here :o) , just "I use editor foo (because ...)".)
Do you use Valgrind, any test suites, gdb / ddd ... ? Where do I start to learn how to use them?
Also, do you recommend some literature / books, as I did not (and most probably will not) study computer science? (I have a "Design Patterns", Gamma et al, here.) I have a small budget for good material.
I also wonder about more exotic things - do you print out code you wrote for review (my printer doesn't work atm), do sports, drink coffee (I'm not going to do that, just wondering), gather regularly on Jabber - anything that might be of interest in terms of a programmer's life and how to get / remain productive.
Thanks for any answers, Felix
On Thu, May 26, 2005 at 07:03:04PM +0200, Felix Rabe wrote:
Hi everybody,
As I have some time until July for "doing nothing" a few hours a day ;) , I'd like to volunteer for doing something, ie. Inkscape things. I'm learning C++ currently (Stroustrup's book). I use Ubuntu Linux on i386 and did quite some programming using Python and PyGTK in the last few months.
What is needed / do you use aside from cvs, g++ and a text editor? (And
For me, that's pretty much it, although I've found a few other tools handy:
`grep -sr` comes in quite handy to locate strings in the codebase.
gdb is worth learning if you plan on doing bug fixing or solving crashes.
For gtkmm, probably my most useful tool is the gtkmm.org website, since it has all the docs for the code. ;-)
what text editor, as I used Emacs, tried Vim, and use gedit currently. No flamewars please, I'm glad there are so few of them here :o) , just "I use editor foo (because ...)".)
I spent a summer back in an internship during college teaching myself emacs, so that's all I use.
Do you use Valgrind, any test suites, gdb / ddd ... ? Where do I start to learn how to use them?
I probably wouldn't worry about this too much at this point, were I you. Get comfortable coding and compiling first.
gdb is worth learning, but there's only a few commands that you really need to learn - run, bt, break, and step.
Again, though, as I said above, gdb is useful mainly for bug fixing; for regular coding activities I rarely use gdb.
If you get interested in doing performance optimization, there are some handy tools for that like gprof. See the 'Profiling' page I wrote in wiki for directions.
Also, do you recommend some literature / books, as I did not (and most probably will not) study computer science? (I have a "Design Patterns", Gamma et al, here.) I have a small budget for good material.
Make sure you have a Linux commandline reference guide (I like the O'Reilly one), and a C++ reference of some sort, that includes coverage topics like templates and the STL data structures. Plus I guess whatever other books you find interesting/useful. I grabbed a Gnome book a few months back since I was planning on working on the gtkmm stuff, although it turned out to not have much about gtkmm in it so I found the gtkmm.org website more directly useful, and just used the book for background info.
I am also self-trained in CS; my schooling was in regular engineering. The areas I had to spend time on, beyond just learning the details of the programming language, were data structures, code optimization, and OO architecture & design. IMHO, the best way to learn is through application - i.e., code, read, code, read, code.
Working on an open source project like this is probably the perfect way to learn this, since you can watch and interact directly with skilled coders, and question them about the reasons for why they do certain things, and get direct feedback on your own coding.
Design Patterns is useful if you are planning on doing architecture level work. For a mature codebase like Inkscape you'll probably be doing more refactoring work than architectural work, however DP can help you identify and understand Inkscape's internals a little better. However, from a more practical standpoint I would recommend the book 'Refactoring'. Also, I recommend studying mental's coding style closely, he's the best refactorer I've ever met, and just looking at the techniques he uses for gradually converting the code teaches you a lot.
I also wonder about more exotic things - do you print out code you wrote for review (my printer doesn't work atm), do sports, drink coffee (I'm not going to do that, just wondering), gather regularly on Jabber - anything that might be of interest in terms of a programmer's life and how to get / remain productive.
My printer isn't even hooked up to my Linux machine. ;-) (Pretty much I use it only for printing copies of my tax forms and the occasional map.)
Regarding productivity, whenever I start even a modest project, I'll start a todo list. Then I pick a goal and work towards it; during the process I notice all sorts of other things that are needed, but instead of shifting focus to those, I just add them to the end of the todo list. That way (in theory) I don't get distracted from the matter at hand, but don't forget whatever the item was.
Sometimes being on Jabber is a plus to productivity; for instance it can be handy if you're stuck on a problem or need background info about some code. In general, though, it tends to reduce productivity since it's so distracting. ;-) That said, you can learn to tune it out and catch up while you're waiting for compiles to finish. ;-)
Good practices include committing your code frequently (either to CVS or through patch submissions). I try to commit whenever I've completed a set of changes that work properly. Don't intentionally check in broken code, but also strive to avoid working too far out of sync with the main codebase.
Beyond that, just have fun and take time to take pride in your work. :-)
Bryce
As I have some time until July for "doing nothing" a few hours a day
;)
, I'd like to volunteer for doing something, ie. Inkscape things. I'm learning C++ currently (Stroustrup's book). I use Ubuntu Linux on
i386
and did quite some programming using Python and PyGTK in the last few months.
Given that I'm just beginning learning C & C++ as well, would anyone recommend this book or any others? Currently I've just used some online reference.
What is needed / do you use aside from cvs, g++ and a text editor?
(And
what text editor, as I used Emacs, tried Vim, and use gedit currently. No flamewars please, I'm glad there are so few of them here :o) , just "I use editor foo (because ...)".)
At home on Ubuntu, I also use Gedit... Emacs shortcuts are a little out there in my opinion and gedit is just more inline with the behavior of all of the dos/win32 text editors I've used. Oh, and at work on Win32 I use Notepad++ (and WinMerge to compare files) which I highly recommend both.
Do you use Valgrind, any test suites, gdb / ddd ... ? Where do I
start
to learn how to use them?
I know that we do use gdb, but other than running a simple backtrace, I'd love to know more as well.
I also wonder about more exotic things - do you print out code you
wrote
for review (my printer doesn't work atm), do sports, drink coffee (I'm not going to do that, just wondering), gather regularly on Jabber - anything that might be of interest in terms of a programmer's life and how to get / remain productive.
Having IBS, I used to print out extremely complex PHP & CSS that I used to write for review purposes... since I have more reading time than most. It was okay, but less productive than editing on the fly at the computer.
I'd say that most devs are on jabber daily and otherwise there a few of the devs that come to the channel at least once every few days.
Sorry I didn't have much to comment on, but I'm pretty much in the same boat, so I hope that people reply to the list and not directly to you. ;)
-Josh
On Thu, May 26, 2005 at 11:31:53AM -0700, Joshua A. Andler wrote:
Do you use Valgrind, any test suites, gdb / ddd ... ? Where do I
start
to learn how to use them?
I know that we do use gdb, but other than running a simple backtrace, I'd love to know more as well.
The info page for gdb was what I used to learn it. I detest using info though, so if you can find a good web version of the info page that might be easier for you, esp. if you're not comfortable in emacs. There is also some built-in help in gdb, although unless you're already familiar with debugger terminology you might find it a bit terse.
The next thing worth learning in gdb beyond backtraces is probably step tracing. This lets you step through the code one line at a time, print out variables as they get calculated, examine data structures, etc. Look into breakpoints, break, stack, next/nexti, step/stepi, continue, and watch. That should cover most of what you'll need to get going.
Bryce
OK I'm still no inkscape developer due to system problems here but I'm doing C++ since the first Zortech compiler came out and I want to recommend the books 'C++ FAQs' by Marshall Kline which has also an online version somewhere.
As the docs say, one of the best ways to learn is find YOUR OWN BUG by using inkscape, and fix it, doing nothing else, pure concentration on the one thing. Then everything else opens like a blossom.
Best wishes! ralf
Just a side note that inkscape crashes valgrind right now. I believe is is due to the garbage collection libraries. I've tried multiple inkscape and valgrind versions. YMMV.
Using an IDE like Kdevelop, Ajunta, or Eclipse may be helpful. I haven't tried Eclipse with Inkscape though. They can be really helpful with navigating the code, finding where functions are used, debugging, etc.
Cheers,
Quoting Robert Crosbie <swingincelt@...400...>:
Just a side note that inkscape crashes valgrind right now. I believe is is due to the garbage collection libraries. I've tried multiple inkscape and valgrind versions. YMMV.
Yes, it's a new issue with libgc 6.4. Earlier versions of libgc don't have that issue, but they had a bug that Inkscape triggered under normal usage.
If you want to valgrind inkscape, you can set the _INKSCAPE_GC environment variable to "disable". This will turn off garbage collection (at the expense of leaking any memory that would normally have been garbage collected).
-mental
Hi Felix, I'd say 2 of the best tools i found when i was first trying to get into the codebase were google and the jabber room. Google indexs reams of useful stuff on programming, solved many a wtf? type of moment for me, and the jabber room has proved invaluable to me as a place where when I'm still stuck someone with more knowledge will point me in the right direction again. Sometimes its just a quick point on how to do it,sometimes its a more detailed explanation, its pretty much always helpful though. On the productivity front,
a) find a task that the end result of will be useful to you.
- Working on something that will actually be a positive impact on your workflow in the software, or allow you to do something you otherwise cant is a great motivator. Bugfixing is also good as its always satisfying to take something that was reproducably broken and fix it.
b) tell us all what your doing
- I find that when I've discussed stuff with folks in jabber that them making suggestions on stuff, and asking me how its coming along helps me stay motivated. Bulias great at this, he tends to have great suggestions and encourages you to polish stuff with the same attention to detail he puts to his code.
c) Set a goal, make a list, and break it down
- If its anything more than a really basic task it always helps me to sit down and make a list of the aim, and whats required to achieve it. I tend to do this in my page on the wiki, breaking each of the requirements down into bitesize chunks that are achievable in a reasonable amount of coding time. (I generally aim for < a couple of evenings) As you make progress mark em DONE. if you hit difficulty, add whats giving you trouble to the list, I find trying to describe it in a concise manner often helps me to see what the problem actually is, and it feels good when you've fixed it to be able to stamp done on it. Having a list of whats left lets you see theres an end in sight too which is always nice. :)
d) use the software
- this is good from an eating dogfood point of view, but its also just plain satisfying from a "I made this" perspective. After about a year of coding i found I hadnt actually used IS for anything much in a while, I didnt touch the code for about a week but spent the time playing with it instead and actually generating some art. It was quite nice to just play with it and remember why I was contributing in the first place.
anyhow, essay over, best get back to coding before bulia arrives in the jabber room :)
hope that helps
Sim
__________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
Quoting Felix Rabe <xitnalta@...128...>:
What is needed / do you use aside from cvs, g++ and a text editor?
Those are the essentials. Mostly I don't go beyond them, unless you count the normal unix tools -- I get a lot of mileage out of find(1) and xargs(1) actually.
(And what text editor.... "I use editor foo (because ...)".)
vim, or not infrequently classic vi -- it's what I'm used to.
It does have a certain power: when I'm not entering new code, I spend most of my time doing regexp-based search-and-replace on regexp-specified line ranges and things.
Do you use Valgrind, any test suites, gdb / ddd ... ? Where do I start to learn how to use them?
I use valgrind on occasion; it's a valuable tool. You'll need to disable the garbage collector for it to work on Inkscape at present though.
I use gdb more frequently, mostly just to get a backtrace to find the location of a crash.
I've tried ddd, but never really got used to using it.
Also, do you recommend some literature / books, as I did not (and most probably will not) study computer science? (I have a "Design Patterns", Gamma et al, here.) I have a small budget for good material.
I'm a relentless autodidact, but I tend to use books for reference rather than learning. Mostly I learn by reading development mailing lists (or summaries thereof) and watching other people at work (and heavily googling CS concepts whenever they are mentioned). How well that approach works is going to vary from person to person.
I also wonder about more exotic things - do you print out code you wrote for review (my printer doesn't work atm),
I didn't used to do that, but I tried it recently for a project at work and it is rather helpful when thinking things through. It seems to require at least tabloid-size (roughly A3) sheets to work well.
The big advantage is being able to tape up all the code in front of you so you can see what's going on at a glance, and being able to scribble notes on there can free your mind for other purposes.
Once I get a printer, I may try it for Inkscape, but I'd probably reserve it for times when I'm really stuck. It tends to use a lot of paper.
do sports
Tae Kwon Do. Rather sporadically, I'm afraid. But when I manage to keep up with it, it is a major boost for my productivity and general well-being. Highly recommended if you can find a good master.
drink coffee (I'm not going to do that, just wondering)
Occasionally if I'm forced to go short on sleep. I wouldn't recommend it; it tends to screw up your normal ability to sleep and wake normally.
gather regularly on Jabber
It's probably the best way to stay in touch, get non-trivial questions answered quickly (if the right people are there), and negotiate things.
BUT if you hang out on any IM network while working, you will have to commit to ignore it for periods of time. Coding works best in minimum 45-minute chunks, and it can take at least 20 minutes to get completely re-oriented after an interruption.
I find this tends to be true of art as well.
-mental
On May 26, 2005, at 10:03 AM, Felix Rabe wrote:
What is needed / do you use aside from cvs, g++ and a text editor? (And what text editor, as I used Emacs, tried Vim, and use gedit currently. No flamewars please, I'm glad there are so few of them here :o) , just "I use editor foo (because ...)".)
TkCVS is a *very* useful tool.
http://www.twobarleycorns.net/tkcvs.html
The log browser is helpful for many things, including seeing who did what when.
http://www.twobarleycorns.net/tkcvs/tkcvs-log.gif
It also allows you to diff any two versions
gedit is ok, but like with base vi you probably can gain a lot more from some other tools. Emacs and Eclipse are two main ones I'd recommend. Emacs takes a little to get used to, but as you settle it, it's utility become apparent. For example, to debug with gdb, just launch it from inside emacs. Then you can hop between the gdb prompt and your source, and set breakpoints in the source with a simple keystroke, etc. Probably the main difficulty is that it's hard to tell someone about the key bindings, since they're meant to be used, not talked about. (I can do all sorts of stuff quickly, but have to do it and watch my fingers to be able to say what keys I'm hitting)...
Eclipse is similar to Emacs in that its a platform for development tools. Just that Eclipse does it with Java while Emacs does it with Lisp. It's a bit more heavyweight, though.
I usually end up with a simple emacs session (only split to two windows) and alt-tab to a browser. Google is your friend. :-)
Oh, another handy thing in emacs is that when you use it to compile, it colors the compiler output. And if you hit enter while on any error or warning, it will pop up the source code to that line in the other window/pane. And there's a simple key combo to go to the next warning/error. Quite handy.
On May 26, 2005, at 10:03 AM, Felix Rabe wrote:
Also, do you recommend some literature / books, as I did not (and most probably will not) study computer science? (I have a "Design Patterns", Gamma et al, here.) I have a small budget for good material.
Bruce Eckel's "Thinking in C++" can be very useful, they don't quite dominate the field like "Thinking in Java" does for Java, but it's a huge help for many people.
http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html
Personally I feel that Stroustrup's is more of a technical reference, whereas TiC++ helps get one in the mindset to properly use the language.
Oh, and aside from being a set of top-notch books and well worth the money, he also has them there for free download. I personally used the electronic versions, but I know a lot of people who started with them (TiC++ and TiJ) and then went out and bought the "dead-tree" editions to switch over to.
Free is good. High-quality free is great. :-)
Hi Felix,
I would recommend the books from Scott Meyers: "Effektiv C++ programmieren" from Addison-wesley. They cover some usual C++ pitfalls and how to improve your C++ style.
HTH,
Adib.
Felix Rabe schrieb:
Hi everybody,
As I have some time until July for "doing nothing" a few hours a day ;) , I'd like to volunteer for doing something, ie. Inkscape things. I'm learning C++ currently (Stroustrup's book). I use Ubuntu Linux on i386 and did quite some programming using Python and PyGTK in the last few months.
What is needed / do you use aside from cvs, g++ and a text editor? (And what text editor, as I used Emacs, tried Vim, and use gedit currently. No flamewars please, I'm glad there are so few of them here :o) , just "I use editor foo (because ...)".)
Do you use Valgrind, any test suites, gdb / ddd ... ? Where do I start to learn how to use them?
Also, do you recommend some literature / books, as I did not (and most probably will not) study computer science? (I have a "Design Patterns", Gamma et al, here.) I have a small budget for good material.
I also wonder about more exotic things - do you print out code you wrote for review (my printer doesn't work atm), do sports, drink coffee (I'm not going to do that, just wondering), gather regularly on Jabber - anything that might be of interest in terms of a programmer's life and how to get / remain productive.
Thanks for any answers, Felix
This SF.Net email is sponsored by Yahoo. Introducing Yahoo! Search Developer Network - Create apps using Yahoo! Search APIs Find out how you can build Yahoo! directly into your own Applications - visit http://developer.yahoo.net/?fr=offad-ysdn-ostg-q22005 _______________________________________________ Inkscape-devel mailing list Inkscape-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/inkscape-devel
Hi,
Thanks a lot for responding to everyone. Especially Bryce's use of a TODO list to keep the focus is also useful for when I do non-computer work, since I'm a bit messy.
Well, now on to the next step :) - Felix
participants (9)
-
unknown@example.com
-
Adib Taraben
-
Bryce Harrington
-
Felix Rabe
-
John Cliff
-
Jon A. Cruz
-
Joshua A. Andler
-
Ralf Stephan
-
Robert Crosbie