<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-AU">
  <id>https://david.gardiner.net.au/tags/WWW.xml</id>
  <title type="html">David Gardiner - WWW</title>
  <updated>2026-05-19T00:35:57.110Z</updated>
  <subtitle>Blog posts tagged with &apos;WWW&apos; - A blog of software development, .NET and other interesting things</subtitle>
  <rights>Copyright 2026 David Gardiner</rights>
  <icon>https://www.gravatar.com/avatar/37edf2567185071646d62ba28b868fab?s=64</icon>
  <logo>https://www.gravatar.com/avatar/37edf2567185071646d62ba28b868fab?s=256</logo>
  <generator uri="https://github.com/flcdrg/astrojs-atom" version="3">astrojs-atom</generator>
  <author>
    <name>David Gardiner</name>
  </author>
  <link href="https://david.gardiner.net.au/tags/WWW.xml" rel="self" type="application/atom+xml"/>
  <link href="https://david.gardiner.net.au/tags/WWW" rel="alternate" type="text/html" hreflang="en-AU"/>
  <category term="WWW"/>
  <category term="Software Development"/>
  <entry>
    <id>https://david.gardiner.net.au/2026/05/google-search-indexing</id>
    <updated>2026-05-10T17:00:00.000+09:30</updated>
    <title>Google, what happened!!?</title>
    <link href="https://david.gardiner.net.au/2026/05/google-search-indexing" rel="alternate" type="text/html" title="Google, what happened!!?"/>
    <category term="Blogging"/>
    <category term="WWW"/>
    <published>2026-05-10T17:00:00.000+09:30</published>
    <summary type="html">When I discovered that Google has stopped indexing pages on my blog.</summary>
    <content type="html">&lt;p&gt;I was working again with Aspire this week and hit another issue launching the solution under Visual Studio. It felt familiar, but I wasn&apos;t sure. A quick search online threw up some results, but nothing great.&lt;/p&gt;
&lt;p&gt;Did I make a note of the error in OneNote? No.&lt;/p&gt;
&lt;p&gt;What about my blog? Umm.. yes! And super embarrassing, it was &lt;a href=&quot;/2026/2026-04-10-vs-debugging-fatal-error.md&quot;&gt;my most recent post&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;So yay! I applied the workaround and was unblocked. But that got me thinking.. surely my post should have been somewhere in the search results by now?&lt;/p&gt;
&lt;p&gt;And that&apos;s how I discovered that starting in mid-April Google suddenly decided to stop indexing pages on my site!&lt;/p&gt;
&lt;p&gt;Here&apos;s the summary from &lt;a href=&quot;https://search.google.com/search-console&quot;&gt;Google Search Console&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/search-console-pages-indexed.CY_yX2PA_Z2nGuPB.webp&quot; alt=&quot;Screenshot from Google Search Console showing just 6 pages indexed&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Only 6 pages currently being indexed? What on earth?&lt;/p&gt;
&lt;p&gt;Scrolling further down that page and it breaks down why pages aren&apos;t being indexed:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/search-console-why-not-indexed.Dprfn7nc_ZAO59c.webp&quot; alt=&quot;Screenshot from Google Search Console with &apos;Why pages aren’t indexed&apos; table&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Pretty much all of my actual blog posts are under the &apos;Crawled - currently not indexed&apos; category.&lt;/p&gt;
&lt;p&gt;So for some reason (and they don&apos;t really say why) Google knows about the pages, but has not included them in the index, so that&apos;s why my search didn&apos;t show up my blog post.&lt;/p&gt;
&lt;p&gt;So what changed in April?&lt;/p&gt;
&lt;p&gt;I looked back at the Git history of my blog repo. There were some changes I merged late March. The only thing that was slightly interesting was I did upgrade from Astro 5 to 6 during that time.&lt;/p&gt;
&lt;p&gt;Looking at the source of the homepage, I noticed something curious:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;
    &amp;lt;link rel=&quot;icon&quot; href=&quot;/favicon.ico&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&amp;gt;
    &amp;lt;meta name=&quot;generator&quot; content=&quot;Astro v6.3.1&quot;&amp;gt;
    &amp;lt;link rel=&quot;canonical&quot; href=&quot;https://david.gardiner.net.au/index&quot;&amp;gt;
    &amp;lt;link rel=&quot;sitemap&quot; href=&quot;/sitemap-index.xml&quot;&amp;gt;
    &amp;lt;title&amp;gt;David Gardiner&amp;lt;/title&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That &apos;canonical&apos; line looks wrong! The &lt;code&gt;href&lt;/code&gt; should be set to &lt;code&gt;https://david.gardiner.net.au/&lt;/code&gt;, but it has a &lt;code&gt;/index&lt;/code&gt; tacked on the end. I checked the canonical values for other pages, and they were all fine. So just the home page is wrong.&lt;/p&gt;
