Programming, Policitcs, and uhhh Pineapples.
# Friday, December 04, 2009

More WebSequenceDiagrams.com Awesomeness

Friday, December 04, 2009 12:43:54 AM UTC

As I've been working with a client which has demanded rigorous sequence diagrams as deliverables for the design phase of the project, I've started to use WebSequenceDiagrams.com more and more.

I've blogged about it previously, but I've only come to truly appreciate it after having to use Visio for a few days before I convinced the client that I could deliver the content faster and in an easier to maintain format (well, text) using WSD. 

What Visio Gets Wrong


I ran out of connection points.  Yes, it's possible; for a long activation sequence, you can actually run out of connection points.  One could argue that this calls for a refactoring of the diagram in the first place, but then I would say that you've never tried to actually refactor a Visio diagram...I still find it hard to believe: the activation box ran out of connection points; I wouldn't have believed it if I didn't see it myself:

I kept having to resize the page.  By default, you can't really fit much on the page.  But as I started to build my sequence up, I found that I had to keep toggling around with the paper size just so that I would have a grid.  This was annoying since it also involved then zooming out so that I could select everything and reposition it to the top left corner of the page then zooming back in.  You'd think that Visio would be smart enough to do this, but it isn't...

I kept having to move elements around.  Want to add a new step?  What about introducing a new actor in between two existing actors?  Prepare for some carpal tunnel my friend.  There's simply no easy way to do it aside from zooming out, grabbing everything to the right and shifting it around while counting gridlines and getting your result some 10-20 clicks later.  What's worse is that you end up having to scroll around horizontally (reordering actors) and vertically (reordering steps) while dragging a bunch of stuff around.

I kept having to fix connection lines.  This was absolutely mindboggling: if I extended an activation, it would cause the first connection on the activation to jump, which would then require me to manually drag the connection back to where it belonged.  I probably spent a good 10% of my time simply fixing these connection points as a adjusted activations:

This is an incomprehensible design flaw; I have no idea how people work around this in Visio since I adjust activations multiple times as I'm working through a diagram.

There was no representation of alternate paths or optional steps.  I ended up having to draw a rectangle and manually managing the size of it as I changed steps and added more steps.  What made this even more annoying was that having the rectangle, even though I sent it to the back, then made it difficult to select elements that were enclosed by the rectangle like a message line or a connection point or a note; I'd end up selecting this stupid rectangle instead.

I had to keep managing the location of notes.  The notes don't seem to anchor to anything and it's not clear to me how that's supposed to work.  That meant that I had to keep moving notes around as I changed activations and modified connection points.

The lifelines didn't synchronize.  For the life of me, I couldn't figure out how to get the lifelines to synchronize in length so I didn't have to manually go back and drag each one down to the same length.  You can't actually CTRL+click two lifelines, as one would think you'd be able to do, and drag them both to extend them simultaneously.  I mean, this seamed like pretty basic stuff to me.

So yeah, all in all, I'm not sure why anyone would want to subject themselves to the pain of creating sequence diagrams in Visio.  Maybe if it's a final product and you don't plan on touching it ever again and you've already done most of the work on paper or something, but it's a terrible tool if you're just trying to think an idea out and see it visually.

What WebSequenceDiagrams.com Gets Right


I can't speak to the console program or the DLL (yet), but I decided that the only way that I could do this right was to do it in WSD first and then just use Visio to render the final output.  While doing it in the browser is fine, I found it much easier to do it in EditPlus, my text editor of choice.

The first step was to create a syntax and auto-complete file so that it was a little more user-friendly.

Here's my .stx syntax file:

#TITLE=WSD

#DELIMITER=,(){}[]+*%/="'~!&|<?:;.
#QUOTATION1="
#LINECOMMENT=note
#CASE=y

#KEYWORD=Activate
activate

#KEYWORD=Deactivate
deactivate
destroy

#KEYWORD=Alias
as
participant

#KEYWORD=Notes
note
over
right
left

#KEYWORD=Control
alt
else
end
opt

#KEYWORD=Newline
\n

#KEYWORD=Transition
->
-->
#

And my .acp auto-complete file:

#TITLE=WSD

#CASE=y

#T=act
activate ^!
#T=de
deactivate ^!
#T=pa
participant ^!
#T=alt
alt ^!
    
else
    
end
#T=opt
opt ^!
	
end
#

What I get from this is:

I know what you're thinking: Chuck, that looks like code!  By golly, it does!  And -- at least to me -- that's the beauty; all of a sudden, a frustrating, time consuming, mouse-centric activity becomes a keyboard-centric, coding-like activity.  Moving objects around becomes a matter of moving lines of text.  Reordering actors involves moving your participant declarations around.  Notes stay in their context if you add a step since everything gets pushed down.  There's no manual resizing of anything.  There's no fixing connection points.  There's no stupid.  It actually makes working with sequence diagrams, beyond just whiteboarding, much more useful and much more productive as it lets you kind of think out the code by actually writing pseudocode.

