What makes a flawless efficient productive system? What goes into all those small things that make sticking to one OS easier than the other? What is behind those simple little tricks that you get used to in one OS that helps you work so much more faster than in another new system?
I want a system that will just stay out of my way and not make me think about it. But to not force people to think about anything requires careful thought into what works in the background silently and smoothly. There is of course the universal kernel and the efficiency of code of all bits and pieces of software. But an easier and more non-technical "everyone" way to dissect why one distro offers better productivity than the other is to look at the packages.
I am going to take a look at Crunchbang's packages and list them so that I can understand why that distro comes close to being one of the most perfect distros I have worked on. As usual, the easiest way is to just dissect the hard work already done by the experts. Omns (or Grant Galbraith) in his omns project blog puts together Debian systems all the time and writes post-install scripts for them. I am just going to extract commands from these scripts and put them down here. The difference will be I want to write my own descriptions for each package, why they are essential to the system and what they bring to the table in terms of making that distro a bit more "intuitive", all based on my limited understanding of linux systems.
I guess the goal is to learn not by building linux from scratch but by pulling apart a system that works well. And since I am working backwards, I am hoping to go from the superficial layers to the deep, first looking at the packages that form and work with the graphical interface and immediate enduser functions going down to what comprises the system itself. I probably won't be done in one day or even one year, but hopefully, this will be a useful exercise in understanding a bit more about linux systems that are better than others.
From part II: XFCE 4.8 on Debian Squeeze
- Set Repositories
wget
mv /etc/apt/sources.list /etc/apt/sources.list.bak
cp sources.list /etc/apt/sources.list
I usually do:
sudo gedit /etc/apt/sources.list
So what is his sources list...
(% means commented out since the # means something else on
(e:strip))
-- DEBIAN SQUEEZE
deb
squeeze main contrib non-free
% deb-src
squeeze main contrib non-free
-- DEBIAN SQUEEZE UPDATES
deb
squeeze-updates main contrib non-free
% deb-src
squeeze-updates main contrib non-free
-- DEBIAN TESTING
deb
testing main contrib non-free
% deb-src
testing main contrib non-free
-- DEBIAN UNSTABLE
deb
unstable main contrib non-free
% deb-src
unstable main contrib non-free
-- DEBIAN EXPERIMENTAL
% deb
experimental main contrib non-free
% deb-src
experimental main contrib non-free
-- MOZILLA
% deb
squeeze-backports iceweasel-4.0
-- DEBIAN SECURITY
deb
squeeze/updates main non-free
% deb-src
squeeze/updates main non-free
-- DEBIAN MULTIMEDIA
deb
stable main non-free
-- DEBIAN BACKPORTS
deb
squeeze-backports main contrib non-free
So I don't like firefox. Never have. I have always been an Opera or currently a Chrome fan. The Mozilla-ice-weasel needs to go in my set up.
- Setting up preferences
wget
mv /etc/apt/preferences /etc/apt/preferences.bak
cp preferences /etc/apt/preferences
This is something I don't know about. Something called apt-pinning. Omns has done a post about it that I need to read about. For now these are the preferences in the file we just copied:
Package: *
Pin: release n=squeeze-backports
Pin-Priority: 1001
Package: *
Pin: release n=squeeze-updates
Pin-Priority: 950
Package: *
Pin: release n=squeeze
Pin-Priority: 900
Package: *
Pin: release n=stable
Pin-Priority: 800
Package: *
Pin: release a=testing
Pin-Priority: 700
Package: *
Pin: release a=unstable
Pin-Priority: 600
Package: *
Pin: release a=experimental
Pin-Priority: 200
- Add Keyrings
This is to prevent the system from whining about "uncertified" and "untrustworthy" sources.
wget
dpkg -i debian-multimedia-keyring_2010.12.26_all.deb
- Update Repositories and Upgrade packages
sudo apt-get update
sudo apt-get dist-upgrade
I have noticed that an upgrade always breaks stuff in Crunchbang Statler. Probably an indication that that exact package collection only works with some older Debian components and not with the newer updates. I still haven't learnt how to pinpoint the source of the break.
- Base packages and applications.
sudo apt-get install
xorg --> the graphical interface.
gksu --> launches programs in graphical interface
gdebi --> enables double-click *.deb and install ability
file-roller --> an unzip/unrar/untar utility (does not play well with evince)
% why do I need all the compression programs under the sun?
lha --> lzh archiver
lzop --> fast compression program
rzip --> compression program for large files
unalz --> De-archiver for .alz files
zoo --> zoo archive extractor
xz-utils --> XZ-format compression utilities
p7zip-full --> extract 7zip archives
alsa-base --> sound server. Maybe replace with pulseaudio
vlc --> video lan player
audacity --> audio player. vlc is fine really.
libdvdcss2 --> ?
lame --> mp3 codec
gimp --> high end graphics program similar to Photoshop
ttf-freefont --> better fonts rendering. Absolutely essential!
ttf-mscorefonts-installer --> M$shit fonts that are not so shit.
gcolor2 --> ?
agave --> ?
gedit --> The "linux notepad" I like so much!
fortunes --> ?
fortune-mod --> ? (I have read this is important as a notification machine but I am not really sure.)
gedit-plugins --> ? Not sure which plugins these are, the ons that bring along different code highlighting and syntax highlighting maybe. I just need some eye-popping bright ones that may not necessarily belong to R but make error-spotting easier.
evince --> pdf reader. ver 3.0 has annotation support but still ages behind wine + pdf xchange viewer.
gcalctool --> ? calculator?
iceweasel --> weasel I hate (firefox).
gftp -->?
xchat --> irc client. useful for naggy questions in realtime.
transmission-gtk --> torrent client.
wicd --> I think network manager is better in terms of offering a bigger variety of connections. 3G, VPN etc
cups --> something to do with the printer?
cups-pdf --> pdf printing?
system-config-printer --> ?
hpijs --> ?
hplip --> ?
dmz-cursor-theme --> ?
gtk2-engines-murrine -- ?
tango-icon-theme -- ? do I need this eye candy?
gnome-colors --> ?
bash-completion -- ?
screen -- ?
cowsay -- ?
figlet -- ?
scrot -- ?
whois -- ?
rpl -- ?
conky-all --> system monitor. Don´t need this as I only use the clock, that xfce can provide.
zenity -- ?
gparted --> partition disks. Do I really need this?
xfsprogs --> ?
reiserfsprogs --> ?
reiser4progs --> ?
jfsutils --> ?
synaptic --> package installer. Useful sometimes when you don't want to mess around with command line.
ttf-bitstream-vera --> font
ttf-dejavu --> font
ntfs-3g --> ?
pcmciautils --> ?
parcellite --> clipboard manager. I this messes up gnumeric.
fontconfig-config --> ?
libcairo2 --> ?
firmware-linux --> drivers but not sure which ones
firmware-iwlwifi --> I need to compile and install my dear realtek here, this won't help. Atleast not in the current kernel where my wireless has not been integrated.
libreoffice --> current openoffice avatar. I don't need all of it. Maybe only writer, impress and math
libreoffice-gtk --> ?libreoffice related
- Clean up downloaded packages
sudo apt-get clean
- Install Xfce 4.8
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get -t testing install
xfce4
xfdesktop4
xfce4-power-manager
xfce4-screenshooter
xfce4-notifyd
thunar
thunar-archive-plugin
thunar-media-tags-plugin
thunar-thumbnailers
gvfs-backends
gvfs-bin
gvfs-fuse
xfce4-mixer
xfburn
terminator
- Clean up downloaded packages
sudo apt-get clean
reboot
Hmm.. quite a few question marks I need to fill out there.
I am glad you wrote that bit about "essential complexity". It translated SO WELL to what I was wondering about. The challenge now is to determine where the essential complexity lies. I am very unsure of whether I understand if I am capable enough of assigning this complexity.
I am constantly worried that I might expand on relatively simple things and gloss over complex things that really require more detailed analyses, thought and interpretation. It is directly related to the question, what is my central concern and objective when I look at this data? Am I presenting enough objective details to let my audience reach their own conclusions without relying too much on what are "known" facts or their intuitions (all of us make intuitive judgments about associations in data especially in medicine, for eg. oh, smoking must be always associated with everything bad. Oh, fat is always the worst part of the diet. etc. etc.) So the concept essential complexity comes in when you force people to take that extra effort to look at data in a different way and possibly take away some more clarity and objectivity in how they think about associations. That is the job of a well-oriented epidemiologist.
I don't know if I am there yet. So I find your insight fascinating and extremely pertinent.
Ah, I'm laughing at myself for reading so much of my own obsession into what you were describing that I made so many assumptions :)
Wow. that was amazing! Thanks. :) Believe it or not, I was not thinking about UIs at all. I was thinking about how best to present my findings at tomorrow's meeting with my advisor! I was thinking should I go all graphical or pages and pages of numerical data. I think I am shifting more and more towards a graphical view with numbers for only the nastier details.
I actually do agree with you a lot. The essential aim of any design should be getting out of the way and letting the use concentrate easily on the job at hand and getting it done rather that worrying about how it is going to be done and wasting time by tweaking the workflow of that job. your analogy of the rock as a unintuitive hammer is spot on. I think I might use that someday (and thank you in my mind!) :)
I want to come back and read that many times more to pick on more details. On the whole I think this is where Linux is faaar behind Macs or even windows. It's not user-friendly and makes you think TOO much about the mechanics and less about getting stuff done - at least in my case, as you probably noticed in my tangential linux post. I never thought like that when I was unconsciously on windows. I never once wondered about what libraries I would need or "compiling" source codes or back-ward compatibility or backporting or even component crashes. Now all these things are in my subconscious as I experience quirk after quirk on this OS. It is interesting but sometime annoying as well...
Do I have a choice? Unfortunately, it doesn't seem like it.
I think about this all the time, it's basically the focus of my career.
I'm not disagreeing with what I think you're getting at, which is that we have to use our minds and not mindlessly click through software wizards.
I am disagreeing with the implication of your question, which I read as that UI design strives to remove the need to pay attention when instead it tries to direct it. And I'm also explaining my thought processes as I do this work.
Tools exist to allow a user to do something that they care about, and should only insist on as much attention and concern about the tool itself as is minimally needed in order to solve the user's problem. A UI designer's responsibility is to guide the user in such a way that their valuable and limited attention is spent in areas that a user is most likely to actually mean to spend it to accomplish something.
It's a combination of being consistent in how you construct things and providing coherency in how you align related concepts. Things that are alike should look alike. Things that are different should look different.
It's being novel only when you have a novel problem to solve, and not reinventing the wheel poorly at every opportunity when a more familiar solution would be kinder to the user.
It's stepping back and looking at how everything fits together, and preemptively solving as many possible misunderstandings as possible, to reduce frustration and error.
Everything about creating the right mix of these techniques is a judgement call about who your audience is, how often they use the tool, and what the consequences for screwing up are. UI for a web site is different from UI for a microwave, or from a programmer's build script.
Example: A hammer with a poor handle (uncomfortable to hold) might make a carpenter think more consciously about how is holding it, but does it really make him any more attentive to his actual job at hand (which is constructing a wall that is straight and sturdy)? A rock off the ground is just an "unintuitive" hammer.
Example: most unix commands provide options prefixed by a dash. But "dd" uses a totally different style, with name value pairs separated by an =. It's a block level file copy program, rarely used, and yet it's got a unique interface that's easy to screw up.
Example: hyperlinks. In 99.9% of web browsing, it's always safe to click a link (you can always go back). Sometimes web apps will have a link to delete something, instead of a button. If you're making a page, and you want to be sure a user thinks through the consequences of clicking on something, you make it a button. Most users have never consciously thought through this difference, but if you ask them about it, they immediately understand what you mean.
A way to distill this is to look at a problem and think, "What is the essential complexity?" A well designed interface will downplay or hide inessential complexity, and clarify the essential. The user is presumed to care about only the essential complexity.
For an MP3 converter, the essential complexity is merely choosing the songs to convert.
For a pilot, the essential complexity is managing a wide array of information and making holistic decisions, not consciously figuring out the how and why of a million gauges at once. That's why the gauges and units of those gauges are standardized and honed with almost a century's experience to provide information as clearly as possible. They can be read without any conscious effort at decipherment.
The UI designer whose work is least noticed is probably doing the best job possible.
This was fun to write up, thanks for bringing up the topic :)