&lt;p&gt;Out of interest, I switched back to the revision of the repo before that change and rebuilt the website at that point in time. Sure enough it was correct back then:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;
    &amp;lt;link rel=&quot;icon&quot; href=&quot;/favicon.ico&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&amp;gt;
    &amp;lt;meta name=&quot;generator&quot; content=&quot;Astro v5.18.1&quot;&amp;gt;
    &amp;lt;link rel=&quot;canonical&quot; href=&quot;https://david.gardiner.net.au/&quot;&amp;gt;
    &amp;lt;link rel=&quot;sitemap&quot; href=&quot;/sitemap-index.xml&quot;&amp;gt;
    &amp;lt;title&amp;gt;David Gardiner&amp;lt;/title&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The code that created the canonical URL looked like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    &amp;lt;link
      rel=&quot;canonical&quot;
      href={new URL(Astro.url.pathname.replace(&quot;.html&quot;, &quot;&quot;), Astro.site)}
    /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So it appears the functionality has changed in Astro 6 slightly. I created a new function that returns the correct value, including for the home page:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;export function getCanonicalUrl(astroUrl: URL, astroSite: URL | undefined): string | URL | null | undefined {
  const pathname = astroUrl.pathname.replace(&quot;.html&quot;, &quot;&quot;);
  if (pathname === &quot;/index&quot;) {
    return new URL(&quot;/&quot;, astroSite);
  }
  return new URL(pathname, astroSite);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;My blog site is rendered statically, and as a way of ensuring that no surprising changes to the generated HTML happen from component updates, I previously created a couple of snapshot tests using Verify CLI. In particular these check the contents of a specific blog post and also the RSS feed.&lt;/p&gt;
&lt;p&gt;But I realised I didn&apos;t have one in place for the home page. While that wouldn&apos;t work well for my main blog repository (which is private), as the home page content would change every time I published a new blog post, that isn&apos;t true for the public repo where I maintain the blog engine logic. There I have just a few old blog posts that i use for testing.&lt;/p&gt;
&lt;p&gt;I&apos;ve &lt;a href=&quot;https://github.com/flcdrg/astro-blog-engine/blob/main/.github/workflows/main.yml#L136-L139&quot;&gt;added that into the pipeline now&lt;/a&gt;, so that in the future if there are any unexpected changes from upgrades, the snapshot test will allow me to review them and decide if they are acceptable or not.&lt;/p&gt;
&lt;p&gt;Now whether this is the actual cause of Google taking a dislike to me, I have no idea. But it&apos;s the most obvious thing I can see so far. Time will tell if I get back in Google&apos;s good books or not.&lt;/p&gt;
&lt;p&gt;On the plus side, I did check with Bing&apos;s &lt;a href=&quot;https://www.bing.com/webmasters&quot;&gt;Webmaster tools&lt;/a&gt;, and that all looks fine (and Bing is returning results for my site), so at least it isn&apos;t everyone who doesn&apos;t like me.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2017/05/typescript-tsconfigjson-being-ignored</id>
    <updated>2017-05-15T16:16:00.001+09:30</updated>
    <title>TypeScript tsconfig.json being ignored in C# project</title>
    <link href="https://david.gardiner.net.au/2017/05/typescript-tsconfigjson-being-ignored" rel="alternate" type="text/html" title="TypeScript tsconfig.json being ignored in C# project"/>
    <category term=".NET"/>
    <category term="WWW"/>
    <published>2017-05-15T16:16:00.001+09:30</published>
    <summary type="html">*TL;DR - Make sure your tsconfig.json file has the Build Action set to Content*</summary>
    <content type="html">&lt;p&gt;&lt;em&gt;TL;DR - Make sure your tsconfig.json file has the Build Action set to Content&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I have some TypeScript files included in a .NET project. I added the &lt;a href=&quot;https://www.nuget.org/packages/Microsoft.TypeScript.MSBuild/&quot;&gt;Microsoft.TypeScript.MSBuild&lt;/a&gt; NuGet package to the project to enable the TypeScript compiler
to transpile the .ts files to JavaScript. All was good until I wanted to set some compiler options using the &lt;a href=&quot;https://www.typescriptlang.org/docs/handbook/tsconfig-json.html&quot;&gt;tsconfig.json&lt;/a&gt; file. I created this file but every time I compiled the project it didn’t do anything different.&lt;/p&gt;
&lt;p&gt;I almost pulling out my hair in frustration, so I decided to dig in deeper to find out why this was happening.
First, I ran msbuild with detailed logging. That showed up the following line just before the CompileTypeScript
    target was run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Target &quot;PreComputeCompileTypeScriptWithTSConfig&quot; skipped, due to false condition; (&apos;@(ConfigFiles)&apos; != &apos;&apos;) was evaluated as (&apos;&apos; != &apos;&apos;).
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A bit more digging led me to
&lt;code&gt;packages\Microsoft.TypeScript.MSBuild.2.3.1\tools\net45\Microsoft.TypeScript.targets&lt;/code&gt; – This defines
that &lt;code&gt;PreComputeCompileTypeScriptWithTSConfig&lt;/code&gt; target which is looking for &lt;code&gt;@(ConfigFiles)&lt;/code&gt;,
which in turn is set in target &lt;code&gt;FindConfigFiles&lt;/code&gt;. That target calls the &lt;code&gt;FindConfigFiles&lt;/code&gt; task
that is in TypeScript.Tasks.dll.&lt;/p&gt;
&lt;p&gt;Firing up JetBrains dotPeek to reflect on the code for FindConfigTasks shows that it uses the
&lt;code&gt;ContentFiles&lt;/code&gt; property to look for existing tsconfig.json files, and that property is set to
&lt;code&gt;@(Content)&lt;/code&gt; in the targets file.&lt;/p&gt;
&lt;p&gt;Jumping back to my project, I notice this:
&lt;img src=&quot;https://david.gardiner.net.au/_astro/tsconfig-buildaction-none.BioL0YgK_ZwmjzH.webp&quot; alt=&quot;Screenshot of tsconfig.json and Build Action set to None&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Ah haa! Let’s set that &lt;strong&gt;Build Action&lt;/strong&gt; to &lt;strong&gt;Content&lt;/strong&gt; and try again..
Yes! Building the project shows &lt;code&gt;tsc.exe&lt;/code&gt; being passed the &lt;code&gt;--project&lt;/code&gt; parameter pointing to the tsconfig.json file!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2015/04/aspnet-websockets-basics</id>
    <updated>2015-04-19T19:13:00.001+09:30</updated>
    <title>ASP.NET WebSockets basics</title>
    <link href="https://david.gardiner.net.au/2015/04/aspnet-websockets-basics" rel="alternate" type="text/html" title="ASP.NET WebSockets basics"/>
    <category term=".NET"/>
    <category term="WWW"/>
    <published>2015-04-19T19:13:00.001+09:30</published>
    <summary type="html">Back in 2012, ASP.NET 4.5 and IIS 8 shipped with built-in support for WebSockets.</summary>
    <content type="html">
&lt;p&gt;Back in 2012, ASP.NET 4.5 and IIS 8 shipped with built-in support for &lt;a href=&quot;https://websockets.spec.whatwg.org/&quot;&gt;WebSockets&lt;/a&gt;. If you plan to support using WebSockets on the server today, you’ll most likely use &lt;a href=&quot;https://dotnet.microsoft.com/en-us/apps/aspnet&quot;&gt;SignalR&lt;/a&gt;, which makes this all quite easy, but I thought it would be educational to take a step back and see what’s involved in just using the framework’s basic support.&lt;/p&gt;
&lt;p&gt;To try this out I created a new ASP.NET MVC web project.&lt;/p&gt;
&lt;p&gt;I then added a new ‘Generic Handler’ item to the project and named it MyHandler.ashx&lt;/p&gt;
&lt;p&gt;The contents of this hander are based on the example from &lt;a href=&quot;http://www.asp.net/aspnet/overview/aspnet-and-visual-studio-2012/whats-new#_Toc318097383&quot;&gt;What’s New in ASP.NET 4.5&lt;/a&gt;. It essentially echoes any content received back to the caller:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using System.Web.WebSockets;

namespace DemoWebSockets
{
    public class MyHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.AcceptWebSocketRequest(ProcessWebSocket);
        }

        public bool IsReusable
        {
            get { return false; }
        }

        private async Task ProcessWebSocket(AspNetWebSocketContext context)
        {
            var socket = context.WebSocket;
            while (true)
            {
                var buffer = new ArraySegment(new byte[1024]);

                // Asynchronously wait for a message to arrive from a client
                var result = await socket.ReceiveAsync(buffer, CancellationToken.None);

                // If the socket is still open, echo the message back to the client
                if (socket.State == WebSocketState.Open)
                {
                    var userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
                    userMessage = string.Format(&quot;You sent: {0} at {1}&quot;, userMessage, DateTime.Now.ToLongTimeString());
                    buffer = new ArraySegment(Encoding.UTF8.GetBytes(userMessage));

                    // Asynchronously send a message to the client
                    await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                }
                else
                {
                    break;
                }
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I then modified the index.cshtml page&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;row&quot;&amp;gt;      
    &amp;lt;div class=&quot;col-md-12&quot;&amp;gt;
        &amp;lt;label for=&quot;msgText&quot;&amp;gt;Text to send:&amp;lt;/label&amp;gt;        
        &amp;lt;input id=&quot;msgText&quot; type=&quot;text&quot; /&amp;gt;&amp;lt;br /&amp;gt;        
        &amp;lt;input id=&quot;Trigger&quot; type=&quot;button&quot; onclick=&quot;CallWebSocket(); return false;&quot; value=&quot;Send&quot; /&amp;gt;
        &amp;lt;hr /&amp;gt;
    &amp;lt;div id=&quot;serverData&quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
    var socket = new WebSocket(&quot;ws://localhost:51057/MyHandler.ashx&quot;);
    // Receive a string message from the server.     
    socket.onmessage = function (msg) {
        document.getElementById(&quot;serverData&quot;).innerHTML = msg.data;
    };     
        
    function CallWebSocket() {         
        if (socket.OPEN) {             
            // Send a string message from the browser.             
            socket.send(document.getElementById(&quot;msgText&quot;).value);         
        }     
    }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And here’s the finished product:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/2015/04/image%5b4%5d.png&quot; alt=&quot;Screenshot showing example of web page&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20240720033117/https://blogs.msdn.com/b/youssefm/archive/2012/07/17/building-real-time-web-apps-with-asp-net-webapi-and-websockets.aspx&quot;&gt;Youssef also shows how to create a handler using WebAPI&lt;/a&gt;, and server-side configuration to enable IIS WebSocket support.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2012/01/imagine-cup-video-team-apptenders-from</id>
    <updated>2012-01-28T22:47:00.000+10:30</updated>
    <title>Imagine Cup Video - Team Apptenders from Croatia</title>
    <link href="https://david.gardiner.net.au/2012/01/imagine-cup-video-team-apptenders-from" rel="alternate" type="text/html" title="Imagine Cup Video - Team Apptenders from Croatia"/>
    <category term="UniSA"/>
    <category term="WWW"/>
    <published>2012-01-28T22:47:00.000+10:30</published>
    <summary type="html">Some of the first projects I worked on when I began my stint at UniSA many years ago was a number of multimedia applications for the School of Physiotherapy (now part of the School of Health Sciences).</summary>
    <content type="html">&lt;p&gt;Some of the first projects I worked on when I began my stint at UniSA many years ago was a number of multimedia applications for the School of Physiotherapy (now part of the &lt;a href=&quot;https://web.archive.org/web/20120404122907/http://www.unisa.edu.au:80/hls/default.asp&quot;&gt;School of Health Sciences&lt;/a&gt;). This was pre-Web, so these were CD-ROM apps - back when the CD burner cost about $6,000 and blank CDs were $20 each! Hence my interest in this Imagine Cup entry - using a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kinect&quot;&gt;Kinect&lt;/a&gt; controller to aid in physiotherapy exercises. Brilliant! Having a speech pathologist sister in-law also makes me wonder whether the Kinect could have applications in that field too. It does have a 4-microphone array, but I I&apos;m not sure if it could pick up facial gestures with enough detail.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2010/06/aspnet-web-host-suggestions</id>
    <updated>2010-06-17T23:12:00.001+09:30</updated>
    <title>ASP.NET web host suggestions?</title>
    <link href="https://david.gardiner.net.au/2010/06/aspnet-web-host-suggestions" rel="alternate" type="text/html" title="ASP.NET web host suggestions?"/>
    <category term="Domain hosting"/>
    <category term="WWW"/>
    <published>2010-06-17T23:12:00.001+09:30</published>
    <summary type="html">I&apos;m wanting to change the hosting provider that I use to host the Australian Carnivorous Plant Society&apos;s website.</summary>
    <content type="html">&lt;p&gt;I&apos;m wanting to change the hosting provider that I use to host the &lt;a href=&quot;https://web.archive.org/web/20100116161206/http://www.acps.org.au:80/&quot;&gt;Australian Carnivorous Plant Society&apos;s website&lt;/a&gt;. I&apos;ve been with with &lt;a href=&quot;http://www.seekdotnet.com&quot;&gt;SeekDotNet&lt;/a&gt; since 2006, but would like some more modern features and the ability to pay using the society&apos;s PayPal account (instead of using my own personal credit card for which I then need to get reimbursed :-( )&lt;/p&gt;
&lt;p&gt;I&apos;m currently paying $US8.75/month for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ASP.NET 3.5&lt;/li&gt;
&lt;li&gt;IIS 6&lt;/li&gt;
&lt;li&gt;1.5 GB disk (only using 70MB!)&lt;/li&gt;
&lt;li&gt;SQL 2005 (100 MB max)&lt;/li&gt;
&lt;li&gt;30GB bandwidth&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I would like to pay using PayPal for roughly the same price and have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ASP.NET 4&lt;/li&gt;
&lt;li&gt;IIS 7/7.5&lt;/li&gt;
&lt;li&gt;At least 1GB disk space&lt;/li&gt;
&lt;li&gt;SQL 2008/2008 R2 (at least 100 MB!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Any suggestions?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2009/11/office-communicator-and-tel-protocol</id>
    <updated>2009-11-18T22:02:00.001+10:30</updated>
    <title>Office Communicator and the tel: protocol</title>
    <link href="https://david.gardiner.net.au/2009/11/office-communicator-and-tel-protocol" rel="alternate" type="text/html" title="Office Communicator and the tel: protocol"/>
    <category term="WWW"/>
    <published>2009-11-18T22:02:00.001+10:30</published>
    <summary type="html">I was wondering today whether Office Communicator offered any integration with web pages to enable calling a phone number on a web page.</summary>
    <content type="html">&lt;p&gt;I was wondering today whether Office Communicator offered any integration with web pages to enable calling a phone number on a web page. It turns out it does (&lt;a href=&quot;https://web.archive.org/web/20090106194809/http://www.communicatorteam.com/archive/2008/02/18/69.aspx&quot;&gt;as the Communicator team explains on their blog&lt;/a&gt;) via the &lt;a href=&quot;https://www.ietf.org/rfc/rfc2806.txt&quot;&gt;tel: protocol&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I confirmed this by inspecting the registry on a computer with the Office Communicator 2007 client installed. Sure enough, it is registered for tel: (and also callto:).&lt;/p&gt;
&lt;p&gt;If your page is just for your intranet, you can probably get away with the local number, but the RFC strongly recommends you use full &quot;international form&quot; – that way the number should be callable from anywhere. eg.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Telephone: &amp;lt;a href=&quot;tel:+3585551234567&quot;&amp;gt;+358-555-1234567&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I don&apos;t have Communicator installed on my home PC, but I do have Skype. A quick check of the registry confirmed that Skype has registered as a handler for callto: but there is no tel:.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2009/11/stack-overflow-careers</id>
    <updated>2009-11-05T07:00:00.000+10:30</updated>
    <title>Stack Overflow Careers</title>
    <link href="https://david.gardiner.net.au/2009/11/stack-overflow-careers" rel="alternate" type="text/html" title="Stack Overflow Careers"/>
    <category term="WWW"/>
    <published>2009-11-05T07:00:00.000+10:30</published>
    <summary type="html">Jeff has announced careers.stackoverflow.com, and I&apos;ve jumped in quick to grab http://careers.stackoverflow.com/davidgardiner</summary>
    <content type="html">&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20091106062507/http://www.codinghorror.com:80/blog/archives/001308.html&quot;&gt;Jeff has announced&lt;/a&gt; &lt;a href=&quot;http://careers.stackoverflow.com&quot;&gt;careers.stackoverflow.com&lt;/a&gt;, and I&apos;ve jumped in quick to grab &lt;a href=&quot;https://web.archive.org/web/20150910073321/http://careers.stackoverflow.com/davidgardiner&quot;&gt;http://careers.stackoverflow.com/davidgardiner&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Some other places you can find me in the social network &quot;cloud&quot; are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.linkedin.com/in/davidrgardiner&quot;&gt;http://www.linkedin.com/in/davidrgardiner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.facebook.com/david.r.gardiner&quot;&gt;http://www.facebook.com/david.r.gardiner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://twitter.com/flcdrg&quot;&gt;http://twitter.com/flcdrg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2009/09/hotmail-accounts-hacked-for-sending</id>
    <updated>2009-09-29T09:32:00.001+09:30</updated>
    <title>Hotmail accounts hacked for sending iPhone spam</title>
    <link href="https://david.gardiner.net.au/2009/09/hotmail-accounts-hacked-for-sending" rel="alternate" type="text/html" title="Hotmail accounts hacked for sending iPhone spam"/>
    <category term="WWW"/>
    <published>2009-09-29T09:32:00.001+09:30</published>
    <summary type="html">I&apos;ve had a few family and friends now who have apparently had their hotmail email accounts hacked for the purpose of sending spam to all the people in their contacts (including me!)</summary>
    <content type="html">&lt;p&gt;I&apos;ve had a few family and friends now who have apparently had their hotmail email accounts hacked for the purpose of sending spam to all the people in their contacts (including me!)&lt;/p&gt;
&lt;p&gt;The spam (who&apos;s grammar should make it obviously not from the original sender) takes the form of&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;hi,
how are you?
recently, I got a nice site: &amp;lt;&lt;a href=&quot;http://www.nottheoriginalsite.com%3E&quot;&gt;www.nottheoriginalsite.com&amp;gt;&lt;/a&gt;
I brought some items from them. Wow, it is very nice.
low price and good quality (iphone new model 3GS 16 GB only 385 euro)
they also sell Wii, DJ, TV, laptop,camera and so on.
how do you think? login and have a look at it!
yours truly,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As best I can tell, they&apos;ve done this either via guessing passwords or maybe via some kind of phishing attack. One reason for this belief is that for one incident I saw, the spam was saved in the sender&apos;s &quot;Sent Items&quot; folder, just like other regular email that they had sent.&lt;/p&gt;
&lt;p&gt;If you have a hotmail account, I&apos;d strongly recommend you ensure your password is long enough to be extremely difficult to guess. A &lt;a href=&quot;https://en.wikipedia.org/wiki/Passphrase&quot;&gt;passphrase&lt;/a&gt; instead of just a password is probably the best way to do this.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2009/09/why-websense-is-stupid-and-i-told-them</id>
    <updated>2009-09-22T16:18:00.001+09:30</updated>
    <title>Why Websense is stupid (and I told them so)</title>
    <link href="https://david.gardiner.net.au/2009/09/why-websense-is-stupid-and-i-told-them" rel="alternate" type="text/html" title="Why Websense is stupid (and I told them so)"/>
    <category term="Conferences"/>
    <category term="WWW"/>
    <published>2009-09-22T16:18:00.001+09:30</published>
    <summary type="html">One of the vendors who happened to be exhibiting at TechEd Australia this year was a company called Websense.</summary>
    <content type="html">&lt;p&gt;One of the vendors who happened to be exhibiting at TechEd Australia this year was a company called Websense.&lt;/p&gt;
&lt;p&gt;They were giving away T-shirts, so it was only after I had received my free shirt from them that I then proceeded to tell them how stupid and horrible their software was.&lt;/p&gt;
&lt;p&gt;This seem to take the Websense staff a bit by surprise and they tried to defend their product assuring me with words to the effect that their software was wonderful and couldn&apos;t possibly be faulty and had the &quot;largest database&quot;. Well let me assure you &quot;quantity&quot; definitely does not equate to &quot;quality&quot;, and it may be no coincidence that their company name rhymes with &quot;nonsense&quot; :-)&lt;/p&gt;
&lt;p&gt;Don&apos;t believe me? Well take a look at this example:&lt;/p&gt;
&lt;p&gt;Try and browse &lt;a href=&quot;https://opensource.org/license/BSD-2-Clause&quot;&gt;http://www.opensource.org/licenses/bsd-license.html&lt;/a&gt; through Websense and you are greeted with this response:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Reason&lt;/th&gt;
&lt;th&gt;The Websense category &quot;Entertainment&quot; is filtered.&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;URL&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.opensource.org/licenses/bsd-license.html&quot;&gt;http://www.opensource.org/licenses/bsd-license.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Presumably the legal department must have a fair bit of influence at Websense, Inc. as I don&apos;t think anyone else would consider reading software licenses &apos;Entertainment&apos;.&lt;/p&gt;
&lt;p&gt;It just goes to reinforce the enhancement Mitch Denny made in his &lt;a href=&quot;/2009/09/tech-ed-2009-thursday&quot;&gt;Software Development Pitfalls talk&lt;/a&gt; to point 5 of Jeff Attwood&apos;s &lt;a href=&quot;https://web.archive.org/web/20090921172130/http://www.codinghorror.com:80/blog/archives/000666.html&quot;&gt;Programmer&apos;s Bill of Rights&lt;/a&gt; :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Every programmer shall have a fast, &lt;em&gt;unfiltered&lt;/em&gt; internet connection&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ah, we can but dream.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2009/05/blog-moved-to-httpdavidgardinernetau</id>
    <updated>2009-05-13T20:56:00.001+09:30</updated>
    <title>Blog moved to http://david.gardiner.net.au</title>
    <link href="https://david.gardiner.net.au/2009/05/blog-moved-to-httpdavidgardinernetau" rel="alternate" type="text/html" title="Blog moved to http://david.gardiner.net.au"/>
    <category term="Blogging"/>
    <category term="WWW"/>
    <published>2009-05-13T20:56:00.001+09:30</published>
    <summary type="html">I’ve decided to move my blog to a custom URL.</summary>
    <content type="html">&lt;p&gt;I’ve decided to move my blog to a custom URL. It is still hosted by blogger, and the old address should continue to redirect to &lt;a href=&quot;https://david.gardiner.net.au&quot;&gt;http://david.gardiner.net.au&lt;/a&gt;. If you are subscribed via a feed, then you shouldn’t need to change anything either.&lt;/p&gt;
&lt;p&gt;I wonder what that will do to my page rank?&lt;/p&gt;
</content>
  </entry>
</feed>