I highly recommend downloading EditPlus (you can keep using it for free, perpetually, if you're a cheap bastard or pony up the $20 for such an awesome editor).  For me, EditPlus is a perfect pairing for WSD due to the easy to create language syntax/autocomplete files and the handy split-document feature so you can easily reference your participants at the top.

Simply create a new file type and add the .stx and .acp files I defined:

Now the downside of this whole affair is that you have an extra step of having to copy out the text and pasting it into the browser, but even with that extra little bit of annoyance, the time and frustration saved over working with Visio is more than worth it.

The next step, once I get my hands on the command line tool, is to hook it up to the external tools feature of EditPlus for a quick hit.  I'm also considering writing an integration for Visual Studio for custom rendering within VS or at least something quick-and-dirty like an add-in.

One additional note is that WSD has an HTML/Javascript API whereby you can render a diagram inline with your HTML by simply using a set of <pre></pre> tags and a reference to a Javascript file.

What's cool about this is that now you can use the standard CTRL+B/CTRL+E shortcut keys to preview without a copy/paste step!  For free!  That's pretty awesome.

Of course, the downside is that using this method, there is a limit to the size of the sequence that you can send up as well as the fact that you need some additional hijinks to make the syntax highlighting work (I gave up on that part :-D) .  But if were doing it in the browser to begin with or using notepad and you don't care for the syntax highlighting, then this is a huge upgrade.

Conclusion: stop using Visio :-D Now I'm just looking forward to WebERDiagrams.com, WebStateMachineDiagram.com, and....well, you get the idea.

My EditPlus .stx and .acp files for anyone that wants 'em: wsd-files.zip (.52 KB)

# Monday, September 28, 2009

SharePoint? Is That You?

Monday, September 28, 2009 6:46:05 PM UTC

Weird discovery of the day: Recovery.gov is SharePoint (check the source or try a search).

Cool.

# Wednesday, July 08, 2009

Leveraging The Windows Forms WebBrowser Control (For The Win)

Wednesday, July 08, 2009 1:28:32 PM UTC

I've been working on a little utility to experiment with the XMPP protocol.  The idea was to write a tool that would allow me to send, receive, and display the XML stream and XML stanza messages at the core of XMPP.

Of course, I could have implemented it using a simple multi-line text box for the XML entry, but that would mean that I wouldn't have nice things like syntax highlighting (for XML) and nice (auto) indentation.

On the desktop, I'm not familiar with any free Windows Forms editor controls that are capable of syntax highlighting.  But on the web side, there are several free, open source script libraries at our disposal.  For example, CodePress, EditArea, and CodeMirror.

I chose CodeMirror for this application as it was the simplest library that met my needs.

There really aren't any tricks to this aside from getting the URL correct.  In this case, I have my static HTML content in a directory in my project:

And I set the content files to "Copy always" in the properties pane for the files so that they get copied to the output directory of the project.  To set the correct path, I find the executing directory of the application and set the URL properly:

protected override void OnLoad(EventArgs e)
{
    if (!DesignMode)
    {
        string path = Path.Combine(
            Environment.CurrentDirectory, 
            "HTML/input-page.html");
        path = path.Replace('\\', '/');

        _inputBrowser.Url = new Uri(path);
    }

    base.OnLoad(e);
}

Note that I check if the control is in design mode (the designer throws an error if you don't do this since the path points to Visual Studio's runtime directory instead of your applications output).  Now all that's left is to get the script and style references correct in your HTML page:

<script src="../HTML/CodeMirror/js/codemirror.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="../HTML/CodeMirror/css/docs.css" />  

And in your script:

<script type="text/javascript">
    var editor = CodeMirror.fromTextArea('code', {
        height: "210px",
        parserfile: "parsexml.js",
        stylesheet: "../HTML/CodeMirror/css/xmlcolors.css",
        path: "../HTML/CodeMirror/js/",
        continuousScanning: 500,
        lineNumbers: true,
        textWrapping: false
    });
</script>

The final part is getting your Windows forms code talking to the Javascript in the browser.  In this case, I've written some simple Javascript that interacts with the editor control:

<script type="text/javascript">
    var $g = document.getElementById;

    function resize(height) {
        var textArea = $g("code");

        // Get the iframe.
        var editor = textArea.nextSibling.firstChild;

        editor.style.height = (height - 1) + "px";
    }

    function reset() {
        editor.setCode("");
    }

    function addContent(data) {
        var code = editor.getCode();

        editor.setCode(code + data);

        editor.reindent();
    }

    function setContent(data) {
        editor.setCode(data);

        editor.reindent();

        // Scroll to bottom.
        editor.selectLines(editor.lastLine(), 0);
    }

    function getContents() {
        return editor.getCode();
    }
</script>

From the application code, we can call these script functions using the InvokeScript method:

private void AddStreamMessageInternal(string data)
{
    if (_streamBrowser.Document != null)
    {
        // Get the contents
        string code = (string) _streamBrowser.Document.InvokeScript(
            "getContents", new object[] {});

        code = code + data;

        code = code.Replace("><", ">\r\n<");

        _streamBrowser.Document.InvokeScript(
            "setContent", new object[] {code});
    }
}

private void AdjustSize()
{
    // Call a resize method to change the HTML editor size.
    if (_streamBrowser.Document != null)
    {
        _streamBrowser.Document.InvokeScript(
            "resize", new object[] {_streamBrowser.ClientSize.Height});
    }
}

public void RefreshBrowserContents()
{
    if (_streamBrowser.Document != null)
    {
        _streamBrowser.Document.InvokeScript(
            "reset", new object[] {});
    }
}

Awesome! You can see that I can both pass arguments into the Javascript functions and read the return data from the Javascript function as well.  The big win is that now you can take advantage of your favorite Javascript utilities in your Windows Forms applications.

# Thursday, June 04, 2009

QOTD

Thursday, June 04, 2009 6:16:25 PM UTC

A friend passed along a quote the other day:

So I just picked up this book today....and found this quote in the forward: "The truth of the matter is, if you need to “save” your job, I can’t help you. This book isn’t about struggling to maintain the level of mediocrity required not to get fired. It’s about being awesome. It’s about winning. You don’t win a race by trying not to lose. And you don’t win at life by trying not to suck. Fortunately, the content of the book has never been about trying not to suck. I can’t think that way, and neither should you."

Thanks, Dan!

# Thursday, May 28, 2009

Visitor Pattern In C# 4.0

Thursday, May 28, 2009 7:19:17 PM UTC

I've blogged about the Visitor pattern previously and using double dispatch to resolve .NET's inherent inability to resolve methods by parameter type at runtime.

As I was reading about C# 4.0's dynamic types, I started to wonder if this would mean that we could finally get a more concise implementation of the pattern.  My hunch was correct.

Here is the updated code listing (key changes bolded):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;

namespace VisitorPatternConsole
{
    public class Program
    {
        private static void Main(string[] args)
        {
            // NOTE: Using dynamic collections.
            Collection<dynamic> visitors 
				= new Collection<dynamic>();
            Collection<dynamic> pets 
				= new Collection<dynamic>();
 
            // Initialize the pets
            pets.Add(new Fish());
            pets.Add(new Dog());

            // Initialize the visitors
            visitors.Add(new Feeder());
            visitors.Add(new Walker());

            // Visit each of the pets.
            foreach (dynamic pet in pets)
            {
                foreach (dynamic visitor in visitors)
                {
                    visitor.Visit(pet);
                }
            }

            // Check the results.
            foreach (Pet pet in pets)
            {
                Console.Out.WriteLine(pet.GetType().Name);
                foreach (String note in pet.Visitors)
                {
                    Console.Out.WriteLine("\t{0}", note);
                }
            }
        }
    }

    /// <summary>
    /// Handles the base cases.
    /// </summary>
    public abstract class AbstractVisitor
    {
        public void Visit(Pet pet)
        {
            pet.Visitors.Add(
                "Not supported for this type of pet...");
        }
    }

    /// <summary>
    /// Concrete visitor, a pet feeder.
    /// </summary>
    public class Feeder : AbstractVisitor
    {
        public void Visit(Dog dog)
        {
            // Feed the dog
            dog.Visitors.Add("Fed the dog");
        }

        public void Visit(Fish fish)
        {
            // Feed the fish
            fish.Visitors.Add("Fed the fish");
        }
    }

    /// <summary>
    /// Concrete visitor, a pet walker.
    /// </summary>
    public class Walker : AbstractVisitor
    {
        public void Visit(Dog dog)
        {
            dog.Visitors.Add("Walked the dog");
        }

        // Fish can't be walked!
    }

    /// <summary>
    /// Base class for pets.
    /// </summary>
    public abstract class Pet
    {
        private readonly Collection<string> visitors;

        public Collection<string> Visitors
        {
            get { return visitors; }
        }

        protected Pet()
        {
            visitors = new Collection<string>();
        }
    }

    /// <summary>
    /// A pet fish.
    /// </summary>
    public class Fish : Pet { }

    /// <summary>
    /// A pet dog.
    /// </summary>
    public class Dog : Pet { }
}

Here is the output:

Wow, just when I thought dynamic was going to suck :-D

What is somewhat interesting is that both collections have to be declared of type dynamic; I'm still mulling this over, but it's not clear why it doesn't work if only one of the collections is declared dynamic (I figured that it should have worked if the visitors collection alone was declared dynamic).

# Wednesday, May 27, 2009

Random DevTools Entry #017

Wednesday, May 27, 2009 10:27:01 PM UTC

In software development, it's incredibly useful to be able to visualize your code interactions using sequence diagrams and data flow diagrams and what not.  Not only is the visualization a plus, the act of generating one helps tremendously in terms of working out the outline of the logic that you need to implement.  One of the biggest problems I've come across in this area are the tools: they're simply too heavy and too complex for general diagram drawing tasks in addition to being generally rigid as well.

Today, as I was about to download and install Visio, I decided to spend a few minutes checking to see if there was a web alternative.  Enter websequencediagrams.  This is an all around awesome little tool to add to your toolbox.  Not only is it free (free is always awesome), it's text based.  At first blush, this seems terrible; there's a whole syntax to learn and lots of typing.  But the syntax is incredibly easy and simple while powerful and easy to understand.

Here's an example (I've bolded the syntax to make it easier to distinguish):

