[HN Gopher] My "retirement" project: Release 40 years worth of m...
       ___________________________________________________________________
        
       My "retirement" project: Release 40 years worth of my "source code"
        
       Author : elvis70
       Score  : 393 points
       Date   : 2023-11-03 17:26 UTC (5 hours ago)
        
 (HTM) web link (dunfield.themindfactory.com)
 (TXT) w3m dump (dunfield.themindfactory.com)
        
       | jart wrote:
       | I'm taking a look through DOSUTIL.ZIP and I love all these simple
       | elegant C programs. A lot of these programs somehow only manage
       | to have 1-2 standard c #include lines. How often do you see that?
       | I also love how, out of 20,000 lines of C code, there only exists
       | 24 #if statements. This is how C programming was meant to be.
       | Reading codebases like this is one of the things I drew
       | inspiration from when I started working on Cosmopolitan Libc.
        
         | duskwuff wrote:
         | > A lot of these programs somehow only manage to have 1-2
         | standard c #include lines
         | 
         | Older C compilers will let you get away with a lot of sins
         | which a modern C compiler will (correctly) call you out for.
        
           | jart wrote:
           | We can still get away with those sins today if you change C's
           | implicit type from int to long. I modified chibicc to do just
           | that it was a 1 LOC patch. Suddenly I didn't need prototypes
           | anymore and everything just worked without #include lines.
        
             | duskwuff wrote:
             | > Suddenly I didn't need prototypes anymore
             | 
             | Under some very old C standards, maybe. But C99 requires
             | that you at least declare a function before calling it.
        
           | trealira wrote:
           | I haven't looked that deeply, but I don't see many sins in
           | this source code, either, except for the K&R style, weird
           | formatting and doing too much in one line, like this line in
           | the file CAT.C:                 if(*(Ptr = argv[i]) == '-') {
           | 
           | Older C compilers did let you get away with more, like using
           | integers as pointers, and dereferencing pointers as though
           | they were struct pointers when they aren't. But I don't see
           | that in this code.
        
             | duskwuff wrote:
             | The "sin" I was referring to was calling undeclared
             | functions -- which is how there are so few #include
             | directives in much of this code. Most of the files I looked
             | at include <stdio.h> (probably required for variadic
             | arguments on printf-type functions) and <file.h> (for the
             | FILE type), and call other functions blindly.
        
               | trealira wrote:
               | That does make sense. My bad, I should have looked closer
               | and noticed the implicitly defined functions.
               | 
               | It's not even a good idea to do that on modern computers,
               | because implicitly declared functions do type promotions
               | from float to double and char/short to int, and on the
               | System V ABI, it has to pass in the number of floating
               | point arguments there are in register eax.
        
               | jart wrote:
               | It's not a good idea to do that _in production code_.
               | FTFY. If you 're writing research, experimental, or one-
               | off programs then it can be a real productivity boon. I
               | say do it for fun. You have a right to enjoy yourself and
               | it'll still come out 10x more readable than Perl at the
               | end of the day, let's be real.
        
         | cdchn wrote:
         | If your build targets are 1 then that saves you a lot of #if
         | macros.
        
           | lovasoa wrote:
           | You are replying to someone who builds C programs for 6 OS
           | and 2 architectures without an #if ;)
        
             | kr0bat wrote:
             | https://justine.lol/ape.html
             | 
             | For the uniformed
        
               | echelon wrote:
               | I love all of the domain experts and accomplished people
               | hanging out with the rest of us on HN. :)
        
             | DiggyJohnson wrote:
             | Love a great "do you know who you're dealing with" HN
             | moment.
             | 
             | Justine's APE [0] project is one of the few things to
             | induce in me true, nostalgic, nerdful glee in the last few
             | years.
             | 
             | [0] https://justine.lol/ape.html
        
               | digging wrote:
               | Ok but sidenote, that Greek-letter titling is emotionally
               | upsetting, even if the title is SR-accessible (kudos for
               | that though).
        
               | violiner wrote:
               | Yeah I read it as "Astmally pdrtable echesmtable". People
               | shouldn't do this.
        
               | johnnyanmac wrote:
               | Ahh geez. I see stuff like this going on in the
               | background and I wonder what I'm even doing in my life,
               | pushing pencils in comparison to actually, truly solving
               | problems.I'd love to tackle more stuff like this, but I
               | feel trapped chasing what I need to pay the bills (said
               | pencil pushing).
               | 
               | At the same time, companies seem so quick to layoff that
               | I question how I even grow to the point where I'd be
               | trusted with such problems. Do I really just need to do a
               | 2nd full time duty in the open source community to get
               | that growth?
        
               | wahnfrieden wrote:
               | Go indie on the side then full time
        
       | LastTrain wrote:
       | This is great - add them to github!
        
         | megous wrote:
         | Or maybe don't feed the machine...
        
           | outside1234 wrote:
           | If it is not on Github it is never going to feed anything
        
             | quickthrower2 wrote:
             | A http server is all you need
        
               | TedDoesntTalk wrote:
               | ... which dies with the author, or a couple years later
               | when his domain expires.
        
               | EVa5I7bHFq9mnYK wrote:
               | Add $1000 to your Namecheap accounts, turn autorenew ON,
               | you are good for couple decades ...
        
               | cellularmitosis wrote:
               | The question of "how long would a non-famous repository
               | stay alive on github" is actually an interesting thought
               | experiment.
        
               | simonw wrote:
               | GitHub's track record on this so far is fantastic. Repos
               | that were created 15 years ago and didn't see another
               | commit since their creation are still there today.
        
               | pgeorgi wrote:
               | By this metric, folks should go for sourceforge:
               | https://sourceforge.net/p/gnome-napster/code/ has last
               | seen activity 23 years ago, while
               | https://sourceforge.net/p/primal/code/ci/master/tree/ saw
               | changes this year.
        
               | Diederich wrote:
               | What is the actual downside to hosting it personally
               | _and_ hosting it on github or something like it?
        
           | LastTrain wrote:
           | I do love personal websites - but the proper place for
           | sharing code, where it can be forked and shared, is GitHub or
           | a place like it. Plus, author has already licensed their code
           | in a way to allow it anyway.
        
             | fallat wrote:
             | > the proper place for sharing code [...] is GitHub
             | 
             | Man how far people are brainwashed.
        
               | LastTrain wrote:
               | OK. Straighten me out. Explain the difference between
               | sharing my 20 year old code on a personal sever with a
               | license that says "do what you like" and posting my code
               | on GitHub/GitLab/SourceForge etc.
        
           | pgeorgi wrote:
           | There's also codeberg.org for git-shaped artifacts, or
           | archive.org for everything else.
        
           | screamingninja wrote:
           | > Or maybe don't feed the machine...
           | 
           | Curious as to why you consider that a bad thing.
        
       | xeckr wrote:
       | Good idea. I should keep better track of all the stuff I've
       | written...
        
       | pbhjpbhj wrote:
       | elvis70 are you Dave Dunfield (the source author)?
       | 
       | [It might be more a ShowHN if you are?]
       | 
       | I'm interested if all of the code is self-written? If you wrote
       | any of it under contract and so had special terms to allow you to
       | eventually release it? Which piece of code there that you are
       | most proud of and/or gonna most useful?
        
       | jandrewrogers wrote:
       | I love this. It has crossed my mind more than once to do
       | something similar at some point in the future.
       | 
       | This is a bit like receiving an inheritance from your
       | grandparents. There will be true gems and novelties mixed in with
       | a lot of knick knacks and rubbish. But the totality of that tells
       | a story of real people living rich and interesting lives that
       | only a handful of highlights would not do justice to.
        
         | albertzeyer wrote:
         | Why only when you are retired? Why not just right now?
        
       | VirusNewbie wrote:
       | Put it on github! You might actually get people to fork it and
       | continue working on it.
        
         | myself248 wrote:
         | That implies that it needs people to continue working on it.
         | 
         | Is there no such thing as "done" anymore?
        
           | screamingninja wrote:
           | > That implies that it needs people to continue working on
           | it.
           | 
           | It does not.
           | 
           | > Is there no such thing as "done" anymore?
           | 
           | Is there no such thing as "building upon it" anymore?
        
       | nihiven wrote:
       | This is really cool. It seems very 'pure' in comparison to what
       | my code history will look like. In 2040, a lot of my code will
       | show how I used a bunch of libraries and frameworks that nobody
       | uses 'these days'. This doesn't seem good or bad, just a
       | reflection of the times.
        
         | swatcoder wrote:
         | And unless you put in the effort to archive those dependencies
         | yourself, nobody may be able to truly read or build your code
         | anyway.
         | 
         | Today's trendy development practices are shockingly ephemeral
         | and fragile. Very little of today's projects would survive one
         | decade left fallow, let alone four.
        
           | capitol_ wrote:
           | This is why I really like Debians policy of being self-
           | contained, that everything in Debian is built from sources
           | that are in the Debian system.
           | 
           | It takes a lot more effort to package stuff, since you can't
           | just download your dependencies from the internet. But you
           | also create something that isn't as ephemeral.
        
             | trealira wrote:
             | Since you mention it, I recall that it's the same thing in
             | OpenBSD: their policy is "base builds base."
        
           | bluGill wrote:
           | A few years back my office threw away a PC running Windows XP
           | with no service packs. It was left in a closet for many years
           | just in case we had to fix a bug in some safety critical
           | code.
           | 
           | A few years ago we tried to rebuild some safety critical code
           | from sometime back and were unable to because the
           | certificates had expired and so the machine that can build
           | the source code refused to connect to our version control
           | system.
        
           | xyst wrote:
           | > And unless you put in the effort to archive those
           | dependencies yourself
           | 
           | go makes this extremely easy to do
           | 
           | https://go.dev/ref/mod#go-mod-vendor
           | 
           | rust tool chain also includes a vendor dependency process
           | 
           | https://doc.rust-lang.org/cargo/commands/cargo-vendor.html
        
             | bbkane wrote:
             | Do you use this and check in vendored code? I don't, maybe
             | I should
        
           | fallat wrote:
           | > Today's trendy development practices are shockingly
           | ephemeral and fragile
           | 
           | My fellow human, you have just nailed what is wrong with
           | today's software.
        
         | myth_drannon wrote:
         | all these `pip install` and `npm install` will be useless
        
           | myself248 wrote:
           | They already are, if your internet connection has a hiccup or
           | worse.
           | 
           | They already are, if something has been hijacked and is now
           | malicious.
           | 
           | They already are, if you need to install something offline
           | somewhere.
           | 
           | They already are.
        
             | xyst wrote:
             | not sure if node has its own vendor process now
             | 
             | But languages like go and rust have had the ability to
             | "vendor dependencies" for awhile now.
             | 
             | Don't need an active internet connection. Just need to have
             | the toolchain.
        
       | outside1234 wrote:
       | Please put it on Github - nobody will ever find this otherwise
        
         | 38 wrote:
         | It's on the front page, so your comment seems pretty tone deaf.
        
           | outside1234 wrote:
           | For today -- and tomorrow everyone forgets about it.
        
       | thecyborganizer wrote:
       | From STYLE.TXT:                 - True=7 -            Having lots
       | of very low-level code and hardware experience, I developed a bit
       | of tendancy to "minimize what can go wrong at low levels" - C
       | treats 0==FALSE       and !0==TRUE - most people use 0/1 ... but
       | thats only 1 bit "difference".  I       sometimes use 7=TRUE as
       | thats 3 bits with no more chars to type (and of course
       | foolish as such a 1 bit hardware error would "trash" pretty much
       | any system -       but I do tend to be a creature of habit :)
       | 
       | I have never heard of this convention before! Was "random
       | bitflips messing with your conditionals" a common problem back in
       | the day?
        
         | wrs wrote:
         | I've been involved with systems where 0xffff... was canonical
         | "true", but not something as specific as 7! If you're going to
         | turn on more bits, why not all of them? Though I think this was
         | because the NOT instruction was used for logical inversion, so
         | the bit flip theory doesn't apply.
        
           | cpeterso wrote:
           | For example, the value of Visual Basic's "True" keyword is
           | -1. This seems silly from the perspective of a C programmer,
           | but -1 (0xffffffff) is "more true" than 1 because every bit
           | is true, not just the LSB. :)
           | 
           | https://learn.microsoft.com/en-us/dotnet/visual-
           | basic/langua...
        
             | bilekas wrote:
             | Even in VB there is a grain of rationale .. I never even
             | considered before WHY it was -1.. I always just thought it
             | was VB doing VB, but now I have gained +1 respect for Vb..
             | 
             | Edit: "Gained" no "Earned"
        
             | marssaxman wrote:
             | In the long-ago world where integers were commonly used as
             | arrays of bit flags, it made perfect sense that True = Not
             | False.
        
           | layer8 wrote:
           | The OP still wanted to only type a single character.
        
         | jareklupinski wrote:
         | tangential to 'how can a bit be wrong', when trying to see if a
         | serial data line is working, i write 0xA5 ( 1010 0101 ) to send
         | an alternating bitstream with a twist so i can test the
         | greatest number of things i think can be wrong at once
        
           | genter wrote:
           | Except that if you have the bit endian wrong, 0xA5 is the
           | same forward and backward.
        
             | jareklupinski wrote:
             | that's true! 0xAA 0x55 would work to differentiate that
             | case?
        
               | MadnessASAP wrote:
               | Yes, AA and 55 are common test patterns for a variety of
               | hardware.
               | 
               | Haven't seen A5 in the wild but I suppose it could be
               | useful as a initial "Let's setup a connection" where
               | endianness is unknown. Assuming the next thing that is
               | exchanged is an endian negotiation.
        
         | dboreham wrote:
         | No. Random bitflips (aka hardware that doesn't work) are a
         | relatively new thing. Bit flips due to buggy software was a
         | thing though. This is why most database engines checksum the
         | payload data even in memory. I've also seen network packets
         | corrupted because a bridge (former name for switch) trashed
         | data in flight, then reconstructed its CRC for the corrupt data
         | on the onward leg.
        
           | dvaletin wrote:
           | What you mean by relatively new? I observed bitflips a couple
           | decades ago, causing machine to panic.
        
           | bernds74 wrote:
           | I beg to differ. Early 90s there were some Amiga memory
           | expansions that would constantly flip bits. I'm pretty sure
           | it contributed to the sentiment that the system wasn't the
           | most stable, although I'm pretty sure one or two of my
           | friends with PCs saw similar issues on their machines. Maybe
           | Microsoft Word wasn't to blame for all the crashes?
           | 
           | Of course, trying to work around it in software is utterly
           | futile.
        
           | ziddoap wrote:
           | > _Random bitflips (aka hardware that doesn 't work) are a
           | relatively new thing_
           | 
           | This implies that old hardware _always_ worked, which I
           | strongly doubt (what year did hardware go from always working
           | to not?).
        
           | anonymousiam wrote:
           | SEE/SEU are not a relatively new thing. However, the
           | frequency of events is inversely proportional to the feature
           | size, which has been decreasing over time.
           | 
           | https://en.wikipedia.org/wiki/Single-event_upset
           | 
           | https://en.wikipedia.org/wiki/Die_shrink
        
         | egometry wrote:
         | Still is. And there's little to be done about it.
         | 
         | Unless you can stop cosmic rays.
         | 
         | Luckily it doesn't happen THAT often. I forget the exact metric
         | but I recall various Google Engineers saying that something
         | like one out of a million test run failures is a random
         | bitflip?
        
           | eichin wrote:
           | Cosmic rays were a _theory_ in 70 's era hardware for
           | failures that ended up being proven to be particles emitted
           | by the ceramic packaging itself. (Modern bitflips are have
           | more to do with component sizes several orders of magnitude
           | smaller.) (edit: not saying that cosmic rays aren't a problem
           | _now_ , just that they only _became_ a problem as chip
           | element sizes shrunk, _and_ they 're probably not the only
           | source.)
           | 
           | Also, you can definitely stop cosmic rays, that was part of
           | how they eliminated them as the source.
        
             | Supermancho wrote:
             | > Also, you can definitely stop cosmic rays
             | 
             | As I understand it, bit flipping in RAM is mitigated by
             | error correction, via auxilliary and redundant bits.
             | 
             | https://en.wikipedia.org/wiki/Dynamic_random-
             | access_memory#R...
        
             | buildbot wrote:
             | I swear there was a google paper about using a DC as a
             | really bad particle detector, but I can't find :/
        
         | scottlamb wrote:
         | > I have never heard of this convention before! Was "random
         | bitflips messing with your conditionals" a common problem back
         | in the day?
         | 
         | Due to RAM/CPU failures? I don't think so (though I have seen
         | it, fwiw). With weird serial protocols that don't have proper
         | checksums/digests, running over sketchy wiring? Yeah, and that
         | might be part of "very low-level code and hardware experience".
        
         | layer8 wrote:
         | No, this is more a case of "this could conceivably happen, so
         | why not guard against it where it's easy to do". Though
         | personally I would have used -1.
        
         | AnimalMuppet wrote:
         | To the degree that you were worried about such things, this
         | wasn't a real answer. Yes, it saves you if you have a boolean
         | variable... maybe?                 if (var == TRUE)         ;
         | // It was 7       else if (var == FALSE)         ; // it was
         | zero       else         ??? what do I do here?
         | 
         | And you need to solve that "what do I do here" for _every
         | single conditional on a boolean_ , and have the extra lines of
         | code to handle it and not crash.
         | 
         | But, you know, what if it was a variable that you used in a
         | switch statement instead? Or just "if (i > 17)"? Bit flips can
         | affect your logic all over the place, not just when it's a
         | boolean variable.
         | 
         | And then, if a bit flip can affect a boolean, it can also
         | affect a pointer. Or the return address on the stack (or the
         | link to the previous stack frame).
         | 
         | Or it can flip a bit in the code.
         | 
         | So this is, at best, a very very partial solution, and it's
         | non-trivial to implement. So this was very much not standard
         | practice or a "convention".
        
           | LordShredda wrote:
           | if var is neither this nor that then it's not a boolean
        
       | myth_drannon wrote:
       | I like to download images of old programming CD's from
       | archive.org, like Programmers Heaven[1] for example. All small
       | and interesing programs/tutorials to look at.
       | 
       | [1]
       | https://archive.org/details/Programmers_Heaven_InfoMagic_Mar...
        
       | TMWNN wrote:
       | Vernor Vinge's _A Deepness in the Sky_ depicts a human society
       | thousands of years in the future, in which pretty much all
       | software has already been written; it 's just a matter of finding
       | it. So programmer-archaeologists search archives and run code on
       | emulators in emulators in emulators as far back as needed.
       | <https://garethrees.org/2013/06/12/archaeology/>
       | 
       | You've made a contribution to the hoard that someone will benefit
       | from, whether tomorrow or in 5,000 years.
        
         | egometry wrote:
         | The part about the modern (read: far future) calendar being
         | commonly thought to be based on mankind's first moon landing
         | but ACTUALLY being based on the Unix Epoch is a favorite
         | amoungst engineers I know that love Vinge
        
       | ceva wrote:
       | why not somewhere on git? :(?
        
       | jhallenworld wrote:
       | I think his most impactful utility is ImageDisk: used to archive
       | floppy disks from many different types of computers using IBM
       | PCs.
       | 
       | Much of the old software found on bitsavers.org (and archive.org)
       | was recovered using this utility.
        
       | razster wrote:
       | Another link from DDS is Dave's Old Computers
       | http://dunfield.classiccmp.org/ , a nice treasure of old pc
       | reviews and images, (Left, right, front and back). This is
       | amazing as I've been working on making 3D assets for a project of
       | mine.
        
       | JaDogg wrote:
       | Very nice. Hope you enjoy your retirement.
       | 
       | ----
       | 
       | One last bugfix before retirement (this is a joke):
       | 
       | I wanted to look at micro-cad it generates a 404.
       | 
       | URL: https://dunfield.themindfactory.com/dnld/sc/MICROCAD.ZIP
       | Expected: I can download the .zip file.
        
       | bilekas wrote:
       | This is brilliant.. It's so interesting too because over the
       | years I've built up a few "Bibles" that I always need on hand
       | when working in a particular language or even just automation,
       | I've learnt some very good organising processes (from HN to be
       | honest), I never thought to 'release' them as they feel quite
       | personal and specific for my mental process.
       | 
       | Looking through some of these though, I think I'm inspired. Super
       | cool idea, I would donate to the retirement project financially
       | to say thanks if possible.
        
       | varjag wrote:
       | I regret not archiving my early code for good so much. First non
       | trivial program (a snake game). First utility in assembly. First
       | device driver (for a Centronics printer). That perpetual calendar
       | in Pascal for a uni assignment, written with enormous hangover
       | within an hour and still my only program written entirely bug-
       | free to the date. All seemed trivial and not worthy of
       | preservation then but in the end I have no code surviving from
       | before late 1990s.
       | 
       | Take good care of your code kids!
        
       | ai-epiphany wrote:
       | thanks for the tokens
        
       | bilekas wrote:
       | Quick question because I can't actually find any info on it, but
       | what license are these released with ?
        
         | fallat wrote:
         | Did you seriously even look at the webpage?
         | https://dunfield.themindfactory.com/dnld/sc/COPY.TXT It's right
         | at the top man.
        
           | nick238 wrote:
           | Though because that license says "for any reasonable purpose"
           | it's something that's vague when it comes to "is this FOSS"
           | as it's vaguely Crockford-like ("this software shall be used
           | for Good, not for Evil").
           | 
           | The [OSI requires](https://opensource.org/osd/):
           | 
           | > 6. No Discrimination Against Fields of Endeavor > The
           | license must not restrict anyone from making use of the
           | program in a specific field of endeavor. For example, it may
           | not restrict the program from being used in a business, or
           | from being used for genetic research.
           | 
           | [GNU/FSF](https://www.gnu.org/philosophy/free-sw.html) have
           | as "Freedom 0":
           | 
           | > The freedom to run the program as you wish, for any purpose
        
           | bilekas wrote:
           | So honestly I didn't read the "COPY.TXT" .. I wouldn't expect
           | a license to sit there, and I didn't consider that a license
           | personally, I was expecting a defined license.
        
       | jcmoscon wrote:
       | You have the same name as the billionaire guy. Are you him? :)
        
       | accrual wrote:
       | I downloaded RINGSW.ZIP to check it out.
       | 
       | > This file is NOT included in the demo version of this product.
       | 
       | > For more information, please contact Dunfield Development
       | Systems
       | 
       | I admire the effort, but if you're not going to make the source
       | freely available, what's the point? What is somebody going to do
       | 100 years from now when they get your .zip off archive.org and
       | you're long gone?
        
       | asdefghyk wrote:
       | THere are reasons not to host on GitHub . There are workarounds
       | to hosting on GitHub Google words why not put software on git hub
       | Finds https://sanctum.geek.nz/why-not-github.html OR
       | https://www.wired.com/2015/06/problem-putting-worlds-code-gi...
        
       ___________________________________________________________________
       (page generated 2023-11-03 23:00 UTC)