You are viewing [info]borndigital's journal

Words Hard

weighted companion cube
Derp. 

Keep it up.

weighted companion cube
I just stopped in to post some book notes, but I'm glad to see so many people back into the swing of posting. Maybe I don't need to jump ship to Tumblr after all?

Just sayin.

I guess you better go and get your llama.

weighted companion cube


I'm really tired of fighting this battle over and over in my head. Every year I keep thinking things are going to get simpler, but they just get more complicated. I think part of the problem is I let them get complicated.

When I see a book I want to read, I grab it. I know I don't have time to read it. More than likely it won't even contain much of anything new or useful. The book I accidentally blogged notes on a few days ago (SQL and Relational Theory, Date) is a good example of this. I have a much more concise book by the same author and publisher, Database In Depth. I should have known that the book I picked up was going to be a rehash. There were only two really useful bits I could pull from the new material.

The urge to search for new information keeps winning out over the urge to act on what I am accumulating. For most of 2009 I embraced digressions like this, and it might have made sense for a while. Early in my career I spent a lot of time spinning gears on doing without a clear picture of what I wanted or how I was going to accomplish it. Now I'm fighting Tumblr addiction. It is an endless stream of information, mostly visual gratification, but this too is useful potential information.

If the book I read yesterday (Entropy Theory of Aging Systems, Hershey) can be believed then what I am doing is being an open system, which is mostly good. The problem is I get so carried away expanding in all directions that I don't make enough time, or even feel motivated to do the things I need to do. I need to find that happy medium between growing out of control and being closed off and stagnating.

I also need to get better at using technology as opposed to the other way around. This Internet is some high entropy stuff.

SQL and Relational Theory

weighted companion cube
Date

Coalesce null values into something valid.

Relations are not types, and seems to imply that relations are not typed.

Slow Start

weighted companion cube
Whee, here we go. Learning new lessons: like how indie doesn't always mean awesome. Also, I'm never going to be rid of the skeletons in my closet so I might as well make some furniture out of them and get comfortable. At least then they'll be a nice conversation piece. Think of it as an exercise in life hacking.

I'm still hobbling along with what was my December project, and is now my January project. I got some nice front end stuff done and then hit some nasty backend limitations with browser security. It can still be done, it just requires a JSONP implementation. It didn't help that I had craft projects to get done and games I wanted to play. That, and the Library is buying books again so the new book shelf had an explosion of things I wanted to read.

This week I did really good on one of the changes I'm trying to make: eating out for lunch only two weekdays a week. I'm not doing so well on going to bed earlier in the event Donnie gets the job it looks like he may be likely to get. Need to get the life machete out and see about some more hacking I guess.

I've been using Chrome for a few weeks now. Aside from a very unimaginative spellchecker it has gone really well. Chrome is much faster, and does the job. I can't say that I'm kicking Firefox to the curb because I have not messed with Chrome's built in debugging/developer tools yet but they look promising.

2009 going going...

weighted companion cube
Just a few days left, not like it matters. The division drawn that ends one year and starts another is 100% arbitrary. I've never been one to put too much stock in "new year's resolutions". For one thing, anything worth changing is worth starting now, not later. I also don't think sudden change is often the best approach. I've bought clothes before thinking it would motivate me to change. It doesn't work. I've been fighting my weight for a while now and motivation is the number one weak spot for me. My weight isn't even really all that bad, back below 200 (barely) and if I can just stay at that point for a while I'll be happy. If I can find ways to cut things out and cram in exercise to lose a pound a month I'll be deliriously happy.

Christmas was pretty nice. I made a shawl for one grandmother this year since I made one for the other last year. That is one example of change being difficult, I keep intending to make more presents for christmas every year, but usualy end up running out of time and buying stuff instead. I made a clock that I wasn't really happy with how it turned out (but the recipient seemed to like it) and a couple of bead necklaces that did pretty well. On the other end of the giving-receiving spectrum I got some Copco cups (Eco-First, Acadia Mug) to further encourage my cost savings attempt at not buying coffee every morning (making it communally in office instead). I also got some games and books I really wanted. Now I just need time to play said games ;D A couple were portable, so I've been able to play them more, Little Big Planet for PSP and Scribblenauts.

Tonight is my second D&D session with 4th Edition. The first went OK. We're using the RPTools software and it is Java based which I really hate. The interface is pretty good, it is just a ridiculous memory hog. I'm live tweeting my character at: http://twitter.com/oroborios . He uses some strong language, so be warned :D