Browser->App: HandleSearchClickEvent()
App->Service: ExecuteSearch(keyword)
activate Service
Service-->App: (return results)
deactivate Service
App->App: RenderResults(reseults)
note right of App:
    render URL with
    keyword in query string.
end note
App-->Browser: HTML
Browser-->Office: click:
http://../name.docx?term=keyword
Office->AddIn: ThisAddIn_Startup()
AddIn->AddIn: Check for search term
note left of AddIn:
    ActiveDocument.FullName will
    contain the query string.  This
    can be extracted with a regular
    expression
end note
AddIn->AddIn: Execute find

And here is the result:

There are also a variety of pre-defined styles you can choose to render your diagram.  It's all sorts of awesome and a real time-saver compared to traditional tools.  I personally love that it's text based; I've found that when working with Visio (and other such tools), more than half of my time is spent arranging things just to get them to line up.  A text based approach works well for sequence diagrams and gets rid of that layer of unnecessary complexity.

# Wednesday, March 11, 2009

Integrating NaturalDocs With SyntaxHighlighter (For The Win!)

Wednesday, March 11, 2009 3:29:21 PM UTC

In working on some SDK-style developer documentation for FirstPoint, it occurred to me that we needed a way to create some all encompasing documentation which covered not only our code base, but also our markup, our JavaScript controls, CSS, and so on.  We currently have most of this stuff in Trac wiki pages, which is a great place to put them, but our Trac deployment is going away and being replaced by Jira...or so I'm told.

In light of this, we needed a way to create portable, useful, developer documentation which included a mix of some auto-generated content and hand crafted documents as well (how-to's and stuff, which would be really terse if placed in code comment).  There aren't really any do-it-all tools, but I stumbled across NaturalDocs which seemed to be the most well rounded tool of the ones I looked into (i.e. JSDocs, YUI Doc, a few others - it started off as a search for a tool for documenting UI conventions, markup, and script usage for our team) because of the fact that it allowed for the inclusion of loose .txt files which would essentially be treated like wiki pages.

You can see an example of the output at the MapQuest API documentation site.

One of the main reasons I liked NaturalDocs is because of the support for code blocks and how easy it is to write them in the loose text files.  However, the downside is that the generated output is pretty...boring.  Here's an example:

You can see that it has no intelligence with regards to the language.  Doing a little digging around the 'Net, I found a ticket for a request for support for syntax highlighting.  So I ended up rolling my sleeves up and solving this myself.  I decided to integrate against the SyntaxHighlighter JavaScript library since I've used it previously and I like the output :-).

Here is the end result:

I hadn't touched Perl in quite some time (since college), so I had to dig around in there for a bit but I was able to integrate it after a few hours of flailing.

The steps required are as follows (these steps assume you use framed mode):

In the file FramedHTML.pm, you will need to add the following lines to the method BuildFile after the call to $self->ClosingBrowserStyles():

. '<script language="javascript" src="' . $self->MakeRelativeURL($outputFile, $self->HighlighterShCore(), 1) . '"></script>'
. '<script language="javascript" src="' . $self->MakeRelativeURL($outputFile, $self->HighlighterShBrushCSharp(), 1) . '"></script>'
. '<script language="javascript" src="' . $self->MakeRelativeURL($outputFile, $self->HighlighterShBrushXml(), 1) . '"></script>'
. '<script language="javascript" src="' . $self->MakeRelativeURL($outputFile, $self->HighlighterShBrushCss(), 1) . '"></script>'
. '<script language="javascript" src="' . $self->MakeRelativeURL($outputFile, $self->HighlighterShBrushJs(), 1) . '"></script>'
. '<script language="javascript" src="' . $self->MakeRelativeURL($outputFile, $self->HighlighterShBrushSql(), 1) . '"></script>'
. '<script language="javascript">'
. 'SyntaxHighlighter.config.clipboardSwf = "' . $self->MakeRelativeURL($outputFile, $self->HighlighterClipboard(), 1) . '";'
. 'SyntaxHighlighter.all();'
. '</script>'

Next, to support the new getters, you will need to modify HTMLBase.pm and add the following lines:

sub HighlighterShCore
	{
	my $self = shift;
	return NaturalDocs::File->JoinPaths($self->JavaScriptDirectory(), 'shCore.js' );
	};

sub HighlighterShBrushCSharp
	{
	my $self = shift;
	return NaturalDocs::File->JoinPaths($self->JavaScriptDirectory(), 'shBrushCSharp.js' );
	};

sub HighlighterShBrushXml
	{
	my $self = shift;
	return NaturalDocs::File->JoinPaths($self->JavaScriptDirectory(), 'shBrushXml.js' );
	};

sub HighlighterClipboard
	{
	my $self = shift;
	return NaturalDocs::File->JoinPaths($self->JavaScriptDirectory(), 'clipboard.swf' );
	};

sub HighlighterShBrushCss
	{
	my $self = shift;
	return NaturalDocs::File->JoinPaths($self->JavaScriptDirectory(), 'shBrushCss.js' );
	};

sub HighlighterShBrushJs
	{
	my $self = shift;
	return NaturalDocs::File->JoinPaths($self->JavaScriptDirectory(), 'shBrushJScript.js' );
	};

sub HighlighterShBrushSql
	{
	my $self = shift;
	return NaturalDocs::File->JoinPaths($self->JavaScriptDirectory(), 'shBrushSql.js' );};

You should add more to handle whatever syntaxes you need to handle.

