Looks can be deceiving

It has been almost two weeks since I switched to using Blogger’s new dynamic template.

Browsing the site with the new template works really well; it uses most of the available browser real estate, it looks good on an iPad, it feels nice and fluid, but it also has problems.

 

For some reason my AdSense integration stopped working, and the AdSense site said my account needs to be verified. AdSense was working fine in the old template, so something in the new template, or switching to the new template, must have triggered this. I’ve had AdSense for almost a year, and in that time I’ve not even made enough for Google to trigger a payment. In order to verify my account, I had to enter a PIN they mailed me on a postcard, entered the amount of a test transfer in my bank account, and entered a PIN read to me on my phone. Two days after the verification steps were completed ads started showing up again.

 

Very few widgets support the dynamic template, and the options are limited to a handful of very basic widgets.

 

One of the supported widgets is the label cloud, and as I was configuring it, I decided to do some label cleanup. In the process I noticed that the new Blogger management interface is terrible at editing labels, and that direct links to labels no longer work.

 

In the old Blogger management interface it was easy and obvious how to add and remove labels, although renaming has never been supported. In the new interface there is only an add option, and to remove a tag, you have to add the same tag again to remove it, I discovered this by accident, as all the Blogger help still refers to the old management interface. Same as the old interface, you can filter all posts that contain a certain label, and then you can select one or more of those posts, and then add, or add again to remove, labels. Now, when a post has been selected, and you change the filter, that post does not get unselected, and when you then apply a label to a visibly selected post, it also applies to any previously selected posts that are not currently in the filter view. This is just silly.

 

Since I changed some of the labels, and I know that links to labels are case sensitive, this is another silly thing I never understood as label creation and editing is case insensitive, I wanted to test a label link. When clicking a label in the cloud widget on the main blog page, the link works fine, but when you directly navigate to a label link, you get a blank page. Not good.

 

Since I was so disappointed in only making a few dollars in a year of serving AdSense ads, I decided to create an Amazon Associates account, tag my links to Amazon products, and  show some Amazon ads, hoping I can at least recover the cost of the domain registration fees. It turns out that Blogger no longer natively supports Amazon ads, seems a bit anti-competitive to me, but that’s the nature of their business. Ok, you can host Amazon ads by using HTML in your template, but, the dynamic template does not support any customization, and it does not support any HTML widgets.

That leaves me to using just tagged links to Amazon pages, that is easy enough, just a bit of re-editing old pages. A friend suggested I use Bitly to shorten my Amazon tagged links, that way I can do link tracking, and since adding Bitly I’ve had … 3 clicks, seems I’ll have to keep paying those domain fees after all.

That same friend was kind enough to remind me of my associate obligation, to make it clear to users that I’m an Amazon associate, by adding legalese to my site. Something I would normally do in the footer, but wait, you guessed it, the dynamic template does not support any customization, and all I can do is add the text directly to every post.

Since that is a hassle, here is what I need to say, so I’ll just say it here to get some coverage:

blog.insanegenius.com is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to amazon.com.

 

Reading the blog on the iPad is a pleasant experience, but, the sidebar widgets that pop out are clearly designed for a mouse, not a finger, as such it is next to impossible to get them to pop out.

 

I use Windows Live Writer to author my blog posts, it is a great app, and the integrated image posting and sizing is so much easier than any alternatives I’ve tested. Unfortunately, the WYSIWIG functionality does not work with dynamic templates. In order to retrieve the blog template, WLW will make a test post, read the template, and then delete the test post. After making the test post, WLW times out reading the post, but at least it deletes it.

There are some rumblings that WLW may be discontinued, based on its absence from the Windows 8 Metro lineup of Live apps, and in support from the user community, there is a petition to not kill WLW.

A blog subscriber notified me that he was getting some “temporary post” titled posts in his feed. I’ve seen these before in Google Reader, even from Microsoft’s own MSDN and TechNet blogs. It seems that FeedBurner is so hasty that it streams the temporary post created by WLW before WLW had a chance to delete it. No harm, it just looks odd in the stream.

 