He isn't that angsty in game (at least not out loud), but some of my JL Friends know how our little game groups can get with the ridiculousness.

Playing with fire... I mean technology.

weighted companion cube
In my never ending quest for the next great thing I've been playing around with a lot of stuff lately. Google Wave has some interesting potential, but it is mostly useless right now. A lot of people I know complain that there are just not enough people on it... I have over two dozen invites now and no one that is interested. Part of the problem is a lot of people don't want yet another thing to deal with and I can't blame them.

Beyond the social buy-in issue there is an egregious lack of functionality. Sure, it's a "preview", but some of the things you can't do are just inane. Maybe some day it'll be a neat communication tool. Right now it's a bit lame, and annoyingly slow in Firefox.

That takes me to the next point of exploration: Chrome. I've long said I was going to try out Chrome when they had a Mac version, but that was back when I used a Mac on a regular basis. In the time it has taken them to get the Mac version into a public Beta (I think it's been at least 6 months now...) I switched to hardly ever using a Mac unless I need to use Omnigraffle (and if anyone can recommend a good Windows/Mac alternative to that lovely app I'm all ears).

Two or three months ago I switched from Mac as my primary operating system to Linux (Ubuntu). Aside from some ongoing issues with dual screen support it has been mostly great. I've been hearing about the Chrome Beta for Linux now so I guess the time is right.

I'm also exploring Linux flavors. Aside from some very early versions of Red Hat my first real experience with Linux was Ubuntu and it looks like I picked the right one. I tried to switch to Red Hat recently because it was what the inventory system we have at work supports (supposedly) and it was a complete failure. Fedora wasn't too bad, but I still had issues. I tried Open SUSE this week but it had some show stopping problems, and at the recommendation of a Facebook friend finally tried Linux Mint. The last option was certainly decent, but it is based on Ubuntu and I haven't really found a reason to pick it over the upstream yet.

All this switching around, in operating systems, web browsers, and other programs reminds me of my initial adjustment period switching from Amiga to Microsoft. I tried everything to make the new operating system feel more at home. What I really wanted was something that just worked without having to switch the way I operated too much. By now I've become somewhat accustomed to switching how I operate. I just want something that runs smoothly once I settle in.

How Windows Makes Me Feel

weighted companion cube
Even Windows 7 (contained virtually in Mac with a Sun Product) can't alleviate my Microangst.


Chuck Code 1

weighted companion cube
So I am working on a project, and I do a little investigation down a particular path, start writing some code, and we decide not to go that route.

Throwaway code, fine. But, it is actually something I made small improvements on based on someone else's shared code. So I figured contribute it rather than totally throw it away.

PHP UTF-16 to UTF-8 conversion based on source from http://www.moddular.org/log/utf16-to-utf8 (which was based on some JavaScript code... also potentially useful.):

Lets say you have something in UTF-16. PHP is not very UTF-16 friendly yet (STILL).

Based on the code from moddular, I decided being able to defect for BOM would be good so I pulled that into a separate function. I just use 'be' and 'le' to indicate big and little endian (and '' to indicate neither), but one could define constants instead.

Also, my little bit of research indicated that BOM is optional in UTF-16, and that big endian is generally the safer of the two assumptions. I extended the original method to be configurable, but retain the default assumption that no BOM means the string is not UTF-16. If you force conversion, the default endian is big, but can be overridden to little ('le').

Have fun.

<?php
function getUtf16Bom($str)
{
	$c0 = ord($str[0]);
	$c1 = ord($str[1]);
	return(
		$c0 == 0xFE && $c1 == 0xFF
		? 'be'
		: (
			$c0 == 0xFF && $c1 == 0xFE
			? 'le'
			: ''
		)
	);	
}

function utf16ToUtf8($str,$forceConversion = false, $assumedEndian = 'be') {
	$type = getUtf16Bom($str);
	if('' == $type && !$forceConversion){
		return $str;
	}
	$str = substr($str, 2);
	$len = strlen($str);
	$dec = '';
	for ($i = 0; $i < $len; $i += 2) {
		$c = 
			('be' == $type || '' == $type && 'be' == $assumedEndian) 
			? ord($str[$i]) << 8 | ord($str[$i + 1]) 
			: ord($str[$i + 1]) << 8 | ord($str[$i]);
		if ($c >= 0x0001 && $c <= 0x007F) {
			$dec .= chr($c);
		} else if ($c > 0x07FF) {
			$dec .= chr(0xE0 | (($c >> 12) & 0x0F));
			$dec .= chr(0x80 | (($c >>  6) & 0x3F));
			$dec .= chr(0x80 | (($c >>  0) & 0x3F));
		} else {
			$dec .= chr(0xC0 | (($c >>  6) & 0x1F));
			$dec .= chr(0x80 | (($c >>  0) & 0x3F));
		}
	}
	return $dec;
}

//lets say we want to open a UFT-16 Spreadsheet exported from Excel...
$dataFile = utf16ToUtf8(file_get_contents('config/sfxdata.txt'));
//split it into lines...
$dataList = split("\n",$dataFile);
$dataTable = array();
foreach ($dataList as $lineNumber=>$dataLine){
//split each line into cells...
	$dataTable[] = split("\t",$dataLine);
}
print_r($dataTable);

Accessiblity Presentation

photo
The technology this morning was uncooperative. Unfortunately my demo hinged on a locally hosted web server, and I couldn't get the laptop to output video to the projector.

So now the demo is uploaded to my old Engineering space (because they support PHP) and here is the content of the slides:

Slides

Transcript:

My name is Troy Hurteau, I am the Interface and Applications Development Specialist for NCSU Libraries.

This presentation was a small part of a larger panel on the current landscape and future movement of accessibility on the web.

So, when we talk about sharing information on the web there are several things to consider from the personal perspective (thinking non-technically).

The visitors accessing your site or application come from a variety of geographical and cultural environments . They also have a diverse set of capabilities: language, vision, education, and computing platform to name a few.

Accessibility impacts how these visitors will be able to interact with or through the web. Depending on how your site or application are built, they may have challenges with authoring contributed content, reading or finding content, understanding the information you are trying to convey. These can all affect the quality of the experience then encounter.

Rich interfaces can be impressive, and very satisfying when well designed. So long as they don't create unnecessary barriers to the information, using them is a good thing, even if they benefit some users more than others.

One consideration is making the act of contributing, collaborating, and generally interacting with other people online accessible. A fairly common example of this is the rich-text editors used in web mail, internet forums, blogs, and content management systems.

If the buttons, images, and form elements that make up the text-entry interface are all marked up properly, and keyboard navigation of the interface is possible then there usually won't be a problem. Even just providing a "source view" can make the task workable for most users.

When the needs involve complex markup, the outcomes may not be comparable. The goal is to make the experiences as positive as possible. Often even a reasonable effort will rise far above what most sites attempt.

It is also important that the information authored in these systems conform to best practices for markup. Proper use of headers, paragraphs, lists, and other tags helps users with assistive technology navigate within the page.

Most developers know about things like alt text for images, but there are many markup standards that can be applied.

The link in this slide (http://people.engr.ncsu.edu/jthurtea/access08/) illustrates two very similar pages. The first example uses tags correctly, the second uses the wrong tags in almost every aspect. It is styled to look identical, but the second page is significantly harder to use with a screen reader. It also would not perform as well with search engines.

Aside from the application of tags, there are other authoring practices, such as descriptive link text with a title attribute as a backup that can make a huge difference. Generally speaking links like "More" and "Click Here" are bad form. When this type of link label is unavoidable, a title attribute on the link is an acceptable substitute.

From another angle, some of the more recent developments in web technology have enabled whole new ways to share information that go beyond basic text displays and inaccessible images that require alternative text.

Sharing data through the web is a huge area of opportunity.

The thing to keep in mind is that while rich web interfaces may be cool and effective for a portion of the web population, there are users that will have problems using such approaches for a number of technical, situational, and personal reasons.

If harnessed poorly, this new technology is little different that the <blink> tag, or table based layouts. Misapplied technology causes more issues than it solves.

These three examples explore the same set of data through different methodologies.

The first (http://people.engr.ncsu.edu/jthurtea/access08/3.php) is just a table rendering of the data. It is properly marked up, though since it is four dimensional data there are opportunities to apply even more useful header hierarchies.

The visual approach (http://people.engr.ncsu.edu/jthurtea/access08/4.php) pulls the data in to a Google visualization application, in Flash. This is an attractive way to display the data, but if it is the only way to access the data there is a missed opportunity and not just for users with disabilities.

Any methods that give more access to the data improve the application of the information to a variety of uses. The third example (http://people.engr.ncsu.edu/jthurtea/access08/5.php) shows how a simple script can be used to customize the data view. This isn't even using AJAX, though it just as easily could.