Open Source Software - CJS Hayward https://cjshayward.com An Orthodox Christian Author's Showcase, Library, Museum, and Labyrinth Mon, 14 Nov 2022 15:00:46 +0000 en-US hourly 1 https://wordpress.org/?v=6.1 https://cjshayward.com/wp-content/uploads/2016/02/cropped-site-icon-2-32x32.png Open Source Software - CJS Hayward https://cjshayward.com 32 32 International Obfuscated Python Contest Winner 2022 https://cjshayward.com/winner/ Sun, 05 Jun 2022 19:50:23 +0000 https://cjshayward.com/?p=9855 #!/usr/bin/python3 print("Hello, world!") ]]> My Life's Work https://cjshayward.com/my-lifes-work/ Thu, 19 Aug 2021 16:51:32 +0000 https://cjshayward.com/?p=8954 Continue reading "My Life's Work"]]>

TL;DR

Own my complete collection in paperback! It is well worth it.

A Foxtrot cartoon featuring a tilted house and the words, "Peter, maybe you should take those Calvin and Hobbes books to the other side of the house.

OK, so I'm a dwarf standing on giants' shoulders, but...


A life's work between two covers...   er, almost a dozen pairs of covers with four to six hundred pages in between...   that could nicely adorn about two feet of space on your bookshelf...   a little smaller in size than the complete Calvin and Hobbes...

C.J.S. Hayward
Image by kind permission of the Wade Center.

"Must... fight... temptation.... to read... brilliant and interesting stuff from C.J.S. Hayward.... until.... after... work!"

—Kent Nebergall

If you don't know me, my name is Christos Jonathan Seth Hayward, which I usually abbreviate "C.J.S. Hayward."

But my name has to my surprise trilettered on Facebook to "CSH," for "C.S. Hayward". As in, the natural successor to C.S. Lewis. I take that as a big compliment.

I'm an Eastern Orthodox author, who grew up reading C.S. Lewis, and has read almost everything he wrote, including some of those reviewed in C.S. Lewis: The Neglected Works, but have written many different things in many styles. Readers have written things about parts of the the colllection like (J. Morovich):

A collection of joyful, challenging, insightful, intelligent, mirthful and jarring essays written by an Eastern Orthodox author who is much too wise for his years.

and (D. Donovan):

Each piece is a delight: partially because each 'speaks' using a different voice and partly because a diversity of topics and cross-connections between theology and everyday living makes the entire collection a delight to read, packed with unexpected twists, turns, and everyday challenges.

And all this for some of this collection.

These pieces are a joy to read, and a gateway to help you enter a larger world, and open up doors that you never dreamed were there to open. Want to really see how "There are more things in Heaven and earth than are dreamed of in your philosophy?" Read these.

This little library includes nearly everything I’ve written--roughly 365 works in 12 volumes. The works in each volume are quite varied and most are short.) I omit software projects and the occasional interactive webpage. What all is offered? Works in this series include: novellas, short stories, poems and prayers, articles, and humor.

The one single work I would recommend most by far, and has been strongly recommended by others, is The Consolation of Theology. It is based on a classic The Consolation of Philosophy, and it is meant to give consolation, joy, strength, insights and things that are beyond mere insight. In a pandemic, a collapsing economy, and times when grandmas are buying shotguns, and perhaps other things in the pipeline, happiness is possible, in our reach, and it is real.

My story includes Protestant origins and a progressive discovery of Orthodox Christianity. Because this is a collection of the Good, the Bad, and the Ugly, I have set the works I would particularly recommend in bold in the Table of Contents.

I've also dropped the specified price per volume from $29.99 to $19.99.

C.J.S. Hayward

