A reasonable project.

  • Thread starter Robin Kåveland Hansen
  • Start date
R

Robin Kåveland Hansen

Hi there.

I've been learning C over the past 6 or so months, by writing small
programs and reading a couple of books on the language. This means that
I'm reasonable comfortable around pointers, dymanic memory
allocation/deallocation and the language in general. Enough to be catious
but not despair, in any case.

However I find myself doing things like implementing linked lists, trees
and writing small, simple (and working!) utilities that normally ship with
a *nix system to see if I'm able to do it. I guess that what I'm getting
at here, is that what I've been doing lately, while certainly makes me a
bit more experienced, doesn't give the feeling of learning and joy I first
had when learning C.

All in all, I write programs that aren't "realistic", and don't have any
real applications (Because there are already better ones out there), and
can't give me the sense of challenge I really want. I'd much prefer if I
had a project of some reasonable size that would challenge me, while still
being doable that I could benefit from. I'm not saying it needs to be
innovative or can't already exist... But I want it to be big enough to
force me to learn how to write makefiles, proper structure of header files
and code files, and a bit about how things work in The Real World.

I've been thinking about writing a shell, but I'm not sure how involved
this really is (I'd also need to read some POSIX papers I think?). I've
been considering a linear algebra library, but this too would perhaps feel
a bit artificial, so I'm not sure if I would have a lot of benefit from it?

And that's the only two ideas I've been able to come up with. While this
isn't necessarily the right group for this, I was hoping that some of the
experienced C programmers that are bound to be here had ideas, or could
recollect what you did when you were at this stage.

Basically any suggestion, and any input is very, very welcome.
 
D

Default User

Robin Kveland Hansen wrote:

And that's the only two ideas I've been able to come up with. While
this isn't necessarily the right group for this, I was hoping that
some of the experienced C programmers that are bound to be here had
ideas, or could recollect what you did when you were at this stage.

My training project was a text-adventure game (Zork style). It was a
subject which interested me, and provided broad experience in many
facets of programming.

I still have that program, and periodically work on it.




Brian
 
A

Antoninus Twink

And that's the only two ideas I've been able to come up with. While this
isn't necessarily the right group for this, I was hoping that some of the
experienced C programmers that are bound to be here had ideas, or could
recollect what you did when you were at this stage.

Basically any suggestion, and any input is very, very welcome.

Unfortunately, you've come to completely the wrong place. CLC isn't
remotely interested in real-life coding projects. Read through some of
the posts here: all people care about is scoring points as to who can be
the pickiest language lawyer. Any code that might actually be used in
the real world is of no interest to people here: it's all off-topic and
not portable. This is why the level of discussion here never rises above
"why void main() is wrong" and repetitive diatribes on the evils of
casting the return value from malloc().

No, you'll not find anyone interested in realistic projects here. The
group has gone through a process I like to call HeathFieldization.
 
I

Ian Collins

Robin said:
All in all, I write programs that aren't "realistic", and don't have any
real applications (Because there are already better ones out there), and
can't give me the sense of challenge I really want. I'd much prefer if I
had a project of some reasonable size that would challenge me, while still
being doable that I could benefit from. I'm not saying it needs to be
innovative or can't already exist... But I want it to be big enough to
force me to learn how to write makefiles, proper structure of header files
and code files, and a bit about how things work in The Real World.
If you are using Linux or an opens source UNIX variant, why not get
involved with that project? I don't know about the others, but
OpenSolaris has bugs community members can work on as well as new
projects. Working on an OS will expose you to good and the bowels of C
programming!
 
E

Eric Sosman

Robin said:
[...]
All in all, I write programs that aren't "realistic", and don't have any
real applications (Because there are already better ones out there), and
can't give me the sense of challenge I really want. I'd much prefer if I
had a project of some reasonable size that would challenge me, while still
being doable that I could benefit from. I'm not saying it needs to be
innovative or can't already exist... But I want it to be big enough to
force me to learn how to write makefiles, proper structure of header files
and code files, and a bit about how things work in The Real World.
[...]

Write programs that you can use in some activity that
interests you. Do you like crossword puzzles? Write a
program that takes _O_US and suggests TORUS and HORUS and
BOGUS and so on, then maybe get more ambitious and have
it check for unlikely clashes in the crossed words. Are
you an amateur radio operator? Write a program to calculate
your antenna's radiation pattern at various frequencies, and
perhaps go on to graph the results. Do you study hydrology?
Write a program to correlate the rainfall up in the hills
with the oxygen readings taken three days later downstream.
In short, don't just exercise your programming skills for the
sake of exercise: use them for something, and the "something"
will provide the impetus to improve them.
 
S

santosh

Robin said:
Hi there.

I've been learning C over the past 6 or so months, by writing small
programs and reading a couple of books on the language. This means
that I'm reasonable comfortable around pointers, dymanic memory
allocation/deallocation and the language in general. Enough to be
catious but not despair, in any case.

All in all, I write programs that aren't "realistic", and don't have
any real applications (Because there are already better ones out
there), and can't give me the sense of challenge I really want. I'd
much prefer if I had a project of some reasonable size that would
challenge me, while still being doable that I could benefit from. I'm
not saying it needs to be innovative or can't already exist... But I
want it to be big enough to force me to learn how to write makefiles,
proper structure of header files and code files, and a bit about how
things work in The Real World.

I've been thinking about writing a shell, but I'm not sure how
involved this really is (I'd also need to read some POSIX papers I
think?).

A reasonably feature complete shell is quite complex.

Basically any suggestion, and any input is very, very welcome.

One project that I did early on in my C career was a text based database
program. It allowed creation and subsequent manipulation of structured
text data. I used it to create and maintain simple databases like a
list of all bird species, details of books and so on.

Unfortunately that was before my "clc days" and so the program made
heavy use Borland's extensions, but it could be rewritten in pure ISO C
with no loss of functionality.

This type of project forces you to learn about modular programming, file
I/O, algorithms for searching and sorting, sane interactive input, and
so on. It is also pretty useful (at least was to me) when finished.
Much like the UNIX program 'awk', but simpler.
 
C

cr88192

Robin Kåveland Hansen said:
Hi there.

I've been learning C over the past 6 or so months, by writing small
programs and reading a couple of books on the language. This means that
I'm reasonable comfortable around pointers, dymanic memory
allocation/deallocation and the language in general. Enough to be catious
but not despair, in any case.

However I find myself doing things like implementing linked lists, trees
and writing small, simple (and working!) utilities that normally ship with
a *nix system to see if I'm able to do it. I guess that what I'm getting
at here, is that what I've been doing lately, while certainly makes me a
bit more experienced, doesn't give the feeling of learning and joy I first
had when learning C.

All in all, I write programs that aren't "realistic", and don't have any
real applications (Because there are already better ones out there), and
can't give me the sense of challenge I really want. I'd much prefer if I
had a project of some reasonable size that would challenge me, while still
being doable that I could benefit from. I'm not saying it needs to be
innovative or can't already exist... But I want it to be big enough to
force me to learn how to write makefiles, proper structure of header files
and code files, and a bit about how things work in The Real World.

I've been thinking about writing a shell, but I'm not sure how involved
this really is (I'd also need to read some POSIX papers I think?). I've
been considering a linear algebra library, but this too would perhaps feel
a bit artificial, so I'm not sure if I would have a lot of benefit from
it?

And that's the only two ideas I've been able to come up with. While this
isn't necessarily the right group for this, I was hoping that some of the
experienced C programmers that are bound to be here had ideas, or could
recollect what you did when you were at this stage.

Basically any suggestion, and any input is very, very welcome.

these are kinds of problems that never really go away...


as others have noted, find something interesting, not too easy and not too
difficult.

in my case, if a project is too easy, I write it, and then feel disappointed
and distressed.
if a project is too difficult, it ends up eating up a whole bunch of time
and goes nowhere.

secondly, if it is a project you yourself can't really bring yourself to
give a crap about, it is probably not a good project either...


some people like writing small games, other people utilities, or network
clients/servers, ...
it all depends.

what might be interesting to me might not be to someone else and vice versa.
for example, I like things like compilers and 3D stuff, but have never
really been all that motivated by network stuff (apart from theoretically,
like more wishing internet TV and radio did not have so many
stalling/buffering issues, that it would be nice if web clients/servers
could switch more to assuming high-latency high-bandwidth networks, rather
than low-latency, low-bandwidth ones, or that "web designers" would stop
using so damn many graphics, ..., but all this is a long way from anything I
have much point in implementing).


for example, if I were doing internet TV, I would probably split the stream
into several smaller, lower-quality but combining streams (for example, 4+
video streams and 2+ audio streams).

each is as such that with only 1 of each stream, one still has a "watchable"
sequence, but the streams overlap and merge into a single higher quality
stream. if a sub-stream stalls, the algo quickly tries to get it back online
(first by keepalive messages or maybe speculatively trying to open a new
connection when a stall is detected in case the stall does not fix itself in
time).

the difficulty then would be keeping each of the substreams in sync.

(in any case, it would still be better than watching, and having it stall
with a message like '[buffer: 0%]' that often does not change until one
forcibly restarts the connection).

....


or such...


 
K

Keith Thompson

santosh said:
Robin KÃ¥veland Hansen wrote: [...]
I've been thinking about writing a shell, but I'm not sure how
involved this really is (I'd also need to read some POSIX papers I
think?).

A reasonably feature complete shell is quite complex.
[...]

Yes it is, but a small shell is far less complex, and can be enhanced
incrementally. It could be a very interesting and challenging
project. (Anything but a very simple shell will require the use of
non-standard features, but if you assume ISO C plus POSIX you should
be in good shape.)

Of course it does have the drawback that it's already been done a
number of times, but if you have an idea for a different way to do
things you could end up with something quite useful.
 
M

Mark McIntyre

Antoninus said:
Unfortunately, you've come to completely the wrong place.

Luckily, you can ignore A Twink - the name says it all. See the other
posters' responses for your original query.
 
T

Tor Rustad

Robin KÃ¥veland Hansen wrote:

[...]
Basically any suggestion, and any input is very, very welcome.

I have always the opposite problem, too many ideas, too little time.

The more interesting a programming challenge is, usually the more time
and expertise it requires.

When learning the basics, reinventing the wheel is sometimes rather
useful. IIRC, my 3rd C book was "Standard C Library" by Plauger, so my
learning project became implementing a subset of the standard C library.

Just rolling your own malloc wrapper, is an excellent project!

Another, is providing a back trace of function call stack, in your
private exit handler.

Sedgewicks C code in "Algorithms in C", is rather buggy. Providing a
industrial strength implementation of those algorithms, is an excellent
project too.
 
R

Robin Kåveland Hansen

Thanks, guys.

There have been some sound suggestions, but I realise that this is mostly
up to myself. I know quite a bit of geology/plate tectonics which I find
interesting, maybe I'll work out a way to make something related to that.
I'm particularly interested in programming languages but this might be a
bit large for me at the moment. I'll come up with something, I'm sure.
 
K

kiranshadow

Hi there.

I've been learning C over the past 6 or so months, by writing small
programs and reading a couple of books on the language. This means that
I'm reasonable comfortable around pointers, dymanic memory
allocation/deallocation and the language in general. Enough to be catious
but not despair, in any case.

However I find myself doing things like implementing linked lists, trees
and writing small, simple (and working!) utilities that normally ship with
a *nix system to see if I'm able to do it. I guess that what I'm getting
at here, is that what I've been doing lately, while certainly makes me a
bit more experienced, doesn't give the feeling of learning and joy I first
had when learning C.

All in all, I write programs that aren't "realistic", and don't have any
real applications (Because there are already better ones out there), and
can't give me the sense of challenge I really want. I'd much prefer if I
had a project of some reasonable size that would challenge me, while still
being doable that I could benefit from. I'm not saying it needs to be
innovative or can't already exist... But I want it to be big enough to
force me to learn how to write makefiles, proper structure of header files
and code files, and a bit about how things work in The Real World.

I've been thinking about writing a shell, but I'm not sure how involved
this really is (I'd also need to read some POSIX papers I think?). I've
been considering a linear algebra library, but this too would perhaps feel
a bit artificial, so I'm not sure if I would have a lot of benefit from it?

And that's the only two ideas I've been able to come up with. While this
isn't necessarily the right group for this, I was hoping that some of the
experienced C programmers that are bound to be here had ideas, or could
recollect what you did when you were at this stage.

Basically any suggestion, and any input is very, very welcome.

Hi, please send me some c programs regarding dadabase management in
colleges. My email id is (e-mail address removed)
 
K

kiranshadow

My training project was a text-adventure game (Zork style). It was a
subject which interested me, and provided broad experience in many
facets of programming.

I still have that program, and periodically work on it.

Brian

Hi, please send me some c programs regarding dadabase management in
colleges. My email id is (e-mail address removed)
 
K

kiranshadow

Unfortunately, you've come to completely the wrong place. CLC isn't
remotely interested in real-life coding projects. Read through some of
the posts here: all people care about is scoring points as to who can be
the pickiest language lawyer. Any code that might actually be used in
the real world is of no interest to people here: it's all off-topic and
not portable. This is why the level of discussion here never rises above
"why void main() is wrong" and repetitive diatribes on the evils of
casting the return value from malloc().

No, you'll not find anyone interested in realistic projects here. The
group has gone through a process I like to call HeathFieldization.

Hi, please send me some c programs regarding dadabase management in
colleges. My email id is (e-mail address removed)
 
K

kiranshadow

If you are using Linux or an opens source UNIX variant, why not get
involved with that project? I don't know about the others, but
OpenSolaris has bugs community members can work on as well as new
projects. Working on an OS will expose you to good and the bowels of C
programming!

Hi, please send me some c programs regarding dadabase management in
colleges. My email id is (e-mail address removed)
 
K

kiranshadow

Robin said:
[...]
All in all, I write programs that aren't "realistic", and don't have any
real applications (Because there are already better ones out there), and
can't give me the sense of challenge I really want. I'd much prefer if I
had a project of some reasonable size that would challenge me, while still
being doable that I could benefit from. I'm not saying it needs to be
innovative or can't already exist... But I want it to be big enough to
force me to learn how to write makefiles, proper structure of header files
and code files, and a bit about how things work in The Real World.
[...]

Write programs that you can use in some activity that
interests you. Do you like crossword puzzles? Write a
program that takes _O_US and suggests TORUS and HORUS and
BOGUS and so on, then maybe get more ambitious and have
it check for unlikely clashes in the crossed words. Are
you an amateur radio operator? Write a program to calculate
your antenna's radiation pattern at various frequencies, and
perhaps go on to graph the results. Do you study hydrology?
Write a program to correlate the rainfall up in the hills
with the oxygen readings taken three days later downstream.
In short, don't just exercise your programming skills for the
sake of exercise: use them for something, and the "something"
will provide the impetus to improve them.

Hi, please send me some c programs regarding dadabase management in
colleges. My email id is (e-mail address removed)
 
K

kiranshadow

A reasonably feature complete shell is quite complex.



One project that I did early on in my C career was a text based database
program. It allowed creation and subsequent manipulation of structured
text data. I used it to create and maintain simple databases like a
list of all bird species, details of books and so on.

Unfortunately that was before my "clc days" and so the program made
heavy use Borland's extensions, but it could be rewritten in pure ISO C
with no loss of functionality.

This type of project forces you to learn about modular programming, file
I/O, algorithms for searching and sorting, sane interactive input, and
so on. It is also pretty useful (at least was to me) when finished.
Much like the UNIX program 'awk', but simpler.

Hi, please send me some c programs regarding dadabase management in
colleges. My email id is (e-mail address removed)
 
K

kiranshadow

Hi there.
I've been learning C over the past 6 or so months, by writing small
programs and reading a couple of books on the language. This means that
I'm reasonable comfortable around pointers, dymanic memory
allocation/deallocation and the language in general. Enough to be catious
but not despair, in any case.
However I find myself doing things like implementing linked lists, trees
and writing small, simple (and working!) utilities that normally ship with
a *nix system to see if I'm able to do it. I guess that what I'm getting
at here, is that what I've been doing lately, while certainly makes me a
bit more experienced, doesn't give the feeling of learning and joy I first
had when learning C.
All in all, I write programs that aren't "realistic", and don't have any
real applications (Because there are already better ones out there), and
can't give me the sense of challenge I really want. I'd much prefer if I
had a project of some reasonable size that would challenge me, while still
being doable that I could benefit from. I'm not saying it needs to be
innovative or can't already exist... But I want it to be big enough to
force me to learn how to write makefiles, proper structure of header files
and code files, and a bit about how things work in The Real World.
I've been thinking about writing a shell, but I'm not sure how involved
this really is (I'd also need to read some POSIX papers I think?). I've
been considering a linear algebra library, but this too would perhaps feel
a bit artificial, so I'm not sure if I would have a lot of benefit from
it?
And that's the only two ideas I've been able to come up with. While this
isn't necessarily the right group for this, I was hoping that some of the
experienced C programmers that are bound to be here had ideas, or could
recollect what you did when you were at this stage.
Basically any suggestion, and any input is very, very welcome.

these are kinds of problems that never really go away...

as others have noted, find something interesting, not too easy and not too
difficult.

in my case, if a project is too easy, I write it, and then feel disappointed
and distressed.
if a project is too difficult, it ends up eating up a whole bunch of time
and goes nowhere.

secondly, if it is a project you yourself can't really bring yourself to
give a crap about, it is probably not a good project either...

some people like writing small games, other people utilities, or network
clients/servers, ...
it all depends.

what might be interesting to me might not be to someone else and vice versa.
for example, I like things like compilers and 3D stuff, but have never
really been all that motivated by network stuff (apart from theoretically,
like more wishing internet TV and radio did not have so many
stalling/buffering issues, that it would be nice if web clients/servers
could switch more to assuming high-latency high-bandwidth networks, rather
than low-latency, low-bandwidth ones, or that "web designers" would stop
using so damn many graphics, ..., but all this is a long way from anything I
have much point in implementing).

for example, if I were doing internet TV, I would probably split the stream
into several smaller, lower-quality but combining streams (for example, 4+
video streams and 2+ audio streams).

each is as such that with only 1 of each stream, one still has a "watchable"
sequence, but the streams overlap and merge into a single higher quality
stream. if a sub-stream stalls, the algo quickly tries to get it back online
(first by keepalive messages or maybe speculatively trying to open a new
connection when a stall is detected in case the stall does not fix itself in
time).

the difficulty then would be keeping each of the substreams in sync.

(in any case, it would still be better than watching, and having it stall
with a message like '[buffer: 0%]' that often does not change until one
forcibly restarts the connection).

...

or such...

Hi, please send me some c programs regarding dadabase management in
colleges. My email id is (e-mail address removed)
 
K

kiranshadow

Luckily, you can ignore A Twink - the name says it all. See the other
posters' responses for your original query.

Hi, please send me some c programs regarding dadabase management in
colleges. My email id is (e-mail address removed)
 
K

kiranshadow

Robin Kåveland Hansen wrote:

[...]
Basically any suggestion, and any input is very, very welcome.

I have always the opposite problem, too many ideas, too little time.

The more interesting a programming challenge is, usually the more time
and expertise it requires.

When learning the basics, reinventing the wheel is sometimes rather
useful. IIRC, my 3rd C book was "Standard C Library" by Plauger, so my
learning project became implementing a subset of the standard C library.

Just rolling your own malloc wrapper, is an excellent project!

Another, is providing a back trace of function call stack, in your
private exit handler.

Sedgewicks C code in "Algorithms in C", is rather buggy. Providing a
industrial strength implementation of those algorithms, is an excellent
project too.

Hi, please send me some c programs regarding dadabase management in
colleges. My email id is (e-mail address removed)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,062
Latest member
OrderKetozenseACV

Latest Threads

Top