A Django site.
November 16, 2008

Richard K. Miller
no nic
Richard K Miller
» My slides from WordCamp Utah

I spoke at WordCamp Utah at the end of September on using WordPress as a Content Management System (CMS). Here are my slides:

WordPress as a CMS

September 3, 2008

Richard K. Miller
no nic
Richard K Miller
» How to browse securely with SSH and a SOCKS proxy

I was in Moab this weekend with my family and our motel had free wireless Internet. I used SSH and a SOCKS proxy to create a secure tunnel to my iMac at work. This allowed me to browse Gmail and Facebook securely.

Here’s a screencast on how to create an SSH tunnel and browse securely in Safari and Firefox:

Here’s a full-size video:
How to browse securely with SSH and a SOCKS proxy (full size video)

These are the basic steps on a Mac:
1. Open Terminal. (In your Applications/Utilities folder.)
2. Type “ssh -D 9999 username@example.com”, replacing “username” and “example.com” with the actual username and address of your remote machine. The remote machine will need the SSH service, or Remote Login service, turned on.
3. Open System Preferences -> Network -> Advanced tab -> Proxies.
4. Turn on the “SOCKS Proxy” and enter “127.0.0.1″ and “9999″ in the fields. Click OK and Apply.

Now your Internet connection will be tunneled through a secure connection to your remote machine — a poor man’s VPN.

August 16, 2008

Richard K. Miller
no nic
Richard K Miller
» Learn more about WordPress at WordCamp Utah

WordCamp Utah is a 1-day conference all about WordPress, to be held in Provo, Utah, on September 27, 2008. Speakers will include WordPress founder Matt Mullenweg, WordPress guru Alex King, both visiting from out of town, and several local personalities including Cameron Moll, Thom Allen, Ash Buckles, and yours truly.

I’ll speak on using WordPress as a Content Management System, demonstrating that you can use WordPress software to power your website even if it’s not a blog. At our nonprofit foundation, we use WordPress to power over 40 non-blog websites.

This should be a great conference for any blogger, Web developer, or Web publisher. I’m excited to hear each of the talks.

More information: WordCamp Utah (signup)

April 15, 2008

Richard K. Miller
no nic
Richard K Miller
» Focus on the highs, not the lows

Gordon B. Hinckley called for more optimism:

I come to you tonight with a plea that we stop seeking out the storms and enjoy more fully the sunlight. I am suggesting that as we go through life we try to “accentuate the positive.” I am asking that we look a little deeper for the good… (Be Not Afraid, Only Believe)

Today was a beautiful day in Utah! It was the kind of day I wait all winter for. With a motorcycle and no skiing or snowboarding skills, I spend the whole winter watching for sunny days on the Apple weather widget. Today the readout called for beautiful temperatures all week. (You better believe I was out riding today!) The only downer is the low temperature on Wednesday — a chilly 24°:

But why focus on the lows? Flip over that widget, uncheck the box, and then it’s warm days all week!

I realize my selective ignorance about the weather doesn’t make it any warmer, but I do believe that where we put our energy and focus matters. Optimism is a mindset of gratitude, focusing on the positive around you instead of the negative.

March 14, 2008

Richard K. Miller
no nic
Richard K Miller
» You’re Already in the Best of All Possible Situations

Last month I finished reading Bonds That Make Us Free by Terry Warner. Though I found it repetitive in some spots, overall I liked it. My favorite concept from the book was that you are currently in the “Best of All Possible Situations.”

This idea might be traced to Søren Kierkegaard’s parable of The Two Artists:

Suppose there were two artists, and the one said, “I have travelled much and seen much in the world, but I have sought in vain to find a man worth painting. I have found no face with such perfection of beauty that I could make up my mind to paint it. In every face I have seen one or another little fault. Therefore I seek in vain.”

On the other hand, the second one said, “Well, I do not pretend to be a real artist; neither have I travelled in foreign lands. But remaining in the little circle of men who are closest to me, I have not found a face so insignificant or so full of faults that I still could not discern in it a more beautiful side and discover something glorious. Therefore I am happy in the art I practice. It satisfies me without my making any claim to being an artist.”

…the second of the two was the artist.

Referring to our forgiving the offenses we sometimes take from friends, family, and coworkers, Mr. Warner puts it this way:

Unless we change in our hearts toward the people we struggle with here and now, we are condemned to struggle with whomever we may find ourselves associating with.

It doesn’t say that our situation could not be better. Many of us have serious needs, like too little to eat or broken health; even those of us who are fairly comfortable could benefit from positive changes in our circumstances. What the principle says is, in matters that affect our happiness, we are in the best of all possible situations.

We cannot be liberated from our burdensome feelings toward certain people unless we forgive these very people; without this, we leave unfinished the task by which we ourselves can be transformed. For wherever we go, we will remain accusing, self-excusing individuals who, fantasizing, think a change of circumstance will make a fundamental difference. Instead of leaving our problems behind, we will take them with us.

When happiness is the issue, the best possible situation for us is the one we’re in now, and the people around us are the best we could be with. (pp. 307-9)

You’re an artist if you realize that you’re already in the best of all possible situations.

February 21, 2008

Richard K. Miller
no nic
Richard K Miller
» What goes around, comes around

I’m not a big believer in karma, but this week I experienced some karma-like effects. Two years ago for work, I developed code to protect wiki websites. Then I published it on my blog.

This weekend a software upgrade caused this protection code to stop working on our websites. I couldn’t find an answer. Then yesterday, some chap named Nathan left a comment describing the solution. I hadn’t asked for help. He was simply documenting his own experience. But it was just what I needed.

This is fundamental to open source software — the creation of a software commons. It’s also what happens on Wikipedia, the creation of a knowledge commons.

In Love Is the Killer App, Tim Sanders suggests freely sharing your knowledge and your network, not hoarding them.

Jon Udell talks of “narrating” one’s work from day to day. This allows everyone to share in your vast brain knowledge, and it becomes your living résumé. I’d like to do more of that.

December 27, 2007

Richard K. Miller
no nic
Richard K Miller
» Too Much Information (TMI)

There’s danger in consuming too much information. I’m sure you know what happens when you eat too much food. Like food, information needs digestion. It’s only useful to the degree you can distill it into actions, habits, and wisdom.

Dallin H. Oaks gave a good talk on focus and priorities:

We have thousands of times more available information than Thomas Jefferson or Abraham Lincoln. Yet which of us would think ourselves a thousand times more educated or more serviceable to our fellowmen than they? The sublime quality of what these two men gave to us—including the Declaration of Independence and the Gettysburg Address—was not attributable to their great resources of information, for their libraries were comparatively small by our standards. Theirs was the wise and inspired use of a limited amount of information.

I know where to get my information binge if I want it. (Thank you, RSS.) I’m sure you do too. The challenge is to consume less of it and use it more wisely.

I wonder what Thomas Jefferson or Abraham Lincoln would do in our shoes.

December 12, 2007

Richard K. Miller
no nic
Richard K Miller
» Teaching the unteachable skills

If you tend to perform tasks you’ve never performed before, what does this mean for education? Does your school teach you to solve problems, prioritize tasks, and prepare you for non-assembly-line jobs?

