I understand the human penchant for categorizing things. We’re good at it. It's nearly automatic, and it's arguably a necessary survival skill. We cannot spend all of our time re-evaluating our understanding of every experience, every physical thing in the world, as though it were the first time. We need categories as a kind of cognitive shorthand – they let us wrap all we think we know about a set of things, place them in a little box, and add a label.
But when dealing with other people this quickly becomes socially corrosive. It is precisely because labels are shorthand – they stop us from new thought. We’ve already formed an opinion about the label the last time we used it, so the opinion just transfers to the next person, uncritically.
what is lost
When you use a label you are choosing, likely unknowingly, to not understand. All the nuance, the possibility that those labeled might have views that don’t fit into those neat little boxes, or haven’t fully figured out what they feel about an issue... that all goes away when the label shows up. We don’t see it anymore, and we stop thinking about it.
As you can imagine, this is most prevalent in politics and religion. You’re an X or a Y. The assumption goes that your label dictates your beliefs.
It’s a problem for the person labeled. But it is even more of a problem for the labeler. You deny yourself the opportunity for understanding. It’s quite likely that the person labeled either won’t hold quite the opinion you thought they did, or if they do, the reasons why they hold that opinion may be novel. You might learn something. Regardless whether it affects your opinion on the topic, it will very likely have an effect on your opinion of the person. I have had this experience myself. Looking for understanding is far more satisfying than the false certainty of those little boxes.
At a larger scale, labels inflame rhetoric and reinforce a sense of otherness. If someone labeled X disagrees with someone labeled Y, the easy reaction is "well, it must be because they're X and Y." Suddenly it becomes an issue of irreconcilable membership, not a nuanced discussion of values. Done frequently enough and labels can evolve into institutions, degrading the opportunities for collaboration and understanding.
From the other side of the looking glass, labeling yourself gives both others and yourself permission not to think deeply about why you hold certain opinions on a given topic. You put up a barrier to conversation and understanding - people will generally assume you have just adopted the party line. You may find that when you pull apart the positions and issues that are lumped into your label, you reach a point where don't really know the reasons behind your opinions on a certain topic. I know I've had to reevaluate the boundaries of certain positions I thought I had figured out. I have also seen this happen for other people, when I approach a discussion with the goal of understanding. If you can challenge them to think about it, you may both learn something.
Attention to high-speed rail in the United States has picked up recently with the inclusion of funds for it in the newly signed stimulus bill. I’ve been exploring high speed rail plans in my corner of the country, and passenger rail in general, since reading JH Crawford’s book Carfree Cities.
As a form of passenger transport, rail can easily be the lowest energy per passenger-mile requirements. The 2008 US Transportation Energy Data Book places rail third (after van pools and motorcycles), but this is due to dismal ridership rates. It cites an average number of passengers per train at 24, which is less than even a bus can carry. Raising it to a mere 50 passenger average easily puts rail back at the top of the efficiency list (keep in mind that a typical train has capacity for 800 passengers). Also consider that new technologies and lighter materials can make the trains more efficient as well.
Rail also takes up far less land as compared to the multilane highways we rely on now to move large numbers of people (which, incidentally, typically do not move as many people as quickly as a well run rail line). And electrification of rail lines opens up the possibility of powering trains with renewable energy sources, compounding rail’s climate and pollution advantages.
To get a drastic reduction in car-dependence for urban dwellers, you have to consider alternatives that provide reasonable autonomy and efficiency in place of automobiles. The good news is that in appropriately dense cities, and getting between them, rail provides a very good option.