By default, the code blocks are generated as <blockquote><pre></pre></blockquote>.  To support SyntaxHighlighter, we'll need to change this to allow customizing the class name on the <pre> tag.  I decided to use the suggested syntax for including this in the markup: (start code <language>).  For example: (start code js).  The first module that we have to modify to support this is Native.pm.  In the method FormatBody, I made the following change to support the extra token:

# If the line looks like a code tag...
# [CHUCK] ORIGINAL: elsif ($commentLines->[$index] =~ /^\( *(?:(?:start|begin)? +)?(?:table|code|example|diagram) *\)$/i)
elsif ($commentLines->[$index] =~ /^\( *(?:(?:start|begin)? +)?(?:table|code|example|diagram) *((?:\w+)?) *\)$/i)
	{
	if (defined $textBlock)
		{
		$output .= $self->RichFormatTextBlock($textBlock);
		$textBlock = undef;
		};
	# [CHUCK] ORIGINAL: $output .= $tagEnders{$topLevelTag} . '<code>';
	$output .= $tagEnders{$topLevelTag} . "<code class=$1>";
	$topLevelTag = TAG_TAGCODE;
	}

You can see that I've introduced a capturing group to the regular expression to grab the language type (matching SyntaxHighlighter's language strings).  The next step is to modify the generation of the intermediate <code> tag to include a class attribute. 

If you stop here, the output generation doesn't work correctly since this only affects the intermediate output.  We need to jump to HTMLBase.pm and modify the method NDMarkupToHTML so that we can generate the proper tag structure.  Here are my modifications:

# [CHUCK] ORIGINAL: my @splitText = split(/(<\/?code>)/, $text);
my @splitText = split(/(<\/?code *(?:class=[^\>]+)?>)/, $text);

