Monthly Archives: January 2006

Principles of Law (Part II) #

Last week I mentioned some of the ways I approach proposed rules/legislation when evaluating my position. Again, these indicators are 1) being overly specific, 2) being individualized, 3) the absence of consequences and 3) the violation of locality. (Again, IANAL)

Embracing generality

I argued against laws attempting to cover every eventuality through specific language. The alternative is a system of law based on principles, rather than specific situations. In my mind, the best example of a set of principles in U.S. law is the Bill of Rights. Had the founders chosen to define “speech” in a more specific manner, it might not now include radio, television, or the internet.

Solving an individual’s problems

An example might prove better than an explanation: In 2004, one of our state legislators pushed a movement to split one of the state’s larger school districts. Existing law requires a petition, a public study, and eventually, a majority vote from each of the affected areas. After the study was released, many citizens realized the disparity in property taxes in the two area was too significant to justify the new district, and most lost interest in the idea. (Taxes in the established area would fall slightly, but taxes in the proposed “new” district—a fast growing area—would likely double.) Despite a very clear public opinion in opposition to the new school district, the same representative has since sponsored legislation to alter regulations regarding the creation of new school districts. The bill was defeated in 2005; the same legislator is running a similar bill again this year.

I’m concerned when legislators consider bills criminalizing legal behavior they (or lobbyists) don’t like. A 2004 bill crafted by telecoms and written for the primary purpose of defeating UTOPIA, a municipal broadband project, is a recent example. This year, our legislature is considering a senator’s quest to minimize the teaching of evolution in public schools, against the recommendation of scientists from every major university in the state. (I have yet to hear a single high school science teacher or college professor, including those from private religious universities, speak in favor of the bill, although I’ve heard many speak against it.) The senator has created a problem where none existed, and is diverting public discussion from more important topics.

Locality

Laws should be implemented at the lowest reasonable level. Federal laws against counterfeiting U.S. currency are reasonable. A federal law mandating all public school students achieve a 100% pass rate on standardized tests is not. A minimum state curriculum, which can be expanded and customized by local districts is a common, reasonable approach. A proposed state law requiring elementary school principles to hold back third-graders unable to meet reading requirements oversteps the concept of locality, although successful programs similar to the one proposed exist at the district and even school level.

Last year in an informal meeting with the state legislature Republican leadership, one of the members present recognized that many legislators were criticizing the federal government for infringing on state issues (especially regarding NCLB), while acting in a similar manner by imposing requirements on local school districts. He suggested in a general manner that some legislative restraint might be in order. I appreciated the observation.

Trust

Overcoming the pressure to legislate from too high of a level comes down to trust. If the State Board of Education is asked to take action better left to local districts, it is appropriate to exercise trust in those at the local level. They too are elected, and can often be more responsive to their communities. (Trust in local decision makers was a significant factor in the State Board of Education’s decision to allow Rich School District to pursue the option of a four-day school week.)

The U.S. Department of Education rigidly applied the mandates of NCLB due to an institutional lack of trust in states. This has changed somewhat in recent months as the new U.S. Secretary of Education, Margaret Spellings, has been granting states more flexibility in choosing their approach to NCLB. In the same way, I hope our legislature will have faith that elected officials, more local to the problem than they, are working toward common goals, and that however well-intentioned some legislation may be, situations can and should be addressed at a more local level.

Final thoughts

These observations apply to any type of organization, not just our government. Implementing successful laws can be a difficult task, but I find that whenever I have a concern about about a rule I’m considering, or legislation I’m asked to take a position on, that concern can often be reduced to specificity or locality.

Related links:

Principles of Law (Part I) #

My comments on this topic are too long for a single post. This is part one of a multi-part discussion, which will eventually be compiled into a single essay. (IANAL)

As the legislative session opens, I wanted share some observations on law, discuss what makes good law, and explore ways to identify poor laws. In many cases, I believe “poor law” is often based on commonly held principles, but however well-intentioned is held back in its success by poor scripting, poor planning, or poor implementation. In this article I list items I consider to be some indicators of poor law; no single item purports to be a definitive identification, these are merely lenses I use in evaluating legislation. (I believe these same principles hold true for evaluating the rules of any organization or business, not just our laws.

In summary these indicators are 1) being overly specific, 2) being individualized, 3) the absence of consequences and 3) the violation of locality.

