Basics of the Unix Philosophy
faqs.org
faqs.org
I'm fairly certain a collection of tools for working with various media would be much better than the iTunes model. It is clearly the worst Apple software since it tries to fit everything into a one click trojan horse for installing on Windows and yet the mainstream Linux alternatives all cargo-cult the basic interface with no obvious signs they understand why all that functionality is bundled into one program.
Part of the problem is that many people who switched to Linux to get away from Windows don't understand Unix, and tend to expect (and implement!) programs that are based on the Windows GUI model. Unfortunately, it's poorly suited to designing programs in the Unix style. This leads to monolithic GUI programs that will only work if you're already using GNOME / KDE / etc., rather than programs that take advantage of existing the Unix programming infrastructure. (This seems to be less of a problem in the BSD community.)
It's possible to write a separate GUI interface wrapper for programs whose primary interface is a command line or C API, but the Windows programming culture doesn't seem to emphasize keeping them as separate layers the way that Unix does.
But mpd has one crushing flaw: no ratings! I don't know how people live without them.
I'm hoping sometime soon xmms2 will become stable enough to be useful, as it's supposed to have some sort of ratings support, and is build around the same kind of philosophy that mpd and Unix have.
Many plan9 programs post a file tree which you can manipulate with regular Unix tools - Acme's are described here - http://man.cat-v.org/plan_9/4/acme
for instance, if I name this shell script C
#!/bin/rc
tags=`{cat /mnt/acme/$winid/tag}
s = `{echo $tags(1) | sed 's/\.c$//'}
8c $s.c && 8l -o $s $s.8
And middle click on a 'C' in the tag bar (or anywhere in the window) and the filename ends in .c, it will be compiled and linked for me. The /mnt/acme/$winid/tag is exported by Acme which provides a file tree to all of its windows.Other similarly behaving programs in the distribution (including the windowing system) are described in http://man.cat-v.org/plan_9/4/
I use Emacs, but my ideal editor would mix Emacs's general buffer and mode extension model with vi-like keybindings, and use Lua as an extension language. Life is too short to write yet another editor, though.
So look around.. you might find something close to what you're looking for.
Thing is, I don't want to add yet another layer on top of either Emacs (!!!) or vim. Both have waaaaay too much cruft as-is. (nvi isn't as bad.) I think the buffers-and-modes extension model in Emacs and vi's modal, primarily single-key interface are good ideas, though, and I don't see any reason why they couldn't be combined. I've also looked at uemacs, vile, and the like, but haven't found one that suits me. In the mean time, Emacs is good enough for me.
It operates as a OS daemon -- therefore without any UI per se. It is controlled it using a text-based protocol over TCP/IP.
Usually, the user controls it via UI frontend that can be graphical, text-based or what have you. And you can have as many of those as you like (for instance one for xwindow, another for command line, third that shows you what is currently being played, fourth for album art and lyrics...)
If you're looking for a simple GUI audio player, I recommend it, although I'm not really sure how closely it follows this philosophy.
One quick test is if you can see another program using it directly. The reason Unix programs typically have such an austere interface is because it makes it easier to use them from another program (which may be a nice interface).
There seem to be parallel ideas in RESTful web design.
It's not command-line only like most Unix programs, and it's certainly not as simple as most Unix programs, but I do think it does incorporate some of the tenets of Unix philosophy (most importantly: doing one thing and doing it well).
I realize that there's other music playing software that may conform to Unix philosophy more rigidly, but in my experience good back-ends don't necessarily translate to good GUIs, and a GUI is what I want for my media player. I think Decibel is a good compromise.
A great deal of Unix prefers the latter to the former - eg, hunting for a regex to identify some data rather than being provided with something which properly separates the data from the presentation.
Object pipelining shells (powershell) and higher level shells (ipython) get this right.
I still think it's a good idea, but even the success of powershell (how often do you hear of someone actually using it?) says it's not going to go anywhere.
More seriously, I have no doubt that many Windows admins are using it, but it's not likely too many typical Windows users even know what it is.
You wouldn't stream video data as text, but that's because there are other major factors that make doing so an unreasonable trade-off.
Question is "how much" design for the future is necessary today. The basic rule of thumb that I follow is to ensure that necessary means of abstraction have been applied and are in place today so that tomorrow we can extend without reworking all the parts.
I'd rephrase rule 17 as "Don't paint yourself into a corner.". It's easy to waste time overgeneralizing a program before you have a clear idea how it will actually be used. The emphasis on prototyping also keeps this in check, though.
It's been my experience that "future proof" code tends to be filled with this stuff, and that the cost of all this chaff is vastly higher than the authors think it is when they write it.
I think perhaps it means more like "don't make your Epoch 32bits long, it'll soon be 2038" oh
Unix: Rule of Diversity: Distrust all claims for “one true way”.
Python: There should be one—and preferably only one—obvious way to do it.
Well.. I'm comparing an OS with a programming language.
I don't think they necessarily have to clash -- you may have multiple ways but one would be obvious in a given situation.
Not to say it's a bad thing.
http://interviews.slashdot.org/article.pl?sid=04/10/18/11532... question 8
While Pike doesn't mention it explicitly, I think the issue is that the context for "one tool per job" shifted from the shell (with Unix itself doing process management) to the Python runtime, the JVM, etc. This has its advantages and disadvantages. Working at the level of different processes, each can be written in its own language and rely on simple interfaces such as text-streams or structured files for communication. Within other contexts, everything can work with the same object system, process supervisor infrastructure, etc.
Let's not throw the baby out with the bath water. Code reuse is good, and so is doing things well.
See "cat -v considered harmful" (http://gaul.org/files/cat_-v_considered_harmful.html). GNU just does bloat bigger and better. (Compare BSD make and GNU make, for starters.)
Better to have the separate program than everything to implement its own version, but having both isn't necessarily bad.
Nope, you can check the return value from the program(s) run inside of it and revert to the backup file if there's a problem. You really don't need it to be handled specifically by sed.
There's actually an example script that does exactly that in _The Unix Programming Environment_, called 'overwrite', on page 154.
At Microsoft I learned the truth about ActiveX and COM and I got very interested in it inmediately [sic]. Upon my return to Mexico Federico and I started to design a GUI control infrastructure for Unix that we code named `GNOME'.
"The Story of the GNOME project" http://primates.ximian.com/~miguel/gnome-history.html
or "How one man ruined everything"
The X server has to be the biggest program I've ever seen that doesn't do anything for you. - ken
The BSD user in me completely agrees; I'd just like to know if that's what you intended.
'cat came back from Berkeley waving flags' - Rob Pike