“Training a student to be sheepish is a lot easier than the alternative. Teaching to the test, ensuring compliant behavior and using fear as a motivator are the easiest and fastest ways to get a kid through school. So why does it surprise us that we graduate so many sheep?” (Seth Godin in Sheepwalking)

Maybe teachers should ask harder questions — questions they’ve never answered — and allow students to use “real life” tools.

Here’s what just about every exam ought to be: “Use Firefox to find the information you need to answer this question:” And as the internet gets smarter, the questions are going to have to get harder. (Seth Godin in The Wikipedia Gap)

In the past, you had to memorize knowledge because there was a cost to finding it. Now, what can’t you find in 30 seconds or less? We live an open-book-test life that requires a completely different skill set. (Mark Cuban in Time magazine)

I’ve called this intellectual self-sufficiency, the ability to search out answers for yourself.

How about these test questions? (Internet and cell phone allowed.)

  • What can you buy with 1 yen, in Japan?
  • Find a picture of Rio de Janeiro taken today.
  • Who is the most famous author of all time? Defend your answer.
  • Your friend is visiting downtown Boston and calls you for help. Help her get to D.C. You’re in Provo, Utah.

The answers don’t really matter, but the process does.

December 11, 2007

Richard K. Miller
no nic
Richard K Miller
» Tee ‘em up

Golf provides another metaphor for getting things done. Take #2 on “crankable widgets”.

Growing up in Las Vegas, our favorite place to hit golf balls was Desert Pines. It was 30 minutes away, but it boasted a double decker driving range and automatic tees. After each hit, the tee dropped into the floor and re-emerged with a new ball. You could hit ball after ball without the pesky work of bending down to tee them. You could keep your stance and stay in the zone.

Imagine “teeing up” your tasks. Thoroughly prepare each task so the actual work of doing it is a simple, fluid stroke. Poorly prepared tasks require you to lean down. Well-prepared tasks are ripe for the hitting.

Bad: “Do taxes”
Good: “Find W2 forms and receipts in folder. Call accountant to setup appointment.”

Bad: “Christmas shopping”
Good: “Spend 10 minutes with pen and paper brainstorming what David might like for Christmas. Ask Mom for suggestions. Wait a few days to think about it. Order it online.”

Can you see how using concrete words makes each task easier to grasp? These changes may seem obvious to you, and perhaps you won’t need this much description. Be as descriptive as you personally need. But you’ll be surprised how fluidly you’ll move from task to task if you’ve taken the time to describe each task specifically and concretely.

December 10, 2007

Richard K. Miller
no nic
Richard K Miller
» Crankable widgets

The concept of transforming my tasks into “crankable widgets” helps me Get Things Done.

Imagine what it’s like to work in a factory: You are responsible for your part of the assembly line. The work may not be easy, but you know how to do it. You do it over and over. You are cranking out widgets.

Now think about your real job. It may not be like the factory at all. You create/troubleshoot/analyze things you’ve never created/troubleshooted/analyzed before. Experience helps — Phil Windley calls it “tacit knowledge” — but each particular task may be slightly new to you. Before “cranking” out each task, you must figure out exactly how to do it. Thinking must precede the doing. That’s why you’re called a knowledge worker.

If you find yourself procrastinating a task, it may be that you don’t know (exactly) how to do it. Your task needs more brain time. You must transform your task into a “crankable widget” — something you know exactly how to do.

Answering questions like these can help:

  • How do I do this task?
  • What part of this task is new to me?
  • If I were to watch a movie of myself doing this task, what would I see?
  • If I were to delegate this task to someone else, how would I describe it?

Sometimes a dreaded, procrastinated task becomes easy and even fulfilling after I’ve taken time to think about it.

(Thanks to David Allen and Merlin Mann for teaching me this concept.)

December 7, 2007

Richard K. Miller
no nic
Richard K Miller
» Saying No

I received a phone call that impressed me. It was like this:

“Richard, I’m afraid I can’t help with the project like we had planned. Some things have come up, and I no longer have the time. I just wanted to let you know. If I can help in the future, I’ll call you again.”

Flakiness is so common, but here is a guy who didn’t flake out. He communicated “no” just as clearly as he had communicated “yes”. I no longer had to wonder.

“No” isn’t mean or rude. If you can’t realistically commit, “no” is courteous.

“No” is a way of prioritizing. If you say “yes” to everything, you haven’t prioritized.

As someone who tends to say yes and overcommit, I’m impressed by this example of saying no.

December 5, 2007

Richard K. Miller
no nic
Richard K Miller
» Harmful to Minors

Even the libertarian and most ardent proponent of free speech should care that we continue to allow pornography to run rampant on the Internet. Here’s why.

A proposal by Larry Lessig called H2M (”Harmful to Minors”) would help parents protect children from pornography. Professor Lessig argues that if government doesn’t help parents block unwanted pornography, the loss of freedom of speech will be even greater because parents will turn to private companies for help:

Parents won’t wait for the government to figure out how best to filter harmful-to-minor speech. They will get what they can to block harmful-to-minor speech even if what they get is private and blocks more speech than necessary. For them it’s better than nothing.

After you watch this video, I think you’ll understand the H2M proposal:

H2M is similar to the CP80 initiative. Each is a proposal for 1. a new law which 2. codifies a technology which 3. allows parents to choose whether to block or allow pornography. Ralph Yarro of CP80 has repeatedly said that Internet filters don’t work. I infer that Larry Lessig thinks filters work well enough that parents will use them but not well enough to protect free speech.

I’ve previously written that the role of proper government is to stay small and allow nonprofit companies to compete for social change. In that light, perhaps I shouldn’t favor any legislation that would regulate the Internet. However, I see Professor Lessig’s point: a well defined law may serve all constituent groups better than no law.

December 4, 2007

Richard K. Miller
no nic
Richard K Miller
» Presentation matters to motivation

I’ve recently been pondering how to motivate workers. I’m mostly interested in how to motivate volunteers in a nonprofit organization — a “cause”. Just a day after writing about it, I found a section in Made to Stick with good insight:

We may mistakenly think that people are motivated by the pursuit of baser needs, while we ourselves are motivated by loftier ideals. The book calls this living in the penthouse of Maslow’s pyamid while believing others live in the basement.

Imagine that a company offers its employees a $1,000 bonus if they meet certain performance targets. There are three different ways of presenting the bonus to the employees:

  1. Think of what that $1,000 means: a down payment on a new car or that new home improvement you’ve been wanting to make.
  2. Think of the increased security of having that $1,000 in your bank account for a rainy day.
  3. Think of what the $1,000 means: the company recognizes how important you are to its overall performance. It doesn’t spend money for nothing.

When people are asked which positioning would appeal to them personally, most of them say No. 3….

Here’s the twist, though: When people are asked which is the best positioning for other people (not them), they rank No. 1 most fulfilling, followed by No. 2. That is, we are motivated by self-esteem, but others are motivated by down payments. This single insight explains almost everything about the way incentives are structured in most large organizations. (Made to Stick, pp. 184-85)

So, the question isn’t just whether or not to give an incentive or bonus, but also how to present it.