By now I was  pretty fed up with Blogger and the dynamic template, and I started looking for alternative and free blog hosting. There really seems to be only one free and feature rich alternative, and that is WordPress.com. WordPress has an easy to use Blogger importer, that imports posts, comments, and settings. Check out my blog in WordPress format. There is one catch, the free .com version of WordPress does not allow direct advertising, they do the advertising for their own revenue. Not that it really matters as the few dollars I stand to loose is well worth it if I don’t need to deal with Blogger.

 

I am still hopeful that Google will step up to the plate and fix Blogger and dynamic templates, but at least I know there is an easy migration path to WordPress.

Blogger Dynamic Templates

I just switched to the Blogger Dynamic Template.
You can read about what if offers readers here, and what Blogger wrote about it here.

I am still on the fence about keeping it, or switching back to my old custom template, or adopting one of the standard templates.

It is much easier using standard Blogger templates vs. using custom templates; the template designer keeps up with new Blogger features, or Blogger changes. With custom templates there is always manual CSS and HTML editing involved.

My previous template was a hand made template in order to get a wider reading area, where the default templates are very narrow and wastes tons of space on larger displays. It is also wasteful in space since the main reading area is restricted in width by the presence of the side-bar sections, that leaves lots of open space.

The dynamic template offers lots of customization in terms of width, colors, and fonts, and offers a great reading experience. But, very few of the classic widgets work in the dynamic template, and some widgets have much reduced functionality.

Windows Live Writer, my blog editor of choice, is unable to import the dynamic template for WYSIWIG editing, leaving me with a what you see is not what you get editor.

I will leave the dynamic template active for now, and see if it grows on me.

Let me know what you think of the dynamic template.

Rotation confuses face recognition

I have around fifty thousand digital photos in my library, and it has become impractical to browse through them looking for some event, or some place, or some person. So other than archiving, there really is no value in collecting photos if you can’t go back and find the ones you are looking for.

A few years ago I switched to using Image Ingester Pro and Adobe Photoshop Lightroom to import and catalog my photos. Now one of the first things I do after importing photos, is to add keywords describing the event, the place, and the people. But, I still have tens of thousands of photos that have no keywords, and there is no easy or automated way to add keywords to these photos. One thing that can be automated is adding people keywords to photos based on automated face recognition.

Unlike free Windows Live Photo Gallery, or free Google Picasa, or free Apple iPhoto, none of Adobe’s products offer face recognition, something often discussed and complained about in Adobe forums. Professional photographers may argue that face recognition is a gimmick, and I agree that for professional workflows it may not be required, but at less than $300, Photoshop Lightroom is an ideal tool for use by amateur and family photographers, and I think face recognition is a must have feature.

Although Lightroom does not directly offer face recognition, there are convoluted ways to add people keywords to Lightroom using Google Picasa and Jeffrey Friedl’s Picasa Face-Recognition Import plugin. The process requires you to add all your photos to Adobe Lightroom and Google Picasa, then use Picasa to detect faces, and assign them to contacts, then use Jeffrey’s import plugin to add the Picasa people as keywords to photos in Lightroom.

Picasa is not the most friendly app to work with, it may alter photo metadata without your intent, adding support for new RAW formats takes a long time, there are lots of bugs related to managing people and duplicate contacts happens all the time. The Picasa to Lightroom conversion experience is not something I am prepared to deal with on an ongoing basis, unfortunately I am also not aware of any other ways of automatically tagging people in pictures in Lightroom.

The next best thing would be to use an application that does support face recognition in addition to Lightroom, even if the two tools do not integrate or share metadata. Since I was already quite familiar with Picasa, and I have a Mac but don’t use it as a primary machine, that left me with Windows Live Photo Gallery (WLPG).

Unlike Picasa that uses its own built in image rendering technology, WLPG uses Windows Imaging Component (WIC) technology to render and interpret image metadata. The downside is that you need to install RAW image WIC codecs in order for WLPG to display RAW images, the upside is that you can install a WIC codec instead of waiting for the app to natively support the RAW format. As an example, the Panasonic DMC-LX5 was released July 2010, Picasa added support for DMC-LX5 RW2 files in Picasa 3.9, released December 2011, 17 months after the camera’s release.