while (scalar @splitText)
	{
	$text = shift @splitText;

	if ($text =~ m/^(?:<code *(?:class=([^\>]*))?>)$/i)
		{
		$output .= "<blockquote><pre class=\"brush: $1\">";
		$inCode = 1;
		}

You can see that here, I changed the regular expression used to split the intermediate output into chunks to properly split on the new markup structure.  In the if-statement, I changed the eq comparison to a regular expressoin match with a capturing group and inserted that into the output <pre> tag (for the win!).

Now be warned: this is not a complete fix.  While this addresses the major issue, generation of the proper output, I did not make changes to copy the image files and JavaScript files required by SyntaxHighlighter (sorry, you're going to have to do that yourself :-P).  The next set of steps are to:

  1. Copy the images associated with SyntaxHighlighter to the \output\styles directory (or whereever you like).
  2. Copy the scripts required for SyntaxHighlighter to the \output\javascript directory.
  3. Modify the paths in the CSS for the icons used with SyntaxHighlighter (in the shCore.css file).

Of course, the themes and CSS files are easy to include since you can specify those at the command line.

That's all there is to it!  Happy documenting!  I've attached sample files (including the modified source) for SyntaxHighlighter 1.5 and 2.0.

natural-doc-sh2.0.7z (315.01 KB)
natural-doc-sh1.5.7z (281.7 KB)

# Wednesday, January 07, 2009

The Coolest Thing I've Read This Year

Wednesday, January 07, 2009 12:25:33 AM UTC

Well, so far anyways:

http://www.telegraph.co.uk/scienceandtechnology/science/sciencenews/3981697/Scientists-plan-to-ignite-tiny-man-made-star.html

While it has seemed an impossible goal for nearly 100 years, scientists now believe that they are on brink of cracking one of the biggest problems in physics by harnessing the power of nuclear fusion, the reaction that burns at the heart of the sun.

In the spring, a team will begin attempts to ignite a tiny man-made star inside a laboratory and trigger a thermonuclear reaction.

As a side note:

Until now, such fusion has only been possible inside nuclear weapons and highly unstable plasmas created in incredibly strong magnetic fields. The work at Livermore could change all this.

The sense of excitement at the facility is clear. In the city itself, people on the street are speaking about the experiment and what it could bring them. Until now Livermore has had only the dubious honour of being home of the US government’s nuclear weapons research laboratories which are on the same site as the NIF. 

# Thursday, November 06, 2008

44

Thursday, November 06, 2008 5:55:32 AM UTC

One of my favorite quotes from the news coverage:

"[Barack Obama] is the first 21st century president."

- Chuck Todd, MSNBC

What our peers across the pond think:

They did it. They really did it. So often crudely caricatured by others, the American people yesterday stood in the eye of history and made an emphatic choice for change for themselves and the world. Though bombarded by a blizzard of last-minute negative advertising that should shame the Republican party, American voters held their nerve and elected Barack Obama as their new president to succeed George Bush. Elected him, what is more, by a clearer majority than one of those bitter narrow margins that marked the last two elections.

Check out the comments, too. 

jigan:

Truly a beautiful moment. I feel like I have witnessed a historic moment that, unlike 9/11 and the invasion of Iraq, is actually very positive.

I think in many ways it transcends the politics of Democratic/Republican and race. It's a repudiation of the "spend a little time on the dark side" years of Cheney.

As a Brit ex-pat living in the US, I'm finally tempted into exploring citizenship. Hey, maybe there's even a God...?

sidewaysantelope:

Congratulations, America, I'm truly in envy of your country right now. Oh to be so politically energised, so motivated, so...ready to do something about the world, and not in a Daily Mail, let's sack all comedians kind of way. Positive energy. I'd almost forgotten humans were capable of it, and I don't say that with any exaggeration.

Worth staying up for.

EssemD:

bloody hell... what a country.. after all these years living here as an ex-pat, 28, I actually want to be an American. It's 10 pm.. the kids stayed up to watch Obama's speech... my teen and i just sat there and let out tears flow.. even my 6 yr was moved to tears....

boywithaproblem:

From Adelaide, South Australia I congratulate all of those who voted for Obama. I'm inspired by this and it's made me reassess my perception of the US. I had tears in my eyes today. A historic day for the US and the rest of the world. Wonderful.

Mervo:

Obama's election gives rise to a depressing thought: his brilliance as a candidate is nowhere to be found in British politics. Our election in whenever is going to be a gloomy event.

Nevertheless, today is a good day. Congratulations America.

Holiver:

Sometimes I wish I was an American, in those moments where they seem to stand apart from us. Their endless optimism and their endless desire for change and movement and history. They make history, where as an English woman I feel I am just you know in it. I don't know that much about life, or what it takes to be a successful adult because well I am just a student, full of that optimism and promise and you know I like to watch Jeremy Kyle. I sat up and watched Obama become the 44th American President, I watched Americans cry and I cried and I believed in him and his words and the fact that really, this is going to have an impact on us all and to say that we are not involved is really fruitless.

Derk:

For all the bad things people say about American there are moments in there history where the prove they are the greatest country in the world. When you see that the UK may vote for posh Eton toff as our next leader and their are less ethnic MP's in Parliment than the percentage of enthic people in the country, then the UK can no longer claim to be more developed than the USA.

The USA is changing from a fist to brain. Good choice America.

I think the world just let out a huge sigh of relief; we can finally move forward and really move into the 21st century as a leader not by our might, but by the power of our example.

# Thursday, August 28, 2008

QOTD

Thursday, August 28, 2008 1:20:47 AM UTC

From the DNC:

"People around the world have always been impressed by the power of our example, not the example of our power."

"In this case, the third time is not a charm."

-- Bill Clinton

"Barack Obama knows that any country that out-teaches us today, will out-compete us tomorrow."

-- Joe Biden

Smooooth.

# Thursday, May 29, 2008

Awesome News For Web UI Developers

Thursday, May 29, 2008 12:58:04 PM UTC

Google's new AJAX Libraries API should help quite a bit with developing web UIs.  From Dion Almer:

I just got to announce the Google AJAX Libraries API which exists to make Ajax applications that use popular frameworks such as Prototype, Script.aculo.us, jQuery, Dojo, and MooTools faster and easier for developers.

Whenever I wrote an application that uses one of these frameworks, I would picture a user accessing my application, having 33 copies of prototype.js, and yet downloading yet another one from my site. It would make me squirm. What a waste!

When I joined Google I realised that we could help out here. What if we hosted these files?

Read more about it here.

By the way, I caught this little tagline from ajaxian:

Because after 10 years, we're still hand-coding.

There's a lot to be said for the productivity gained from drag-&-drop RAD tools, but ultimately, software engineering is still at a stage where craftsmanship matters (a lot) and there is no substitute for a skilled craftsman.

# Tuesday, March 25, 2008

Photos And Notes From NYIAS 2008

Tuesday, March 25, 2008 5:20:27 PM UTC

The highlight of this year's show, for me, was definitely the Nissan GT-R. It's quite possibly one of the most anticipated mass produced vehicles to be released in recent years.

I was also looking forward to the new Maxima. Admittedly, it looks way better in person than it does in photographs; you can't really capture how low slung and aggressive it looks.

It was also an opportunity for my wife and I to explore the 2009 Murano. We haven't made it a priority to stop by the dealership to check one out, but it is definitely a nice upgrade from the outgoing model with a price upgrade to match. The Murano is much more luxurious now and looks surprisingly good in person. I didn't think I'd like the new shape -- particularly the grill -- but I have to say that it looks great in person.

I was hoping to see the Mazda 2, but unfortunately, it wasn't at the show.

As far as the American manufacturers go, I have to say, I like where GM is headed. On a recent trip, I was upgraded to a new Malibu and I'm thoroughly impressed. It may have been the first time I've driven a product from the Big Three and actually could imagine myself purchasing the vehicle. I also really like what they've done with the CTS and the CTS Coupe concept...fantastic work.

Click here to go to the gallery.

# Wednesday, February 13, 2008

Adventure Time

Wednesday, February 13, 2008 8:52:34 PM UTC

I'm pretty sure this is the most awesome thing I've seen in a long time:

# Sunday, February 10, 2008

Ants Boggle My Mind

Sunday, February 10, 2008 6:47:17 AM UTC

I'm pretty sure that if they were bigger, humans and primates would never have made it to the top of the food chain.  Check out this awesome video:

Awesome.

# Thursday, January 03, 2008

Most Awesome Pic You'll See This Week...

Thursday, January 03, 2008 6:38:59 AM UTC

Maybe even month.

Check out the full story here.

# Thursday, December 27, 2007

I'm Not Sure If My Taste Buds Are Ready...

Thursday, December 27, 2007 9:40:36 PM UTC

This is where it's at:

85% is for pansies; real men eat 99%!

Got it for Christmas...I'm about to give it a go.

Update: If I had to describe the taste, I would go with "solid black coffee", if there were such a thing (not like a coffee bean, but brewed coffee).  The texture is a bit chalky/pasty as it melts in your mouth, but not unpleasant.  Definitely a unique experience for real chocolate lovers.

# Wednesday, December 12, 2007

Verizon FiOS: DAAAAAMN!1!!one!

Wednesday, December 12, 2007 10:58:50 PM UTC

Verizon FiOS is like:

Wow...

Screencap from FileZilla server...

# Wednesday, October 24, 2007

Nissan GT-R: Hawtness

Wednesday, October 24, 2007 5:03:20 PM UTC

http://www.autoblog.com/photos/2008-nissan-gt-r-live-reveal/454772/full/

I actually had a dream that I was driving one of these the other day.

This beast is sexy...damn sexy.

Update: See my NYIAS 2008 gallery for more pictures from the show.

# Monday, October 15, 2007

Science: It Works, Bitches!

Monday, October 15, 2007 2:39:06 PM UTC

On a recent late spring trip, my wife and I visited Hyannis, Massachusetts.  During some free time, we had a chance to walk down to the beach and take a stroll.  We were greeted at the beach by a thick mist and an unbelieveable wind blowing off of the ocean.

About a week or so later, I was reading some articles regarding how Edward Kennedy pulled the NIMBY card regarding the erection of a massive array of wind turbines off of the coast of Hyannis as a source of alternative energy.

The benefits for the region seems clear:

Environmentalists say the $770 million wind farm -- enough to power 3 out of every 4 homes in New England's most coveted vacation region -- would be a crucial step toward clean, renewable power, without burning a single barrel of Middle Eastern oil, and at a time when scientists are issuing increasingly urgent warnings about the effects of global warming.

But the opposition from the politicos seems to be avid.

Massachusetts' Republican Gov. Mitt Romney and Democratic Sen. Edward Kennedy, whose family compound in Hyannis would look out at the wind farm -- have warned that the unsightly turbines would depress property values and damage the local economy, which relies heavily on tourism.

I guess some would consider an array of wind turbines to be "unsightly".  But to me, it is a stunning view of progress and scientific achievement of the highest order; it is a beacon into the future in which we learn to live with nature and not in spite of it.

So the question is, how can we effectively tap the awesome power of wind in a cost effective manner without touching a nerve with the NIMBY crowd?

Enter Shawn Frayne's windbelt concept.  It is an idea so simple in its execution and so elegant in its design, that it's nearly indistinguishable from magic (of course, there's solid science behind it as well).

Frayne’s device, which he calls a Windbelt, is a taut membrane fitted with a pair of magnets that oscillate between metal coils. Prototypes have generated 40 milliwatts in 10-mph slivers of wind, making his device 10 to 30 times as efficient as the best microturbines.

Science: It Works, Bitches!

# Saturday, May 19, 2007

Blizzard Announces Starcraft 2!!!

Saturday, May 19, 2007 6:10:38 AM UTC

:-O

3:07 - Showing gameplay footage - Looks like protoss ships - floating over asteroid/ base structure - entering protoss ase - similar looking buildings - vespene gas still in the game - character pane shows up on right side - some protoss guy - shifts to terran bases floating on rockets over same type of territory - sill collecting crystals as resources - marines load out. Dustin is actually playing the game - nothing in the game is final.

3:05 - Morheim says everyone eager to see actual game - going to show actual gameplay - bringing up SC2 lead designer. Dustin Browder.

3:00 - FMV sequence in a spaceship - looks Terran - zooming in on a metal door - door opening - reveals a guy with a cigar in chains - prisoner - door shuts behind him - there's so much bass the room is shaking - guy steps into some kind of metallic devicce - legs are strapped in - guy rising toward ceiling - Korean text on screen got people very excited - another part of the machine is dropping metal arms on him - machine whirring - applying armor to his torso - extremly detailed visuals here - now guy is strapping on gloves - armor is molding together - seems like a Terran marine - rockets turn on - zerg now onscreen - Marine delivers a line - StarCraft 2 officially announced.

2:57 - Showing another movie, presumably of game footage.

2:56 - Video over - Morhaime about to make announcement.

All I can say is: FINALLY!!

# Monday, May 14, 2007

Recycling Styrofoam

Monday, May 14, 2007 4:43:37 PM UTC

I came across an interesting white paper from Sony on recycling styrofoam.

Additionally, and this is an important point, the evaporated limonene is returned to a clean liquid state and can be reused any number of times. This system can be said to be a thoroughgoing recycling system which generates no waste.

Not only is the process use fully recyclable (and natural (linoene being extracted from the peels of oranges)) raw materials, it also does not degrade the chemical qualities of the original substance:

Since thermal processing is known to degrade the properties of some materials, one might wonder if this heating is safe. However, oxidation and breakdown of the polystyrene is suppressed since limonene oxidizes before polystyrene.

In addition, from a carbon output perspective:

Overall, the limonene method has CO2 emissions of about 0.6 kg of CO2 per 1 kg of styrofoam recovered. This is the smallest of all the methods, and about 1/3 the emissions associated with new polystyrene synthesis.

I hope we see this process becoming more widespread in the future.

# Wednesday, April 11, 2007

Cephalopods!

Wednesday, April 11, 2007 3:08:25 AM UTC

I'm making this post just because cephalopods are awesome.

# Friday, January 19, 2007

Well I'll Be Damned...

Friday, January 19, 2007 6:26:54 PM UTC

Just a few days ago, I was praising Microsoft hardware and support after calling to get my broken IntelliMouse replaced.

So today when I got back from lunch, to my surprise, I found a huge package sitting on my front steps.

new-keyboard.jpg

Awesome!  They sent a whole new set.  Now I have an extra wireless keyboard.

I'm heading out to Utah in 5 hours, so I'll leave this week on a random note:

quincy-log.jpg

For those of you who have been following along, this is my lizard Quincy, who just a few months ago, was the size of my pinky.

# Tuesday, January 16, 2007

I <3 Microsoft Hardware

Tuesday, January 16, 2007 8:19:40 PM UTC

I know I'll probably come across like a "fanboi", but I really, really like Microsoft's keyboards and mice.  I'm currently using the Natural Ergo 4000 keyboard and it's awesome (you can read my review of it at Amazon).  It's the most comfortable "mainstream" (as in anyone can pick it up in Staples or Office Max) keyboard out there for extended typing usage.  I haven't had cramps or pain in my pinkies for months (CamelCase will do that to you...)!  Months!  And I'm in front of the computer for a good 8-10 hours a day!

Prior to this, I was rocking a Wireless Desktop Pro keyboard/mouse set (which I also reviewed at Amazon).  While quite comfortable in its own right, cannot compare to my current setup of the aforementioned 4000 and Logitech MX Revolution (along with UberOptions).

But anyways, I replaced the mouse included with the WDP set a few months back as the scroll wheel started to gum up and would not scroll or click anymore (damn cats >.<).  So I finally decided to call Microsoft today and see if I could get a replacement since the receiver and keyboard are both still fine.  Fully ready to pay for the replacement and the shipping cost, to my surprise,

  1. The service rep. that answered my phone call was American and spoke "normal" English,
  2. The service rep. was polite and friendly,
  3. The service rep. hooked it up with a replacement mouse, no questions asked (well, except for the standard ones) with no charge at all to me...no shipping, no replacement fee,
  4. The confirmation was sent to me in under an hour...

Yes indeed.  I <3 Microsoft hardware :-D (and great support to boot).

# Sunday, January 14, 2007

Updated Site Layout

Sunday, January 14, 2007 7:25:06 AM UTC

I'm just too lazy to update the blogging engine :P

But at least now, the site renders correctly in FF and IE.

Now what to do about those other link items...

# Thursday, January 11, 2007

Final Fantasy 12 - The Movie

Thursday, January 11, 2007 6:44:12 PM UTC

Or rather, the cut scenes (in game and pre-rendered) from the game.

If you're like me, you really don't have the time to spend plunking down in front of your TV to play 40-60 hour games anymore.  Most of my gaming time these days is spent with the DS (the greatest gaming platform of this generation?).

But I can't shake my adoration for the Final Fantasy series, even though sometimes it seems like it's been milked to death.  The game always features some of the most creative character, architectural, landscape, and creature designs.  In this respect, Final Fantasy XII does not disappoint...some of the bosses and their specials are just jaw dropping.  It blows my mind that they were able to create this world with such detail, creativity, richness, and beauty.

In any case, if you want to skip to the good stuff, then hop on over to videogamesheaven.net and check out the FFXII cutscenes.  It's worth watching through the whole thing.  I actually think it's fairly well written and the voice acting isn't terrible (Vaan is possibly the worst one but Fran, Balthier, Basch, and Penelo are all great).

On some level, the main theme relates to one of the central themes of the Blade of the Immortal series: how does one come to grips with the desire for revenge and the reality of bloodshed that such a path would entail and the cycle of hatred that is driven by such actions? 

# Wednesday, November 22, 2006

EditPlus Rocks!

Wednesday, November 22, 2006 9:19:38 PM UTC

Not that EditPlus didn't rock before, but it's rockin' even harder now with the release of version 2.3!

Two of the biggest features are the addition of indentation based collapsable code regions (I've already got collapse/expand hotkeyed!) and "Copy as HTML" which allows you to copy the contents of the workspace as HTML which retains the formatting and your environment colors!  Awesome!  This makes it perfect for writing up web based documentation.

Aside from this, 2.3 also introduces other features like the new "Find in Directory" command you can use on the directory toolbar, the "View in Browser 2" command which allows you to hook up IE and FireFox (or IE6 and IE7) to have seamless browsing with one and external launch with the other, and various bug fixes with the FTP component.

All in all, an awesome version that has some loooong overdue features.  If you don't have it already, nows the time to download it!

# Saturday, November 04, 2006

Spirit and Opportunity (a Tribute)

Saturday, November 04, 2006 7:47:25 PM UTC

16,500,000,000.

16.5 Billion US dollars.

That's the budget assigned to NASA, all of NASA, for 2006. With this relatively miniscule budget, some of the brightest engineers in the world are asked to scrape by on what amounts to table scraps. These engineers are tasked with performing seeming incredulous feats, when we really consider the scale of things and put their tasks into perspective.

I saw an amazing picture the other day. It was a shot of the space shuttle launching from Earth, as seen from space by our astronauts in the ISS. The plume of smoke, from space, looks oddly organic: as if a tendril from a microscopic organism, reaching out into the space around it, feeling for a safe path. It’s a visual that I don’t think I will ever forget in its uniqueness and the amazing perspective that it provides (both literally and metaphysically).

What happened to the days when our superiority in space exploration was a well of national pride? What happened to the dreamers that dreamt of men on the Moon and voyages to Mars? Nowadays, once relatively technologically backwards countries like China and India are increasingly investing more money into their space programs as it is a source of national pride and profit in some cases:

Operating on a fraction of NASA’s budget, the ISRO has turned itself into the Energizer Bunny of space programs – it just keeps launching and launching and launching. Since 1975, the agency has lofted 43 satellites into orbit, 20 of them from Indian soil. An extraordinary string of successes – 12 consecutive launches without a failure – has attracted European and Asian investors looking to capitalize on growing demand for satellite communication and reconnaissance. A few big deals could turn the ISRO into a moneymaker, boosting India’s prestige… (Scott Carney, Wired, 11/2006)

It’s amazing when you start to wonder what could be if even half the amount of money spent on the Iraq war were given to NASA. What amazing places could we visit? What incredible sights could we see? What mind-shattering breakthroughs would we find in the fields of astronomy, physics, astrophysics, and our understanding of our existence could we encounter in the deeps of space?

I put a lot of blame on the current administration; it is one that has publicly cast doubt on and often put science to the wayside. It is one that has sat by abjectly while controversy swirled, allowing false prophets to cast doubt on evolution, the separation of church and state, and the importance of the science overall.

As I was reading my December issue of Car and Driver, I came across an article on the twin mars rovers, Spirit and Opportunity, and the amazing journey that it has made. These machines are our proxies in the exploration of our solar system, providing us with an amazing view of one of the most promising planets insofar as human habitability goes.

There is something incredibly – and perhaps this is not the best term to describe this – awesome about the idea that this little man made machine is rolling along, millions of miles from the nearest human being.

Millions.

I think the public, in general, has a hard time understanding such scale and take it for granted.

Thus far in human history, about two thirds of the 36 Mars probes have been lost en route or in the creation of smoking holes on the surface… (Aaron Robinson, Car and Driver, 12/2006)

What’s perhaps more enlightening is the following quote from Mark Maimone, a Jet Propulsion Laboratory mission planner:

As long as NASA keeps shoveling in the case – an additional $84 million since touchdown – “The pressure is still on to make use of this national resource”… (Aaron Robinson, Car and Driver, 12/2006).

It is quite incredible when you consider how much of our research of space is done on technology older than I am (25). Our shuttles are from a bygone error using computers which are probably outclassed by most smartphones these days. Of this, Robinson points out:

Because Congress is overdue in authorizing bandwidth upgrades to the Apollo-era global array of radio dishes called the Deep Space Network, the team gets only two brief time slots per day to phone the rovers.  (Aaron Robinson, Car and Driver, 12/2006).

It’s sad to come to this realization. The space program, to me, is a vehicle for inspiration. It should be a source of national pride. A source of dreams – impossible dreams – for a new generation of scientists and engineers. A well from which we draw inspiration for our students and our people. Indeed, it’s an amazing resource, one who’s monetary benefit cannot be measured or counted.

Perhaps the coolest part, at least to me, about the Mars rovers, is their “evolution” in the form of software upgrades. The Car and Driver article also speaks of the amazing journey and longevity of the rovers. Once thought to last perhaps only 90 days or so, the rovers have now surpassed a lifetime of ten times that. Like Replicants in Blade Runner, Man has created this proxy knowing that it would only live for short period of time and here it is, fighting to survive (well, with the help of some human caretakers, of course).

# Tuesday, October 24, 2006

Some Very Nifty JavaScripting

Tuesday, October 24, 2006 2:37:14 PM UTC

So I came across a video on YouTube for a web calendar application called Scrybe.

I was at first unimpressed.  "Meh, another web calendar application."  But you know as with all things that get reinterpreted time and again, Scrybe brings its own flavor to the game.

I think the first thing I noticed is how polished the application was.  Obviously, a lot of detail was put not only into thinking through the functionlity, but also into how the UI is presented to the user.  It's a very simple and yet compelling UI that keeps it nice and clean.  Outlook seems...cluttered by contrast.

While most of it is standard fare for web calendars with slightly better eye candy, there are a few standout features.

One of the neat things that is first introduced in the video is offline synching capabilities.  I can only guess that this is using local cookies with timestamped data which is sent back to the server the next time the client connects.  A very cool idea that I never would have thought of using.

The second neat idea is the "thought stream" generation (or should I use the term "tracking"?).  It's a nifty idea to allow simple content generation from scattered resources into a single, continuous document that allows you to aggregate your thoughts together (as opposed to say RSS feeds, which you would use to aggregate the thoughts of others).  It looks like it's using some sort of browser plugin for this or it could be a frame/iframe toolbar.  In any case, it's a cool concept if they can add some more functionality to it (would be cool to kind of have linked thought streams on similar topics so you could follow random thought streams to kind of discover things that you otherwise would never have seen/thought of in the context of a particular subject).

The third really neat (and simple!) idea is the printout, foldable calendar!  So simple yet so useful and effective for keeping users "connected" to your app.  I'm not sure if anyone else has done this yet, but if not, kudos to these guys for coming up with something so simple and useful.

Personal note: so what's the lesson here?  Start with a basic need and reinterpret it while adding your own little twists and tweaks here and there.  They don't have to be ground breaking or particularly difficult from an engineering perspective, but natural, easy to use, and useful.  Add a little pizzaz and polish and you may have a winner on your hands.

Now if they could come up with an integrated mail client as well...

# Monday, October 02, 2006

PacMan....for Excel

Monday, October 02, 2006 7:54:13 PM UTC

There's something kinda cool about creating games on platforms that weren't meant for game creation; it presents a whole set of programmatic challenges that leads one to come up with creative solutions to otherwise simple scenarios in typical gaming SDKs.  It's kind of a brain-teaser as it goes beyond typical business application programming (generally boring, tedious, repetitive, and not fun) and forces one to think about more...challenging and creative programming tasks.

For a while, I was obsessed with writing games in HTML and JavaScript (Exhibit A, Exhibit B).  Trying to write Tetris was particularly interesting as I got stuck trying to come up with a good algorithm for collision detection based on my implementation of using unordered lists to form a grid.

So I found it quite awesome that someone actually took this idea to another level and wrote PacMan...for Excel!.

My Tetris implementation is actually kind of similar in concept as it also utilizes the same basic technique of switching "cell"--in my case, list items--background colors to simulate pixels.  I actually have a more complete version somewhere on my machine, but I have no idea where it's buried :-S.

# Tuesday, September 19, 2006

More Exmplary Craftsmanship

Tuesday, September 19, 2006 12:20:01 AM UTC

Awesome...simply awesome: paper cutout art.

Jawdropping even.

More here.

From the creator:

I find the A4 sheet of paper interesting to work with, because it probably still is the most common and consumed media and format for carrying information today, and in that sense it is something very loaded. This means that we rarely notice the actual materiality of the A4 paper. By removing all the information and starting from scratch using the blank white 80gms A4 paper as basic for my creations, I feel that I have found a material which, on one hand, we all are able to relate to, and which on the other hand is non-loaded and neutral and therefore easier to fill with different meanings. The thin white paper gives at the same time the paper sculptures a fragility which underlines the tragic and romantic theme of the works.

# Saturday, September 09, 2006

This Sounds....

Saturday, September 09, 2006 6:57:08 AM UTC

Pretty freaking awesome, actually:

A half-mile below the surface of the New Mexico desert, the federal government is interring thousands of tons of monstrously dangerous leftovers from its nuclear weapons program --plutonium-infested clothing, tools and chemical sludge that will remain potentially lethal for thousands of years to come.

The berm will be implanted with magnets and radar reflectors to make it obvious that it’s not a natural formation. A structure in the center of the space and two subterranean rooms will hold detailed information on the facility, and hundreds of super-hard disks printed with pictographic danger signs will be scattered throughout its 120 acres.

"We looked at what messages had come from deep in time to the present, like the pyramids," explains David B. Givens, an anthropologist specializing in non-verbal communication who helped conceive the warning system. "It boils down to stones," he says -- the only medium so far to have established a track record of retaining messages for as long as 5,000 years.

It's kind of cool to imagine what sorts of creatures will come upon this monument in several millenia and what our world will look like then. It gets me thinking about our perspective of time; we tend to think of things as being non-transient since our life span is limited, but certainly, history shows that entire cities have been buried in natural catastrophes in the past. What will the world look like 5000 years from now when the unnatural signals emminated by this monument draws intelligent life towards it?

Pretty cool, huh?

# Monday, July 10, 2006

Zerg Rush! Kekeke! ^_^

Monday, July 10, 2006 5:32:54 PM UTC

Wow...talk about extraordinary craftsmanship:

http://www.starcraft.org/fanart/reallife3dart/1104

# Tuesday, June 06, 2006

Random DevTools Entry: #011

Tuesday, June 06, 2006 3:46:20 PM UTC

Web development in IE just got a whole lot better (well, at least for me).

Enter Microsoft's Internet Explorer Developer Toolbar (link).

This is one area where IE has been just left behind in the dust by FireFox.  But this is definitely a nifty add-on!

Just a short outline of the features:

  • Built in validation from a dropdown.  Nifty and convenient.
  • Built in onscreen ruler!  This is awesome.
  • Ability to quickly resize the window.
  • DOM browser like FireFox.

And a ton of other stuff.

If you make webpages for a living, then all I can say is: Must. Download. Now!

Note that after installing it, you have to enable it by selecting it from the View->Toolbars menu item (it's instinctive to look in the Tools menu and get baffled by the lack of new menu items).

Update: there's also a non-Microsoft, FireFox analogue.

# Tuesday, May 09, 2006

Believe!

Tuesday, May 09, 2006 4:47:20 PM UTC

My eyes just teared up (no, really...I'm still kinda all emotional inside) watching the Nintendo E3 press conference intro video...wow, incredibly moving.

Amazing.

Update: Man, the tears keep coming...I dunno...such a fanboy I guess.  Glorious day!

Asus W5F == Hawt!

Tuesday, May 09, 2006 12:50:49 AM UTC

I'm not going to go into a detailed review with performance specs and what not (they're floating around the web already, no?), but just a quick take.

Purchased the notebook last week from Geared2Play (you can find details in this thread: http://forum.notebookreview.com/showthread.php?t=52014).

Price was right and service from G2P was good (wife said the man on the line (Eddie?) was friendly and knowledgeable).

Notebook was shipped Friday and I received it today in the afternoon with a great deal of anticipation.

First of all, the W5F is gorgeous in person. Incredibly sexy and attention grabbing. Coming from an S1A previosly, the W5F is an increase in weight (S1A was incredibly light, though). However, the weight is put to good use; whereas the S1A would creak under torsional stress, the W5F is solid. This is one of the most solid notebooks I've felt in a long time. No creaking; very rigid chasis.

The screen was a big surprise. The S1A really suffered in this respect as the screen was of very poor quality in terms of brightness and dot pitch. The W5F screen is beautiful. Incredibly vivid and sharp. The pictures came out a bit grainy due to the high ISO, but trust me, the screen is incredibly sharp and the contrast is excellent. I have to admit that the widescreen format makes it seem like the screen real estate is much larger than it actually is.

Haven't tried out many of the features yet as it will be wiped and OS reinstalled (wife needs to use it at work (elementary school) on a domain). The bluetooth worked out of the box with a bit of setup (hint: to get the mouse to connect, press and hold the reset button at the bottom). The mouse was a great addition, Bluetooth no less. Unlike the S1A, W5F does not ship with a carrying case. Not a big deal as we have tons at home

Setting up the network was a trial. It was pretty confusing (see the screenshots below) as I could get a signal and an IP from the router, but I couldn't access the network (no ping response from the router even). I had to fiddle around and reboot the machine to get it to work. The Intel software didn't help much (see screen).

(Some shots are grainy from high ISO)

Waited for UPS all day for this!

A box inside the box...

Yet another box....

Finally, the goods!

Size comparison to V3 Razr.

Not as slim as the S1A, but S1A had a modular CD-R/W drive.

Widescreen goodness.

Orange light is badass.

Keyboard has excellent texture and feedback. The touchpad texture is nice too (although it'll probably wear off after a while I assume).

Screen is very nice; much better than anticipated.

Very nice "soft" LED lights. The touchpad is actually textured (those little gray dots are bumps).

Incredibly vivid; the green shows the contrast much better.

Viewing angle is not bad! Much better than S1A and even better than my Chembook (Compal).

From the other side...

Vertical viewing angle suffers a bit, but acceptable.

Uh....what "Wireless On" option???

Widescreen looks good.

Another shot...

Open from the side.

All in all? Better than expected. I had high hopes (rightfully so for a $1700 notebook), but this notebook (so far) has exceeded them. Beautiful looks, snappy performance (primarily office usage and web browsing), decent weight, and great build quality.

# Saturday, April 29, 2006

Hole-y Cow....

Saturday, April 29, 2006 3:42:49 PM UTC

Must see.

I think this pretty much speaks for itself....

RSS 2.0 Atom 1.0 CDF