But that "tracking data" turned out to be just a local cache of cell tower locations that the phone had been near. It was not a record of the precise locations your phone had been and if someone wanted to track you it would only give accuracy to the roughly the nearest city.
There's a lot of data that's only in OpenStreetMap, as compared to the other big map data providers like Navteq. In addition to roads, OpenStreetMap has bicycle paths, pedestrian paths, hiking trails, and a host of other things that are not generally collected in other general-purpose road databases. At least one person on the OSM mailing lists has pointed to an area where he added some but not all of the hiking trails in an area and Apple is showing only the trails he added to OpenStreetMap. Even more conclusive, though, is that when you overlay the two on each other, such as at http://ivan.sanchezortega.es/leaflet-apple.php , there are quite a lot of places where the data matches exactly--not just "both have a road here", but "every point making up Apple's road lies exactly on top of a point making up OpenStreetMap's road".
In practice, OpenStreetMap is more up to date than Google for areas where locals know how to update it. That includes quite a lot of Europe (particularly Germany and England) and most metropolitan areas in the US. As more people learn about OpenStreetMap and begin using products that include OpenStreetMap data, that pool of up-to-date areas will grow. Basically, right now, there are areas where Google is better and areas where OpenStreetMap is better. (But where OSM is good, it's generally *very* good.)
Also note that not only is Apple using really old OpenStreetMap data (the OSM database has more than doubled in size since April 2010), they're using US Census TIGER data in the US, which is often really, really bad.
Slashdotted. They're working on getting the site back up.
The gist of it is that OpenStreetMap only really provides raw map data and building a useful product on top of that data, whether it's map tiles like Apple's photo app is using or turn-by-turn navigation like Skobbler, takes a fair bit of work. switch2osm.org takes you through the basics of putting the OSM data to work for you.
The problem is that Slashdot didn't have user accounts for a while, so using "account creation date" would be wildly inaccurate. Case in point: I started reading in late 1997, well before user accounts. When the accounts were added, I registered one early enough to get a four-digit number, but that date would be wrong by more than a year for determining when I actually started reading.
Re:Perl is not too loose and messy
on
Beyond Java
·
· Score: 1
"Perl's too loose and too messy" please provide some meat to that aspersion.
Perl is a language that has accreted a lot of different features over the years. That, combined with its attempts to DWIM, can make programming in Perl a very convoluted process.
Perl does have a lot of things going for it; it's definitely a step up from building text filters out of awk and sed, and there's a good reason it's become the gold standard for regular expressions. But when things turn complex, Perl gets ugly. For an example, look at Perl's approach to object oriented programming. IMHO, Perl requires too much time manipulating the mechanism of its OO programming, as opposed to letting the programmer design the objects and otherwise staying out of the way. You have to manually receive the $self object on method calls. You create an object by "blessing" a variable of a different type. Inheritance is accomplished by maintaining an array of the class's ancestors (which anything could, in theory, mess with at any time). Object-oriented programming in Perl was an afterthought, and it shows.
Want another example? Context. Having things behave differently depending on whether Perl thinks they should return a scalar or a list (or a string, or a boolean, or nothing...) is very DWIM, but it can make it difficult to understand exactly what a chunk of code will do when it's run. Mostly, that understanding comes down to rote memorization and hoping you didn't forget anything. "Oh, crap. That function, which I usually pass scalars, will take a list, which means that the other function, whose return value I'm using, is going to behave completely differently."
Any langauge can be obfusticated and C is perhaps the easiest to obfusticate.
C isn't really an alternative to most things that Perl is used for. Personally, I would argue that C is a systems-level language and is not well suited for application-level programming, but that's an argument for another time.
I want to address that "Any language can be obfuscated" statement, though. While that's true, the problem with Perl is that the language makes it easy to obfuscate things. One example is, of course, the problem of context that I mentioned above. For another, consider Perl's approach to data structures. While variable type is dynamic (and weak and rather simplistic), data structure is encoded in the name of the variable, as indicated by the first character. And even though that character isn't part of the name itself, there are different namespaces for the different base structures. ('%foo' and '$foo{bar}' are the same hash, but '$foo' is a completely different variable.) Then there's Perl's approach to more complicated data structures, which is either to make a class for them (see above for OO discussion) or to use references and nested structures, leading to things like '$${$foo{bar}}[2]'.
Perl is certainly a very useful language; it's been my language of choice for jobs where I needed ease of programming, complex text manipulation, or just plain portability. It does, however, have considerbal ugliness beneath the hood that's hard to ignore.
--Phil (Currently contemplating a switch from Perl to Ruby for my everyday use.)
The article mentions the three axes of social bookmarks: URLs, tags, and users. A simple page of links only gives you the first of those. In addition, the various sites have additional useful features that a page of links would not provide.
One of the problems I've run into in managing even my small collection of bookmarks is finding things later. Tags help quite a lot with that. "What was that link to the monthly IBM puzzles? Well, I filed it under 'IBM'. Ah, there it is." With URLs and tags (and a decent UI for managing them), you have a workable personal bookmark organizer.
The addition of other users serves a slightly different purpose. It allows you to find new things on the web. Things like del.icio.us/popular can be used even if you're not involved in the site, but having your links there makes it easier for you to take your links, look for other people who've bookmarked similar things, and see what other things those people have bookmarked.
Finally, there are some nice things in the UI for the various bookmarking sites. Several of them will allow you to aggregate various combinations of users and tags so you can watch what's new in areas that interest you. For example, I'm interested in command line programs and knotting, among other things, so I watch everything tagged with "cli" and "knots". I also watch specific tags from a couple of people, because they've bookmarked interesting things in the past.
In del.icio.us, at least, every page is available as RSS. This allows me to do several things. For one, I subscribe to my inbox (the aggregating of tags mentioned above) in my RSS reader. I also subcribe to the bookmark lists of a couple of my friends. Furthermore, I like using Firefox's live bookmarks, which allow you to treat an RSS feed as a bookmark folder. I have several of my personal tags bookmarked in this manner both at home and at work. To add a new bookmark to both browsers at once, all I have to do is tag the link with the appropriate keyword on del.icio.us.
So if a simple page of links is all you need, great, use it. Even if your needs are more complicated in terms of personal bookmark management, if you don't need the social integration, there are bookmark management systems that you can host yourself (though I've tried a lot of them, and to my mind del.icio.us is a lot more useful even if you discount its social aspect). But if you think you could get some good out of the social linking at a place like del.icio.us, you should definitely try it out.
It is legal to make a copy for personal private use. As soon as you give/lend that copy to someone else you are technically distributing copyrighted material, which is illegal.
--Phil (Would that everything moral were also legal)
and I'd never heard of any problems in the way it handles scoping or naming
Well, one thing that comes to mind is namespaces. For one, the fact that variables and functions share namespaces (especially given that functions are objects, so you have to treat, say, myfunc differently depending on whether it was defined as (defun myfunc ()...) or (setf myfunc (lambda ()...))). For another, it can be difficult to find appropriate functions for your purpose, since the common-lisp package is so large. (I find myself referring to the appendix in Paul Graham's ANSI Common Lisp a lot.)
I'm not an expert, though, either. I love the language and use it when I can, but it doesn't have the same teeming horde of add-on packages that languages like Perl or even Python have. (Though I do as much database stuff in Common Lisp as I can, because CLSQL is wonderful.)
--Phil (Perhaps someday I'll be a Real Boy ^W^W Lisp Hacker)
A similar but GPLed program is synergy. It's not quite as featureful as MaxiVista, since it just shared the keyboard and mouse between computers, while MaxiVista appears to be able to move windows around, but I find synergy to be very useful.
--Phil (Typing on a Linux computer with a keyboard attached to a Windows computer)
I'm not familiar with BitKeeper. Can anyone comment on the possible ramifications of having all these large-scale commercial contributors using a tool that Linus & Co no longer use/have access to?
Not a whole lot of ramifications. With BitMover continuing to track the tree, it allows anyone who has a BitKeeper license to continue using it, both for tracking the mainline kernel and for tracking any local changes they make. BitKeeper can generate patches, so they can still contribute their changes back to Linus & co. The main difference is that the BitKeeper changesets won't be integrated into Linus's (and the other maintainers') workflow, so the logical groupings of changes may differ a bit from the actual process on Linus's tree (though that depends on what scm solution Linus eventually goes with and how BitMover handle imports from it), but that's not a very noticeable difference.
I personnaly like to use hnb (Hierarchical NoteBook) which you can use for
todos but also for writing and managing lots of small notes.
Another app along those lines is
woody, though it
doesn't have as much todo support as hnb.
hnb/woody work differently than tdl/devtodo, though. The former
two are todo list editors - you call them up and then manipulate your
list from within them. The latter two are todo list, hm, commands.
Everything is done directly from the command line. Which is why I use
tdl--the immediate nature of the program (new item? 'tdla "get
some widgets"' done.) better fits the way I work. Other people
(including you, I suspect) work better with everything in a single
environment (either that or just work better with the features that
hnb has but tdl doesn't).
I live in text mode. Here's a selection of my preferred apps. Most of
these are still in active development (though some are more active than
others).
screen. Simply
indispensable. It slices and dices console sessions. Pretty much
everything I do, I do in screen. I've a page elsewhere that describes
everything
screen does for me.
zsh. My shell of choice. Think of
all the good features of bash, ksh, and tcsh rolled together. (Without
much of the ickiness, particularly the csh heritage.) Personally, the
killer application of zsh was that fact that not only did it have
context-sensitive completion but (unlike tcsh) it shipped with hordes of
completion definitions right out of the box. Type 'dpkg -L
fo<tab>' and zsh will autocomplete on the Debian packages
currently installed on your system. With an ssh-agent running, type
'scp otherhost:fo<tab>' and zsh will ssh to the other
system and autocomplete on the files available on that host.
irssi. The best IRC client I've
come across, certainly beating out IrcII, BitchX, and even epic. Multiple
windows, extensible, tons of plugins available.
bitlbee. This is actually an
IRC-to-Instant-Messaging gateway. It allows me to use irssi and the IRC
environment with which I am so familiar to also deal with those of my
friends and family who insist on using the various IM services.
snownews.
curses-based RSS aggregator. I shopped around a bit before finding an
aggregator that I liked. snownews does everything I need.
mutt. Possibly the best mail client
around, GUI or not. While pine is okay (and simpler to use), mutt is much
more customizable and scales better to large volumes of email.
procmail. Again, not exactly
command line, but essential to my email usage.
Emacs. My
text-mode editor of choice. Feel free to substitute
XEmacs or vi (preferably
vim) at your own preference. I prefer
emacs to vi, though I know a decent amount of vi, as any sysadmin should.
I actually like XEmacs a little better than GNU Emacs, but GNU Emacs has
better UTF-8 support.
w3m. There's also
links; I'm not tremendously
familiar with it because w3m fills all of my needs and it used to be the
case that w3m had better HTML support than links, but I don't believe this
is any longer the case. Of note is the fact that w3m can do tabbed
browsing, though it's not multithreaded, so you can't read one tab while
another is loading. Also, if you run w3m with a valid $DISPLAY, it can
even show images in the pages it displays.
moosic. This is a
music jukebox. The features that distinguish it from other such programs
are twofold. First, it runs as a standalone server; you interact with it
via a command line client. (In theory, a curses or GUI client could be
written, but to my knowledge none yet has.) Second, it's customizable
with regards to how it plays music. It has a config file where you tell
it what programs to use to play various music formats (it does come with
reasonable defaults). Someone elsewhere in this article pointed out
mpd; I'll have to look at that, but
it at least doesn't appear to support the various MOD formats.
mplayer. It does more
or less require some graphical output (X, framebuffer, whatever), but it's
run and displays it status in text mod
A quick look at the screen manpage indicates you might be able to kludge
screen as your login "shell" (having screen spawn your actual shell),
although it would create the problem of reconnecting to existing screen
sessions instead of creating new ones.
If screen is run as a login shell, it behaves as if it had been run
with '-xRR', which means that it will attach to an existing
session or create the session if it doesn't already exist. This is,
however, not recommended. Lots of programs expect to be able to
run your login shell non-interactively, and screen cannot do that. It's
better to use a normal shell and just attach to screen as you need.
I have a
simple shell script that I wrote to manage a few things and attach to
screen. Most of the time that I ssh into my computer, I run 'ssh -t
host attach-screen' (indeed, I have menu options that run 'xterm
-e ssh -t host attach-screen':). Unless you want to do relatively
complicated things, you should be okay with just 'screen
-xRR'
While this is nowhere near the top stories posted here, it's my worst
employer story.
I was living at home, going to community college, and just getting into
paid programming. I got an interview with the company that provided software
for the spice company my mom worked for. The interview went pretty well--there
was an oral portion, where I talked with the company owner (he had one
employee, a secretary; his previous programmer had recently left). Then he
put me through a more practical portion. He sat me at a computer, told me there
was a problem in the code, and let me fix it. I'd never seen the language
before, but it was essentially a blend of BASIC and SQL (it's called
SuperBase). So I figured out what was wrong, fixed it, and showed it to him.
I left, he called later and said I had the job.
I began to work for him. I learned that the "interview problem" I fixed was
actually a problem that one of his customers had reported and that he hadn't
been able to fix it. I learned that he'd done most of the customization
coding on the program[0]. I learned that he was a really horrid programmer.
As time passed, I learned other things. Mostly, I learned that his paychecks
had a tendency to bounce. I learned that if I deposited a check, spent some of
the money, and it bounced, my bank would charge me a fee. I learned that being
stuck twenty miles from home with a negative bank account, a debit card, and not enough gas really sucks. (I was younger then and (I like to think) dumber.)
I eventually walked out on him, leaving him owing me about $1500. I never saw that money.
[0] The program itself was for running manufacturing firms and had been written
by another company. They, in exchange for licensing fees, would allow other
people to take their program and customize it for specific clients. My boss
had taken it and customized it for food-related companies; among his clients
were a spice company and a bakery.
[threading] is a simplistic view towards a conversation, which more often than not is not linear and between multiple persons
For handling the interconnectedness of online conversations (mailing list, usenet, etc.), this conversation map looks rather interesting, at least conceptually. It's nothing I've really played with, but it's been on my "list of things to look at more closely, eventually".
--Phil (I still like Lurker's approach to threading.)
Uhm, no. As I understand the article, it's talking about user interface design--a way of displaying threaded conversations. Usenet is a communications medium and is thus orthogonal to the display of messages transported via that medium. And I'm not aware of any NNTP reader that works in a similar manner to that proposed here. (For email, Lurker is pretty close, but doesn't have both threading and content in the same display.)
--Phil (Threading's a tricky thing to handle, anyway.)
How is this faster than using alt-tab to bring windows to top?
How fast can you move your eyes to glance at the next monitor over? For referring to other windows while working on one, multiple monitors are a big win. Even for switching among windows, I find it easier to flick the mouse into a two-dimensional region on screen that to search through all the apps I have open via alt-tab.
--Phil (Newly converted to the land of dual-head.)
And I do remember hearing that anecodete about the renaming, but have no idea where.
The front of The Design of Everyday Things tells the story of the renaming of the book. I can't find the text of the intro anywhere on the web (via googling for specific phrases) so:
When Doubleday/Currency approached me about publishing the paperback version of this book, the editors also said, "But of course the title will have to be changed." Title changed? I was horrified. But I decided to follow my own advice and do some research on readers. I discovered that while the academic community liked the title and its cleverness, the business community did not. In fact, businesses often ignored the book because the title sent the wrong message. Bookstores placed the book in their psychology sections (along with books on sex, love, and self-help). The final nail in the title's coffin came when I was asked to talk to a group of senior executives of a leading manufacturing company. The person who introduced me to the audience praised the book, damned the title, and asked his colleagues to read the book
despite the title.
--Phil (If you haven't read this book, you should do so now. It's that good.)
While it's a paid service, Browser
Cam looks pretty good. You give them a URL and pick a browser/OS
combination; they give you a screenshot of your page rendering on that
browser and OS.
Well, GAIM is intended as a one-stop program for instant messaging networks. You can set it up with all your IM accounts and check in just that one place for any attempts to contact you. EveryBuddy is another such program.
I use BitlBee, which also does multiple instant messaging protocols, but it presents itself as an IRC server, so I can connect to it with my IRC client and have instant messaging sitting right next to the IRC channels I normally follow. (It also lets me live in text mode. I couldn't find any multiprotocol character-mode IM clients that I really liked, but I do like my IRC client.)
Where exactly does ssh keep bookmarks, for example?
To address your specific example, in ~/.ssh/config . You can set all sorts of options on a per-host basis, including hostname and username. So this:
ssh -p 42 phil@bob.somelongdomain.com
becomes this:
ssh bob
if your ~/.ssh/config contains
Host bob HostName bob.somelongdomain.com Port 42 User phil
That notwithstanding, I agree with your points. (I often find myself disliking DJB's approaches to things, though he does certainly write good code.) I just wanted to mention an aspect of ssh that you might not be familiar with.
But that "tracking data" turned out to be just a local cache of cell tower locations that the phone had been near. It was not a record of the precise locations your phone had been and if someone wanted to track you it would only give accuracy to the roughly the nearest city.
There's a lot of data that's only in OpenStreetMap, as compared to the other big map data providers like Navteq. In addition to roads, OpenStreetMap has bicycle paths, pedestrian paths, hiking trails, and a host of other things that are not generally collected in other general-purpose road databases. At least one person on the OSM mailing lists has pointed to an area where he added some but not all of the hiking trails in an area and Apple is showing only the trails he added to OpenStreetMap. Even more conclusive, though, is that when you overlay the two on each other, such as at http://ivan.sanchezortega.es/leaflet-apple.php , there are quite a lot of places where the data matches exactly--not just "both have a road here", but "every point making up Apple's road lies exactly on top of a point making up OpenStreetMap's road".
In practice, OpenStreetMap is more up to date than Google for areas where locals know how to update it. That includes quite a lot of Europe (particularly Germany and England) and most metropolitan areas in the US. As more people learn about OpenStreetMap and begin using products that include OpenStreetMap data, that pool of up-to-date areas will grow. Basically, right now, there are areas where Google is better and areas where OpenStreetMap is better. (But where OSM is good, it's generally *very* good.) Also note that not only is Apple using really old OpenStreetMap data (the OSM database has more than doubled in size since April 2010), they're using US Census TIGER data in the US, which is often really, really bad.
Slashdotted. They're working on getting the site back up. The gist of it is that OpenStreetMap only really provides raw map data and building a useful product on top of that data, whether it's map tiles like Apple's photo app is using or turn-by-turn navigation like Skobbler, takes a fair bit of work. switch2osm.org takes you through the basics of putting the OSM data to work for you.
The problem is that Slashdot didn't have user accounts for a while, so using "account creation date" would be wildly inaccurate. Case in point: I started reading in late 1997, well before user accounts. When the accounts were added, I registered one early enough to get a four-digit number, but that date would be wrong by more than a year for determining when I actually started reading.
Perl is a language that has accreted a lot of different features over the years. That, combined with its attempts to DWIM, can make programming in Perl a very convoluted process.
Perl does have a lot of things going for it; it's definitely a step up from building text filters out of awk and sed, and there's a good reason it's become the gold standard for regular expressions. But when things turn complex, Perl gets ugly. For an example, look at Perl's approach to object oriented programming. IMHO, Perl requires too much time manipulating the mechanism of its OO programming, as opposed to letting the programmer design the objects and otherwise staying out of the way. You have to manually receive the $self object on method calls. You create an object by "blessing" a variable of a different type. Inheritance is accomplished by maintaining an array of the class's ancestors (which anything could, in theory, mess with at any time). Object-oriented programming in Perl was an afterthought, and it shows.
Want another example? Context. Having things behave differently depending on whether Perl thinks they should return a scalar or a list (or a string, or a boolean, or nothing...) is very DWIM, but it can make it difficult to understand exactly what a chunk of code will do when it's run. Mostly, that understanding comes down to rote memorization and hoping you didn't forget anything. "Oh, crap. That function, which I usually pass scalars, will take a list, which means that the other function, whose return value I'm using, is going to behave completely differently."
C isn't really an alternative to most things that Perl is used for. Personally, I would argue that C is a systems-level language and is not well suited for application-level programming, but that's an argument for another time.
I want to address that "Any language can be obfuscated" statement, though. While that's true, the problem with Perl is that the language makes it easy to obfuscate things. One example is, of course, the problem of context that I mentioned above. For another, consider Perl's approach to data structures. While variable type is dynamic (and weak and rather simplistic), data structure is encoded in the name of the variable, as indicated by the first character. And even though that character isn't part of the name itself, there are different namespaces for the different base structures. ('%foo' and '$foo{bar}' are the same hash, but '$foo' is a completely different variable.) Then there's Perl's approach to more complicated data structures, which is either to make a class for them (see above for OO discussion) or to use references and nested structures, leading to things like '$${$foo{bar}}[2]'.
Perl is certainly a very useful language; it's been my language of choice for jobs where I needed ease of programming, complex text manipulation, or just plain portability. It does, however, have considerbal ugliness beneath the hood that's hard to ignore.
--Phil (Currently contemplating a switch from Perl to Ruby for my everyday use.)
The article mentions the three axes of social bookmarks: URLs, tags, and users. A simple page of links only gives you the first of those. In addition, the various sites have additional useful features that a page of links would not provide.
One of the problems I've run into in managing even my small collection of bookmarks is finding things later. Tags help quite a lot with that. "What was that link to the monthly IBM puzzles? Well, I filed it under 'IBM'. Ah, there it is." With URLs and tags (and a decent UI for managing them), you have a workable personal bookmark organizer.
The addition of other users serves a slightly different purpose. It allows you to find new things on the web. Things like del.icio.us/popular can be used even if you're not involved in the site, but having your links there makes it easier for you to take your links, look for other people who've bookmarked similar things, and see what other things those people have bookmarked.
Finally, there are some nice things in the UI for the various bookmarking sites. Several of them will allow you to aggregate various combinations of users and tags so you can watch what's new in areas that interest you. For example, I'm interested in command line programs and knotting, among other things, so I watch everything tagged with "cli" and "knots". I also watch specific tags from a couple of people, because they've bookmarked interesting things in the past.
In del.icio.us, at least, every page is available as RSS. This allows me to do several things. For one, I subscribe to my inbox (the aggregating of tags mentioned above) in my RSS reader. I also subcribe to the bookmark lists of a couple of my friends. Furthermore, I like using Firefox's live bookmarks, which allow you to treat an RSS feed as a bookmark folder. I have several of my personal tags bookmarked in this manner both at home and at work. To add a new bookmark to both browsers at once, all I have to do is tag the link with the appropriate keyword on del.icio.us.
So if a simple page of links is all you need, great, use it. Even if your needs are more complicated in terms of personal bookmark management, if you don't need the social integration, there are bookmark management systems that you can host yourself (though I've tried a lot of them, and to my mind del.icio.us is a lot more useful even if you discount its social aspect). But if you think you could get some good out of the social linking at a place like del.icio.us, you should definitely try it out.
--Phil (happy del.icio.us user since 2004-04-09)
It is legal to make a copy for personal private use. As soon as you give/lend that copy to someone else you are technically distributing copyrighted material, which is illegal.
--Phil (Would that everything moral were also legal)
Well, one thing that comes to mind is namespaces. For one, the fact that variables and functions share namespaces (especially given that functions are objects, so you have to treat, say, myfunc differently depending on whether it was defined as (defun myfunc () ...) or (setf myfunc (lambda () ...))). For another, it can be difficult to find appropriate functions for your purpose, since the common-lisp package is so large. (I find myself referring to the appendix in Paul Graham's ANSI Common Lisp a lot.)
I'm not an expert, though, either. I love the language and use it when I can, but it doesn't have the same teeming horde of add-on packages that languages like Perl or even Python have. (Though I do as much database stuff in Common Lisp as I can, because CLSQL is wonderful.)
--Phil (Perhaps someday I'll be a Real Boy ^W^W Lisp Hacker)
A similar but GPLed program is synergy. It's not quite as featureful as MaxiVista, since it just shared the keyboard and mouse between computers, while MaxiVista appears to be able to move windows around, but I find synergy to be very useful.
--Phil (Typing on a Linux computer with a keyboard attached to a Windows computer)
Not a whole lot of ramifications. With BitMover continuing to track the tree, it allows anyone who has a BitKeeper license to continue using it, both for tracking the mainline kernel and for tracking any local changes they make. BitKeeper can generate patches, so they can still contribute their changes back to Linus & co. The main difference is that the BitKeeper changesets won't be integrated into Linus's (and the other maintainers') workflow, so the logical groupings of changes may differ a bit from the actual process on Linus's tree (though that depends on what scm solution Linus eventually goes with and how BitMover handle imports from it), but that's not a very noticeable difference.
Another app along those lines is woody, though it doesn't have as much todo support as hnb.
hnb/woody work differently than tdl/devtodo, though. The former two are todo list editors - you call them up and then manipulate your list from within them. The latter two are todo list, hm, commands. Everything is done directly from the command line. Which is why I use tdl--the immediate nature of the program (new item? 'tdla "get some widgets"' done.) better fits the way I work. Other people (including you, I suspect) work better with everything in a single environment (either that or just work better with the features that hnb has but tdl doesn't).
--Phil (In contrast, I prefer mutt to MH.)
I live in text mode. Here's a selection of my preferred apps. Most of these are still in active development (though some are more active than others).
screen. Simply indispensable. It slices and dices console sessions. Pretty much everything I do, I do in screen. I've a page elsewhere that describes everything screen does for me.
zsh. My shell of choice. Think of all the good features of bash, ksh, and tcsh rolled together. (Without much of the ickiness, particularly the csh heritage.) Personally, the killer application of zsh was that fact that not only did it have context-sensitive completion but (unlike tcsh) it shipped with hordes of completion definitions right out of the box. Type 'dpkg -L fo<tab>' and zsh will autocomplete on the Debian packages currently installed on your system. With an ssh-agent running, type 'scp otherhost:fo<tab>' and zsh will ssh to the other system and autocomplete on the files available on that host.
irssi. The best IRC client I've come across, certainly beating out IrcII, BitchX, and even epic. Multiple windows, extensible, tons of plugins available.
bitlbee. This is actually an IRC-to-Instant-Messaging gateway. It allows me to use irssi and the IRC environment with which I am so familiar to also deal with those of my friends and family who insist on using the various IM services.
snownews. curses-based RSS aggregator. I shopped around a bit before finding an aggregator that I liked. snownews does everything I need.
mutt. Possibly the best mail client around, GUI or not. While pine is okay (and simpler to use), mutt is much more customizable and scales better to large volumes of email.
procmail. Again, not exactly command line, but essential to my email usage.
Emacs. My text-mode editor of choice. Feel free to substitute XEmacs or vi (preferably vim) at your own preference. I prefer emacs to vi, though I know a decent amount of vi, as any sysadmin should. I actually like XEmacs a little better than GNU Emacs, but GNU Emacs has better UTF-8 support.
w3m. There's also links; I'm not tremendously familiar with it because w3m fills all of my needs and it used to be the case that w3m had better HTML support than links, but I don't believe this is any longer the case. Of note is the fact that w3m can do tabbed browsing, though it's not multithreaded, so you can't read one tab while another is loading. Also, if you run w3m with a valid $DISPLAY, it can even show images in the pages it displays.
moosic. This is a music jukebox. The features that distinguish it from other such programs are twofold. First, it runs as a standalone server; you interact with it via a command line client. (In theory, a curses or GUI client could be written, but to my knowledge none yet has.) Second, it's customizable with regards to how it plays music. It has a config file where you tell it what programs to use to play various music formats (it does come with reasonable defaults). Someone elsewhere in this article pointed out mpd; I'll have to look at that, but it at least doesn't appear to support the various MOD formats.
mplayer. It does more or less require some graphical output (X, framebuffer, whatever), but it's run and displays it status in text mod
Put
into your ~/.screenrc.--Phil (And you might want to join the mailing list.)
If screen is run as a login shell, it behaves as if it had been run with '-xRR', which means that it will attach to an existing session or create the session if it doesn't already exist. This is, however, not recommended. Lots of programs expect to be able to run your login shell non-interactively, and screen cannot do that. It's better to use a normal shell and just attach to screen as you need.
I have a simple shell script that I wrote to manage a few things and attach to screen. Most of the time that I ssh into my computer, I run 'ssh -t host attach-screen' (indeed, I have menu options that run 'xterm -e ssh -t host attach-screen' :). Unless you want to do relatively
complicated things, you should be okay with just 'screen
-xRR'
--Phil (I love screen.)
Don't forget The Two Towers: The Purist Edit.
--Phil (Annoying Tolkien purist)
While this is nowhere near the top stories posted here, it's my worst employer story.
I was living at home, going to community college, and just getting into paid programming. I got an interview with the company that provided software for the spice company my mom worked for. The interview went pretty well--there was an oral portion, where I talked with the company owner (he had one employee, a secretary; his previous programmer had recently left). Then he put me through a more practical portion. He sat me at a computer, told me there was a problem in the code, and let me fix it. I'd never seen the language before, but it was essentially a blend of BASIC and SQL (it's called SuperBase). So I figured out what was wrong, fixed it, and showed it to him. I left, he called later and said I had the job.
I began to work for him. I learned that the "interview problem" I fixed was actually a problem that one of his customers had reported and that he hadn't been able to fix it. I learned that he'd done most of the customization coding on the program[0]. I learned that he was a really horrid programmer. As time passed, I learned other things. Mostly, I learned that his paychecks had a tendency to bounce. I learned that if I deposited a check, spent some of the money, and it bounced, my bank would charge me a fee. I learned that being stuck twenty miles from home with a negative bank account, a debit card, and not enough gas really sucks. (I was younger then and (I like to think) dumber.)
I eventually walked out on him, leaving him owing me about $1500. I never saw that money.
[0] The program itself was for running manufacturing firms and had been written by another company. They, in exchange for licensing fees, would allow other people to take their program and customize it for specific clients. My boss had taken it and customized it for food-related companies; among his clients were a spice company and a bakery.
For handling the interconnectedness of online conversations (mailing list, usenet, etc.), this conversation map looks rather interesting, at least conceptually. It's nothing I've really played with, but it's been on my "list of things to look at more closely, eventually".
--Phil (I still like Lurker's approach to threading.)
Uhm, no. As I understand the article, it's talking about user interface design--a way of displaying threaded conversations. Usenet is a communications medium and is thus orthogonal to the display of messages transported via that medium. And I'm not aware of any NNTP reader that works in a similar manner to that proposed here. (For email, Lurker is pretty close, but doesn't have both threading and content in the same display.)
--Phil (Threading's a tricky thing to handle, anyway.)
How fast can you move your eyes to glance at the next monitor over? For referring to other windows while working on one, multiple monitors are a big win. Even for switching among windows, I find it easier to flick the mouse into a two-dimensional region on screen that to search through all the apps I have open via alt-tab.
--Phil (Newly converted to the land of dual-head.)
The front of The Design of Everyday Things tells the story of the renaming of the book. I can't find the text of the intro anywhere on the web (via googling for specific phrases) so:
--Phil (If you haven't read this book, you should do so now. It's that good.)
According to ISBN.nu, amazon.co.uk has it for $21.73, and overstock.com has it for $20.59.
--Phil (Transparent plug for ISBN.nu, one of my favorite book-pricing sites.)
While it's a paid service, Browser Cam looks pretty good. You give them a URL and pick a browser/OS combination; they give you a screenshot of your page rendering on that browser and OS.
--Phil (Think I'll be buying this book soon.)
Well, GAIM is intended as a one-stop program for instant messaging networks. You can set it up with all your IM accounts and check in just that one place for any attempts to contact you. EveryBuddy is another such program.
I use BitlBee, which also does multiple instant messaging protocols, but it presents itself as an IRC server, so I can connect to it with my IRC client and have instant messaging sitting right next to the IRC channels I normally follow. (It also lets me live in text mode. I couldn't find any multiprotocol character-mode IM clients that I really liked, but I do like my IRC client.)
--Phil (Some people call me ASCII Phil...)
To address your specific example, in ~/.ssh/config . You can set all sorts of options on a per-host basis, including hostname and username. So this:
becomes this: if your ~/.ssh/config containsThat notwithstanding, I agree with your points. (I often find myself disliking DJB's approaches to things, though he does certainly write good code.) I just wanted to mention an aspect of ssh that you might not be familiar with.
--Phil (crypto geek)