Spaghetti Parenthesis Visualizer

CJSH.name/spaghetti

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.

CFL: A truly unique distributed version control system

A Fully Functional Windows 95 Emulator That Runs Right in Your Browser

Janra Ball: The Headache

Procedures for the Repair and Adjustment of Televisions

Theory of Alien Minds: A UX Copernican Shift

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.

So, You’ve Hired a Hacker

So you’ve hired a hacker (revised and expanded)

CJSH.name/hacker

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: C.J.S. 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 C.J.S. 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. C.J.S. 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

Ajax without JavaScript or Client-Side Scripting

Hayward\s free intranet employee photo directory

Usability for hackers: Developers, anthropology, and making software more usable

Usability, the soul of Python: An introduction to the Python programming language

Virtual Tour

CJSH.name/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!

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 (640×480 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

Catch the Furball (Demo)

A four dimensional maze

Private logistics: privacy-sensitive todo, calendar, scratchpad, personal information management (PIM)

The Sign of the Grail

Proportional Font Terminal: A Better Unix / Linux / Mac Term

This project works with archaic browsers, like FireFox 3 or (shudder) Internet Explorer 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.

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

CJSH.name/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.

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.

CJSH, a Python 3 based experimental, programmable Linux / Unix / Mac command line shell

Proportional font terminal: a better Linux / Unix / Mac term

Private logistics: privacy-sensitive todo, calendar, scratchpad, personal information management (PIM)

The Spectacles

Sidebar in a Can

CJSH.name/sidebar

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.

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.

The Magic Notebook

Private logistics: privacy-sensitive todo, calendar, scratchpad, personal information management (PIM)

Proportional font terminal: a better Linux / Unix / Mac term

SearchLog

CJSH.name/searchlog

The Searchlog Searchable Weblog

What is SearchLog? At its simplest, it is a searchable weblog with a lot of features. But if you’re only looking at SearchLog “at its simplest”, you’re missing a lot.

SearchLog is a Swiss Army Lightsaber. Where a common Swiss Army Knife has useful tools that include scissors, blades, screwdrivers, and a can opener, SearchLog is a multipurpose tool for dealing with information and ideas. Its “blades” include:

  • Something that can be as public as a weblog or as private as a diary.
  • A functional search engine over everything in the log.
  • Personal information management:
    • Address book information.
    • A task manager.
  • An interactive document repository.
  • A search engine that will highlight what you’re looking for.
  • A place to keep track of ideas.
    • A tool to search through ideas and see what’s related to what.
  • A flexible tool that lets you edit information while keeping an archive.
  • Wiki-style groupware.
  • A tool to help keep an office in touch.
  • A portal that provides an excellent starting point for the Web.

As well as these “blades”, it is designed to be “expert-friendly.” It uses usability principles to try to give the serious user maximum power for minimum effort and keep mousework to a minimum.

If you’re not sure which version to download, I suggest the highest-numbered version.

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/Linux tar.gz Unix/Linux tar.bz2
1.1, development searchlog-1.0-1.i386.rpm searchlog1_1.tar.gz searchlog1_1.tar.bz2
1.0.2, development searchlog-1.0.2-1.i386.rpm searchlog1_0_2.tar.gz searchlog1_0_2.tar.bz2
1.0.1, stable searchlog-1.0.1-1.i386.rpm searchlog1_0_1.tar.gz searchlog1_0_1.tar.bz2
1.0, development searchlog-1.0-1.i386.rpm searchlog1_0.tar.gz searchlog1_0.tar.bz2
1.0 beta, development searchlog-1.0b-1.i386.rpm searchlog1_0b.tar.gz searchlog1_0b.tar.bz2

 

You mmight also like::

The Data Mine

The Magic Notebook

Private logistics: privacy-sensitive todo, calendar, scratchpad, personal information management (PIM)

The Spectacles

Quizmaster

CJSH.name/quizmaster

Quizmaster screenshot

Quizmaster is a tool to let people design, publish, and use fun quizzes. Try it out!

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/Linux .tar.bz2 Unix/Linux .tar.gz
0.0, development quizmaster-0.0b-1.i386.rpm quizmaster0_0b.tar.bz2 quizmaster0_0b.tar.gz

The Data Mine

Janra Ball: The Headache

The Powered Access Bible

Private logistics: privacy-sensitive todo, calendar, scratchpad, personal information management (PIM)

The Powered Access Bible

CJSH.name/powerbible

The Powered Access Bible is a tool to allow free and effective access to the Bible. The Powered Access Bible is especially good at finding which verses contain a given word, and then easily reading those verses in their full context. (The Powered Access Bible is a tool to find what the Bible says about something, and read it in context.) This includes Old Testament, New Testament, and Apocrypha/Deuterocanonical books.

A view of the Powered Access Bible

Read the Powered Access Bible online!

There is also a package available for download and use on Unix-like servers:

If you’re not sure which version to download, I suggest the highest-numbered version.

License: Everything but the Bible versions is available to you under hour choice of the Artistic, GPL, and MIT licenses; the Bible translations are licensed as documented in the distribution. If you like this software, you are invited to consider linking toCJSHayward.com.

 

Version Unix/Linux tar.bz2 Unix/Linux tar.gz RedHat RPM
2.1, Development powerbible2_1.tbz powerbible2_1.tgz
2.0, Development powerbible2_0.tbz powerbible2_0.tgz
1.2, Development powerbible1_2.tar.bz2 powerbible1_2.tar.gz
1.1.1, Stable powerbible1_1_1.tar.bz2 powerbible1_1_1.tar.gz
1.1, Development powerbible1_1.tar.bz2 powerbible1_1.tar.gz
1.0.2, Development powerbible1_0_2.tar.bz2 powerbible1_0_2.tar.gz powerbible-1.0.2-1.i386.rpm
1.0.1, stable powerbible1_0_1.tar.bz2 powerbible1_0_1.tar.gz powerbible-1.0.1-1.i386.rpm
1.0, development powerbible1_0.tar.bz2 powerbible1_0.tar.gz powerbible-1.0-1.i386.rpm

 

The Commentary

Private Llogistics: privacy-sensitive todo, calendar, scratchpad, personal information management (PIM)

Psalm picker

Technonomicon: Technology, Nature, Ascesis