D&C GLug - Home Page

[ Date Index ] [ Thread Index ] [ <= Previous by date / thread ] [ Next by date / thread => ]

Re: [LUG] Development (this might be long!)

 

On Monday 21 March 2005 12:40 pm, Martin White wrote:
Yep, i'd love to, but read on...

With your members area password, you might like to put this in the Members 
Register - you can read other people's info as well.

So, what do i do? Mainly image conversion. Taking raw input data streams,

imagemagick type stuff?

deblocking stuff, making sense of it and then more times than not
converting some format or other to PDF.

I've just finished an upgrade for the GnuCash documentation that uses DocBook 
XSL so that it can be used with DocBook SGML to render PDF's. The XSL tool 
required Java and I never use it. I don't do graphics, I prefer text.

Now then, therein lies the problem. I'd love to get on board and contribute
some work to linux. Always have wanted to.

General tips here:
http://code.neil.williamsleesmill.me.uk/startqof.html
http://www.dcglug.org.uk/wiki/?id=DevelIntro
(feel free to add to that Wiki one).

Get yourself a SourceForge Id: http://sourceforge.net/
(You'll find me at: https://sourceforge.net/users/codehelpgpg )
It helps to advertise your skills, helps other projects find you and makes it 
easier for them to take you onto the team.

Search SourceForge and Freshmeat (http://freshmeat.net/) for the kinds of 
programs that you already use and which are within your areas of interest.

A few years back i was at a 
linux show and saw a very good book on linux coding and bought it. Trouble
is, i didn't have the patience to sit there and wade through all the
chapters on shell programming and regular expressions before i got to what
i thought i wanted to know.

So don't lump in with an entire new project, join an existing project and help 
out with what you already know. You'll pick up other bits as you go. If you 
try to do everything yourself, you'll need to learn a whole host of things 
that you may not want to know. Let others deal with those, concentrate on 
what you do well by finding a niche within a larger project.

However, shell programming and regular expressions are very very common and 
you should at least know the basics.
http://www.dcglug.org.uk/wiki/?id=ShellUsage

As any programmer will know, just because you can program, doesn't mean you
can (if you know what i mean). I don't know anything about how KDE works
for instance.

Neither do I - I do all middleware stuff, libraries and console utilities. I 
try not to do much GUI stuff although I've had to do a little bit with Gtk 
for GnuCash.
http://code.neil.williamsleesmill.me.uk/

Likewise enlightenment (writing this from e17 just for 
giggles right now). Sadly i also have very little experience of coding
GUI's.

No problem - pick your area and stay within your skill base.

Developing free software is all about merit and respect. You get respect when 
your code merits it. :-)

Seriously, nobody wants you to write code that is outside your particular area 
- that just leads to bad code. You know what you are good at coding, you know 
what you would be bad at coding. You know what kinds of program and what 
kinds of functionality interest you - that is essential because there is 
no-one else to motivate you to continue the work! If you aren't interested in 
the part of the program / API that you've taken on, you'll produce bad code.

The problem comes from the fact that i find all the developers on big
existing projects know exactly where they're going and what they're doing

You'll benefit from that, projects do need a strong lead. Just remember that 
everyone else is as busy if not busier than you. We've all got full time 
work, we all have other things in life, other projects in code. Individually, 
development can take a long time when done in your free time. Overall, 
because the entry barriers are so low and there are so many developers 
offering a few hours, development is extremely rapid and actually produces 
very good code too.

Don't expect to get commit access to CVS for some time - most projects will 
have their own system for submitting patches and their own preference for the 
patch format. Most will involve submitting the patch to a devel mailing list 
so that developers with more experience of that program can make sure it will 
do what is needed.

and if someone new comes along they're expected to miraculously know (or be
able to learn just through looking at source code) how all the APIs work.

Don't rush things. Take time to learn the codebase first - see my own site for 
my mistakes in getting involved in a large project:
http://code.neil.williamsleesmill.me.uk/palm.html#BEGINNING

Look for source code documentation, join the mailing list and lurk for a 
while. Get used to the program, use the program, find out what YOU can 
provide and then raise it as a solution, not a problem.

The other developers are busy as well, they don't want to have a general 
waffle about what you can do, they need a concise and usable plan of what you 
want to do. If they do criticise, take it positively and see their side - 
your code may not fit with the overall direction of the project at that time.

Don't be surprised if you don't write a line of useful code for three months 
or more - AFTER joining a project. I didn't. I've been working on GnuCash for 
over a year and it took me almost 6 months to get to a point where I had a 
patch that could even begin to be worth sending. Once you've invested that 
amount of time in a project, a few things happen:
1. You become entwined with the project and that commitment feeds your 
motivation - always vital in free software.
2. You get to know the other developers and build a tight-knit group despite 
being spread across the world.
3. The other developers get to know you and become able to help you much more 
easily.
4. You start to affect the project by being constructive, patient and 
diplomatic. GnuCash had a system for documenting the source code but the 
hosted site wasn't regularly updated and after seeing my problems, it was 
decided to update the docs from CVS every day. That made life easier for 
everyone.

Another REALLY good tip: Don't think of contributing only as code. Developers 
*really* appreciate those users who help out on the project mailing lists. 
Use the program, answer queries from other new users, learn from the 
responses. THEN, when you've got some credit with the other developers for 
taking queries off their backs for a while, you'll get more help with your 
queries on understanding the source code.

And that's unlikely to happen any time soon, so it kindof stifles my will
to contribute.

You need patience in this game. A lot of effort and time goes into learning 
the project as it is, before you can have any constructive ideas about where 
it should go.

Maybe somewhere like DCLUG is the way to go since in theory there may be
someone doing some projects locally with the time to explain how the APIs
work and the code interacts and where they want to go with it etc, etc...

Explaining the API's is best done with static documentation because you'll be 
referring to it endlessly. 

Hopefully i didn't make that sound too harsh, but i know what i mean :)

I do too, I know exactly how hard it is joining a running project. I made 
mistakes, I want to avoid seeing others do the same.

As 
an example, I have contributed i think two new games to mame drivers
(althugh i ended up not being credited - long story),

LEARN that lesson well. Understand the licence and copyright issues NOW, not 
when you've contributed code. There is no more important lesson - READ the 
GNU GPL, read the FAQ, take the quiz! Take the quiz again until you get a 
pass! Use the functions in your IDE / editor to create automatic copyright 
and licence notices. The first thing you put in ANY new file should be the 
copyright and licence. Before you type a line of code, get this done. Every 
single time. I don't care if it's a two line header file: make it a 70 line 
header file with two lines of code. Put the copyright and licence in!

but i still to this 
day have absolutely no grasp whatsoever on how mame (or indeed xmame)
works!! I've no idea how ANY newcomer would get to learn how that thing
hangs together!!

1. Join the user mailing list.
2. Join the devel mailing list.
3. Find the API documentation (Google and then ask).
e.g. I found this first search:
http://jausoft.com/Files/GLMame/xmame-doc.html

-- 

Neil Williams
=============
http://www.dcglug.org.uk/
http://www.nosoftwarepatents.com/
http://sourceforge.net/projects/isbnsearch/
http://www.neil.williamsleesmill.me.uk/
http://www.biglumber.com/x/web?qs=0x8801094A28BCB3E3

Attachment: pgp00013.pgp
Description: PGP signature