WIC does have its drawbacks, some camera manufacturers do not release WIC codecs at all, and some big name manufacturers, like Canon and Nikon, are stuck in the dark ages with no x64 codec support. At this time I am aware of two alternate suppliers of RAW WIC codecs, Axel Rietschin’s FastPictureViewer Codec Pack, and Microsoft’s Camera Codec Pack. Microsoft’s Camera Codec Pack is free, but offers limited camera support, and as we’ll see later, limited Explorer and WLPG integration support. FastPictureViewer Codec Pack (FPVCP) costs $14.95, is frequently updated, supports almost all camera’s and formats under the sun, integrates with Explorer and WLPG, and is what I use.

With FPVCP installed, WLPG was easy to use, the contact and names feature integrated nicely with Windows Live contacts, without any of the weirdness of the equivalent functionality I found with Picasa. Once faces were tagged, a semi automated process requiring manual verification, it was easy to find photos I was looking for, e.g. I could say show me all photos in December 2010, with me, my wife, and our daughter in the picture.

So this finally brings me to the actual problem I wanted to write about. I noticed that WLPG would get confused when tagging faces in some portrait rotated pictures. When you view the image standalone, the faces are correctly recognized, and the bounding rectangles are correctly drawn over the image. But, the thumbnails are completely wrong, taken from a different part of the image. It seems like the thumbnails are taken from the landscape coordinates view of the image, not portrait coordinates of the image.
See the following pictures as an example, note how the thumbnails in the portrait view image are taken from the wrong part of the image:
WLPG.Face.JPG.LandscapeWLPG.FPVCodecPack.Face.JPG.Portrait

I reported the problem in the WLPG support forum, and after some back and forth, I provided sample pictures where I could reproduce the problem, but I was told that they were unable to reproduce the problem using the same pictures. As I was not crazy, and I had seen this behavior on two different machines, I wanted to create steps to reproduce the problem.

The sample images were taken of a magazine page taped to a door, using a Canon 5D Mark II, a Panasonic DMC-LX5, a Panasonic DMC-ZS7, and an iPhone 4. I took 5 pictures with each camera in each mode; face centered, face top-left, face top-right, face bottom-left, and face bottom-right. I did this in landscape mode, portrait mode, JPG mode, and RAW mode.

I fired up a clean Windows 7 Ultimate x64 SP1 VM, installed WLPG v15.4.3538.513, and Picasa v3.9, and I dropped my collection of sample images on the machine.

As I viewed the images in Explorer, I immediately noticed a difference between my machine and the test machine, the test machine Explorer view did not display the JPG images using the correct rotation, while my machine did. This is when I remembered that I have FastPictureViewer Codec Pack installed on all my machines, and that this may have something to do with the face rotation problem.

See the following pictures of the Explorer view with and without FPVCP, note how the FPVCP version displays the CR2 thumbnails and displays the JPG files in the right rotation:
Explorer.5DMk2Explorer.5DMk2.FPVCodecPack

Testing Windows Live Photo Gallery showed that as with Explorer, it also does not display the images using the correct rotation. This was a real big disappointment for I can’t believe that a photo application with all the bells and whistles of WLPG neglects to correctly rotate images.

See the following pictures of WLPG with and without the FPVCP, note how the FPVCP version displays the CR2 thumbnails and displays the JPG files in the right rotation:
WLPGWLPG.FPVCodecPack

Since WLPG did not correct the rotation on portrait images, it was unable to recognize any faces in these images. So when Microsoft said they can’t reproduce the problem, they neglected to mention that the portrait images did not render correctly nor detect any pictures at all.

See the following pictures of WLPG with and without the FPVCP, note how the FPVCP version displays the JPG files in the right rotation, but WLPG uses the wrong image coordinates:
WLPG.Face.JPG.PortraitWLPG.FPVCodecPack.Face.JPG.Portrait

Interestingly enough, RAW images in both landscape and portrait detected the faces correctly:
WLPG.FPVCodecPack.Face.RAW.LandscapeWLPG.FPVCodecPack.Face.RAW.Portrait

I repeated the tests using Microsoft’s Camera Codec Pack (MCCP).

Notice how MCCP does not correct the rotation of JPG images in Explorer, nor does it render the CR2 file thumbnails in Explorer, vs. FPVCP that does both:
Explorer.5DMk2.MSFTCodecPackExplorer.5DMk2.FPVCodecPack

Notice how MCCP does not correct the rotation of JPG images in WLPG, nor does it render the CR2 file thumbnails in WLPG, vs. FPVCP that does both:
WLPG.MSFTCodecPackWLPG.FPVCodecPack

