<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7040265</id><updated>2011-11-27T18:42:46.815-06:00</updated><category term='embedded'/><category term='ADO.NET Entity'/><category term='database'/><title type='text'>Nybbles, Bytes and Words</title><subtitle type='html'>.Net and Other Development</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nybbles.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nybbles.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tom Baker</name><uri>http://www.blogger.com/profile/04838371454746618854</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_GK2BrdNAh3Y/ScbIFQSEGQI/AAAAAAAABqQ/fyt5s1Cu1GQ/S220/Me_Mexico_2007.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7040265.post-5018425196663056980</id><published>2009-03-23T12:20:00.010-05:00</published><updated>2009-03-23T14:27:08.881-05:00</updated><title type='text'>Localized WPF Applications</title><content type='html'>Have you every worried about how you were going to localize your WPF applications?&lt;br /&gt;&lt;br /&gt;

The WinForms localization model is fairly mature, built into the designer, and utilizes satellite assemblies, that allow for post-build extension of your application. This has many advantages, including being able to farm the localization off to third parties, without requiring them to recompile the original application.&lt;br /&gt;&lt;br /&gt;

The WinForms model also lead to concise class wrappers and tags for your localized data. That made it easy to access both in the designer, and in the code-behind.&lt;br /&gt;&lt;br /&gt;

WPF doesn't seem to have the whole localization concept fully baked at the moment. In my opinion LocBaml is to oppresive. Requiring you to spread UID's throughout every XAML document you have, then manually edit every one of them to fit into the planned language.&lt;br /&gt;&lt;br /&gt;

I just want to localize the words. Can't I use the old satellite assembly approach, for string tables instead of the embedded pages (i.e., BAML resources)?&lt;br /&gt;&lt;br /&gt;

Yes you can. First decide if you even want the XAML to even be in your satellite resource assemblies. Microsoft says to add the &lt;uiculture&gt;tag into the project file. But, you can localize string tables without doing this.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;In your project, add a .resx - "Resources File" (I prefer doing this instead of using the existing Settings file - for separation).&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; [example: Properties\Resources.resx]&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Open the resource file, and change the access modifier to "Public".&lt;/li&gt;
&lt;li&gt;Add additional "Resources Files" at the same level, in the same folder. Inserting the appropriate localization code into the name.&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; [example: Properties\Resources.de-DE.resx]&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Clear the Custom Tool field in the Properties window for each of these files.&lt;/li&gt;
&lt;li&gt;Open your XAML file and add a reference to the class wrapper namespace.&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; [In this case WPFTest.Properties]&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Then you can go ahead and use elements from the resource string table directly in you XAML&lt;/li&gt;
&lt;/ul&gt;

XAML:

&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs20 \cf1 &amp;lt;\cf3 Window\cf4  x\cf1 :\cf4 Class\cf1 ="WPFTest.Window1"\par ??\cf0    \cf4  xmlns\cf1 ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\par ??\cf0    \cf4  xmlns\cf1 :\cf4 x\cf1 ="http://schemas.microsoft.com/winfx/2006/xaml"\par ??\cf0    \cf4  xmlns\cf1 :\cf4 res\cf1 ="clr-namespace:WPFTest.Properties"\par ??\cf0    \cf4  Title\cf1 ="Window1"\cf4  SizeToContent\cf1 ="WidthAndHeight"&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 StackPanel\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Button\cf4  Name\cf1 ="button1"\cf4  Click\cf1 ="button1_Click"&amp;gt;\cf3 Button\cf1 &amp;lt;/\cf3 Button\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Label\cf4  Name\cf1 ="label1"\cf4  Content\cf1 ="\{\cf3 x\cf1 :\cf3 Static\cf4  res\cf1 :\cf4 Resources\cf1 .TestString\}" /&amp;gt;\par ??\cf3     \cf1 &amp;lt;/\cf3 StackPanel\cf1 &amp;gt;\par ??&amp;lt;/\cf3 Window\cf1 &amp;gt;\par ??}
--&gt;
&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Window&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;="WPFTest.Window1"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;res&lt;/span&gt;&lt;span style="color: blue;"&gt;="clr-namespace:WPFTest.Properties"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Title&lt;/span&gt;&lt;span style="color: blue;"&gt;="Window1"&lt;/span&gt;&lt;span style="color: red;"&gt; SizeToContent&lt;/span&gt;&lt;span style="color: blue;"&gt;="WidthAndHeight"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Button&lt;/span&gt;&lt;span style="color: red;"&gt; Name&lt;/span&gt;&lt;span style="color: blue;"&gt;="button1"&lt;/span&gt;&lt;span style="color: red;"&gt; Click&lt;/span&gt;&lt;span style="color: blue;"&gt;="button1_Click"&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Button&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Button&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Label&lt;/span&gt;&lt;span style="color: red;"&gt; Name&lt;/span&gt;&lt;span style="color: blue;"&gt;="label1"&lt;/span&gt;&lt;span style="color: red;"&gt; Content&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Static&lt;/span&gt;&lt;span style="color: red;"&gt; res&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Resources&lt;/span&gt;&lt;span style="color: blue;"&gt;.TestString}" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Window&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;


CS Code:


&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red163\green21\blue21;}??\fs20         \cf3 private\cf0  \cf3 void\cf0  button1_Click(\cf3 object\cf0  sender, \cf4 RoutedEventArgs\cf0  e)\par ??        \{\par ??            Properties.\cf4 Resources\cf0 .Culture = \cf3 new\cf0  System.Globalization.\cf4 CultureInfo\cf0 (\cf5 "de-DE"\cf0 );\par ??            \cf4 Window1\cf0  wnd = \cf3 new\cf0  \cf4 Window1\cf0 ();\par ??            wnd.Show();\par ??        \}\par ??}
--&gt;
&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af;"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Properties.&lt;span style="color: #2b91af;"&gt;Resources&lt;/span&gt;.Culture = &lt;span style="color: blue;"&gt;new&lt;/span&gt; System.Globalization.&lt;span style="color: #2b91af;"&gt;CultureInfo&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"de-DE"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Window1&lt;/span&gt; wnd = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Window1&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wnd.Show();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/div&gt;

Note: You need to set the culture for the resources (if you wish to override the current system settings), before you show the WPF window.

&lt;p&gt;&lt;/p&gt;&lt;div style="BACKGROUND: white" face="Courier New" size="10pt" color="black"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7040265-5018425196663056980?l=nybbles.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nybbles.blogspot.com/feeds/5018425196663056980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7040265&amp;postID=5018425196663056980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/5018425196663056980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/5018425196663056980'/><link rel='alternate' type='text/html' href='http://nybbles.blogspot.com/2009/03/localized-wpf-applications.html' title='Localized WPF Applications'/><author><name>Tom Baker</name><uri>http://www.blogger.com/profile/04838371454746618854</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_GK2BrdNAh3Y/ScbIFQSEGQI/AAAAAAAABqQ/fyt5s1Cu1GQ/S220/Me_Mexico_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7040265.post-6540233891542919432</id><published>2009-03-22T18:46:00.007-05:00</published><updated>2009-03-23T14:21:14.839-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO.NET Entity'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>SQLite A Good Alternative</title><content type='html'>In the past I have talked about SQL Server Desktop Edition and VistaDB..&lt;br /&gt;&lt;br /&gt;

I've really been searching for that perfect - elusive, small, embedded, free database. Something that doesn't need an installation, supports encryption and just works. Especially in C#....&lt;br /&gt;&lt;br /&gt;

.Net is capable of xcopy deployment, and it would be nice if my database could go with me..&lt;br /&gt;&lt;br /&gt;

I have been leaning toward SQL CE (especially 3.5). It meets most of my requirements (you can copy the dll's for private deployment - and don't need to install)..&lt;br /&gt;&lt;br /&gt;

But, I think I found a better candidate: SQLite!.&lt;br /&gt;&lt;br /&gt;

And it is already inside of some things you are probably already using:
&lt;ul&gt;&lt;li&gt;Adobe (Photoshop Lightroom, Air, possibly Acrobat Reader)&lt;/li&gt;&lt;li&gt;Apple (Apple Mail, Safari, possibly iPhone, and iPod touch)&lt;/li&gt;&lt;li&gt;Firefox&lt;/li&gt;&lt;li&gt;Google (Google Gears, Android)&lt;/li&gt;&lt;li&gt;McAfee&lt;/li&gt;&lt;li&gt;Microsoft (maybe in a game?)&lt;/li&gt;&lt;li&gt;Philips (mp3 players)&lt;/li&gt;&lt;li&gt;PHP&lt;/li&gt;&lt;li&gt;Python&lt;/li&gt;&lt;li&gt;REALbasic&lt;/li&gt;&lt;li&gt;Skype&lt;/li&gt;&lt;li&gt;Sun (Solaris 10)&lt;/li&gt;&lt;li&gt;Symbian&lt;/li&gt;&lt;li&gt;Toshiba&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;I have been playing with it for a while in Visual Studio 2008, and am very happy with what I am seeing. The ADO.Net provider gives very clean integration. I am having no problem accessing my data either through the Server Explorer, Direct Connections, LINQ, or even ADO.Net Entity Framework. It is fast, small, and has encryption support (the ADO.NET provider version -link provided below- includes 128 RC4 encryption).&lt;/p&gt;&lt;p&gt;Of course there are a few things to work around. SQLite itself is written in C, and the ADO.NET provider is a managed wrapper around the compiled code. So although .Net can target AnyCPU, there are flavors of the managed wrapper for x86, x64, Itanium, and ARM. Fortunately .Net seems to utilize late binding, and you can figure out your processor architecture and copy the correct DLL into place in time for your app to run properly.&lt;/p&gt;

&lt;a href="http://www.sqlite.org/"&gt;SQLite Home Page&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://sqlite.phxsoftware.com/"&gt;System.Data.SQLite ADO.NET Provider&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://sqliteadmin.orbmu2k.de/"&gt;SQLite Admin - UI Management Console&lt;/a&gt;&lt;br /&gt;

&lt;p&gt;An example of copying the correct DLL in place: 
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: Consolas, "Courier New", Courier, Monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}

.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; App : Application
    {
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnStartup(StartupEventArgs e)
        {
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.OnStartup(e);

            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                FileInfo fi = &lt;span class="kwrd"&gt;new&lt;/span&gt; FileInfo(Assembly.GetEntryAssembly().Location);
                &lt;span class="kwrd"&gt;string&lt;/span&gt; strSource, strDest = fi.DirectoryName + &lt;span class="str"&gt;"\\System.Data.SQLite.dll"&lt;/span&gt;;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (Microsoft.Build.Utilities.ProcessorArchitecture.CurrentProcessArchitecture == Microsoft.Build.Utilities.ProcessorArchitecture.AMD64)
                {
                    strSource = fi.DirectoryName + &lt;span class="str"&gt;"\\System.Data.SQLitex64.dll"&lt;/span&gt;;
                }
                &lt;span class="kwrd"&gt;else&lt;/span&gt;
                {
                    strSource = fi.DirectoryName + &lt;span class="str"&gt;"\\System.Data.SQLitex86.dll"&lt;/span&gt;;
                }
                &lt;span class="rem"&gt;// Copy the correct dll in place&lt;/span&gt;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (!File.Exists(strDest)  &lt;span class="kwrd"&gt;new&lt;/span&gt; FileInfo(strSource).Length != &lt;span class="kwrd"&gt;new&lt;/span&gt; FileInfo(strDest).Length)
                {
                    File.Copy(strSource, strDest, &lt;span class="kwrd"&gt;true&lt;/span&gt;);
                }

            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception exc)
            {
                MessageBox.Show(string.Format("Error copying DLL: {0}",exc.Message));
            }
        }
    }

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7040265-6540233891542919432?l=nybbles.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nybbles.blogspot.com/feeds/6540233891542919432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7040265&amp;postID=6540233891542919432' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/6540233891542919432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/6540233891542919432'/><link rel='alternate' type='text/html' href='http://nybbles.blogspot.com/2009/03/sqlite-good-alternative.html' title='SQLite A Good Alternative'/><author><name>Tom Baker</name><uri>http://www.blogger.com/profile/04838371454746618854</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_GK2BrdNAh3Y/ScbIFQSEGQI/AAAAAAAABqQ/fyt5s1Cu1GQ/S220/Me_Mexico_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7040265.post-112198413805955113</id><published>2005-07-21T16:42:00.004-05:00</published><updated>2009-03-23T14:19:16.238-05:00</updated><title type='text'>Things that go download in the night....</title><content type='html'>I was testing a secured website directory running on my local machine.&lt;br /&gt;&lt;br /&gt;

When accessing the resource as "http://www.mywebaddress.com" instead of "http://localhost". The Windows Integrated Authentication login popup would appear three times. I would type in the correct user name and password. But every time, I would be denied access. Eventually receiving the message:

&lt;p&gt;&lt;code style="COLOR: red"&gt;HTTP 401.1 - Unauthorized: Logon Failed&lt;/code&gt;&lt;/p&gt;

I had a related problem while using Windows Server 2003 SP1.&lt;br /&gt;&lt;br /&gt;

&lt;code style="COLOR: red"&gt;Error while trying to run project: Unable to start debugging on the web server. You do not have permissions to debug the server.&lt;br /&gt;&lt;br /&gt;

Verify that you are a member of the 'Debugger Users' group on the server.&lt;/code&gt;

&lt;strong&gt;NOTE:&lt;/strong&gt; I AM the administrator on this machine, and have made sure that I had the 'Debugger Users' role..&lt;br /&gt;&lt;br /&gt;

After much digging around I finally found, the crux of the problem is a recent security patch that came down with XP SP2 and W2K3 SP1. It is called loopback security check, and you can get around it by following the instructions in the &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;896861"&gt;Microsoft Knowledgebase&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7040265-112198413805955113?l=nybbles.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://support.microsoft.com/default.aspx?scid=kb;en-us;896861' title='Things that go download in the night....'/><link rel='replies' type='application/atom+xml' href='http://nybbles.blogspot.com/feeds/112198413805955113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7040265&amp;postID=112198413805955113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/112198413805955113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/112198413805955113'/><link rel='alternate' type='text/html' href='http://nybbles.blogspot.com/2005/07/things-that-go-download-in-night.html' title='Things that go download in the night....'/><author><name>Tom Baker</name><uri>http://www.blogger.com/profile/04838371454746618854</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_GK2BrdNAh3Y/ScbIFQSEGQI/AAAAAAAABqQ/fyt5s1Cu1GQ/S220/Me_Mexico_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7040265.post-111239996682661546</id><published>2005-04-01T16:28:00.002-06:00</published><updated>2009-03-23T14:15:51.359-05:00</updated><title type='text'>An Embedded DB for the .Net Masses!</title><content type='html'>I am so excited! I feel like Goldilocks after I have tried the porridge that is too hot, and the one that is too cold. This one is &lt;u&gt;JUST RIGHT&lt;/u&gt;!&lt;br /&gt;&lt;br /&gt;

For those of you who have perhaps assumed that I have a screw loose somewhere, let me explain. Programming is fun, programming is cool, programming may even get you chicks... But one of the first fnagling problems facing a developer at the beginning of any project is, "how am I going to store the data?".&lt;br /&gt;&lt;br /&gt;

In many projects this may become immediately obvious either because of existing data, or available database systems. But this becomes more of a problem when talking about a thick-client, deployment from scratch. Now you are talking about a totally isolated machine, that you won't get much time (if any) to go around, visit and make sure everything is honkey-dorey. You are also talking about an installation that needs to be small (maybe you are deploying from the web), simple (there ain't no IT guys where this program is goin'), and secure (no good having a password on your application if everyone and their brother can simply look inside the file).&lt;br /&gt;&lt;br /&gt;

In this case the choices for embedded database become fairly few and far between. Let us add an entire Microsoft bias here and say that you only care about Windows™ development in .Net (se moi). Some of your choices might be: Access/Jet, MSDE (mentioned below), SQL Server Express 2005 , XML files, MySQL, Paradox (!?)&lt;br /&gt;&lt;br /&gt;

Well, how about &lt;a href="http://www.vistadb.com/"&gt;VistaDB&lt;/a&gt;? Let's do a comparison:&lt;br /&gt;&lt;br /&gt;

&lt;table align="center" border="1"  style="font-size:smaller;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;span style="font-size:85%;"&gt;Name&lt;/span&gt;&lt;/th&gt;&lt;th&gt;&lt;span style="font-size:85%;"&gt;Requirements&lt;/span&gt;&lt;/th&gt;&lt;th&gt;&lt;span style="font-size:85%;"&gt;Features&lt;/span&gt;&lt;/th&gt;&lt;th&gt;&lt;span style="font-size:85%;"&gt;Drawbacks&lt;/span&gt;&lt;/th&gt;&lt;th&gt;&lt;span style="font-size:85%;"&gt;Price&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;VistaDB&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;.Net Framework 1.1
(Mono?)
500K Redist&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Encryption
Transactions
Triggers/Constraints Referential Integrity Indexing
AutoIncrement Identities
Multi-User
Copy To Install&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;$129&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Access/JET&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;&gt; &lt;/span&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;(JET engine deprecated from MDAC and no longer available)
20MB&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Included in older MDAC's
Referential Integrity Indexing
AutoIncrement Identities&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Not always available&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Going forward, each deployment will require an Access license.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;MSDE&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Windows 98 and above
70MB&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Transactions
Replication
Multi-User
16 Instances
Stored Procs/Views
Triggers/Constraints Referential Integrity
Indexing
AutoIncrement Identities&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Large
Difficult Install
Patches?
Lockdown Needed&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Free (with various Microsoft products)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;SQL Server Express 2005&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;.Net Framework 2.0 (ONLY)
125MB Ram (after boot)
~40MB&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Transactions
Replication
Multi-User
16 Instances
Stored Procs/Views Triggers/Constraints
Referential Integrity
Indexing
AutoIncrement Identities&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Large
Difficult Install
Patches?Lockdown Needed&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Free (with various Microsoft products)?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;XML Files&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;You need to code libraries&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Bulky
Slow
&lt;strong&gt;&lt;u&gt;Lots&lt;/u&gt;&lt;/strong&gt; of Custom Development Needed&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Free&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;MySQL&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;~30MB&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Transactions
Replication
Multi-User
Indexing
AutoIncrement Identities&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Large
Requires Installation
Lockdown Needed&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Free&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Paradox&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;~10MB&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Indexing
AutoIncrement Identities&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Prone To Corruption
Old Technology
Requires BDE install&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;"&gt;Free (With various Borland tools)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;

&lt;p&gt;On top of this, there is a very nice third party review of VistaDB by &lt;a href="http://www.larkware.com/Reviews/vistadb.html"&gt;Mike Gundelroy&lt;/a&gt;. After looking at this list, there is no comparison if you want a small, fast, simple install for an application that includes a database. I'm sold! And, I just bought my copy to play with. I'll let you know if I have any complaints.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7040265-111239996682661546?l=nybbles.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nybbles.blogspot.com/feeds/111239996682661546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7040265&amp;postID=111239996682661546' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/111239996682661546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/111239996682661546'/><link rel='alternate' type='text/html' href='http://nybbles.blogspot.com/2005/04/embedded-db-for-net-masses.html' title='An Embedded DB for the .Net Masses!'/><author><name>Tom Baker</name><uri>http://www.blogger.com/profile/04838371454746618854</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_GK2BrdNAh3Y/ScbIFQSEGQI/AAAAAAAABqQ/fyt5s1Cu1GQ/S220/Me_Mexico_2007.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7040265.post-108665248489496060</id><published>2004-06-07T18:09:00.002-05:00</published><updated>2009-03-23T14:15:02.007-05:00</updated><title type='text'>It is not just .Net you can obfuscate...</title><content type='html'>It is amazing how panicked some customers will get when you tell them that their new application will have code on the client-side of a browser (using tiny words, so they understand the implications of that).&lt;br /&gt;&lt;br /&gt;

We are just rolling off of a 6 month development project for "savings calculators", to be used by the sales staff. The &lt;span class="specialword"&gt;functional requirements&lt;/span&gt; forced some calculations to be performed on the client-side. Now the customer is upset that their business rules are exposed as JavaScript, &lt;b&gt;"some competitor could steal our logic..."&lt;/b&gt; Believe me, I saw that logic, there is nothing there to steal!&lt;br /&gt;&lt;br /&gt;

Anyway, we were able to assuage some of their fears by using a little mentioned feature for applications using the Microsoft Scripting Runtime 5.0 or better. The &lt;span class="specialword"&gt;Microsoft Script Encoder&lt;/span&gt; seems to be a nice way of obfuscating (though not encrypting JavaScript) that you need to send to the client. Not good for passwords or anything. But, fairly effective at deterring theft or modification of script.&lt;br /&gt;&lt;br /&gt;

Microsoft Script Encoder can be downloaded &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E7877F67-C447-4873-B1B0-21F0626A6329&amp;amp;displaylang=en"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;

The interesting thing is that this utility is simply a wrapper around the Scripting.Encoder COM object which can be invoked directly &lt;i&gt;(See the attached link in this post)&lt;/i&gt;. Which is good if you are spitting out dynamic script fragments from ASP or ASP.Net code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7040265-108665248489496060?l=nybbles.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://mcpmag.com/columns/article.asp?EditorialsID=532' title='It is not just .Net you can obfuscate...'/><link rel='replies' type='application/atom+xml' href='http://nybbles.blogspot.com/feeds/108665248489496060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7040265&amp;postID=108665248489496060' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/108665248489496060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/108665248489496060'/><link rel='alternate' type='text/html' href='http://nybbles.blogspot.com/2004/06/it-is-not-just-net-you-can-obfuscate.html' title='It is not just .Net you can obfuscate...'/><author><name>Tom Baker</name><uri>http://www.blogger.com/profile/04838371454746618854</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_GK2BrdNAh3Y/ScbIFQSEGQI/AAAAAAAABqQ/fyt5s1Cu1GQ/S220/Me_Mexico_2007.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7040265.post-108630944479163612</id><published>2004-06-03T19:04:00.002-05:00</published><updated>2009-03-23T14:14:28.958-05:00</updated><title type='text'>A Little Background First</title><content type='html'>Eh'm, let me introduce myself (by way of a long rambling tirade). For those poor unfortunates that have happened upon this dreary backwater of an internet blog, my name is Tom. I am a software developer in a very large company that doesn't have real &lt;span class="specialword"&gt;developers&lt;/span&gt;. Compared to me, the Dodo is going through a veritable population explosion.&lt;br /&gt;&lt;br /&gt;

My department, and the 3 developers in it are the only official &lt;span class="specialword"&gt;developers&lt;/span&gt; &lt;b&gt;not&lt;/b&gt; associated with the public website in a company of over 15,000 employees. Oh, and they are in a separate division because they couldn't deal with the mainstream corporate IT hacks. Sure, there are a few people scattered throughout the rest of the organization, who call themselves &lt;span class="specialword"&gt;developers&lt;/span&gt;. But, that is because they know how to use FrontPage, HomeSite, or Access. They wouldn't recognize a language if it jumped up and bit them in the ass.&lt;br /&gt;&lt;br /&gt;

We constantly have to go through variance processes in order to obtain required software, or machines. Since the company doesn't have any other developers outside of the public website, IT doesn't even know where to begin to deal with us, our development servers, and the various production servers and databases we manipulate. They know how to cookie-cutter off-the-shelf applications and put them on servers. But, are baffled by our request to be able to acces our own servers.&lt;br /&gt;&lt;br /&gt;

We have &lt;b&gt;finally&lt;/b&gt; gotten them to realize that just because a server has power and is operating, it doesn't count as &lt;span class="specialword"&gt;server uptime&lt;/span&gt; unless our application is actually able to run!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7040265-108630944479163612?l=nybbles.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nybbles.blogspot.com/feeds/108630944479163612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7040265&amp;postID=108630944479163612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/108630944479163612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/108630944479163612'/><link rel='alternate' type='text/html' href='http://nybbles.blogspot.com/2004/06/little-background-first.html' title='A Little Background First'/><author><name>Tom Baker</name><uri>http://www.blogger.com/profile/04838371454746618854</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_GK2BrdNAh3Y/ScbIFQSEGQI/AAAAAAAABqQ/fyt5s1Cu1GQ/S220/Me_Mexico_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7040265.post-108499650671620839</id><published>2004-05-19T13:12:00.002-05:00</published><updated>2009-03-23T14:14:04.609-05:00</updated><title type='text'>Hello World!</title><content type='html'>In programming, the first application you learn to write in any new language is usually a "Hello World" app. It illustrates the basics of how to get the computer to say hello with the syntax for the language.&lt;br /&gt;&lt;br /&gt;

Well, this is my Blogger "Hello World". I will come back with more erudite pearls of wisdom, opinions, bitches, rants and general musings in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7040265-108499650671620839?l=nybbles.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nybbles.blogspot.com/feeds/108499650671620839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7040265&amp;postID=108499650671620839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/108499650671620839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7040265/posts/default/108499650671620839'/><link rel='alternate' type='text/html' href='http://nybbles.blogspot.com/2004/05/hello-world.html' title='Hello World!'/><author><name>Tom Baker</name><uri>http://www.blogger.com/profile/04838371454746618854</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_GK2BrdNAh3Y/ScbIFQSEGQI/AAAAAAAABqQ/fyt5s1Cu1GQ/S220/Me_Mexico_2007.JPG'/></author><thr:total>0</thr:total></entry></feed>