Buy the C.J.S. Hayward: The Complete Works on Amazon now!

 
(Please note: In the past, a bug prevented an avid reader furious he couldn't read more than the first half of the Kindle edition. The Kindle edition has one review at one star, from someone who read the first half of the book and was infuriated he couldn't read further. I've since fixed that bug, but the review is live and probably deterring people from purchasing. I can and do write well-received titles.)

  • C.J.S. Hayward: The Complete Works: vol. 1
  • C.J.S. Hayward: The Complete Works: vol. 2
  • C.J.S. Hayward: The Complete Works: vol. 3
  • C.J.S. Hayward: The Complete Works: vol. 4
  • C.J.S. Hayward: The Complete Works: vol. 5
  • C.J.S. Hayward: The Complete Works: vol. 6
  • C.J.S. Hayward: The Complete Works: vol. 7
  • C.J.S. Hayward: The Complete Works: vol. 8
  • C.J.S. Hayward: The Complete Works: vol. 9
  • C.J.S. Hayward: The Complete Works: vol. 10
  • C.J.S. Hayward: The Complete Works: vol. 11
  • You can always just buy the first one. (And maybe buy other volumes one at a time if you like it.)

    You want to own this in paper!

    I'd also like to make available downloads for cheap or for free, but I have a reason for posting this now. I want to keep my website, which has been online since the end of the 20th century, alive for however long I really can, but there are some things I can't control and I am getting ready, I hope, to visit a monastery. What comes of that I don't know, but I'd really like for you to own my books in paper. And I'm not sure how long it will be until Amazon makes a decision that will render my works no longer available. However, as a complement to the availability of paper books, I have available:

    (One note:) I had hoped to make a free download available in Kindle and ePub, as well as an option of spending a few dollars on Amazon. However, one of the latest additions reads:

    Dear Reader;

    How do I love thee?

    Let me count the ways.
    integer overflow error at 0x0

    And when I tried to convert the text to an ePub to distribute freely, the conversion software errored out saying it had reached maximum recursion depth.

    So I have it available in the following formats:

    (The last two especially have so much content that they are bulky and incredibly unwieldy. If you'd like to just cut to the chase, read The Luddite's Guide to Technology.)

    Enjoy!

    ]]> Changes in Mac OSX Over Time: The Good Parts https://cjshayward.com/mac-good-parts/ Mon, 13 Nov 2017 13:28:55 +0000 https://cjshayward.com/?p=3764 Continue reading "Changes in Mac OSX Over Time: The Good Parts"]]> Own C.J.S. Hayward's complete works in paper!

    C++: The Good Parts

    C++ is the best example of second-system effect since OS/360. - Henry Spencer

     
    Even Bjarne Stroustrup has some sense that there is indeed a smaller and more elegant language struggling to get out of C++. He is right that that language is not Java or C#, but I would suggest that this more elegant language has been right under our noses the whole time:
     

    A modified book cover for K&R labeling it as"C++: The Good Parts"

    Now if we could turn back the clock on MacOS

    I used to think that OSX was my favorite flavor of Unix. Now I think that the Mac, iPad, iPhone, and Apple Watch may be preferred for nontechnical users on all counts, but Apple has been more and more going its own way, and the result has made an environment that is more and more hostile to Unix / Linux gurus. Some of this is discussed further in Macs are now Super.Computer.s running "IRIX," a Super.Computer. OS!:

    Terminal confusion

    I have narrated above the breakage that shipped to me with OSX 12.2.4; the breakage that shipped with the OSX 12.2.2 update was Terminal.app crashing on a regular basis. And while I don’t wish to patronize developers who work with graphical IDE’s, the two most heavily used applications I have are Google Chrome and Terminal. When I poked around, I was pointed to an Apple developer bug first posted in 2016 that has 147 "I have this problem too" votes...  I wish they had done something more polite to Unix users than breaking and not fixing Terminal, like setting a Terminal.app background image of someone flipping the bird at command-line Unix / Linux types. Really, flipping the bird would be markedly more polite.

    In conversations with technical support about malfunctioning in Apple's version of Apache, it took me an escalation all the way to level 3 support before I spoke with someone who knew that the Macintosh had a command line (let alone having any idea what that meant). And I was told that Apple supported GUI use of e.g. webservers, but not command line.

    More broadly, it's been harder and harder by the year to get things working and I was astonished after initial difficulties installing SuiteCRM what my research turned up: Apple has removed parts of the OS that that project needed to run.

    An even bigger shock

    A much bigger shock came when I created a Linux VM to install some open source software projects I had meant to install natively.

    I was shocked about how easy it was.

    It was the command line version of "Point and click".

    I realized that over the years I had become more and more accustomed to  installing open source software under MacOS being like out-stubborning an obscure and crufty flavor of Unix (such as Irix on NCSA supercomputers, with a general comment of "Nothing works on Irix!"). And working on installing major open source projects recalls a favorite xkcd comic about the joy of first meeting Python:

    A famous xkcd comic showing someone flying after a first encounter with Python

    Tolerating upgrades that break software:
    Do you remember how people used to just accept the forever close at hand BSOD?

    Before Windows XP came out, I remember trying to make a point to a non-hacker friend that "Computers are logical but not rational." Meaning that from a programming standpoint they ideally do neither more nor less than what the logic in a computer program called for, but state-of-the-art AI could not make sense of the basics of a children's "I Can Read" book. (For that matter, computers cannot understand the gist of a program. They may execute the program, but only programmers understand the gist.)

    She said, "I disagree. What if you're using a computer and the mouse freezes?"

    In the ensuing conversation, I failed completely in my efforts to communicate that incessant crashes on par with the Blue Screen of Death were simply not an automatic feature of how computers act, and that my Linux box did not malfunction at anywhere near the violence of Windows, on which point I quote Tad Phetteplace:

    In a surprise announcement today, Microsoft President Steve Ballmer revealed that the Redmond-based company will allow computer resellers and end-users to customize the appearance of the Blue Screen of Death (BSOD), the screen that displays when the Windows operating system crashes.

    The move comes as the result of numerous focus groups and customer surveys done by Microsoft. Thousands of Microsoft customers were asked, "What do you spend the most time doing on your computer?"

    A surprising number of respondents said, "Staring at a Blue Screen of Death." At 54 percent, it was the top answer, beating the second place answer "Downloading XXXScans" by an easy 12 points.

    "We immediately recognized this as a great opportunity for ourselves, our channel partners, and especially our customers," explained the excited Ballmer to a room full of reporters.

    Immense video displays were used to show images of the new customizable BSOD screen side-by-side with the older static version. Users can select from a collection of "BSOD Themes," allowing them to instead have a Mauve Screen of Death or even a Paisley Screen of Death. Graphics and multimedia content can now be incorporated into the screen, making the BSOD the perfect conduit for delivering product information and entertainment to Windows users.

    The BSOD is by far the most recognized feature of the Windows operating system, and as a result, Microsoft has historically insisted on total control over its look and feel. This recent departure from that policy reflects Microsoft's recognition of the Windows desktop itself as the "ultimate information portal." By default, the new BSOD will be configured to show a random selection of Microsoft product information whenever the system crashes. Microsoft channel partners can negotiate with Microsoft for the right to customize the BSOD on systems they ship.

    Major computer resellers such as Compaq, Gateway, and Dell are already lining up for premier placement on the new and improved BSOD.

    Ballmer concluded by getting a dig in against the Open Source community. "This just goes to show that Microsoft continues to innovate at a much faster pace than open source. I have yet to see any evidence that Linux even has a BSOD, let alone a customizable one."

    Most of the software upgrades I have purchased in over a decade of Mac ownership have been because an OSX upgrade broke them completely.

    On this point I would distinguish between Windows and Mac on the one hand, and Linux on the other. Microsoft and Apple both need to make changes that people have to buy different software over time; Linux may include mistakes but there is no built-in need to radically change everything on a regular basis. Now some Linux programming may change quickly: front-end web developers face a very volatile list of technologies they should know. However, something said about Unix applies to Linux to a degree that is simply unparalleled in Windows or Mac: "Unix has a steep learning curve, but you only have to climb it once."

    OSX admittedly has better UX than Linux, and possibly it make sense for open source types to buy a Mac, run VMware Fusion in Unity mode, and do Linux development and open source software use from a Linux Mint VM. (My own choice is just to do Linux, with Windows VM's for compatibility.) However, for Unix and Linux wizards, the container is one that occasionally gives a nasty surprise.

    Beautiful things work better:
    An interesting solution

    I've given a once-over to Linux Mint Sonya, to address UX tweaks and to echo some of that old glory. As is appropriate to an appliance, passwords are not needed (though the usual root methods of assigning a Linux password work better). The desktop and background are laid out to be truly beautiful!

    To pick one little example of improved UX: copy is Control-C, and paste is Control-V, with gnome-terminal or without; if you want to send a literal Control-C, then Shift-Control-C will do that, and likewise for Control-V. This cuts down on frustrating attempts to remember, "In this context, will I copy by typing Control-C, or Control-Shift-C?" There are other little touches. For instance, Chrome is already installed, and the default Firefox search engine is configured out of the box to be, drum roll please... Google!"

    Mint comes with a search engine that in my experience only have SERPs with ads above the fold that are formatted exactly or almost exactly like real organic search results. And not only is Google not the main search engine: it is FUDded, banished to a list options that are either not monetizable to Mint's makers, or are considered problematic and potentially unsafe. (Mint's FUDding does not distinguish which is which; it is set up to make Google look seedy.)

    A screenshot of the desktop.

    Perhaps you don't like the Aqua interface; it is if nothing else the gold star that North Korea's One Star Linux Red Star Linux offers, and people seem interested in an Aqua-themed Linux enough to write HOWTO's to get a root shell and migrate to English. Even if they advise against serious use, not because a fresh install has software that's years obsolete software, but because the entire environment could be described not so much as having spyware, but being spyware.

    Or perhaps it might served as a change of scenery, a virtual vacation of a virtual machine.

    A download button

    ]]>
    Spaghetti Parenthesis Visualizer https://cjshayward.com/spaghetti/ Fri, 20 Jan 2017 21:22:50 +0000 https://cjshayward.com/?p=2560 Continue reading "Spaghetti Parenthesis Visualizer"]]>

    Set of opening characters, i.e. '{(' or '{[(': .
    Set of closing characters, i.e. ')}' or ')]}': .
    Preserve line breaks.

    Your code, unfurled:

    (Nothing yet.)

    Your code, underlined:

    (Nothing yet.)

    Having trouble trying to keep track of nested parentheses in a page-long SQL query or PHP/Perl/Python etc. conditionals? Type or paste in code you have that has so many layers of parenthesis that you struggle to keep on top of the tangled depth of the code.

    Security-conscious? This code doesn't send your code snippet to the server: all calculations are handled in the browser. However, if you want that extra level of assurance, you are welcome to capture the source and make sure everything's on the up-and-up before you use it. This code is dual-licensed, available to you under your choice of the terms of MIT and GPLv3 license.

    This page is link-ware. If you like it, you are invited to put a link to CJSHayward.com.

    ]]> Theory of Alien Minds: A UX Copernican Shift https://cjshayward.com/theory-of-alien-minds/ Thu, 04 Aug 2016 14:07:23 +0000 https://cjshayward.com/?p=1804 Continue reading "Theory of Alien Minds: A UX Copernican Shift"]]> Cover for Profoundly Gifted Survival Guide

    There was one moment of brilliance, I was told, when a North American missionary visiting in Latin America was asked if clothing and sheets lasted longer in her first-world home. The question was not surprising and it reflected cross-cultural understanding: bedsheets and clothing in the U.S. can last for quite some time, while bedsheets and clothing in the host country wear out quickly, perhaps in a few weeks, and it is nickle-and-dime drain on none-too-deep pockets to keep replacing them. The question, perceptive enough, was a question about privilege and easy living.

    The missionary's response was astute. She thought for a minute, and then said that yes, sheets in her home area lasted much longer than several weeks if properly cared for... and continued to explain, in addition, what people wore when they were all bundled up for bitter cold. Winter clothing normally goes well beyond what is needed for modesty, and gloves, hats, and scarves (or, today, ninja masks) exist because on the very worst days every square inch of exposed skin will be brutally assaulted. The conversation ended with a slight degree of pity from people who only wore clothes for modesty realized that yes, as they had heard, bedsheets and normal clothing lasted much longer than several weeks, but there were some other price tags to pay. The missionary's communication was in all sympathetic, human, and graceful.

    Something similar may be said of the degree of IQ where you learn firsthand that being making other people envious is not a good thing, and where it happens more than once that you need to involve authorities or send a C&D letter for harassment to stop, and where others' insecurities leave you socially skating on thin ice surprisingly often. Nonetheless, what may be the most interesting social lesson may have every relevance to "UX," or User eXperience, and it has to do with what is called "theory of other minds". The normal conditions for developing "theory of other minds" can run into difficulties, but there is something very valuable that can happen.

    Theory of other minds,
    Split into "theory of like minds", and:
    "theory of alien minds":
    A Copernican shift

    One classic developmental step in communication is developing a "theory of other minds", meaning that you relate to people as also having minds, rather than as some sort of thing that emits what may be inexplicable behaviors instead of acting out of human motives and beliefs.

    Part of how the normal "theory of minds" develops is that children tend to give adults gifts they would like to receive themselves, such as colorful toys rather than books. At a greater stage of maturity, people can go from giving gifts they would themselves like to receive, to giving gifts they would not want as much themselves, but another person would. However, in normal development this is an advanced lesson. For most people, the baseline is assuming that most people think like them most of the time.

    For outliers in some dimensions, this simple picture does not work. People start with the same simple assumption: that you can relate to people as basically thinking like you. But if you're different enough, you'll break your shins with this approach. Perhaps outliers communicate markedly better if they know one person who starts on the same page, but communication is harder.

    The crucial distinction I would draw is between theory of like minds and theory of alien minds. Both theory of like minds and theory of alien minds relate to others as having minds. But theory of like minds is based on the assumption that other people think as you do. Theory of alien minds also really and truly relates to others as having minds, but it is based on a realization that you are not the center of the universe, others often do not think like you, and you need to build bridges.

    "Theory of like minds" says, "Other people have minds that are basically just like mine."

    "Theory of alien minds" takes a step back, saying, "Other people have minds, and they have minds whether or not they're basically just like mine.

    This Copernican shift has every relevance to "Let's not forget the user" disciplines in UX.

    So what does a "theory of alien minds" really look like?

    Let me provide several examples, before getting into what it has to do with UX:

    Hayward has worked long and hard to communicate well.

    Many people might guess that the features of his [giftedness] would bring benefits...

    ...but few guess how much.

    The same kind of thing goes with excellent communication. When a friend came from out of town to live in a local apartment, quite a few friends gathered to help unload the moving van.

    Hayward, asked for an assignment, expecting to be asked to carry something. Instead, for reasons that are still not clear, she handed him a leash and asked him to look after a dog she has introduced as not at all comfortable around men. And the dog very quickly moved as far away as his leash would allow. But Hayward worked his magic... and half an hour later, he was petting the dog's head in his lap, and when he stood up, the dog bounded over to meet the other men in the group.

    In another setting, Hayward was waiting for labwork at a convenient care center, when a mother came in, with a four-year-old daughter in tow. The girl was crying bitterly, with a face showing that she was in more pain than she knew how to cope with, and an ugly bulging purple bloodblister under her thumbnail. Hayward understood very well what was going on; his own experience as a child who smashed a thumbnail badly enough to get a bloodblister underneath, was the most pain he had experienced yet in his life.

    When the convenient care staff threw the mother a wad of paper to fill out before treatment (as opposed, for instance, to first just administering anaethesia and only after that detain the mother with paperwork), she left the child crying alone in a chair. Hayward walked over, wanting to engage the girl in conversation in the hopes of lessening her pain. He crouched down to be at eye level, and began to slowly, gently, and calmly speak to the child.

    Some time later, Hayward realized two things.

    First of all, his attempt to get the girl to talk were a near-total failure. He had started by asking her favorite color, and she was able to answer that question. But essentially every other age-appropriate prompt was met with silence: "Q: What kind of instrument does a dog play?"—"A: A trom-bone." (But maybe her pain was too great to allow regular conversation.)

    Second of all, she had stopped crying. Completely. And her face no longer showed pain. He had, partly by his nonverbal communication, entirely absorbed her attention, and she was unaware of pain that had her bawling her eyes out some minutes before. Hayward realized this with a start, and tried to keep up the conversation such as it was, regardless of whether he had anything to say. A rather startled Hayward did his best not to break the illusion, and did so smoothly enough that she seemed not to notice.

    Some time later, Hayward was called for his blood draw. He returned to find the mother comforting her daughter, as she had not done before. The little girl was crying again, but it was a comforted crying, a world of difference from when she was alone with really quite vile pain. The mother seemed awestruck, and kept saying, "You have a very gentle way about you."

    Another time, Hayward was asked to substitute-teach a class for parents of English as a Second Language students. He was provided an interpreter who spoke Spanish and English, and the class met all objectives...

    And Hayward didn't really use the interpreter. He adapted to language and culture to bring an enjoyable class for everyone.

    When studying abroad, Hayward was quite pleasantly surprised (and very much surprised) when a Ghanain housemate said Hayward had challenged some assumptions, saying Hayward was "like a white American, and like a black African, closer than an African brother..." and from that point on he enjoyed insider status among Ghanian friends. He has perhaps never received a greater compliment.

    Hayward thinks at a fundamentally different level, and he needs to build bridges. But the good news is that he has been working on bridge-buildling for years and built bridges that span great differences. Being in a situation where has to orient himself and bridge a chasm doesn't really slow him down that much.

    In addition, these "super powers" can have every relevance to business work. No employer particularly cares if he can read ancient and medieval languages: but one employer cared that he could easily read bureaucratic documentation that was incomprehensible to everyone else.

    No employer really cares that at the age of 13 Hayward crafted crafted a four-dimensional maze, worked on visualizing a 4-cube passing through 3-space, and looked at a data visualization in his calculus book and (re)invented iterated integration...

    But some employers care a great deal that he can take a visualization project, start work along the lines suggested by Tufte's corpus of written work, and start to take steps beyond Tufte.

    No employer really seems to care that he has studied at the Sorbonne, UIUC, and Cambridge (England) in three very different fields: but co-workers have been puzzled enough that he so effortlessly shifts his communication and cultural behavior to have a colleague and immigrant ask him why he relates to Little Russia's culture so well.

    But some employers appreciate his efforts to listen and understand corporate culture. In serving like a consultant for a travel subsidiary, Hayward's contacts within the organization that picked up he was trying to understand their language on their terms, and the Director of Sales and Marketing half-jokingly asked, "Do you want to be a travel agent?" Hayward perhaps would not be an obvious fit for personality factors, but she picked up a crystal-clear metamessage: "I want to understand what you are saying, and I want to understand it on your terms."

    Furthermore, while no employer has yet to care about Hayward's interest in writing, one employer cared a great deal that he took a high-value document concerning disaster recovery and business continuity, valuable enough that it would be significant for the employer to file with e.g. their bank, and took it from being precise but awkward and puzzling to read, to being precise, accessible, simple, and clear.

    What does this communication across barriers have to do with UX?

    Everything.

    I've had postgraduate training in anthropology, cognitive science, computer science, philosophy, and psychology, and I consider "theory of other minds" communication to be out-and-out the central skill in UX. Perhaps the most structural of these disciplines is anthropology, and a training in anthropology is a training in understanding across differences.

    Once anthropologists found difference by crossing the Pacific and finding aboriginal people untainted by modern technology. Now anthropologists find difference by crossing the street. But the theory of alien minds is almost unchanged.

    Jakob Nielsen has been beating for essentially forever the drum of "You are not a user". Perhaps his most persistent beating of his drum is:

    One of usability's most hard-earned lessons is that 'you are not the user.' If you work on a development project, you're atypical by definition. Design to optimize the experience for outsiders, not insiders.

    What this means, in competency, is "Communicate out of a theory of alien minds." Or, if you prefer, a theory of "outsiders", but don't assume that deep down inside "outsiders" are really just like "insiders." Exercise a theory of alien minds.

    What Nielsen is telling people not to do is coast on a "theory of like minds," and assume that if a user interface is intuitive and makes sense to the people who built it, it will just as much make sense to the audience it was built for. It won't. You have to think a bit differently to build technology, and that means you need a theory of alien minds. Assuming that you are the center of the universe, even if it's unintentional, is a recipe for failed UX. We all want better than that.

    Read more of Profoundly Gifted Survival Guide on Amazon!

    ]]>
    So, You've Hired a Hacker (Revised and Expanded) https://cjshayward.com/hacker/ Wed, 23 Mar 2016 18:19:59 +0000 https://cjshayward.com/?p=1524 Continue reading "So, You've Hired a Hacker (Revised and Expanded)"]]>

    Own C.J.S. Hayward's complete works in paper!

    There is a wonderful variety among humans. Ethnicity and culture provide one of the most important dimensions—but there can be profound differences between two people who look the same. If neither appreciates the differences, and thinks, "He's just like me—only not doing a very good job of it," there will be conflicts that can be prevented. If they understand their differences, both can profit. This document is written so that you can understand your hacker and enjoy a more productive working relationship.

    Managers and hackers both vary, but there are some things that come up again and again. That's why this document exists. I am concerned with a particular kind of clash that most hackers have with many managers—a conflict that is more easily resolved if both parties understand each other.

    What are some of the common differences between managers and hackers? There are several, but let me list five important ones:

    Managers Hackers
    Tends to be very concerned with morality, and wants to connect with society and contribute. Rises to positions of responsibility, not only in business, but in church and volunteer organizations. Lives by responsibility and duty. Intent on cultivating knowledge and skill. Rises to tremendous levels of competency with technology and other things. High level of discipline used to continually refine abilities.
    Thinks concretely. Good at small talk, and at the logistical details needed to run a business. Thinks abstractly. Good at deep discussions, and thinking about the hard concepts needed to work with technology.
    Measures own contribution to society by the extent to which he adds to rules and sees that people live by following rules. Tends to equate rules with morality or the good of society. Far more aware of the limitations of rules. Does not equate rules with morality or the good of society. Very likely to notice rules that are hurting your company—yes, they do exist, and they're more common than you think.
    Closely resembles about 40% of the population; most people have dealt with many similar people before, and can easily understand managers. Thinks in an uncommon way found in perhaps 5% of the population; will encounter many people who have never known well anyone who is similar. Can't count on other people understanding him.
    Is such a dominant force in human society that he can easily forget that others might be different. Works well with people because of how much he holds in common with so many others. Needs to work at understanding people like hackers. May have intense powers of concentration. Prizes an offbeat and clever sense of humor. At times, painfully aware of inconsistencies that are invisible to the people who are acting hypocritically. Marches to the beat of a different drummer, and needs to work at understanding people like managers.

    Managers and hackers complement each other. If they work at it, they can enjoy a long and fruitful working relationship.

    Questions and Answers:

    Section 1: Basic Understanding

    1.1: Won't my hacker break into my computer and steal my trade secrets?

    Point of clarification. There are two communities of people that call themselves 'hackers'.

    One of these groups is the one you've heard about—those who take pride in breaking into other people's computers. That is all the media understands 'hacker' to mean, but there is another community, an older and much more interesting one, that is insulted by being mistaken for the first community. They are as insulted as an automotive engineer would be if the media said 'automotive engineer' when they meant 'car thief', and the engineer learned through bitter experience that, whenever he told people he was an automotive engineer, people thought he was only a car thief.

    Your hacker is an automotive engineer, not a car thief. He is a hacker because he loves computers, and loves to do impressive things with them. He doesn't want to steal your trade secrets, and it would be good manners of you not to confuse "automotive engineer" hackers with "car thief" hackers—whom he refers to as 'crackers', or the extremely pejorative 'script kiddies'.

    1.2: Was it a good idea to hire a hacker?

    It depends on the job. A hacker can be dramatically more effective than a non-hacker at a job, or dramatically less effective. Jobs where hackers are particularly good are:

    • Systems administration
    • Programming
    • Design
    • Web-related development

    Jobs where hackers are particularly bad are:

    • Data entry
    • "Computer operator", where the "computer operator" has to use software (especially Microsoft software) that he can't improve.

    More generally, a job that requires fast and unexpected changes, significant skill, talent, and is not very repetitive will be one a hacker will excel at. Repetitive, simple jobs are a waste of a good hacker, and will make your hacker bored and frustrated. No one works well bored and frustrated.

    The good news is, if you get a hacker on something he particularly likes, you will frequently see performance on the order of five to ten times what a "normal" worker would produce. This is not consistent, and you shouldn't expect to see it all the time, but it will happen. This is most visible on particularly difficult tasks.

    1.3 Wait, you just said "ten times", didn't you? You're not serious, right?

    Yes, I am serious; a hacker on a roll may be able to produce, in a period of a few months, something that a small development group (say, 7-8 people) would have a hard time getting together over a year. He also may not. Your mileage will vary.

    IBM used to report that certain programmers might be as much as 100 times as productive as other workers, or more. This kind of thing happens.

    1.4 How should I manage my hacker?

    The same way you herd cats. It can be quite confusing; they're not like most other workers. Don't worry! Your hacker is likely to be willing to suggest answers to problems, if asked. Hackers are known for coming together and producing impressive software without any business people to tell them what to do. That's how Perl was produced. And Linux. And quite a few other things, great and small. Most hackers are nearly self-managing.

    1.5 I don't understand this at all. This is confusing. Is there a book on this?

    There are several books that explain important pieces of the puzzle, and some of them are listed in a reading list below. If you read from the list and ask your hacker to help you connect the dots, you've got a good chance at understanding your hacker much better.

    Section 2: Social issues

    2.1: My hacker doesn't fit in well with our corporate society. She seems to do her work well, but she's not really making many friends.

    This is common. Your hacker may not have found any people around who get along with hackers. You may wish to consider offering her a position telecommuting, or flexible hours (read: night shift), which may actually improve her productivity. Or, even better, hire another one.

    2.2: My hacker seems to dress funny. Is there any way to impress upon him the importance of corporate appearance?

    Well... let's look at your view of clothing first, so that you'll have a better chance at understanding how your hacker sees things differently.

    You believe in showing respect for the company and those you work with. To you, much of that respect revolves around little details. These details are to you much of the substance of respect—such as that classy suit you wear to the office. So when a hacker wears jeans and a t-shirt to work, he must be showing disrespect, right?

    Not really. Those jeans—kneeholes and all—are what he wears to see his best friend, whom he respects deeply. If your hacker happens to be a Christian, he may wear jeans and a T-shirt to church on Easter. I sometimes do, and when I dress up for church, it is more to avoid distracting other churchgoers than any need of fancy clothes in order to worship God. Hackers look past appearances, and it seems strange to them that you think they need uncomfortable clothes to work well: if it's what's inside the clothing that matters, why not wear something comfortable and be able to concentrate better?

    If your hacker isn't dressing up, how can he still respect your company? He works hard, solves problems, and probably thinks about ways to help your company be more productive—even when he's at home. If he wants to wear comfortable clothing at work, it's not disrespect; he just understands what IBM, Microsoft, and Ford all recognize: employees are most productive when they choose what to wear—not their company. If you ask your hacker respectfully, he'll probably wear clothing without any holes, and might even dress up for a few special occasions.

    Your suit is a professional asset. It helps other people see your professionalism. Your hacker's t-shirt is also a professional asset. It's part of a culture that judges a person by what's inside his clothing, and he works better when comfortable. He doesn't try to get you to dress like him; why don't you extend the same courtesy to him?

    2.3: My hacker won't call me by my title, and doesn't seem to respect me at all.

    Your hacker doesn't respect your title. Hackers don't believe that management is "above" engineering; they believe that management is doing one job, and engineering is doing another. They may well frequently talk as if management is beneath them, but this is really quite fair; your question implies that you talk as if engineering is beneath you. Treat your hacker as an equal, and she will probably treat you as an equal—quite a compliment!

    2.4: My hacker constantly insults the work of my other workers.

    Take your hacker aside, and ask for details of what's wrong with the existing work. It may be that there's something wrong with it. Don't let the fact that it runs most of the time fool you; your hacker is probably bothered by the fact that it crashes at all. As your customers will be—consider your hacker to be an early warning system. He may be able to suggest improvements which could dramatically improve performance, reliability, or other features. It's worth looking into.

    You may be able to convince your hacker to be more polite, but if there appear to be major differences, it's quite possible that one or more of your existing staff are incompetent by his standards. Note that hackers, of course, have different standards of competence than many other people. (Read "different" as "much higher".) Is this necessarily appropriate? All people have weaknesses. It would perhaps be nicer if hackers were more charitable to people who can't match their talent, but you're lucky to have someone on staff who's competent enough for this to be a problem.

    Section 3: Productivity

    3.1: My hacker plays video games on company time.

    Abraham Lincoln said, "If I had ten hours to chop down an oak tree, I'd spend the first eight sharpening my axe."

    Some jobs are done best by getting your hands dirty immediately: if you hire a kid to rake your leaves, you probably want him to start raking as soon as he arrives. But if you contacted a building contractor to make a new office building in the morning, and he was pouring concrete by the end of the day, you would not be impressed—at least not in a good way. Something is very wrong: there are all sorts of things that need to happen first. If your contractor begins work by pouring concrete, you will end up paying for some very expensive mistakes that could have been completely avoided by simple preparation.

    Your hacker is probably honest, too honest to start off by writing poor-quality code "so my manager will think I'm working." He'd rather be productive and spend two weeks preparing rather than two years fixing needless mistakes.

    Perhaps it would be easier if hacker ways of preparation coincided with what you do when working—writing memos or something like that. But there is an elusive productive zone, and your hacker is doing whatever he can to gain that productivity. I often write best after taking meandering walks—and, if you have difficulty believing that walks are a way to produce something good, I'd encourage you to read A Dream of Light—which, walks and all, took me very little time to write. I averaged over ten times the normal speed of a professional writer. Your hacker who plays games on company time is using the same areas of his mind as I did. Your hacker is sharpening his axe, and it's a good idea for him to do so.

    Hackers, writers, and painters all need some amount of time to spend "percolating"—doing something else to let their subconscious work on a problem. Your hacker is probably stuck on something difficult. Don't worry about it.

    3.2: But it's been two weeks since I saw anything!

    Your hacker is working, alone probably, on a big project, and just started, right? She's probably trying to figure it all out in advance. Ask her how it's going; if she starts a lot of sentences, but interrupts them all with "no, wait..." or "drat, that won't work", it's going well.

    3.3: Isn't this damaging to productivity?

    No. Your hacker needs to recreate and think about things in many ways. He will be more productive with this recreation than without it. Your hacker enjoys working; don't worry about things getting done reasonably well and quickly.

    3.4: My hacker is constantly doing things unrelated to her job responsibilities.

    Do they need to be done? Very few hackers can resist solving a problem when they can solve it, and no one else is solving it. For that matter, is your hacker getting her job done? If so, consider these other things a freebie or perk (for you). Although it may not be conventional, it's probably helping out quite a bit.

    3.5: My hacker is writing a book, reading USENET news, playing video games, talking with friends on the phone, and building sculptures out of paper clips. On company time!

    He sounds happy. The chances are he's in one of three states:

    • Basic job responsibilities are periodic (phone support, documentation, et al.) and there's a lull in incoming work. Don't worry about it!
    • Your hacker is stuck on a difficult problem.
    • Your hacker is bored silly and is trying to find amusement. Perhaps you should find him more challenging work?

    Any of these factors may be involved. All of them may be involved. In general, if the work is challenging, and is getting done, don't worry too much about the process. You might ask for your corporation to be given credit in the book.

    3.6: But my other workers are offended by my hacker's success, and it hurts their productivity.

    Do you really need to have workers around who would rather be the person getting something done, than have it done already? Ego has very little place in the workplace. If they can't do it well, assign them to something they can do.

    Section 4: Stimulus and response

    4.1: My hacker did something good, and I want to reward him.

    Good! Here are some of the things most hackers would like to receive in exchange for their work:

    • Understanding.
    • Understanding.
    • Understanding.
    • Respect.
    • Admiration.
    • Compliments.
    • Discounts on expensive toys.
    • Money.

    The order is approximate, but the most important one is the most difficult. If you can give that to your hacker, in his eyes you will be a cut above most other bosses—and he just might work for you longer.

    Try to remember this good thing your hacker just did the next time you discover he just spent a day playing x-trek. Rather than complaining about getting work done, write it off as "a perk" that was granted (informally) as a bonus for a job well done. Don't worry; hackers get bored quickly when they aren't doing their work.

    4.2: My hacker did something bad, and I want to punish him.

    Don't. 30 years of psychological research has shown that punishment has no desirable long-term effects. Your hacker is not a lab rat. (Even if he were a lab rat, punishment wouldn't work; at least, not if he were one of the sorts of lab rats the psych research was done on.) If you don't like something your hacker is doing, express your concerns. Explain what it is that bothers you about the behavior.

    Be prepared for an argument; your hacker is a rational entity, and presumably had reasons. Don't jump on him too quickly; they may turn out to be good reasons.

    Don't be afraid to apologize if you're wrong. Your hacker will never think less of you if you admit to a mistake. He might be disappointed if you've made a mistake and can't admit it, but he will never look down on you for admitting you were wrong. If your hacker admits to being wrong, don't demand an additional apology; so far as the hacker is concerned, admitting to being wrong probably is an apology.

    4.3: I don't get it. I offered my hacker a significant promotion, and she turned it down and acted offended.

    A promotion frequently involves spending more time listening to people describing what they're doing, and less time playing with computers. Your hacker is enjoying her work; if you want to offer a reward, consider an improvement in title, a possible raise, and some compliments. Make sure your hacker knows you are pleased with her accomplishments—that's what she's there for.

    4.4: My company policy won't let me give my hacker any more raises until he's in management.

    In the Bible, Paul describes roles in the Christian church, and then compares these community members to parts of the human body (I Corinthians 12:14-26, NIV):

    Now the body is not made up of one part but of many. If the foot should say, "Because I am not a hand, I do not belong to the body," it would not for that reason cease to be part of the body. And if the ear should say, "Because I am not an eye, I do not belong to the body," it would not for that reason cease to be part of the body. If the whole body were an eye, where would the sense of hearing be? If the whole body were an ear, where would the sense of smell be? But in fact God has arranged the parts in the body, every one of them, just as he wanted them to be. If they were all one part, where would the body be? As it is, there are many parts, but one body.

    The eye cannot say to the hand, "I don't need you!" And the head cannot say to the feet, "I don't need you!" On the contrary, those parts of the body that seem to be weaker are indispensable, and the parts that we think are less honorable we treat with special honor. And the parts that are unpresentable are treated with special modesty, while our presentable parts need no special treatment. But God has combined the members of the body and has given greater honor to the parts that lacked it, so that there should be no division in the body, but that its parts should have equal concern for each other. If one part suffers, every part suffers with it; if one part is honored, every part rejoices with it.

    This is a deep insight into human community. It's not just about religion. Executives, managers, programmers, salespeople, secretaries, and other employees all contribute something fundamental to a company. Janitors? Those people are important? Well, if janitors aren't important, firethem, and streamline your business. The halls may be a bit stinky with all that rotting trash, and two of the secretaries may sneeze every time someone walks by and kicks up dust. Your insurance covers emergency treatment and rabies shots when a rat creeps out of a mound of garbage and bites you, right? Your star saleswoman couldn't close a key sale because she was in the hospital with food poisoning after... wait a minute. Maybe those janitors we all look down on deserve a second look. Maybe they contribute more to the physical well-being of other employees than almost anyone else you have on staff. Maybe they're important after all.

    Eye, hand, stomach, and sturdy back muscles all contribute something. Sometimes the observation—"My group adds something unique and vital, something that no other department gives."—to a conclusion that is not justified: "My group's contribution to the company is better and more important than anyone else."

    This conclusion also affects how companies allocate money: the people who set salaries believe they're the most important employees. Because it's management who sets the salaries, the belief:

    A manager is a more important employee than a non-manager

    creates a policy like

    Every manager must be paid more than any non-manager

    or

    No matter how much an employee does for the company, there's an artificial limit on how much you can reward him unless he gives up his work, which he is good at, and becomes a manager instead.

    If that's what you believe—a prejudice that would shock any true leader—then I don't think I can help you much. I would simply encourage you to finish the job. Send a memo out to all employees saying:

    We believe that every manager makes a more important contribution to this company than any non-manager. If you're not a manager, you're only a second-class citizen with our company. If you don't like this, you can leave.

    And be ready for an exodus. Your hackers won't be the only ones to decide you're too stupid to work with. They'll just be the first.

    Does that sound unattractive? You do have a better alternative. Your hacker can quite possibly earn $200/hour or more, if he wants—his talents are worth it. If your company policy imposes a salary ceiling on non-managers, your company policy is broken. Fix your company policy, find a loophole (say, a consultant given a contracted permament consulting position with benefits), or else get ready to have one of your most productive employees leave because your company policy is broken and you couldn't work around it.

    I can't believe the hacker on my staff is worth as much as we're paying.

    Ask the other in the staff what the hacker does, and what they think of it. The chances are that your hacker is spending a few hours a week answering arcane questions that would otherwise require an expensive external consultant. Your hacker may be fulfilling another job's worth of responsibilities in his spare time around the office. Very few hackers aren't worth what they're getting paid; they enjoy accomplishing difficult tasks, and improving worker efficiency.

    Section 5: What does that mean?

    5.1: My hacker doesn't speak English. At least, I don't think so.

    Your hacker is a techie, and knows a number of powerful concepts that most English-speakers don't know. He also knows words for those concepts. Guess what? The concepts are unusual concepts, and the words are unusual words. He doesn't use standard words for many things because there aren't any standard words to explain the cool things he does.

    Your best bet is to pick up a copy of TNHD (The New Hacker's Dictionary). It can be found at http://catb.org/jargon or from a good bookstore. If you have trouble understanding that reference, ask your hacker if she has a copy, or would be willing to explain her terms. Most hackers are willing to explain terms. Be ready for condescension; it's not intended as an insult, but if you don't know the words, she probably has to talk down to you at first to explain them. If you're bothered by this, think about explaining to a non-professional how to keep a project on task—if you can't use any words longer than five letters. That's what your hacker is doing when she tries to explain technical concepts in non-technical words. Please understand if she sounds a little condescending.

    It's a reasonably difficult set of words; there are a lot of them, and their usage is much more precise than it sounds. Hackers love word games.

    It is also possible that English is not your hacker's native language, and that it's not yours either. Feel free to substitute a more appropriate language.

    5.2: I can't get an estimate out of my hacker.

    This is easier to understand with an analogy. Imagine two situations:

    In the first situation, you drive for work on the same roads, at the same time, as you have for the past five years, and listened to the traffic report in the shower.

    In the second situation, you are out in the middle of nowhere, travelling to see a distant relative, and you realize that you've forgotten to buy a hostess gift for the people you're driving to visit. You stop by a gas station to ask where you can find a gift shop which would sell a dolphin statuette. The attendant says, "Take the road you're on, and turn off onto the second side street you see. Keep on going until you hit the second stop sign after John's general store. It's in the third town you'll see."

    Now, in both cases, think about answering the question, "How long will it take?"

    In the first case, you probably know the answer: "Twenty-six minutes, twenty-two if I hit the lights right." In the second case—well, given that you don't know how long the route is, what the speed limits are, or how you will find the sign once you reach the right town, the best answer is, "I don't know."

    When you ask a hacker how long a task will take and he says, "I don't know," he isn't being difficult. Fixing a broken network, when you don't know why it's down, is much more like the second situation than the first. You don't need to throw a pity party for your hacker because he has to work in unfamiliar territory and doesn't even know how long a task will take. He doesn't look at it that way; he likes the challenge. But it does mean that he accepts tasks before he knows exactly how he'll do them, and he is responsible enough to say "I don't know," and not tell you something he's simply made up. Your hacker is a driver who thrives on finding his way in unfamiliar territory, with washed-out bridges and incomplete directions among the surprises. You might be glad you have someone who likes that kind of assignment.

    Your hacker hasn't figured out how hard the problem is yet. Unlike most workers, hackers will try very hard to refuse to give an estimate until they know for sure that they understand the problem. This may include solving it.

    No good engineer goes beyond 95% certainty. Most hackers are good engineers. If you say that you will not try to hold him to the estimate (and mean it!) you are much more likely to get an approximate estimate. The estimate may sound very high or very low; it may be very high or very low. Still, it's an estimate, and you get what you ask for.

    5.3: My hacker makes obscure, meaningless jokes.

    Another one that's a little hard to explain.

    Imagine that you are visited by a brilliant wayfarer. He strives to understand those around, silently tolerates a great many things that seem strange to him, and brings with him cultural treasures unlike anything your culture has to offer. One day, he tries to share some of them with you. Should you be bothered?

    That's what's happening when your hacker tells you obscure technical jokes. He could be trying to make you feel stupid, but let's be charitable. Your hacker is uncommonly intelligent—he might be a member of Mensa. Intelligent people think a little bit differently, and a genius may seem like someone from another world. Your hacker probably understands you better than you understand him—and when he shares jokes with you, he's giving you a chance to see something special. If you feel brave, you might even ask him to explain some of them.

    But don't be bothered when he tells you jokes that take a while to explain. Some of them are quite interesting.

    5.4: My hacker counts from zero.

    So does the computer. You can hide it, but computers count from zero. Most hackers do by habit, also.

    Section 6: Is there anything else I should know?

    6.1: I've found this document to be tremendously helpful. Is there anything I can do to say thank-you?

    Wonderful of you to ask, and you certainly can. There are two authors who've contributed to this document, an original and a revision author. Both would appreciate cash donations (e-mail the original/revision authors for details). The revision author would be very happy to receive a link to his home page: CJS Hayward (Browse around and see what he has to offer!)

    You might also consider buying a couple of books through the links on these pages; you get cool books, and the authors get pocket change. 🙂 The books listed in the original version will give money to the original author, while the books added in the revision will give money to the revision author.

    If you'd like to give something to one of the authors, but don't know which, why not flip a coin?

    6.2: Are there any books that will help me understand my hacker?

    Excellent question. Yes, there are. The following list is suggested:

    • Please Understand Me or Please Understand Me II

      What I said above about common manager/hacker differences was drawn from Please Understand Me as well as experience. Most hackers are intuitive thinking types, while managers who are confused by hackers tend to be sensate judging types. If you're in a hurry, buy Please Understand Me and read the descriptions for sensate judging and intuitive thinking types. You may find them tremendously helpful in understanding hackers. I've found them tremendously helpful in understanding managers.

      Please Understand Me came out in the 1970s and describes what people are like. Please Understand Me II came out in the 1990s and describes both what people are like and what they can do. (It's about twice as long.) I prefer Please Understand Me.

    • The New Hacker's Dictionary

      Read the introduction and appendices; they're worth their weight in gold. Then read a definition a day—you'll learn a lot. This book is probably the #1 hacker classic, and provides an invaluable asset into understanding hacker thought. Don't worry if parts of it are hard to understand—you'll still learn something, and your hacker can probably explain the harder parts.

    • Stranger in a Strange Land or Firestorm 2034

      Stranger in a Strange Land is a classic novel about a person who is raised by Martians and is brought to earth, a Martian mind in the body of a young man. There are not any hackers in this story, but if you can understand the protagonist in this story, you may find it much easier to understand and appreciate your hacker. Think of it as driving an automatic after you've learned to drive a stick.

      Firestorm 2034 is a story about a medieval genius brought to the 21st century. He is traumatized by his first contacts with computers, but grows to be fascinated, and learns to program. The reader is with him as he understands technology and makes a discovery in artificial intelligence. This book was written to convey insight into certain kinds of people. If you read it, you should find it easier to understand your hacker—and perhaps grasp technology a little better, to boot! It is my second novel.

      Ok, why is an unknown author putting his book next to a Heinlein classic? A few reasons:

      • It draws heavily on Heinlein's work.
      • It's less than a third as long as Stranger. To a busy leader, that counts for a lot.
      • It's written by someone who understands technology, and who weaves technology deeply into the story.
      • Readers like it. One actually said he liked it better than Stranger.
      • There's less stuff that's likely to offend you.
      • I have been published in more than one respected journal. The editor of the high-IQ journal Ubiquity saw my work, and asked to feature me in their fall/winter 2001 issue—with a biography, a few writings, a painting, and a four dimensional maze. I'm not completely unknown as an author.

      But it's your call which novel to read—and I won't question your judgment if you choose Stranger.

    • Guiding the Gifted Child

      This award-winning title is a very practical book because it conveys understanding. It does a good enough job of it to be useful to several different kinds of people. It will help you understand the sort of people who become hackers.

      This also is the only book on this list specifically intended to help people guide hacker-like people.

    • The Cathedral and the Bazaar

      Perhaps this has happened already. Or perhaps it will happen any day.

      You try to reason with your hacker, and say, "Windows was made by the heavily funded efforts of a major corporation. Linux was made by some programmers on their spare time, and you can get it for free. Is Linux really as good as Windows?"

      Your hacker rolls his eyes, appears to be counting to ten, gives you a very dirty look, and slowly says, "Is the upcoming band performance next door—live, in concert—really as good as this scratched-up CD?"

      Your hacker believes that open source software is normally better than Microsoft, and has very good reason to do so. This book explains why—and it may help you to get better software for less money, and put your business in a more competitive position. As far as hacker culture goes, it only illuminates a small part, but it does so very well.

    Unfortunately, none of these books was specifically written to explain hacker culture to non-hackers. Fortunately, your hacker can help you connect the dots and put things together. Just ask him!

    6.3: Has this FAQ been published?

    The original version, in some form, has been bought by IBM DeveloperWorks, which funded part of the work. You could read their version (nicely edited) by following this link (non-functional as of 12/31/01; I've contacted IBM requesting a current URL and am waiting to hear back). IBM has also bought another article, the Manager FAQ, a guide to managers for hackers who are frustrated and confused by corporate life. The original author is justifiably happy with his work.

    I am working towards publishing the revised and expanded version.

    What's the copyright status on this? Can I make copies and share it with a friend who's confused by his hacker?

    You may distribute as many copies of this document as you want. The original FAQ has the following notice:

    This document is copyright 1995, 1996, 1998, 1999 Peter Seebach. Unaltered distribution is permitted.

    When I let the original author know I was interested in a revision, and asked what the copyright status was, he said it was covered by the Artistic License. All changes in this revision are also covered by the Artistic License, all added material copyright 2001 by CJS Hayward. Distribute freely.

    What's the author's e-mail, and what's the official distribution site?

    The original is officially distributed at http://www.plethora.net/~seebs/faqs/hacker.html by seebs@plethora.net, and the revision is at CJSHayward.com/hacker/ by jshayward@pobox.com.

    Are there any people the revision author would like to thank?

    Yes. CJS Hayward would very much like to thank the original author, Peter Seebach, for writing an excellent FAQ and for giving him permission to modify it.

    Any disclaimers?

    DISCLAIMER: Both authors are hackers. Bias is inevitable.

    Revision 1.0—Last modified June 9, 2001

    ]]>
    Virtual Tour https://cjshayward.com/virtual_tour/ Fri, 15 Jan 2016 19:52:05 +0000 //cjshayward.com/?p=562 Continue reading "Virtual Tour"]]> Virtual Tour is a CGI script meant to let webmasters take pictures and assemble them into an interactive tour. I invite you to see it in action in the Virtual Tour 'Impressions of Cambridge', whether or not you're a webmaster. It's worth a visit!

    View on GitHub.

    License: This project is free software, available under your choice of the Artistic, GPL, and MIT licenses. If you like this software, you are invited to consider linking to CJSHayward.com.

    Version RedHat RPM Unix .tar.bz2 Unix .tar.gz
    1.0b, development virtual_tour-1.0b-1.i386.rpm virtual_tour1_0b.tar.bz2 virtual_tour1_0b.tar.gz

    Adminisgrator's Guide: Setting Up a Virtual Tour

    Playing Around

    A reference Virtual Tour is available in my 'Impressions of Cambridge'. I would encourage you to play around and see how Virtual Tour ticks, how it looks when it is put together.

    You can log in to your script's administrative pages by adding '?mode=edit' to the end of the URL: if you have a script at 'http://example.com/cgi-bin/virtual_tour', then 'http://example.com/cgi-bin/virtual_tour?mode=edit' will let you log in and set up the pages.

    Views and Places

    There are (virtual) places one might stand, and virtual views. One place will normally have more than one view. (You can stand in one place, and look around and see different things while you stay in the same place.) The left and right buttons do not mean "Move left" or "Move right"; they mean, "Staying where you are, turn left" and "Staying where you are, turn right." The forward and backwards buttons mean, "Move forward/backward while facing the same way." In other words, the backwards button means "Back up," not "Turn around." This is not the most consistent way of handling directions, but it seems to provide more intuitive play.

    Grids and Paths

    If you want, you can manually connect all of the views, but the script provides two shortcuts. The first shortcut is a grid: if you set a Full View Name of "St. John's College 0 0 W", that means, "On the St. John's College grid, at the coordinate (0, 0), facing West." Virtual Tour will look for a picture in 'St_Johns_College_0_0_W.jpg', stripping out the period and apostrophe and converting the spaces to underscores, then adding '.jpg' to the end (or any other image suffix you've asked it to add). Note that this is case sensitive; don't leave your computer looking for '.jpg' files if you have your pictures stored in '.JPG', or give a room of "St. John's College 0 0 W" while your image is stored in 'st_johns_college_0_0_w'. The title given to the user will be something like "'Impressions of Cambridge': St. John's College: 0 East, Zero North (Facing West)." Note: by paying attention to the view titles when visiting 'Impressions of Cambridge', you can tell what the coordinates are. Virtual Tour will automatically link a view with other views at the same place (if the user turns around), and will also link one place to adjacent places on the grid. It should not be necessary to specify too many links manually; normally it should be enough to manually connect e.g. grids with paths, and then let Virtual Tour handle all of the links within a grid or a path.

    Note: 'link', as I'm using the term, does not mean an HTML link <a href="CJSHayward.com">like this</a>. I am using to denote the setup behind what the user will intuitively understand as, "At the end of this path, I can move around in this grid." In other words, the nuts and bolts of navigation. Usually this refers to links you specify manually, not the ones that Virtual Tour will automatically create between parts of a path or a grid that are next to each other.

    A path is similar to a grid, except that it is one-dimensional. Rather than having two coordinates, it only has one, indicating how far you are along the path, and instead of letting you face 'N', 'S', 'E', and 'W', you can face either 'F' (for 'Forward'), or 'B' (for 'Backward'). A sample Full View Name might be "King's Parade 3 B", which would load the image Kings_Parade_3_B.jpg.

    Normally, I created either all or none of the views for a point on a grid or path. In other words, "St. John's College 0 0 N", "St. John's College 0 0 E", "St. John's College 0 0 S", and "St. John's College 0 0 W" should all exist if at least one exists, and likewise "King's Parade 1 F" and "King's Parade 0 B".

    Coordinates for grid points, and positions along a path, must be integers.

    Manually Linking a Grid and a Path

    What I did to connect "St. John's College 0 0" with "King's Parade 3", so that "King's Parade 3" is intuitively south of "St. John's College 0 0", is to create four links from four different views:

    1. Go to the "Room View" screen for "King's College 0 0 S" and set the "Forward" link to "King's Parade 3 B".
    2. Go to "King's Parade 3 F" and set the "Forward" link to "St. John's College 0 0 N"
    3. Go to "St. John's College 0 0 N" and set the "Back" link to "King's Parade 3 F".
    4. Go to "King's Parade 3 B" and set the "Back" link to "St. John's College 0 0 S".

    The last two steps help make Virtual Tour behave the way a player would expect when he tries to back up. This sets the path's forward direction to the grid's North. Various directions need to be adjusted if the path's forward direction is to the grid's South (basically, the 'B' and 'F' portions of the path are swapped), or the path leaves from the grid's North, East, or West. Basically, if you're not sure, try to work it out (or take a guess), test it, and expect to get it wrong the first couple of tries, but you'll be getting the hang of it before too long.

    This is most easily done after the views are all created, not as you are adding views.

    I know that this is cumbersome and slightly confusing; I'm sorry, but I haven't taken the time yet to make a simpler and more intuitive way of doing this.

    Directories, Files, and Images

    The virtual tour will look for images in '/var/www/html/virtual_tour/' (if you installed from an RPM), or whatever place you told it to store its HTML files in (if you installed manually). If you're not sure where it is, go to the home page ('http://example.com/cgi-bin/virtual_tour' for an RPM install, or what you specified for a manual install), right-click on one of the images, and select "View Image." That should let you see the image's URL in your browser's URL bar, which will be in the same directory as where you need to put your pictures.

    The default image size (640x480 at installation) can configured from the 'Miscellaneous' menu, and you can override this for individual images if you want.

    Notes

    That's what you need to know to set up a Virtual Tour, even if it's tersely stated. Play around with it, and if you're a programmer, think about what would be needed to produce something that behaves like 'Impressions of Cambridge'. And, if you think of something important that should be here but isn't, please contact me so I know what else to add.

    -Jonathan

    ]]>
    Proportional Font Terminal: A Better Unix / Linux / Mac Term https://cjshayward.com/terminal/ Thu, 14 Jan 2016 21:18:38 +0000 //cjshayward.com/?p=531 Continue reading "Proportional Font Terminal: A Better Unix / Linux / Mac Term"]]>

    This project works with archaic browsers, like FireFox 3 or (shudder) Internet Exploder 6. It does not seem to work well with current browser versions, and it is being left partly as a historical detail, with a clear reference implementation of how one would do this with today's browser.

    The basic enhancement of allowing this for e.g. Gnome Terminal appears to be in the Gnome Terminal bug tracker, and so this functionality may be available someday in standard terminal programs by setting one's font to Verdana.

    View project on GitHub.

    Design, typography, and terminals:
    Not-so-good, better, best

    Those of us involved in web design and usability know that fonts are not created equal. The first incarnation of my own website used fixed-width fonts for almost everything, because I didn't know what I was doing. Since then, I've joined the rest of the web in recognizing the benefits of using a font optimized for on-screen reading.

    In the spirit of the sort of makeover done by Tufte in books like Envisioning Information, I would like to look at three different terms; the last one is the one offered here.

    Not-so-good

    This is a (cropped) screenshot of the default term (xterm) that shipped with my EeePC. It has a black background, like ancient VT100's:

    A screenshot of some code in a default xterm from an EeePC.What this is optimized for is densely packing information into a tight space, and for serious coding this is seriously answering the wrong question.

    Better

    Let's look at a terminal that shows much better typography and design:

    A screenshot of the same code in a gnome-terminal.This has a more readable font, and it makes productive use of space: more specifically, it uses space to enhance usability and readability, not cram in as many bits per pixel as can still technically be read. The font, unlike even the Mac Terminal, is deftly anti-aliased, and to a designer the font appears to have been clearly designed for usability.

    Best

    But we can do better by breaking out of the grid and using web-based typography as a starting point, and tweak the spacing for reading code:

    A screenshot of the same code in the enhanced terminal served from this page.
    I've looked at a lot of code this way, and the difference is remarkable. If your code is formatted well, it is easier to read and you can tell more at a glance and then zero in on what you need. It has just a little of the magic of of moving from find/grep/xargs to ack, ordiscovering Python. Having tried it, I really don't want to go back.

    How did I do that? By standing on Antoine Lesuisse's shoulders with Ajaxterm (download). A few CSS tweaks, and there is a terminal that takes advantage of the web's advances in typography and usability.

    License: All changes from Ajaxterm 0.10 are free software in the hopes that they may be useful but with ABSOLUTELY NO WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE, available under your choice of the Artistic, GPL, and MIT licenses. If you like this software, you are invited to consider linking to CJSHayward.com. Ajaxterm itself is not my work, but is in the public domain, except for its included Sarissa materials, which are LGPL.

    (These instructions are for Unix/Linux/Mac; on Windows, I would try Cygwin.)

    Troubleshooting tip

    • If you have trouble logging in, and this makes sense in your security situation (by default, Ajaxterm listens on localhost, and firewalls can block 8022 from access by other machines ensuring Ajaxterm is only available locally), you can pass ./ajaxterm.py the argument "--command=bash" and possibly have connections to http://localhost:8022/ simply served bash as the user running ./ajaxterm.py.
    ]]>
    Snippets https://cjshayward.com/snippets/ Wed, 13 Jan 2016 22:53:47 +0000 //cjshayward.com/?p=496 Continue reading "Snippets"]]> Snippets is a CGI script where fortune cookie meets wiki. It provides:

    • A way for people to share quotes, recipes, jokes...
    • A private niche where a person can keep track of sites to visit, people to e-mail.
    • A tool for administrators to turn a large repository of static content into a manageable amount of dynamic content.

    Snippets is designed to be easy to configure and customize.

    View project on GitHub.

    The present release is version 1.0b.

    License: This project is free software, available under your choice of the Artistic, GPL, and MIT licenses. If you like this software, you are invited to consider linking to CJSHayward.com.

     

    Version Unix/Linux
    1.0 (stable) Download
    1.0b (experimental) Download

    Please e-mail me if you are interested in porting Snippets to another server platform. ]]> Sidebar in a Can https://cjshayward.com/sidebar/ Wed, 13 Jan 2016 22:40:20 +0000 //cjshayward.com/?p=486 Continue reading "Sidebar in a Can"]]> Would you like the software that powers this sidebar? Or would you like a front page with one or more rotating links?

    Sidebar in a Can does just that. My front page runs on sidebar technology. The sidebar you see was created only using the install script and facilities described in the README: the administrative web interface and editing the page header and footer. The result is a simple and powerful tool for webmasters to take a large amount of static content (intimidating to new users) and turn it into a quite manageable amount of dynamic content. The result showcases your site's material.

    View project on GitHub.

    License: This project is free software, available under your choice of the Artistic, GPL, and MIT licenses. If you like this software, you are invited to consider linking to CJSHayward.com.

    Sidebar is available as follows:

     

    Version Unix/Linux
    1.0.1 Download
    1.0 Download
    1.0b Download

    Sidebar in a Can is built on Snippets technology.

    Please e-mail me if you are interested in porting Sidebar to another server platform. ]]>