I will reply to the Windows Live Photo Gallery support thread with this information, and I will also open a support ticket with FastPictureViewer, let’s see what happens.

[Update : 28 December 2011]
I received an email from from Ardfry Imaging, informing me that they were shipping a x64 DNG codec before FPV existed, and they they are still offering a variety of codecs.

How to install SQL Server 2008 on Windows Server 2008 R2 RC

I was trying to install SQL Server 2008 on Windows Server 2008 R2 RC.

But, when I launch SETUP.EXE, Windows warns me that SQL Server is not compatible with Windows Server.
If I ignore the warning, the install proceeds but then fails to install .NET 3.5.

After a little searching and experimentation I found a way to install without any problems:
1. Create a slipstreamed SQL Server 2008 SP1 install, follow the instructions here.
I set my my PCUSOURCE=”.\PCU” and that worked fine.
2. Add .NET 3.5 by going to server manager and adding the .NET 3.5.1 feature.
3. Install by running SETUP.EXE.

I hope this helps somebody.

Google Email Uploader on Vista x64

I am currently importing a few thousand email messages from Outlook 2007 to my email account hosted on Google Apps. Google provides an Email Uploader utility, and it is easy to use, but getting it to work with Outlook 2007 on Vista x64 was less than trivial.

The utility installed fine on my Vista x64 system, but it found no mailboxes to import. A little research showed that several other people using Vista x64 and Outlook 2007 have exactly the same problem.

Since Google kindly publishes the source for the tool, I decided to have a look. Turns out it was a relatively simple fix to get it to work.

The main application is a C# .NET application, with the build properties for the target set to “Any CPU”. This means that on a x86 / WIN32 system it will be a 32bit process and on x64 / WIN64 system it will be a 64bit process.

The problem is that the application also uses two mixed mode DLLs, and these DLLs are compiled for x86 / WIN32. When running the main EXE on Vista x64, the process is a 64bit process, and that fails to load the 32bit DLLs. The fix was simple, change the build target from “Any CPU” to “x86”.

I also had to fix a couple other small things in order to get the “Release” build to compile correctly. The DLLs are written in C++, but for some reason the developers used .MH and .MCC extensions instead of the standard .H and .CPP extensions. The “Debug” build had set custom build properties for .MCC files, and associated the files with the C++ compiler. Once I did the same for the “Release” build, the project compiled.

The last change was to set the Outlook import DLL linker options to delay load MAPI32.DLL.

You can download the binaries from here, simply extract and run.
Please remember that I provide no warranty at all, I did minimal testing, so use at your own risk.

I hope Google makes these easy changes to the main source branch so future official versions also support Outlook 2007 on Vista x64.

Getting Vista to go to sleep

I noted my troubles with the Intel GMA drivers, the Intel DG33TL motherboard, and Vista SP1 blue screen crashing in my earlier post.

Since I was running the 15.8 version of the Intel GMA drivers, and Microsoft KB948343 indicates that, based on the driver version numbers, these newer drivers should not be affected by SP1, yet the crash details were clearly the same, and no new driver was forthcoming to correct the blue screen crash, I decided to take the GMA drivers out of the picture.

I am currently using an ATI HD 26000 XT card in my HTPC, and this is a great card. I looked for the same model, the one I was using is from VisionTek, but I found a Sapphire brand card for significantly less. I am actually happier with the Sapphire compared with the VisionTek, the VisionTek fan was really loud, and since I was using it in my HTPC, I ended up buying a Zalman VF900-Cu replacement fan for the VisionTek card. The Sapphire card has no problem with a noisy fan.

I installed the ATI card, installed the drivers, and put the machine to sleep. This is where the GMA drivers would normally crash. This time there was no crash, but the machine also immediately woke up again, I could not get it to stay in sleep mode.

At this point I had had enough of the DG33TL board; it had given me more trouble than I was willing to put up with and I wanted a replacement board. Since I already had the machine open, while replacing the VGA card, I wanted a new board now, which meant instead of ordering online and waiting a few days I had to take a trip to my local Fry’s.

