Naming libraries

This is an archive of a topic from NESdev BBS, taken in mid-October 2019 before a server upgrade.
View original topic
Naming libraries
by on (#160134)
Phil Karlton has claimed that the two hard problems in computer science are cache invalidation and naming things. (Leon Bambrick added off-by-one errors, but I consider that a subtype of naming things.) How do developers come up with names for programming libraries, such as FamiTone or MUSE? I ask because I plan as my next project to polish and package some components of my old NES games as a library for others to use, but it'll need a name. I tried Google, but that came up with irrelevant results such as naming buildings where people can borrow books, coming up with filenames given a library name, or coming up with function name prefixes given a library name.

A bit later, I found the naming chapter of Producing Open Source Software. What else should I know?
Re: Naming libraries
by on (#160140)
my names for things are horribly generic, like "freemco NES Corelib" and "freemlib for Neo-Geo". Not really sure what to do about catchy names, since I prefer names that explain themselves...
Re: Naming libraries
by on (#160141)
What's in a name? that which we call a rose
By any other name would smell as sweet;
(Romeo & Juliet, Act II, Scene II -- William Shakespeare)
Re: Naming libraries
by on (#160149)
As long as you don't call it Yet Another $X $Y , you haven't gone too far wrong.
Re: Naming libraries
by on (#160150)
It's trendy give things arbitrary names that have nothing to do with the thing. Examples: Chrome, Apache, or tangerine, a bank:
http://www.tangerine.ca
Re: Naming libraries
by on (#160159)
Among open source projects I think it's painfully common with really bad names that are:

    Hard to pronounce, often made up by lots of consonants and or numbers that doesn't even mean anything, and doesn't become a pronouncable word.
    Hard to remember, often due to the above
    Just plain ugly

Often all of the above. I can't think of an example of this right now though.
Re: Naming libraries
by on (#160165)
The naming of libs is a difficult matter, it isn't just one of your holiday games; You may think at first I'm as mad as a hatter when I tell you a lib must have three different names.
Re: Naming libraries
by on (#160166)
One method you can use is to think of some words related to the content matter, and then "corrupt" them in some way. That's basically what I did with "Ngin" (derived from "engine", but also the "N" can be thought to refer to Nintendo/NES). If one were to do some branding, there are some options with the obvious connection from "gin" to the drink, but "gin" is also Japanese for "silver" (well, at least based on my limited knowledge of Japanese).

Googleability is of course a plus.
Re: Naming libraries
by on (#160167)
I don't know completely, but I can say what I do know. Note also that some software has old names which might now be considered as misleading or the name doesn't quite fit or something, even if it did in the past.

Here is a list of some free/open-source software packages:
  • Swiss Ephemeris: This is easy; it is ephemeris software that was invented in Switzerland. (I have also heard of "Dutch Ephemeris" but it seems to be far less complete than Swiss Ephemeris.)
  • SQLite: A public domain SQL implementation.
  • AmigaMML: Originally the output was in Amiga format, even though now there is an option for PC format as well (which is the mode I mainly use now); so the name is kept for historical reasons.

I think Knuth (was it Knuth?) was mentioning about naming variables and subroutines and so on in a program; if you have the book "TeX: The Program" then you can see how he does it.
Re: Naming libraries
by on (#160171)
A simple acronym, or relatively descriptive name will usually suffice.
The "VERGE" engine comes to mind.

Of course, silly/potentially offensive names (like SCUMM) are more fun.
Here's a suggestion:
(A) (R)elatively open-(S)ource (E)ngine
Re: Naming libraries
by on (#160172)
Alp wrote:
A simple acronym, or relatively descriptive name will usually suffice.
The "VERGE" engine comes to mind.

Of course, silly/potentially offensive names (like SCUMM) are more fun.
Here's a suggestion:
(A) (R)elatively open-(S)ource (E)ngine
Yes, acronyms; I forgot that too, but that last example doesn't really even describe what the program is for. (Another example (of one of my own programs) is "ZORKMID", which stands for "Zork Machine Interpreter and Debugger". There are probably more examples (whether or not it is software I wrote) although I cannot think of them right now.)

Another thing is name software after yourself; apparently Torvalds named both "Linux" and "git" after himself.

Dwedit wrote:
...when I tell you a lib must have three different names.
Why?
Re: Naming libraries
by on (#160173)
Pick a random word and just roll with it. Grumble, Grmbl, Gurmble, Gubble, Gumple, etc. You can even use non-English words as a starting point, and nothing has to mean anything, because it's going to mean your library. :P

You can also just name it after yourself, like teplib or pinolib, but that might be better used for something more widespread than a niche NES thing.
Re: Naming libraries
by on (#160181)
tepples wrote:
How do developers come up with names for programming libraries, such as FamiTone or MUSE?

I guess naming conventions are as different as the people, so there isn't really anything that you need to know. I mean, look at the names of professional programs:
On the one hand, we have Visual Studio, on the other hand, we have Eclipse.
Picture processing programs have names such as Paint, Photoshop or Gimp.
Text formats are either the Microsoft Word format or the Acrobat format.

It's totally different every time.

The creator of MUSE simply shortened the words "music engine", i.e. a pretty generic and straightforward name made recognizable.
His player is the MUSE Tracker, which is equally simple.
But before he renamed it, it was called "Porno Tracker". What the fuck? What does that have to do with anything?

If you ask me, I would suggest to use a name that's not too fancy, but not too generic. "NES Sound Library" is too bland. But the other extreme is people who try to be clever or tongue in cheek or use some pun or something that has nothing to do with the product:

WINE: "WINE Is Not an Emulator". (An acronym that creates another, yet unrelated word. Oh, and we used a recursion. We're so geeky.)

Fiddler: A program to log web communication. (Isn't a fiddler someone who produces noise and not someone who records other people's noise?)

Kaffe: A virtual machine for Java. (Because get it? The island of Java is associated with coffee. So, we use a dialectic version of the German word for coffee for a product that has to do with the programming language Java. Get it? Get it? We're just as clever as the guys who did NetBeans. You know? Beans. Like in coffee beans. For a Java IDE. Java: Coffee: Coffee beans. Get it?)


So, I would just suggest to find out what's the main "selling" point of your library and make a name out of it that doesn't sound too stupid, but still unique enough:
fceux: The extended edition of the ultra version of the Famicom emulator.
Re: Naming libraries
by on (#160185)
Unity: Is it a 3D game engine, a dependency injection container, or a netbook-inspired desktop environment?

Xfce: Is it an extended Famicom emulator? No, it's a desktop environment for X Window System. The emulator is FCEUX, though I run it under Xfce.

So anyway, thanks for the tips. I found another:

List words that describe attributes associated with the library. Open the Wiktionary page for each and scroll to the translations section. Find two words with the same sound shape. For example, if something lets you play loops and play five of them at once, you could take Polish pętla (pronounced pentla) meaning "loop" and Greek πέντε (pronounced pente) and mash them up.
Re: Naming libraries
by on (#160192)
DRW wrote:
Fiddler: A program to log web communication. (Isn't a fiddler someone who produces noise and not someone who records other people's noise?)

To fiddle with something means to play around with or manipulate something. Fiddler lets you modify the traffic if you want to. The Fiddler website description tag for search engines says:

Fiddler is a free web debugging tool which logs all HTTP(S) traffic between your computer and the Internet. Inspect traffic, set breakpoints, and fiddle with incoming or outgoing data.
Re: Naming libraries
by on (#160193)
DRW wrote:
But before he renamed it, it was called "Porno Tracker". What the fuck? What does that have to do with anything?

If you really want to know, the word "porno" was meant in the sense of "cool" (i.e. http://www.urbandictionary.com/define.p ... id=2367596). It's more of a Finnish thing though, one could say "aika pornot kengät" to mean "pretty cool shoes" (you wouldn't hear that from older people, though). That's also why it is (was) "porno tracker" and not "porn tracker"; "porno" is a Finnish word.

In addition, I had originally no plans to release the tracker, so it was just a funny (YMMV) internal codename.
Re: Naming libraries
by on (#160200)
O.k., looks like some of these names have more meaning than I thought.

@thefox:
One thing that I'd like to know about MUSE and MUSE Tracker:

Quote:
Internally MUSE, like Musetracker, works at PAL 50 Hz update rate.

When NTSC_MODE flag is set with MUSE_setFlags, MUSE will skip sound
updates on every 6th frame, resulting in an update rate of 50 Hz
even on NTSC.
Music note frequencies are also adjusted, but sound
effect frequencies are not.


Why did you do this? Firstly, why do you use PAL as the master in the first place? And secondly, why is the NTSC version some hack (skipping sound output on every sixth frame)?

In my opinion, if there's any hack at all, then it should be applied to PAL, with NTSC being the native format. Because the NTSC NES is the original version. The PAL version is just some alteration. Almost all games were made for NTSC first and then converted for PAL. There are only a handful pure PAL games.

After all, this is the real soundtrack of "Super Mario Bros.":
http://www.youtube.com/watch?v=_9bB7r0M9kg
And not this:
http://www.youtube.com/watch?v=ulqS2JOGsb4

So, I never understood why people who write general purpose programs like an NES sound library use the PAL version as the master version just because they happen to come from a European country. The NTSC version is much more popular and it's the original machine.

My game will be an NTSC game because that's what I consider the "real" version of the console. Therefore, a library that uses PAL as the master and where NTSC is not implemented in an equal quality, but where NTSC uses the PAL version + a trick for compensation, this would be unacceptable for me. (For example, when I read this, I immediately wrote Shiru to ask how he does it in his library. Fortunately, FamiTone uses NTSC as the master. Otherwise I would have needed to find a new sound lib.)
Re: Naming libraries
by on (#160203)
DRW wrote:
There are only a handful pure PAL games.

As I understand it, MUSE was created for one of said handful: the demo High Hopes.
Re: Naming libraries
by on (#160204)
DRW wrote:
Why did you do this? Firstly, why do you use PAL as the master in the first place? And secondly, why is the NTSC version some hack (skipping sound output on every sixth frame)?

Again, mostly historic reasons. I primarily made the tracker to use it in a PAL demo (High Hopes) I was making at the time. (I only had a PAL NES back then, if I was making a demo nowadays I'd probably target NTSC.)

As for skipping, it seemed easier/less problematic to me to skip the update on NTSC rather than update twice per frame on PAL (I think NerdTracker II player does this.) Neither method is problem-free, they do cause some choppiness in the audio. There are other ways, but really it depends on what kind of music format is used. I think FamiTone does it by adjusting some kind of an internal tempo variable.

Quote:
In my opinion, if there's any hack at all, then it should be applied to PAL, with NTSC being the native format. Because the NTSC NES is the original version. The PAL version is just some alteration. Almost all games were made for NTSC first and then converted for PAL. There are only a handful pure PAL games.

I actually did add an NTSC format export option into Musetracker but never released it. Basically it will export the audio with NTSC timing, so the music plays back at the correct speed without the NTSC flag.

For any future games I'm planning to just re-export the data for PAL/NTSC separately and not bother with any automatic adjustments.

tepples wrote:
DRW wrote:
There are only a handful pure PAL games.

As I understand it, MUSE was created for one of said handful: the demo High Hopes.

High Hopes actually didn't use MUSE, it used another player I wrote at the time, but yeah that is the reason for it being PAL-oriented.
Re: Naming libraries
by on (#160206)
thefox wrote:
As for skipping, it seemed easier/less problematic to me to skip the update on NTSC rather than update twice per frame on PAL (I think NerdTracker II player does this.) Neither method is problem-free, they do cause some choppiness in the audio.

If I did such a program, I would simply let the user decide whether he wants to use NTSC or PAL. I wouldn't bother to do an all-purpose version at all.
Maybe as an additional feature. But for a start, the user would have to choose manually: PAL or NTSC. And then the song would be saved in this format natively. No tweaking necessary.
If the user wants to use the same file for both formats, then such an automatic on-the-fly tweaking could be included as an additional option. But the default value would be that the program saves the song in one format and doesn't care for instant compatibility with the other format.

I assume most ROMs will be in one format anyway, so, the fact that the tracker can record each format natively is probably more important than the fact that the tracker produces one file that can be used unaltered in bot formats.

thefox wrote:
I think FamiTone does it by adjusting some kind of an internal tempo variable.

FamiTone has an option for PAL or NTSC, so I assume it doesn't do adjusting at all and just converts the absolute time values in milliseconds back into either 50 or 60 frames per second when the file is saved. But I'm not sure.
Re: Naming libraries
by on (#160211)
DRW wrote:
thefox wrote:
I think FamiTone does it by adjusting some kind of an internal tempo variable.

FamiTone has an option for PAL or NTSC, so I assume it doesn't do adjusting at all and just converts the absolute time values in milliseconds back into either 50 or 60 frames per second when the file is saved. But I'm not sure.

I was talking about FamiTone2, actually. There's a switch in the init routine for PAL/NTSC.
Re: Naming libraries
by on (#160213)
Oh, right, I was confusing Tone with Tracker.

Yes, it has a switch to adjust it. However, in this case, NTSC is the native format that doesn't need any adjustment with PAL being the converted version. Which is fine for me since my game is NTSC-only anyway.