Archives for: March 2005
Metafor is a new attempt to bring a linguistic user interface to programming.
Where to begin in describing how wrong-headed this is?
You've got the wrong target, guys. Programmers do not need a higher level of interface for their code. It's been tried with graphical environments for decades (and has mostly failed); most of the good coders I know avoid graphical IDE's, preferring plain text every time. What makes you think an even higher level of input will work better? Typing plain text is a developmental optimum for readable, maintainable code. We don't need a code generator to produce boilerplate; we need languages which don't need boilerplate, like Python.
But wait, you say, we're not targetting programmers, but the "general public". Okay, you've got the right audience for LUI's (Linguistic User Interfaces), but the wrong task. "Natural language is so semantically rich and flexible that if it could be computationalized as a programming language, maybe everyone could write programs". At one level, yes programming is design and everyone designs things. But programming of the sort I do is so far beyond the reach of the general public that a new interface means nothing. The gap you're apparently trying to bridge is between user's mental models and a running computational system, which I think you think is created by the steep learning curve of formal languages. Way off base. The gap is rather between users' incomplete, fuzzy, situational model and complete, strict, formal systems. That gap takes decades to learn how to bridge, by human brains who are constantly trained to do so.
In the researchers' study of seven intermediate programmers and six beginning programmers, subjects who saw their sentences translated into code this way were "seemingly quite surprised that all that information was contained in their utterance[s]," said Liu.
Funny how you didn't quote any advanced programmers. Developers who have been around the block know that the prototype you might generate from initial end-user conversations is going to be:
Wrong. Not just mildly wrong in the details, but so divergent from a practical model of reality that a human is needed to understand the humans from a human standpoint, let alone from a machine point-of-view. Humans don't know what they want and cannot explain it when they do know what they want.
Wronger. The details will be wrong, too. Humans love to have 38 names for the same thing; computers hate that. Humans love to have special cases; formal systems really hate that. Humans love to change their minds, not just about content, but about deep structure. They do it fluidly and relatively effortlessly. Humans love to do (and evolve) things first, and describe and analyze it later. Programs suck at that.
Wrongest. Everything about the program will change in six months. The users will decide they don't really want Pacman to eat the dot in the upper-right-hand-corner on alternate Tuesdays, if Blinky is in the spawn box but all of the other ghosts are out. No, scratch that. One user wants that, all of the others mean every third Sunday. No, scratch that. Half of them don't know which one is Blinky. Just don't show Blinky to them. No, wait--it's not enough to not display Blinky; if you turn off the display but not the effects of Blinky, your users will come after you with pitchforks and torches. Show me one non-programmer who understands these implications and can convey them to a natural language visualizer (in a sufficiently declarative conversation) to produce a computer program.
Seeing language translated to logical code on-the-fly made the users more conscious of their communicative precision, said Liu. The subjects' quickly began using language that was simple and declarative, which, in turn, improved the usefulness of the system for brainstorming and outlining, he said.
As one of our customers said the other day, "double duh!" You selected programmers to test the value of your system to the general public? That's so misguided it's not even wrong. "Using language that was simple and declarative"? That's what I do all day; that's what programming is. That's the learning curve you're trying to avoid. Now that you've failed to avoid it, you've done nothing other than introduce a serial (as opposed to parallel) development process in-between your developers' mental models and the code. Have fun with that additional overhead.
Wild tangent: nobody, not even programmers, wants to type (or say) "the bartender gives the customer a drink only if the drink is on the list of drinks on the menu." They want to say, "he gives it to him only if it's on the menu." Give it pronoun awareness, and I'll re-review it.
So what's the "right" target for something like this? Linguistic interfaces are nice things; I don't dispute that. And they're appropriate for the general public. But they're not usable for the design of formal systems yet. I'm ready for a great linguistic interface to my domain-specific application, with which my users can manipulate a model of a subset of reality. I don't know of anyone who wants to use an LUI for building the app itself.
Lately I've felt overwhelmed
It seems like I was losing my sight
Not my physical sight, but my spiritual one
My life during Spring gets very busy
It's all about preparation, arranging & rearranging
Moving people, materials, tools & things
Then something happened so unexpected that threw me for a loop
When my agenda couldn't be more filled
Then my father became very ill with pneumonia
I was torn between my responsibilites & my heart
I wanted to be split in two to make everything right
Then the blindfold of "worry" came off my eyes
I was able to see that I wasn't alone
There were those who brought not only comfort, but picked up where I left off
So people, materials, tools and things were prepared, arranged & rearranged for me
My father is doing well, my work is done & my heart is at peace
I've been meaning lately to take my web presentation tool, Lyrica, and rewrite it. It's currently IE-only because it's a local page, and needs IE's ActiveX to write local files.
What I realized today (reading Simon Willison describing Greasemonkey to Jon Udell), is that I tend to approach web servers as fairly heavyweight things. You've got to set up a webserver, plug in a CGI language like Python, deal with app-specific state somehow, run a DB, etc. etc.
What I'd rather do, and what RESTful design + Ajax allows me to do, is design a local page which requests remote objects. A lot of end-user apps in this space tend to be heavyweight because they serve the HTML interface page and the data objects (used by that page) from the same server. I'm now envisioning a very lightweight, standalone server for the data, but making the interface a local HTML page—that interface HTML page will use XMLHttpRequests to persistently manipulate the user objects.
I like Simon's term "lightweight intermediary". If the Web server can be viewed as a lightweight intermediary between the local (i.e. not served from a web server) Ajax page and the data persistence layer, the design of that intermediary can become much more abstract and lightweight; that is, the web application can be broken into an abstract persistence mechanism that is very small, while the heavy interface design can be separated into a local page which is NOT served by the web server.
This design, then, really hits on the concept of programmable Web services, enabling different developers to design their own interfaces on top of the isolated data layer. Cool. I can hopefully then focus on a very nice data format, and let evolutionary development take its course with that, and reach more users.
I'll let you all know how this goes with Lyrica--it should be straightforward.
The introduction for John (from someone named Alex) included the phrase, "his ideas are a Rosetta stone for interpreting ... the future," which REALLY pinned my bogometer. But finish the talk—it pays off.
This was a talk that touched on a lot of fascinating topics about which I don't usually think; I ended up with a lot of disjointed comments, so don't feel bad if they seem solely for my benefit. Dan D, you should listen to this.
Part I - Overview
"Great input leads to great output. If you're reading every day you should be writing every day, if you have a blog (even if you don't have a blog)."
"Evolutionary systems don't know. You cannot predict what they're going to do. Most change in the universe appears to be evolutionary. That's why prediction has such a poor history."
"...sitting here, massively increasing our collective computation. You know why? Because right now, you and I—it's only 200 bits a second, this pipe that we're doing. But it's almost 6 times faster than the talking your neural nets are using to talk to each other ... They're doing an action potential down an axon at about 200 mph, and you and I are talking, connecting at the speed of sound."
"We're measuring the mass of neutrinos now, right? Fat-fingered 21st century human beings. How can we do that?"
Technology learns 10 million times faster than you do. Speed of light = 7M x faster than thought. "How are we going to look relative to that prosthesis? Like favorite pets? No, like favorite plants."
Because it's evolutionary development, humans are catalysts, not controllers. We decide which elements to accelerate and which to slow down. "We've decelerated systems which amplify our effect upon the world without amplifying our intelligence." Avoiding the entropy points (eg Chernobyl).
The first generation of any technology is often dehumanizing (calculators take away your math skills). The second generation is often indifferent to humanity (Mathematica is cool, but the interface sucks; most kids aren't going to use it). The third generation, with luck, becomes net humanizing—"you have AP calculus coming up, a bird flies by, and the system asks if you'd like your two-minute tutorial on what that means."
"Lots of things don't accelerate because they're deeply tied to human sociotechnological systems which have these matter/energy/space-time limits."
"...running a program on a calcium atom."
Human bodies can't enjoy Moore's law benefits (e.g. from drugs) "because our body has been tuned bottom-up—it's a massively multifactorial, nonlinear complex interactive system." (homeostatic system)
"It's the efficiencies that blow everyone's mind. People are always missing ... how rapid those efficiencies move. And those are physically and computationally driven. [...] All of these areas, defense down to energy and envirotech will all look surprisingly similar in 2060/2030, with major ICT extensions. And robots. Lots of cool robots."
"The really complex stuff is the middle zone" (we're 30 years from a bottom-end, a Theory of Everything, and we've had the top, Einstein's "crude Theory of Everything" since early 1900's). That middle zone is consciousness, biological emergence.
A "guy in England" (Adrian Thompson) genetic program solved sine-wave generation problem by exploiting a quantum flaw in the FPGA materials. The scientists did not understand the solution for months.
Re: linguistic user interfaces. (Fu talking again, now) I wonder if some of my data-processing tools could benefit from a serial process to modify the result set after the first iteration has been produced. "You want to remove that record from the report? OK, would you take a moment and tell me why? Then I can exclude similar records when I find them." Etcetera.
From the Day-Long Lead-In Dept:
I was supposed to do an 8:45 AM lead-in today. A "lead-in" is where a staff member or volunteer leads a group of our Trip participants from the border meeting spot to the campground in Mexico. But of course, if you plan to meet at 8:45, you won't actually get on the road until 9:30. But that's expected.
Today's lead-in involved two separate border crossings, because the tour bus had to cross at the main border and the vans had to cross at the Otay border, 10 miles east. I decided to take the bus, because I had just bought a new digital camera last week, and wanted some pictures from that route to camp. I certainly got them, as you'll see. Rayn Perkio took the other vehicles.
Can't go forward, can't go back
We arrived at the main border. As usual, I got off the bus and flagged down a Mexican customs agent. He came over and
quickly efficiently checked the luggage stowed underneath, and sent us on our way. Nice guy.
So we started to pull out into traffic. That's when an official from SCT (the federal Secretariat of Communications and Transport) flagged us down and pulled us over. He stuck his head in and asked to see the driver's Mexican permit.
I looked at the driver. "Mexican permit?" I had never heard of one.
He looked back at me blankly. Not a good sign.
We showed the official the bus' insurance and registration. Not good enough. We needed a permit.
"Fine. How do we get one?"
"You can't—you should have done that before. You'll have to pay a penalty now."
"OK. How much is the penalty?"
"I can't tell you that—that's the responsibility of another department to arrange."
"OK. Who are they and how do we contact them and get the penalty paid?"
"You can't. Their office is closed today."
"You have to wait until tomorrow."
"Buuuuhhhh. OK, how can we turn around and go back to the States until we get this sorted out?"
"You can't. We're going to impound the ($400,000) bus, take it to Rosarito, and you can reclaim it tomorrow after you pay the penalty."
I called my people. They called their people. They called the mayor and the state of Baja. Three of that chain of people (including Andy J and Steve H, yay!) came to the border and tried to find a way of getting us through without getting the bus impounded. No dice. Bus-Driver Ron, I know you definitely didn't want the bus impounded and definitely didn't want it towed due to the risk of damage. I wish there was something else we could have done, but we pulled all of the strings we had.
Here's a shot of the group waiting on the first bus:
During the two hours in which all of this negotiation went on, we were simultaneously trying to find alternate transportation. The group had already arranged for Mexican buses to meet them at the camp and take them to their worksite that day. Great! A couple of phone and radio calls later, we had arranged for those buses to come to the border. The group would transfer themselves and their luggage out of the first bus and into the two Mexican buses. By the time the decision had become final regarding the fate of the first bus, we were ready to move.
Another game of sardines
Everyone filed out of the first bus and into the second two buses, parked ¼ mile away. As we walked, we passed by a large group of taxis and their drivers. We shoved everyone and their gear rather tightly into the two buses:
Note Cliff in the back of the bus, giving me the double-thumbs-up signal for "we're on our way!"
Only we weren't. The two bus drivers were talking to each other about something. One of the group members walked back to the bus I was in and said something about a taxi blocking our exit. It didn't seem like much of a problem; it would move soon and we would head to camp.
However, the taxi was deliberately blocking our exit. All of the taxi drivers we had passed were upset that all of this potential revenue was passing them by and getting on a couple of buses, when they should be getting into small yellow taxis instead (like all of the other nice tourists). The real kicker was that, apparently, the buses we had just climbed onto didn't have the proper permits to pick up passengers downtown. The taxi-drivers union called the city police.
Victor, the policeman in the photo, was a really nice guy who spoke very good English (better than my Spanish). Actually, all of the policemen were very helpful, and were very patient with the language issues in both directions. The taxi drivers were not so patient; I was threatened by one before the cops arrived. They're in the yellow shirts in the picture; the spokesman is in the brown shirt with the sunglasses. Notice there are three other traffic cops in this picture alone.
After a dozen traffic cops showed up, the taxi drivers kinda faded into the background. The police were very helpful, having good news and bad news. The bad news: the second set of buses which we had just boarded was now going to be impounded and taken away, since they had operated illegally in loading us there! One bus didn't even have a license plate. The good news: two city buses, which did have permission to load and unload there, were coming to pick us up and take us to camp, and they would do so free of charge. Thank you, city of Tijuana! We don't know what the first Mexican bus company would have charged the group for the border run, but as Victor put it, "God works in mysterious ways".
The third set of buses now showed up, and the group once again unloaded and reloaded their baggage. I got on the lead bus, driven by Octavio, a city bus driver. I should have got a picture of his bus bling, flashing blue lights, etc. The musc was fun.
I was the only person among police, bus drivers, and our participants who actually knew the way to camp. We took off, a police car in front, the two new buses, and another police car in the rear. After about a mile, the first police car left us. We drove through Tijuana, took the free road toward Tecate, and then turned off toward El Niño, the last community before our camp. On the way, a SWAT team (which I mention purely to increase the PHC, or Policeman Head Count) passed us in a police pickup truck, M-16's at the ready. Then we passed an auto accident, with a police motorcycle and sedan attending.
Before we left, our police escort had asked me to stop the buses once we got to El Niño. Once there, as arranged, the police car which was in back took the lead, with me in the backseat. Not sure why they wanted that. But we made it to camp just fine. Here's a pic of the lead bus, which I took from the back seat of the cop car.
I had a fun chat with the two policemen, Luis and Isais. Their English was about as good as my Spanish. They commented on my Mexican accent (which means it was better than my vocabulary, I suppose ). I showed Luis my new camera. Cool dudes. Here's a pic of each of them—Isais is the one in the car, on the radio:
It was 2:15 by the time we got to camp. Earlier, I had tried to arrange it so that a fourth set of buses would be waiting at camp, to take the group to their worksites. But somehow it got miscommunicated. Given the choice of waiting an hour (or more) for more buses, or just taking a skeleton crew to the worksites in the vans, they opted for the latter. Of course, it took an hour to coordinate.
Haven't had enough police in the story yet? Here's some running alongside the road on our way to the worksites. They were probably cadets.
We arrived at the worksites, met our staff, and moved some tools around. When Ryan and I left, it was about 4:30. One last police incident: on the way to the border, we were driving down a divided highway, two lanes in each direction. We were in the left lane. In front of us, a dog ran out onto the road; Ryan slowed down to give him time to reconsider. He did, turned around, and ran back onto the median. His buddy, the collie, wasn't that smart. Ryan had to stop to avoid hitting him, but he just kept crossing. The motorcycle cop on our right didn't stop. Bonk! I thought for sure the dog would've lost a leg, but he yelped, rolled over a couple of times, and ran off the road. Amazing that the cop didn't spill the bike. He drove on, we caught up to him, and he laughed as we exchanged surprised looks and the international signal for "Whew! That was a close one!" I wish I had a good picture of him (heck, I wish I had been taking video) but here he is in the distance afterward. We passed him later when he stopped at a gas station to check his tires.
Ryan said, "this was supposed to be an easy day". Hope everyone concerned has a better one tomorrow. Personally, I'm going to try to stay in the San Diego office and not see a single policeman all day. That'll be enough.
This is the new Rancho (Tijuana) camp
Each arrow points to a house being built at the same time last week in Juarez. There are probably more that I can't make out from the original photos.
I stitched three photos together, by the way, to make the one image.
I found this label on one of our tool trailers while working in Ciudad Juarez last week. The bar on which they placed the sticker is wider than it is tall, so one might think that the 4-panel layout is due to those size constraints. If the layout had been vertical, would it have been like this instead?
In the original, four horizontal panels each have their own header in a different color, but the meaning of each header isn't very different—"warning", "danger", "caution", and "notice" aren't very specific, and all carry the same semantic. One might think the space is wasted.
But there are good reasons IMO to have four separate sections. If they had not done so, would anyone read all of the information? I doubt it. They would instead gloss over the entire panel, reading only perhaps one-quarter to one-third of the text. Having four sections at least draws the eye to the initial text in each section, and increases the chance that the reader will get "the big points". In addition, I found myself more interested in reading the entire text when it was broken up into four manageable chunks. The first and last chunks are quickly dismissable as "common knowledge"—things you should know without having to read it. That quickly leaves two short lists to check off mentally, rather than one large one.
So the question is, is this by by design?
When Nubi first became a student of Master Fu, he would ask the master many things.
"Which is the finest Web framework?" "Why is an Object Database better than a Relational Database?" "What is the best sorting algorithm?"
To these, the master would make no reply, nor even acknowledge that Nubi had spoken. However, Nubi would ask other masters and their students these same questions, and received many replies.
One day, Nubi asked Fu, "Master, there are many questions I ask of you which you do not answer. Yet I ask these same questions of others, and they have many answers. I begin to doubt, and fear that I will not find Wisdom by following you. Why do you remain silent?"
Master Fu replied, "I do not answer because you have no question."
At this reply, Nubi was greatly distressed, and said, "if I have no question, then how can others answer me?"
Without speaking, Fu hit Nubi over the head with his walking-stick.
Nubi turned himself in a circle in great confusion, and asked, "why did you hit me with your stick just now?"
Fu forced the stick into Nubi's hand. Upon grasping the stick, Nubi was enlightened.
I've been wanting to put some pictures of my niece and nephew up here for awhile, but haven't found the time. Well I made the time gosh-darnit!
Pictures taken by Pam Gwillim
Well, my stats page did anyway. Guess I need to norobot that. Surely they deserve a better ranking than I on the subject.
I just spent a week working in the field in Ciudad Juarez, across the border from El Paso, Texas. As you can see from the photos, we had wind and dust for breakfast, lunch, and dinner. Steve Horrex took some nicer pics which Ali posted—all I can say is that he must have spent more time in a camera-friendly environment (with windows and a steering wheel ) than I did.
Daily D'oh! Don't cut your rafters to 11 feet if the house plans say 11-foot-9. You'll have to nail a little outrigger onto each one, as in this photo (outriggers highlighted in red).
This past saturday I had the opportunity of working with a group from a church called Coast Hills. It was just a day group, so all I did was lead them in in the morning, then hang out and make sure they had all they needed to do their stucco job on a school near El niño. I didn't have to help them with the actual stucco, they were more than equiped, so I took a bunch of pictures of them, and the school grounds. These are some of the pictures I liked:
A rare self-portrait. (reflection off of a window on my truck)
The Jaws of Education.
Macro shot of the top of a playground slide after rain.
Inside of the almost finished edeficio de escuela.
This is the Otay Mesa border crossing. From where I was when I took this picture, it took me 90 minutes to get into the states...and I had to pee !
I love this shot, from inside the school grounds looking out to the road.
Vista de one of the pre-existing school buildings, con el nombre de la escuela.
Just having fun with my camera
I apologize to my co-workers for sending their blog entries so far down due to my pics.
If you can't make out the text on the packet, it reads:
INGREDIENT STATEMENT: WATER, TOMATO, RED
PEPPER*, DISTILLED VINEGAR, CONTAINS LESS
THAN 2% OF GARLIC, SALT, SPICE, CANOLA OIL,
SODIUM BENZOATE AND POTASSIUM SORBATE (AS
PRESERVATIVES), ASCORBIC ACID. *DEYHDRATED
Two rather odd choices, here.
First, why "Ingredient Statement" instead of the more typical (and readable) "Ingredients"? My first thought was that the language lawyers had paid a visit to the copywriter, and left him or her in a fog of legalese. "The Ingredient Statement MUST list the official chemical names or common names..."
Second, why does "Red Pepper" have a freakin' footnote when a) the entire content is a single block of text, and b) the footnote is itself laid out as part of the single text block? Why not just write "Dehydrated Red Pepper" inline? Both Ryan and I had the same thought: maybe it lines up better in the fully-justified block. With ~43 columns max, it would bump to six lines instead of five. But if you change "Ingredient Statement" back to "Ingredients", there's no problem at all staying on 5 lines.
The question is, is this by by design?
From DNJ. "Steve" is Steve Cook, an architect for Visual Studio Team System.
Matt: So the automation tools depend on the job you’re doing.
Steve: Yes. If you were implementing an e-commerce application then you’d clearly need a web site, so you’d have all the stuff you need to create web sites. If your software factory was for producing an embedded system for a robot then you wouldn’t have a web site.
So if you have a great idea for a web server to be built into your robot, you're out of luck. Or rather, in luck, because you've got a competitive advantage over those who can't see beyond the tools Microsoft gives them.
Do bigger tools hamper innovation more than smaller ones? The innovations to come out of the Unix philosophy might indicate that.
Hm. Seems like "currying" may be a misnomer, after all. Not just because it tends to get used for partial function application, but because Curry popularized it but didn't "invent" it—that honor belongs to Moses Schönfinkel. But the c2wiki seems to think "invent" is too strong a word.
Meh. The Schönfinkel reference is a good intro to programming calculi, and that's what I really want to bookmark and read in more depth after Spring.
I love photography! Here are a couple pictures I took yesterday morning while waiting for someone.
I mean, wow. It's bad enough when you write down the wrong reference (1 Cor 9:22 should probably be :20-21, which is what they almost paraphrased), but when your paraphrase adds words to the text to make your point—shudder.
Jeremy Hylton posted a little blurb about wanting "to use composition instead of inheritance". I try to do that, too, and have an additional trick I play. Because function-calls are rather expensive in Python, I sometimes use None instead of a "dummy object" for the null-behavior case.
class Parent(object): pass a = Parent() a.lock = None b = Parent() b.lock = lambda: True
>>> import timeit >>> t1 = timeit.Timer("if a.lock: a.lock()", "import test; a = test.a") >>> t2 = timeit.Timer("if b.lock: b.lock()", "import test; b = test.b") >>> t2.timeit() 1.7819946389834485 >>> t1.timeit() 0.44152985924188926 >>> t3 = timeit.Timer("b.lock()", "import test; b = test.b") >>> t3.timeit() 1.373198548977598
The third case,
t3, is what usually happens with normal delegation: even with a dummy object, a function-call is performed each time. If you have an object, you also have attribute lookup every time. If you have a high ratio of null delegates, it can save some time to use None instead. Using the naive timings above, if you have 50% null delegates, the times should average to
(1.78 + .44) / 2 = 1.11 versus the
1.37 average of dummy objects. If you have, say, 75% nulls, you get
.775 per call, on average.
From Dave Pollard via James Governor:
On the subject of blog commentary Dave offers these helpful ideas for what bloggers would like from their audience:
- constructive criticism, reaction, feedback
- 'thank you' comments, and why readers liked their post
- requests for future posts on specific subjects
- foundation articles: posts that writers can build on, on their own blogs
- reading lists/aggregations of material on specific, leading-edge subjects that writers can use as resource material
- wonderful examples of writing of a particular genre, that they can learn from
- comments that engender lively discussion
- guidance on how to write in the strange world of weblogs
I would only add--"especially new bloggers"
"Close your eyes, lower your head, say a prayer, and move forward."
I am often amazed at how God can use events to teach me things. It seems almost comical at times the situations I find myself in, and the attitudes, negative to boot, I meet those situations with, and yet, God smiles and I am drawn to him (or he draws me to him).
Last night was wednesday, another normal day. Only yesterday was not quite so normal for me. I haven't exactly had the best week so far, my car broke down on Sunday, my family is going through some tough times, and I am not able to be there to help, my body is plagued with what seems to be incessant soreness lately. Compound that with spending hours on tech support with people who I don't feel are listening to me, just to find out that I was right in the first place (wasting 5 hours). Ryan is just pissed off! No other way to truly explain it, he's bitter, angry, depressed, distracted, disappointed, detached, and altogether not in a friendly mood. And it's wednesday.
What I haven't told you yet about wednesday yet is that wednesday is Younglife Club night. The night I get together with 5 other leaders and spend 3 hours with 50 inner-city high schoolers. All in all I love Younglife, it has been a wonderful thing in my life, and I know that Christ is entering the lives of a lot of hardened youths that he might not be able to enter without this venue. But Ryan is pissed! He is bitter, angry, depressed, distracted, disappointed, detached, and altogether not in a friendly mood. And to add to that, this week's club is the most involved club that we have done in recent history. I am actually playing the part of Napolean Dynamite thoroughout the club, acting between skits, and dressing like the red headed misfortune himself.
I hate acting! I hate pretending, I hate being anything other than myself, especially in front of people.
Things just seem to keep getting worse. To add to the acting bit, we didn't rehearse anything. If we had rehearsed a bit, I imagine I would have felt a bit better, even just going over the order. But no, nothing, and everyone was late. Jason, playing next to me as Kip, was a bit late, then he had to go to Qualcomm to pick up a kid, so he was REALLY late. He and I were supposed to go over our stuff together, which didn't happen. Various leaders forgot various things, including myself, which served to make me that much less interested in doing anything that night. I even went up to Jeff (our leader of leaders) and tried to petition for us to scratch the whole night and just play capture the flag, it's easy and doesn't require any prep. He thought about it for a second, then declined.
I went to a wall and sat down, thinking of all the reasons I didn't want to be there.
We normally start Younglife at 6. Due to all the problems, leaders late, leaders not prepared, kid's not showing up, etc, we didn't start club until about 6:40. While I was sitting against the wall in the dark, I started thinking of other nights that started out in this manner. Ironically enough, they usually ended with me learning a huge lesson in obedience to God. Not a mangled catastrophe, but the kid's teaching me that I am too selfish, and I need to put things in God's hands more, and less in my own.
Sitting in the dark, leaning against a concrete wall, hearing our kid's talk from a few yards away, a girl yells to one of her friends using a very innappropriate term for a breast. Here I found myself wondering, of all things, why I am so selfish. Why do I have the inability to see past my own selfish desires, and see the beautiful souls of my children. Andrew, Eljin, Amanda, Anthony, David, Olivia, Porshe, Amber, just to name a few. These children are so beautiful, they are so pure, and they ALL live in such unfortunate and unjust situations. Amanda is dealing with very painful times regarding her sister, and I am mad that I had to talk to tech support for a couple hours. Andrew is constantly dealing with pressure from his friends, and honestly has a desire to know Christ more, intimately, and I am pissed that my car broke down. All my kids come from broken homes, I honestly cannot think of one that isn't from a broken home, and I am angry that I have to follow through with a skit that I agreed to do. Why am I unable to see the beauty of my kid's when I need to most? My life is too comfortable!
"Do nothing out of selfish ambition or vain conceit, but in humility consider others better than yourselves." Phil 2:3
Sitting alone in the dark I prayed that I would be able to look past myself for the rest of that night, and we began shortly after that. What ensued was one of the most amazing nights I have ever experienced in YoungLife, and I have been doing this for four years. All fifty or so kids participated, which rarely happens. All kid's enjoyed me making a dumbass out of myself, which I didn't think would happen. For 3 hours, these beautiful souls that God created intentionally and specifically for love were able to forget about all the crap that exists in and around their lives. They were allowed to experience some childhood that possibly never existed in their lives before Younglife. They were able to let their guard down, love eachother, be loved genuinely by adults, and love themselves with absolutely no negative consequences. These hardened young adults became little children on the playground. And God was glorified, irregardless of my mistrust. Irregardless of my selfishness, God was glorified.
I was bestowed the honor of talking with Andrew about Jesus last night. Of all the things that I thought might happen last night, this was not on the list. When we were taking prayer requests Andrew in disgust asked why we never pray for Jesus. Not understanding what he meant, the kids thought he was being smart, and his statement was met with a bit of resistance, which embarassed him, and he threw a bit back, I told him I'd talk with him after we were done. I honestly thought he was being smart too. Keep in mind that this IS NOT sunday school, so not all the kinds no the Christian "lingo". When I went up to Andrew and asked him what he meant I was taken aback by the response. What he actually meant was that he was irritated that we never thank Jesus for the things he does for us. "He is the only reason we are here in the first place, we should tell him that we are thankful", is exactly what he said. He wasn't being a smartass when he said, "Pray for Jesus", he simply didn't know how to word what he meant. He wanted to publicly thank Jesus for all that he has done in his life, and even for giving him life in the first place. When you hear someone like this say something like that, it makes you feel pretty small. I have been a Christian my whole life, this kid knows none of the lingo, doesn't understand things about the church, but Christ is in his soul, and present in his mind to an extent that makes me step back in humility. God was glorified, Andrew glorified Christ, and was even martyred for it, and he didn't even know the gravity of his statement, how intense his faith was at that moment. I never claim to understand Christ, and the more I learn about him, the less I know.
Andrew and the rest of the kids are a mystery to me, a mystery that I love, a mystery that that Christ loves.
Below are pictures from last night. One of the activities was "Glamour Shot's with Deb", straight from the movie. Sheeba and Hilary brought in a bunch of wacky clothes, the kids put them on, and we took pictures in front of some sweet custom backdrops.
Gangsta's? Not tonight Miles, Ryan, and Gene.
Porsche and Amber, Porsche was baptized via Younglife last year.
David! With us since the beginning.
Victoria, sporting the "FroHawk".
Tough 'n nasty...in drag?
Miles looking cute as a button.
Elenor and Olivia. (Elenor's grandmother is very ill, take a second and ask God to heal her please).
Haha, no comment.
On a regular basis, my team leader Wendy puts together a wonderful PDF of registration statistics for the ministry. I now shamelessly steal all of her hard work and post it for your edification:
- 2004 Spring: 8,955
- 2005 Spring Goal: 9,378
- 2005 Spring Actual: 9,800!
Ciudad Juarez has grown 33% this Spring over last Spring!
- 2004 Total: 22,912
- 2005 Total Goal: 23,795
- 2005 Total (so far): 20,244 = 85% registered already!
"They weren't just building houses with love, but kids as well."
Building kids, that is, not just with kids... Thanks for sending this one to me, Dad!
I couldn't agree more. Jump on blogs, all youse hep missionaries.
This past Friday I received a new feature request for our core business application. There's a report which nearly everyone on staff uses; it shows Mission Trips for a given set of dates. Most often, our staff will simply show all current and future Trips (and there's a one-click pathway for that common case). Each Trip gets its own row on the report, and each Trip has its own ID number printed on that row. The request I received was to make each printed ID a hyperlink to the data-entry page for the Trip.
Generally, people like to believe that "you get out what you put in"; that is, that the more effort you expend, the greater the reward. Baloney. I received more praise for implementing the hyperlinks than I have for any other feature in many moons. I spent months porting the app from VB4 to Python. In the process, I wrote an entire Object-Relational Mapper, including a DSL for processing data Sets, a mechanism for creating portable, early-bound Expression objects, and built-in analysis tools. I also wrote a web application framework, and an abstract Business Objects model independent of our specific business process. From the point-of-view of my users, all of that is par for the course—either completely expected, or completely obscured from their understanding. The response is decidedly underwhelming.
Total effort to implement the hyperlinks: open HTML file #1, select text, copy, open HTML file #2, paste. No reboots, not even a reloaded module. Perhaps 3 minutes if I throw in a test on the development platform before it goes "live".
- "Do that, and wait for the cries of 'Hallelujah' from our users."
- "Bob's a genius."
- "We're not paying you enough." (Really! I have the email.)
- "An answer to prayer."
The issue, of course, comes down to pleasing your audience. There's a meme among working software developers like myself that you should write code worthy of the giants of computing. Larry Wall's quote ("The three chief virtues of a programmer are: Laziness, Impatience and Hubris") is often interpreted to mean "write code you want to show to your friends", meaning other developers. But let's face it: very few developers are going to be looking at my code, one or two of them are going to have any response to it, and 10% of them will be in a position to affect my life based on their opinion of my code. The return-on-investment vanishes rapidly.
Does this mean I should stop writing software which pleases gurus and concentrate solely on my users? No, because I fibbed a bit. There is at least one developer whose favors I want to court: my future self. So I do what I need to do to keep myself and my team happy. The true role of a software architect is learning how to please your developers (even if it's only you), your users, and management. Do that well, and the rest follows, often with a simple cut and paste. And if you're a solo developer, learn how to reward yourself for the Herculean code nobody but you will ever appreciate.
Over that last six months Bob (fumanchu) and I have been going to Sushi for lunch once or twice a week. I remember sitting at work talking about how we wished there was a good sushi restaurant near our work because we both like sushi. After a fruitless internet search I decided to grab a phone book. I didn't suspect to find anything near our work, but I couldn't help but hope.
Meijo Sushi is what I came up with. With no expectations Bob and I headed out to Imperial Beach in search of decent sushi. What we found was more than decent, it was WONDERFUL! Wonderful service, excellent prices, a great chef named Yuki, and a cute waitress named Mindy (she winked at me once ). Now that is our favourite place for lunch, and we are known by the staff there. Bob and I have even expanded our sushi adventures by inviting various co-workers here at Amor Ministries. Katie Gardner, Jennifer Leeper, the Larson Lovebirds, Jeff Ahlberg, Jen Weiss, Jon Wilson, Blair Illingworth, Ali Kaun, Steve Rollins, and Lydia Lozano are a few of the names that have come along.
Today is another Sushi Day, and I have invited the staff to join us again. If you like sushi, I highly suggest taking the trip over to I.B. for Meijo, and order a Meijo Roll (one of their specialties). If you haven't tried sushi, don't waste another minute of your life! I'm telling you, it is some of the best food you can consume!
I can't believe I'm the first staff member to blog about this--you all were at the party!
We headed off to Anthony's Fish Grotto at lunchtime today to celebrate the 25th anniversary of Amor Ministries! Our staff, some old friends, and several board members were present to tell some great stories about the early days, and to give congratulations to Scott and Gayla Congdon, our founders, in particular. We also heard a great report from Scott about the last board meeting in El Paso, and how thrilled they were when they recounted all of the milestones we attained this past year:
- We built our 10,000th home.
- We had over 22,000 participants working in Mexico.
- We became a $5 million company.
- We established a new "main camp" in Tijuana.
...and many more.
I want to take this opportunity again to thank Scott and Gayla for their years of dedication--to those about whom nobody else cared--this manifests the love of Christ more powerfully than any speech or sermon. Thank you for modeling Christ for me directly. And a big thanks to all who have lived, worked, and donated time, energy, money and labor to the building up of the church in Mexico. You are part of something great!