7 ms·
'I'm running a Mud so I can learn C programming ' (1993)
- forgetfreeman 2y agoRelated: I wrote a MUD engine and worldbuilder when I decided I wanted to learn Node.
- emil0r 2y ago'vi' 'emacs' 'jove' -- use whatever editor floats your boat but learn the hell out of it you should know EVERY command in your editor Those who picked emacs from that list never got the point of writing any code for the MUD. They greatly contributed to OS development all over the world however.
- deleted 2y ago[deleted]
- LeFantome 2y agoAmazing that they wrote this wonderful, detailed rant without mentioning Windows at all. VMS was certainly not the most popular OS or even most popular non-UNIX OS. I mean, this is 1993 and they did mention DOS. But reading this, you would not know that most of those DOS machines were running Windows and that they were far, far more numerous than either UNIX or VMS. And Windows NT was already released when that was written. Not that I am a Microsoft apologist. My main machine was OS/2 back then, I was already using Linux, and ( if I had the money ) NeXTstep would have been my dream platform.
- retrac 2y ago> reading this, you would not know that most of those DOS machines were running Windows and that they were far, far more numerous Why not include the microcontroller in microwaves, too? Because those aren't real computers. (All in good fun! I don't endorse such an opinion, but it would have been common among both VMS and Unix users at the time. After all those PC OSes don't even have networking or preemptive multitasking.)
- fsckboy 2y agoyou see the email addresses in the document? in 1993, not many Microsoft Windows users had email addresses. It was prehistoric times for them, and their histories were not saved. Nobody knew what the Who's down in Whoville were doing.
- bcoates 2y agoLots of windows users were on the Internet or otherwise online, but the form it would take was pulling up ProComm and dialing into an isp, fidonet bbs, compuserve, etc. You didn't need to have a local TCP stack running to use email, ftp, etc. You'd just have a shell account somewhere and/or use dedicated dialup tools
- floren 2y agoThe first version of NT was released July 27, 1993. This document was published August 1, 1993. What valuable first-hand programming-on-NT information would you liked them to have included about an OS that had been available for 4 days?
- cenamus 2y agoWell Windows existed before NT didn't it? Don't know how much people cared for it though at that point
- duskwuff 2y agoWindows 3.1 provided no services which would have been relevant to MUD development. It didn't even have a networking stack - Trumpet Winsock was a third-party addon, and wasn't compatible with Berkeley sockets.
- pjmlp 2y agoWindows 3.0 was the first that really mattered, and you needed at least an expensive 386SX to run it. A 286 could do it as well, but then you wouldn't be able to use the new enhanced mode. The large majority of folks were still running straight MS-DOS. Also the games industry only adopted Windows after Windows 95, very few titles cared about WinG on Windows 3.1 / 3.11 / Win32s.
- skissane 2y ago> The large majority of folks were still running straight MS-DOS. My recollection is by 1994, Windows 3.1 was everywhere. My school had literally dozens of computers running it. It was on every PC at my father’s work. We had several computers in our house and they all ran it except the 286 we used to play games (which my dad ended up giving to his brother, since it was a big upgrade to the 8086 he’d been using to run WordStar) At home we didn’t run Windows 3.1 full-time, we’d exit to DOS to play games. But we’d use Microsoft Word to write assignments for school. I dual-booted into OS/2 2.0 because I was really into computers. Nobody else in the house knew what to do with it, and I didn’t know anyone else who ran it. After a while OS/2 got replaced by Slackware, and nobody else knew what to do with that either.
- pjmlp 2y agoIn 1993, not really. Not everyone was into Windows 3.x.
- duskwuff 2y ago> And Windows NT was already released when that was written. Windows NT 3.1 was released on July 27th; this document was dated August 1st. Basically nobody had a copy yet; even if they did, MERC wouldn't have run on it without substantial porting effort, as it depended on Berkeley sockets.
- uint8_t 2y agoDiku and most (all?) other MUDs were "BSD" socket-based. Windows did not even ship with a sockets layer (winsock) until 1994, with Windows NT 3.5, and it made its way to consumers with Windows 95. Merc did allow for compiling on Mac and MS-DOS, but in this mode reads and writes to the console, without a socket implementation. No multiplayer. See: https://github.com/alexmchale/merc-mud/blob/master/src/comm.c https://github.com/alexmchale/merc-mud/blob/master/src/comm....
- skissane 2y ago> Windows did not even ship with a sockets layer (winsock) until 1994, with Windows NT 3.5, and it made its way to consumers with Windows 95. A lot of people used third party Winsock implementations, e.g. Trumpet Winsock, under Windows 3.1. As a 1990s teenager I remember seeing it a lot. Even into the second half of the 1990s, because it wasn’t like all Windows 3.1 machines were upgraded as soon as Windows 95 came out.
- ok123456 2y agoWindows programming was not very accessible in 1993, and it was especially not very accessible for network programming. Making a Win16 application that was non-trivial and didn't crash spectacularly was wizardry. Network PC games of this era were written using DOS extenders and IPX networking.
- jjtheblunt 2y agowhat about Visual Basic?
- ok123456 2y agoWhile VB3 applications wouldn't crash, they were pretty limited and didn't look and feel like full Win16 applications. The requirement for vbrun300.dll was a sign that something was not going to be good. In 1993, there weren't many third-party controls. Any networking was accomplished through FFI.
- codesnik 2y agoMUDs are played over network or on a multiuser mainframe, in realtime. DOS (and windows) machines back then were single user and networks for them were rare, specialized and/or asynchronous, like BBS.
- Isamu 2y agoI tried running a server on regular Windows back then, it was too unreliable, constant hanging requiring reboot. Later I tried Windows NT for a server and it was on such a different level, no comparison. It worked like real operating systems should.
- drewcoo 2y agoNT4 released in '96. SP4 a couple years later made it really stable.
- bcoates 2y ago32-bit C programming on wintel systems in that era would have looked like using DOS extender/DPMI and would have been lumped under "MS-DOS" even if you were assuming the user was running Windows. (Even if your IDE was a Windows GUI program)
- derefr 2y agoFor quite a while after Windows already became popular, any program that did networking on IBM PCs still had to be an MS-DOS program. In 1993, (regular, consumer) Windows didn't really "support" networking; (limited) OS support for networking was something only available in Windows For Workgroups, which itself was something you'd only expect to find installed in offices, not on the kind of home PC owned by someone dialing into a MUD. I believe that you could run these networked programs in a Windows 3.1 OS DOS virtual machine, so you didn't have to reboot fully into DOS just to run them. But it makes sense, from the perspective of an author of networked software at the time, to think of IBM PCs as being "MS DOS machines." That's the abstraction the developer had to work against for that port of the software.
- em-bee 2y agohah, when my grandmother wished to get a computer (she was a volunteer secretary in a few organizations doing a lot of typing on a mechanical typewriter until then) grandpa sent me out to get it, and i chose some decent machine for the time and put OS/2 on it (and LaTeX). meanwhile i had linux on my own machine, and when the opportunity arose i used my student status to buy a discounted copy of OpenStep for the PC. a few years later i got my hands on a NeXT cube and a few slabs from a university auctioning off old equipment ;-)
- davidw 2y agoThe good old days when you could just hook up some hacked up C code to the internet and pray you caught all the potential exploits.
- pjmlp 2y agoWhen I started into UNIX, the MUDs we were running were based in Pascal actually, surprisingly in a C ecosystem.
- toast0 2y agoThere were a lot of Pascal based door games (including MUDs) for DOS based BBSes. I wasn't writing software back then, but I gather Borland Turbo Pascal was a nice way to work.
- pjmlp 2y agoUnfortunately they never did UNIX, the Pascal compilers for UNIX were rather lame, mostly ISO without much extensions. Probably P2C was the best, followed by gpc years later, and finally FreePascal came to be.
- evanelias 2y agoAlthough a majority of BBS games were indeed written in Pascal, the BBS MUDs tended to be written in C or C++. Most of these were MajorBBS/WorldGroup modules, which (if I recall correctly) only supported C / C++. For conventional BBS's running standard doorgames, there were only a few true MUDs (mostly on the later / post-dial-up time frame) and it varied a bit more, but I can say DoorMUD was definitely written in C++.
- drewcoo 2y agoPascal was the typical learning language at most schools before Java caught on.
- bluedino 2y agobefore Java was invented I got my first compiler (Turbo Pascal 2.0!) from a friend's mother who was taking CS classes at the local community college. It ran on her Tandy 1000, I'm not sure what they wrote programs on at her school but she always had stacks of greenbar paper with source code on them.
- 2y ago
- codesnik 2y agoI've played a MUD and accidentally learned Perl once.
- vundercind 2y agoI started playing computer games and accidentally became a programmer. I wasn't even trying to make games, just play them. Shit, I even tried not to become a programmer, but people kept offering me jobs that paid enough that it was hard to say no. At some point it's like... grad school and some career I want at poverty wages and having to work hard to find employment at all, or stare at glowing screens for the next few decades but just have high-paying jobs thrown at me based on stuff I picked up by accident?
- tashian 2y agoI learned C by running a MUD — a DikuMUD derivative. I was in high school, in the 90s, and I didn't know any programmers in my town who could teach me how to really code. My high school computer science teacher didn't know. What I loved about the MUD as a learning environment was the players. On a busy night we'd have over a hundred people playing. So, I got to cut my teeth on a real, live production system with actual users. That motivated me. There were mild consequences if I broke things. And, if I made things better for the players, it felt good. For me, this environment was so much better than doing programming problem sets by myself, writing code that no one would ever use. https://tashian.com/articles/how-i-learned-to-program/ https://tashian.com/articles/how-i-learned-to-program/
- Echo4309 2y agoDitto... loved me those old DikuMUD variants. Cut my own teeth on Shadows of Isildur!
- mentos 2y agoI was in highschool in the 2000's and learned C# working with the RunUO emulator for Ultima Online which MUDs were the predecessor for. I always thought a programming class with assignments to add spells/new weapons/quests/etc on a shared class server would be great.
- iwontberude 2y agoOver 100 simultaneous users is quite the success for a MUD back then and especially today. I also learned C by forking DikuMUD too, it was so accessible and easy to tweak.
- dekhn 2y agoI learned C by writing a MUD client around '87-89. This was for VMS, where the telnet client didn't properly handle newlines and carriage returns, which made telnetting into a mud (tinymud at CMU mainly, then chaos and a few others) painful. I recently dug up the code (it was still online somewhere) and had a laugh.
- hinkley 2y agoMy friends group got really good at Unix filesystem permissions at a time when people were having to be cajoled into using email. Someone found a little space to stash programs and we had tcsh and tinyfugue among other things available to us.
- rascul 2y agoInterestingly enough, many MUDs don't actually explicitly support the telnet protocol (but some do). It just so happens that a telnet client would generally work, even if it wasn't the most suitable.
- andrewla 2y agoThis is how I got started, from a DikuMUD. I had met a couple of other people on Medievia and we decided to give it a go. I knew a tiny bit of C from an old pirated copy of Borland TurboC and just jumped right in. Great stuff -- I remember my proudest moments were adding color to the various system messages (vanilla Diku at the time didn't do that), and adding online level editing with saving; previously you had to create maps offline. Never contributed upstream (I was in high school and didn't even understand what that would mean), and eventually kind of drifted away from the community. But I got a ton of experience in just jumping in and working in C.
- legohead 2y agoMUDs are how I began programming, about 30 years ago at the age of 16. Now I'm a senior engineer making mobile games. Unsurprisingly I focus on the backend. MUDs taught me C, devops, multiplayer/sockets, security to some extent, databases (I wrote my own MUD that used MySQL). Also HTML/webpages eventually. MUDs taught me the full stack.
- bitexploder 2y agoSimilar story here! They are great platforms to create and explore with. Built up CircleMUD 1995-1999 here.
- unshavedyak 2y agoI began with a MUD too. Though for me it was.. mIRC scripting of all things lol. I knew nothing of programming and spent many, many hours learning patterns through brute force obsession. I wonder what would have been of my life had i not encountered mIRC.
- Terr_ 2y agoIn terms of "games as an entry into programming": The first-person shooter Starseige:Tribes (1998) had strong scripting support for both server-side gameplay mods and for client-side conveniences. For example, many gameplay mods allowed players to dynamically place new entities (walls, platforms, turrets), and if your team was too competent and you got bored guarding the flag you put on an a client-side script to play Tetris in a custom HUD.
- Blackthorn 2y agoLPMUD taught more people how to code and more effectively than basically any online educational environment I can think of, and it did it without people even realizing that's what they were learning.
- em-bee 2y agoi also learned LPC in an LPmud. unlike other MUDs it had a built-in ftp server, and ed. i learned concepts like trampolines and blueprints, which i later learned were closures and classes. and i learned about inheritance and objects. conveniently, objects in an LPmud are real tangible objects like a dragon or a sword. remember those dumb sounding introductions to OO programming, like class dog, inherits animal? in LPmuds you really have examples like that: class dwarf, inherits NPC, or class sword, inherits weapon. one of the features that LPmuds needed was the ability to update objects from changed classes/blueprints at runtime without restarting the server so that the wizards could work on the game while others were playing it. it was coding in production, but usually the areas in development were closed of to regular players. but you can imagine how robust LPmuds and LPC had to be to enable that. then the web came up and i was looking for a better webserver than the ones from NCSA and cern. i discovered spinner. and to my surprise i found that it was written in uLPC, a rewrite of LPC. spinner was renamed to roxen, and uLPC was renamed to pike. spinner/roxen had modules that were easy to write: class mymod, inherit SomeModuleType, do stuff. roxen modules were objects that got instantiated each time a http request was made. the http request object would call them in some order and let them do their thing and add data to the response object. i wrote many such modules to customize the behavior of my websites. one morning i woke up and realized what OO programming really meant because i understood how the different objects interacted with each other and encapsulated things. until then i had only been going through the motions because that's how i learned to do things, but i didn't know why. roxen also was able to reload modules from changed code at runtime. (remember the LPmud ability to reload objects? it's the same feature. in roxen it was a bit weaker because it only applied to new instances, but that was intentional, because unlike LPmuds, in roxen objects were short lived anyways) fast forward almost a decade and i discover open-sTeam, an object storage server written in pike, using MUD concepts internally. it had rooms and doors/gates to connect them. users logging in had an inventory and could pick up and drop documents like objects in a MUD. it also had object level access control. the developers said they chose pike because it was the only language that allowed them to implement this kind of access control. and here too, like an LPmud open-sTeam has the ability to reload objects with new class code. and unlike roxen it does so for existing objects too. i am still using open-sTeam to build my websites today, after modernizing it by adding a REST API combined with a modern frontend framework. and i can do live coding while the server is running. for my own websites i do that in production. for client websites i keep a separate dev server. although, since the server is so rich in features i rarely have to do any custom backend coding. most of the work in in the frontends now.
- midnitewarrior 2y ago> GET THIS STRAIGHT: 'VAX' IS NOT AN OPERATING SYSTEM. It's the name of a family of computers from DEC. There are plenty of Vax'es running VMS, and there are even more Vax'es running Berkeley Unix or Ultrix. The Vax'es running Unix have a lot more in common with other machines running Unix than they have with Vax'es running VMS. GET THIS STRAIGHT: 'VAX' IS A CPU ARCHITECTURE AS WELL AS THE NAME OF SOME COMPUTERS CREATED BY DEC. The plural of "Vax" is "Vaxen". (https://en.wiktionary.org/wiki/VAXen https://en.wiktionary.org/wiki/VAXen
- nickt 2y agoAlongside the Unix boxen. http://catb.org/jargon/html/B/boxen.html http://catb.org/jargon/html/B/boxen.html
- debo_ 2y agoI remember reading this guide as a Medievia and small-communitt dikumud player in the early 2000s. It was zipped up with a few other guides, including Beej's socket guide iirc.
- sjburt 2y agoReally curious about this: > If you have access to a program named 'Purify' ... learn how to use it. Anyone know what this was or use it?
- kstrauser 2y agoIt's a memory debugger, in the same class of things as Valgrind: https://en.wikipedia.org/wiki/PurifyPlus https://en.wikipedia.org/wiki/PurifyPlus Fun fact: it was written by the cofounder and chairman of Netflix.
- filchermcurr 2y agoIt's kind of like Valgrind and was (is? I'm not sure.) used for finding memory leaks.
- mathgeek 2y agoQuick google suggests it was https://pages.cs.wisc.edu/~hasti/cs368/CppTutorial/NOTES/PURIFY.html https://pages.cs.wisc.edu/~hasti/cs368/CppTutorial/NOTES/PUR...
- stevesearer 2y agoPlaying a MUD was the reason I started making websites so my friends could "easily" share equipment stats with each other without needing to scan them in the game.
- belthesar 2y agoI think this highlights one of the tenets that I try to advocate for when folks ask me how to get started on some sort of computer science journey. Find a thing that interests you, and work to make that. Whether it's working on a game (from scratch, a mod, whatever), building a hosting platform, writing a little utility to make your life easier, making a website, picking a project that has problems you are motivated to solve does wonders to help you through the initial suck of getting started. And as Jake the Dog says, "sucking at something is the first step to being kinda good at something", so anything that helps offset the suck can be essential.
- FredPret 2y agoI wrote thousands of lines of spaghetti Python code this way. Finally, doing things the right way no longer seems like overthinking but instead a massive timesaver longterm.
- efsavage 2y ago> === How to Learn in the First Place > > (1) Play with something. > (2) Read the documentation on it. > (3) Play with it some more. > (4) Read documentation again. > (5) Play with it some more. (6) You're starting to learn it! Now fix the documentation
- mfontani 2y agoI started "real" programming with MUDs, and after a hiatus I'm still helping run a C-based MUD, and it's awesome. Much water has passed under bridges, yet there are dozens of us even creating new ones and doing all sorts of weird things with this great hobby. The Multi User Dungeon discord is nowadays the place to meet like-minded people who like, or code, or balance, or design, or write or use clients for, MUDs. Join us at https://discord.gg/multi-user-dungeon-279748146316312576 https://discord.gg/multi-user-dungeon-279748146316312576 IAC WILL MUD
- hinkley 2y agoThe first production lines of code I wrote was fixing SO_LINGER on diku so that we could restart the server if someone shut down their computer without disconnecting properly. Later I wrote a string intern() function for a highly modified MUD that was having memory issues. But they balked at the complexity of having to use a malloc/free replacement even after I made the arena logic dead simple :/ Also the first implementation of a Slab allocator I ever read about, by a wide margin, was in LPMud, which one of my roommates and a friend were into. I wouldn't hear that concept again, unless I brought it up, for a decade or so.
- Sohcahtoa82 2y agoBack in like 1996 I tried to write a MUD using Visual Basic when I had no idea how classes and objects work, but I understood arrays and how to use "Redim Preserve" to change the size of an array while keeping its contents. So any time something needed to make a reference to something else, I stored the index of where that thing was in another array. It made code EXTREMELY ugly. No data structures, just lots of arrays. Instead of something like "player.health = 100", it was "playerHealth(playerIndex) = 100". If I wanted to make a player hit a monster, it was like "monsterHealth(playerTarget(playerIndex)) -= playerStrength(playerIndex) + weaponDamage(playerWeapon(playerIndex))" Awful and unmaintainable.
- flomo 2y agoA lot of production VB apps were written the same way. Array was the only data structure.
- throwaway314155 2y agoOkay, I'll ask - what's a MUD?
- vinyl7 2y agoMulti user dungeon...text based mmorpg usually played through telnet or a specialized application
- throwaway314155 2y agoThanks
- beaugunderson 2y agoSome of my first programming experience was using the language inside of a MUSH (TinyTIM to be specific, based on TinyMUSH but heavily modified). Interactive experiences could be built up using the rudimentary logic afforded. Found this repository of MUSH code if anyone is curious what it looked like: https://www.mushcode.com/ https://www.mushcode.com/ Modifying Eggdrop (the IRC bot written in C) was another project that contributed to my early understanding.
- cxr 2y agotim.org is still online. Originally started by Jason Scott of textfiles.com and now at archive.org. I'm convinced the Slack-killer is going to be a user programmable MUSH.
- beaugunderson 2y agoThat's what Slack kind of started out as right? (it was a multiplayer game)
- cxr 2y agoSlack was born out of the (second) attempt by Butterfield to build a game. But Slack didn't start out as a game; there was a game being built, and it didn't evolve into Slack—they productized their internal comms (a separate thing that they built and were using in the course of making the game).
- filchermcurr 2y agoMOOs have been around forever and are like more-easily programmable MUSHes. Educational institutions loved them back in the day. There's even still development of the MOO server, active social MOOs, websites running MOO as the webserver... lots of fun stuff! If there's any interest: Archived MOO knowledge: https://lisdude.com/moo/ https://lisdude.com/moo/ Modern MOO server: https://github.com/lisdude/toaststunt/ https://github.com/lisdude/toaststunt/ Active social MOO: https://chatmud.com/ https://chatmud.com/
- freediver 2y agoSpent 4 years writing a MUD during my college years (yes in C), eventually dropping out of college as this was just so much more fun.