appropriate modes of transportation for given distances
current high-speed corridor plans
In Georgia, there is very little passenger rail service. Inner metro-Atlanta has MARTA, and there are all of two meager passenger rail lines run by Amtrak: one in the north, and one along the coast. The passenger rail options only directly serve two of Georgia’s 10 most populous cities. Plans for extending MARTA to Atlanta’s outer suburbs have stalled time and again. There are thousands of commuters into Atlanta, Augusta and Georgia’s other largest cities that have no viable alternative except to wade their way through traffic jams day in and day out.
There is a set of nationally designated high speed rail corridors proposed for Georgia. However, I feel that there are real problems with Georgia’s current rail plans:
- The high speed rail only serves three of the state’s top 10 most populous cities. It seems to avoid Athens (Georgia’s 5th most populous city) on its way from Greenville, South Carolina to Atlanta for the sole reason of reusing the right-of-way already established by the current Amtrak route.
- It makes a stop in Jesup, with a population of 9k per the 2000 census. Again, there’s existing infrastructure here (an Amtrak station), but high speed rail benefits from as few stops as possible, so you want to make those stops count.
Atlanta was founded as a rail-town. Certainly Georgia ought to be able to reclaim some of its legacy by building a modern passenger rail system for its citizens.
better serving urban population centers
Georgia's most populous cities
| Atlanta |
519,145 |
| Augusta |
192,142 |
| Columbus |
188,660 |
| Savannah |
130,331 |
| Athens |
112,760 |
| Sandy Springs1 |
97,898 |
| Macon |
97,606 |
| Roswell1 |
87,807 |
| Albany |
76,939 |
| Alpharetta1 |
65,168 |
|
|
| Johns Creek1 |
62,049 |
| Marietta1 |
58,478 |
| Warner Robins2 |
48,804 |
| Valdosta |
43,724 |
| Smyrna1 |
40,999 |
| East Point1 |
39,595 |
| North Atlanta1 |
38,579 |
| Rome |
34,980 |
| Redan1 |
33,841 |
| Dunwoody1 |
32,808 |
1 exurbs of Atlanta
2 exurb of Macon
Part of the dilemma with providing effective rail service in Georgia is that the population is so spread out. The term ‘exurb’, denoting the ever-expanding tracts of suburban living farther and farther from urban centers, could do with no better example than the metro-Atlanta region. Per 2007 figures (via Wikipedia), the city-proper of Atlanta is home to 519 thousand people, while an additional 4.8 million reside in the metro area, an area 62 times larger than the urban core. If where I live in Athens is any indication, even within the urban boundaries of most of Georgia’s largest cities, the living arrangements are much more suburban than urban, making car ownership a near-necessity and hurting the chance for effective, ubiquitous public transit.
Riddle me this: is it easier to convince more than 100 thousand people to relocate their city to be closer to existing rail structure, or to put down new rail lines that would better serve existing urban centers? This is the question regarding the designated high-speed rail corridor currently proposed traveling from Greenville, South Carolina to Atlanta, bypassing Athens. First, consider that high speed trains can’t use existing cargo rail; they will likely require upgraded or entirely new track to achieve the speeds desired, so the only real loss rerouting through Athens would be the existing right of way, not the actual infrastructure.
Next, consider that Athens is home to the University of Georgia, with a student body 34 thousand strong. Student populations typically both have low car ownership numbers but are also highly mobile as they travel regularly between home and school. I expect that a high speed rail link into the Atlanta Airport (and Atlanta nightlife), as well as to cities beyond Georgia, would be most welcome and heavily used by students. This, paired with more ubiquitous public transport within Athens, would likely encourage more students to forego bringing cars to school; increasing safety, reducing pollution and the ever-expanding need for parking space. It might also alleviate the immense floods of traffic that converge on Athens whenever the UGA football team has a home game. Now also consider that all but one of Georgia’s most populous cities have significant student populations.
In order to maximize use of inter-city trains (high speed or otherwise) each destination city ought to prioritize improving their public transportation within the city. In turn, public transportation benefits from denser city structure. Making it easy to walk or bike from home to a transit stop, or from a transit stop to a destination, increases the chances that people will choose transit over personal cars. It is also an endorsement for mixed-use zoning, which brings destinations of all kinds closer to hand.
of population and density
What is a Car Free City?
In this section I refer several times to the urban design specified in the book Carfree Cities by JH Crawford. Essentially it calls for high-density, mixed-zoning districts strung out in a transit-oriented city topology. For more background, visit the carfree cities website, or take a look at how I mapped this idea onto Athens, GA.
If I had a free hand to reshape Georgia urban and transportation policy to get as many citizens car-free as possible, it would look something like this. First, I am going to advocate that all designated cities follow something approximating the reference design from the Carfree Cities book. To determine which cities ought to receive this treatment, we need to look at some population and labor numbers.
Of the 9.7 million people living in Georgia, over half of them live in the metro Atlanta area. The reference design suggests a population of 1 to 3 million per city; Notice that in the top cities table above many of the designated cities are actually exurbs of Atlanta. To fit the 5.3 million metro-area residents, we’ll designate 3 “sister-cities” linked by an intercity rail loop as Crawford advocates when dealing with populations larger than is practical for the reference design. On a whim I’ve named the new sister cities after the counties where they reside, but you could also call them collectively “Atlanta” and consider each sister-city a borough, similar to how New York City is organized.
3 cities for Atlanta leaves some room for population growth. We’ll look at the rest of Georgia in the same light. I’ve chosen to designate 10 cities for the 9.7 million residents. But not everyone will live in these cities. Some will live in more rural environs, either by choice or as required by their vocation.
From the categories listed in the Georgia Department of Labor 2004 statistics I’ve gleaned that only 11.9% of jobs in Georgia do not work well in an urban environment (Agriculture and Mining; I’ve also lumped in Manufacture, to take into account that this may include heavy industry that you would not want in a human-scale city). So, understanding that jobs and population count are not a 1:1 relationship, using a naive model we can start by mapping 12% of the population to the countryside, and count on 88% of Georgians to live in our 10 cities.
These numbers need some padding, though. First, we need to consider that if Michael Pollan is right, we’re going to need a lot more hands on the land in order to produce our needed food crops. There are also plenty of jobs that need to be filled in small towns to support non-urban workers. I don’t have a good sense of this, but lets take a stab and say that 20% of Georgians will live outside of cities, leaving us with 7.8 million urban residents. With 10 cities on my map, that gives us a lot of head-room -– anywhere from 2.2 million to a whopping 22.2 million new people. Now, even considering that 2008 estimates of state population indicate Georgia gained 1.5 million new residents since 2000, this is probably excessive. But you will see that I chose to designate cities that are already well-established as major population centers, distributed across the state. The Carfree Cities model speaks of 2 million as a comfortable size and 3 million as a practical upper bound for the reference design; cities can grow into the model by adding districts or transportation loops as merited by population count.
revised rail corridors
So, back to rail. The map here identifies 8 cities across the state as major urban centers. The Atlanta area gets split into three cities to handle the burgeoning population there, bringing the total number of car-free cities to 10. The blue lines are what I feel are a better routing for the currently proposed high speed rail corridors. I’ve eliminated Jesup as a stop on the coastal route, and included Athens in the Northern Route from Greenville, South Carolina to Atlanta. I’ve also suggested we extend the inland route up to Memphis, Tennessee, another major urban center and destination in it’s own right.
I’ve assumed that it would also be necessary to include a more local service along these same rights of way, though probably not using the same tracks. Particularly while Georgia transitions away from suburban sprawl, and eventually to service towns that support rural vocations, a local service will be needed to make rail available to a larger number of stops than is practical with high speed rail.
Aside from the intercity ring between the three Atlanta sister-cities, the black rail lines represent rights of way and local passenger service between Georgia’s other urban centers. Eventually it would be good to see high speed lines laid down along these routes as well.

