I spent this past weekend camping in Joshua Tree National Park. I took three rolls of film and came out with about 10 photos that I like. I will try to get the good ones up for your enjoyment as soon as possible, however I will be very busy for the next week or so. 'Til then, here's a teaser...
This is a tree I found in JTNP (not a Joshua tree, though).
Here are four different views of the same tree.
(1) Edited: Removed color to create grayscale. Added signature and border.
(2) Edited: Performed Line Extraction. Added signature and border.
(3) Edited: None, All orginal photo w/color. Just added border and signature.
(4) Edited: Removed color, converted photo to alpha transparency, added bg color.
Which one do you like most? Lemme know.
Here is a link to an article I found where scientists in Taiwan have bred pigs that are green and glow vibrantly in the dark...
"The scientists...say that although the pigs glow, they are otherwise no different from any others."
So they glow? No biggie, there just pigs, whatever! HA
Here is a mudslide that I came across while trying to get to a waterfall hike. Didn't make it to the waterfall, but took some good pictures of the mudfall!
I have told numerous Californians about this little creature here, and I'm usually met in disbelief. So here it is, the Oregon Spotted Banana Slug. He's about five inches long and busy working his way up a glass door.
This is a view of the bars on an old town jail from Port Orford, Oregon, a small coastal fishing town along highway 101.
Dave Warnock points us to Ten Provocative Positions on Prayer by "Kim", to which I can only answer, "huh?" Perhaps they were provocative in Barth's day; I find them stale and purposefully vague . Number 6 was the sole exception.
Here are some questions on prayer that I find provocative:
- Does anyone in the Bible ever pray silently? If not, are we sure God can hear us if we pray silently?  Perhaps God created flesh as a barrier between our thoughts and his thoughts. If he cannot hear us, what would that do to the Church in the West (especially the USA, with its focus on the "personal walk")? What would it do to your "walk"?
- If you believe God has decided everything in advance, why does the Bible state that God sometimes changed his mind when people prayed?
- Do you believe God hears you as readily as he heard the patriarchs? You are not Moses--should you model your prayer after his?
- Do you pray with your eyes closed? Why? Is it fear of ridicule? Guilt? Tradition? Try praying in a group with your eyes open and see if your answer changes.
- If God already knows what you need, are your words important? Would meditation have the same effect? Or is speech fundamental to thought and our recognition of the Other?
- Do you pray too often? Has the "spiritual discipline" robbed your prayer of its meaning? Would your spontaneous prayer be better if you didn't pray corporately and ritualistically so often?
- Have you made your life so comfortable that you no longer have anything to pray about? Do you care about anyone else enough to pray for them?
- When Jesus was asked "how we should pray", his example was short and to the point. Are your prayers short and to the point? Why or why not?
- Are your prayers different from "normal" speech (in any way other than inserting "Jesus" or "Father God" instead of "uhhhh...")? Should they be? How and why?
- Do you pray to a Person or to an impersonal Force? Does he answer you as to a son or daughter, or a servant, or not at all personally?
 Okay, okay, I find most theological writings stale and purposefully vague.
 I recently spoke with a friend who went to the Ukraine and met with a deaf Christian community. They believed they could not pray to God since they could not vocalize, only sign (my friend's group took the time to teach them otherwise).
Adam Green recently wrote about "Web 2.0":
If it takes an essay or more than 5 or 6 bullet points to explain something, it is poorly defined.
I'll disagree with a counter-statement:
If it takes less than 5 or 6 bullet points to explain something, it's because the audience already knows what it is.
Recently, it seems like everyone's been focused upon creating The One Framework -- the Ruby on Rails of Python. In fact, I'm almost as guilty as everyone else. We have failed in this regard, and we will continue to fail. We've been struggling to find the best practices and combination of tools to create Joe User's average database-backed dynamic web site and application, and not only can't we agree on how to do it, no actual end-users care when polished solutions like Rails and ASP.NET are in town. Not only that, by many accounts Ruby seems to be overtaking Python in its rate of growth. Personally, I'd rather write Python.
But oh, how quick are we to forget Python's smashing successes in the Web world. We've got Plone, probably the most popular and comprehensive CMS out there. We've got the platform its built on, Zope, which is (from what I hear) fairly popular, too. We've had PyBloxsom, which until WordPress came along was a very widespread blogging system. Let's also not forget MoinMoin and Mailman, some of the most widespread Wiki and mailing list applications on the Web today. And hell, we've got Python's "killer" web app, Trac, which just about everyone is using these days. And oh, BitTorrent. I know it's not a Web application in the traditional server-side sense, but it just shows how capable Python truly is.
What do all of these applications have in common? They certainly don't share a web framework; most of them are developed specific to that application and tailored to various deployment platforms (CGI, FastCGI, custom server, mod_python). Python appears to be falling behind in the world of custom-made Web applications, but in the world of generic, reusable Web applications, Python is doing great.
And let's not forget about the great achievement of Web-SIG: WSGI. Now, we have a system that lets us write an application once and deploy it upon any WSGI-compliant server or gateway (to name a few, ISAPI, mod_python, CGI, FastCGI, SCGI, custom HTTP server).
Here's what I propose: screw Web frameworks for now. We won't win in the Rails generation. Perhaps when some ingenious Python programming comes up with that next-generation Web framework (Seaside + ZODB + LINQ + ASP.NET + PyMeld + LivePage + CrackAJAX, anyone?), we can give the Web framework wars another shot.
For today, let's work on making generic Python products. Let's make a kick-ass community forums system, an incredible blogging system, a news script, a CPanel/Webmin clone that people will use because of their features, not their programming language. Commentary is a great example of what I'm talking about. Let's not forget to make sure Trac, Plone, and all of our applications run seamlessly on WSGI, and let's make our WSGI gateways ironclad and diverse.
And, most importantly, let's all get behind what I believe is the most pressing and important concept in the Python web development world today: Paste Deploy. What Python needs more than anything is a brainless, quick-and-easy way of connecting applications to gateways. I want to drop a CGI file on to a Web server, point its config file to (the fictional) pyBB-1.0.0.egg, chmod it, and have it Just Work. I want to do the same thing for FastCGI. In fact, what I would love more than anything would be a portable mod_wsgi across Apache, LightTPD, and IIS: a module that would let me drop a .egg file into a directory and have it automatically pick up and install the WSGI application from the archive. Once we've got this, a standard, portable way of easily installing ANY Python web app, we'll be getting somewhere.
My, that was fun. Four hours of restoring a corrupted SAM on my mother's XP laptop—she has 46k dialup. :/ Here's the error message on boot:
lsass.exe - System Error "Security Accounts Manager initialization failed because of the following error: The handle is invalid. Error Status: 0xc0000008. Please click OK to shutdown the system and reboot into Safe Mode, check the event log for more detailed information."
The final resolution process:
- On another computer, obtain NTFS4DOS, install it on a floppy, then burn the floppy contents onto a CD.
- Boot the laptop from a Win98 CD. When prompted, choose "Run the computer with CD-ROM support."
- Stay on the command line, pull out the Win98 CD, and insert the NTFS4DOS CD. Run NTFS4DOS.EXE.
- NTFS4DOS loads, then waits for you to type "Yes" or "No" to the question, "Are you using this on a private computer?" Boring nagware, but a useful moment for us to swap CD's again—put the Win98 CD back in, so COMMAND.COM can be found on it.
- Answer "Yes" to the nagware prompt.
Follow the instructions from Microsoft (method 2, step 3) to replace your corrupt or missing SAM with the one from windows\repair:
copy c:\windows\system32\config\sam c:\windows\tmp\sam.bak
copy c:\windows\repair\sam c:\windows\system32\config\sam
Of course I considered Knoppix, but have you ever tried to download a 750MB ISO over dialup?
Glyph recently wrote:
I have also made no attempt to be fair, and I don't want to do this again any time soon, so if your favorite operating system got trashed here, don't bother to tell me that I'm not being fair. Think of it as a pop quiz!
Open source projects need more pop quizzes. There's a reason why you don't let developers run usability tests—it's far too easy to jump in with justification for why your product didn't work "just this once".
I'm just writing this to remember the "pop quiz" meme. Made me smirk.
After more than a year since 1.3 was released, I'm just about ready to officially release Dejavu 1.4! In addition to bugfixes, there are some major new features:
- Sandbox.recall now returns a list (use xrecall to get an iterator).
- Associations are now aware of whether they are to-one or to-many.
- logic.Expressions can now take multiple positional arguments (so you can test multiple Units at once).
- Improved multirecall, including full support for INNER and OUTER JOINs for all Storage Managers. Since the signatures for recall and multirecall now align, the "multirecall" name has been dropped; just call
Sandbox.recall(classes, expr)whether you're querying a single class or multiple ones.
- Units may now have arbitrary identifiers (primary keys).
- Unit Properties have a new "default" attribute.
- Simple inheritance is now supported; recalling one class will also recall its subclasses.
- New Sandbox "magic recaller" methods, like
inv = box.Invoice(13).
- New Sandbox.view method, to retrieve persisted data without creating full Units.
- A new Schema class to help manage changes to your model, and helper methods to sync database schemas.
- New logging support.
- A new test runner.
- Python 2.4 fixes for codewalk, the test suite, and fixedpoint.
As you can see, a year's worth of work. Feel free to kick the tires on all the new stuff. I should bless a release candidate in early January.
I just dumped a first crack at a Schema class on the trunk. Test code is here (search for 'schema'), docs are here. I haven't written anything like this before, so if anyone has recommendations or warnings about the direction it's heading, now is the time to speak up (before 1.4 is officially released )!
Basic design: there's a dejavu.Schema class which your app can subclass. Whenever you need to change the underlying database (or other persistence mechanism) schema of your app, you write a new
upgrade_to_X method, where X is an incrementing version number. Each such method contains the commands which will upgrade an installation from (X - 1) to X.
At runtime, you call
MySchema.upgrade(), and each deployment will run any
upgrade_to_X methods that it hasn't yet run, in order. The "currently deployed version" number is stored in a magic DeployedVersion Unit.
upgrade_to_X methods can choose to stay database-neutral and just use the (new)
rename_property methods. But because each Schema is application-specific, you can also write optimized instructions for your known StorageManagers. For example, say you need to change an int property to a string. The "database-neutral" way would be to have additional Arena methods for such tasks. Some of those methods may be added in the future, but nothing's stopping you now from writing non-portable SQL statements if you know your app is only deployed on, say, Postgres (but you should probably assert that before you execute the SQL statements).
Anyway, I'd be interested to hear from anyone else who has written database-versioning tools. Save me from a pitfall if you can. Have fun with the new Schema class and let's see if there are a couple of other common methods (like
add_column) that should go into the Arena and the StorageManagers.