Carl Camera

Top Five Features of Peg Daily

Many people are discovering Peg Daily the fun and challenging online daily puzzle. While folks enjoy the challenge and fun that Peg Daily provides, they might be overlooking several great features that Peg Daily provides. Here are five of the best features found within the Peg Daily game.

1. Undo and Restart

Here are features that a physical peg solitaire game cannot provide -- backing up. Peg Daily provides an Undo button below the board that allows not just one move backup, but several, all the way back to the original setup for that day's puzzle configuration. Simply tap the Undo button and the board will undo the previous move made. This is helpful if you sense a winning configuration but went in a wrong direction a few moves previously. If you just want to start over from the beginning with one tap, tap the Restart button.


How To Play Peg Daily

Peg Daily is the new online peg solitaire game found at It's easy to play and suitable for all ages. If you want to play Peg Daily, it's important to know the rules and mechanics of the game.

Finding a Game

It's easy to find the current Peg Daily solitaire game. You just need to visit Any modern internet browser is capable of supporting the features and game play. Mobile browsers on phones and tablets, too, are all you need to play Peg Daily. In fact, Peg Daily is designed primarily for phone and tablets.


Introducing Peg Daily

Peg Daily

Peg Daily is a fun and challenging peg solitaire board game that you can play online. It offers a daily challenge for visitors who strive to beat the board each day and emerge victorious. Based on an ancient game, Peg Daily updates the traditional peg solitaire game by offering it online and bringing a new and unique peg solitaire game challenge each day. 


ASE File Specification

In creating the ASE Palette Converter, I had to reverse-engineer the contents of proprietary Adobe ASE Adobe Swatch Exchange files. As with anything reverse-engineered, the following file format spec is only my best-guess of the actual, official Adobe ASE file specification. For instance, a field which I indicate is a four-byte field might be perhaps just a two-byte integer with two bytes of unused space.


Video Encoding Demystified

A canonical problem you see people make is: I've got a 720x480 source and I want to make it smaller. Then I'll make it shorter so I'll make it 240 tall -- that makes sense -- and then I'll make it thinner so I'll make it 360 wide -- divided by two -- and that's always wrong. Because your image is really either four by three or sixteen by nine, 720x480 is a non-square pixel video frame. So if it's four by three, 320x240 is a good size. If it's sixteen by nine, then 432x240 is a good size. But 360x240 is never the right size for any video.


Adobe Swatch Exchange Converter

Starting with the CS2 product line, Adobe Systems introduced a cross-program swatch format called Adobe Swatch Exchange format or ASE for short. The purpose of the swatch file format is to allow different programs to use and exchange palettes.

Kuler the online palette app generates ASE palette files as well, but the palette format purely proprietary, and is not published. Nevertheless, with some help from others who did some reverse-engineering of the format and a bit of my own studying of various binary files generated by Kuler and other Adobe apps, I've gained a very good understanding of the ASE file format.


The IE Bridge to One Web

Early in January 2008, a 3.1 magnitude earthquake struck Cleveland, Ohio. The USGS instruments indicated an epicenter just offshore in Lake Erie, but I think it was directly beneath the home of Eric Meyer as he finished typing his op-ed in support of IE Version Targeting for A List Apart.


CodeMash 2008

I will be attending CodeMash again this year in beautiful Sandusky, Ohio. The conference is held once again at the Kalahari Resort and Waterpark. The Kalahari waterpark expanded this week to become the nation's largest indoor waterpark with 4 acres (1.6 hectares) of indoor aquatic fun for the whole family.

Needless to say, the boys are looking forward to my geek conference.


Vine Type 2.0

I released Vine Type 2.0 recently and it's running most of my client sites now. Version 2 requires .NET Framework 2.0 so v1.5 will be the last version to support .NET 1.1.

Version 2 brings new features, reworking of some existing features, and new design possibilities. The biggest change is reworking the display of search results.

Search Results

Search results are now more like Google and less like WordPress. Version 1 would just display entire articles or article summaries when keywords matched, but you didn't know which terms matched which search result nor did you know how often a term matched an article or what context the term was mentioned.


CodeMash: Day 2

This is my belated Day Two report from CodeMash held last week in beautiful Sandusky, Ohio.

Some great sessions again today, Starting off strong with

LINQ - Bridging the Object \ Relational Divide

Speaker: Scott Guthrie (keynote)

LINQ introduces new and powerful data manipulation features to the .NET framework. Extremely SQL-like in its syntax LINQ will allow developers to easily access...


CodeMash: Day 1

I'm blogging from CodeMash in beautiful Sandusky, Ohio. The temperature outside is below freezing, but we're warm and dry inside -- or warm and wet at the indoor waterpark.

My favorite sessions so far:

Bridging Worlds: Making Java and .NET play well together

Speaker: Ted Neward