Specificity begets specificity

The more specific a law is, the more specific it needs to be. Once a lawmaker attempts to predict alternatives and possibilities, the need to expand the law to include all eventualities is inevitable. As more specifics are generated, the possibility of loopholes increases, resulting in further legislation. Additionally, an over-specific law replaces reasonable judgment at the “front lines,” or most local level, robbing affected parties of flexibility.

A hypothetical situation

Let us assume a state wishes to define a process for soliciting contractors for public works projects. All involved agree the process should be fair and equitable. The law is written to require a committee to review bids. In order to be impartial and avoid the appearance of political rewards or cronyism, the committee must be removed from the department actually requiring the service. Proposals must be made public for some period before being considered. Such a system would seem to be fair.

Well intentioned lawmakers may then further “refine” the process by appending provisions giving preference to local businesses or companies owned by minorities. An appeals process might be instituted to ensure any party can challenge the fairness of a decision–in order to by worthwhile, such a provision would require the bid process be halted, or reversed and reconsidered. At risk of offending some party, a process to challenge the project’s necessity (by reason of the environment, racial equity, cost concerns, etc.) might also be instituted. As the department requesting service and the fulfillment contractor are separated, a series of regular status reports might be required to ensure the contract is being filled appropriately. The list of possible refinements in the interest of fairness is extensive.

This “hypothetical” is a too common practice around the country. Examined in part, each additional requirement seems reasonable; as a whole, it is a cumbersome processes costing additional resources at every step. Process similar to this “hypothetical” are the reason many contractors bid for government projects at a significantly higher rate than they would for non-government customers.

Micromanagement In Action

A relatively new California law (Government Code 12950.1, which has spawned a host of training and consulting companies) requires companies of more than 50 employees to have sexual harassment training programs in place for all supervisors. The law replaced a much simpler one which simply stipulated employers were expected to take “reasonable steps.” The new version imposes requirements regarding the type and frequency of training, questions the experience of instructors, defines course content, and prescribes the method of instruction to a level that would embarrass even the most devoted micro-managers. Yet, the law provides no insulation from liability if complied with. It’s specificity is a burden to businesses, and provides no additional benefit (to citizens or business) over the law it replaced.

Hate crimes

The listing of specific protected classes causes me to question many so-called hate crimes legislation—or any other anti-discrimination law. (Some may argue that Utah does not have hate crimes laws; this is half-truth. See Utah Code 76-3-203.3.) The trap of specifying groups introduces the possibility of excluding some group. Such a list might include ethnicity, culture (not the same thing!), religion (does this include atheists?), sexual preference, income level, family or marital status, employment (or lack thereof), disability or handicap, education level … the list goes on. Our current law, which has been on the books in some form for more than a decade, upgrades misdemeanors intended to “intimidate or terrorize” to felonies. It’s simple and adequate, focusing on principles rather than contingencies.

Will be continued…

Related links:

PHP Bugs, Headers, and Such #

We just resolved a series of related bugs in the web product we’re developing. I’m hoping by documenting the symptoms and solutions it may ease someone else’s fruitless search.

The application has a “skin” feature allowing non-technical users to customize colors, font, and a handful of other things easily accomplished with CSS. Rather than edit more than twenty other pages to add an extra <link /> tag, we chose to add the following line to the top of our primary CSS file:

@import("custom.css") screen;

Notice how we defined the media type for the imported CSS file as part of the import rule, as suggested by the CSS2 specification.

A little more background: using a little bit of Apache magic courtesy of mod_rewrite in the httpd.conf, requests for the file custom.css are redirected to custom.php, in the same folder.

<Directory "/www/css">
   RewriteEngine on
   RewriteRule ^custom\.css$ custom.php [nc]
</Directory>

It didn’t work. Firefox’s Javascript Console was pointed directly to the problem: “The stylesheet http://localhost/css/custom.css was not loaded because its MIME type, ‘text/html’, is not ‘text/css’.” (Also, custom.css did not show up in Firefox’s built-in DOM Inspector.) The error was easily fixed, by adding the following line to custom.php:

header("Content-type: text/css");

The styles then loaded properly in Firefox (and Safari), but not in Internet Explorer. Browsing directly to custom.css worked fine in Firefox, but IE behaved oddly. It first acted as if it was about to download the file (oddly, the default action for the working CSS file), but then popped up a dialog saying the URL could not be found.

