All opinions expressed are those of the authors and not necessarily those of, our sponsors, or our affiliates.
  Add to My Yahoo!  Subscribe with Bloglines  Subscribe in NewsGator Online

published on 2018-03-13 00:57:00
Kroc Camen

Unshaven Yaks

It?s unshaven yaks all the way down


Nothing else I've come across has quite been able to explain the last 5 years of my programming and development work than this quote ? what I've been doing personally for the last 5 years I will cover in another blog post soon, if you?ve just had the shock of your life seeing something new from me in your RSS reader. It?s that Kroc guy.

A little explanation will be needed. Firstly, ?yak shaving? is when, in order to complete one task you have to do some other minor task first, which in turn relies on another task? and before you know it, you?re standing in a field shaving yaks. It?s the process of being so far removed from your original goal that you are busy doing something seemingly unrelated and have lost all sight of progress.

Combine this with ?It?s turtles all the way down? and you have one of the most succinct ways in English to explain the phenomenon of attempting to develop a product, only to find that some dependency you rely on is not good enough and you have to replace it yourself, which then leads on to yet another dependency, and so on until you begin to consider ?how difficult would it be to develop my own CPU??. Every time you peek under the current abstraction layer, you find that ?computers are fractally awful?.

Things Have to Get Worse Before They Can Get Better

I've been away from web-development since 2013 and my, oh my, how things have gotten worse, haven?t they?

Actually, this is kind of to be expected, it happens in every industry. What we are seeing is the younger generation taking over from the old guard. Those who were doing web-development in the ?90s are retiring or moving on and we?re seeing the result of a lot of fresh blood coming in and repeating all the mistakes of the past.

What has changed ? is different than the past ? is that basic access to so much of the web is dependent on so many first-time programmers who literally don?t know the word ?security?.

Although jQuery is an immensely popular library, the fact that searching for ?security? or ?vulnerability? in the official learning centre returns ?Apologies, but nothing matched your search criteria? is an excellent summary of the state of JavaScript library security on the Internet, circa August 2016.

Thou Shalt Not Depend on Me: Analysing the Use of Outdated JavaScript Libraries on the Web

That is not to say that I could do a better job ? I expect many of the people behind the major JavaScript systems have CS degrees; I do not; I'm self taught and lack a mathematical background, but as someone who has striven for clean separation of presentation and logic, it?s the proliferation of a ?JavaScript first? mentality that saddens me the most.

HTML does not need maintenance. It will still be readable, you will still be able to ?get at it? in a hundred years time, even if you have to write a parser to do so; but JavaScript? How will you know what any of it does in a hundred years time? What content will be lost, buried in all this nonsense?

What Do We Have Now?

Putting JavaScript aside entirely, things are actually really great. Web browsers have gotten infinitely better in the last five years and the entire process of HTML / CSS specification and rollout to browsers is like a slow-moving but essentially unstoppable steam-roller.

When I last updated this site, HTML5 was still a big ?maybe?, hanging upon Microsoft dragging their feet. I could not have predicted the Microsoft we have now, back then.

Web-development news these days generally consists of: ?Here?s a chart of compatibility, Microsoft isn?t on it.?

Kroc Camen, 29th October 2009

Heck, the site as it stands at the time of publishing still works in Firefox 3.0 (we?re on version 59 right now) or Camino 2.0 (do you remember that??) via specialised fall-back CSS!

Screenshot of this website running on the Camino 2.0 / Mac web-browser
Camen Design on Camino 2.0 / Mac, circa 2009

What Do I Have to Prove Now?

Nothing ? you have to remember that when I first made this website, it was the most provocatively unflinching commentary on web-design at that time:

Dizzy. I?ve just read a whole damn website from A to Z, including the source code. One night and my cognition changed.

@riddle 6th June 2009

When everybody was poo-pooing HTML5 because ?what about Internet Explorer??, here I was publishing the first unashamedly HTML5 blog produced with no <div>s, no <span>s1, no JavaScript and no CSS IDs2. I can safely say I had a website whose source code was prettier and nicer to read than many regular websites.

view source = wow. code really can be art.

@alex_gibson 19th June 2009

That was what mattered then, but doesn?t matter now. The proliferation of JavaScript-first mentality and mobile devices / browsers has removed the accessibility and desire to view the original source code of web sites. You practically have to be a ?developer? with specialist ?developer tools? to view a website?s source code now; hardly inviting for the uninitiated.

I was a lot more angry, inexperienced and defiant in those times. For the here and now I know that making something utterly bleeding edge that would only work correctly on 25% of devices would not prove anything these days ? It?s not bleeding edge that the world needs now, it?s better quality engineering.

The Fear That Finds Us; the Fear That Binds Us

The point is that, with the mental and physical strain I've been under for the past five years, I've been paralysed with uncertainty and ?hauptversionsnummernerhöhungsangst?: German for ?the fear of increasing the major version number?.

I got myself into a vicious-circle of being too afraid to put anything out that couldn?t be verifiably safe? and thus began the rabbit-hole that I would be falling down for the last five years.

First, my templating methodology works with XML node trees, but because XPath doesn?t just ?roll off the tongue?, we do some basic conversion of CSS to XPath. This was handled by a simple, ?dumb? search & replace function. In order to test the templating, I'm going to be relying on CSS to XPath translation, so I decide to migrate that to its own project / package and develop a fully CSS3-compliant, fail-proof CSS to XPath translator ? full test-suite and all.

But to test the CSS to XPath translator, I need to be able to both declare (in a compact, concise manner) and compare XML node trees to test the result of an XPath query against a ?correct? XML tree.