Ted has obviously well versed in both Java and .NET and has seen the good and the bad in each. The talk discussed different ways to achieve programming language detante (my word) by identifying specific communication strategies.


InnerException: Reflection's Best Friend

Using reflection, you've carefully crafted code to extract data from an old COM object. It works great, and you feel a sense of accomplishment. But now someone is in your office saying something about your ASP.NET app that it's not working. My Code?

Of course you took the time when creating the reflection call to log any problems in the called module, so you look into the application trace log and you see this quite annoying error:


CodeMash '07

Ah, Sandusky, Ohio in January. Be sure to pack:

  1. swim trunks
  2. hawaiian shirt
  3. chacos

Held at the Kalahari Resort / Conference Center / Waterpark, CodeMash is bringing together speakers from several disciplines in a refreshing blend of sessions. Look for me if you're attending.


DataSet to XmlDocument

Here's a useful bit of transforming code that I keep looking up in several of my projects. Many thanks to Milan Negovan for the vast improvement over my initial code.

using System.Data;
using System.Xml;

DataSet ds = MethodReturnsDataSet();

XmlDocument xdoc = new XmlDocument();

Vine Type 1.5

I am totally digging having Flickr photos and Ma.gnolia bookmark integration into this site.

If you missed the announcement on the Vine Type or AspAdvice sites, I released Vine Type 1.5 with support for Flickr and Ma.gnolia.


Vine Type 1.4

I released Vine Type 1.4 this evening. It adds Gravatar (Globally Recognized Avatar) support and fixes an annoyance when editing entries.

Visit the Vine Type website to download or update your Vine Type site. Here are the Release Notes:

Version 1.4

  1. Fixed

    • When adding or updating an article, Vine Type now stays on correct section
  2. Added

    • Gravatar Support
  3. Upgrade Instructions

    • replace vinetype.dll
    • refresh your browser

TimeSpan Best Practices

A recent post on c# corner† provides a straightforward introduction to the TimeSpan object and shows a couple innocuous examples. Further down, Ms. Choksi disclaims any further nuances such as time zone differences or daylight saving.

The problem is her code is more harmful than helpful. The TimeSpan object is very tricky and everyone needs to take Daylight Saving Time into consideration. Ignoring the topic is setting folks up for trouble down the road.


Enemies of Valid Strict XHTML: Part 3

In the first two installments of this three-part series, I set the goal of producing valid Strict XHTML, then discussed the problems and pitfalls that lead to non-validating websites. I explained that a content repository containing non-valid XHTML is the cause of most non-validating sites. I called out two pathways that allowed non-validating XHTML to enter the repository as the first two enemies of non-validating Strict XHTML.


Enemies of Valid Strict XHTML: Part 2

In the first part of this three-part series, I outlined the scope of the series. It begins with the goal of valid Strict XHTML and states that the reason so many sites don't produce valid Strict XHTML is because their content repositories are contaminated with non-validating content, generated primarily by end users and content producers.


Enemies of Valid Strict XHTML: Part 1

Microsoft of late seems to be catching the XHTML validity bug. The marketing buzz surrounding its latest online publishing title, Expression Web, spouts XHTML validity nearly every other sentence. Visual Studio 2005 as well touts XHTML validity as a goal and feature. That's a great start, but neither product is a silver bullet to creating valid Strict XHTML sites. What pitfalls are there that we need to watch out for? What are the enemies of XHTML valid sites?


Vine Type 1.2

Vine Type 1.2 is now available for download.

This point release features support for the Atom syndication standard in a big way.

Four Atom feeds are available:

  1. All-Articles


  2. All-Comments


  3. Single-Article Comments

    default.aspx?feed=atom10wb&id= n

  4. Section Articles

    default.aspx?feed=atom10&section= sectionname


Atom: I Need You

MMmmmmm. Crow for breakfast today.

Despite my proclamation last year that the Atom syndication standard was redundant and irrelevant, Vine Type v1.2 will support three distinct Atom feeds.


CMS Install Challenge

In the spirit of friendly competition to the other .NET content management systems, I created a screencast showing how fast and easy it is to install Vine Type and launch a Vine Type website.

So today I officially challenge DotNetNuke, DasBlog, and SubText to the .NET CMS installation challenge: Try to beat this -- download to launch in 2:52.


Vine Type 1.0

Design a Site. Help a Child.

Hi everyone. This is Carl Camera, maker of Vine Type. I'm very happy to release Vine Type 1.0. What is most exciting for me is that I get to announce that half of proceeds from Vine Type Pro will be given to charities that help the children of Guatemala.

Vine Type is a passion of mine. I'm very happy to provide a content management system built with web standards in mind. As much as I like being a champion of web standards, I'd like even more to be a champion for the children of Guatemala. This tiny country in Central America is still recovering from war and natural disasters. The needs are great and I am looking forward to assisting as I can the children and that nation.