If you’re motivated by a cause, an incentive may even offend you. When firefighters were offered a free copy of a safety video to review, they readily accepted it. When offered a free popcorn popper as a thank you for reviewing the safety video, one firefighter said, “Do you think we’d use a fire safety program because of some #*$@%! popcorn popper?!” (p. 188)

November 30, 2007

Richard K. Miller
no nic
Richard K Miller
» How to motivate workers

Not everyone agrees on how to motivate workers. I’m still trying to decide which of these ideas sounds most correct:

  1. Charles Coonradt, author of The Game of Work, gives five reasons why games are better than jobs:

    1. Feedback is much more frequent in games, 2. there’s always a score to “reinforce the behavior you want repeated,” 3. consistent coaching, 4. goals are more clearly defined, and 5. more personal choice. (source)

    For example, in a game of soccer, imagine how easy it is to know which goal is yours, who your teammates are, who your competitors are, how to get feedback from your coach, and how much time you have left to score.

    See also “Make Life More Like Games” by Sarah Milstein.

  2. In Managing the Nonprofit Organization, Peter Drucker says:

    People need to know how they do–and volunteers more than anyone else. For if there is no paycheck, achievement is the sole reward. Once goals and standards are clearly established, appraisal becomes possible. …with clear goals and standards, the people who do the work appraise themselves.

    In all human affairs there is a constant relationship between the performance and achievement of the leaders, the record setters, and the rest….If one member of an organization does a markedly better job, others challenge themselves.

  3. However, Joel Spolsky, quoting a Harvard Business Review article, says Incentive Pay [Is] Considered Harmful:

    … at least two dozen studies over the last three decades have conclusively shown that people who expect to receive a reward for completing a task or for doing that task successfully simply do not perform as well as those who expect no reward at all. [HBR Sept/Oct 93]

    …any kind of workplace competition, any scheme of rewards and punishments, and even the old fashion trick of “catching people doing something right and rewarding them,” all do more harm than good. Giving somebody positive reinforcement (such as stupid company ceremonies where people get plaques) implies that they only did it for the lucite plaque; it implies that they are not independent enough to work unless they are going to get a cookie; and it’s insulting and demeaning.

  4. A colleague of mine received the MVP Award from Microsoft. He said it’s peer selected, hard to get, and hard to keep. (You have to maintain annual certifications.) The award is given for past accomplishments, but he thinks it has the effect of motivating many people to do more.

Which one is it?

Do the same rules apply to volunteers at a nonprofit as employees at a company?

Thinking…

October 24, 2007

Richard K. Miller
no nic
Richard K Miller
» Tools are for building

In two days Apple will release a new version of its Mac operating system, so last Saturday I watched the guided tour and read about all of the 300 new features of “Leopard.”

I thought my strong interest in the new operating system was justified since I’m going to take the opportunity to replace my 4½ year old Titanium Powerbook with a new Leopard-powered notebook. But then I got thinking, it’s just a tool. Using a Mac isn’t my goal per se. I might as well get exciting about all the tools at Home Depot — and I do — but if I don’t build anything with them, they’re useless.

Jon Udell refers to himself as a “toolsmith” — someone who loves the tools of his trade — and I think I have a bit of that in me. Being a toolsmith means knowing the ins and outs of one’s tools, with the potential to be very productive with them. But Merlin Mann warns against continual “fiddling” with tools and systems and methods at the expense of just Getting Things Done.

Use whatever tools work best for you, but use tools to build something.

October 1, 2007

Derek Carter
goozbach
Goozbach's tech tips
» my dream home

I was reading on of my favorite web comics this morning and found this gem:




Your home is a

Futuristic Headquarters


Your kitchen consists of dilithium-powered food replicators, manned by obedient robot slaves, who are sure to never, ever rebel. I mean, it’s preposterous to even consider it. There’s a pantry stocked with beef jerky. Oh, and deer jerky. Your master bedroom has an on-call masseuse and sports therapist. Your study This includes all Star Wars novels cross-referenced by incongruities. One of your garages contains a life-sized X-Wing fighter, and KITT. (KITT was a gift from a well-meaning uncle.)

Your home also includes a robot repair bay, where your mechanized servants are routinely fitted with new restraining bolts. (It’s just a precaution.) Your guests enjoy your animatronic replica of the cantina at Mos Eisley. Outside is your radio telescope, listening constantly for alien transmissions. Especially invaders. They’ll come eventually, even if nobody believes you. (Nobody does.)

Below is a snippet of the blueprints:

Find YOUR Dream Home!

September 29, 2007

Derek Carter
goozbach
Goozbach's tech tips
» IRC’ing the night away

IRC is a “chat” protocol which is fairly popular with the open source crowd. Most of the time getting an answer over IRC can be quicker and less painful than searching the internet, or posting to a mailing list, newsgroup, or forum.

Because IRC is such a ubiquitous communication channel, it is extremely useful for maintaining contact with others. Often the creator of an open source project will create an IRC channel to facilitate communication with the users of his or her software. I plan on showing you all how to safely create just such a channel.

My example makes a couple of assumptions:

  • IRC client knowledge
  • Connection to the Freenode network

Let’s create a new channel for our fictional open source project — GreatProject.

First, we need to make sure we have a registered nickname I won’t go into great detail about this but you need to run a command like this one:

[freenode] /msg nickserv identify supersecretpassword

You should see output like this in your client:

20:59 -NickServ(NickServ@services.)- Password accepted - you are now recognized

To learn more about the NickServ service, and about registering your nickname visit the Freenode FAQ page about setting up your nick

You need to first create your new channel, on Freenode at least this is as easy as joining your channel:

[freenode] /join #greatproject

That command should create the following output:

21:34 -!- friocorte [n=dcarter@dsl027-165-128.atl1.dsl.speakeasy.net] has joined #greatproject
21:34 -!- ServerMode/#greatproject [+ns] by niven.freenode.net
21:34 [Users #greatproject]
21:34 [@friocorte]
21:34 -!- Irssi: #greatproject: Total of 1 nicks [1 ops, 0 halfops, 0 voices, 0 normal]
21:34 -!- Channel #greatproject created Fri Sep 28 21:38:21 2007
21:34 -!- Irssi: Join to #greatproject was synced in 0 secs

Now you should register your channel:

[freenode] /msg chanserv register #greatproject supersecretpasswordtwo

Here’s what you should see:

21:57 -ChanServ(ChanServ@services.)- The channel [#greatproject] is now registered under your nickname.
21:57 -ChanServ(ChanServ@services.)- Your channel password is [supersecretpasswordtwo]. Please remember it for later use.
21:57 -ChanServ(ChanServ@services.)- Channel guidelines can be found on the freenode website
21:57 -ChanServ(ChanServ@services.)- (http://freenode.net/channel_guidelines.shtml).
21:57 -ChanServ(ChanServ@services.)- freenode is a service of Peer-Directed Projects Center, an IRS 501(c)(3)
21:57 -ChanServ(ChanServ@services.)- (tax-exempt) charitable and educational organization.

Don’t forget your password, you’ll need it to make any future sessions.

Tomorrow, we’ll show you how to control your channel and the users who will connect to it. So stay tuned.

September 14, 2007

Richard K. Miller
no nic
Richard K Miller
» My Freedom to Give

I’m reading Peter Drucker’s Managing the Nonprofit Organization. During his interview with Dudley Hafner, then CEO of the American Heart Association, they discuss charitable giving as a form of speech:

Peter Drucker:

My European friends always point out how low the taxation rate is in the United States. I say, you are mistaken because we voluntarily cough up another 10 percent of GNP for things which in Europe are either not done at all, like your work, or run by the government with the individual having absolutely no say in where the money is to be spent. That’s a point the public does not understand. Would you agree?

Dudley Hafner:

I agree. There’s a couple of things about this that are very, very important to me personally. First of all, campaigns such as the American Heart Association or the Salvation Army or the Girl Scouts let people get involved, and that becomes important because they do become advocates. The other thing I think that is unique about these United States is the fact that charitable giving is as much a force in the freedom of democracy as the right of assemblage or the right of vote or the right of free press. It’s another way of expressing ourselves very, very forcefully. Someone who pays taxes does not think of himself or herself as getting involved in the welfare program. But if they become involved in a Salvation Army activity or the Visiting Nurses program, they are involved. They are involved spiritually and they are involved monetarily. That makes a difference.

Only a European could say the U.S. tax rate is low. I’m already paying for programs and services I don’t want, and the U.S. government was never meant to be this big.

Charitable giving to nonprofit organizations allows citizens to vote with their checkbooks for causes they care about. Nonprofits must market their causes persuasively, administer their programs effectively, and be accountable to their donors. Donors, in turn, become advocates for the causes they support and take ownership in the outcome. Compare this with the government model of taking money from citizens by force to fund programs they don’t want, administered by bureaucrats who don’t care.

Donating to social causes I care about, and not donating to social causes I don’t care about, is a form of speech. For all the politicians clamoring to protect my freedom of speech, I don’t see many trying to protect this one.

August 10, 2007

Richard K. Miller
no nic
Richard K Miller
» Notes on Facebook

July 31, 2007

Richard K. Miller
no nic
Richard K Miller
» Oneness

Oneness with work is “flow”.

Flow is the mental state of operation in which the person is fully immersed in what he or she is doing, characterized by a feeling of energized focus, full involvement, and success in the process of the activity. (source)

The act of creating something, whether it be an article, a poem, a website, a computer program, or some other creative human expression, is one of my most cherished activities. … It usually takes a while for me to fully enter the highly creative flow state, but once I’m there I lose awareness of everything but the present moment and the ideas flowing through me. (source)

Oneness with surroundings is a principle of Eastern thought.

…practitioners of Eastern religions such as Buddhism and Taoism have honed the discipline of overcoming the duality of self and object as a central feature of spiritual development. (source)

The idea of overcoming duality of self and object is a key theme of Zen and the Art of Motorcycle Maintenance: An Inquiry into Values by Robert Pirsig (1974). “When you’re not dominated by feelings of separateness from what you’re working on, then you can be said to ‘care’ about what you’re doing. That is what caring really is: ‘a feeling of identification with what one’s doing.’ (ibid.)

Oneness with people is a Christian virtue.

…be of one mind, live in peace; and the God of love and peace shall be with you. (source)

And the Lord called his people Zion, because they were of one heart and one mind… (source)

Oneness with God comes through the Atonement of Jesus

The word [Atonement] describes the setting “at one” of those who have been estranged, and denotes the reconciliation of man to God. (source)

And now Father, I pray unto thee for them … that they may believe in me, that I may be in them as thou, Father, art in me, that we may be one. (source)

July 26, 2007

Richard K. Miller
no nic
Richard K Miller
» Lesser Things

I recently read similar passages from two very different books.

The 4-Hour Workweek by Tim Ferriss, chapter 5, “The End of Time Management”:

Effectiveness is doing the things that get you closer to your goals. Efficiency is performing a given task (whether important or not) in the most economical manner possible. Being efficient without regard to effectiveness is the default mode of the universe.

What you do is infinitely more important than how you do it. Efficiency is still important, but it is useless unless applied to the right things.

Most things make no difference. Being busy is a form of laziness — lazy thinking and indiscriminate action.

Being overwhelmed is often as unproductive as doing nothing, and is far more unpleasant. Being selective — doing less — is the path of the productive. Focus on the important few and ignore the rest.

Men of Valor by Robert L. Millet, chapter 2, “Have Done with Lesser Things”:

…drawing closer to my Heavenly Father, serving the people about me, and growing in gospel scholarship — along with devoting as much time as I could to my wife, children, and extended family — were the actions that had long-term, even eternal implications. Yet in reality I had spent the bulk of my time the previous week shuffling from one … activity to another.

More than once my friend and mentor, Robert J. Matthews, said to me, “Robert L., be careful not to spend your life laboring in secondary causes.”

…”have done with lesser things.” Lesser things do not satisfy. They do not fill the hunger of the human soul. They do not bring peace and rest. Lesser things do not build the family unit, bring harmony into the home, or fortify relationships that are intended to be everlasting.

Until yesterday, I thought the phrase “have done with lesser things” referred to frugality or resourcefulness, like “make due with less.” But these five words, in a bit of antiquated style, mean “be done with lesser things.”

July 19, 2007

Richard K. Miller
no nic
Richard K Miller
» The Patriot Act and Customer Service

I. Mac and Linux computers come with a command called “rsync” that makes backup and synchronization easy. Every morning before work I synchronize my 4 year old dying Powerbook to my iMac at work. When I get home, I synchronize back. This way, I get my same mail, documents, and music wherever I am, and if something were to happen to one computer, I’d have a backup. I synchronize over the Internet, but I know a local guy that synchronizes to his iPod so he can physically carry his updates in and out of the office.

canaries.jpg
Photo by quimby

II. At work, we’ve begun using a service called rsync.net for backup. We synchronize our files to their service and pay them $1.60 per gigabyte per month. It’s a pretty inexpensive way to do backup, and it’s nice to have the backup offsite. The rsync.net engineers with whom I’ve spoken have been top notch.

For privacy, we actually use a derivative of rsync called “duplicity”, which encrypts our data before storing them at rsync.net. Their website explains how to use duplicity and other encryption techniques, but I thought it was particularly interesting to find they publish a “warrant canary”. Because the Patriot Act allows the service of secret warrants for the search and seizure of data, and criminal penalties for failing to maintain secrecy, rsync.net publishes a weekly declaration that they haven’t been served a warrant:

rsync.net will also make available, weekly, a “warrant canary” in the form of a cryptographically signed message containing the following:

- a declaration that, up to that point, no warrants have been served, nor have any searches or seizures taken place

- a cut and paste headline from a major news source, establishing date

Special note should be taken if these messages ever cease being updated, or are removed from this page.

Source: rsync.net Warrant Canary

If the “canary” dies, you’re supposed to close shop and get out.

I don’t know the legal implications of a warrant canary, but it seems like a particularly unique example of putting the customer first!

» Markets are like parking lots

Markets are like parking lots.

To get a spot:

  • Get there early, or
  • Park where there’s less competition (but you’ll have to walk more), or
  • Find a proprietary advantage that sets you apart and locks out your competitors

Parking is good when you’ve got two wheels — motorcycle or scooter. Imagine my excitement in finding a shady spot near the door which had been “reserved” by a car that parked over the line, blocking out all my four-wheeled competitors. I left for lunch and came back to a full lot, but my spot was still saved. That’s good business.

parking_spot_with_motorcycle.jpg

July 10, 2007

Richard K. Miller
no nic
Richard K Miller
» Market segmentation on your blog

wwsgd-graphic.gif

Seth Godin has suggested that you treat new visitors to your blog differently from returning users. New users should be given context and background about you, and perhaps be invited to become permanent subscribers to your blog. Returning users should have quick access to your new material.

You could also consider turning off ads for your longtime subscribers. On one hand, you’ll forego ad revenue from a large group of people and prevent your advertisers from targeting a known group, but on the other hand, it might deepen the loyalty and increase the satisfaction of your biggest fans. Or you could do the opposite. Personally, I like the first more than the second.

For WordPress users, I wrote a WordPress plugin to do simple market segmentation. It was already the most visited page on my blog but traffic recently jumped with a link from the namesake last week. One blogger even created a graphic for it. Thanks.

Do you do any market segmentation on your blog or website? Where do you make the split, and how is the experience different?

June 6, 2007

Richard K. Miller
no nic
Richard K Miller
» Amtrak series: Pictures

More substance to follow tomorrow, but here are some pics from the train ride.

The other side of the rail guard

Other passengers

The curve of the train

The highway below

In the Sierra Nevadas

The Jordan River between Salt Lake City and Provo

My train leaving me behind

Walking home along the railroad tracks

More Photos

June 4, 2007

Richard K. Miller
no nic
Richard K Miller
» Series of posts on Amtrak

This weekend I flew to Sacramento for my cousin’s wedding. I decided to return by train, so I bought an Amtrak ticket and arrived this morning after a 21 hour ride. This week I’m going to write every day about my trip.

The Amtrak Series

June 3, 2007

Richard K. Miller
no nic
Richard K Miller
» Do you promise allegiance?

This week one of my Brazilian mission companions became a U.S. citizen. I attended his naturalization ceremony in downtown SLC, and though it wasn’t fancy, I found it to be a very patriotic event. Here’s how it went down:

“All rise”. Judge David Sam entered. United States District Court for the District of Utah was now in session. Girl scouts brought out the colors, led us in the Pledge of Allegiance, and then we sang the National Anthem.

Then 189 persons from 54 countries rose and repeated the following oath:

“I hereby declare, on oath, that I absolutely and entirely renounce and abjure all allegiance and fidelity to any foreign prince, potentate, state or sovereignty, of whom or which I have heretofore been a subject or citizen; that I will support and defend the Constitution and laws of the United States of America against all enemies, foreign and domestic; that I will bear true faith and allegiance to the same; that I will bear arms on behalf of the United States when required by the law; that I will perform noncombatant service in the armed forces of the United States when required by the law; that I will perform work of national importance under civilian direction when required by the law; and that I take this obligation freely without any mental reservation or purpose of evasion; so help me God.” (via. see also.)

These 189 foreign-born persons were now American citizens, “just as American,” in Judge Sam’s words, “as any direct descendent of the Founding Fathers.”

Judge Sam let several people in the group stand and offer a few remarks about becoming U.S. citizens. A man from Mexico stood and said how thankful he was for economic opportunities, freedom of religion, and schools. A Muslim woman from Bosnia said she was thankful to be able to practice her religion and wear a veil (hijab). A man from Peru said “we can do anything here” and “we must love this country.” An El Salvadorian said “this is a promised land for everybody.” And a Venezuelan said “I’ve been American at heart for a long time.”

Judge Sam said his own parents were immigrants from Romania, saving and sacrificing to come to America. They changed their last name to Sam (like Uncle Sam) on arrival. Judge Sam then told the new citizens:

I am your servant. It is my duty and responsibility to see that you are treated equally. One of my favorite comments was from a Somalian man a few years ago. He said “If I were to become a German citizen, I’d still never be German. If I were to become a Russian citizen, I’d still never be Russian. But today I am an American.”

Freedom isn’t free. It will slip away if we don’t protect it. It needs to be protected by all who enjoy it. Let freedom ring in your life. Understand the blessings of freedom. Be law-abiding, God-fearing citizens. God bless the U.S. and all of you.

New citizens renounce allegiance to their country of birth and promise to support and defend the Constitution of the United States. If you were born in the United States, you don’t take the formal oath. But do you promise the same?

May 17, 2007

Richard K. Miller
no nic
Richard K Miller
» Skype + Applescript = poor man’s voice web services

Skype is one of my favorite applications. I recently used Skype to call someone in Russia and it only cost a few cents. I’ve also been studying the Skype API, which opens some interesting possibilities.

On a Mac, you can combine simple Applescript commands with simple Skype commands to open a lot of possibilities. For example, this Applescript opens Skype and calls the best taco shop in Provo, UT:

tell application “Skype”
send command “CALL +18013774710″ script name “Call the best taco shop in Provo, UT”
end tell

Skype can be scripted to automatically make phone calls, chat by video or text, or send text messages. You can also pipe in any audio or record the phone call.

This has interesting implications for companies like MacMiniColo.net that use Macs as servers (disclosure: I’m a friend of its owner and staff, and I’ve done contract work for them in the past.) Combining Applescript, Skype, shell scripting, and the say command, your server could be configured to call your cell phone when there’s an outage and tell you what the problem is.

Jon Udell’s podcast about communications-enabled business processes discusses the integration of voice calls into computer processes. They discuss examples where a business process may need approval from a supervisor. With voice integration, the computer could call a manager with a “press 1 to approve, press 2 to disapprove” message.

Skype + Applescript is sort of the poor man’s version of VOIP web services, but it’s exciting that you could actually do something interesting with it today.

May 16, 2007

Richard K. Miller
no nic
Richard K Miller
» Postal rates go up, but not enough

forever_stamp.jpgOn Monday postal rates went up to $.02. In my opinion, it’s not enough. I still get junk mail.

I use stamps so rarely that even doubling the price of a stamp would keep my annual budget under $5. But for bulk mailers who send me junk, every penny increase is certain to hurt. I’m all for it.

One solution to junk email is to use more email addresses. If you own a domain name, you can use ebay@yourdomain.com for eBay, amazon@yourdomain.com for Amazon, etc. They all get delivered to the same place, but then when you receive junk mail you can tell who sold you out.

In Gmail, anything after a plus sign is ignored. Add “+” and any word and it still gets delivered. For example,

richard+ebay@gmail.com and richard+amazon@gmail.com both get delivered to richard@gmail.com

Maybe this would work for postal mail. You could write a Suite number on all the mail to your house. (Who’s to say you can’t divide your own house into suites?) For a credit card application, your address is 123 Maple Suite 1. For a magazine subscription, it’s 123 Maple Suite 2. For your paycheck, it’s 123 Maple Suite 3, and so on. Now you can track your addresses.

Who wouldn’t like more analytics on their postal mail? (Don’t answer that.)

May 14, 2007

Richard K. Miller
no nic
Richard K Miller
» What we measure with time

Distance
From Jerry Seinfeld:

You can measure distance by time. “How far away is it?” “Oh about 20 minutes.” But it doesn’t work the other way. “When do you get off work?” “Around 3 miles.”

Serving size
Get out your stopwatch. Each serving of PAM No-Stick Cooking Spray is “about 1/3 second.”

Nutrition Facts on a can of Pam

Priorities
Where we spend our time indicates what is important to us. Do you spend enough time with your family and close friends? Do you spend more time reading books or blogs? TV or exercise? Do important projects get enough attention or is your time eaten up by unimportant tasks?

From Henry David Thoreau (via Quoty):

It is not enough to be busy; so are the ants. The question is: What are we busy about?

May 11, 2007

Richard K. Miller
no nic
Richard K Miller
» Choose a good password

You’ve heard over and over the importance of choosing a good password, but we all seem to keep the same bad habits. Roger Grimes analyzed 34,000 real passwords and discovered some interesting trends:

  • As expected, English vowels are by far the most frequent occurring password symbols.
  • [In passwords with numbers,] the number 1 appeared 45 percent of the time, followed by the number 2 (22 percent.)
  • The exclamation point was the most commonly used non-alphanumeric character.
  • Words, colors, years, names, sports, hobbies, and music groups were very popular.
  • Other popular words include: angel, baby, boy, girl, big, monkey, me, and the.
  • Names of sports — golf, football, soccer, and so on — were as popular as professional sports teams and college team nicknames

Drawing on this study and other wisdom, here are some tips for choosing a good, secure password. Read #8 if you don’t read them all:

  1. Don’t write your password on a sticky note attached to your monitor (or “hidden” under your keyboard.)
  2. Don’t choose anything obvious like your birthday, spouse name, etc.
  3. Don’t choose any single word you can find in a dictionary.
  4. Don’t use the same password on a secure site (like your bank) as on an insecure site (like a mailing list.) If someone discovers your password because it was emailed to you from an insecure site, you don’t want your bank account to be vulnerable. Ideally you’d keep a different password for each site.
  5. If a digit is required in your password, don’t simply append a “1″ or a “2″. If a symbol is required, don’t simply append an exclamation point.
  6. Learn which channels are secure and which are not. Generally HTTP, FTP, and VNC are not secure, while HTTPS, and SSH are secure. Don’t use secure passwords on insecure channels. (Look for the padlock in your browser.)
  7. Pick a password you can remember, so you won’t have to write it down.
  8. Pick a LONGER password. Think of a phrase or sentence or haiku, not a word. Password length is more important than symbols or numbers. For a security expert like Mr. Grimes, a 6-9 character password with “complexity” (symbols, numbers) is fairly easy to break, while a password with 15+ characters is almost impossible to break.

Eventually, we may be using our fingerprints or some other biometric procedure, but until then, choose a good password.

May 10, 2007

Derek Carter
goozbach
Goozbach's tech tips
» Asterisk Queues REDUX

I love tinkering with stuff.

But sometimes it takes me too long to get something to work like it want it to.

We bit off a little more than we could chew with this current Asterisk dialplan. I’ve solved most of these problems as best I know how.

Here are the requirements (as far as I understand them):

  • Calls from queues should be distributed as fairly as possible
  • Calls from queues should cascade out to as many avalible agents as possible
  • Agents should be able to log into their assigned queues from any phone
  • Agents should be able to log into, and manage calls from multiple queues
  • Agent phones should only receive one call at a time from any of the queues they have logged into
  • Agent phones should be reachable via direct dialing, even when handling a call from a queue

Let’s look at each of these items one at a time:

Calls from queues should be distributed as fairly as possible

The goal here is to give every agent at least a chance to answer a call if the agent before him/her doesn’t. You might think that the answer is to do round-robin queueing, however that is incorrect, as the first agent will always get the first call after a lull of calling. We chose to use rrmemory queueing which is round robin with memory. Each time a call starts going around round robin, the system remembers where it last sent a call, and picks up from there the next time around.

Calls from queues should cascade out to as many avalible agents as possible

Originally in Asterisk the queues wouldn’t send a call to another available agent until the first call had been picked up. To make a queue act more like a “queue should work” enable the option autofill=yes.

Here is a sample of my queues.conf file:

[general]
persistentmembers=yes ; store agent login in astdb
autofill=yes ; automaticlly dial as many agents as there are phone calls
memberdelay=0 ; how long to wait until the agent is connected to the caller
announce-frequency=90 ; how often do we announce “you are # in line”
periodic-announce-frequency=30 ; how often do we announce “your call is really important to us”
announce-holdtime=yes ; announce hold time to caller
announce-round-seconds=10 ; do we round seconds?
joinempty=yes ; allow people into a queue when there are no agents?
reportholdtime=no ; tell agent how long the caller was holding
ringinuse=no ; do we ring a extension which is ‘in use’?
retry=0 ; how long to wait until we re-ring the queue with the call (after a deny or busy etc?)
timeout=20 ; how long to ring the agent before trying someone else
wrapuptime=5 ; how long to wait after the call is completed (allows agent to clean up ticket, etc)

[pineapple]
strategy=rrmemory

[1]
strategy=rrmemory
reportholdtime=yes

[2]
strategy=rrmemory
reportholdtime=yes

[3]
strategy=rrmemory
timeout=20
retry=15
joinempty=no

Agents should be able to log into their assigned queues from any phone

To accomplish the truly mobile workforce we want, our agents need to be able to accept calls from various queues wherever they may be. We’ve solved this problem by using strictly dynamic queue agents. This means we don’t pre-define agents in agents.conf. An example of the function to log agents in and out of a queue will be provided below.

Agents should be able to log into, and manage calls from multiple queues

We have need for persons sitting at the phones to be able to handle incoming calls from multiple queues. They need to be able to selectively log into and out of multiple queues easily.

Here is the sample of the queue login logout function

[macro-queueloginout]
; first argument is the queue to be added to, second(not yet implemented) is penality
exten => s,1,Answer() ; Pick up the phone
exten => s,n,Set(MYNUMB=${CUT(CHANNEL,-,1)}) ; clean up the channel name (remove unique id)
exten => s,n,Set(MYNUMBCLEAN=${CUT(MYNUMB,/,2)}) ; clean up the channel name (remove technology)
exten => s,n,Verbose(99|mynumb is ${MYNUMB} mynumbclean is ${MYNUMBCLEAN}) ; debugging output to see if VARS got set correctly
exten => s,n,Set(OUR_QM_LIST=${QUEUE_MEMBER_LIST(${ARG1})}) ; assign member list to variable so it doesn’t change
exten => s,n,Set(CHANNEL_TO_MATCH=${EVAL(Local/${MYNUMBCLEAN}@queueagents/n)}) ; set what we’re matching against
exten => s,n,Set(X=1) ; initialize counter

; begin while loop
exten => s,n,While($[${EXISTS(${CUT(OUR_QM_LIST,\,,${X})})}]) ; while we still have a value (not-null), loop
exten => s,n,Set(OUR_ITTR=${CUT(OUR_QM_LIST,\,,${X})}) ; set our itterator to check
exten => s,n,Noop(prematch) ; debugging can probally be removed
exten => s,n,Set(MATCHED=${IF($[”${OUR_ITTR}” = “${CHANNEL_TO_MATCH}”]?1:0)}) ; match against the channel
exten => s,n,Noop(postmatch) ; debugging can probally be removed
exten => s,n,Exec(${IF($[${MATCHED}]?ExitWhile():NoOp())}) ; exit while loop on match
exten => s,n,Set(X=$[${X} + 1]) ; increase the iterator
exten => s,n,EndWhile()
; end while loop
exten => s,n,GotoIf($[${MATCHED}]?100,1:400,1) ; branch on match, 100 means yes 400 means no

exten => 100,1,noop(yup) ; agent is already logged in, log em out
; TODO add confirmation “do you really want to logout?”
exten => 100,n,RemoveQueueMember(${ARG1},Local/${MYNUMBCLEAN}@queueagents/n) ; remove Local/*@queueagents instead of default
exten => 100,n,playback(agent-loggedoff) ; tell them the agaent logged off
exten => 100,n,Hangup

exten => 400,1,noop(nope) ; agent is not logged in, log em in
exten => 400,n,AddQueueMember(${ARG1},Local/${MYNUMBCLEAN}@queueagents/n,0) ; add Local/*@queueagents instead of default
; catch if queuemember breaks
exten => 400,n,Execif($[ ${AQMSTATUS} = ADDED ],Playback,agent-loginok) ; let the agent know they have sucessfully logged in
exten => 400,n,Execif($[ ${AQMSTATUS} = NOSUCHQUEUE ],Playback,try-again) ; if queue doesn’t exist tell em to try again.
exten => 400,n,Hangup

Agent phones should only receive one call at a time from any queue

This requirement combined with the next one, became the biggest hurdle to overcome. If we restricted the number of calls via limits in sip.conf then the requirement below was not met, and if we didn’t use limits in queues.conf then we had to disable any and all call-waiting on the phones(completely un-wanted side effect).

Agent phones should be reachable via direct dialing, even when handling a call from a queue

We ended up using the following tactic to satisify these two requirements. First, we didn’t just add the channel that dialed the login macro, we added a related macro in the queueagents context. This is done by the following line in the macro posted above:

exten => 400,n,AddQueueMember(${ARG1},Local/${MYNUMBCLEAN}@queueagents/n,0) ; add Local/*@queueagents instead of default

We used the following logic in the queueagents context, which keeps track of which members are currently being called, and returns busy() if needed.

[queueagents]
exten => _XXXX,1,noop(${EXTEN}) ; queue agent context, extension is agent to call
exten => _XXXX,n,Set(GROUP(${EXTEN}@queueagents)=1) ; set the group to @queueagents
exten => _XXXX,n,Set(MYCOUNT=${GROUP_COUNT(${EXTEN}@queueagents)}) ; retrieve the number of active calls
exten => _XXXX,n,GotoIf($[${MYCOUNT} > 0]?busy) ; if the number of calls is greater than zero, goto the busy priority
exten => _XXXX,n(avail),NoOp(avail) ; Availble priority, can be used to override call limits eg( goto queueagents,${EXTEN},avail )
exten => _XXXX,n,Set(OUTBOUND_GROUP=${EXTEN}@queueagents) ; Setup the magic OUTBOUND_GROUP varible, (increments the count next time someone attempts to call
exten => _XXXX,n,Dial(SIP/${EXTEN}) ; if we got to here, then it’s clear to call, dial away. TODO: Make the technoligy dynamic to allow IAX agents etc
exten => _XXXX,n,Goto(done) ; skip over the busy priority
exten => _XXXX,n(busy),NoOp(busy) ; busy priority
exten => _XXXX,n,Busy() ; send busy to the queue
exten => _XXXX,n(done),NoOp(done) ; done priority
exten => _XXXX,n,Hangup() ; all done

One last thing we did was to override the caller ID so the agent could answer the phone according to the type of call. We did this just before calling the Queue() application in the dialplan.

exten => _54XX,1,Answer
exten => _54XX,1,Wait(2)
exten => _54XX,n,Playback(you-entered)
exten => _54XX,n,SayAlpha(q)
exten => _54XX,n,SayDigits(${EXTEN:3:1})
exten => _54XX,n,Set(CALLERID(name)=Queue — ${EXTEN:3:1})
exten => _54XX,n,Queue(${EXTEN:3:1})
exten => _54XX,n,Hangup

Thanks and acknolegements

Getting this thing working wouldn’t have been possible without Jared Smith’s help, both direct help via IRC or indirect help via his book. If you’re using Asterisk and don’t have this book, you are working too hard.
I would also like to thank those from the Utah Asterisk User’s Group who chimed in the IRC channel.
Now go buy Jared’s book to help me feel less guilty about bothering him every day for the past three weeks.


Richard K. Miller
no nic
Richard K Miller
» 5 ingredients for a do-it-yourself podcast

At work I’m the “producer” of a podcast, and here are the tools we use:

1. Apple Garageband — Found on every Mac, this free app makes it easy to record and combine tracks, add effects and art, and create podcasts.

2. Logitech USB Headset — This isn’t a professional mike, but it works fine for us and it’s comfortable to wear and use.

3. WordPress — The best open source blogging platform. You’ll need web hosting and your own domain to install this.

4. PodPress — A powerful WordPress plugin that turns your blog into a podcasting platform. This plugin takes care of all the nitty gritty (podcast enclosures), offers an embedded Flash player for easy listening, and provides stats.

5. Mime Config — If you plan to publish “enhanced” podcasts for iTunes, chances are your server isn’t configured to recognize the “m4a” format. Install this WordPress plugin and add the mime type “m4a = audio/mpeg”.

What other tools are you using for creating podcasts?

May 9, 2007

Richard K. Miller
no nic
Richard K Miller
» Mining iTunes for podcast listenership data

For podcasters and their advertisers, tracking the size of a podcast’s audience is sticky. You can track how many people download a podcast, but who knows if they actually listened to it?

iTunes is the #1 podcasting client (57% market share last year), and additional podcatchers push podcasts into iTunes, so much of the data about podcast listenership can be found in iTunes. Advertisers just need a way to get to it.

I recently commented to Phil Windley that perhaps the iTunes XML file could be mined for listenership data. iTunes exports an XML file that contains a rating, play count, last played date, and last skip date for every song and podcast. This would be extremely valuable information for advertisers.

Phil connected me with Doug Kaye, the creator of IT Conversations, who is now exploring a way to automate the flow of this valuable iTunes information back to podcasters. After seeing the architecture he created with Amazon.com web services, I believe if anybody can do this, Doug can.

May 8, 2007

Derek Carter
goozbach
Goozbach's tech tips
» Asterisk Queues

I’ve been busy lately working on a rather big Asterisk installation.

One of the bigger problems we’ve wanted to solve was our queue management.

Here’s the beginnings of a queue log in/out macro I’ve been fiddling with.

oh, and a super-big thanks goes to Jared Smith, for the basis of what I’ve done here.

; macros to do login and out of queues
[macro-queueloginout]
; first argument is the queue to be added to, second(not yet implemented) is penality
exten => s,1,Answer
exten => s,n,Set(MYNUMB=${CUT(CHANNEL,-,1)})
exten => s,n,Set(MYNUMBCLEAN=${CUT(MYNUMB,/,2)})
exten => s,n,Set(OUR_QM_LIST=${QUEUE_MEMBER_LIST(${ARG1})}) ; assign member list to variable so it doesn’t change
exten => s,n,Set(CHANNEL_TO_MATCH=${CUT(CHANNEL,-,1)}) ; get rid of the unique identifier on the end
exten => s,n,Set(X=1) ; initialize counter

exten => s,n,While($[${EXISTS(${CUT(OUR_QM_LIST,\,,${X})})}]) ; while we still have a value (not-null), loop
exten => s,n,Set(MATCHED=${IF($[”${CUT(OUR_QM_LIST,\,,${X})”} = “${CHANNEL_TO_MATCH}”]?1:0)}) ; match against the channel
exten => s,n,Exec(${IF($[${MATCHED}]?ExitWhile():NoOp())}) ; exit while on match
exten => s,n,Set(X=$[${X} + 1]) ; increase the iterator
exten => s,n,EndWhile() ; End of the loop
exten => s,n,GotoIf($[${MATCHED}]?100,1:400,1) ;branch on match, 100 means yes 200 means no

exten => 100,1,noop(yup) ; agent is already logged in, log em out
exten => 100,n,RemoveQueueMember(${ARG1},Local/${MYNUMBCLEAN}@queueagents/n)
exten => 100,n,playback(agent-loggedoff)
exten => 100,n,Hangup

exten => 400,1,noop(nope) ; agent is not logged in, log em in
exten => 400,n,AddQueueMember(${ARG1},Local/${MYNUMBCLEAN}@queueagents/n,0)
; catch if queuemember breaks
exten => 400,n,Execif($[ ${AQMSTATUS} = ADDED ],Playback,agent-loginok)
exten => 400,n,Execif($[ ${AQMSTATUS} = NOSUCHQUEUE ],Playback,try-again)
exten => 400,n,Hangup

It is still a work in progress, I’m hoping to get a penality overload built into the macro in the near future.

Oh, yeah! I almost forgot to show you how to use the macro in your dialplan:

exten => _77XX,1,Macro(queueloginout,${EXTEN})

This extension, anything in the 7700 range, will log the currently calling phone into the queue specified, numbered by the extension dialed.
E.g. dial 7703 will log you into or out of queue 7703.

UPDATE 2007-05-10

I was fiddling with this, and realzed that only one agent could log in at a time.

Thanks again to Jared for discovering that adding four little quote marks makes it work correctly.

post above edited to show the new quotes.

April 20, 2007

Richard K. Miller
no nic
Richard K Miller
» Seven ways the Internet is changing politics

1. Last week I attended the opening event of Phil Burns’s new company Politic2.0, a platform for communication between politicians and citizens. When I first heard about the event, I was skeptical that it would be anything more than the buzz-word-ification of another niche, but by the end of the event I was really impressed with what had happened.

Utah Congressman Chris Cannon was the guest of honor, and there were about 25 attendees. The website allowed us to post and vote on questions, Digg style, and then the MC addressed the most popular questions to Mr. Cannon. Participation wasn’t limited to people in the room; anybody online could submit questions, vote, and leave comments on the website. Live video was streamed to the website.

It was a Darwinian press conference. The most popular questions were asked; no one person could dominate the conversation with his own agenda. Mr. Cannon said he felt a disconnect because most of our heads were down while we typed and clicked, but because I was able to influence the conversation, I felt very connected. I liked it so much I contacted a couple friends so they could hop on the website during the event.

The process still needs polishing, but Mr. Cannon’s participation was commendable and it was a good first draft for Politic2.0. I hope other politicians will participate.

Pete Ashdown

2. The Politic2.0 platform allowed us to collaborate on our questions, but not on the answers. When Pete Ashdown ran for U.S. Senate last year, he used a wiki to allow citizens to collaborate on policy solutions. I personally edited a page or two and found it refreshing that the ideas were being debated on their own merits and that someone (Pete) cared to listen. It’s humbling and realistic for politicians to realize they don’t have all the answers. Maybe together we do.

3. IT Conversations is my favorite source for podcasts. This week its founder, Doug Kaye, launched PodCorps (via), which aims to “record and publish important spoken-word events anywhere in the world.” PodCorps will call on an army of volunteers to record lectures, political events, and talks in their local communities. These amateur recordings by you and me will be posted online for all to hear. What would otherwise be some inconsequential talk on an obscure topic in a far away place will find far more listeners. Politicians can’t pander to local interests if everyone is “watching.” The transparency will encourage consistency.

4. C-Span, the nonprofit cable network that records Senate and House proceedings (and for most people is the fastest way to fall asleep), keeps ownership of over 85% of its video — video that should be in the public domain. Carl Malamud, the creator of the first Internet radio station, recently wrote a letter to C-Span petitioning that all its video be released into the public domain and explaining how the Internet makes their mission of promoting open government even easier.

5. Phil Windley has blogged repeatedly about the Utah Senate Majority’s website, senatesite.com. At the site Utahns will find a group blog and podcast where local politicians explain and debate policy.

6. Mitt Romney and other presidential candidates are using YouTube to engage with citizens. Mitt Romney on Youtube In a YouTube video, Mitt asked people “What is America’s single greatest challenge?” Seventy-one people responded with short videos of their own.

7. Candidates are using Facebook and MySpace to stay connected with supporters. Because of Facebook, I know Mitt is in Iowa today.

Anything else?

As our world becomes more complex and the job of politician more difficult, it’s increasingly important that we be closely connected with the people that represent us.

April 19, 2007

Derek Carter
goozbach
Goozbach's tech tips
» making LS dark terminal friendly

I’ve had problems with terminals being too dark lately, here’s what I did to remedy that:

in ~/.bashrc:

LS_COLORS=’no=00:fi=00:di=01;04;36:ln=00;36:pi=40;33:so=00;35:do=00;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=00;33:*.tgz=00;33:*.arj=00;33:*.taz=00;33:*.lzh=00;33:*.zip=00;33:*.z=00;33:*.Z=00;33:*.gz=00;33:*.bz2=00;33:*.deb=00;33:*.rpm=00;33:*.jar=00;33:*.jpg=00;35:*.jpeg=00;35:*.png=00;35:*.gif=00;35:*.bmp=00;35:*.pbm=00;35:*.pgm=00;35:*.ppm=00;35:*.tga=00;35:*.xbm=00;35:*.xpm=00;35:*.tif=00;35:*.tiff=00;35:*.mpg=00;35:*.mpeg=00;35:*.avi=00;35:*.fli=00;35:*.gl=00;35:*.dl=00;35:*.xcf=00;35:*.xwd=00;35:*.ogg=00;35:*.mp3=00;35:’;
export LS_COLORS
alias ls=’ls -F –color=tty’

that is all

April 10, 2007

Richard K. Miller
no nic
Richard K Miller
» Long tail philanthropy through Kiva.org

A year ago I learned about Kiva.org, a startup that makes