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.more...
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.
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.more...
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.more...
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.more...
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 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.more...
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...more...
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.more...
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:more...
Ah, Sandusky, Ohio in January. Be sure to pack:
- swim trunks
- hawaiian shirt
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(); xdoc.LoadXml(ds.GetXml());
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.more...
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:
- When adding or updating an article, Vine Type now stays on correct section
- Gravatar Support
- replace vinetype.dll
- refresh your browser
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.more...
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.more...
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.more...
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?more...
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:
MMmmmmm. Crow for breakfast today.more...
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.more...
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.more...
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.more...
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:more...
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:more...
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.more...
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);
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.
- Load an assembly from a known Data Link Libarary (DLL) in a known location
- Create a System.Type object of the class of the object you want to instantiate
- Create an instance of the class object
- Create a System.Reflection.MethodInfo object that represents the method we will invoke
- Invoke the method within the object we created
- Cast the generic object returned to its proper type
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
- Adding a reference to the component DLL in Visual Studio
- Adding a
#usingdeclaration to the top of the C# file
- Calling the method just as you would call a local method
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.more...
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...more...
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.more...
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.)more...
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 Typemore...
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.more...
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
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.more...
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.more...
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.
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.more...
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.more...
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.more...
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.more...
The W3C validator started showing this error message after I started serving my XHTML 1.1 pages via
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.
Note: Code Updated and docmented in the article application/xhtml+xml Part Deux
Iamacamera.org 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
Pngfix.htc 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.more...
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.more...