The speed advantages of high speed rail over car travel for the distances here are significant. 200km/h represents the lower bound of typical high-speed train speeds around the world, and more countries are starting to run trains at 300km/h or greater. I see no reason we should not have the ambition to operate the world’s most effective public transit systems in this country.
conclusions
Transportation is a major element of national infrastructure in any nation. A good metric for setting national priorities is serving the broadest number of people. Among the various transportation options, public transit clearly meets this criteria. Road-building only provides transportation to those who have enough wealth to afford the large up-front costs of purchasing a vehicle, and the ongoing costs of fuel, maintenance and insurance. As we’re seeing right now, easy credit isn’t an answer to closing that gap either. And even could the economic hurdles be overcome, broadening the availability of car ownership to everyone runs up against environmental limits – air pollution, increased storm-water runoff from more and wider roads, and global warming.

A recurring complaint about passenger rail in this country is that it seems impossible for Amtrak to make a profit. Consider, however, that the subsidies that go to rail programs are a pittance to the hidden subsidies propping up road and air use. The airlines do not solely fund the construction and maintenance of airports; States and the federal government care for the roads as the public good that they are. And yet somehow we expect rail to be self-sustaining. It is good to see signs that this country is starting to take rail travel more seriously; it is yet to be seen whether this will turn into a sustained commitment, or merely a brief dalliance with sound transportation policy.
I've landed in San Jose to attend O'Reilly Media's Emerging Technology conference, thanks to the generosity of my family members, as a deferred 30th birthday present. The theme this year is Living, Reinvented. A large part of the premise of the conference is technology in the context of a world moving from abundance to constraints; how emerging technology can help us cope and thrive under the limits imposed on us by our environment, energy demands, and social constraints.
Looming large behind all of this is climate change. Yet the refrain I have heard many times over the last few years is that the technology for solving climate change is not new - not "emerging". I am not talking about adopting the back-to-the-land, "druid" mentality of Paul Saffo's druid - engineer continuum of climate change solutions. Rather by tapping into existing , sensible crop management, urban planning and public transportation we will find ourselves far along the path to sustainability.
I do believe the personalities behind ETech are genuinely concerned about environmental degredation and climate change; so I am not expecting a simple greenwashing attempt on their part. It is with more optimism than skeptecism that I look forward to the events over the next few days. I only hope that as a conference we do not simply slide back into fetishizing shiny techno-fixes.
As a telecommuting programmer and father of a two year old, I am not the most social of creatures. But I do have several family members who would likely describe themselves as social activists of one stripe or another. I recall one particular conversation on a late night a few years ago with a cousin of mine where I asked whether protest had ever achieved any real change. I am very sorry to say that I do not remember her answer, but by that time I had been exposed to ideas that suggested that there were more constructive ways of effecting change.
In that light, a few months ago I finished reading Beyond the Culture of Contest, by Michael Karlberg. I thought I’d write about it, as I feel it should be on the reading list of anyone interested in sociology or social change.
Power
After a lengthy discussion on what he means by the word “culture” in his title, Karlberg starts his thesis on a discussion on the dual nature of the word “power.” In common, everyday language, we use the word power to mean two very different things, depending on whether we are using it in an adversarial or cooperative context. In adversarial contexts, power denotes coercion, or between equals, a stalemate or at best a compromise. In cooperative contexts, power indicates constructive capacity – the power to accomplish a mutual goal.
Karlberg takes these two notions of power (which he shorthands as “power over” and “power to”) and takes them into the rest of his book to show how the currently dominant cultural institutions reinforce the “power over” mindset. He cites three broad areas of society where the culture of contest is assumed the natural state of things: in politics, the economy, and in legal disputes.
The Hegemony of Contest
For most people in the West, the idea that politics, the economy and legal disputes are competitions needs no explanation. From birth we are surrounded, unawares, by the language and practices of adversarialism. Karlberg demonstrates further how this “normalization” of competition is reinforced by commercial mass media (the “spectacle of conflict”), academia (grades as score-keeping, scholarly debate), and social protest (litigation, factionalization).
He points out that even in where we expect argumentation to produce useful results, as in scholarly discourse, that there are perfectly good ideas and suggestions that go unproposed simply because those who might bring them to the table are not comfortable with the character of the discussion. Rigor is still desired of course, but there are certainly ways to think critically about ideas without the adversarialism. And rather than dismiss these people as wimps, it is more useful to focus on the fact that we as a group are not benefiting from their potential contributions.
Karlberg does admit that there are times when the exigencies of a situation merit conflict in order to prevent disasters large or small. Yet he points out that such times are rare, and the need for adversarialism should not be seen as desirable; such actions can’t address much beyond the immediate crisis, and the residues of conflict can be corrosive to achieving longer-term goals.
Mutualism
But the book really starts to get interesting when Karlberg starts introducing us to living, working examples of the principles he is promoting in the book. It’s a glimmer of a way of interacting with each other as we might choose, rather than settle for what we’ve been told is the normal, natural and inescapable culture of self-interest and score-keeping.
The mutualistic practices he introduces us to come from a variety of sources: from cultural movements such as Feminism and Environmentalism, to general techniques such as Alternative Dispute Resolution. And he takes us on a comprehensive tour of the social implications of widespread mutialism as expressed in the Baha’i Faith.
The revelation of these practices as existent and successful was both stunning and inspiring for me. I’m conflict-averse at the best of times, but I had generally taken for granted that we lived in a rough and tumble world, even if I trusted that individuals are intrinsically good. That it is possible to choose another way, and a way that is still potent for solving problems and effecting change, gives me hope that I am not irreparably maladapted for making my way through life.
That’s not to say that mutualistic constructs are easy. Yet often the challenge lies in our development as individuals rather than struggle against external forces. Take, for example, the Baha’i practice of Consultation (collective decision making). It reads like a lifelong task in patience, selflessness, open-mindedness and trust. In brief:
- It seeks to build consensus in a manner that unifies constituencies rather than divides them
- It views diversity as an asset for decision-making; opinion and knowledge are widely solicited
- Upon sharing an idea, an individual has ceded it to the group; neither the flaws nor the merits of the idea reflect on the individual, and the individual must detach themselves from the ideas they offer.
- As an ongoing goal, participants try to moderate the tone and character of the discussion, in order to respectfully seek the best solution, not as a method to superficially paper over conflict.
- If a consensus cannot be found, a majority vote will be accepted; it is then expected that every individual will attempt to enact the decision in a unified manner, regardless of their vote. In this way the implementation of the decision may be evaluated solely on its own merits, without doubt as to whether individuals are passively or actively sabotaging it.
- By extension, ideas can be readily reconsidered if in their implementation they are revealed to be the wrong one.
I find it important that the challenges presented by such a model can develop qualities in each of us that a great many people consider unalloyed virtues. Compare them with a few of the adjectives we often hear associated with being effective in the province of competition: aggressive, cut-throat, ruthless, and dominating; qualities that are more likely to win you sycophants and enemies than friends.

