<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
	<channel>
		<title>Technical notes (site implementation) blog</title>
		<link>http://www.gocek.org/blog/default.aspx?source=tek</link>
		<description>Tech notes</description>
		<copyright>Copyright 2010 Gary Gocek</copyright>
		<language>en-us</language>
		<image>
			<url>http://www.gocek.net/images/usaribbon.gif</url>
			<title>Technical notes (site implementation) blog</title>
			<link>http://www.gocek.org/blog/default.aspx?source=tek</link>
		</image>
		<pubDate>Mon, 01 Feb 2010 12:00:00 GMT</pubDate>
		<ttl>3600</ttl>
<!-- -->
		<item>
			<title>Contents</title>
			<description>
<![CDATA[Topics in this blog include:&lt;br&gt;
Local news&nbsp;...&nbsp;Hosting service and statistics&nbsp;...&nbsp;Tools and languages&nbsp;...&nbsp;Anti-spam&nbsp;...&nbsp;Flash updates&lt;br&gt;
Blogs&nbsp;...&nbsp;Reader comments&lt;br&gt;
Christian symbols&nbsp;...&nbsp;Bibles and translations&lt;br&gt;
Webcam&nbsp;...&nbsp;897th (WWII)&lt;br&gt;
Bugs - MSIE6 and replacing innerHtml with images&lt;br&gt;
Bugs - National Weather Service web service&lt;br&gt;
Bugs - Firefox and synchronous AJAX&lt;br&gt;
Bugs - ASP.NET checkbox controls&lt;br&gt;]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200904181201</link>
			<pubDate>Sat, 18 Apr 2009 12:00:01 GMT</pubDate>
			<guid>200904181201|tek|orig|0|0|0</guid>
		</item>
		<!-- -->
		<item>
			<title>Local news on the web</title>
			<description>
				<![CDATA[Print editions of newspapers across the country are shutting down these days.
				I still subscribe to the print editions of two newspapers in the Rochester, NY area,
				but I&rsquo;m looking for news sources to carry me when the inevitable finally happens.
				The print editions support an investigative activity that bloggers and web editions just
				can&rsquo;t match (oh well...). In particular, I&rsquo;m looking for a deep sources of local news. Lots of web
				sites regurgitate the top stories from the print editions, but that won&rsquo;t help when there
				are no print editions. I'm looking for a sites that can tell me about
				businesses that are opening, school sports results, youth group and charity activities, etc.,
				as well as the bigger stories and weather. Commment here on how you find your
				&lt;i&gt;local&lt;/i&gt; news on the web.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200904181200</link>
			<pubDate>Sat, 18 Apr 2009 12:00:00 GMT</pubDate>
			<guid>afc|468|60||FFFFFF|0000FF|FFFFFF|000000|008000|200904181200|tek|orig|5|0|0</guid>
		</item>
		<!-- -->
		<item>
			<title>Hosting service and statistics</title>
			<description>
<![CDATA[This site is hosted on a shared server by
&lt;a href=&quot;http://www.hostek.com/&quot;&gt;HosTek&lt;/a&gt;
of Oklahoma, USA. Great service at a reasonable price. See their special rates for non-profits.
Site statistics are provided by Hostek&rsquo;s
&lt;a href=&quot;http://www.smarterstats.com/&quot;&gt;statistics package&lt;/a&gt;.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200712011200</link>
			<pubDate>Sat, 01 Dec 2007 12:00:00 GMT</pubDate>
			<guid>200712011200|tek|orig|5|0|0</guid>
		</item>
<!-- -->
		<item>
			<title>Tools and languages</title>
			<description>
<![CDATA[The primary development tool is Microsoft Visual Studio 2008 (.NET 3.5).
Pages are written in HTML, JavaScript, C#, XML, and a smattering of other scripting
languages as needed. No databases are currently in use (just XML files).
The limited AJAX features on the webcam page were hand-coded.&lt;br&gt;
&lt;b&gt;I had a heck of a time with the Visual Studio 2003 debugger&lt;/b&gt; showing,
&quot;Error while trying to run project: Unable to start debugging on the web server. 
The project is not configured to be debugged.&quot;
Each project in the solution must have a web.config file with the debug setting set to true, and depending
on how the debugger is started, the app should be rebuilt using the Debug configuration.
Remember also that Visual Studio is interacting with IIS, so IIS must be configured for the same version
of .NET Framework supported by the version of Visual Studio. Each version of Visual Studio supports one
and only one version of .NET Framework, and that cannot be changed. The original Visual Studio .NET
supports v1.0.3705. VS .NET 2003 supports v1.1.4322. VS .NET 2005 supports v2.0.50727. VS .NET 2008 suppports
v3.0+. In a DOS prompt, within the proper folder under window\microsoft.net\framework,
run &quot;aspnet_regiis -i&quot;. Then start the IIS management console. For each project virtual
directory, there should be an active application under the Directory tab. In some cases, the name
can be blank, but next to the application name, if you see a Create button, click it. Then for each
project virtual directiory, go to the ASP.NET tab and pull down the proper ASP.NET version. The error messages
you see when starting the debugger are very generic and useless. When deploying your app, remember to
set the web.config files so that debug is false, and deploy the Release configuration, for the best performance.&lt;br&gt;
&lt;b&gt;The XmlTypeAttribute class&lt;/b&gt; is used to specify the namespace for a custom class when instances are serialized
by the XmlSerializer. For example, before your class, enter:&lt;br&gt;
[System.Xml.Serialization.XmlTypeAttribute(Namespace=&quot;http://kbarticles.com/&quot;)]&lt;br&gt;
For example, you create a custom class that is returned by a web service. When using Visual Studio to
add a web reference to a client application, a web proxy class (Reference.cs) is automatically created. Within this class,
you can see the namespace. If you do &lt;i&gt;not&lt;/i&gt; specify the namespace as shown above, Visual Studio will make one up,
depending on the parent of the reference to the custom class. However, if your web service refers to the custom class from multiple places,
the proxy class can get multiple references to the custom class in different namespaces. When this happens, VS renames conflicts,
so that the first reference will be named, say, Custom, and the second reference will be named Custom1. Of course, this causes a
compilation error, usually something like &quot;cannot implicitly convert type&quot;, because your client does not know about Custom1.
The solution is to be explicit about the namespace so that only one proxy reference is generated. You could also edit the Reference.cs
class to fix the problem, but every time you change the web service and update the web reference, you would lose your fix.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200804091200</link>
			<pubDate>Wed, 09 Apr 2008 12:00:00 GMT</pubDate>
			<guid>200804091200|tek|orig|5|0|0</guid>
		</item>
<!-- -->
		<item>
			<title>Blogs</title>
			<description>
<![CDATA[After experimenting for a couple years with a true forum (open-source from
&lt;a href=&quot;http://www.aspbb.org&quot;&gt;ASPBB&lt;/a&gt;),
I found that it required ongoing attention and maintenance even though the traffic was very low.
For a mid-level site like gocek.org, users don&rsquo;t want to be bothered with yet another registration.
This site provides a mish-mosh of content, so the forum consisted of several unrelated categories.
The blog and its registration database have been deleted. The current presentation uses many
blog-like pages that allow comments from unregistered users. I regularly look at a static web page
and wonder if it should be converted to a blog, as I did with this techie blog.
The blogs are all in standard RSS 2.0 format, so feel free to subscribe with your favorite feed
reader. However, the site pages that display the blogs provide for reader comments and other features.
This is accomplished with custom feed reading software.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200710011200</link>
			<pubDate>Mon, 01 Oct 2007 12:00:00 GMT</pubDate>
			<guid>200710011200|tek|orig|5|0|0</guid>
		</item>
<!-- -->
		<item>
			<title>Reader comments</title>
			<description>
<![CDATA[The blog comment page has been a challeging project involving user interaction,
persistent storage, anti-hacking techniques and more. The goal was to replace the forum with
something that readers would actually use. In fact, that seems to be happening, especially
in the ticket-scam blog. I found a cool site called
&lt;a href=&quot;http://www.gravatar.com&quot;&gt;Gravatar&lt;/a&gt;
that provides a centralized database for avatars associated with email addresses. But I didn&rsquo;t
want users impersonating others, so I have been looking into support for
&lt;a href=&quot;http://openid.net&quot;&gt;OpenID&lt;/a&gt;,
Any site can provide an OpenID server, and once registered with that server, a user has a single account
for all OpenID-enabled sites. The implementation of an OpenID &quot;consumer&quot; that accepts credentials
from OpenID servers has proven to be nothing short of onerous. The consumer must safely handle user keyboard input,
transfer to other sites and wait for the user&rsquo;s return, parse HTTP headers and HTML markup from remote sites
for links to other sites, load XML documents and determine how OpenID is supported by any OpenID server,
and parse voluminous data from the servers. After all that, no central authority guarantees the trustworthiness
of any OpenID server, so a rogue OpenID server could validate any user with any identity with no warning
to the consumer. And, the active OpenID community, while passionate, cannot agree that this lack of
trustworthiness is an issue, even thought the whole point of asking a user to &quot;log in&quot; implies a lack
of trust. Yeesh.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200709011200</link>
			<pubDate>Sat, 01 Sep 2007 12:00:00 GMT</pubDate>
			<guid>200709011200|tek|orig|5|0|0</guid>
		</item>
<!-- -->
		<item>
			<title>Christian symbols</title>
			<description>
<![CDATA[The symbol database consists of typical ASP.NET resource files. There was a time when I was pretty proud of this
page and underlying implementation, but it&rsquo;s actually pretty typical. The symbols page gets, by far, the
most traffic of any gocek.org page. On that note, I would be happy to hear about your experiences in using the site.
Search terms are compared against keywords in the database, not against the full symbol description.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200708011200</link>
			<pubDate>Wed, 01 Aug 2007 12:00:00 GMT</pubDate>
			<guid>200708011200|tek|orig|5|0|0</guid>
		</item>
<!-- -->
		<item>
			<title>Bibles and translations</title>
			<description>
<![CDATA[Rudimentary translations from the original English are provided for French and
Spanish, and full translations are provided for the random Bible verses. To see
French or Spanish, change your browser&rsquo;s language preferences. Only some of the
labels on the symbols page are translated. In most cases, translations come
from &lt;a href=&quot;http://babelfish.altavista.com/&quot;&gt;babelfish.altavista.com&lt;/a&gt; or
basic web searches. Numbers and dates are not localized. If you&rsquo;d like to 
volunteer to provide more translations, let me know.&lt;br&gt;
The random Bible verses are retrieved in the preferred language by custom
software using text from &lt;a href=&quot;http://www.bibledatabase.org/&quot;&gt;BibleDatabase.org&lt;/a&gt;.
That site offers many translations. For now, the English version is King James,
but I will use a more modern version if one becomes available for free. Each
translations stored on my site uses about 5 megabytes.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200707011200</link>
			<pubDate>Sun, 01 Jul 2007 12:00:00 GMT</pubDate>
			<guid>200707011200|tek|orig|5|0|0</guid>
		</item>
<!-- -->
		<item>
			<title>Webcam</title>
			<description>
<![CDATA[The webcam project has been great fun and is
described in more detail on the webcam page. Contrast this with my ongoing efforts to support OpenID,
which has been a ton of work and not nearly as flashy as my front yard. The successful display of a
near-real-time image on the home and webcam pages requires the coordination of
a number of hardware and software components, including some custom hardware
and software. It&rsquo;s not rocket science, but it&rsquo;s not a novice project given my choice of
equipment (there are camera packages that are made to connect easily to an internet connection). Bad
images can occur for a number of reasons, including the fact that the microwave
oven interferes with the wireless camera signal. Including weather data with an
outdoor camera image was not my idea, but it&rsquo;s a nice touch. Current and
forecast data are acquired from the US Government&rsquo;s
&lt;a href=&quot;http://www.weather.gov/&quot;&gt;National Weather Service&lt;/a&gt;.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200706011200</link>
			<pubDate>Fri, 01 Jun 2007 12:00:00 GMT</pubDate>
			<guid>200706011200|tek|orig|5|0|0</guid>
		</item>
<!-- -->
		<item>
			<title>897th (WWII)</title>
			<description>
<![CDATA[If you have &lt;i&gt;any&lt;/i&gt; information about the 897th or 3562nd,
please contact me. The diary entry on the 897th main page is coded
into an XML file and parsed according to the current date. There is a four year
cycle beginning in late 1942, with the 1944-45 period repeated (because there
simply aren&rsquo;t four full years of diary entries). The cycle&rsquo;s beginning is timed 
to match a current leap year with 1944, so that February 29 doesn&rsquo;t have to be 
fudged. Not all days have unique diary entries. The cycle started fresh in
2006. The diary entries are available as a web service, because I wanted to
write a web service. This is essentially a code library that is invoked over
the internet. If you&rsquo;d like to use the service on your own pages (the only
thing the service does is return an 897th log entry), I&rsquo;ll be happy to provide
more information.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200705011200</link>
			<pubDate>Tue, 01 May 2007 12:00:00 GMT</pubDate>
			<guid>200705011200|tek|orig|5|0|0</guid>
		</item>
		<!-- -->
		<item>
			<title>Anti-spam</title>
			<description>
				<![CDATA[Links to big files are &lt;A href=&quot;/portal/obfuscated.htm&quot;&gt;obfuscated&lt;/a&gt; to hide
from search indexes because I&rsquo;m worried about a rush on my bandwidth if
everyone in the world can suddenly find the Tiki Room song. The
&lt;a href=&quot;http://www.captcha.net/&quot;&gt;CAPTCHA&lt;/a&gt;
implementation on the blog comment page, i.e., the simple arithmetic problem, is intended to be easier
to use that the usual wavy-letter implementations, although my algorithm is easier to break.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200704011200</link>
			<pubDate>Sun, 01 Apr 2007 12:00:00 GMT</pubDate>
			<guid>200704011200|tek|orig|5|0|0</guid>
		</item>
		<!-- -->
		<item>
			<title>Flash updates</title>
			<description>
				<![CDATA[I wondered how Flash knew to install updates after a login. After all, it is a browser plugin.
				The plugin checks for updates if allowed, and that is a user settable option. When visiting a Flash-enabled
				site, and when the update check finds that Flash is out of date, the plugin installs a RunOnce registry
				key. This is done silently, and most of us do not check for such a key every few minutes.
				The next time the user logs in, possibly days later, and even though the browser plugin is not yet running,
				the registry key starts the update process. The user might then wonder what started the update, but by that time,
				the RunOnce key has alredy deleted itself. Sneaky, but safe.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200811171200</link>
			<pubDate>Mon, 17 Nov 2008 12:00:00 GMT</pubDate>
			<guid>200811171200|tek|orig|5|0|0</guid>
		</item>
		<!-- -->
		<item>
			<title>Bugs I have seen - MSIE6 and replacing innerHtml with images</title>
			<description>
<![CDATA[A table cell with an ID can have its innerHtml replaced by Javascript, without a
page refresh. But if the content is img HTML markup, IE6 does not automatically
download the image. If the image is already cached, it works sometimes. The
general solution was to switch to an AJAX technique, which really does download the image.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200702011200</link>
			<pubDate>Thu, 01 Feb 2007 12:00:00 GMT</pubDate>
			<guid>200702011200|tek|orig|5|0|0</guid>
		</item>
<!-- -->
		<item>
			<title>Bugs I have seen - National Weather Service web service</title>
			<description>
<![CDATA[The National Weather Service web service returns XML data that does not conform
to the latest security standards (first reported in 2005), so clients using
.NET Framework 1.1 and later report an error (&quot;The server committed an HTTP
protocol violation...&quot;). The solution is to edit the proxy class generated by
Visual Studio to process the returned data according to an older version of the
protocol. See
&lt;a href=&quot;http://weblogs.asp.net/jan/archive/2004/01/28/63771.aspx&quot;&gt;this page&lt;/a&gt;.
The web service intermittently throws, &quot;Unable to read data from
the transport connection.&quot; This appears to be a timeout error which I work
around by requesting less data at a time, multiple times.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200701011200</link>
			<pubDate>Mon, 01 Jan 2007 12:00:00 GMT</pubDate>
			<guid>200701011200|tek|orig|5|0|0</guid>
		</item>
<!-- -->
		<item>
			<title>Bugs I have seen - Firefox and synchronous AJAX</title>
			<description>
<![CDATA[There is a problem with the way FireFox (in 2006) handles the Javascript XMLHttpRequest
object. This object is used to implement AJAX techniques that allow access to
remote information via HTTP without refreshing the whole web page. If the &lt;i&gt;open&lt;/i&gt;
method is called synchronously, the readyState property never gets set to 4
(completed). Some blogs suggest declaring the onreadystatechange function after
the call to &lt;i&gt;open&lt;/i&gt;, but this didn&rsquo;t work for me (I had to use an
asynchronous call). My page behaves better with the asynchronous call, but from
what I&rsquo;ve seen in the blogs, FireFox is either the only browser that does it
right, or the only browser that does it wrong.&lt;br&gt;
&lt;b&gt;Also:&lt;/b&gt; I had a few issue when loading an XML document with Javascript. My XML document was
being cached by the browser, and this caching apparently cannot be avoided with an HTML no-cache header.
A simple but hack-ish solution is to do,&lt;br&gt;
xmlDok.load(&quot;file.xml?rnd=&quot; + Math.random(1000).toString());&lt;br&gt;
so that the browser thinks a different URL is loaded each time.&lt;br&gt;
Also, one would expect to be able to select nodes with XPath, via selectSingleNode and
selectNodes. This works as expected in MSIE, but Firefox implements a different DOM which throws exceptions
(&quot;selectNodes is not a function&quot; or &quot;selectSingleNode is not a function&quot;). Try these:&lt;br&gt;
function XSelectNodes(xmldok, elementPath)&lt;br&gt;
{&lt;br&gt;
if (window.ActiveXObject)&lt;br&gt;
{&lt;br&gt;
return xmldok.selectNodes(elementPath);&lt;br&gt;
}&lt;br&gt;
else&lt;br&gt;
{&lt;br&gt;
var xpe = new XPathEvaluator();&lt;br&gt;
var nsResolver = xpe.createNSResolver((xmldok.ownerDocument == null) ? xmldok.documentElement : xmldok.ownerDocument.documentElement);&lt;br&gt;
var results = xpe.evaluate(elementPath, xmldok, nsResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);&lt;br&gt;
var i, nodes = [];&lt;br&gt;
for (i=0; i &lt; results.snapshotLength; i++)&lt;br&gt;
{&lt;br&gt;
nodes[i] = results.snapshotItem(i);&lt;br&gt;
nodes[i].text = nodes[i].firstChild ? nodes[i].firstChild.nodeValue : &quot;&quot;;&lt;br&gt;
}&lt;br&gt;
return nodes;&lt;br&gt;
}&lt;br&gt;
}&lt;br&gt;
function XSelectSingleNode(xmldok, elementPath)&lt;br&gt;
{&lt;br&gt;
if (window.ActiveXObject)&lt;br&gt;
{&lt;br&gt;
return xmldok.selectSingleNode(elementPath);&lt;br&gt;
}&lt;br&gt;
else&lt;br&gt;
{&lt;br&gt;
var xpe = new XPathEvaluator();&lt;br&gt;
var nsResolver = xpe.createNSResolver((xmldok.ownerDocument == null) ? xmldok.documentElement : xmldok.ownerDocument.documentElement);&lt;br&gt;
var results = xpe.evaluate(elementPath, xmldok, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null);&lt;br&gt;
return results.singleNodeValue;&lt;br&gt;
}&lt;br&gt;
}]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200612011200</link>
			<pubDate>Fri, 01 Dec 2006 12:00:00 GMT</pubDate>
			<guid>200612011200|tek|orig|5|0|0</guid>
		</item>
<!-- -->
		<item>
			<title>Bugs I have seen - ASP.NET checkbox controls</title>
			<description>
<![CDATA[I have run into a couple of issues with ASP.NET CheckBox server controls. When a 
CheckBox is nested inside an ItemTemplate inside a Repeater control, the
CheckedChanged event doesn&rsquo;t fire for me. But let&rsquo;s say the Text of each
CheckBox is set like this:&lt;br&gt;
&nbsp;&nbsp;&nbsp;Text=&rsquo;&lt; % #&nbsp;DataBinder.Eval(Container,&nbsp;&quot;DataItem.columnX&quot;)%&gt;&rsquo;&nbsp;CssClass=&quot;hideme&quot;&lt;br&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;small&gt;sorry, I had to insert a couple blanks to get the RSS to display the markup&lt;/small&gt;&lt;br&gt;
where the hideme CSS class looks like:&lt;br&gt;
 &lt; style &gt; .hideme LABEL { DISPLAY: none }&lt; /style &gt;&lt;br&gt;
The result is that each checkbox can have a unique Text property, and the CSS
class makes it invisible, so it&rsquo;s essentially a custom control property. Then
do:&lt;br&gt;
foreach (RepeaterItem dataItem in RepeaterDataTable.Items)&lt;br&gt;
{&lt;br&gt;
&nbsp;&nbsp;&nbsp;CheckBox itemCb = (CheckBox) dataItem.FindControl(&quot;CheckBox1&quot;);&lt;br&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;br&gt;
The loop gets at each CheckBox and you can then see the Text property.&lt;br&gt;
Also, an &lt;i&gt;onclick&lt;/i&gt; property can be
specified for a CheckBox, but the CheckBox server control has no such
documented property. Microsoft documents that arbitrary attributes can be
applied to the rendered HTML control. For example, a CheckBox is rendered as an
HTML input control of type checkbox. A CheckBox can be created to call a
JavaScript function, client-side, by adding the following line to a code-behind method:&lt;br&gt;
&nbsp;&nbsp;&nbsp;cb1.Attributes.Add(&quot;onclick&quot;, &quot;jsFunc();&quot;);&lt;br&gt;
The CheckBox will also invoke server-side methods as usual.]]>
			</description>
			<link>http://www.gocek.org/blog/default.aspx?source=tek#200611011200</link>
			<pubDate>Wed, 01 Nov 2006 12:00:00 GMT</pubDate>
			<guid>200611011200|tek|orig|5|0|0</guid>
		</item>
	</channel>
</rss>
