Sheepology Version Control
November 12, 2009
Version control seems to be broken in the demo right now. It’s probably due to all the version changes of Django and such that have happened since last I test this feature.
UPDATE: Versioning is fixed. I had to install django-reversion 1.2 so it would work with Django 1.1.1.
More on The Kindle
July 20, 2009
I take back everything nice I said about the Kindle. Don’t buy one.
This morning, hundreds of Amazon Kindle owners awoke to discover that books by a certain famous author had mysteriously disappeared from their e-book readers. These were books that they had bought and paid for—thought they owned.
Read more at Some E-Books Are More Equal Than Others. Apparently Amazon can delete books right off your Kindle without your permission. And yes, they did refund the purchase price of the book, but that is little recompense for their intrusion. The irony of it all is that the revoked book is George Orwell’s 1984.
I decided after using if for a while I liked it and could get used it using it. But I have also come to the realization that paper is a really ingenious technology. Suppose you want to spread out several reference works on your desk while you are studying? You can’t do that with a Kindle.
Paper is good.
Scripting Gnome
July 17, 2009
I wanted to automate some things on my Gnome desktop and being rather fond of Python, I thought that I would start there and see what I could do. My first task was to change the Gnome Panel from one screen to another automatically. I have a dual monitor setup and I want to automate the panel moving from one to the other.
I did a little research and came up with this little script that does the job. It simply toggles the panel between screen 0 and 1. I had no idea it would be this simple.
import gconf
path = ‘/apps/panel/toplevels/panel_0/monitor’
gc = gconf.client_get_default()
cs = gconf.ChangeSet()
cs.set_int( path, not gc.get_int(path) )
gc.commit_change_set(cs,True)
My Mac
April 30, 2009
I’ve been using a Mac now for a week. This is the first time in my life that I’ve actually used a Mac for anything serious or for an extended period of time. I vowed to give it a chance for at least a couple weeks before I install Ubuntu.
The hardware is exceptional. I have a 17″ MacBook Pro with 4G ram and about 300G disk. The screen is beautiful, the touchpad is the only touchpad I’ve every gotten along with, and surprisingly the chicklet keyboard isn’t as bad as I expected. The aluminum case is a thing of beauty.
I am getting used to it. In fact, I could probably exist in the Mac world OK. That is to say that it is tolerable. Tolerable requires a good shell (that rules Windows out) and a good scripting environment including such things as Python and Perl. Those come bundled on a Mac. Tolerable also requires something like Spaces (something that Linux/Unix has had since the early 90s). While Windows doesn’t come bundled with something like Spaces, I know that there are add-ons that can do something similar. Tolerable requires easy access to tools like ssh, ftp, sshfs, etc. While that doesn’t quite rule Windows out, most of the Windows based tools that provide that functionality are sub-par and barely tolerable.
So yes, I can get along on a Mac. That does not mean it’s ideal.
I have 3 chief complaints with Mac OS. One, easy access to open-source software is poor. With Ubuntu almost any open-source package can be installed with a few clicks. Fink and it’s clones are sub-par. Two, it is relatively uncustomizable. That is to say I can’t set short-cut keys easily to do the things I want them to do; I can’t make the finder open files with a single click instead of a double; I can’t make the window focus follow the mouse without clicking (without buying a $15 add-on that still doesn’t work the way I want it to), etc.
And now for the biggest complaint, three, the basic premise of the UI is a throwback to the 80s. In the 80s desktop computers were a single-tasking deal. You could only use one application at a time. So at that point in time it made sense for Apple to put the application menu bar at the very top of the screen unattached to the application windows itself. That simply doesn’t make any sense anymore and it causes problems when you want to have things like focus follows mouse. Come on Apple, even Microsoft figured that one out.
So yes, I will give this Mac OS thing another week to see if I can somehow tolerate this broken UI, but I’ve already downloaded the latest Ubuntu in anticipation of my install next week. Supposedly this thing came with bootcamp…
First Day
April 13, 2009
Today is my first day at the Naples Daily News. It’s 88° here today.
Naples Daily News
March 27, 2009
I am currently in Naples Florida interviewing for a job at the Naples Daily News. Naples is what I would call a tropical paradise. It’s a bummer that there are no mountains for skiing or hiking, but it has its own beauty. Walking on the beach in shorts in March is pretty cool.
Upheaval
March 10, 2009
Having recently become unemployed, life is full of excitement. Thank God for the WARN act, which requires companies to pay employees for a full 2 months after announcing a company closure.
It looks very much like we will be relocating regardless of what job I take. For Sheepology that means development will be on hold for a couple months while we re-pack and relocate. Things are going to be very crazy around here for a while.
Final Edition
February 27, 2009
Sheepology and IE
February 6, 2009
BTW, I don’t even know if Sheepology works in IE. Haven’t bothered to check. For now use Firefox.
More on Sheepology
February 6, 2009
At the Rocky, we were beginning to create a number of geographically oriented applications (see our Holiday Lights). Lucky for us, GeoDjango had been recently rolled into the official release of Django. By simply installing the PostGIS extension to PostgreSQL, we had built-in geographic proximity search and much more. Here’s a sample that finds all addresses within 5 miles of the current address:
nearby = Address.objects.filter( point__dwithin=(self.point, D(mi=5)) ).exclude( id=self.id )
if len(nearby) > 0:
raise SomeException('Uh Oh...')
This type of feature not only makes it easy to find people who live near each other (presumably by small-group staff), it allows for improving data quality. When storing an address in the database, you can check to see if there is a likely duplicate (i.e. an address that is within a meter or so of another address) and prompt the user for an override if necessary. I have built this into Sheepology.
Something I have always been interested in is AI and natural language processing. So I was somewhat interested in making searches more fault tolerant. One problem we had at Crossroads was that we ended up with a lot of duplicate people in our database because searches failed. I wanted to improve the situation. I did a little reasearch and discovered an algorithm called soundex. While many databases have this built in, they do it on the fly, so doing a search becomes very slow. I decided to simply make an extra field that contained the soundex codes for people’s names. This way I am able to index the field and make the search fast. Python has a module called AdvaS that has the soundex algorithm and several other similar algorithms. So in just a couple lines of code I was able to have phonetic search. Try it in the demo if you want. Search for bryan and you’ll find brian as well. Or search for sherri and you’ll still find shari. In the main settings file you can choose your phonetic algorithm, but it defaults to soundex.
There is also a nice tagging module available for Django. It was remarkably easy for me to plunk this in and magically have tagging enabled on models I chose. In about 5 lines in my template I was able to create a tag cloud.
I had originally decided to develop my own UI for Sheepology, but decided to work on building the basic models first. What I found is that the built-in Django admin facilities are so extensible, that I may stick with the built-in admin rather than building a UI from scratch. I also added the Grappelli theme to jazz it up a bit. While I’d like to take credit for the look of the admin, for the most part it is a packaged theme designed by someone else.
What I have found with Django and Sheepology is that I am most effective as a systems integrator. While I have written a fair amount of custom code, what I am really doing is tying together a number of different open-source pieces to make a whole package. I can focus on my area of expertise (i.e. churchy stuff) and worry less about details.
I was able to build what you see as a one-man team in about 2 months. What I see down the road is nearly limitless. There are a number of Django open-source packages for doing such things as content management or accounting that could potentially be integrated into Sheepology for a comprehensive ChMS package.
On the immediate horizon I will be working on a graphical group hierarchy tool. I also see a need for an inventory tracker (portable churches desparately need this) and contact management.
Software Developer for Hire
February 4, 2009
About 5 months ago I moved to Colorado and started work at the Rocky Mountain News. Two months ago the parent company announced that they were putting the Rocky up for sale as it lost about $15,000,000 last year. So I started job hunting.
The paper has not yet closed and I am still looking for the right job. My plan is to stay in Colorado somewhere along the front range.
If you’re interested, check out my online resume.
Our Responsibility
September 23, 2008
…true piety admits no other rule than that whatsoever things have been faithfully received from our fathers the same are to be faithfully consigned to our children; and that it is our duty, not to lead religion whither we would, but rather to follow religion whither it leads; and that it is the part of Christian modesty and gravity not to hand down our own beliefs or observances to those who come after us, but to preserve and keep what we have received from those who went before us.
– St. Vincent of Lerins
A Sentimental Old Fool
August 26, 2008
Well, I got what I wished for – a one-way trip to Colorado.
Little did I realize how hard it would be. As I sit here in a quiet house with the kids in bed, I look around and realize that this is the last night I will spend here. Shari and I built this house 10 years ago. Both our kids were born right here in this house.
On Sunday I said goodbye to my friends at Crossroads. It was my last regular visit. And though I’ll probably someday take a sentimental journey back, it will never be the same. It felt like I was leaving home… and I was.
Tomorrow I will say goodbye to the guys I have worked with at Math Reviews for the last 12 years. They’re more than just co-workers. They’re friends. They’re friends who would give you the shirt off their back if you needed it. Heck, my manager even loaned me his car when mine broke down. I’ll be camping with one of them Thursday and Friday before I embark on my journey. Because they are co-workers I took their friendship for granted and only now realize what I’m leaving behind.
I remember when my grandmother died. I watched my grandfather say goodbye to her in the casket. He leaned over and gave her one last gentle kiss before the casket closed. To this day I tear up whenever I remember that moment.
Life is full of both greetings and departures. Some are temporary and some are permanent. Some of them feel as though a part of you has been yanked out and left behind.
Lord, heal my heart.
Gluttony
August 22, 2008
In preparing for our move westward, I have come to the realization that there is more than one way to be a glutton. Gluttony generally applies to food and diet, but it could just as well apply to “Stuff” in general.
Gluttony is one of the seven deadly sins. The seven deadly sins are “Great offenses against God, or moral faults which, if habitual, could result in the spiritual death of the individual.” (from A Dictionary of Orthodox Terminology). Gluttony is described in Dante’s Divine Comedy:
Dante and Virgil pass on to Circle Three to view the punishment of the gluttonous. They see all around them what resembles a disgusting garbage heap. And thus the symbolic punishment is once again revealed — as these sinners “pigged out” in life, now they must live in a heap of swinish garbage as their eternal punishment. To make matters even worse, they are guarded by the violent and powerful three-headed dog Cerberus. If the sinner attempts to move away from the filth, Cereberus appears to cover the sinner over with hellish-three-headed dog-slobber! Dante and Virgil then move toward the next Circle and view the monster Plutus. – from Teachersfirst.com
From the looks of the dumpster in my driveway, I am guilty of gluttony. But I don’t think I am alone and I don’t think this is abnormal in America. The word consume as in consumer describes the act involved in gluttony. Our society is likely the most consumption driven society to ever exist in human history.
I consider myself conservative in every sense of the word. This is one aspect of conservatism I have failed in.
Lord, have mercy on me, a sinner.
Leaving Crossroads
August 20, 2008
Yesterday I announced that we’re moving to Colorado. While this is a big change in my job and locality and such, perhaps the biggest change for us will be leaving Crossroads.
My family has been a part of Crossroads now for about 7 years. I have put countless volunteer hours into Crossroads and Shari has put even more of herself into Crossroads than I. We have many great friends at Crossroads that we will greatly miss. Crossroads is not perfect, but no church is and that imperfection does not change our heart for Crossroads.
The great reality of this is that Crossroads is part of a bigger picture. It is not an isolated island in a sea of isolated islands. It is a member of the universal body of Christ. No matter where we go, while we will miss seeing these friends in person, we will continue to be a part of that same body. We are not leaving our fellow members, we are simply connecting more directly with new ones.
When modernists deny… a supernatural connectedness of all believers by the mystical union of the Holy Spirit, they destroy the historic, orthodox Christian understanding of the Church … The Church becomes a society, a natural, human, non-supernatural religious community. It is bound together by purely natural ties, such as a common heritage in the Bible, a common belief in some sort of uniqueness in Jesus, a common belief in the historical continuity of Christians, and a common ethic of love. Now the church is a society. But this is secondary to its being the supernatural body of Christ. – Dr. Bernard Ramm (quoted from Ray Stedmann’s Body Life)
My last advice for those who will carry on the torch at Crossroads (and to myself, for these are also weaknesses I have) is this:
Understand your limitations and don’t try to do too much. Trust others to help. Just because something isn’t perfect doesn’t mean it isn’t worth doing. Don’t cover up your weaknesses and mistakes. Instead allow God to work through those weaknesses. Sometimes it is best to choose authenticity over excellence. God’s strength is made perfect in weakness.
Communicate openly. Transparency is often better than polished opacity.
And this especially fits me: Don’t think too highly of yourself. God will build his kingdom at his pace regardless of your successes or failures. The best laid plans of mice and men…
Westward Bound
August 19, 2008
I have accepted a web developer position with the Rocky Mountain News in Denver, Colorado. I begin work there on September 2. I am anxious to get started there and look forward to new and exciting challenges.
I have enjoyed my time at Math Reviews and will miss all my friends there. It has been a good place to spend the last 12 years.
…But I am also excited to be moving to Colorado. My family and I have vacationed many times there and often wish we could stay. Shari and I have talked about such a move since before we were married and it has finally come to pass.
Now, if anyone is interested in living near a lake in Onsted, Michigan, you can call that number on the sign!
Latest Open-Source Blender Movie
July 15, 2008
Big Buck Bunny is very cool.
Disciplines
July 10, 2008
I’ve been practicing Taijiquan for many years now. I learned what I know from a Taijiquan master. I studied under this master for about two years and then due to a change of lifestyle and consequent financial changes, I discontinued this study. I have continued practicing the form on a daily basis since that time.
When I first studied, I tried to apply the principles of movement that I was learning to everything I did. Whether it was walking down the street, or getting up out of my chair, I was so fascinated with Taiji that scarcely a moment passed that I was not “doing” Taiji. Taiji was a part of my life.
Skip ahead 7 years or so… My Taiji was stuck in a rut. I still practiced the form, but my form was stuck in a rut and my Taiji was stagnant. A few months ago I was introduced to Chi-Running. Chi-Running is an attempt to take the principles of Taijiquan and apply them to running. Since I am training for a marathon, I became very interested in Chi-Running. I read the book and began applying these principles once again to not only my running and my Taijiquan (which has made significant improvements since I started Chi-Running), but all movement. I have since taken a Chi-Running class that has further served to push my form along and promote growth and improvement in both running and Taijiquan practice.
Today I was reading about The Habit of Prayer on my favorite blog, Glory to God for All Things. While I don’t think this post contained anything new to me, it presented it in such a way as to bring me to the realization that my approach to Taijiquan – that is, constantly applying it during the day – was exactly what prayer should be. Prayer should not be a habit, or something we schedule time for in our calendars. Prayer should consume our lives.
The practice of Taijiquan is like the Old Testament festivals and sacrificial system. They were a shadow of what was to come in Christ. Taijiquan is a shadow, an analogy, of true prayer.
Oh how sad that my prayer life is only a shadow of my Taijiquan.
Eternal Security
June 27, 2008
Many evangelical churches (my own included) teach eternal security, otherwise known as once saved always saved or perseverance of the saints. I’ve been thinking about this teaching recently and came across a dilemma. I hope someone can help resolve this for me.
Eternal Security basically says that once you have been saved, you can’t be unsaved. Once God has adopted you into his family, nobody, yourself included, can undo that.
Now it is also my understanding that what Christ did was to make it possible to undo Adam’s act and return man to his original state of sinlessness, to become regenerate. So by accepting Christ and being saved we have the opportunity to become like Adam before he sinned. Hence Christ is spoken of as the second Adam.
So if being saved eventually takes us to a pre-sin state like Adam. What is to stop us from making the same decision that Adam took in his pre-sin state in the Garden of Eden by choosing to separate himself from God? In other words, if we take on the same state that Adam had in the garden, why could we not then make the same decision he made to eat the forbidden fruit?
My guess is that typical answers to this question will center around the concept of predestination. What this leads me to is that God predestining me to be saved presupposes that I was at one point lost. In other words, in order for me to be predestined to be saved, I also had to be predestined to be lost. Logically then (assuming the doctrine of original sin), Adam and Eve were predestined to sin. Did God predestine sin?
Kids Programming
May 22, 2008
I recently decided my son Micah should be introduced to programming. He’s 9 now and being the son of a geek needs to know more than how to play games. I did a little research and found some useful learning tools.
I discovered a free online book called, “Snake Wrangling for Kids.” This is a great introduction to Python for kids 8 and up. I simply set him up with a PDF viewer and a Python shell in another window and let him go to work. I was simply there to answer questions and help if he didn’t understand things. It took a little bit to get him interested. You have to show kids what is possible because learning about variables and stuff is pretty boring if you don’t know their potential. I wrote a simple Python function (probably not the most efficient way to do this, but simple) to draw a Sierpinski triangle and even my 6 year old daughter became interested. Of course then we had to try running this with a hexagon instead of a triangle…
def sierp(turtle, size=200, sides=3):
for i in range(sides):
turtle.forward( size )
turtle.left( 360/sides )
if size >= 10:
sierp( turtle, size/2, sides )
An even easier (and probably more fun) place to start is Scratch. Scratch is a visual programming environment based on the Squeak Smalltalk engine. (Note that the website only mentions Windows and Mac versions, but if you dig enough there is a beta Linux version as well.) Scratch is set up to allow sharing of your creations on the Scratch website. Micah’s first Scratch “program” (created with some help) is viewable online.
New CMS Platform
April 8, 2008
If I were in the mood to develop a new Church Management System, Google App Engine is the platform I would likely use.
Marathon Group on MapMyRun
March 22, 2008
If you’re from Crossroads and are interested in training for the Chicago Marathon you are invited to join our group on MapMyRun.
Marathon
March 18, 2008
Now I’ve done it. I signed up for the Chicago Marathon. I’ll likely be blogging about it over on Through the Cooking Glass.
Now I’ve just got to convince Pete to do it…
Vacation
August 8, 2007
See photos of my family vacation in Colorado over at my other blog.
Tech Snobbery
April 15, 2007
Oh dear. I’ve been declared a Tech Snob of the highest order by Jim Walton.
I’ll admit it. I’m a snob when it comes to tech, particularly operating systems. But I’d like to think of my comment on his blog as more of a confession than a proud boast. It’s a statement of my sinful nature.
I got to thinking. We, as ministers in “emerging” churches, are church snobs. We tend to think that the contemporary methods of doing church pioneered by the likes of Saddleback and Willow Creek are much better than the old ways. There may be some truth in that, but that doesn’t excuse the snobbery.
So how do you defeat snobbery?