I knew my in store choices would be limited, so I did some research and selected a few models from Asus, Gigabyte, and Intel, with the primary requirement being ICH9 support so that I would not lose the RAID-0 configuration of my drives, and the motherboard swap would not require an OS reinstall. My first choice would have been a Gigabyte GA-G33-DS3R, unfortunately, as I suspected, it turns out that of all the options I was hoping for the only board that came close was an Intel DQ35JO.

Of the three boards on the shelf, all of them had been returns and were resealed, so this was even more of a risk, but they were marked down a few dollars so that did make me feel better, and I could always return the board.

The DQ35JO is very similar to the DG33TL. The DQ35JO is from the Executive series, and the DG33TL is from the Media series. The DQ35JO has no multichannel audio, but does have TPM and AMT. The component layouts are almost identical.

I replaced the board, powered on, the POST screen came up and then nothing. On reading the Intel support documents they recommended a BIOS reset. I removed the battery, waited a few minutes, replaced the battery and rebooted. This time the POST completed, and I could boot. I assume that since the board had been used, and I just replaced the memory and CPU, that this may have caused the initial boot failure. Before booting into Vista I first booted to my DOS bootable USB key and updated the BIOS to the latest version, then reset the BIOS configuration to defaults, and again made all the required changes, most importantly to restore the RAID drive configuration.

I booted into Vista Ultimate x64, waited a few minutes for the new drivers to load, and eventually the keyboard started working and I could login. The ATI control center application complained that there was no ATI driver installed, so I reinstalled the ATI driver, rebooted, and this time everything seemed fine. Not quite, Windows told me the hardware had changed and I had to reactivate. Activating over the internet failed, and I had to activate over the phone, that worked. I also noticed that Windows Update wasn’t working, the KB article for the error code told me to check the PC time. Since I had reset the BIOS without resetting the time, the time was off by years, on correcting the time WU started working again.

Now for the ultimate test, can the machine go to sleep? I press the sleep button and the machine sleeps, I touch the keyboard and the machine wakes up. I leave the machine idle for an hour, it goes to sleep, I touch the keyboard and the machine wakes up. Success!

There is one thing that is still not 100%, and this seems to be a problem on both the DG33TL and the DQ35JO; the case power light is not always on. E.g. after removing mains power and powering on the case power light will be on and stay on until the first sleep, and then the power light will turn off, and even resuming from sleep or rebooting will not turn the light back on.

Maybe I should have been more patient and ordered the Gigabyte GA-G33-DS3R instead, but for now I am happy.

Installing Vista SP1 with an OEM key

I received my new Lenovo ThinkPad T61 notebook, pre-installed with Vista Ultimate, but also with 3rd party software I did not care for.

I wanted a clean Vista install, and that is exactly why I made sure to order the recovery media with the notebook, thinking that this will include an OS install DVD. It turns out that the recovery media is six CDs, I don’t know why not a DVD, regardless, the recovery media does not include a Vista install DVD.

I called Lenovo support asking how to obtain a Vista DVD that will accept the OEM key, and was told that Vista install DVDs are not available, and that I should use the recovery CDs or the recovery partition.

I decided to give the recovery partition a try; boot, press F11, select restore, do a custom restore, unselect all the 3rd party software, start the install process.

The machine rebooted several times, eventually returning to the same state as when I first booted. There was no 3rd party software on the system, only the Lenovo ThinkPad software was installed.

This was much better than the out of the box version, but still not as clean as I’d like it to be.

I did some research and found several articles explaining elaborate procedures on how to install Vista using a normal Vista DVD and an OEM key.

Since I had read that Vista SP1 had made some licensing changes, I decided to experiment using a Vista x86 with instegrated SP1 DVD I downloaded from MSDN.

I was not sure if I would need the actual key used on my system, as explained by the article, which is different to the key on the OEM sticker, so to be safe I used Magical Jelly Bean Keyfinder to make a note of my current key. This key was indeed different than the key on the OEM sticker.

I booted from the Vista with integrated SP1 DVD, formatted the partition, it was interesting that the 6GB recovery partition does not show up in Vista, I did not enter a key, and started the installation.

After the installation completed I changed the product key using the key I had previously retrieved from the system. After a few seconds Windows reported that there was a problem with the key.

This is when I noticed something interesting, the activation window appearance changed, and the temporary key that was displayed changed to indicate xxx-OEM-xxx. It seems that Windows automatically switched to OEM mode.

Next I tried the key on the sticker, and after a few seconds Windows was activated.