Since building, comparing, and tearing-down hundreds of miniature XML trees is anything but pleasant, I developed a very compact, highly regular (normalised) XML serialisation format (I'm actually quite proud of it, if I could finish it):

<ul <li <a @href some.url | Compact, serialized XML! >>>

It ensures that, regardless of white-space differences, an XML node tree can be serialised into a string (easy to compare) or a string example (e.g. an expected test result) can be de-serialised into an XML node tree. With this, it is very easy to compare an XML node tree in memory (perhaps the result of a search / filter query) with a short and simple string describing an XML node tree.

OK, but now we need to write a formal spec and test-suite for the XML serialisation format?

Look, I get the motivation behind Test Driven Development, but it doesn?t work for a lone hobbyist programmer who ?ain?t getting paid for this?.

Version Numbers Must Be Automated Away

Humans cannot be trusted with version numbers. Version numbers combine into one thing, two different concerns: human concerns, and machine concerns. To a machine, every API change is a major change; it?s an entirely different product as far as the machine is concerned, but you redesign the UI (without affecting any public APIs) and the machine doesn?t care.

Humans are prone to changing APIs, but not increment the version number correctly, because daft human concerns like ?marketing? and ?upgrade pricing? interferes with the predictability and reliability of software.

There are two things to take away from this:

  1. Every time a public API is changed, compilers should automatically increment a counter and that number is what should be used for dependency / compatibility resolution, not an arbitrary human-governed number

  2. Every time you make a commit, your software has changed.
    There are no version numbers, there are only commit logs

In Which We Return, Bleary-Eyed, From the Rabbit Hole

That brings me, finally, to how I am going to get Camen Design back on its knees again. I do not need complete re-writes, paradigm-shifting breakthroughs, and holding releases back until ?ready? (whatever that means) or when the ?version number demands it?.

The only future for software is version-less, incremental improvement. I need to move away from the fear of ?incomplete? and see my code more as ?being brought to life?, in the public view.

There isn?t going to be another major, earth-shattering release of Camen Design, instead I am going to slowly polish it up. I'm going to migrate systems from one thing to another, piece by piece, rather than throwing it all out and starting again.

There is a lot to do, but it no longer has to hinge upon ?the next release?.

If you want to watch this all happening, you may want to follow me on GitHub.

Discuss this in the forum


published on 2013-07-14 11:17:00
Kroc Camen


Through the life-changing experience of an intense 16-hour labour we are able to announce to you the birth of our son Etho Samuel on the 2nd of July 2013. We are all doing well and just beginning to get a grasp on the change of routine this brings upon us.

Discuss this in the forum


published on 2013-05-12 17:40:00
Kroc Camen

Howdy, folks! Kroc has decided to let me take over Camen Design for today ? not literally, mind you ? and has given me the opportunity to borrow his podium for this blog entry.

My name is Clint Franklin. I am known on the forums here as ?theraje? (no caps, please). Way, way, WAY back in mid-2011, ol' Kroc chirps at me on IM, saying he had a surprise for me. Not being one who is particularly fond of surprises, I inquired about the nature of this surprise. If I recall correctly, he told me to wait a week while he put on some finishing touches. I think it all boils down to him teasing me.

Well, after a week had passed, he said he was finished, and wanted to send me a video. Now, I know what you?re thinking ? ?Big deal. I just go to YouTube and watch videos all day long.?

But, as I'm sure a few of you will recall, at that time, I was using the very best Internet connection I could afford in my area. 56k dial-up. Not only that, but 56K dial-up that would, on its best days, max out at 28.8K. Even a ?standard? video would be impossible to view via YouTube. In fact, poor Kroc had to virtually obliterate the video quality, to the point where things could be vaguely recognizable. He then had to reduce the picture size down to some ridiculous dimension. Think along the lines of: Barely takes up all the screen space on an average cell phone manufactured in 2003.

I think the final ?preview? video was around 2 megabytes. Of course, it took about 15 minutes to download this 2-meg file. Yes ? 15 minutes to download 2 measly megabytes. And that was pretty decent, for me. And this was less than two years ago.

When I saw the video, I just watched, slack-jawed, as I saw Kroc?s work. Long story short, it described my situation (and included plenty of amusing, yet home-hitting, visuals) in a way people could understand. Because, folks, I tell you what ? you just have no clue how precious data is until you have to wait 20+ minutes for a 3-minute MP3 song to download onto your computer! Or when you can?t browse 90% of the Web because of server timeouts and JavaScript-heavy site architectures.

The real shocker was that this video (in higher quality, of course ? if Kroc had released the ?preview? version publicly, the world would have gouged its eyes out) was part of a campaign to encourage people to donate money so that I could afford the only means of acquiring anything remotely similar to broadband (which would have been satellite Internet ? 3G was completely unavailable in my house).

The reason Kroc wanted to gather up the money was because I had no access to anything faster than 28.8k dial-up, except for satellite ? and not only does it START at $60 a month? you are forced to sign a two-year contract. If you wish to cancel before the two years expires, you are required to pay an early termination fee (several hundred dollars!).

I, being legally disabled and unable to work (and even if I COULD work, I lived out in the boonies, and the nearest grocery store took half an hour to drive to), was certainly unable to afford such. That said, I never was one who liked to ask people for things (I hated the idea of having to apply for disability in the first place, but that changed when it became obvious that I had no other choice). I value self-sufficiency. So, initially, I was a bit perturbed. No? I was sick to my stomach. I didn?t have the heart, at the time, to say ?no? to Kroc on this. He put WAY too much work into it. He was WAY too excited about it.

So, even with the knowledge that not only did I dislike the idea, but also that people would get the urge to assume things (which they did ? calling me a bum, telling me to get a job, and so on, not knowing my situation), and that even if people did find it in their heart to help, that it would not necessarily work out (satellite Internet performance and reliability is very, very dubious). And if that were to happen, I would have wasted those people?s charity. I don?t know if I could have dealt with that.

But, I caved. Kroc wanted so badly for me to have the chance to do the things I love ? working on programming projects, artwork, and so on ? that I couldn?t say no. Plus, the idea of me having the opportunity to work again, doing contract work online, made me feel as though I could at some point become productive and not be at the mercy of a government check.

In the end, we collected over 50% of our goal of $2000 (the total cost of covering the contract period). We stopped short because after catching a lot of flak from those people I mentioned early (the ones who like to ASS-ume things about which they have no understanding), I had basically decided to commit suicide. The world and everyone in it wanted me to suffer, but I'd rather just kill myself and get it over with, I thought.

I regained my composure a few months later, but still went to bed, every night, saying the same prayer to a god I didn?t even believe existed: ?God, please let me go to sleep now, and just never let me wake up again.?

To wrap things up, I spent the following few months in and out of hospitals (both medical and mental), hoping that my life would just end. Then, out of nowhere, something very strange happened. I won?t go into details ? some call it a ?revelation? from God himself? others call it a severe psychotic breakdown? all I can tell you, definitively, is that something changed in me. I regained the will to live.

After my ?psychotic breakdown,? I was put into group therapy. While there, one of the other patients told me about an apartment complex that is set up for people like me who are disabled ? think of it as a retirement community, not for retirees, but for the disabled.

Long story short, a former tenant caused problems at that complex, and the building manager (who had met with me previously) told me she had an opening, and wanted me to move in. That was in October of 2012.

The money donated to me for the campaign Kroc started allowed me to not only pay the deposits for the rent and electricity (which added up to several hundred dollars, and would have kept me out if I were unable to pay them), but to accomplish the original goal ? I now live in an area that has access to DSL Internet service! So long, 28.8 Kbps? hello 12.0 Mbps!!! Goodbye, 6 minutes to download 1 megabyte? Good to see ya, 1 megabyte per second!!!!!!

And now, of course, my life has improved by an order of magnitude from before. The people who donated did not merely help me get on broadband. They gave me a place to stay, an opportunity to get the help I need (medically, psychologically, etc.), to find work (it no longer costs $30 in gas to take a trip to the nearest business!!!), to attend church (I was an atheist for roughly 8 years, until my ?revelation? from God gave me the strength to get out of bed again), to form my first real romantic relationship (wedding bells may not be far off), and to help others and be blessed by the people who are now a part of my life, and would not have been otherwise. Those of you who donated have helped far, far more people than just little old me.

I may have been upset with Kroc starting all of this fundraising jazz in the first place, but now, all I can feel is immense gratitude to him and all of the people who helped ? whether it was by donating money, moral support, a shoulder upon which to cry?

Now that I'm getting all sentimental, I'm just going to say that I'm incredibly blessed to have a God that heard my cries, and had all the right people in place who gave me the strength to push myself forward, to the point where I could waste three dozen paragraphs explaining what could have been said in two simple words:

Thank you.

Yours Truly,

Clint Franklin, aka. ?theraje?

Discuss this in the forum


published on 2013-03-20 08:54:00
Kroc Camen

Browser Vendors, You Have Failed Us

Browser vendors have unilaterally lost sight of real problems that plague real users.
I am so angry right now. The thing that causes me so much anger is not that Google are shutting down their RSS reader product, it?s that the browser vendors sat back and allowed all the power over content to go into the hands of Facebook and now Google.

I wrote two years ago that browser vendors were failing to focus on the real problem that: users don?t want, and find it slow and painful, to trudge around their daily round of websites and that the web browser should be exposing an automatic, intelligent and ultimately useful interface to RSS.

Why can I not do something about this? Becuase creating another RSS web service to ?replace? Google Reader does not solve the underlying problem, that is:?personal aggregation of content should not be dependnt on a business model.

Google never offered a pay option. Reader had to supliment other strategies. RSS does not benefit Google+, whose aim is to centralise all the content including the ability to process and access it.

RSS is a browser feature, a browser?s responsibility. It is a personalised view upon the web, just as bookmarks and add-ons are. It makes managing daily content much easier, just as bookmarks and add-ons do. The browser?as the personal portal on to the web?is best positioned to aggregate the web for the user. It knows the user?s browsing habits better than even the most evil of evil advertisers. The browser vendors could make the web faster, easier, less cluttered and junky than any web sevice ever could. And it could do all of that with the barest minimum of privacy-intrusion, without a single ad and without a conflicting business model.

Because browser vendors failed to see personalised aggregation as a benefit to regular users, these regular users have taken to Facebook as their personalised aggregation service, taking the power over content away from the browser vendors.

Facebook will one day soon be a major technology player rivalling Google, Amazon and even Apple. Facebook are already big, yes, but for now they?re ?just a website?. When they control the technology landscape because they control access to the content then things turn very bad for users. Mozilla, prepare to be side-lined by a ?website?.

That brings me to the second big thing browser vendors have failed users with: e-mail.

It is 2013 and there is still no way to set Firefox as the default e-mail client in Windows. There is no way to make it so that when a user right-clicks a file and goes Send To > Mail Recipient that Firefox will launch with the user?s preferred web-mail.

This is no end of headaches for my customers. They are constantly slipping up because they do not discern the difference between actions that invoke the native mail client and the fact they are using web-mail. Functions they expect to work simply don?t, such as using the e-mail toolbar button in Windows Explorer. Most of my customers have unsent e-mails in the outbox of Outlook Express or Windows Mail because the native client was launched instead of their web-mail. Attaching files is an unbelievable pain because of this. Customers have to be carefully taught that no, you don?t go to the picture first, you write the e-mail first, then click attach and then have to understand the concept of a different view upon the file-system and that the Pictures folder in there, is actually the same as the Pictures folder their muscle-memory is programmed to use from the Start Menu.

E-mail sucks because browser vendors don?t care about real problems that plague real users every day.

If I were Mozilla I would integrate e-mail back into Firefox. The browser already knows the user?s web-mail user names and passwords. It could automatically configure everything. The user could have a clean interface to their e-mail without having to go through painful web-mail clients. Attachments would be easier. E-mail links in web pages would actually work. Native OS e-mail actions would actually do the right thing for once. Users would actually benefit more from this than redesigning the f*cking shape of the tabs or removing the RSS button from the toolbar.

Two years have passed. The boat has been missed. Facebook and Google control the content, how it is accessed, how it is processed. There is no way back. You have failed us, browser vendors.

Discuss this in the forum


published on 2013-02-22 10:42:00
Kroc Camen

A Summary

It is with much intrepidation (for life has become very uncertain) and joy (for life is no longer dull) that I can announce the news of our child, a son, due to us in early July.

Life, ever since meeting the love of it, has been upside down and changing at a relentless pace. First we met, and that was a big, unexpected change. Then I asked her to marry me. In three months we were married, and lived together?no small change for myself, which I found to be effortlessly natural (though obviously challanging). It?s only because of the news of our child that we have had to directly tackle the physical piles of stuff still not yet disseminated into everyday life. We find that having not even gotten settled in our first home we have to up-sticks and down-size (where there is no spare room to pile things) to be able to better focus ourselves on our child.

For this though I am very grateful as a blessing from God; meeting my wife has made me address many, many personal, internal burdens which have reflected?on this blog?through me giving up a great many things physical (the MacBook Pro), spiritual and somewhere in between (software projects), whilst the birth of my son forces me to address my many needs outside of the computer world.

This is where we get to the point. It will not have gone without your notice that I have neither been very active, or reliable for the last year. My more immediate needs in the real world overtake me and though even when there is the adequate time to devote to the website and other matters, I have neither the strength or will.

There is much I want to do, but it will have to wait for a few years whilst I care for my family.

I don?t expect to do much blogging here on the main site (my system isn?t working well for me under my new circumstances and it needs a complete overhaul). You can best be kept up to date with my happenings and thoughts through the system that does work well for my circumstances, my forum.

Thank you to all for your patience, understanding, generoisty and care.

Camen Design will return to irregular service in a future iteration some day. What it will be is only a hazy idea right now, but I do know for certain that I will do my own things in my own way and demonstrate to others that they can do the same.

Discuss this in the forum


published on 2012-10-31 08:02:00

published on 2012-08-31 10:48:00
Kroc Camen


Transliteration is when you replace individual characters in a piece of text with alternative characters, commonly used on the web to replace accented characters ??èìòù? with their ASCII equivilents ?aeiou? to use as filenames or URLs.

This is my take on the subject that uses different levels of fallback to gaurantee a result whatever your environment: It transliterates better than any example snippet you have seen out there as will be explained in the code and afterwards.

//safeTransliterate v3, copyright (cc-by 3.0) Kroc Camen <>
//generate a safe (a-z0-9_) string, for use as filenames or URLs, from an arbitrary string
function safeTransliterate ($text) {
	//if available, this function uses PHP5.4's transliterate, which is capable of converting arabic, hebrew, greek,
	//chinese, japanese and more into ASCII! however, we use our manual (and crude) fallback *first* instead because
	//we will take the liberty of transliterating some things into more readable ASCII-friendly forms,
	//e.g. "100?" > "100degc" instead of "100oc"
	/* manual transliteration list:
	   -------------------------------------------------------------------------------------------------------------- */
	/* this list is supposed to be practical, not comprehensive, representing:
	   1. the most common accents and special letters that get typed, and
	   2. the most practical transliterations for readability;
	   given that I know nothing of other languages, I will need your assistance to improve this list,
	   mail with help and suggestions.
	   this data was produced with the help of:
	static $translit = array (
		'a'	=> '/[ÀÁÂ????Ã?????????ÅÅ??????????àáâ????ã?????????å?????????]/u',
		'b'	=> '/[??????]/u',			'c'	=> '/[Ç?????ç?????]/u',
		'd'	=> '/[Ð????????????ð]/u',
		'e'	=> '/[ÈË?????????????????????èë?????????????????????]/u',
		'f'	=> '/[??]/u',				'g'	=> '/[??????????????]/u',
		'h'	=> '/[???????????????]/u',		'i'	=> '/[ÌÏ????????????iìï???????????]/u',
		'j'	=> '/[???]/u',				'k'	=> '/[???????????]/u',
		'l'	=> '/[????????????????]/u',		'm'	=> '/[??????]/u',
		'n'	=> '/[Ñ????????ñ????????]/u',
		'o'	=> '/[ÒÖ?????????????????????????????Ø?òö?????????????????????????????ø?]/u',
		'p'	=> '/[????]/u',				'r'	=> '/[??????????????????]/u',
		's'	=> '/[?????????????????????]/u',	'ss'	=> '/[ß]/u',
		't'	=> '/[???????????????]/u',		'th'	=> '/[Þþ]/u',
		'u'	=> '/[Ù??????????????????????ù??????????????????????µ]/u',
		'v'	=> '/[????]/u',				'w'	=> '/[?????????????]/u',
		'x'	=> '/[????×]/u',			'y'	=> '/[Ý????????ýÿ????????]/u',
		'z'	=> '/[????????????]/u',				
		//combined letters and ligatures:
		'ae'	=> '/[Ä?Æ??ä?æ??]/u',			'oe'	=> '/[??]/u',
		'dz'	=> '/[??????]/u',
		'ff'	=> '/[?]/u',	'fi'	=> '/[??]/u',	'ffl'	=> '/[??]/u',
		'ij'	=> '/[??]/u',	'lj'	=> '/[???]/u',	'nj'	=> '/[???]/u',
		'st'	=> '/[??]/u',	'ue'	=> '/[Ü????ü????]/u',
		'eur'   => '/[?]/u',	'cents'	=> '/[¢]/u',	'lira'	=> '/[?]/u',	'dollars' => '/[$]/u',
		'won'	=> '/[?]/u',	'rs'	=> '/[?]/u',	'yen'	=> '/[¥]/u',	'pounds'  => '/[£]/u',
		'pts'	=> '/[?]/u',
		'degc'	=> '/[?]/u',	'degf'  => '/[?]/u',
		'no'	=> '/[?]/u',	'tm'	=> '/[?]/u'
	//do the manual transliteration first
	$text = preg_replace (array_values ($translit), array_keys ($translit), $text);
	//flatten the text down to just a-z0-9 and dash, with underscores instead of spaces
	$text = preg_replace (
		//remove punctuation	//replace non a-z	//deduplicate	//trim underscores from start & end
		array ('/p{P}/u',	'/[^_a-z0-9-]/i',	'/_{2,}/',	'/^_|_$/'),
		array ('',		'_',			'_',		''),
		//attempt transliteration with PHP5.4's transliteration engine (best):
		//(this method can handle near anything, including converting chinese and arabic letters to ASCII.
		// requires the 'intl' extension to be enabled)
		function_exists ('transliterator_transliterate') ? transliterator_transliterate (
			//split unicode accents and symbols, e.g. "Å" > "A°":
			'NFKD; '.
			//convert everything to the Latin charset e.g. "?" > "ma":
			//(splitting the unicode before transliterating catches some complex cases,
			// such as: "?" >NFKD> "20?" >Latin> "20ri")
			'Latin; '.
			//because the Latin unicode table still contains a large number of non-pure-A-Z glyphs (e.g. "?"),
			//convert what remains to an even stricter set of characters, the US-ASCII set:
			//(we must do this because "Latin/US-ASCII" alone is not able to transliterate non-Latin characters
			// such as "?". this two-stage method also means we catch awkward characters such as:
			// "?" >Latin> "k?" >Latin/US-ASCII> "kO")
			'Latin/US-ASCII; '.
			//remove the now stand-alone diacritics from the string
			'[:Nonspacing Mark:] Remove; '.
			//change everything to lowercase; anything non A-Z 0-9 that remains will be removed by
			//the letter stripping above
		//attempt transliteration with iconv: <>
		: strtolower (function_exists ('iconv') ? str_replace (array ("'", '"', '`', '^', '~'), '', strtolower (
			//note: results of this are different depending on iconv version,
			//      sometimes the diacritics are written to the side e.g. "ñ" = "~n", which are removed
			iconv ('UTF-8', 'US-ASCII//IGNORE//TRANSLIT', $text)
		)) : $text)
	//old iconv versions and certain inputs may cause a nullstring. don't allow a blank response
	return !$text ? '_' : $text;

Edit this code on GitHub • You may do anything with this code as long as you leave credit in the code

There is no ?guaranteed available? method with which to transliterate effectively in PHP; the functions that can do so vary by PHP version and are not likely to always be installed and enabled on every PHP server out there. The only built-in function strtr guaranteed to be present only replaces one character with another and doesn?t handle the common need to expand one character to multiple, such as converting ?ß? to ?ss?.

There are a number of libraries and functions out there for transliteration. Those that are comprehensive are massive and therefore total overkill for a small project and often have unhelpful licences, those that are small and compact are usually very incomplete and rely upon a single method that might not be available to you.

My method uses fallbacks so as to guarantee a result and improves upon other methods out there:

Better unicode normalisation
All the transliterations examples I have seen out there that use PHP5.4?s transliterator make the mistake of copy-pasting the example normalisation string given on the website. The results are simply wrong. My code uses a unicode normalisation method that I have worked out that has not been used anywhere else I have seen. It handles thousands of cases that no other library/function does because it uses two-stages of transliteration, first from any script to Latin-1 and then from Latin-1 to US-ASCII. This means that characters such as ??? become ?ko? where else this would fail on other code I have seen because it would transliterate ??? to ?k?? and then remove the ??? for being non-ASCII
Since the transliteration will be used for filenames or URLs, readability is important, so it?s better to convert some things to more meaningful words such as ?¥? to ?yen? instead of just ?y?. In the example above, it would be trivial for the function to convert ??? to ?k-ohm? but I chose not to since the single character ??? is almost never used on the `Web

I don?t know anything about other languages and writing systems, so if there?s something amiss in my code, please let me know via email, the forums or by editing the GitHub gist

Discuss this in the forum


published on 2012-08-12 13:34:00
Kroc Camen

End of an Era

The world has changed around me since I started this blog, and then I have seen a good deal of change in myself. When presented recently with the issue that my aged MacBook Pro can?t be upgraded to the latest OS X, the logical thing?as far as I'm concerned?would be to switch to some FreeBSD variant and get away from all this iCloud and closed-computing nonsense.

However I am in the thows of change once more and I have opted to sell that which has been my right arm for years. I was neither shrewd nor conscientious with my money when I dated my wife, which was my own fault, added to the unfathomable expense of getting married and moving home. To that end, where normally I would have the money for my tax bill, rightly I don?t. But that is not the reasoning behind this decision. I can earn and I can save, however, I wish not to place my electronic pursuits above the attention I wish to insist upon my wife and my home.

For those that might genuinely desire these items, I highlight them here; my laptop I'm not so bothered about, but my collection of rare Commodore 64 books I would like to find the right eyes who may use them. Whilst I am in the UK, I would consider international shipping for my C64 items as long as you contact me privately.

Onwards and upwards!

Discuss this in the forum


published on 2012-08-11 15:42:00
Kroc Camen

Announcing PhotoDemon:
A Fast, Free, Open-Source Image Processor

Myself, and my good friend Tanner Helland grew up in a scene that revolved around Visual Basic 6.

Much hated by ?real programmers? for not being a ?real language?, Visual Basic 6 struck a chord with the common populous unlike anything since. For a very business-orientated product, a huge scene grew up around teens experimenting with the language.

For all the hate it got, my choice in using it was one of the wisest I made. Software I wrote over 10 years ago still works now and will still work throughout the lifespan of Windows 8. Those who adopted .NET could not say the same and have been dragged along Microsoft?s eclectic upgrade-train, with every new idea thrown in along the way by a directionless Microsoft failing to practice anything they preach (.NET is the future! Silverlight is the future! C# is the future! HTML5 is the future!)

So, it is of deep personal joy for me to link you to some 12 year old software which has only just been released!

I have known PhotoDemon for a long time. Tanner has been sending me copies for over a decade. The wolrd may have changed rapidly around me in those years?Apple went from dead to the No.1 company in the world and Microsoft lost their grip on the ?Web?but PhotoDemon has matured slowly, like a fine wine.

Application design in general has changed fads immensely since the days of PhotoDemon Tanner has included some nice old screenshots showing just how immensely! and though what Tanner started out with couldn?t be further removed from the ?apps? of today, the recent changes in UI leading up to this release have been most profound. In 2003 I sent Tanner a massive 20-page e-mail detailing everything I could criticise on the UI-front. In those nine years my design skills have changed irrevocably so I understand how making PhotoDemon look so good today for, let?s remind ourselves, a VB6 program is such an achievement for Tanner who never admitted to knowing much about UI.

So, go check out Tanner?s announcement, read the history and see the screenshots of a program 12 years in the making!

Discuss this in the forum


published on 2012-08-05 14:12:00
Kroc Camen

Camen Design Competition Time!

  1. Design a Theme for NoNonsense Forum
    1. Get Started:
    2. What You?re Aiming For:
  2. Design a Web Page for NoNonsense Forum
    1. Get Started:
    2. What You?re Aiming For:
  3. Prizes, Judging, Rules
    1. Prizes
    2. Judging Criteria
    3. How to Enter
    4. Rules

Here is an opportunity to create something and learn from others; Camen Design is running not one, but two simultaneous competitions (so that you have a choice) centered around my unique forum software NoNonsense Forum; don?t worry if you?ve never heard of it, let alone used it, all that is required is:

  • Some basic HTML / CSS knowledge
  • The want to contribute and learn

These are the two competitions:

  1. Design a Theme for NoNonsense Forum
  2. Design a Web Page for NoNonsense Forum

and they run from Sunday 5th of August, for just over two calendar months,
until midnight UTC Sunday 7th of October. See prizes, judging and rules for the ancillary details.

Design a Theme for NoNonsense Forum

Your mission, should you choose to accept it, is to turn this:

The default NoNonsense Forum theme ?greyscale?

?into anything you want. Go understated or go wild, simply create a new theme as you see fit.

Do not worry, as you do not need to know PHP or be familiar with NoNonsense Forum to develop a theme for it. NNF uses a unique templating engine that allows you to use plain HTML and CSS and you never need to learn any {{special syntax}} or use PHP (unless you want to).

Get Started:

What You?re Aiming For:

You should refer to the judging criteria for guidance as this competition is very open to creativity.

Design a Web Page for NoNonsense Forum

Your mission, should you choose to accept it, is to design and create a single-page website for NoNonsense Forum.

Currently, NoNonsense Forum has no real ?website? to advertise it, just the technical project page on Camen Design, which is more of a blog post than a proper web site for it, and the GitHub project, which doesn?t exactly ?sell? the product!

The NoNonsense Forum GitHub project page

Get Started:

What You?re Aiming For:

  • The web page can be as long or short as you want but it should highlight the features (or not-features) of the forum and provide a link to download it ( and optionally a link to the GitHub project

  • NoNonsense Forum is aimed at individuals who would want to install and run it themselves, including technical persons within companies that might want to use it as an internal discussion platform; that is, NNF is not aimed at managers, but rather the people who have the technical skill to install it and potentially modify it?They are well aware of what a pain phpBB is. For example, NNF has received this testimonial:

    I work for Life is good and handle their media and web design in Portsmouth. I've used NNF as an internal discussion board and communication platform. This has eliminated the messy and poor communication through paper notes. Our company?s processes and communication has improved greatly. We haven?t had miscommunication since the birth of NNF at Life is good. Thank you for this.

  • Forums appear antiquated compared to all this Facebook and Twitter nonsense, so the site should help convince visitors why NNF doesn?t suck and why a NoNonsense Forum is a good discussion platform

Prizes, Judging, Rules


I lied. There?s not really any prizes, perhaps not the kind you were expecting. You see, I don?t have the money to contribute a physical or monetary prize. The purpose of the competitions is to encourage participation, sharing and creativity. This is an opportunity to play with HTML / CSS and bounce ideas off of others doing the same. There is no such thing as ?stealing? here, just learning. You?re encouraged to share your ideas, designs and code in the forum and see what others are coming up with.

Grand Prize:

The overall winner of the theme competition will have their theme used on the Camen Design Forum for one month, possibly longer if I like it.

The overall winner of the webpage competition will have their design used as the official NoNonsense Forum site over at GitHub.

The SRSBSNS Award:

This immaterial feel-good award will be given to the best entry (in each competition) that takes itself seriously. That is not to say that it can?t be fun, or has to dull and bland, but that it aims to be a real design to be used for its purpose, either as forum theme that would be shipped with the product, or a webpage that would serve as the starting point of someone discovering the product for the first time.

The ORLY? Award:

Awarded to the best entry (in each competition) that does not take itself seriously.

The People?s Choice Award:

What was everybody?s favourite entry, voted by everybody on the forums. This is so that there can be an agreed upon ?favourite? without any ?criteria? to meet.

Runners Up:

The top 5 of each competition will be featured on Camen Design with my personal, detailed critique as a designer and programmer.

Judging Criteria

Myself (Kroc Camen) will be judging (except for the People?s Choice Award which will be a rough vote held on the forum).

Who am I that you would care? This site has been HTML5 with no divs, no spans and the CSS has no IDs & no classes, since 2008. I made Video for Everybody, the HTML5 video-embedding method mentioned in most anywhere HTML5 video is discussed.

These are the things I?ll be looking for:

i. Trueness to spirit

That is, how well the entry succeededs in being true to its nature. If your entry is supposed to be ?retro? or ?industrial? or even ?lolcats?, then I will be ranking based on how well your entry hits the zeitgeist. Is your design and execution close to what you purposed / intended it to be?

Entries with a schizophrenic / uncertain nature would rank poorly. Try be clear in what you want to achieve and what ?statement of design? you are making. Be bold, and stick to it.

ii. Creativity

Make stuff nobody else thought of. Find your own niche where you find pleasure and dig into it.

Extra kudos is also awarded for creatvity with the code. Clean, artistic HTML and CSS is awarded. Especially with the theme competition, kudos is awarded for twisting the HTML and the common idea of what a forum should look like.

iii. Completeness / compatibility

Extra kudos is awarded for those who can cover more ground in the time. Does it include a mobile theme (via CSS3 media queries)? Printing styles? Does it work without JavaScript? What range of browsers does it work on?

You shouldn?t focus on this to begin with though. Get the look and feel right and then with spare time you can work on broadening the features.

How to Enter

To enter a competition, just start a thread in the forum with the title prefixed with ?NNF Compo Theme? or ?NNF Compo Webpage? and the name of your theme. In this thread you can describe your idea, post some images of the design if you?ve drawn any and share code.

You can keep replying or appending to the thread to alert others of your progress and others can give you their feedback through your thread. It?s best to post early and log your progress as you go rather than hold everything back until the end of the competition.

Any time before the deadline just add a link to a download of your entry to your thread. You can continue to update your entry even after you?ve posted a download as long as it?s still before the deadline.

To cancel an entry, just delete your thread.


  • The competitions run from Sunday 5th of August, for two calandar months and two days, ending at midnight UTC Sunday 7th October

  • You can enter both competitions if you want, and you can have more than one entry for each, but you will only be represented once in each prize category by your best entry

  • Please licence your code correctly to avoid your entry being rejected:

    • You should ideally use a Creative Commons CC-BY 3, or CC-BY-SA 3 licence, especially if you have derived your theme from the default ?greyscale? theme

    • Please us MIT or BSD if you prefer these, but not Apache2 / MPL / WTFPL

    • Do not use any GPL licence, or dual-licence that includes GPL,
      your entry will be rejected if you do

Anything you?re unsure of, just ask at the forums.

Discuss this in the forum


published on 2012-08-01 12:45:00
Kroc Camen

The Word to End All Words

Like a black monolith you stand.
Thy fearful symmetry.

Upon you is engraved a single word; a magic word,
More powerful than the utterance of Jadis, the queen of Charn,
who ended all life in her world by the Deplorable Word.

It is a word they do not understand.
From birth they have not known it.
It has not been taught, and neither has it been searched for.

By your word kingdoms have been flattened,
Dynasties felled, endless wars begun.
Lives torn apart and thrown asunder.

They do not know how to comprehend it.
It confuses them, frustrates them.
They bash against you, enraged at your silence.

Why do you not respond!?

But you do not respond.
Your silence causes all their machinations to fall apart;
The noise their livelihoods have come to depend upon.

When your silence has drowned out their noise,
Then peace and quiet will ring out everywhere.
For you are the word to end all words: No.

Discuss this in the forum


published on 2012-08-01 11:16:00
Kroc Camen


Indecisiveness, especially coupled with insecurity, is a very damaging thing. This year has been full of indecisveness for me because actually the most important and incisive decision I made in my life has so outweighed everything else that really what I'm facing is not so much indecisiveness, but the horrible position of knowing that everything I have held close before is small and perfunctory compared to what I have now and yet taking decisive action is deeply disruptive.

No longer do I have to choose between two sides of a coin, the coin has already been flipped. Really, I have to decide if I am to stick firmly to my choice and not saddle in comfort on the fence between.

Since the combination of my six year old MacBookPro not being eligible for Mountain Lion and not having the money to buy a new Mac (marriage and all that) the logical solution is to just change OS and learn something new. I'm not happy with the things Apple or Microsoft are doing anyway (?cloud? integration). FreeBSD or some BSD variant would be the logical choice for me but really I've got better things I want to be doing in life. For that purpose I'm going to disentangle my data from the Mac and sell it (along with a bunch of other good stuff).

I fortunately come from generations past that learnt to think using paper. If I have to cut off my right arm to escape computer addiction, I can do that. Generations now and especially in the future will quite literaly be unable to think straight without an electronic device in their hand. To them, life will be brutually stressful with no inner peace to be found because they will be assaulted non-stop by disingenuous companies who have every kind of life-sapping wares to peddle.

The days of buying a product and owning it wholly are gone. Now you buy a product and you neither own it, nor did you pay for it all. You paid for something that is partially given over to advertise to you. You paid to be advertised to by these ?recommendations? and you cannot turn them off. Your screen estate has been turned over to data-collection and adverts-by-other-names. You will be ?social? if you like it or not, is the drum beat. Your data is our data, goes the tambarine.

I want to escape that world before it is no longer opt-in, even if that means having no Internet at home.

Discuss this in the forum


published on 2012-07-16 11:00:00
Kroc Camen

410: Gone

I have come to realise that I am in a real creative slump as of late. Not creative as in ?look at what I made!? but creative as in the simple ability to express oneself. Making things is not necessarily creative; you can make babies, which is certainly creating something, but it?s not ?creative? in the slightest.

I've been mostly working on NoNonsense Forum with whatever time I've been giving to programming, but that has become very dull and lacking in creativity. My own forum doesn?t need any of the features I'm adding, and since I don?t ever see any other instances of NoNonsense Forum, nor hear from users (except on the rare occassion) I'm not getting any joy out coding for no purpose other than to bash my head against code for the sake of it being there.

In this way I feel I?ve lost myself to the lure of general pervasive apathy that permiates large portions of the Internet. I could not for a moment agree that watching YouTube or checking Reddit is more immediately important than writing a letter to a friend, but I am not rightly able to master the will to focus on such a task. It is only away from my desk that I have the power to think, and as soon as I return to it, I am drained completely. It has taken me weeks to write this alone for that reason.

Let me inform you that your ability to be creative with a computer and the depth of your knowledge of it is worthless and infantile in the face of managing a home! I have found that living with the woman I love is a very simple task; managing the home we live in, however, is quite the most challenging, all-encompassing, overwhelming amorphous blob of a problem you will likely experience. Having a firm grip on one?s life is sadly not given the attention and praise it deserves. I place such capability much higher than all secular skills. If you can manage other people?s lives through work, that?s just mediocre. If you can manage your own life, well that?s something rare and special these days.

I have many worries piled on me at home. The turmoil I have been through in one year has made me very unsettled. Unable to face the amorphous blob, I default to the computer instead every time. This has become such a problem that I have to take action against myself to hope to scrape through this year.

Just as of late, I've discovered that it appears my 2007 MacBook Pro won?t be eligable for the Mountain Lion upgrade. I am officially old-hat, behind the cutting-edge, a pain and an inconsideration for software developers. Okay, so maybe that?s an exaggeration since Moutain Lion isn?t even out yet, but there is no possibility I can afford a new Mac; I have to save that much to be able to pay my tax bill and my wife?s annual travel ticket at the end of the year.

What that means in practical terms is that?everything added up?I can no longer run Camen Design. If I can?t run the latest software, I can?t test or develop for it, and even if I could, what time I'm devoting to it is taking away from the harmony in my home. My desire to continue the site is being squeezed out of me from multiple angles.

I've put my Mac away so it?s no longer the first place I go to every morning. Since it?s no longer supported by Apple and I cannot afford another, it?s just a download slope into obsolesence and I may as well get out now before it becomes painful and difficult. I'm writing this on my netbook, which greatly restricts what I am able to practically create (3 GB free on a 16 GB SSD!).

I've come to feel that Camen Design is of no interest to anybody any more, it?s sloppy and out of date, and irrelevant in a world of wrong technlogy going in the wrong direction doing the wrong things. I'm not going to change my principles to suit the way the world has gone, I'm just going to stop being a part of it.

Looking after my wife and my home is the priority and I wish I could slap myself around the face and wake up to the urgency required, but I have known nothing else in my life than to sit in front of the computer and create. For once I must destroy rather than create and remove the anchor that weighs me down so much.

Discuss this in the forum


published on 2012-06-13 17:33:00
Kroc Camen

How the World Could Solve the Vendor Prefix Problem in One Month

Stop trying to solve more than one problem in one go, it won?t work. Proposals for the solution to vendor prefixes have tried to solve additional problems with vendor prefixes (that is, vendor behaviour & spec change) by adding more complexity, ?features? and meaning to prefixes. Stop making things complicated.

Let?s solve one thing, simply, and right now.

I am asking you, browser vendors, to add ?-x? as an alias to your vendor prefix in your web browser. That means that any instance of -x-feature in the CSS will be treated as -webkit-feature in WebKit, -moz-feature in Gecko, -o-feature in Opera and so on and so-forth.

Why does this solve the vendor prefix problem?

1. Incomplete Features Are Still Incomplete

It?s good practice to always include the un-prefixed declaration at the bottom of a list of vendor prefixes?thusly:

-webkit-feature: myway;
   -moz-feature: myway;
    -ms-feature: myway;
     -o-feature: myway;
        feature: highway;

But that relies upon waiting until that feature becomes unprefixed and does nothing to do away with the multiple list of vendor prefixes until that time.

How about:

-x-feature: myway;
   feature: highway;


That reduces the repetition whilst each browser still sees its own feature (-webkit, -moz &c.)

2. Vendors Will Be Vendors and That Will Not Change

You cannot threaten, cajole or otherwise incite Apple (or any vendor) to stop being a massively successful company that will do what it damn well likes.

Vendor prefixes are necessary. There are tons of internal features of different engines that are never going to be standardised because they are not designed to be exposed to the web or are used in producing the browser UI or are there for just plain old competition. Standards take time and companies have to ship software.

We can?t stop Apple being Apple, and we shouldn?t try stop lazy developers being lazy developers through syntax. That is an education problem that has to be solved at a level much higher than syntax. -x is incredibly lazy?for vendors and developers alike?but it?s lazy and good, rather than lazy and bad like vendor-specific prefixes.

-x will succeed because it?s lazy in a copy-paste web development world and not busy trying to hit vendors or developers over the head with a shame stick, or trying to educate the world about best-practices all within a prefix.

Imagine that in order for HTML5 to be adopted, developers had to update every HTML4 page out there? That?s what vendor prefixes are, in-effect, requiring. -x- is like the HTML5 doctype. Old code doesn?t have to change, compatibility goes both ways, we code for the future and the future supports us.

3. Specs Change, Browsers Differ

The -alpha, -beta proposal nonsense doesn?t work because it tries to imbue spec / standardisation ideas in the I-don?t-care-about-this-crap-copy-paste web developer world where old code doesn?t get updated unless it breaks horribly.

If you are using any vendor prefixed features then they might break in the future. That is reality and you can?t (and shouldn?t) try and change vendor prefixes to solve that problem.

Different vendor prefixes don?t work because it assumes that every vendor implementation of a new feature will be?by deafult?incompatible. That means that every time a vendor adds support for a feature that matches another vendor, you have to fix your code even when it?s working. -x works because it assumes that vendor implementations will be the same, unless they are different. You only change your code when it breaks. With -x, when a vendor adds support for a feature, you get it for free without having to rewrite the whole damn ?Web.

Let?s imagine this code currently only works in WebKit because only it supports that feature:

-x-feature: highway;
   feature: highway;

And then Mozilla come along and say it should be done a different way. You can just override your code:

  -x-feature: highway;
     feature: highway;
-moz-feature: myway;

You Can Do It, and You Can Do It Now

Mozilla, Apple, Google, Microsoft. You could all implement this small change very easily. You only have to alias -x to your vendor prefix. It is not asking much. There?s no standardisation involved, there?s no spec (or ?alias -x to your vendor prefix? is it), you don?t even have to arrange a meeting with each other.

Apple and Microsoft both have browsers in beta (Safari 6 and IE10). Including this tiny change would open the flood gates to developer support. Google can ship the change in 24 hours with Chrome?s update mechanism. Mozilla could ship it officially in 6 weeks. There is little holding back any of you.

Here is the gauntlet I am throwing down to solve the problem of vendor prefixes:

Announce, or ship?officially, or as a development build?support for -x within one Month?s time (July 13th 2012).

I believe that to be quite doable, and I hope to hear from you soon.

I don?t have a twitter / reddit account, so if somebody could do the honours of starting it off, that would be appreciated, thanks, and if of course anybody would have the ability to get the vendors to actually see this, that would help too! :P

Discuss this in the forum


published on 2012-06-05 15:23:00
Kroc Camen

An Indiscriminate Web

There is no easier technical platform by which to lead by example than the ?Web. This article imbues principles that I have made regarding how to be a part of the ?Web and how to allow others to participate in a non-discriminatory way.

What do I mean by non-discriminatory? Do I mean discrimination in the sense of race, gender, sexual-orientation? No, because on the Internet, nobody knows you?re a dog.

I'm referring to technological discrimination via technological assumption.
Let us begin with a solid example.

In the Land of the Blind, the One-Eyed Man Is King

If, let?s say, you choose to develop an iPhone app (instead of a web app) then you are choosing to limit who can access your content to the following profile:

Has a bank-account, or plenty of disposable cash
A bank account is required to be able to sign up and pay for a contract with a phone carrier. Not everybody in the world has a bank account. In some places, banks are so thinly distributed that people exchange phone credit as a form of currency instead. If you purchase an iPhone on PAYG, expect to pay a large amount up-front as well as for top-ups. Given economic pressures across the world, there are many people who are deeply in debt or have all their money already tied up so as not to have the means to ?simply? PAYG with an iPhone.
Is old enough for the above
If you aim your app at children, you are making the clear assumption that the child in question has a parent who is able to pay for the device because the child will neither be able to sign a contract, or have the disposable cash to just buy an iPhone PAYG. Not everybody has the privilege of a family, or even a stable one at that.
They will stick to Apple, and Apple to you

You are banking on the iOS platform being the be-all and end-all of technology, that it is in cultural favour (not the case everywhere), available in the person?s country, and commands enough of a market as to be beneficial to you to support.

If your app?s data / service / information has a long shelf life, you are assuming that your user will continue to always use an iPhone device, now and into the future, and that they will not consider switching to an alternative platform; Apple will continue to be the leader in technological platforms and that Apple will continue to allow your app?s existence on the App Store because your app does not compete with yet-unknown future plans or policies of Apple.

Agree to Apple?s policies
Whilst it may be no qualm to yourself, you are requiring that your users also agree to Apple?s data policies, including accounts, privacy, App Store terms and conditions and so forth?and that they will continue to agree to these policies as they change in the future.

As you can see, this rather narrows the scope and field of your purpose. That?s fine for some purposes, maybe you?re trying to target those very people, but in the context of the ?Web? That?s not good enough.

Denying Participation

If you make assumptions about how ?easy? it is for another ?Web user to be in the same position as you, you are discriminating against them.

If the only way to contact me was via an input form on my website, and that form required yourself to upload a copy of your browser history, I would imagine that you would have a bit of a problem with that and would stave off contacting me.

This is, in effect, what you are doing when you provide no other means for ?Web users to contact you other than Facebook or Twitter.

You are saying to these users that they must agree to the policies of Facebook or Twitter, hand over their information, and then proceed to be tracked across the ?Web, in order to be able to contact you. You are making the assumption that it is ?no problem? for any other person to register for these services because it is ?just a username and password?. As I have outlined atop, it is not ?just an iPhone?. It is an assumption that discriminates on technical grounds. Agreeing to Facebook?s or Twitter?s policies is not solely a matter of outlook on life, it is a matter of mechanical acceptance:

'We will physically collect this information, we will physically store it here, we do this with it, we will allow you this access to it, we will allow other people to access it (including advertisers) and we will not physically delete it even when you ask us to do so.?

There is nothing backwards, difficult, obtuse or cave-dwelling about disagreeing with those physicalities. There is no ?cloud? that magically suspends information in the air, there are rooms full of servers, cables and hard drives.

Allowing Participation

As a ?Web author, you owe it to yourself to be participatory.
That which you have received freely, give freely.

You do not know how many people have failed to contact you because you do not provide an uninhibited means of contact. We are not talking idiots and spammers here. We are not talking people who lay outside your clique, or are of no interest to you because they can?t be bothered to sign up for Twitter. We are talking about me: Kroc Camen; a very serious, capable and competent web author and programmer. I cannot and will not contact you if you somehow feel Twitter is the medium of the future and I'm just not serious enough a geek if I don?t have it.

I aim to fully practice what I preach: if you want to contact me and you do not have / want Twitter, Facebook or even an e-mail address (because even free e-mail addresses are weighed down with privacy implications?remember Google?s recent policy change) then you can write something on my forum where you will not require an e-mail address to speak. You will not be limited by what operating system or browser you choose (text browsers work, you could even post using telnet). You will not be tied to my forum?each post you make stands entirely on its own and forms no relationship with any other data: posts by the same name are not made to relate to a whole (such as ?recent posts by this user?), there is no database. You are not profiled. You are not suddenly part of a ?community? you don?t wish to be part of. No more a commitment is required of you than a name, a password and a message, all of which require absolutely no continuation from one post to the next.

Can you see how wholly unlike most of the ?Web that is?

And yet, with all these ?limitations?, the forum has succeeded in its goal; that we, as humans, are able to communicate. Express. Emote. The lack of requirements to participate on the forum has allowed people to say things they would never have said if they had to register / check e-mail / log in.

If you are an advocate of an open ?Web?a ?Web in which a person?s choice of platform or browser is no barrier to entry, a ?Web in which innovation comes from the small individual and not the big corporation?then surely you should not limit your participation to the traffic going through the gateways of walled gardens? If I can?t stand upon your shoulders because I need to enter a walled garden to build upon your thoughts, then where are your thoughts going to stand in twenty years? time? They are not your thoughts any more, they are Twitter?s thoughts, Facebook?s thoughts; for their benefit, for their advertisers, for their IPO.

You are not a forward-thinking, modern and progressive person because you choose to store personal and precious information with companies who have no requirement to look after that data with due care and respect, to ensure its safety, compatibility or even access to it in the future. Have you got the permalinks to every tweet you?ve made? Because there?s no way for you to simply view your old tweets now, they?re ?unavailable? so say Twitter. Why don?t you just write an SQL statement to bring them up? Oh, you can?t. Do you want a ?Web where you can only look at three months of rolling data?

I say all this with as much love as I can muster because I do not want you to fall into the kind of false thinking of the Apple advocates, that their way is the future; they will one day realise that they own nothing, yet will have lost everything.

Use Twitter. Use Facebook. I do not mean to communicate the idea that using these services is some kind of impure heresy, but that you shouldn?t use these services exclusively, to the exclusion of others.

An open, participatory ?Web will not simply come into being because you talk about it on Twitter. It is the result of allowing others to build upon the words you have spoken, the code you have written and the art you have made without the need to be a part of some business? ?exit strategy?.

Be Responsible For Yourself
  • Do not place your entire online presence within the hands of brands. Make your own website. If you already have one, use it: blog more often, make it the centre of your creativity

  • Companies may swing around and bite you at any time (policy change, data loss); live with this in mind always, code accordingly

  • Do not include share / like / tweet buttons on your site. These slow it down, track users, clutter your site up and degrade you as a developer

Show Humanity
  • Think of users as humans and not as numbers, database-fields and targets of product features. How can your website / service allow them to be more human and less network-connected-computer?

  • Do not collect data just because you can. Do not require anything of visitors until it is unavoidable. Allow them to progress as far as possible before you request information from them

  • Imagine that visitors don?t have, can?t have or don?t want an e-mail address. Can you serve them sufficiently without an e-mail address?

Show Humility
  • Do not ask of anybody that which you would not accept yourself under a different guise (e.g. If you would never consider registering with MySpace just to contact somebody, don?t expect others to register with Facebook / your service to contact you)

  • Other people do not think your website / service is as rad as you do. Do not assume they will interact with the site as enthusiastically as you intend. Do not get in their way / annoy them

  • Prefer RSS over a proprietary API. Do not assume that other developers would give their full mental commitment to your API and would enjoy it. You hate learning someone?s needless API, don?t ask others to do the same

Be Participatory
  • Provide a form on your website for people to contact you, or a comment system that allows unregistered comments. Spam is a technical issue and not the fault of the human wanting to contact you. Do not treat the human like a problem

  • Degrade gracefully, do not require JavaScript or plugins. Do not block specific browsers or platforms. You do not need to test your code in every browser / OS in existance, just don?t place hurdles on purpose

  • Make source code available via distributed version control systems such as git; people wanting to participate are not therefore forced to interact with a specific code host if they don?t want to

Discuss this in the forum