C# Reflection Part 7

Dealing with Remote Objects

In this final installment of C# Reflection, I provide my solutions to a couple problems I encountered after successfully retrieving the remote object I wanted.

In the first six installments, the object returned was always an intrinsic type such as string. The Invoke method always returns an object of type object and I've always shown simple casting as the final step.


C# Reflection Part 6

Passing "out" Parameters

Out parameters are parameters that are expected (and in fact for C# required) to be populated by the called method. That is, the value for the out parameter is not meaningful when passed in and receives a value after the method is called.

bool GetCustName(int iCust, out string strName);

We must first create the object as covered in depth in Part 2:


C# Reflection Part 5

Passing "ref" Parameters

So far we've made conventional reflection calls. Things get a bit sticky, however, when the method we want to invoke contains a ref parameter. For example, a method with the signature:

bool CheckCustName(int iCust, ref string strName);

Reference parameters are not copied into the receiving method, but referenced from the caller's memory area. Creating the object is not a problem if you've been reading this series: This part was covered in depth in Part 2:


C# Reflection Part 4

Set Properties on Reflected Object

Suppose that the method that we will eventually call requires that two properties within the object be set beforehand. Why would anyone design a class this way? I can't explain it but there is code out in the wild (ahem) that might require this. If you're one of the other unfortunate ones, here's how to set properties on an object created through reflection.


C# Reflection Part 3

Passing Parameters

Now with the basic form established, we can move to variations on the theme. First variation: pass parameters to the method we're calling.

Steps 1, 2 and 3 to load the DLL assembly and create a target object remain the same as the previous article:

// load the assembly
Assembly assem = Assembly.LoadFrom(@"c:\path\to\file.dll");
// create a Type object
Type typClsX = assem.GetType("Fully.Qual.ClsX",true);
// instantiate an object of that type
object oClsX = Activator.CreateInstance(typClsX);

C# Reflection Part 2

The first example with be the simplest and most straightforward. We'll invoke a method that takes no parameters and returns a string. What is as simple as string s = obj.Method(); takes quite a few extra steps when using reflection.

  1. Load an assembly from a known Data Link Libarary (DLL) in a known location
  2. Create a System.Type object of the class of the object you want to instantiate
  3. Create an instance of the class object
  4. Create a System.Reflection.MethodInfo object that represents the method we will invoke
  5. Invoke the method within the object we created
  6. Cast the generic object returned to its proper type

C# Reflection Part 1

For those who are unfamiliar with .NET reflection, it is a whole area of computing that allows runtime binding to public classes, methods, and properties within external DLLs. Some folks refer to this as late binding.

In .NET, the usual way we call a method in another project's Data Link Libarary (DLL) is by

  1. Adding a reference to the component DLL in Visual Studio
  2. Adding a #using declaration to the top of the C# file
  3. Calling the method just as you would call a local method

Vine Type 0.99c

I released Vine Type 0.99c last night and is available for download.

Prompted by user suggestions, I've enhanced Vine Type to allow placing all the files within the web space. Vine Type continues to support its original suggested file configuration that places the vinetype.config file outside of the web space.


Vine Type 0.99

I released Vine Type 0.99 today. It is available for download from the Vine Type website

Included in this version -- the first to include ViPR -- is a font from Larabie Fonts called Libel Suit.

More details available at the Vine Type website. Feedback is always appreciated.

And if you would indulge me just a bit and allow a little bragging here: I also upgraded this site to version 0.99 just now. That is...


ViPR for The Masses

I wonder if there are folks out there that perhaps think the custom font headings on this blog and on Vine Type and Vine Branches are nice, but that's not enough of an incentive to move off of their current content management system. And, as I demonstrated in an earlier post it's possible to stream custom fonts for another site from my server.


Protecting ViPR from Bandwidth Bandits

While creating ViPR, I became aware that there is a potential for abuse of this technology believe it or not! [Feigned look of horror.] Milan Negovan raised this issue in a blog post titled "Don't Let Your Site Get Framed" recently.

Really. There are folks out there that might want to generate text-on-the-fly and not use their own installation of Vine Type. Milan has a name for these folks that I won't repeat here. They might use, for instance, your installation or mine in this case since I haven't released a ViPR-enabled Vine Type yet. (0.99 coming soon folks, honest.)


ViPR Text With Alpha Transparency

This week's work was on finalizing the code for Vine Type Inline Png Replacement (ViPR.) ViPR now supports two additional features: alpha transparent text and text rotation. These features will be included in the next release of Vine Type


ViPR: Vine Type Inline Png Replacement

There's a new feature working its way toward the next release of Vine Type, and it's called ViPR.

ViPR, pronounced "viper," will allow Vine Type designers to specify a font, and several characteristics to use for article titles. ViPR can generate Portable Network Graphics (PNG) images of text on-the-fly, using no hard drive space whatsoever. You'll no longer be limited to standard fonts that are chosen more for their ubiquity than their aesthetics.


application/xhtml+xml Part Deux

My site is serving application/xhtml+xml once again thanks to the fine detective work by Microsoft IIS Tech Support Specialist WenJun.

After over twenty, yes twenty, emails, message board posts, and responses, the problem was determined to be ... my code. I was not handling correctly Request objects that did not contain an AcceptTypes object.


Site Map Details

I've added a site map to my blog via the Vine Type $_site_map variable. This is different from the $_nav_map variable in that it lists and links individual articles.

This could still be used for CSS Flyout navigation for a blog site, because blogs tend to have more than one article per section.

For brochure-type sites, however, where there is only one article per section, then the $_nav_map is more applicable.


Feliz Año Nuevo! Vine Type 0.98

2006 is off to a good start with the release of Vine Type 0.98.

Extended characters are being handled much better now, so I can provide proper diacritical marks to my Spanish greeting above as well as important names such as Tantek Çelik.

I've also added additional comment administrative features and a comment RSS.

For folks who like site maps, I have created two. Both site maps consist of nested unordered lists so that they can be used to create dropdowns or flyouts á là Suckerfish or Nick Rigby.


Attacking URL Cruft

I think one of the things I want to do before releasing a v1 of Vine Type is to attack the cruft in URLs. Cruft, for Vine Type, are all of the %20s that appear in the address bar when spaces exist in section names.

Advantages of cruft reduction are

  • more readable
  • easier to type in
  • more useable
  • friendlier to search engine bots.

This Site Crashed Cynthia Too

Well, three strikes and you're out. The accessibility checker commonly referred to as Cynthia, I discovered, also caused my site to return the beguiling Server Error 500 message.

The Switch to application/xhtml+xml was an interesting experiment but enough is enough. IIS is just not liking some of the browser interactions so until I figure out what is going on with these Server 500 errors, I'm falling back to html/text.


Vine Type Beta 0.97

I just released version 0.97 of Vine Type. It fixes the installation problem where the comment form doesn't appear along with a couple usability bugs.

In addition, it adds a couple new features dealing with recent articles. The first is recent articles. This site's homepage now dynamically shows the most recent n (user-customizable in my case 10) articles. I've set a switch in my vinetype.config file to show summaries.


Vine Type Beta 0.96

Vine Type, with the tag line Content Management with Standards in Mind was released in Beta to the general public this morning. I've spent a lot of time creating a flexible, customizable, and language-neutral solution -- and it's my hope that it will be well received.

I'm happy to provide an alternative blog/CMS engine to the Microsoft internet server community. Vine Type has been running this site for several months and I've incorporated many popular and useful features. I hope you're able to test it out and provide feedback on it.


This Site Crashes Newsgator Too

In my ongoing saga of switching to application/xhtml+xml MIME type, I've found another victim: Newsgator (site defunct).

The multitudes of folks checking my site via Newsgator (...whomever that person is; there are a total of two Newsgator subscribers to Iamacamera, and I'm the other...) haven't recieved a site update since I published my Now Serving application/xhtml+xml article.


This Site Crashes W3C Validator

The W3C validator started showing this error message after I started serving my XHTML 1.1 pages via application/xhtml+xml.

I'm not actually crashing the validator, but for some reason it does not like validating my website now. Apparently, the switch to application/xhtml+xml is causing a much-unwanted side-effect. The CSS "jigsaw" validator doesn't seem to have this same problem.


Now Serving application/xhtml+xml

Note: Code Updated and docmented in the article application/xhtml+xml Part Deux is now serving its valid XHTML 1.1 via the W3C recommended MIME type to those browsers that support it. And it looks like we will all be doing something like this for the next few years at least.

The Story So Far

When a web page is served from a website and received by a browser, the web server indicates a "MIME type" of the file that is being sent over the internet to the browser. If a JPEG file is being sent, then the MIME type would be image/jpeg. Web pages themselves -- the HTML parts -- are sent with MIME text/html.


PngFix Squished My Png seems to be squishing my png images. It's quite obvious when reloading sometimes because the png will show in its correct size, then shrink (I assume) as the behavior code is loaded and invoked.


It's a script that is called from a CSS file that allows support for PNG alpha transparency in IE5.5 and IE6. I don't invoke any transparency on this site (currently) but the script is a standard feature of every (will be a standard feature of every) Vine Type website.


PDF As Last Resort

Last week when I commented on Joe Clark's PDF accessibility article, I didn't realize he might be listening. (Small world, huh? I commented on a blog in Sweden and Joe in Toronto asked for a comment from me in Austin.) It appears, however, that he was listening.