I was intrigued by the automatic mode change, but I did not want to repeat the whole procedure just to find out if I could have used the OEM key in the first place.

If you try this procedure using Vista with integrated SP1, be sure to first try the key on the OEM sticker, you may not need the initial key retrieval step at all.

Microsoft Expression Media / iView Media Pro to Adobe Photoshop Lightroom converter

This article was originally posted here.

Introduction:

Because of severe performance problems I experienced with both iView Media Pro and Microsoft Expression Media, I decided to switch to Adobe Lightroom.

Unfortunately Lightroom does not understand catalog sets nor does it understand people tags, so the transition is not that simple.

After I could not find a simple, or even complicated solution, I decided to write my own conversion application.

This application will convert hierarchical catalog sets into keywords, and will add people tags to keywords.

I considered directly converting to Lightroom’s native SQLite database format, but the reverse engineering effort did not seem justified.

Disclaimer:

I am providing this utility and the source code as is, no warranties are provided, use at your own risk.

Backup all your data, validate the conversion results, do not discard your backups.

Source:

I wrote the utility in C++ using Visual Studio 2005 SP1.

I tested on Vista Ultimate x86.

I tested with Microsoft Expression Media 1.0.8104.0, and iView Media Pro 3.1.3.42E6.

The code utilizes the COM API’s exposed by Expression Media and Media Pro.

Unfortunately neither application’s COM API’s work reliably, I can only hope that the quality of future versions will improve.

See the source code comments for problems I encountered.

Usage:

  1. Download the archive and extract the contents to your folder of choice.

    The archive contains the source, and two binaries, one for Expression Media
    and one for Media Pro.

    The binaries are compiled to use either the Expression Media or the Media Pro COM type libraries.

  2. Run Expression Media or Media Pro, and open the catalog you want to convert.

    Make sure that only one catalog is open.

    Make sure you have a backup of your catalog and of all your media files.

  3. Open a command prompt and change the directory to where you extracted the files.

    Run: ExpressionMediaExport.exe [Full path to the catalog file you opened in
    Expression Media or Media Pro enclosed in double quotes]

    E.g. [ExpressionMediaExport.exe “c:\media\catalog.ivc”]

    The utility will convert catalog sets to keywords, and will convert people to
    keywords.

    You can close the command prompt.

  4. The catalog sets will be converted so that each catalog node is a keyword and
    the keywords are assigned to all items in that catalog.

    E.g. if you have “Travel” and “Travel\Someplace”, the keywords will be
    “{Root}{Travel}”, and {Root}{Travel}{Someplace}”.

  5. People are added to keywords.

    E.g. if you have “John Doe” as a person tag, then “John Doe” will be added to
    keywords.

  6. Sync the updated information to the media files.

    In Expression Media or Media Pro [Edit][Select All], [Action Sync
    Annotations][Export annotations to original files].

  7. Import the images into Adobe Lightroom.

    Use the category keywords to create new collections.

    Select all images containing a category keyword e.g. “{Root}{Travel}”, create a
    new collection called “Travel”, and add all selected images to the collection, do
    the same for child collections.

Known Problems:

  • If you are using Expression Media, you first have to fix the COM registration
    that is not correctly set during installation.

    On Vista [Start][All Programs][Accessories][right click the Command Prompt icon
    and select Run as administrator].

    On XP [Start][Programs][Accessories][Command Prompt]

    Change directory to the Expression Media folder: [cd “C:\Program
    Files\Microsoft Expression\Media 1.0″]

    Register the Expression Media COM interfaces: [media.exe /regserver]

    You can close the command prompt.

  • If you encounter failures writing keywords to media items, try adding
    keywords to all items that fail using the main application.
  • If you get an error “Active catalog does not match requested catalog”, it means the catalog you specified on the commandline did not match the default catalog. The problem is that the Open() API always fails, and I have to use the Attach() API to connect the active catalog, and for integrity reasons I make sure the catalog on the commandline is the same as the active catalog that will be modified.
  • Complain to Microsoft that the COM API’s are not fully functional.

Download:

Version 1.0.1.1: ExpressionMediaExport.1.0.1.1.zip

  • Added people to keyword export.

Version 1.0.0.2: ExpressionMediaExport.1.0.0.2.zip

  • First release.

Links: