updated 2002-12-26
contents:
[FIXME: move stuff from todo.html and linux.html here; ... computer_architecture.html ... also to_program.txt]
(also see directory ../program/ of programs I've written / am working on.
Programs I could write.
(was: FP(for program)list )
in order of priority:
[FIXME: move to computer_graphics.html#programming#bresenham] http://www.luberth.com/plotter/plotter.htm
That should lead right in to this development project:
Linux Stepper Motor Device Driver http://www.freelabs.com/~whitis/software/stepper/ ``I need to write a multiaxis implementation of the Bresenham line drawing algorithm.''
"Glax - ActiveX with Opengl: An ActiveX control implementing OpenGL 1.1" Karl M. Syring http://www.weihenstephan.de/~syring/ActiveX/
-- http://www.plkr.org/index.plkr In particular, several people http://www1.alphasmart.com/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=35;t=000018 would like it customized for the Dana screen."Plucker is an offline web and eBook viewer for Palm OS® based handheld devices and PDAs ... that let you decide exactly what part of the web that you want to view on your PDA. Plucker includes programs that let you specify exactly what part of the World Wide Web you'd like to download onto your PDA (as long as they're in standard HTML or text format); these web pages are then processed, compressed, and transferred to the PDA for viewing by the Plucker viewer.
...
Plucker is Free Software and that means that you can use it without charge, you can give it away to others, and that you can even modify the program (or pay others to do it for you) to customize it or add the features you want."
see also book.html#pluckerbooks
our "bug bounty" program. Basically, for each bug you fix [in Ghostscript], you get $500.-- http://www.ghostscript.com/
ideas for adding bloat: add hyperlinks. (click on a http:// link loads lynx; click on a WikiName searches for a file with that name in the same directory as the one you're looking at, and creates it if it doesn't exist ... unless you exit without saving changes ).
(perhaps post my results to http://texteditors.org/ )
... but what about ICD in-circuit debugger, single-stepping, etc. ?
Also try to port FORTH to it. http://massmind.org/techref/microchip/language/forths.htm Would it make things simpler to have *both* a serial FLASH (say, half for ASCII-text source code, half for "p-code" ?) *and* a serial RAM (data stack, return stack, and heap data) ?
But if we're going to go to the effort to make it "OK to kill the power at any time; it resumes right where it left off when you turn the power back on", then it might be even simpler to *not* have RAM, only have FLASH (or EEPROM).
Quick summary of ideas (some good, some bad ideas):
(On power-up, if you see 0x01 0xFF, it's obviously an incomplete write of one of these bytes -- overwrite the 0x01 with 0x00 and pretend the power failed just *before* starting to write the 0x01 byte. If you see 0x01 followed by any other byte, something more serious is wrong; perhaps overwrite both with 0x00.).
(Perhaps *dont* pack address extremely tightly, so LSb is always zero. Then start writing a new address at MSB ... on power-up, any addresses with non-zero LSb are obviously an incomplete write; overwrite the address with 0x0000 and pretend the power failed just *before* starting to write the address).
critical section -- lock out modifications to the B* tree
end critical section.
(wait... does this really work ? Won't this mess up all the addresses in the parent pointers that are now left pointing into the new empty block ?)
What happens when we're in the middle of garbage collection and power fails ?
left-insert:
right-insert:
power-loss tolerant insert:
The pointer to the current node in the parent is erased (overwritten with 0x00).
(as long as this step is done atomically, power failure at any other time never loses data ... but this requires a block of 6 flash writes; is there an other way that only requires each byte write to be atomic ? )
The Bip Buffer - The Circular Buffer with a Twist By Simon Cooke 2003 http://www.codeproject.com/internet/bipbuffer.asp
quick summary: similar to a circular buffer ... handles variable-length data ... Never breaks a data object into 2 parts -- each data object written is contiguous. ...
At any instant, the implementation stores the FIFO data in one of two ways:
[_______AAAAAAAAA____] or [BBBBBBBB_____AAAAA__]
BYTE* Reserve(int size, OUT int& reserved);
When you want to store "size" bytes,
first you call "reserve" with the size.
If there is a contiguous empty block (before or after AAA, or before BBB) at least that big, it returns a pointer to that block.
In the case where the buffer has no space available, Reserve will return a NULL pointer, and reserved will be set to zero.
(If there is a BBB area, this must be immediately *after* the BBB area, *before* the AAA area)
(If there is no BBB area, this area will be immediately *after* the AAA area, unless that area is too small for the reservation, in which case the pointer returned is the pointer to the beginning of the buffer, which becomes a BBB area).
void Commit(int size);
Once you've written to the buffer you got from Reserve(),
you use Commit to tell the buffer how many bytes you *really* wrote
(OK if this is smaller than the # of bytes you reserved).
Use Commit(0);
to cancel the reservation.
int GetReservationSize() const;
Recall how many bytes you asked to be reserved (returns 0 if no reservation at the moment).
BYTE* GetContiguousBlock(OUT int& size);
Gets a pointer to the next block to be released from the FIFO queue,
and its size, or NULL/zero if the queue is empty.
(This block is always the beginning of the AAA area,
just after the "size" header)
void DecommitBlock(int size);
Finish releasing the block from the FIFO queue
(turning it back into empty space).
You're guaranteed that the block that GetContiguousBlock() gave you
won't be overwritten by new data until you call DecommitBlock().
(This makes the AAAA block smaller.
If this makes the AAAA block disappear, it turns the BBB block (if any)
into an AAAA block.)
consider printing out the little 2D barcodes, sticking them onto a chess set, and otherwise building another implementation of GlyphChess machine_vision.html#GlyphChess with a laptop to make the whole thing portable. (Perhaps use some *other* 2D barcode, different from DataGlyph ...) (2 alternatives to sticking distracting barcodes on top of each piece: * Put barcodes on bottom, and scan from underneath, as with GlyphChess; or * keep cameras on top; perhaps use less-distracting barcodes on the board itself; use machine vision techniques to recognize the pieces themselves from the top (... discriminate white and black pieces from more neutral board color ... discriminate pawns by size of circle ... perhaps put relatively inconspicuous black dots on the white pieces, and white dots on the black pieces -- there are only 6 unique kinds of white piece with black dots (K Q B K R p) ... perhaps put black dots in a pattern in a circle around the base, repeated at least 4 times all the way around, so no matter which side is facing the camera, at least one complete repeat is visible ...)
Also consider informing http://consumerium.org/wiki/wiki.phtml?title=Bar_code about this software.
It would be cool to have a software bazaar. A place where people who are willing to pay to have some programming done can connect with people who are willing to program.
Too often hundreds of end-users are annoyed for years by some tiny little thing that a programmer could fix in a day or 2 of tweaking.
I think the site would start up with "free" projects -- projects so small that Comsci students looking for experience and fame could knock them out in a few hours.
Later we would add "paid" projects. How can we deal with money while avoiding potential problems ?
Is the "street performer protocol" appropriate ? (sometimes incorrectly spelled "software bazzar" ).
Here are some sites that are almost, but not quite what I'm picturing.
Here are some software projects for which I'm prepared to pay a bounty. You'll have to submit a proposal and some references, if you want an advance on the bounty. My budget for these bounties in 2004 is USD 100,000.-- Thomas Black, program manager for Open Source at The Shuttleworth Foundation http://markshuttleworth.com/bounty.html One project is "Timetabling ... I'm interested in proposals for extensions to SchoolTool to actually assist in the design and optimisation of the school calendar. This is a VERY HARD problem! The solution will need to support many different kinds of timetables, many different sorts of constraints, and be able to present this in a UI that is optimised for a given type of school."
ToDo: Add my software ideas / challenges to some Software Bazaar.
ToDo: Look through all Free Software Bazaar(s) (Are there any ?) for software I would find interesting and/or could quickly implement and donate.
MicroChip PIC Hardware Designers/Software Authors ... I just attempted to connect two groups of people together, people that needed work done and people that could do the work required.has a nifty rating system for programmers / electronics designers.
related ideas:
[TODO: A] Maybe someone should/could setup a board/forum of "software we'd like to see written". Then programmers can visit it and see what people are asking for. Steve -- http://www.mandrakeforum.com/comments.php?op=showreply&tid=13127&sid=987&pid=13126&mode=&order=&thold=&lang=en#13127
Todo: write code to implement some of the ideas at psd.html , especially psd.html#treemap
[see also software_david_uses.html#macintosh -- perhaps move all links to software archives to that page ? ]
Also algorithms and source code ...
Where can I find Win32 ports of UNIX tools? You might want to take a look at the help file for Windows NT and Windows 95 commands to see if there's a rough equivalent distributed with your Win32 platform. If not, try one of these URLs:
- GNU-Win32 - a Win32 port of many GNU tools, as well as a complete development environment. http://www.cygnus.com/misc/gnu-win32/
- Virtually Un*x! - various ports of UNIX programs for Win32. http://www.itribe.net/virtunix
- There are also several UNIX-like tools available in the Windows NT Resource Kit. Also, there are several UNIX-to-Win32 commercial packages available, including the MKS Toolkit from Mortice Kerns Systems, Inc.: http://www.mks.com/ and Interix from Softway Systems: http://www.interix.com/ (the product formerly known as OpenNT).
- You can also check into the Perl Power Tools, being developed under the UNIX Reconstruction Project. Here you can find UNIX tools that are being reimplemented into all Perl. You can see the latest at http://language.perl.com/ppt/
-- from the ActivePerl FAQ from http://www.activestate.com/
small data compression
One thing I want to do with data compression on a PIC: store (compressed) sound data on the PIC, then play back (kind of like a cheap, crude, extremely low-quality MP3 player). This lets me play several seconds worth of sound that contains the frequencies humans are most sensitive to (telephone-quality "voice quality", 40 Hz to 4 000 Hz) without actually having to store all 8 Ksamples/second. I think I want real-time decompression on-the-fly ... do I really want to make this isochronous ? See http://www.piclist.com/techref/microchip/dsp/wav2dt.htm
April Text Compression Challenge. http://www.mactech.com/articles/mactech/Vol.16/16.07/Jul00Challenge/index.html The Programmer's Challenge to_program.html#programmers_challenge
But I thought it would be much better to show you. ... So along with the descriptions of the algorithms, I have made some Java applets that allow you to see what it happening.
Right now, I have descriptions and applets for Huffman, Adaptive Huffman and LZW. If anyone wants to make a LZ77 applet, it would really help complete this.
play with data compression and decompression on the HP48 -- implement the LZRW-1a.
play with data compression and decompression on the PIC -- implement the LZRW-1a (if possible). Post results to http://www.piclist.com/techref/method/compress/embedded.htm
Also look at ideas from pucrunch data_compression.html#short ( PIC data compression )( PIC compression)
perhaps also make a short, slow *compressor* that runs on the PIC itself. Does the short, slow compressor still beat LZRW1-a in compressed size ?
DAV: (*all* compression algorithms:) it might be convenient to shuffle bit order such that 8 bit quantities (literals, perhaps also last part of offset in pucrunch) are always aligned to byte boundary. advantages:
For ISO-8859-1 text that has lots of bytes w/ the high bit (bit 7) set, perhaps it would be better to embed the escape bits as bits 6 and 5, which are never 00 in ISO-8859-1 text except for (rare) control codes and (common) tab, carriage return, line feed. But perhaps standard pucrunch with escape in 7 and 6 is adequate; these are never 10 except for rare punctuation symbols. (... and if they're common, they're usually followed by a space, so 2-byte LZ77 copies should pick them up ...).
Pasi Ojala 1997 explains that
...if a fixed-length code is used [, a] one-step lookahead is enough to guarantee optimal parsing. If there is a more advantageous match in the next location, we output a literal byte and that longer match instead of the shorter match. I don't have time or space here to go very deeply on that, but the main reason is that in fixed-length code it doesn't matter whether you represent a part of data as two matches of lengths 2 and 8 or as matches of lengths 3 and 7 or as any other possible combination (if matches of those lengths exist). This is not true for a variable-length code and/or a statistical compression backend.
[does the LZW1-a compressor take advantage of this fact ?]
Consider a reduced version of
LZRW4
... which also can take advantage of 2 byte repeats ...
...By using contexts, LZRW4 gets away with using 3-bit
lengths and 5-bit "indexes"...
...
The LZRW4 decompressor requires much more temporary working RAM than the LZRW1-a decompressor,
(a table of 4096 pointers),
but you need (?) that temporary table of 4096 pointers
for the the LZRW1-a *compressor*,
so if you're going to put them both on the same machine ...
you might as well go with the better-compressing LZRW4.
...
but DAV still suspects pucrunch is still better than LZRW4 ... or is it ? [FIXME: get numbers]
Because of limited PIC RAM, consider a modified form of LZ77 / LZ78 / LZW: a table of, say, only 500 or so pointers ... and instead of compressing a *byte* at a time, compress a *nybble* at a time. The first nybble is passed through unchanged; then the next 16 or so codes are sent as 5 bit codes (worst-case expansion: 5/4, compared to compressing a *byte* at a time with worst-case expansion of 9/8). I wonder if we could get better compression by passing through a fixed N nybbles (getting *some* context) before switching to 5 bit codes ... or somehow context-dependent deciding to switch. (Perhaps pass through nybbles until we see the first event that we *could* have compressed something, sacrificing that first compression event -- probably a nybble pair, compressing 8 bits into 5 -- in order to avoid 5/4 expansion up to that point).
Since in ASCII text the high nybbles are highly correlated, perhaps we could do something about that ? Would nybble-swap every other byte just make things worse ? Compress all the high nybbles, then all the low nybbles ?
I read about
LZW-style compressing a *bit* at a time.
The length of the index may vary.
For example, in the n-th block,
the current dictionary size is n+1
(assuming that the limit has not been reached).
Therefore, we can encode the index of block n using [log2(n+1)] bits
(rounded up to the nearest integer).
For example, the first index can be represented by
1 bit, the 2nd and 3rd by 2 bits each,
the 4th, 5th, 6th, and 7th by 3 bits each, and so on.
This is the variable-to-variable length version of the Lempel-Ziv algorithm.
For a maximum dictionary size of 2m,
variable-length encoding of the indices saves exactly 2m-1
bits compared to fixed-length encoding.
--
http://www.data-compression.com/lossless.html
With a small dictionary, clearing it out appropriately when the dictionary becomes full becomes more important. Some ideas: (simplest): use LZ77 history buffer -- probably better than simplest LZ78, and naturally history-limited (or is it ?). (simplest LZ78): Reset back to default (only 16 nybbles filled in). (trim all leaves): keep track of how many times each code has been used; when dictionary becomes full, remove all codes that have never been used (and perhaps also codes that have only been used once). (trim one leaf): Always keep a full set of codes in the dictionary; every time you add one code, delete some other rarely-used or least-recently-used code. (This keeps the most context, so I suspect it gives the best compression ... but you have to shufffle the dictionary on *every* code, so it's probably the slowest) (history-limited: probably slightly worse than "trim leaves", but has other benefits): keep track of when each code was defined; delete the *oldest* code (and all the codes that depend on it). Variant: rather than deleting all the codes that depend on it, make sure they are already in the dictionary (with the first letter trimmed off). For example, if "th" is the oldest code, and "therefore" is in the dictionary (with LZW, this implies that "the", "ther", "there", ... "therefor" are also in the dictionary"), after removing all those codes, then re-insert them in the dictionary without the first letter -- "h" is already in the dictionary. (right?). But "he", "her", "here", .... "herefore" may or may not be in the dictionary -- if not, insert them. (I think that merely changing the pointer on "the" to point directly to "h" rather than "th" inserts all of them for you ... but then you need to search for and weed out any redundant tags this creates, and make sure any longer entries point to the one that was *not* weeded out.) (I suppose that they should keep the same date-last-seen tag.) No extra data needed to find the oldest tag -- the entries in the LZ dictionary are already sorted in order of generation. (A smaller code value implies it was seen earlier -- right?).
[FIXME: haven't I written about them somewhere else ?)]
map all uppercase letters to "A" + lowercase letter; "This is a test, this" --> "Athis is a test, this" ... de-conflate ... the idea is to filter the file such that the compressed text is shorter than it would be without the filter, and in such a way that the file can be un-filtered and retrieve the original (lossless) text.
Is it possible to losslessly swap "qu" with "cw" ? If so, ... then after filtering most text won't have the q character. Fewer letters, in general, seem to make compression work better.
------------------------------ Date: Mon, 5 Jun 2000 14:42:16 -0400 From: Nick Cabatoff <ncc at cs.mcgill.ca> To: misc Subject: mad mp3 There's been discussion on this list in the past about making an mp3 player based on the F21. I just noticed an implementation using only integer arithmetic at <http://www.mars.org/home/rob/proj/mpeg/>, thought I'd pass along the reference. The library which does the decoding adds up to about 8KB of C source, almost half of which is composed of data (Huffman code words for Layer III). I'm going to dabble with writing a Machine Forth decoder inspired by this code, but it'll probably be some time before I have anything to show for it. If anyone else decides to do some work on this though maybe they could coordinate with me, perhaps share some code or ideas? ------------------------------
and then
Programs to Write (Code to Hack)
simple histogram
Mark: "I want a CGI script that ... sends email via a template file with an unknown number of variables ( names used more than once, a javascript or ".asp" loop )."
started: 1997 Nov 1 end prog.html
Write program to index (via words) and Table of Contents (via <headers>) my entire web site, with links to where those words / headers came from.
write program to index all the words on my web page (leaving out "a", "an", "the", "etc.", etc.), (dropping any ``s'' at the end of plurals) (how to handle capitals ? accented characters like resume ?) creating a index page with a link to the web page that uses it. Will the Unix "makeindex" program help ? -- I hear that Sandy Harris has written software ("needing work") to index only the words in the headers ( <H1/> through <H6/> ) in a "permuted index".
Hasn't this already been done ?
http://www.etla.net/~willey/projects/
anm List and crossreference the anchors in HTML documents. Jutta Degener http://kbs.cs.tu-berlin.de/~jutta/anm/ [FIXME: try this out]
source code to make a index for a book ? http://www.fiu.edu/~duttagus/weiss4/
"Automatic Indexing with the DocBook DSSSL Stylesheets" by Norman Walsh 1998 http://docbook.sourceforge.net/release/dsssl/current/doc/indexing.html ... Norman Walsh http://nwalsh.com/ ( _DocBook: The Definitive Guide_ book by Norman Walsh and Leonard Muellner "the official documentation for DocBook" the complete text of the printed book is online http://docbook.org/ The DocBook Wiki http://docbook.org/wiki/ )
Just for grins, make a list of all the words I use, sorted by the "canonical anagram" of the word, to see if anagram-ambiguous coding idea_space.html#improved_alphabets is really a problem. (some people use alphabetical order as canonical anagram order; where did I see people put consonants first, vowels last ?) (see the source code written by Jim Korenthal spin_dictionary.html#anagrams )
``Disk compression versus file compression'' http://tldp.org/HOWTO/Multi-Disk-HOWTO-6.html and
http://squashfs.sourceforge.net/
and also related to the Ross Williams patent on Blocklets(TM) http://blocklets.com/ (especially ``Example Application: A Low-Redundancy File System'' http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=/netahtml/srchnum.htm&r=1&f=G&l=50&s1=5,990,810.WKU.&OS=PN/5,990,810&RS=PN/5,990,810 which claims ``The technique could be used to increase the efficiency of an on-chip cache.'' [FIXME: link to VLSI] ). The patent also mentions ``suggests that some form of universal standardization on a particular partitioning method would be a worthy goal.'' DAV thinks that one partitioning method (with a variant) is already a de-facto standard: the character 0x0A (newline character); some applications, in addition, also partition after the "." (dot period) character.
[FIXME: make sure these 3 groups know about each other, and perhaps even crosslink to each other]
simulations fractals automata my CAD symbols data grasscatcher - programs hypercard draw my language (hack,hack) c2 write simple "oscilliscope simulator" program ... read both voltage and time value, so (from graph) it's obvious where the data dropouts are. c2 Saturn program -- get astronomical data to check program, accuracy. c3 write program to draw appolonian gasket. What happens when subroutine is given a negative radius? What is the fractal dimension of the Appolonian packing ?http://home.earthlink.net/~mrob/pub/math/numbers.html c3 write simple pascal Graph(xmin, xmax, function) w/pure ASCII output to illustrate passing functions as parameters (demo with sin(x), x, and user-defined functions like (x**2-(.25)). Do in-line functions work? ) DAC's very own time program ... think i'll call it Frameworks. timeline mode - shows autobiographical summary on the scale of 1 or 2 human lives.the fractal dimension of the "Appolonian packing", a rather pretty fractal made from circles. The precise value is a little difficult to compute; the most digits I have seen is 1.305686729, but that's probably only accurate up to the "7". To make the fractal, start with three circles that are just touching (tangent to) each other, and with none of the circles inside each other. Now there is exactly one way to add a 4th circle in the space between the three circles so that the new circle is tangent to all three. Then you can add three more smaller circles in the spaces between the 4th circle and two of the original three. As you continue this process indefinitely, you get an Appolonian packing.
From agora!rainrgnews0!psgrain!usenet.eel.ufl.edu!news.mathworks.com!uunet!in1.uu.net!news.u.washington.edu!myhost.subdomain.domain!scottco Fri Aug 11 23:02:09 1995 Xref: agora comp.graphics.algorithms:15170 Path: agora!rainrgnews0!psgrain!usenet.eel.ufl.edu!news.mathworks.com!uunet!in1.uu.net!news.u.washington.edu!myhost.subdomain.domain!scottco From: scottco@myhost.subdomain.domain (Scott C. Cottrille) Newsgroups: comp.graphics.algorithms Subject: Re: maze algorithm wanted. Date: 9 Aug 1995 17:43:17 GMT Organization: String to put in the Organization Header Lines: 156 NNTP-Posting-Host: camelot.stc.housing.washington.edu NNTP-Posting-User: scottco X-Newsreader: TIN [version 1.2 PL2] Allan Nienhuis (Allan_Nienhuis at mindlink.bc.ca) wrote: : Hi there. : Several (many) months ago, there was a slight bit of discussion about : different methods of creating simple 2d mazes. Naturaly, I didn't : bother to save any of the algorithms suggested, and now I have need of : just such a thing. I would prefer something recursive in nature, but : I'm willing to look at any type of soution. : Thanks, : Allan Nienhuis at mindlink.bc.ca Here's one I derived from a letter sent into Compute! many many years ago. I modified it to be state-driven, so that I could more easily make a timer-based screen saver out of it (works great!) You know, I think I've posted this thing about 4 times now - why don't these maze questions make it into a FAQ? The algorithm below is VERY simple. #define rnd(n) (rand() % n) #define NUMAMAZCOLORS 8 int Pattern[4][2] = { 0, 2, -2, 0, 0, -2, 2, 0 }; int DoMaze(void); void main(void) { SetYourGraphicsVideoMode(); srand((unsigned)(time(NULL) % 1000)); while(!kbhit()) { if (DoMaze()) { break; } } InvertTheScreen(); // black becomes nonblack, and vice versa getch(); ReturnScreenToTextMode(); } int DoMaze(void) { #define ZERO 0 #define ONE 1 #define TWO 2 #define THREE 3 #define FOUR 4 static int Maxx; static int Maxy; static int xPos = 2; static int yPos = 2; static int PseudoGoto = ZERO; static int j; static int x; int nx; int ny; switch(PseudoGoto) { case ZERO: Maxx = 298; Maxy = 198; SetPixelColor(5); SetPixel(xPos, yPos); PseudoGoto = ONE; break; case ONE: j = rnd(4); x = j; PseudoGoto = TWO; break; case TWO: nx = xPos + Pattern[j][1]; ny = yPos + Pattern[j][0]; if (ny < 1 || ny > Maxy || nx < 1 || nx > Maxx) { PseudoGoto = THREE; } else { if (GetPixel(nx, ny) == 0) { SetPixelColor(j + 1); SetPixel(nx, ny); SetPixelColor(5); SetPixel(xPos + Pattern[j][1] / 2, yPos + Pattern[j][0] / 2); xPos = nx; yPos = ny; PseudoGoto = ONE; } else { PseudoGoto = THREE; } } break; case THREE: j++; j = (j > 3) ? 0 : j; if (j != x) { PseudoGoto = TWO; } else { j = GetPixel(xPos, yPos) - 1; SetPixelColor(5); SetPixel(xPos, yPos); if (j < 4) { xPos = xPos - Pattern[j][1]; yPos = yPos - Pattern[j][0]; PseudoGoto = TWO; } else { PseudoGoto = FOUR; } } break; case FOUR: return(1); } return(0); }
outputs sinewave to user's filter, inputs sinewave, displays phase and amplitude (attenuation). Or uses the nifty step-response method. (Uses Sunset Laboratory AIB board) http://www.vernier.com/legacy/mpli/
"The most straight-forward method of adopting the FFT to handle such nonstationary signals (i.e., signals whose spectral composition change with time) is known as the Short-Time Fourier Transform (STFT). ...When the STFT is computed using the Gaussian window, it is sometimes called the Gabor Transform." -- J. Bulgrin and B. Rubal, "Time-Frequency Analysis of Heart Sounds", _Scientific Computing and Automation_ Aug. 1994.
write a program with self-check checksum or CRC, to detect corruption / infection. data_compression.html#ecc
do I need to do anything special to handle command-line redirection *and* command-line arguments? ex: type test.txt | myprog /verbose | more
help and "about" screens. ("about" can probably be just a regular textfile, self-edited in "read only", "view" mode. title, version number and date, and where to send shareware fees. Just be sure that it can't be disconnected from the program. )
See also si_metric_faq.html#iso8859 for more on using plain ASCII to name unusual characters.
- Use symbols for emphasis. That *is* what I meant. Use underscores for underlining. _War and Peace_ is my favorite book. ... - Limit line length to fewer than 65 characters and end a line with a carriage return.
Bug 16507 Improve Plain text -> HTML http://bugzilla.mozilla.org/show_bug.cgi?id=16507 has these suggestions:
plaintext --> HTML
x^y --> xy
_War and Peace_ --> _War and Peace_ ( <u> is deprecated </u> ) (books)
*Who* are you ? Who are *you* ? --> *Who* are you ? Who are *you* ?
Who you calling /gringo/ ? --> Who you calling /gringo/ ? (foreign words)
|main()| -->
main()
http://rdrop.com/~cary/ --> http://rdrop.com/~cary/
ASCII-art and ASCII-tables --> <pre> ... </pre>
Emoticons cannot close a parenthesis.
How to detect ASCII-art and ASCII-tables in plain text ? Space in col 0 ?
Is there a (content, not presentation) difference between underlines and italics ?
Also see Bug 16800 Improve HTML -> plain text
DAV: While I agree that using standards such as http://www.ietf.org/rfc/rfc1738.txt are preferable to inventing yet another incompatible format, my understanding is that that has been obsoleted by http://www.ietf.org/rfc/rfc2396.txt which says
In practice, URI are delimited in a variety of ways, but usually within double-quotes "http://test.com/", angle brackets <http://test.com/>, or just using whitespace http://test.com/ ... Using <> angle brackets around each URI is especially recommended as a delimiting style for URI that contain whitespace. The prefix "URL:" (with or without a trailing space) was recommended as a way to used to help distinguish a URL from other bracketed designators, although this is not common in practice.
In practice, other people agreed with Akkana and myself that that "URL: is ugly". -- DAV
Examples:
d.cary@ieee.org (David Cary) David Cary <d.cary@ieee.org> "David Cary" <d.cary@ieee.org>all get converted to <a href="mailto:d.cary@ieee.org">David Cary</a>
and(unless, of course, already tagged).
Converting to HTML: recognize sorted lists: paragraphs that begin with "1. ", "2.", "3." etc. or "(1)", "(2)", "(3)" etc., ... convert to standard
Consider also recognizing unordered lists, consecutive paragraphs that begin with "-", "*" or "+". Both kinds have exactly the same whitespace in front of the marker (usually 1 or more tabs).
"Object Outline" from Bumble Bee Software (http://www.bbeesoft.com) extracts comments from C++ to automatically generate HTML information, with automatic hyper-linking. (Windows 95 and Windows NT; $297).
http://www.nothings.org/computer/mxml/mxml.html has an example that converts plain text into HTML. [FIXME: this MacroXML might be useful for several of these projects:
Q: compare MacroXML, sed scripts, and Perl -- which is most appropriate for writing this sort of conversion filter ?
subroutine that takes a list. (of TTD:s, etc) asks you which is more important, [#1] or [#2].... etc. then, when done w/ last, shows sorted list in order of priority. probably insertion sort w/ binary search. able to quit then continue w/out starting over. takes top 10, puts them on "top 10" card. also do summary prog in test stack
future: look-ahead (sacrifice a less-than-maximum move now in order to acheive a brilliant move later)
...
1D 2D (Conway's Life) 3D
http://robots.net/article/511.html
see also todo.html#others for non-software task lists.
Tools to help write software:
There are always a lot of small things that need doing in GNOME. http://www.gnome.org/todo/
a cross referenced display of the GNOME source code. http://cvs.gnome.org/lxr/
[FIXME:... make sure "other todo lists" points to hacking challenges ...]
Software to write: Unwritten Software:
The world is full of fascinating problems waiting to be solved. In order to get in on the excitement, you need to learn the tools used to solve them.
(from How To Become A Hacker http://www.ccil.org/~esr/faqs/hacker-howto.html by Eric S. Raymond )
- Learn how to program. In 1997 the one language you absolutely must learn is C (though it's not the one to try learning first thing). Besides C, you should also learn at least LISP and Perl (and Java is pushing hard for a place on the list).
- Get one of the free UNIXes and learn to use and run it.
- Learn how to use the World Wide Web and write HTML.
- Contrary to popular myth, you do *not* have to be a nerd to be a hacker. It does help, however, and many hackers are in fact nerds. Being a social outcast helps you stay concentrated on the really important things, like thinking and hacking.
Q: What language should I learn first?
A: HTML. ... There are a lot of glossy, hype-intensive bad HTML books out there, and distressingly few good ones. The one I like best is _HTML: The Definitive Guide_. When you're ready to start programming, I would recommend starting with Perl or Python. C is really important, but it's also much harder.
Here is some tools seem like they might be useful. Please tell me about any other useful programming tools you find.
You might also be interested in the jargon creed.html#jargon some hackers use.
[FIXME: move information about programming in general here from linux.html ]
Here are some challenging projects, roughly in order of the value *I* place on them.
I challenge you to work towards pushing at least one of these towards a finished product.
(See also The Programmer's Challenge by Bob Boonstra #programmers_challenge )
I'd be willing to pay money for some of these ... #software_bazaar
NOTE: I measure the real time, not CPU time. If your program makes a lot of calculations and doesn't wait()ing or sleep()ing you can freely use ANSI clock(), but if you want to measure time more accurately consider using ANSI time(), POSIX times() (the return value of times() is the real time measured in ticks) or POSIX alarm().
* In the coding phase, contestants will be given a set of problems to solve using their programming skills. * In the challenge phase, participants have the opportunity to review their competitors' code for errors.
Tournaments they host include:
No Starch Press is holding a contest for Linux game developers. http://lwn.net/2001/1122/a/gamecontest.php3
The Programmer's Challenge
The contest is judged by Bob Boonstra < boonstra at ultranet.com > http://www.ultranet.com/~boonstra
Bob Boonstra http://www.windmillsw.com/
To me the application du jour is a web browser. If you have run out of things to do write a web browser.-- Chuck Moore (Charles Moore) 1999-04-13 http://www.ultratechnology.com/1xforth.htm (Can a web browser be written in less than a thousand instructions ?) "How do I Edit in Color Forth? Yes I do have a custom editor for doing this. I think everyone should have a custom editor for editing their program files. I don't believe in universal editors. An editor is so easy too write that why not? A browser is very easy to write too, and I know people don't like to believe me but I will give you some examples in the course of the next year." -- http://www.ultratechnology.com/cm52299.htm
/* I started to translate ``you'', ``thou'', ``thee'', ``ye'' all to modern ``you'', but that is lossy -- how to distinguish them in the modern version to make the reverse translation possible ? */
From: (Ken Nestle) Newsgroups: comp.sys.mac.system Subject: Word counter ? Date: Mon, 20 Nov 1995 13:11:00 -0500 Organization: InterAccess, Chicago's best Internet Service Provider I'm looking for a Mac app that will give me an alphabetical list of all the words used in a document, along with a count of how many time it appears. Thanks in advance to anyone who can help. Ken -- If you love something, set it free. If it doesn't come back, hunt it down and kill it.
more details: http://www.basiceng.com/needs.html lists some open-source software and improvements to make to it.
Continued fractions http://mitpress.mit.edu/sicp/psets/ps2cnt/readme.html
A Global Suggestion Box for socially innovative non-technological ideas and projects, with £1,000 UK sterling awards annually for the best ideas or projects submitted http://www.globalideasbank.org/ [FIXME: search tools ? todo.html#others ?]
The DTMF page http://www.pstec.de/ppp/pppdtmf/pppdtmf.html how to generate DTMF tones using only a single-bit output ... and why the Palm Pilot can't play DTMF tones (DAV: the speaker driver isn't low-impedance enough, so the piezo just rattles at its own resonant frequency ...) ... also see http://www.dattalo.com/technical/theory/dtmf.html ... ???
"DTMF decoding on PIC18" techtrain.microchip.com/masters2002/Classes/608/608 DTF.pdf techtrain.microchip.com/masters2002/Classes/608/608%20DTF.pdf document on "Design of DTMF Detector on PICR Microcontroller with 1-bit DFT using modified Goertzel algorithm"???
http://numbers.computation.free.fr/Constants/TinyPrograms/tinycodes.html DAV: functional program compression, right up my alley !This page contains some very tiny code to compute classical mathematical constants.
Wanted : any shorter C codes or tiny C codes for z(3), the Euler constant g (!) or any other classical constant. Send any new tiny code to : xavier.gourdon(at)free.fr or to sebah.pascal(at)fnac.net .
So: write a program to generate a 3rd ``colorized image'' from 2 input image: a ``raw image'', and a ``filtered image''.
Consider the special case of an image (the ``filtered image'') reduced to 16 colors: what I *dont* want is a lot of colors dedicated to near-black, and a bunch more to near-white, while what I think are ``important'' distinctions get washed out. So: Except for the color map, the output image is the same as the ``filtered'' image. For each color in the color map, find the *location* of every pixel in the filtered image that uses that color, then find the corresponding pixels in the raw image, then set that color in color map of the colorized image to the average color of those selected pixels from the raw image.
Future: how to automatically take a raw image and generate the final filtered, colorized image ? Perhaps direct translation would make it easier to avoid problems such as slight left-right offsets ...
Perhaps better: better OCR-like understanding of the image.
The stone: Hardware: a touch-only interfacesounds pretty cool: no sound, no visuals, just pressing chords into the stone, and feeling it press back. ... it can broadcast and receive text messages over the cell phone network ... also links to other haptic interfaces.
More about haptic interfaces (Bumpology) and other strange (but possibly implementable) hardware and software ideas at http://kbs.cs.tu-berlin.de/~jutta/me/notes.html
I miss a free good paint tool for X-Windows.http://kbs.cs.tu-berlin.de/~jutta/swd/paint.html has lots of ideas for what a good paint tool should do. [FIXME: crosslink to free_d.html ?]
I wonder what being able to quickly manipulate graphs would feel like...[crosslink to psd.html ]
Linux makes a great platform for deploying diskless workstations that boot from a network server. The LTSP is all about running thin client computers in a GNU/Linux environment.
-- unknown [FIXME: get exact name and location of this mailing list.]Q: I want to do a Network monitoring project in LAN in TCP/IP using C. But i have no idea baout that. Please provide me a giudance and assist me in my project.
A: Join the mailing list run by Douglas Comer. You will get definite answers as douglas is considered expert on TCP/IP .
books by Douglas E. Comer: http://search.barnesandnoble.com/booksearch/results.asp?sourceid=00405232526069618292&bfdate=08-07-2003+10:50:43&popup=0&ATH=Douglas+Comer&bfinfo=Douglas_Comer and http://www.alibris.com/search/search.cfm?S=R&wauth=Douglas+comer&siteID=1JSk6CbYEf0-b9ig9WdUWVesuNIq9EYIqQ and http://shop.cajun-style.com/aws.cgi/mode_books/kind_AuthorSearch/search_Douglas%20Comer/ http://shop.cajun-style.com/aws.cgi/mode_books/search_Douglas%20Comer/ [FIXME: add to "book stores"]
Computer Networks and Internets book by Douglas Comer. "Questions from readers of the book, with answers from the author, Doug Comer" http://www.netbook.cs.purdue.edu/
Network Systems Design Using Network Processors book by Douglas Comer ISBN: 0-13-141792-4 http://www.npbook.cs.purdue.edu/
Douglas Comer http://www.cs.purdue.edu/people/comer
various definitions of the Internet, from Intel http://www.soe.ucsc.edu/~callon/internetintro/sld022.htm | http://www.soe.ucsc.edu/~callon/internetintro/tsld022.htm , Douglas Comer http://www.soe.ucsc.edu/~callon/internetintro/sld023.htm | http://www.soe.ucsc.edu/~callon/internetintro/tsld023.htm
[FIXME: crosslink to "embedded web servers"]
What are the gory details about how are 1s and 0s encoded?http://www.cdrfaq.org/faq02.html#S2-43 would be helpful.
I don't use C anymore.
--
Rick Hohensee
ftp://ftp.gwdg.de/pub/cLIeNUX/interim/ABOUT
(trying to build a forth-oriented Linux distribution, cLIeNUX)
http://exit3.i-55.com/~bolus/ ???
[FIXME: play with improving cLIeNUX]
lucid naming is the best documentation. http://ibiblio.org/pub/Linux/distributions/cLIeNUX/descriptive/DSFH.html
http://ibiblio.org/pub/Linux/distributions/cLIeNUX/descriptive/axioms has many good quotes. [FIXME: creed ? to_program ?] A system is only as good as the docs. Proximity is the best documentation. 2 stacks are better than one. Hiding information isn't friendly. If you can't obtain the sourcecode, you don't own the box.
http://poorbuthappy.com/ease/000949.htmlIs it possible/easy to develop plugins for IE? It sure looks like it - so how does that work? And if so, with all due respect to all the developers out there who have built a newsfeed aggregator, why hasn't anyone developed a newsfeed aggregator that just plugs into IE? Develop it, make it easy to use, include all the usual goodies + categories, and charge me $10. Come'on.
Posted by Pedro at March 07, 2003
Picture1.jpg Picture2.jpg Picture3.jpg Picture4.jpg Picture5.jpg Picture6.jpg Picture7.jpg Picture8.jpg Picture9.jpg Picture10.jpg Picture11.jpg Picture12.jpg
... look at DTMF decoders for ideas -- perhaps even use DTMF ideas to decode more than 1 note at a time (i.e., 2 people whistling in harmony). How to avoid feedback from the midi device back to the microphone ? simplest: wear headphones. complicated: remember what note you sent, and ignore that note ... either a complicated filter to filter it out, or simply stop listening, play for a sixteenth note, stay quiet for a sixteenth rest, then stay quiet for an eight note as we listen for the whistle again.
... For several years, radio amateurs have used a modulation method called PSK31 for keyboard-to-keyboard chats on the air. PSK31 uses phase-shift keying of a carrier to transmit bits of data. Usually a program running on a personal computer generates a phase-shifted audio carrier and outputs it from the sound card. A single-sideband (SSB) transmitter con verts the audio to RF and transmits it out the antenna. An SSB receiver recovers the audio carrier, and a computer equipped with a sound card demodulates the phase-shift keying at the other end and displays the original text.
George Heron (amateur radio callsign N2APB) has developed a simple device that generates a PSK31 audio message. Links to George's schematic, source code, and other documents are at www.njqrp.org/psk31beacon/psk31beacon.html. The module uses a Ubicom SX28AC/DP microcontroller and a simple resistor array instead of a DAC chip. A personal computer running a PSK31 program (available through aintel.bi.ehu.es/psk31.html) and a microphone plugged into its sound card's input can hear and demodulate the audio signal. George's design also illustrates how to use the LM386 amplifier chip.
a fast search facility would be really nice. Eventually, I may have one (I refuse to use free search engines that impose advertising. They tend to be too slow anyhow.) In the meantime, realize that you can always use Ctrl-F in your browser to search any single document. ... However, if someone would offer to provide a fast non-commercial search engine that I can just drop in with near zero effort, please contact me ...-- Samuel M. Goldwasser http://www.laserfaq.org/ | mirror http://members.misty.com/don/lasersam.html
GNU software for Windows 95 and Windows NT http://agnes.dida.physik.uni-essen.de/~janjaap/mingw32/
GNU Software for Windows http://www.gnusoftware.com/
http://www.fred.net/tfelix/supasoft/wuup.htm The idea is to take the BSD and GNU UNIX-like utilities and port them to Win32 so that they will compile under Microsoft's latest Visual C++ compiler. The result is a set of tools that handle long filenames ... Full source code for VC++ 5.0 is available,
which in turn points to http://refactoring.com/ [FIXME: gather up my info on refactoring and functional compression; perhaps put somewhere near http://c2.com/cgi/wiki?WhatIsRefactoring ]
I have lots of other ideas for software that, unfortunately, I don't have time to implement -- or I don't know enough to implement. Perhaps you could help ? to_program.html#challenge
i manage a Solar System Simulator group with the goal of making a solar system simulator that can model man made structures in space such as the SE. Unfortunately most of the group including my self have other commitments too, in my case its university. But now that the holiday season is here perhaps we can get a bit more done. Perhaps you and others who have the same interest in helping us out would join us at http://groups.yahoo.com/group/SolarSystemSimulator/ the idea is to make a fully free and open source space sim that allows users to experiment by creating and testing man made structures (such as the SE) in a simulated but realistic space model.
eFax costs only $12.95 per month, with a one-time $12.95 fee to activate your account. Received faxes are included (subject to the Customer Agreement) and faxes sent anywhere in the US cost 10 cents/page.
is a fax-to-email gateway [!!!!!] and a email-to-fax gateway ... free trial ...
The Remembrance Agent (Remem) is an Emacs plug-in that watches over your shoulder and suggests information relevant to what you're reading or writing. While search engines help with direct recall, Remem is a tool for associative memory. Suggested documents are displayed in a buffer at the bottom of your Emacs window, and are updated every few seconds based on the last hundred or so words surrounding the cursor. Documents are pulled from your own text documents, and Remem's internal indexer can parse email archives, HTML, LaTex and plain-text documents. It runs under most Unix systems (and maybe even properly souped-up Mac or Windows) and both Emacs and XEmacs.
I would love to find some kind of program that takes XML tree data (or database data, but XML seems ideal for this project) and displays the tree diagram graphically. It would be great if I could control what part of the tree it shows by collapsing and expanding nodes, allow me to hide or display attribute data, or color code the display of the lines, nodes & terminus labels to metadata coded for each node, etc. If you have any ideas or links please send them in!
-- Noreen Whysel http://www34.brinkster.com/nwhysel/
perhaps mktime() would be good to used in my calendar program -- -- shifting the burden of correct calender code from every programmer in the world onto the C library programmers.
Consider translating the "cal" Unix utility to Java or JavaScript (using built-in time libraries).
interesting calendar programs:
Spiral Calendar 2010 http://www.flickr.com/photos/tom-b/4179587862/ http://www.4shared.com/dir/25454636/8abbe83e/Spiral_Calendar_2010.html by Tom B from São Paulo, Brazil
started 1997 Nov 1 (possibly before ?) [FIXME: better footer] errors .
Return to index // end http://rdrop.com/~cary/html/to_program.html