Karlberg is careful to rigorously define the vocabulary with which he describes the subject of cultural interactions, and includes generous endnotes and a lengthy bibliography. In his quest for accuracy, though, Karlberg hews to a style that is dense, precise, and methodical. It is not light reading. I found I absorbed his ideas best piecemeal, leaving myself time to ponder their implications a few pages at a time.
Ultimately his thesis does not discard the notion of competition wholesale. A quick etymology search on the word uncovers the latin origin -– “Strive together.” Competition can be useful when its venue is limited, and done in the proper spirit. What Karlberg proposes is that adversarialism is not our natural social state, but rather only seems so because our current cultural institutions have accreted over time to reinforce conflict rather than mutualism. We have lost much of the togetherness, and are left with only the striving. He asks us for a certain mindfulness, so that we might maintain an awareness of when we find ourselves slipping into the memes of conflict, and what we might do to bring us closer to a world of mutualism.
Personally, I am starting to wonder if our habits of adversarialism developed at a time when the world was far less crowded. It was both possible and easier to separate yourself, spatially or socially, from those you did not agree with rather than work to live with each other in harmony. Now, there is no “going away” – you just wind up in someone else’s back yard. What would the world be like if we all started treating everyone we met as someone we would have to live with for the rest of our life?
I do not think, given the entrenchment of our current cultural institutions, that we can expect a shift to begin with any sort of top-down change. Indeed, such mandates may be fundamentally antithetical to mutualism, which governs by consensus rather than by edict. This is grass-roots stuff. It requires individuals to take it to heart – bring it into their families, their peer groups at work and in their community. Living in this way is a learning process, and you can’t learn by proclamation, only by practice.
At least in the field of computing, this is the engineering holy grail of our time:
...if you were an analog alien floating around in some kind of off-the-grid Galactica you might look down at one of our data centers and see 4MW going in and a mere few hundred watts coming out through an OC-48 fiber trunk and wonder "what the hell?" Watching it spew entropic HVAC waste heat, those bemused aliens could be forgiven for concluding that that these buildings with no obvious use must be massive sacrificial alters where silly humans offer up electricity and make their wishes or say their prayers (well, perhaps we do).
some context:
...given that a data center is really just a vast state machine, it would be really cool if its efficiency was tied to some kind of intrinsic cost of state transition rather than to trillions of leaky circuits. After all, cars burn a lot of gas, but the energy they use is at least in the ball park (an order of magnitude or so) of the intrinsic cost of moving their mass against friction and pushing air out of the way. But for data centers the real intrinsic cost is probably damn near zero, we're ultimately only processing information after all. So, all those megawatts are tied instead to the massive current leakage associated with the fact that we choose to maintain state in silicon instead of something more elegant (but currently impossible). Viewed as a physical system, data centers are about as efficient as a well cooled warehouse full of burning light bulbs
I told myself I wouldn't make blog posts that are just big fat sign-posts, but I felt I had to share
Lately I’ve been thinking about the adverse impact of cars on our
landscape. Most familiar are of course oil use, pollution, noise and
traffic. Less commonly discussed are things like:
- fatalities, injuries and accidents compared to other forms of transportation
- miles of pavement in the form of parking lots and roads which contribute to stormwater issues
- the sprawl of suburbia enabled by widespread car ownership.
But beyond even these things, I’ve started thinking about:
- the
primacy of cars and trucks over pedestrian and bike traffic (is it a
natural condition to fear for your life walking across a road?)
- the
space taken up by the industries supporting or necessitated by a
car-ful society (dealers with oceans of parking lots for their unsold
vehicles, mechanics and gas stations)
- the wasted time of police monitoring vehicle traffic.
- how
people can feel stranded and isolated if they do not have a car to
travel the ever-increasing distances from where they live to where they
need to be to work, socialize and shop.
There are surely more.
This line of thought started early this spring when I found Car Free Cities via a comment on Colin Beavan’s
blog. It described a plan for urban life that eliminated the need for
cars (and trucks and buses). The stated goals of the car-free plan
reclaiming urban space for people rather than vehicles, restoring
social fabric and quality of urban life, with an eye to environmental
benefits and energy efficiency.
I should note right away that
this is only a design for cities. As the author JH Crawford states,
there is no clear, desirable solution for eliminating cars and trucks
in rural areas.
Design Metrics
There
is an extensive list of design metrics that Crawford lists in his book
to inform his design. Some of the broader aspects of the results are:
- A reference design that comfortably supports 2 million people working and living.
- Walkable mixed-use districts connected by mass transit depots at the center of each. A topology of districts that maximizes public transportation efficiency.
- Streets
limited to pedestrians, bikes, with permits for low-speed electric
vehicles, and when necessary emergency and construction vehicles.
- Ample green space within a short walking distance from every front door.
- An average building height of 4 floors, of varying unique architectures.
- Freight and mass transit handled below-grade by separate subway lines
A Car Free Athens
The
idea looks radical, but reasonable. It tries not to make too many
decisions about how we lead our lives aside from three: transportation,
density, and green-space. There are suggestions and implications
within about energy generation, urban social life and more, but these
are ideas rather than prescriptions.
I wondered what it would look like in the city I now live in. A lot of the talk on the car free forum
is about building districts or even whole cities from scratch, but I
was more attracted to the idea of transitioning the existing areas of
the city to the new design.
Athens has no subway (it has a growing bus system), a vibrant downtown and a lot
of suburbs. It’s major roads are actually already laid out radially
which could be well suited to adapting it to the reference topology
Crawford presents. So I started delving into what I could find online
for maps and reference data. My goal was to hew closely to the plan
advocated in the book, and so I wanted to understand what existing
infrastructure and institutions could be accommodated, and which would
have to go.
I mapped out the existing hospitals and schools,
historic districts, bodies of water and took into account where metro
stops could line up with existing roads, where they would be
immediately useful even before the city went fully car free.
I found
that I couldn’t quite get all the schools to fall within the urban
districts using the reference topology, but those which did not make it
in were few. I should also note that my current house would not fall
within the diameter (just barely) of the carfree city design. Likewise
the historic districts didn’t line up well with the plan for the car
free districts, but in truth most if not all of these historic homes
are single-family units of no more than two stories -– it is unlikely
they would provide the necessary density as advocated by the car free
plan. Crawford advocates green space surrounding all the urban
districts, and with good cause, but exceptions could be made for the
sake of historic preservation.
One of the major stumbling blocks
for building a subway system as advocated by Crawford is Athens’
topography. If you’ve been to Athens you’ll know it’s fairly hilly in
places. As one example, from the center of downtown to the river
there’s an elevation change of 53 meters over a 700 meter distance.
That 7.9% grade is far steeper than ideal grades for a railway which do
not exceed 1%.
Grade separation (keeping different modes of
transportation from interfering with each other) is paramount to an
efficient mass transit system. Ideally (for issues of weather cover and
train automation) the whole system would function best underground.
However, given the extreme changes in elevation around downtown there
may need to be some compromises. These would probably be done at
either extreme; burying some of the highest elevation subway-stops
deeper underground than would usually be done, and having the subway
emerge onto an elevated track over some of the deepest valleys.
Stages of Development
Putting
aside for the moment that Athens isn’t even currently considering a
subway, what could the stages of development be to transition the city
to the car free plan?
I think I would start with making downtown
progressively car free. It is already a heavily pedestrian
environment, given that the UGA
campus is just to the south of Broad Street. It would help acclimate
people to car free living. The many parking lots could be turned
instead into more shops with living spaces on the upper floors.
Ultimately
I would look to make the north-south streets into pedestrian
right-of-ways (bikes allowed but with caution), and the east-west
streets as bike-ways (with ample room on the edges for pedestrians, of
course). I’d probably start by turning College Ave into a series of
plazas, intersected by the east-west roads, as this is the heart of
downtown. Next the city could limit downtown delivery vehicles to
blocks of time in the morning and night, similiar to Lisbon’s Bairro
Alto area.
The other item that could be changed early on is to
rezone the areas that would become car free districts to allow for
mixed use and to allow a building height appropriate for the desired
population density.
The biggest undertaking would be to begin
building the subway. Securing the rights of way for the trains (both
passenger and freight) will probably be as big an issue as finding
funding for the system as a whole. That sort of work ought to begin
immediately, as you do not want people investing in and building on
space that will ultimately be reclaimed for the transit system.
The
subway will have to be built in stages, if for no other reason than
that Athens does not have the population to merit as extensive a system
as laid out in the reference topology. The city’s population is just
over 110 thousand, a mere 5 percent of the suggested city in the book.
Whether it makes more sense to develop one of the 3 subway lines at a
time, or start on them all from the middle out and extend them as the
population merits it, I do not know. In either case, while the ends of
the line or lines are under construction, the subway can begin to
operate on the finished sections by shuttling back and forth until a
loop is complete.
The other subway question is when to introduce the “metro freight”
concept, where all goods coming into and leaving the city are
transferred by standardized shipping containers on a below-grade rail
system. Getting people out of their cars and into mass transit is only
half the equation. We will still be saddled with the noise, pollution
and safety risks of surface vehicles if we do not have an efficient and
desirable way to move goods around. I would suggest that this won’t be
viable until at least a few of the "utility districts" proposed in the car free plan are implemented, complete with a well developed intercity rail link for freight.
Intercity
rail for passengers will need to be addressed as well. For the
forseeable future there will still be a large number of commuters into
metro-Atlanta, and it would be a shame if they had to take the subway
out of the edge of the city only to have to get in their car and drive
the rest of the way in. A commuter rail link has been a long time
coming, and it’s unclear when that will finally come to pass.
Other Considerations
While working through the car free idea I’ve gathered a number of ideas and considerations not mentioned in Crawford’s writings:
Passages for wildlife:
each district is connected to its neighboring district by a boulevard
for bike/ pedestrian/ emergency vehicle traffic. Since the rest of the
district borders on green space, it would probably be wise to engineer
wildlife corridors under or over these roads.
Private outdoor space:
something I am used to as a resident of suburbia is private outdoor
space to cultivate as I choose. Is this something that is inherently
impossible in a city? Is my gardening/landscaping hobby not
compatible? Would we need to be able to afford a "country home" to
indulge in these hobbies? Does that leave this activity only available
to the wealthy?
Subway station designs: Having
been an architecture student in a past life, I’d like to think that we
could make subway stops that are bright and full of natural light,
rather than feeling like caves. Crawford’s plans puts the metro stops
under the main boulevard running through each district. This may be an
efficient use of space, but limits the sort of architecture possible to
make them inviting spaces.
Hospitals: Crawford
mentions locating hospitals in the middle of the green space within
each subway loop. I would rather see that remain green space and
instead see clinics built in each district.
Planning:
It might be a useful planning tool to have a heat-map of the age of all
buildings/locations in the existing city. Both for historical
preservation and for individual sentimental value, it may be hard to
persuade citizens to raze older structures as part of the
reorganization of the city. It could bias districts to include these
areas rather than leaving them in the designated green areas for
reclamation.
It seems to me that legal fines, late fees, or other sorts of
punitive charges paid to municipalities, states or the federal
government ought to go into a rainy-day or special projects fund. This
would force government to budget based on taxes and other more regular
and predictable sources of revenue. This would have two obvious
benefits:
- It would help the government to save for either hard times or worthy special projects that would otherwise be too costly.
- It would take away the monetary incentive behind levying fines and focus more on the appropriateness of the punishment.
That second point is the important one. If the motivation for
enforcing rules is to bring in operating revenue for government and law
enforcement (the seizure of drug money to fund the purchase of policing
equipment, for example) rather than simple justice, the metrics for
which issues to focus on become skewed.
Reversing this, without
the monetary incentive the importance of the infraction itself becomes
the metric for enforcement rather than the cash benefit.
That seems a much more just way to apply the law.
Some time ago I encountered the concept of Literate Programming.
I was intrigued by the idea but never really explored taking up the
practice. I don’t really remember why, though it probably had
something to do with a lack of tuits and no obvious support for it in
my main language, Perl. I also was not really at a point in my
programming career where it would have occurred to me to implement
tools for Literate Perl.
I was reacquainted with it more recently when I started to learn Haskell, which has native support
for literate programs. Haskell is a language that has some intrinsic
appeal for me that I can’t quite put a finger on, but again between not
having yet grasped the Haskell mindset and not having time for a new
project I let that slip by too (I suspect the former will not occur
until I have time for the latter).
More recently I’ve been on a
DRY (Don’t Repeat Yourself) kick in my day-to-day programming. Of
course I’d always practiced DRY to some degree, but lately I’ve been
getting more insistent with myself that I really keep on top of
duplicate or near-duplicate code.
This probably came to a head when I read Steve Yegge’s rant about code-base size. The code base for my main project
is large enough that I don’t visit all it’s layers, nooks and crannies
on a regular basis. The main problem of code maintenance as many
programmers will attest is memory loss. Our own,
that is. Remembering why you wrote code they way you did when you
haven’t seen it in a week, much less months, is a major hurdle when
returning to it. The two solutions I see to reduce the effects of
memory loss are solid documentation and reducing the amount of code
that needs remembering in the first place. Naturally, I chose to look
at the latter.
Dispensing with Boilerplate
I
imagine that any programmer who takes DRY seriously will at some point
take a hard look at “boilerplate code”. More incantation than
instruction, boilerplate code tends to have a very low signal to noise
ratio; most of the code is instead there to make the compiler happy.
Being
Perl, most of the boilerplate code was of my own making. So I hacked
and refactored and experimented with shorter ways of expressing the
same intent (another story for another time) and made some good headway
towards weeding out the verbosity of my code, without sacrificing (and
in some cases enhancing) clarity.
As all good things must be
taken to extremes, eventually I started eyeing some of the standard
Perl incantations and wondered about doing away with them.
First,
library files (modules) in perl must have a final statement in them
that evaluate to true in order to compile. I am not clear on where
this legacy comes from, but the convention to make sure all is well
with your module is to append a “1;” at the end of the file to keep the
compiler happy. A whole whopping 2 characters, but it wasn’t adding
any meaning to my code, and I aimed to remove it.
Second, best
practices recommend coding under “strict” mode, and at least during
active development, under “warnings” mode as well. This makes the Perl
interpreter the least tolerant possible of your errant ways, and I take
these best practices to heart. In fact, the forthcoming 6th version of
Perl makes “strict” the default state, so rather than pronouncing
strict mode at the top of every file, you instead only declare when you
intend to be naughty by explicitly shutting off strictures. I (and
many others) are impatient for Perl6’s arrival, and I decided I wanted
this little bit of code reduction here and now.
A Preprocessor
These
got me thinking about writing a preprocessor. I didn’t want to give up
strictures, and I needed the compiler to accept my modules, but I also
did not feel it was doing me any meaningful good adding these
incantations to each of my files. The “1;” for the module was legacy
nonsense and the strict and warnings pragmas were policies I’d rather
set once across my whole project rather than for each file. So I
figured I could add these in programatically.
At about this point
I ran across the literate programming idea again. I figured that as
long as I was already running my code through a preprocessor, I may as
well have it convert my code from a literate style at the same time. I
can’t really recall what I ran across that brought it up, but by some
route I found myself reading an older article by Mark-Jason Dominus, Pod is not Literate Programming about how POD lacks certain key features of a literate programming system. He pointed to noweb
as a language agnostic tool for Literate Programming, but for some
reason that did not appeal to me. I thought, well, this is Perl!
There must be something on CPAN.
And
indeed there were several attempts on CPAN at implementing Literate
Perl, but none addressed one of MJD’s core issues with Pod, which was
that it doesn’t let you rearrange your code from human-reading order to
compiler-reading order.
The closest I found to what I wanted was Audrey Tang’s Filter::LiterateComments. She chose a style very much in keeping with Haskell’s notation, which is unsurprising given her background with the language. But being a source code filter it never had a chance to do code reordering, and on its own it would not be able to create typeset documentation.
Pretty Documentation
Now
that I was committed (in both senses of the word) to writing a
preprocessor, I wanted to one-up the typesetting question by
prettifying the code as well as the explanation in the documentation.
I knew there had been some work done with PPI to do syntax highlighting, and I had already decided to rely on Perltidy
to enforce code formatting conventions. Further, I recognized that
there were several perl operators written in ascii (such as -> and
=>) that were really just stand-ins for untypeable symbols. I
figured in the interest of legibility I ought to replace them with
their intended entities in the documentation.
So the plan
involved extracting each code block in the source code, running it
through perltidy, then PPI::HTML, and then doing a search-and-replace
on operators that were stand-ins for more legible symbols. That way
something like this:
sub dump_code {
my ( $parser, $extension ) = @_;
my $source;
<<replace anchors with code snippets >>
$source .= "use strict;\n" if $parser->{_use_strict};
$source .= "use warnings;\n" if $parser->{_use_warnings};
$source .= join(
'',
map( { $parser->{_code}{$_} }
grep { defined $parser->{_code}{$_} }
@{ $parser->{_code_sections} } )
);
<<source code amendments based on file type>>
return tidy( $source );
}
into this:
sub dump_code {
my ( $parser, $extension ) = @_;
my $source;
$source ⋅= "use strict;\n" if $parser→{_use_strict};
$source ⋅= "use warnings;\n" if $parser→{_use_warnings};
$source ⋅= join(
'',
map( { $parser→{_code}{$_} }
grep { defined $parser→{_code}{$_} }
@{ $parser→{_code_sections} } )
);
return tidy($source);
}
Bootstrapping
As a tool
for literate programming, naturally I wanted to be able to write the
library itself as literate perl. The dilemma of course, is that the
literate format can’t be executed until it’s translated into regular
Perl. What I found was that I had to first develop the code in a
non-literate style, and get to a point where I could process literate
perl. At that point I could then run the "compiled" non-literate
version on the new literate copy of the module in order to get a
runnable version of the newest code.
Where To Go From Here
The system I have written works well, but there are still a few things I need to do before I can release it to CPAN
- It cannot at the moment create a linked TOC for the headings in the documentation
- The
preprocessor does not spit out a pure POD version of the docs, which is
what CPAN wants for module documentation. Indeed, the literate
documentation isn't really even the sort of documentation CPAN users
are looking for. It may mean putting the overview documentation in a
separate pod file, or marking a certain portion of the literate
document as appropriate for extraction for use on CPAN.
- I actually need to write a bit more of the documentation. While the Pod::Literate module and the literate preprocessing script
are written in the literate style, there are still some longer code
sections that I have not augmented with appropriate documentation.
- Similarly
I have not written any tests. Running it on it's own source code has
been a pretty good test in itself, but I know I will get frowns from
the community if I ship without a good test suite. For the tests-first
segment, I'm sure I'm already getting those frowns.
Then there
are a few things I'd like to do (or have done) but aren't critical.
I'd really like a literate-aware version of perltidy that I could use
to clean up the literate source. Right now it wouldn't know what to do
with it. Similarly I'd like to investigate what it would take to make Perl::Critic compatible with the literate style files.
As part of my efforts to learn more about functional programming in
general and Haskell in specific, I chose a small project that was
tangentially related to the work I do in my web programming work at
Enterity. If anyone out there knows of a built-in for converting from
Int to Hex and back again, I'd be much obliged. I didn't see anything
skimming the standard libraries via Zvon.org
module Main where
import System.Environment
import Char
import List
main :: IO ()
main = do args <- getArgs
case ( args !! 0 ) of
"encode" -> putStrLn ( encode $ concat $ tail args )
"decode" -> putStrLn ( decode $ head $ tail args )
-- --------------------------------------
encode :: String -> String
encode str = concat $ map encodeChar str
decode :: String -> String
decode "" = ""
decode (c:cs) = case c of
'%' -> fromHex( take 2 cs ) : decode( drop 2 cs )
otherwise -> c : decode cs
-- --------------------------------------
encodeChar :: Char -> String
encodeChar c =
case isLegalChar c of
True -> c : ""
otherwise -> '%' : ( toHex . ord ) c
isLegalChar :: Char -> Bool
isLegalChar c = any (c==) ( [ 'A' .. 'Z' ] ++ ['a' .. 'z'] ++ [ '0'..'9' ] ++ "-_.!~*'()" )
-- --------------------------------------
toHex :: Int -> String
toHex 0 = ""
toHex x =
let rem = x `mod` 16
in toHex( ( x-rem ) `div` 16 ) ++ [ toChar rem ]
fromHex :: String -> Char
fromHex hx =
let a = fromChar $ head hx
z = fromChar $ head $ tail hx
in chr( a * 16 + z )
-- --------------------------------------
toChar :: Int -> Char
toChar x = ( [ '0' .. '9' ] ++ [ 'a' .. 'f' ] ) !! x
fromChar :: Char -> Int
fromChar x = case findIndex (x==) ( [ '0' .. '9' ] ++ [ 'a' .. 'f' ] ) of
Nothing -> 0
Just y -> y