I then examined the HTTP headers, and compared them with a working file. (It’s off-topic for this post, but I stumbled across this while Googling for solutions. If you’re a geek and want to see some fun headers in the wild, visit Fun With HTTP Headers.)

Headers unique to main.css (working):

Last-Modified: Mon, 09 Jan 2006 22:28:54 GMT
ETag: "ce134-ed8-43c2e3a6"
Accept-Ranges: bytes
Content-Length: 3800
X-Pad: avoid browser bug

Headers unique to custom.css (not working):

X-Powered-By: PHP/5.0.4
Set-Cookie: PHPSESSID=uah38ktr3mgq3td5j6qmcdgjf3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

The cookie is generated automatically by PHP because of the need to use session information as part of the customization process. But, this is a CSS file, so I want it to be cached by default. Adding the following line before session_start() is called hid the no-cache headers, and things began to work in IE almost as they should.

session_cache_limiter("none");

I said, “Almost.” After tweaking the headers, I could now visit the file directly in IE without the “URL not found” error. (Meaning, it attempted to download it, rather than display it, but it was a step in the right direction.) However, it would still not apply the styles from the imported CSS file. It was difficult to debug as there were no error messages, and IE’s DOM tree is not consistent with W3C standards. The final piece—and I could find no documentation anywhere for this—was to strip the media type from the import statement (at the top of this post), making it:

@import("custom.css");

It sounds easy now that I write it, but this series of bugs cost several hours of work. I hope this post will save someone else similar trouble. (If you see something I missed, or know of a faster course we could have taken to solve this problem, feel free to add your comments!)

Goals for 2006 #

‘Tis the season for New Year’s resolutions. I’ve put off the introspective musings which are all too common with bloggers; I want my blog to be about more than just me. However, with the hope that public goals are more likely to be accomplished than private ones, I’ve listed some of my goals, in no particular order.

Better Blogging

It hasn’t been a priority, but I’m guilty of violating several of Jakob Nielsen’s Top Ten Design Mistakes of Web Logs. Not a good state for a web developer who professes to know a thing or two about Internet usability. I rationalize that since I’m aware of the mistakes, it somehow makes it less egregious.

  • Expect to see better author profile, complete with a picture.
  • I will post weekly. I was doing well enough until the holiday season started, and I have several excuses as to why this is so. I will do better.
  • I will use more pictures in posts. This will be difficult, as I don’t have a good graphics package on my primary computer (a 12″ PowerBook), but it’s something to work toward.
  • This site will include a reading list. This is partly to play with Amazon’s web services, partly to add a little more personality to what I feel is an otherwise plain page from a visual design perspective.

Better Writing

My wife keeps asking why I blog. One of several reasons is to become a better writer. Since I’ve started taking the time each week (okay, some weeks) to write something I hope is useful, I’ve seen improvement in my writing. I will continue writing, and I will read books and blogs with the intent of improving my writing.

As I was searching for full-time employment last fall, another long-term writing goal clarified itself: I intend to write at least two books in my lifetime, one fiction, one non-fiction. (Having them published would be a nice plus.) A more short-term step is to be published in a magazine (and be paid for it). I’m not expecting to be published this year; I have no set goal when I want it to happen, but I hope to be a couple of baby-steps closer by this time next year.

Better Programming

I agree with other who suggest many computer science graduates are ill-prepared to design software. As I’ve mentioned before, I enjoyed reading Head First Design Patterns, and am looking forward to The Best Software Writing I, collected by Joel Spolsky from joelonsoftware.com, and a handful of other books on the subject.

I keep toying with the idea of contributing to an open source project. A grandiose vision would be to participate in a large application, like Firefox, but the learning curve to entry is intimidating, and honestly, I’m not sure I can spare the time I would want to devote to a project of that magnitude.

Resolution

Pardon the pun, but I had to give my closing section some sort of title. I’m not really a fan of New Year’s resolutions. When resolutions are made because everyone is doing it, there is little hope for success. The goals listed here are ones I’ve been working toward for a few months now. (As I said, I’m simply hoping to give them additional impetus by posting them publicly.) If I’m not living up to these goals, call me on it.

One Response
Hire Tom! Hire Tom!