<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>musc@&#62; $daniele.rant &#124; Out-Blog &#187; Coding</title>
	<atom:link href="http://www.muscetta.com/category/Coding/feed" rel="self" type="application/rss+xml" />
	<link>http://www.muscetta.com</link>
	<description>Superior Dedication - If you try hard enough, you might even get it to work.</description>
	<lastBuildDate>Sun, 11 Mar 2012 18:49:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Inversely Proportional</title>
		<link>http://www.muscetta.com/2010/11/17/inversely-proportional/</link>
		<comments>http://www.muscetta.com/2010/11/17/inversely-proportional/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 13:42:34 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=514</guid>
		<description><![CDATA[Some time ago I was reading www.caffeinatedcoder.com/book-review-the-c-programming-la&#8230; [...] Since a good portion of the C# books are between the 500 and 1000 page range, it was refreshing to read a book that was less than 200 pages. Partly this is because when the book was published the surface area of the reusable API was a [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/5135380596/"><img src="http://farm5.static.flickr.com/4027/5135380596_3e5ae05b0d.jpg" alt="Inversely Proportional" /></a></p>
<p>Some time ago I was reading <a rel="nofollow" href="http://www.caffeinatedcoder.com/book-review-the-c-programming-language/">www.caffeinatedcoder.com/book-review-the-c-programming-la&#8230;</a></p>
<blockquote><p>[...] Since a good portion of the C# books are between the 500 and 1000 page range, it was refreshing to read a book that was less than 200 pages. Partly this is because when the book was published the surface area of the reusable API was a small fraction of what it is now. However, I also wonder if there was an expectation of disciplined conciseness in technical writing back in the late 80’s that simply no longer exists today. [...]</p></blockquote>
<p>I think this is a very important point. But then, again, it was no secret &#8211; this was written in the <a rel="nofollow" href="http://www.trunix.org/programlama/c/CProgrammingLanguage/preface1.html">Preface to the first edition of that book</a>:</p>
<blockquote><p>[...] is not a &#034;very high level&#034; language, nor a &#034;big&#034; one, and is not specialized to any particular area of application. But its absence of resrictions and its generality make it more convenient and effective for many tasks than supposedly more powerful languages. [...]</p></blockquote>
<p>I think it all boils down to simplicity, as Glenn Scott says in <a rel="nofollow" href="http://glennsc.com/start-a-revolution-with-confident-simplicity">glennsc.com/start-a-revolution-with-confident-simplicity</a></p>
<blockquote><p>[...] To master this technique you need to adopt this mindset that your product is, say, simple and clean, and you just know this, and you are confident and assured of this. There is no urgent need to “prove” anything. [...]</p></blockquote>
<p>Another similar book on a (different) programming language, is <a rel="nofollow" href="http://www.ruby-doc.org/docs/ProgrammingRuby/">&#034;Programming Ruby, the pragmatic programmer&#039;s guide&#034;</a> which starts with</p>
<blockquote><p>[...] This book is a tutorial and reference for the Ruby programming language. Use Ruby, and you&#039;ll write better code, be more productive, and enjoy programming more. [...] As Pragmatic Programmers we&#039;ve tried many, many languages in our search for tools to make our lives easier, for tools to help us do our jobs better. Until now, though, we&#039;d always been frustrated by the languages we were using. [...]</p></blockquote>
<p>Of course that language is simple and sweet, very expressive, and programmers are seen as having to be &#034;pragmatic&#034;. No nonsensical, incredibly complex cathedrals (in the language itself and in the documentation) &#8211; but quick and dirty things that just WORK.</p>
<p>But way too often, the size of a book is considered a measure for its quality and depth.<br />
I recently read on Twitter about an upcoming &#034;Programming Windows Phone 7&#034; book that would be more than a thousand pages in size: <a rel="nofollow" href="http://twitter.com/#!/MicrosoftPress/status/27374650771">twitter.com/#!/MicrosoftPress/status/27374650771</a></p>
<p>I mean: I do understand that there are many API&#039;s to take a look at and the book wants to be comprehensive&#8230;but&#8230;. do they really think that the sheer *size* of a book (&gt;1000 pages) is an advantage in itself? it might actually scare people away, for how I see things. But it must be me.</p>
<p>In the meantime the book has been released and can be dowloaded from here <a rel="nofollow" href="http://blogs.msdn.com/b/microsoft_press/archive/2010/10/28/free-ebook-programming-windows-phone-7-by-charles-petzold.aspx">blogs.msdn.com/b/microsoft_press/archive/2010/10/28/free-&#8230;</a></p>
<p>I have not looked at it yet &#8211; when I will have time to take a look at it I&#039;ll be able to judge better&#8230;</p>
<p>for now I only incidentally noticed that a quick search for <a rel="nofollow" href="http://www.amazon.com/Professional-iPhone-iPod-touch-Programming/dp/0470251557#_">books</a> about <a rel="nofollow" href="http://www.amazon.com/gp/product/0321503619?ie=UTF8&amp;tag=shinthin-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321503619#_">programming</a> the <a rel="nofollow" href="http://www.amazon.com/Beginning-iPhone-Development-Exploring-SDK/dp/1430216263#_">iPhone/iPad</a> returns books that are between 250 and 500 pages maximum&#8230;</p>
<p>And yet simplicity CAN be known to us, and some teams really &#034;Get it&#034;: take Powershell, for example &#8211; it is a refreshing example of this: the <a rel="nofollow" href="http://blogs.msdn.com/b/powershell/">official powershell blog</a> has a subtitle of &#034;changing the world, one line at the time&#034; &#8211; that&#039;s a strong statement&#8230; but in line with the empowerment that simplicity enables. In fact, Bruce Payette&#039;s book &#034;Powershell in Action&#034; is also not huge.<br />
I suppose it must be a coincidence. Or maybe not.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2010/11/17/inversely-proportional/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Audit Collection Services Database Partitions Size Report</title>
		<link>http://www.muscetta.com/2010/05/05/audit-collection-services-database-partitions-size-report/</link>
		<comments>http://www.muscetta.com/2010/05/05/audit-collection-services-database-partitions-size-report/#comments</comments>
		<pubDate>Wed, 05 May 2010 21:45:31 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[ACS]]></category>
		<category><![CDATA[Audit]]></category>
		<category><![CDATA[opsmgr]]></category>
		<category><![CDATA[queries]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[reporting]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[SSRS]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=499</guid>
		<description><![CDATA[A number of people I have talked to liked my previous post on ACS sizing. One thing that was not extremely easy or clear to them in that post was *how* exactly I did one thing I wrote: […] use the dtEvent_GUID table to get the number of events for that day, and use the [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>A number of people I have talked to liked <a href="http://www.muscetta.com/2010/03/18/a-few-thoughts-on-sizing-audit-collection-system/">my previous post on ACS sizing</a>. One thing that was not extremely easy or clear to them in that post was *how* exactly I did one thing I wrote:</p>
<blockquote><p><em>[…] use the <strong>dtEvent_GUID</strong> table to get the number of events for that day, and use the stored procedure “sp_spaceused”  against that same table to get an overall idea of how much space that day is taking in the database […]</em></p></blockquote>
<p>To be completely honest, I do not expect people to do this manually a hundred times if they have a hundred partitions. In fact, I have been doing this for a while with a script which will do the looping for me and run that sp_spaceused for me a number of time. I cannot share that script, but I do realize that this automation is very useful, therefore I wrote a “stand-alone” SQL query which, using a couple of temporary tables, produces a similar type of output. I also went a step further and packaged it into a SQL Server Reporting Services Report for everyone’s consumption. The report should look like the following screenshot, featuring a chart and the table with the numerical information about each and every partition in the database:</p>
<p><a href="http://www.muscetta.com/wp-content/uploads/image50.png" rel="lightbox[499]"><img style="display: inline; border: 0px;" title="ACS Partitions Report" src="http://www.muscetta.com/wp-content/uploads/image_thumb1.png" border="0" alt="ACS Partitions Report" width="640" height="351" /></a></p>
<p><a href="http://cid-aaf797a1484e6150.office.live.com/self.aspx/Public/ACSPartitionsReport.zip">You can download the report from here</a>.</p>
<p>You need to upload it to your report server, and change the data source to the shared Data Source that also the built-in ACS Reports use, and it should work.</p>
<p><strong>[NOTE/UPDATE May 4th 2011: This report has a few bugs. I have posted the updated query on <a href="http://www.muscetta.com/2011/05/04/improved-acs-partitions-query/">http://www.muscetta.com/2011/05/04/improved-acs-partitions-query/</a> . I am sorry I can't provide a ready made report with the fix right now. Make sure you understand this and don't implement it without testing.]</strong></p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2010/05/05/audit-collection-services-database-partitions-size-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpsMgr Eventlog analysis with Powershell</title>
		<link>http://www.muscetta.com/2009/12/16/opsmgr-eventlog-analysis-with-powershell/</link>
		<comments>http://www.muscetta.com/2009/12/16/opsmgr-eventlog-analysis-with-powershell/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 10:17:35 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[eventlog]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=489</guid>
		<description><![CDATA[The following technique should already be understood by any powersheller. Here we focus on Operations Manager log entries, even if the data mining technique shows is entirely possibly – and encouraged &#8211; with any other event log. Let’s start by getting our eventlog into a variable called $evt: PS&#160; &#62;&#62; $evt = Get-Eventlog “Operations Manager” [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>The following technique should already be understood by any powersheller. Here we focus on Operations Manager log entries, even if the data mining technique shows is entirely possibly – and encouraged <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  &#8211; with any other event log.</p>
<p>Let’s start by getting our eventlog into a variable called $evt:</p>
<p><strong>PS&#160; &gt;&gt; $evt = Get-Eventlog “Operations Manager”</strong></p>
<p>The above only works locally in POSH v1.</p>
<p>In POSH v2 you can go remotely by using the “-computername” parameter:</p>
<p><strong>PS&#160; &gt;&gt; $evt = Get-Eventlog “Operations Manager” –computername RMS.domain.com</strong></p>
<p>Anyhow, you can get to this remotely also in POSHv1 with this other more “dotNET-tish” syntax:</p>
<p><strong>PS &gt;&gt; $evt = (New-Object System.Diagnostics.Eventlog -ArgumentList &quot;Operations Manager&quot;).get_Entries()</strong></p>
<p>you could even export this (or any of the above) to a CLIXML file:</p>
<p><strong>PS &gt;&gt; (New-Object System.Diagnostics.Eventlog -ArgumentList &quot;Operations Manager&quot;).get_Entries() | export-clixml -path c:\evt\Evt-OpsMgr-RMS.MYDOMAIN.COM.xml</strong></p>
<p>and then you could reload your eventlog to another machine:</p>
<p><strong>PS&#160; &gt;&gt; $evt = import-clixml c:\evt\Evt-OpsMgr-RMS.MYDOMAIN.COM.xml</strong>     </p>
<p>whatever way you used to populate your $evt&#160; variable, be it from a “live” eventlog or by re-importing it from XML, you can then start analyzing it:</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Entrytype -match &quot;Error&quot;} | select EventId,Source,Message | group eventid </strong></p>
<p>Count Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Group    <br />&#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8211;     <br />1510 4509&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=4509; Source=HealthService; Message=The constructor for the managed module type &quot;Microsoft.EnterpriseManagement.Mom.DatabaseQueryModules.GroupCalculatio.     <br />&#160;&#160; 15 20022&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=20022; Source=OpsMgr Connector; Message=The health service {7B0E947B-2055&#8230;     <br />&#160;&#160;&#160; 3 26319&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=26319; Source=OpsMgr SDK Service; Message=An exception was thrown while p&#8230;     <br />&#160;&#160;&#160; 1 4512&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=4512; Source=HealthService; Message=Converting data batch to XML failed w&#8230; </p>
<p>the above is functionally identical to the following:</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Entrytype -eq 1} | select EventID,Source,Message | group eventid </strong></p>
<p>Count Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Group    <br />&#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8211;     <br />1510 4509&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=4509; Source=HealthService; Message=The constructor for the managed modul&#8230;     <br />&#160;&#160; 15 20022&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=20022; Source=OpsMgr Connector; Message=The health service {7B0E947B-2055&#8230;     <br />&#160;&#160;&#160; 3 26319&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=26319; Source=OpsMgr SDK Service; Message=An exception was thrown while p&#8230;     <br />&#160;&#160;&#160; 1 4512&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=4512; Source=HealthService; Message=Converting data batch to XML failed w&#8230; </p>
<p>Note that Eventlog Entries’ type is an ENUM that has values of 0,1,2 – similarly to OpsMgr health states – but beware that their order is not the same, as shown in the following table:</p>
<table border="1" cellspacing="0" cellpadding="2" width="342">
<tbody>
<tr>
<td valign="top" width="71"><strong>Code</strong></td>
<td valign="top" width="137"><strong>OpsMgr States</strong></td>
<td valign="top" width="132"><strong>Events EntryType</strong></td>
</tr>
<tr>
<td valign="top" width="71">0</td>
<td valign="top" width="137">Not Monitored</td>
<td valign="top" width="132">Information</td>
</tr>
<tr>
<td valign="top" width="71">1</td>
<td valign="top" width="137">Success</td>
<td valign="top" width="132">Error</td>
</tr>
<tr>
<td valign="top" width="71">2</td>
<td valign="top" width="137">Warning</td>
<td valign="top" width="132">Warning</td>
</tr>
<tr>
<td valign="top" width="71">3</td>
<td valign="top" width="137">Critical</td>
<td valign="top" width="132">&#8211;</td>
</tr>
</tbody>
</table>
<p>Let’s now look at Information Events (Entrytype –eq 0)</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Entrytype -eq 0} | select EventID,Source,Message | group eventid </strong></p>
<p>Count Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Group    <br />&#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8211;     <br />4135 2110&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=2110; Source=HealthService; Message=Health Service successfully transferr&#8230;     <br />1548 21025&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=21025; Source=OpsMgr Connector; Message=OpsMgr has received new configura&#8230;     <br />4644 7026&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=7026; Source=HealthService; Message=The Health Service successfully logge&#8230;     <br />1548 7023&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=7023; Source=HealthService; Message=The Health Service has downloaded sec&#8230;     <br />1548 7025&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=7025; Source=HealthService; Message=The Health Service has authorized all&#8230;     <br />1548 7024&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=7024; Source=HealthService; Message=The Health Service successfully logge&#8230;     <br />1548 7028&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=7028; Source=HealthService; Message=All RunAs accounts for management gro&#8230;     <br />&#160;&#160; 16 20021&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=20021; Source=OpsMgr Connector; Message=The health service {7B0E947B-2055&#8230;     <br />&#160;&#160; 13 7019&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=7019; Source=HealthService; Message=The Health Service has validated all &#8230;     <br />&#160;&#160;&#160; 4 4002&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=4002; Source=Health Service Script; Message=Microsoft.Windows.Server.Logi&#8230; </p>
<p>&#160;</p>
<p>And “Warning” events (Entrytype –eq 2):</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Entrytype -eq 2} | select EventID,Source,Message | group eventid </strong></p>
<p>Count Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Group    <br />&#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8211;     <br />1511 1103&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=1103; Source=HealthService; Message=Summary: 1 rule(s)/monitor(s) failed &#8230;     <br />&#160; 501 20058&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=20058; Source=OpsMgr Connector; Message=The Root Connector has received b&#8230;     <br />&#160;&#160;&#160; 5 29202&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=29202; Source=OpsMgr Config Service; Message=OpsMgr Config Service could &#8230;     <br />&#160; 421 31501&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=31501; Source=Health Service Modules; Message=No primary recipients were &#8230;     <br />&#160;&#160; 18 10103&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=10103; Source=Health Service Modules; Message=In PerfDataSource, could no&#8230;     <br />&#160;&#160;&#160; 1 29105&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=29105; Source=OpsMgr Config Service; Message=The request for management p&#8230; </p>
<p>&#160;</p>
<p>&#160;</p>
<p>Ok now let’s see those event 20022, for example… so we get an idea of which healthservices they are referring to (20022 indicates&quot; “hearthbeat failure”, btw):</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.eventid -eq 20022} | select message </strong></p>
<p>Message    <br />&#8212;&#8212;-     <br />The health service {7B0E947B-2055-C12A-B6DB-DD6B311ADF39} running on host webapp3.domain1.mydomain.com and s&#8230;     <br />The health service {E3B3CCAA-E797-4F08-860F-47558B3DA477} running on host SERVER1.domain2.mydomain.com and serving&#8230;     <br />The health service {E3B3CCAA-E797-4F08-860F-47558B3DA477} running on host SERVER1.domain2.mydomain.com and serving&#8230;     <br />The health service {E3B3CCAA-E797-4F08-860F-47558B3DA477} running on host SERVER1.domain2.mydomain.com and serving&#8230;     <br />The health service {52E16F9C-EB1A-9FAF-5B9C-1AA9C8BC28E3} running on host DC4WK3.domain1.mydomain.com and se&#8230;     <br />The health service {F96CC9E6-2EC4-7E63-EE5A-FF9286031C50} running on host VWEBDL2.domain1.mydomain.com and s&#8230;     <br />The health service {71987EE0-909A-8465-C32D-05F315C301CC} running on host VDEVWEBPROBE2.domain2.mydomain.com&#8230;.     <br />The health service {BAF6716E-54A7-DF68-ABCB-B1101EDB2506} running on host XP2SMS002.domain2.mydomain.com and serving mana&#8230;     <br />The health service {30C81387-D5E0-32D6-C3A3-C649F1CF66F1} running on host stgweb3.domain3.mydomain.com and&#8230;     <br />The health service {3DCDD330-BBBB-B8E8-4FED-EF163B27DE0A} running on host VWEBDL1.domain1.mydomain.com and s&#8230;     <br />The health service {13A47552-2693-E774-4F87-87DF68B2F0C0} running on host DC2.domain4.mydomain.com and &#8230;     <br />The health service {920BF9A8-C315-3064-A5AA-A92AA270529C} running on host FSCLU2 and serving management group Pr&#8230;     <br />The health service {FAA3C2B5-C162-C742-786F-F3F8DC8CAC2F} running on host WEBAPP4.domain1.mydomain.com and s&#8230;     <br />The health service {3DCDD330-BBBB-B8E8-4FED-EF163B27DE0A} running on host WEBDL1.domain1.mydomain.com and s&#8230;     <br />The health service {3DCDD330-BBBB-B8E8-4FED-EF163B27DE0A} running on host WEBDL1.domain1.mydomain.com and s&#8230; </p>
<p>&#160;</p>
<p>or let’s look at some warning for the Config Service:</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Eventid -eq 29202} </strong></p>
<p>&#160;&#160; Index Time&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; EntryType&#160;&#160; Source&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; InstanceID Message    <br />&#160;&#160; &#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8212;&#8212;&#160;&#160; &#8212;&#8212;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8212;&#8212;- &#8212;&#8212;-     <br />5535065 Dec 07 21:18&#160; Warning&#160;&#160;&#160;&#160; OpsMgr Config Ser&#8230;&#160;&#160; 2147512850 OpsMgr Config Service could not retrieve a cons&#8230;     <br />5543960 Dec 09 16:39&#160; Warning&#160;&#160;&#160;&#160; OpsMgr Config Ser&#8230;&#160;&#160; 2147512850 OpsMgr Config Service could not retrieve a cons&#8230;     <br />5545536 Dec 10 01:06&#160; Warning&#160;&#160;&#160;&#160; OpsMgr Config Ser&#8230;&#160;&#160; 2147512850 OpsMgr Config Service could not retrieve a cons&#8230;     <br />5553119 Dec 11 08:24&#160; Warning&#160;&#160;&#160;&#160; OpsMgr Config Ser&#8230;&#160;&#160; 2147512850 OpsMgr Config Service could not retrieve a cons&#8230;     <br />5555677 Dec 11 10:34&#160; Warning&#160;&#160;&#160;&#160; OpsMgr Config Ser&#8230;&#160;&#160; 2147512850 OpsMgr Config Service could not retrieve a cons&#8230; </p>
<p>Once seen those, can you remember of any particular load you had on those days that justifies the instance space changing so quickly that the Config Service couldn’t keep up?</p>
<p>&#160;</p>
<p>Or let’s group those events with ID 21025 by hour, so we know how many Config recalculations we’ve had (which, if many, might indicate <a href="http://blogs.technet.com/kevinholman/archive/2009/10/05/what-is-config-churn.aspx">Config Churn</a>):</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Eventid -eq 21025} | select TimeGenerated | % {$_.TimeGenerated.ToShortDateString()} | group </strong></p>
<p>Count Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Group    <br />&#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8211;     <br />&#160;&#160; 39 12/7/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/7/2009, 12/7/2009, 12/7/2009, 12/7/2009&#8230;}     <br />&#160; 203 12/8/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/8/2009, 12/8/2009, 12/8/2009, 12/8/2009&#8230;}     <br />&#160; 217 12/9/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/9/2009, 12/9/2009, 12/9/2009, 12/9/2009&#8230;}     <br />&#160; 278 12/10/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/10/2009, 12/10/2009, 12/10/2009, 12/10/2009&#8230;}     <br />&#160; 259 12/11/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/11/2009, 12/11/2009, 12/11/2009, 12/11/2009&#8230;}     <br />&#160; 224 12/12/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/12/2009, 12/12/2009, 12/12/2009, 12/12/2009&#8230;}     <br />&#160; 237 12/13/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/13/2009, 12/13/2009, 12/13/2009, 12/13/2009&#8230;}     <br />&#160;&#160; 91 12/14/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/14/2009, 12/14/2009, 12/14/2009, 12/14/2009&#8230;} </p>
<p>&#160;</p>
<p>Event ID 21025 shows that there is a new configuration for the Management Group.</p>
<p>Event ID 29103 has a similar wording, but shows that there is a new configuration for a given Healthservice. These should normally be many more events, unless your only health Service is the RMS, which is unlikely…</p>
<p>If we look at the event description (“message”) in search for the name (or even the GUID, as both are present) or our RMS, as follows, then they should be the same numbers of the 21025 above:</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Eventid -eq 29103} | where {$_.message -match &quot;myrms.domain.com&quot;} | select TimeGenerated | % {$_.TimeGenerated.ToShortDateString()} | group </strong></p>
<p>Count Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Group    <br />&#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8211;     <br />&#160;&#160; 39 12/7/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/7/2009, 12/7/2009, 12/7/2009, 12/7/2009&#8230;}     <br />&#160; 203 12/8/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/8/2009, 12/8/2009, 12/8/2009, 12/8/2009&#8230;}     <br />&#160; 217 12/9/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/9/2009, 12/9/2009, 12/9/2009, 12/9/2009&#8230;}     <br />&#160; 278 12/10/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/10/2009, 12/10/2009, 12/10/2009, 12/10/2009&#8230;}     <br />&#160; 259 12/11/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/11/2009, 12/11/2009, 12/11/2009, 12/11/2009&#8230;}     <br />&#160; 224 12/12/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/12/2009, 12/12/2009, 12/12/2009, 12/12/2009&#8230;}     <br />&#160; 237 12/13/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/13/2009, 12/13/2009, 12/13/2009, 12/13/2009&#8230;}     <br />&#160;&#160; 91 12/14/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/14/2009, 12/14/2009, 12/14/2009, 12/14/2009&#8230;} </p>
<p>&#160;</p>
<p>Going back to the initial counts of events by their IDs, when showing the errors the counts above had spotted the presence of a lonely 4512 event, which might have gone undetected if just browsing the eventlog with the GUI, since it only occurred once.</p>
<p>Let’s take a look at it:</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.eventid -eq 4512} </strong></p>
<p>&#160;&#160; Index Time&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; EntryType&#160;&#160; Source&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; InstanceID Message    <br />&#160;&#160; &#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8212;&#8212;&#160;&#160; &#8212;&#8212;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8212;&#8212;- &#8212;&#8212;-     <br />5560756 Dec 12 11:18&#160; Error&#160;&#160;&#160;&#160;&#160;&#160; HealthService&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3221229984 Converting data batch to XML failed with error &#8230; </p>
<p>Now, when it is about counts, Powershell is great.&#160; But sometimes Powershell makes it difficult to actually READ the (long) event messages (descriptions) in the console. For example, our event ID 4512 is difficult to read in its entirety and gets truncated with trailing dots…</p>
<p>we can of course increase the window size and/or selecting only THAT one field to read it better:</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.eventid -eq 4512} | select message </strong></p>
<p>Message    <br />&#8212;&#8212;-     <br />Converting data batch to XML failed with error &quot;Not enough storage is available to complete this operation.&quot; (0x8007000E) in rule &quot;Microsoft.SystemCenter.ConfigurationService.CollectionRule.Event.ConfigurationChanged&quot; running for instance &quot;RMS.MYDOMAIN.COM&quot; with id:&quot;{04F4ADED-2C7F-92EF-D620-9AF9685F736F}&quot; in management group &quot;SCOMPROD&quot; </p>
<p>Or, worst case, if it still does not fit, we can still go and search for it in the actual, usual eventlog application… but at least we will have spotted it!</p>
<p>&#160;</p>
<p>The above wants to give you an idea of what is easily accomplished with some simple one-liners, and how it can be a useful aid in analyzing/digging into Eventlogs.</p>
<p>All of the above is ALSO be possible with Logparser, and it would actually be even less heavy on memory usage and it will be quicker, to be honest! </p>
<p>I just like Powershell syntax a lot more, and its ubiquity, which makes it a better option for me. Your mileage may vary, of course.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/12/16/opsmgr-eventlog-analysis-with-powershell/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The mystery of the lost registry values</title>
		<link>http://www.muscetta.com/2009/09/10/mistery-of-lost-registry-values/</link>
		<comments>http://www.muscetta.com/2009/09/10/mistery-of-lost-registry-values/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 14:53:44 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[32bit]]></category>
		<category><![CDATA[64bit]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Monad]]></category>
		<category><![CDATA[registry]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[StdRegProvider]]></category>
		<category><![CDATA[vbscript]]></category>
		<category><![CDATA[Wbem]]></category>
		<category><![CDATA[WMI]]></category>
		<category><![CDATA[Wow]]></category>
		<category><![CDATA[Wow32]]></category>
		<category><![CDATA[Wow64]]></category>
		<category><![CDATA[Wow6432Node]]></category>
		<category><![CDATA[wrapper]]></category>
		<category><![CDATA[x64]]></category>
		<category><![CDATA[x86]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=481</guid>
		<description><![CDATA[During the OpsMgr Health Check engagement we use custom code to assess the customer’s Management group, as I wrote here already. Given that the customer tells us which machine is the RMS, one of the very first things that we do in our tool is to connect to the RMS’s registry, and check the values [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>During the OpsMgr Health Check engagement we use custom code to assess the customer’s Management group, <a href="http://www.muscetta.com/2008/12/30/early-adoptions-health-checks-and-new-year-rants/">as I wrote here already</a>. Given that the customer tells us which machine is the RMS, one of the very first things that we do in our tool is to connect to the RMS’s registry, and check the values under <strong>HKLM\SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup </strong>to see which machine holds the database. It is a rather critical piece of information for us, as we run a number of queries afterward… so we need to know where the db is, obviously <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>I learned from here <a title="http://mybsinfo.blogspot.com/2007/01/powershell-remote-registry-and-you-part.html" href="http://mybsinfo.blogspot.com/2007/01/powershell-remote-registry-and-you-part.html">http://mybsinfo.blogspot.com/2007/01/powershell-remote-registry-and-you-part.html</a> how to access registry remotely thru powershell, by using .Net classes. This is also one of the methods illustrated in this other article on Technet Script Center <a href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/jan09/hey0105.mspx">http://www.microsoft.com/technet/scriptcenter/resources/qanda/jan09/hey0105.mspx</a> </p>
<p>Therefore the “core” instructions of the function I was using to access the registry looked like the following</p>
<p><!-- Code --></p>
<div class="dp-highlighter">
<ol class="dp-rb">
<li class="alt"><span><span>Function GetValueFromRegistry ([string]</span><span class="variable">$computername</span><span>, </span><span class="variable">$regkey</span><span>, </span><span class="variable">$value</span><span>)    </span></span></li>
<li><span>{   </span></li>
<li><span>     </span><span class="variable">$reg</span><span> = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(</span><span class="string">&#039;LocalMachine&#039;</span><span>, </span><span class="variable">$computername</span><span>)   </span></li>
<li><span>     </span><span class="variable">$regKey</span><span>= </span><span class="variable">$reg</span><span>.OpenSubKey(</span><span class="string">&#034;$regKey&#034;</span><span>)   </span></li>
<li><span>     </span><span class="variable">$result</span><span> = </span><span class="variable">$regkey</span><span>.GetValue(</span><span class="string">&#034;$value&#034;</span><span>)   </span></li>
<li><span>     </span><span class="keyword">return</span><span> </span><span class="variable">$result</span><span>  </span></li>
<li><span>}   </span></li>
</ol>
</div>
<p><span> </span></p>
<p>[Note: the actual function is bigger, and contains error handling, and logging, and a number of other things that are unnecessary here]</p>
<p>Therefore, the function was called as follows:<br />
<strong>GetValueFromRegistry $RMS &#034;SOFTWARE\\Microsoft\\Microsoft Operations Manager\\3.0\\Setup&#034; &#034;DatabaseServerName&#034;</strong><br />
Now so far so good.</p>
<p>In theory.</p>
<p> </p>
<p>Now for some reason that I could not immediately explain, we had noticed that this piece of code performing registry accessm while working most of the times, only on SOME occasions was giving errors about not being able to open the registry value…</p>
<p><a href="http://www.muscetta.com/wp-content/uploads/image45.png" rel="lightbox[481]"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image_thumb.png" border="0" alt="image" width="518" height="69" /></a></p>
<p>When you are onsite with a customer conducting an assessment, the PFE engineer does not always has the time to troubleshoot the error… as time is critical, we have usually resorted to just running the assessment from ANOTHER machine, and this “solved” the issue… but always left me wondering WHY this was giving an error. I had suspected an issue with permissions first, but it could not be as the permissions were obviously right: performing the assessment from another machine but with the same user was working!</p>
<p>A few days ago <a href="http://blogs.technet.com/stefan_stranger/">my colleague and buddy Stefan Stranger</a> figured out that this was related to the platform architecture:</p>
<ul>
<li>X64 client to x64 RMS was working</li>
<li>X64 client to x86 RMS was working</li>
<li>X86 client to x86 RMS was working</li>
<li><strong>X86 client to x64 RMS was NOT working</strong></li>
</ul>
<p>You don’t need to use our custom code to reproduce this, REGEDIT shows the behavior as well.</p>
<p>If, from a 64-bit server, you open a remote registry connection to 64-bit RMS server, you can see all OpsMgr registry keys:</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" src="http://www.muscetta.com/wp-content/uploads/clip_image002.jpg" border="0" alt="clip_image002" width="918" height="268" /></p>
<p>If, anyhow, from a 32-bit server, you open a remote registry connection to 64-bit RMS server, you don’t see ALL – but only SOME &#8211; OpsMgr registry keys:<br />
<img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" src="http://www.muscetta.com/wp-content/uploads/clip_image004.jpg" border="0" alt="clip_image004" width="863" height="192" /></p>
<p>So here’s the reason! This is what was happening! How could I not think of this before? It was nothing related to permissions, but to <a href="http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx">registry redirection</a>! The issue was happening because the 32 bit machine is using the 32bit registry editor and what it will do when accessing a 64bit machine will be to default to the Wow6432Node location in the registry. There all OpsMgr data won’t be in the WOW64 location on a 64bit machine, only some.</p>
<p>So, just like regedit, the 32bit powershell and the 32bit .Net framework were being redirected to the 32bit-compatibility registry keys… not finding the stuff we needed, whereas a 64bit application could find that. Any 32bit application by default gets redirected to a 32bit-safe registry.</p>
<p>So, after finally UNDERSTANDING what the issue was, I started wondering: ok&#8230; but<strong> how can I access the REAL “HLKM\SOFTWARE\Microsoft” key on a 64bit machine when running this FROM a 32bit machine – WITHOUT being redirected to “HKLM\SOFTWARE\Wow6432Node\Microsoft” ? </strong>What if my application CAN deal just fine with those values and actually NEEDs to access them?</p>
<p>The answer wasn’t as easy as the question. I did a bit of digging on this, and still I have NOT yet found a way to do this with the .Net classes. It seems that in a lot of situations, Powershell or even .Net classes are nice and sweet wrappers on the underlying Windows APIs… but for how sweet and easy they are, they are very often not very complete wrappers – letting you do just about enough for most situations, but not quite everything you would or could with the APi underneath. But I digress, here&#8230;</p>
<p>The good news is that I did manage to get this working, but I had to resort to using dear old WMI StdRegProvider… There are a number of locations on the Internet mentioning the issue of accessing 32bit registry from 64bit machines or vice versa, but all examples I have found were using VBScript. But I needed it in Powershell. Therefore I started with the <a href="http://msdn.microsoft.com/en-us/library/aa393067(VS.85).aspx">VBScript example code that is present here</a>, and I ported it to Powershell.</p>
<p>Handling the WMI COM object from Powershell was slightly less intuitive than in VBScript, and it took me a couple of hours to figure out how to change some stuff, especially this bit that sets the parameters collection:</p>
<blockquote><p>Set Inparams = objStdRegProv.Methods_(&#034;GetStringValue&#034;).Inparameters</p>
<p>Inparams.Hdefkey = HKLM</p>
<p>Inparams.Ssubkeyname = RegKey</p>
<p>Inparams.Svaluename = RegValue</p>
<p>Set Outparams = objStdRegProv.ExecMethod_(&#034;GetStringValue&#034;, Inparams,,objCtx)</p></blockquote>
<p>INTO this:</p>
<blockquote><p>$Inparams = ($objStdRegProv.Methods_ | where {$_.name -eq &#034;GetStringValue&#034;}).InParameters.SpawnInstance_()</p>
<p>($Inparams.Properties_ | where {$_.name -eq &#034;Hdefkey&#034;}).Value = $HKLM</p>
<p>($Inparams.Properties_ | where {$_.name -eq &#034;Ssubkeyname&#034;}).Value = $regkey</p>
<p>($Inparams.Properties_ | where {$_.name -eq &#034;Svaluename&#034;}).Value = $value</p>
<p>$Outparams = $objStdRegProv.ExecMethod_(&#034;GetStringValue&#034;, $Inparams, &#034;&#034;, $objNamedValueSet)</p></blockquote>
<p> </p>
<p>I have only done limited testing at this point and, even if the actual work now requires nearly <strong>15</strong> lines of code to be performed vs. the previous <strong>3 </strong>lines in the .Net implementation, it at least seems to work just fine.</p>
<p>What follows is the complete code of my replacement function, in all its <span style="text-decoration: line-through;">uglyness</span> glory:</p>
<p> </p>
<p><!-- Code --></p>
<div class="dp-highlighter">
<ol class="dp-rb">
<li class="alt"><span>Function GetValueFromRegistryThruWMI([string]</span><span class="variable">$computername</span><span>, </span><span class="variable">$regkey</span><span>, </span><span class="variable">$value</span><span>)   </span></li>
<li><span>{   </span></li>
<li><span>    </span><span class="comment">#constant for the HLKM </span><span>  </span></li>
<li><span>    </span><span class="variable">$HKLM</span><span> = </span><span class="string">&#034;&amp;h80000002&#034;</span><span>  </span></li>
<li><span> </span></li>
<li><span>    #creates an SwbemNamedValueSet object</span></li>
<li><span>    </span><span class="variable">$objNamedValueSet</span><span> = </span><span class="builtin">New-Object</span><span> -COM </span><span class="string">&#034;WbemScripting.SWbemNamedValueSet&#034;</span><span>  </span></li>
<li><span> </span></li>
<li><span>    #adds the actual value that will requests the target to provide 64bit-registry info</span></li>
<li><span>    </span><span class="variable">$objNamedValueSet</span><span>.Add(</span><span class="string">&#034;__ProviderArchitecture&#034;</span><span>, 64) | </span><span class="builtin">Out-Null</span><span>  </span></li>
<li> </li>
<li><span>    #back to all the other usual COM objects for WMI that you have used a zillion times in VBScript</span></li>
<li><span>    </span><span class="variable">$objLocator</span><span> = </span><span class="builtin">New-Object</span><span> -COM </span><span class="string">&#034;Wbemscripting.SWbemLocator&#034;</span><span>  </span></li>
<li><span>    </span><span class="variable">$objServices</span><span> = </span><span class="variable">$objLocator</span><span>.ConnectServer(</span><span class="variable">$computername</span><span>,</span><span class="string">&#034;root\default&#034;</span><span>,</span><span class="string">&#034;&#034;</span><span>,</span><span class="string">&#034;&#034;</span><span>,</span><span class="string">&#034;&#034;</span><span>,</span><span class="string">&#034;&#034;</span><span>,</span><span class="string">&#034;&#034;</span><span>,</span><span class="variable">$objNamedValueSet</span><span>)   </span></li>
<li><span>    </span><span class="variable">$objStdRegProv</span><span> = </span><span class="variable">$objServices</span><span>.Get(</span><span class="string">&#034;StdRegProv&#034;</span><span>)   </span></li>
<li><span>  </span></li>
<li class="alt"><span>    </span><span class="comment"># Obtain an InParameters object specific to the method. </span><span>  </span></li>
<li><span>    </span><span class="variable">$Inparams</span><span> = (</span><span class="variable">$objStdRegProv</span><span>.Methods_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;GetStringValue&#034;</span><span>}).InParameters.SpawnInstance_()   </span></li>
<li><span>  </span></li>
<li class="alt"><span>    </span><span class="comment"># Add the input parameters </span><span>  </span></li>
<li><span>    (</span><span class="variable">$Inparams</span><span>.Properties_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;Hdefkey&#034;</span><span>}).Value = </span><span class="variable">$HKLM</span><span>  </span></li>
<li><span>    (</span><span class="variable">$Inparams</span><span>.Properties_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;Ssubkeyname&#034;</span><span>}).Value = </span><span class="variable">$regkey</span><span>  </span></li>
<li><span>    (</span><span class="variable">$Inparams</span><span>.Properties_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;Svaluename&#034;</span><span>}).Value = </span><span class="variable">$value</span><span>  </span></li>
<li><span>  </span></li>
<li class="alt"><span>    </span><span class="comment">#Execute the method </span><span>  </span></li>
<li><span>    </span><span class="variable">$Outparams</span><span> = </span><span class="variable">$objStdRegProv</span><span>.ExecMethod_(</span><span class="string">&#034;GetStringValue&#034;</span><span>, </span><span class="variable">$Inparams</span><span>, </span><span class="string">&#034;&#034;</span><span>, </span><span class="variable">$objNamedValueSet</span><span>)   </span></li>
<li><span>  </span></li>
<li class="alt"><span>    </span><span class="comment">#shows the return value </span><span>  </span></li>
<li><span>    (</span><span class="variable">$Outparams</span><span>.Properties_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;ReturnValue&#034;</span><span>}).Value   </span></li>
<li><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">if</span><span> ((</span><span class="variable">$Outparams</span><span>.Properties_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;ReturnValue&#034;</span><span>}).Value -eq 0)   </span></li>
<li><span>    {   </span></li>
<li><span>       write-host </span><span class="string">&#034;it worked&#034;</span><span>  </span></li>
<li><span>       </span><span class="variable">$result</span><span> = (</span><span class="variable">$Outparams</span><span>.Properties_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;sValue&#034;</span><span>}).Value   </span></li>
<li><span>       write-host </span><span class="string">&#034;Result: $result&#034;</span><span>  </span></li>
<li><span>       </span><span class="keyword">return</span><span> </span><span class="variable">$result</span><span>  </span></li>
<li><span>    }   </span></li>
<li><span>    </span><span class="keyword">else</span><span>  </span></li>
<li><span>    {   </span></li>
<li><span>        write-host </span><span class="string">&#034;nope&#034;</span><span>  </span></li>
<li><span>    }   </span></li>
<li><span>}   </span></li>
</ol>
</div>
<p><span> </span></p>
<p><span>which can be called similarly to the previous one: </span><br />
<strong><span>GetValueFromRegistryThruWMI </span><span class="variable">$RMS</span><span> </span><span class="string">&#034;SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup&#034;</span><span> </span><span class="string">&#034;DatabaseServerName&#034;</span></strong></p>
<p>[Note: you don’t need the double\escape backslashes here, compared to the .Net implementation]</p>
<p>Enjoy your cross-architecture registry access: from 32bit to 64bit &#8211; and back!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/09/10/mistery-of-lost-registry-values/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Get-WmiCustom (aka: Get-WMIObject with timeout!)</title>
		<link>http://www.muscetta.com/2009/05/27/get-wmicustom/</link>
		<comments>http://www.muscetta.com/2009/05/27/get-wmicustom/#comments</comments>
		<pubDate>Wed, 27 May 2009 18:23:07 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[timeout]]></category>
		<category><![CDATA[WMI]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=443</guid>
		<description><![CDATA[I make heavy use of WMI. But when using it to gather information from customer’s machines for assessments, I sometimes find the occasional broken WMI repository. There are a number of ways in which WMI can become corrupted and return weird results. Most of the times you would just get errors, such as “Class not [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I make heavy use of WMI.</p>
<p>But when using it to gather information from customer’s machines for assessments, I sometimes find the occasional broken WMI repository. There are a number of ways in which WMI can become corrupted and return weird results. Most of the times you would just get errors, such as “Class not registered” or “provider load failure”. I can handle those errors from within scripts.</p>
<p>But there are some, more subtle &#8211; and annoying – ways in which the WMI repository can get corrupted. the situations I am talking about are the ones when WMI will accept your query… will say it is executing it… but it will never actually return any error, and just stay stuck performing your query forever. Until your client application decides to time out. Which in some cases does not happen.</p>
<p>Now that was my issue – when my assessment script (which was using the handy Powershell <a href="http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/get-wmiobject.mspx">Get-WmiObject cmdlet</a>) would hit one of those machines… the whole script would hang forever and never finish its job. Ok, sure, the solution to this would be actually FIXING the WMI repository and then try again. But remember I am talking of an assessment: if the information I am getting is just one piece of a bigger puzzle, and I don’t necessarily care about it and can continue without that information – I want to be able to do it, to skip that info, maybe the whole section, report an error saying I am not able to get that information, and continue to get the remaining info. I can still fix the issue on the machine afterward AND then run the assessment script again, but in the first place I just want to get a picture of how the system looks like. With the good and with the bad things. Especially, I do want to take that whole picture – not just a piece of it.</p>
<p>Unfortunately, the <a href="http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/get-wmiobject.mspx">Get-WmiObject cmdlet</a> does not let you specify a timeout. Therefore I cooked my own function which has a compatible behaviour to that of Get-WmiObject, but with an added “-timeout” parameter which can be set. I dubbed it “Get-WmiCustom”</p>
<p><strong>Function Get-WmiCustom([string]$computername,[string]$namespace,[string]$class,[int]$timeout=15)<br />
{<br />
$ConnectionOptions = new-object System.Management.ConnectionOptions<br />
$EnumerationOptions = new-object System.Management.EnumerationOptions </strong></p>
<p><strong> $timeoutseconds = new-timespan -seconds $timeout<br />
$EnumerationOptions.set_timeout($timeoutseconds) </strong></p>
<p><strong> $assembledpath = &#034;\\&#034; + $computername + &#034;\&#034; + $namespace<br />
#write-host $assembledpath -foregroundcolor yellow </strong></p>
<p><strong> $Scope = new-object System.Management.ManagementScope $assembledpath, $ConnectionOptions<br />
$Scope.Connect() </strong></p>
<p><strong> $querystring = &#034;SELECT * FROM &#034; + $class<br />
#write-host $querystring </strong></p>
<p><strong> $query = new-object System.Management.ObjectQuery $querystring<br />
$searcher = new-object System.Management.ManagementObjectSearcher<br />
$searcher.set_options($EnumerationOptions)<br />
$searcher.Query = $querystring<br />
$searcher.Scope = $Scope </strong></p>
<p><strong> trap { $_ } $result = $searcher.get() </strong></p>
<p><strong> return $result<br />
}</strong></p>
<p>You can call it as follows, which is similar to how you would call get-WmiObject</p>
<p><strong>get-wmicustom -class Win32_Service -namespace &#034;root\cimv2&#034; -computername server1.domain.dom</strong></p>
<p>or, of course, specifying the timeout (in seconds):</p>
<p><strong>get-wmicustom -class Win32_Service -namespace &#034;root\cimv2&#034; -computername server1.domain.dom –timeout 1</strong></p>
<p>and obviously, since the function returns objects just like the original cmdlet, it is also possible to pipe them to other commands:</p>
<p><strong>get-wmicustom -class Win32_Service -namespace &#034;root\cimv2&#034; -computername server1.domain.dom –timeout 1 | Format-Table</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/05/27/get-wmicustom/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Early Adoptions, Health Checks and New Year Rants.</title>
		<link>http://www.muscetta.com/2008/12/30/early-adoptions-health-checks-and-new-year-rants/</link>
		<comments>http://www.muscetta.com/2008/12/30/early-adoptions-health-checks-and-new-year-rants/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 15:10:26 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[MOM2005]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[HC]]></category>
		<category><![CDATA[Health Check]]></category>
		<category><![CDATA[HealthCheck]]></category>
		<category><![CDATA[Premier]]></category>
		<category><![CDATA[Premier Field Engineer]]></category>
		<category><![CDATA[RAP]]></category>
		<category><![CDATA[Risk Assessment Program]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[Support]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=390</guid>
		<description><![CDATA[Two days ago I read the following Tweet by Hugh MacLeod: &#034;[...] Early Adopter Problem: How to differentiate from the bandwagon, once the bandwagon starts moving faster than you are [...]&#034; That makes me think of early adoption of a few technologies I have been working with, and how the community around those evolved. For [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/dani3l3/3150411409/"><img src="http://farm4.static.flickr.com/3258/3150411409_8ce3a8ea75.jpg" alt="Generations" width="500" height="333" /></a></p>
<p>Two days ago I read <a href="http://twitter.com/gapingvoid/status/1082816395">the following Tweet by Hugh MacLeod</a>:</p>
<blockquote><p>&#034;[...] Early Adopter Problem: How to differentiate from the bandwagon, once the bandwagon starts moving faster than you are [...]&#034;</p></blockquote>
<p>That makes me think of early adoption of a few technologies I have been working with, and how the community around those evolved. For example:</p>
<p><strong>Operations Manager</strong>&#8230; early adoption meant that I have been working with it since the beta, had posted <a href="http://www.muscetta.com/2007/05/10/create-a-script-based-unit-monitor-in-opsmgr2007-via-the-gui/">one of the earliest posts about how to use a script in a Unit Monitor back in may 2007</a> (the product was released in April 2007 and there was NO documentation back then, so we had to really try to figure out everything&#8230;), but <a href="http://contoso.se/blog/?p=305">someone seems to think it is worth repeating the very same lesson in November 2008</a>, with not a lot of changes, as <a href="http://twitter.com/dani3l3/status/1030704645">I wrote here</a>. I don&#039;t mean being rude to Anders&#8230; repeating things will surely help the late adopters finding the information they need, of course.</p>
<p>Also, I started playing early with <strong>Powershell</strong>. <a href="http://www.muscetta.com/2006/11/24/out-blog/">I posted my first (and only) cmdlet</a> back in 2006. It was not a lot more than a test for myself to learn how to write one, but that&#039;s just to say that I started playing early with it. I have been using it <a href="http://www.muscetta.com/2007/05/30/death-by-right-click-delete-nope-powershell/">to automate tasks</a> for example.</p>
<p>Going back to the quote above, everyone gets on the bandwagon posting <a href="http://www.systemcenterforum.org/news/advanced-example-using-powershell-and-the-opsmgr-sdk-creating-and-updating-groups/">examples and articles</a>. I had been asked a few times about writing articles on OpsMgr and Powershell usage (for example by <a href="http://www.powershell.it">www.powershell.it</a>) but I declined, as I was too busy using this knowledge to do stuff for work (where “work” is defined as in “work that pays your mortgage”), rather than seeking personal prestige through articles and blogs. Anyway, that kind of articles are appearing now all over the Internet and the blogosphere now. The above examples made me think of early adoption, and the bandwagon that follows later on… but even as an early adopter, I was never very noisy or visible.</p>
<p>Now, going back to what I do for work, (which <a href="http://blogs.msdn.com/dmuscett/archive/2005/09/02/459914.aspx">I mentioned here</a> and <a href="http://www.muscetta.com/2007/12/27/simply-works/">here in the past</a>), I work in the <a href="https://www.microsoft.com/emea/careers/technicalJobs/PremierFieldEngineer.mspx">Premier Field Engineering</a> organization of Microsoft Services, which provides Premier services to customers. <a href="http://www.microsoft.com/services/microsoftservices/srv_premier.mspx">Microsoft Premier customer have a wide range of Premier agreement features and components</a> that they can use to support their people, improve their processes, and improve the productive use of the Microsoft technology they have purchased. Some of these services we provide are known to the world as “<a href="http://www.google.com/search?hl=en&amp;q=health+check+site%3Amicrosoft.com&amp;btnG=Search">Health Checks</a>”, some as “<a href="http://www.google.com/search?hl=en&amp;q=risk+assessment+program+site%3Amicrosoft.com&amp;btnG=Search">Risk Assessment Programs</a>” (or, shortly, RAPs). These are basically services where one of our technology experts goes on the customer site and there he uses a custom, private Microsoft tool to gather a huge amount of data from the product we mean to look at (be it SQL, Exchange, AD or anything else….). The Health Check or RAP tool collects the data and outputs a draft of the report that will be delivered to the customer later on, with all the right sections and chapters. This is done so that every report of the same kind will look consistent, even if the engagement is performed by a different engineer in a different part of the world. The engineer will of course analyze the collected data and write recommendations about what is configured properly and/or about what could or should be changed and/or improved in the implementation to make it adhere to Best Practices. To make sure only the right people actually go onsite to do this job we have a strict internal accreditation process that must be followed; only accredited resources that know the product well enough and know exactly how to interpret the data that the tool collects are allowed to use it and to deliver the engagement, and present/write the findings to the customer.</p>
<p>So why am I telling you this here, and how have I been using my early knowledge of OpsMgr and Powershell for ?</p>
<p>I have used that to write the Operations Manager Health Check, of course!</p>
<p>We had a <a href="http://download.microsoft.com/download/f/9/7/f974f0df-66fd-47e9-a1ac-c6fdbe3c723a/Operations_Manager_Server_Health_Check.pdf">MOM 2005 Health Check </a>already, but since the technology has changed so much, from MOM to OpsMgr, we had to write a completely new tool. Jeff  (the original MOM2005 author, who does not have a blog that I can link to) and me are the main coders of this tool… and the tool itself is A POWERSHELL script. A longish one, of course (7000 lines, more or less), but nothing more than a Powershell script, at the end of the day. There are a few more colleagues that helped shape the features and tested the tool, including <a href="http://blogs.technet.com/kevinholman/">Kevin Holman</a>. Some of the <a href="http://blogs.technet.com/kevinholman/archive/2007/10/18/useful-operations-manager-2007-sql-queries.aspx">database queries on Kevin’s blog</a> are in fact what we use to extract some of the data (beware that some of those queries have recently been updated, in case you saved them and using your local copy!), while some other information are using internal and/or custom queries. Some other times we use OpsMgr cmdlets or go to the SDK service, but a lot of times we query the database directly (we really should use the SDK all the times, but for certain stuff direct database access is way faster). It took most of the past year to write it, test it, troubleshoot it, fix it, and deliver the first engagements as “beta” to some customers to help iron out the process&#8230; and now the delivery is available! If a year seems like a long time, you have to consider this is all work that gets done next to what we all have to normally do with customers, not replacing it (i.e. I am not free to sit on my butt all day and just write the tool&#8230; <a href="http://download.microsoft.com/download/e/9/d/e9df53f8-3069-4fe4-bdbd-0d7abd86488a/PremFieldEnginr_161107b.pdf">I still have to deliver services to customers day in day out, in the meantime</a>).</p>
<p>Occasionally, during this past calendar year, that is approaching its end, I have been willing and have found some extra time to disclose some bits and pieces, techniques and prototypes of how to use Powershell and OpsMgr together, <a href="http://www.muscetta.com/2008/11/29/programmatically-check-for-management-pack-updates-in-opsmgr-2007-r2/">such as innovative ways to use Powershell in OpsMgr against beta features</a>, but in general most of my early adopter’s investment went into the private tool for this engagement, and that is one of the reasons I couldn’t blog or write much about it, being it Microsoft Intellectual Property.</p>
<p>But it is also true that <a href="http://twitter.com/dani3l3/status/997620250">I did not care to write other stuff when I considered it too easy or it could be found in the documentation</a>. I like writing of ideas, thoughts, rants OR things that I discover and that are not well documented at the time I study them… so when I figure out things I might like leaving a trail for some to follow. But I am not here to spoon feed people like some in the bandwagon are doing. Now the bandwagon is busy blogging and writing continuously about some aspect of OpsMgr (known or unknown, documented or not), and the answer to <a href="http://twitter.com/gapingvoid/status/1082816395">the original question of Hugh</a> is, in my opinion, that it does not really matter what the bandwagon is doing right now. I was never here to do the same thing. I think <strong>that</strong> is my differentiator. I am not saying that what a bunch of colleagues and enthusiasts is doing is not useful: blogging and writing about various things they experiment with is interesting and it will be useful to people. But blogs are useful until a certain limit. I think that blogs are best suited for conversations and thoughts (rather than for &#034;howto&#039;s&#034;), and what I would love to see instead is: less marketing hype when new versions are announced and more real, official documentation.</p>
<p>But I think I should stop caring about what the bandwagon is doing, because that&#039;s just another ego trip at the end of the day. What I should more sensibly do, would be listening to <a href="http://freewillastrology.com/horoscopes/pisces.html">my horoscope</a> instead:</p>
<blockquote><p>[…] &#034;How do you slay the dragon?&#034; journalist Bill Moyers asked mythologist Joseph Campbell in an interview. By &#034;dragon,&#034; he was referring to the dangerous beast that symbolizes the most unripe and uncontrollable part of each of our lives. In reply to Moyers, Campbell didn&#039;t suggest that you become a master warrior, nor did he recommend that you cultivate high levels of sleek, savage anger. &#034;Follow your bliss,&#034; he said simply. Personally, I don&#039;t know if that&#039;s enough to slay the dragon &#8212; I&#039;m inclined to believe that you also have to take some defensive measures &#8212; but it&#039;s definitely worth an extended experiment. Would you consider trying that in 2009? […]</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/12/30/early-adoptions-health-checks-and-new-year-rants/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmatically Check for Management Pack updates in OpsMgr 2007 R2</title>
		<link>http://www.muscetta.com/2008/11/29/programmatically-check-for-management-pack-updates-in-opsmgr-2007-r2/</link>
		<comments>http://www.muscetta.com/2008/11/29/programmatically-check-for-management-pack-updates-in-opsmgr-2007-r2/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 22:10:21 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[R2]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[web service]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2008/11/29/programmatically-check-for-management-pack-updates-in-opsmgr-2007-r2/</guid>
		<description><![CDATA[One of the cool new features of System Center Operations Manager 2007 R2 is the possibility to check and update Management Packs from the catalog on the Internet directly from the Operators Console: Even if the backend for this feature is not yet documented, I was extremely curious to see how this had actually been [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>One of the cool new features of <a href="http://technet.microsoft.com/en-us/opsmgr/dd239186.aspx">System Center Operations Manager 2007 R2</a> is the possibility to check and update <a href="http://www.microsoft.com/technet/prodtechnol/scp/opsmgr07.aspx">Management Packs from the catalog on the Internet</a> directly from the Operators Console:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb12.png" border="0" alt="Select Management Packs from Catalog" width="640" height="406" /></p>
<p>Even if the backend for this feature is not yet documented, I was extremely curious to see how this had actually been implemented. Especially since it took a while to have this feature available for OpsMgr, I had the suspicion that it could not be as simple as one downloadable XML file, like <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A24CEA3A-1920-4B18-8CF2-8BF78C94C917&amp;displaylang=en">the old MOM2005&#039;s MPNotifier</a> had been using in the past.</p>
<p>Therefore I observed the console&#039;s traffic through the lens of my proxy, and got my answer:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image18.png" border="0" alt="ISA Server Log" width="813" height="58" /></p>
<p>So that was it: a .Net Web Service.</p>
<p>I tried to ask the web service itself for discovery information, but failed:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image19.png" border="0" alt="WSDL" width="653" height="145" /></p>
<p>Since there is no WSDL available, but I badly wanted to interact with it, I had to figure out: what kind of requests would be allowed to it, how should they be written, what methods could they call and what parameters should I pass in the call. In order to get started on this, I thought I could just observe its network traffic. And so I did&#8230; I fired up <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=f4db40af-1e08-4a21-a26b-ec2f4dc4190d&amp;displaylang=en">Network Monitor</a> and captured the traffic:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/clip-image0025-thumb.jpg" border="0" alt="Microsoft Network Monitor 3.2" width="640" height="335" /></p>
<p><a href="http://blogs.technet.com/netmon/">Microsoft Network Monitor</a> is beautiful and useful for this kind of stuff, as it lets you easily identify which application a given stream of traffic belongs to, just like in the picture above. After I had isolated just the traffic from the Operations Console, I then saved those captures packets in CAP format and opened it again in <a href="http://www.wireshark.org/">Wireshark</a> for a different kind of analysis &#8211; &#034;Follow TCP Stream&#034;:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/clip-image0027-thumb.jpg" border="0" alt="Wireshark: Follow TCP Stream" width="640" height="450" /></p>
<p>This showed me the reassembled conversation, and what kind of request was actually done to the Web Service. That was the information I needed.</p>
<p>Ready to rock at this point, I came up with <a href="http://www.muscetta.org/Check-MPUpdates.zip"><strong>this Powershell script</strong></a> (to be run in OpsMgr Command Shell) that will:</p>
<p>1) connect to the web service and retrieve the complete MP list for R2 (this part is also useful on its own, as it shows how to interact with a SOAP web service in <a href="http://www.microsoft.com/powershell">Powershell</a>, invoking a method of the web service by issuing a specially crafted POST request. To give due credit, for this part I first looked at <a href="http://users.skynet.be/pascalbotte/rcx-ws-doc/perlpost.htm">this PERL code</a>, which I then adapted and ported to Powershell);</p>
<p>2) loop through the results of the &#034;Get-ManagementPack&#034; opsmgr cmdlet and compare each MP found in the Management Group with those pulled from the catalog;</p>
<p>3) display a table of all imported MPs with both the version imported in your Management Group AND the version available on the catalog:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb13.png" border="0" alt="Script output in OpsMgr Command Shell" width="596" height="480" /></p>
<p>Remember that this is just SAMPLE code, it is not meant to be used in production environment and it is worth mentioning again that OpsMgr2007 R2 this is BETA software at the time of writing, therefore this functionality (and its implementation) might change at any time, and the script will break. Also, at present, the MP Catalog web service still returns slightly older MP versions and it is not yet kept in sync and updated with MP Releases, but it will be ready and with complete/updated content by the time R2 gets released.</p>
<p><strong>Disclaimer</strong></p>
<p>The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />
THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS INFORMATION. The solution presented here IS NOT SUPPORTED by Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/11/29/programmatically-check-for-management-pack-updates-in-opsmgr-2007-r2/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Backup or Store stuff to GMail via IMAP in Ruby</title>
		<link>http://www.muscetta.com/2008/06/10/backup-or-store-stuff-to-gmail-via-imap-in-ruby/</link>
		<comments>http://www.muscetta.com/2008/06/10/backup-or-store-stuff-to-gmail-via-imap-in-ruby/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 18:49:44 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[GMail]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[storage]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=279</guid>
		<description><![CDATA[Once upon a time, I used to store some automated small backups into GMail just by having the scheduled backup send an email to my GMail account. At one stage they blocked me from doing so, marking those repeated email as SPAM. After that, I took a different approach: I kept sending the mail on [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Once upon a time, I used to store some automated <b>small</b> backups into GMail just by having the scheduled backup send an email to my GMail account. <a href="http://www.muscetta.com/2006/10/07/google-has-pissed-me-off-this-week/">At one stage they blocked me from doing so, marking those repeated email as SPAM</a>.</p>
<p>After that, I took a different approach: I kept sending the mail on the SAME server as the backup, and using IMAP I could DRAG-and-DROP the backup attachment from the mailbox on one server to the mailbox on another server (=GMail). They did not mark me as a spammer that way, of course.<br />
So that worked for a while, but then I got tired of doing this manually.</p>
<p>So the following ruby script is the way I automated the &#034;move offsite&#034; part of that backup.<br />
For completeness, I will give the due credits about who set me on the right track: I started off by <a href="http://wonko.com/post/ruby_script_to_sync_email_from_any_imap_server_to_gmail">this example by Ryan</a>.</p>
<pre><span class="comment">#!/usr/bin/env ruby</span>
<span class="ident">begin_</span> <span class="punct">=</span> <span class="constant">Time</span><span class="punct">.</span><span class="ident">now</span>

<span class="comment">#includes</span>
<span class="ident">require</span> <span class="punct">'</span><span class="string">net/imap</span><span class="punct">'</span>

<span class="comment">##Source Info</span>
<span class="global">$SRCSERVER</span><span class="punct">="</span><span class="string">mail.muscetta.com</span><span class="punct">"</span>
<span class="global">$SRCPORT</span><span class="punct">=</span><span class="number">143</span>
<span class="global">$SRCSSL</span><span class="punct">=</span><span class="constant">false</span>
<span class="global">$SRCUSERNAME</span><span class="punct">="</span><span class="string">daniele</span><span class="punct">"</span>
<span class="global">$SRCPASSWORD</span><span class="punct">="</span><span class="punct">"</span>
<span class="global">$SRCFOLDER</span><span class="punct">="</span><span class="string">INBOX.Backups</span><span class="punct">"</span>

<span class="comment">##Destination Info</span>
<span class="global">$DSTSERVER</span><span class="punct">="</span><span class="string">imap.gmail.com</span><span class="punct">"</span>
<span class="global">$DSTPORT</span><span class="punct">=</span><span class="number">993</span>
<span class="global">$DSTSSL</span><span class="punct">=</span><span class="constant">true</span>
<span class="global">$DSTUSERNAME</span><span class="punct">="</span><span class="string">muscetta@gmail.com</span><span class="punct">"</span>
<span class="global">$DSTPASSWORD</span><span class="punct">="</span><span class="punct">"</span>
<span class="global">$DSTFOLDER</span><span class="punct">="</span><span class="string">Backup</span><span class="punct">"</span>

<span class="comment">#connect to source</span>
<span class="ident">puts</span> <span class="punct">"</span><span class="string">connecting to source server <span class="expr">#{$SRCSERVER}</span>... <span class="escape">nn</span></span><span class="punct">"</span>
<span class="ident">srcimap</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">IMAP</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="global">$SRCSERVER</span><span class="punct">,</span><span class="global">$SRCPORT</span><span class="punct">,</span><span class="global">$SRCSSL</span><span class="punct">)</span>
<span class="ident">srcimap</span><span class="punct">.</span><span class="ident">login</span><span class="punct">(</span><span class="global">$SRCUSERNAME</span><span class="punct">,</span> <span class="global">$SRCPASSWORD</span><span class="punct">)</span>
<span class="ident">srcimap</span><span class="punct">.</span><span class="ident">select</span><span class="punct">(</span><span class="global">$SRCFOLDER</span><span class="punct">)</span>

<span class="comment">#connect to destination</span>
<span class="ident">puts</span> <span class="punct">"</span><span class="string">connecting to destination server <span class="expr">#{$DSTSERVER}</span>... <span class="escape">nn</span></span><span class="punct">"</span>
<span class="ident">dstimap</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">IMAP</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="global">$DSTSERVER</span><span class="punct">,</span><span class="global">$DSTPORT</span><span class="punct">,</span><span class="global">$DSTSSL</span><span class="punct">)</span>
<span class="ident">dstimap</span><span class="punct">.</span><span class="ident">login</span><span class="punct">(</span><span class="global">$DSTUSERNAME</span><span class="punct">,</span> <span class="global">$DSTPASSWORD</span><span class="punct">)</span>
<span class="ident">dstimap</span><span class="punct">.</span><span class="ident">select</span><span class="punct">(</span><span class="global">$DSTFOLDER</span><span class="punct">)</span>

<span class="comment"># Loop through all messages in the source folder.</span>
<span class="ident">uids</span> <span class="punct">=</span> <span class="ident">srcimap</span><span class="punct">.</span><span class="ident">uid_search</span><span class="punct">(['</span><span class="string">ALL</span><span class="punct">'])</span>
<span class="keyword">if</span> <span class="ident">uids</span><span class="punct">.</span><span class="ident">length</span> <span class="punct">&gt;</span> <span class="number">0</span>
	<span class="global">$count</span> <span class="punct">=</span> <span class="ident">uids</span><span class="punct">.</span><span class="ident">length</span>
	<span class="ident">puts</span> <span class="punct">"</span><span class="string">found <span class="expr">#{$count}</span> messages to move... <span class="escape">nn</span></span><span class="punct">"</span>

	<span class="ident">srcimap</span><span class="punct">.</span><span class="ident">uid_fetch</span><span class="punct">(</span><span class="ident">uids</span><span class="punct">,</span> <span class="punct">['</span><span class="string">ENVELOPE</span><span class="punct">']).</span><span class="ident">each</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">data</span><span class="punct">|</span>
		<span class="ident">mid</span> <span class="punct">=</span> <span class="ident">data</span><span class="punct">.</span><span class="ident">attr</span><span class="punct">['</span><span class="string">ENVELOPE</span><span class="punct">'].</span><span class="ident">message_id</span>

		<span class="comment"># Download the full message body from the source folder.</span>
		<span class="ident">puts</span> <span class="punct">"</span><span class="string">reading message... <span class="expr">#{mid}</span></span><span class="punct">"</span>
		<span class="ident">msg</span> <span class="punct">=</span> <span class="ident">srcimap</span><span class="punct">.</span><span class="ident">uid_fetch</span><span class="punct">(</span><span class="ident">data</span><span class="punct">.</span><span class="ident">attr</span><span class="punct">['</span><span class="string">UID</span><span class="punct">'],</span> <span class="punct">['</span><span class="string">RFC822</span><span class="punct">',</span> <span class="punct">'</span><span class="string">FLAGS</span><span class="punct">',</span> <span class="punct">'</span><span class="string">INTERNALDATE</span><span class="punct">']).</span><span class="ident">first</span>

		<span class="comment"># Append the message to the destination folder, preserving flags and internal timestamp.</span>
		<span class="ident">puts</span> <span class="punct">"</span><span class="string">copying message <span class="expr">#{mid}</span> to destination...</span><span class="punct">"</span>
		<span class="ident">dstimap</span><span class="punct">.</span><span class="ident">append</span><span class="punct">(</span><span class="global">$DSTFOLDER</span><span class="punct">,</span> <span class="ident">msg</span><span class="punct">.</span><span class="ident">attr</span><span class="punct">['</span><span class="string">RFC822</span><span class="punct">'],</span> <span class="ident">msg</span><span class="punct">.</span><span class="ident">attr</span><span class="punct">['</span><span class="string">FLAGS</span><span class="punct">'],</span> <span class="ident">msg</span><span class="punct">.</span><span class="ident">attr</span><span class="punct">['</span><span class="string">INTERNALDATE</span><span class="punct">'])</span>

		<span class="comment">#delete the msg</span>
		<span class="ident">puts</span> <span class="punct">"</span><span class="string">deleting messsage <span class="expr">#{mid}</span>...</span><span class="punct">"</span>
		<span class="ident">srcimap</span><span class="punct">.</span><span class="ident">uid_store</span><span class="punct">(</span><span class="ident">data</span><span class="punct">.</span><span class="ident">attr</span><span class="punct">['</span><span class="string">UID</span><span class="punct">'],</span> <span class="punct">'</span><span class="string">+FLAGS</span><span class="punct">',</span> <span class="punct">[</span><span class="symbol"> <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> eleted</span><span class="punct">])</span>
		<span class="ident">srcimap</span><span class="punct">.</span><span class="ident">expunge</span>

	<span class="keyword">end</span>

	<span class="comment">#disconnect</span>
	<span class="ident">dstimap</span><span class="punct">.</span><span class="ident">close</span>
	<span class="ident">srcimap</span><span class="punct">.</span><span class="ident">close</span>
<span class="keyword">end</span>

<span class="ident">total_time</span> <span class="punct">=</span> <span class="constant">Time</span><span class="punct">.</span><span class="ident">now</span> <span class="punct">-</span> <span class="ident">begin_</span>
<span class="ident">puts</span> <span class="punct">"</span><span class="string">Done. RunTime: <span class="expr">#{total_time}</span> sec. <span class="escape">nn</span></span><span class="punct">"</span>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/06/10/backup-or-store-stuff-to-gmail-via-imap-in-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS 5 Management Pack for OpsMgr SCX</title>
		<link>http://www.muscetta.com/2008/05/13/centos-5-management-pack-for-opsmgr-scx/</link>
		<comments>http://www.muscetta.com/2008/05/13/centos-5-management-pack-for-opsmgr-scx/#comments</comments>
		<pubDate>Tue, 13 May 2008 09:43:07 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[xplat]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[management pack]]></category>
		<category><![CDATA[redhat]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[screenshot]]></category>
		<category><![CDATA[scx]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=277</guid>
		<description><![CDATA[As I mentioned here, I have been testing the SCX beta. Not having one of the &#034;supported&#034; platforms pushed me into playing with the provided Management Packs, and in turn I managed to use the MP for Red Hat Enterprise Linux 5 as a base, and replaced a couple of strings in the discoveries in [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.muscetta.com/2008/05/04/testing-system-center-cross-plaform-extentions">As I mentioned here</a>, I have been testing the <a href="http://blogs.msdn.com/scxplat/">SCX</a> beta.</p>
<p>Not having one of the &#034;supported&#034; platforms pushed me into playing with the provided Management Packs, and in turn I managed to use the MP for Red Hat Enterprise Linux 5 as a base, and replaced a couple of strings in the discoveries in order to get a working <a href="http://www.centos.org">CentOS</a> 5 Management Pack.</p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" src="http://www.muscetta.com/wp-content/uploads/centos-healthexplorer01-new.jpg" border="0" alt="CentOS_HealthExplorer01_NEW" width="997" height="681" /></p>
<p>I still have not looked into the &#034;hardware&#034; monitors and health model / service model, so those are not currently monitored. But it is a start.</p>
<p>A lot of people have asked me a lot of information and would like to get the file &#8211; both in the blog&#039;s comment, on the newsgroup, or via mail. I am sorry, but I cannot provide you with the file, because it has not been throughly tested and might render your systems unstable, and also because there might be licensing and copyright issues that I have not checked within Microsoft.</p>
<p>Keep also in mind that using CentOS as a monitored platform <strong>is NOT a SUPPORTED scenario/platform for SCX</strong>. I only used it because I did not have a Suse or Redhat handy that day, and because I wanted to understand how the Management Packs using WS-Man worked.</p>
<p>This said, should you wish to try to do the same &#034;MP Hacking&#034; I did,  <a href="http://www.muscetta.com/2008/05/04/testing-system-center-cross-plaform-extentions/">I pretty much explained all you need to know in my previous post and its comments</a>, so that should not be that difficult.</p>
<p>Actually, I still think that the best way to figure out how things are done is by looking at the actual implementation, so I encourage you to look at the management packs and figure out how those work. There are a few mature tools out there that will help you author/edit Management Packs if you don&#039;t want to edit the XML directly: the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6c8911c3-c495-4a03-96df-9731c37aa6d7&amp;DisplayLang=en">Authoring Console</a>, and <a href="http://www.silect.com/solutions/opsmgr_Sol/opsmgr_Sol_studio2007_Lite.html">Silect MP Studio Lite</a>, for example. If you want to delve in the XML details, instead, then I suggest you read the <a href="http://download.microsoft.com/download/7/4/d/74deff5e-449f-4a6b-91dd-ffbc117869a2/OM2007_AuthGuide.doc">Authoring Guide</a> and peek at <a href="http://www.authormps.com/">Steve Wilson&#039;s AuthorMPs.com site</a>.</p>
<p><strong>Disclaimer<br />
</strong>The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />
THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS PROGRAM.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/05/13/centos-5-management-pack-for-opsmgr-scx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Popfly Virtual Earth Mashup on Moonlight</title>
		<link>http://www.muscetta.com/2008/04/12/popfly-virtual-earth-mashup-on-moonlight/</link>
		<comments>http://www.muscetta.com/2008/04/12/popfly-virtual-earth-mashup-on-moonlight/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 08:44:02 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[popfly]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2008/04/12/popfly-virtual-earth-mashup-on-moonlight/</guid>
		<description><![CDATA[Installed moonlight on Ubuntu from source by following these instructions (there are some typo&#039;s but they are understandable and correctable). All in all, even being still under heavy development, what Miguel de Icaza has achieved (with moonlight, just like with mono) is amazing. After I posted the above picture on Flickr, John Montgomery was amazed [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<div class="flickr-frame"><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/2401024181/"><img class="flickr-photo" src="http://farm3.static.flickr.com/2215/2401024181_d9b74faf81.jpg" alt="Popfly Virtual Earth Mashup on Moonlight" /></a></p>
<p><span class="flickr-caption"><a href="http://www.flickr.com/photos/dani3l3/2401024181/"></a></span></p>
</div>
<p class="flickr-yourcomment">Installed <a href="http://go-mono.org/moonlight">moonlight</a> on Ubuntu from source by following <a href="http://www.nino-net.org/2008/02/29/moon-use-silverlight-plugin-in-ubuntu-710">these instructions</a> (there are some typo&#039;s but they are understandable and correctable).</p>
<p>All in all, even being still under heavy development, what Miguel de Icaza has achieved (with moonlight, just like with <a href="http://go-mono.org">mono</a>) is amazing.</p>
<p>After I posted the above picture on Flickr, John Montgomery was amazed to see <a href="http://www.popfly.com/">PopFly</a> (his creature) working on moonlight, and <a href="http://blogs.msdn.com/johnmont/archive/2008/04/11/popfly-on-moonlight.aspx">he linked to me from his blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/04/12/popfly-virtual-earth-mashup-on-moonlight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looking at OpsMgr2007 Alert trend with Command Shell</title>
		<link>http://www.muscetta.com/2008/01/25/looking-at-opsmgr2007-alert-trend-with-command-shell/</link>
		<comments>http://www.muscetta.com/2008/01/25/looking-at-opsmgr2007-alert-trend-with-command-shell/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 20:01:02 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[Alert]]></category>
		<category><![CDATA[Command Shell]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[trend]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2008/01/25/looking-at-opsmgr2007-alert-trend-with-command-shell/</guid>
		<description><![CDATA[It&#039;s friday night, I am quite tired and I can&#039;t be asked of writing a long post. But I have not written much all week, not even updated my Twitter, and now I want to finish the week with at least some goodies. So this is the turn of a couple of Powershell commands/snippets/scripts that [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>It&#039;s friday night, I am quite tired and I can&#039;t be asked of writing a long post. But I have not written much all week, not even updated my Twitter, and now I want to finish the week with at least some goodies. So this is the turn of a couple of <a href="http://www.microsoft.com/powershell">Powershell</a> commands/snippets/scripts that will count alerts and events generated each day: this information could help you understand the trends of events and alerts over time in a Management Group. It is nothing fancy at all, but they can still be useful to someone out there. In the past (MOM 2005) I used to gather this kind of information with SQL Queries against the operations database. But now, with Powershell, everything is exposed as objects and it is much easier to get information without really getting your hands dirty with the database <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>#Number of Alerts per day</strong></p>
<p><em>$alerttimes = Get-Alert | Select-Object TimeRaised<br />
$array=@() </em></p>
<p><em>foreach ($datetime in $alerttimes){<br />
$array += $datetime.timeraised.date<br />
} </em></p>
<p><em>$array | Group-Object Date</em></p>
<p><strong>#Number of Events per day</strong></p>
<p><em>$eventtimes = Get-Event | Select-Object TimeGenerated<br />
$array=@() </em></p>
<p><em>foreach ($datetime in $eventtimes){<br />
$array += $datetime.timegenerated.date<br />
} </em></p>
<p><em>$array | Group-Object Date</em></p>
<p>Beware that these &#034;queries&#034; might take a long time to execute (especially the events one) depending on the amount of data and your retention policy.</p>
<p>This is of course just scratching the surface of the amount of amazing things you can do with Powershell in Operations Manager 2007. For this kind of information you might want to keep an eye on the official &#034;System Center Operations Manager Command Shell&#034; blog: <a href="http://blogs.msdn.com/scshell/" title="http://blogs.msdn.com/scshell/">http://blogs.msdn.com/scshell/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/01/25/looking-at-opsmgr2007-alert-trend-with-command-shell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Get-FlickrPhotos</title>
		<link>http://www.muscetta.com/2008/01/14/get-flickrphotos/</link>
		<comments>http://www.muscetta.com/2008/01/14/get-flickrphotos/#comments</comments>
		<pubDate>Mon, 14 Jan 2008 21:46:50 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2008/01/14/get-flickrphotos/</guid>
		<description><![CDATA[A while ago, talking to some friends, I was mentioning how cool it was that Flickr provides APIs, so that you can always get your data out of it, if you want to. There are several downloader applications that I found on the Internet, but I have not yet chosen one that I completey like [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>A while ago, talking to some friends, I was mentioning how cool it was that <a href="http://www.flickr.com/services/api">Flickr provides APIs</a>, so that you can always get your data out of it, if you want to. There are several downloader applications that I found on the Internet, but I have not yet chosen one that I completey like among the few that I&#039;ve tried. So, inspired by <a href="http://kosso.wordpress.com/2007/01/31/free-php5-script-to-grab-your-flickr-photos/">Kosso&#039;s PHP script for enumerating your photos on Flickr</a>, I thought I&#039;d port it to <a href="http://www.microsoft.com/powershell">Powershell</a> and make my own version of it. Just for the fun of it. My Powershell script does not do everything that Kosso&#039;s one does: I don&#039;t build a web page showing description and comments. I suppose this is because the original script was made with PHP, which you usually run on a web server and outputting as HTML is the standard thing you would do in PHP. I just concentrated on the &#034;download&#034; thing, since mine it is a console script. You can think of mine as a &#034;full backup&#034; script. Full&#8230; well, at least of all your photos, if not of all the metadata. It should be trivial to extend anyway, also considering Powershell XML type accelerator really makes it extremely easy to parse the output of a <a href="http://www.flickr.com/services/api/request.rest.html">REST API such as Flickr&#039;s</a> (I would say even easier and more readable that PHP&#039;simplexml). There is a ton of things that could be extended/improved in the script&#8230; including supporting proxy servers, accepting more parameters for things that are now hardcoded&#8230; and with a million other things. Even this way, though, I think that the script can be useful to show a number of techniques in Powershell. Or just to download your photos <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  So you can download the script from here: <a href="http://www.muscetta.org/Get-FlickrPhotos.ps1.txt">Get-FlickrPhotos.ps1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/01/14/get-flickrphotos/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Welcome www.powershell.it!</title>
		<link>http://www.muscetta.com/2008/01/04/welcome-wwwpowershellit/</link>
		<comments>http://www.muscetta.com/2008/01/04/welcome-wwwpowershellit/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 21:35:50 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2008/01/04/welcome-wwwpowershellit/</guid>
		<description><![CDATA[I just read from Jeffrey Snover about this newly born Italian PowerShell community site. I just created an account for myself on the site&#8230; as you know I like PowerShell, so even if I usually prefer writing stuff in english, I will try to hang out there and see how can I contribute to it. [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I <a href="http://blogs.msdn.com/powershell/archive/2008/01/04/www-powershell-it-italian-powershell-community-website.aspx">just read from Jeffrey Snover</a> about this newly born <a href="http://www.powershell.it/">Italian PowerShell community site</a>.</p>
<p>I just created an account for myself on the site&#8230; as you know <a href="http://www.muscetta.com/category/powershell/">I like PowerShell</a>, so even if I usually prefer writing stuff in english, I will try to hang out there and see how can I contribute to it.</p>
<p>After all, I am italian&#8230; <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/01/04/welcome-wwwpowershellit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simply Works</title>
		<link>http://www.muscetta.com/2007/12/27/simply-works/</link>
		<comments>http://www.muscetta.com/2007/12/27/simply-works/#comments</comments>
		<pubDate>Thu, 27 Dec 2007 18:24:27 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[MOM2005]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Energy]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[lifestream]]></category>
		<category><![CDATA[Risk]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/12/27/simply-works/</guid>
		<description><![CDATA[Simply Works, uploaded by Daniele Muscetta on Flickr. I don&#039;t know about other people, but I do get a lot to think when the end of the year approaches: all that I&#039;ve done, what I have not yet done, what I would like to do, and so on&#8230; And it is a period when memories [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p class="flickr-frame"><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/2141526220/"><img src="http://farm3.static.flickr.com/2222/2141526220_7754fa3134.jpg" alt="Simply Works" class="flickr-photo" /></a></p>
<p><span class="flickr-caption"><a href="http://www.flickr.com/photos/dani3l3/2141526220/">Simply Works</a>, uploaded by <a href="http://www.flickr.com/people/dani3l3/">Daniele Muscetta</a> on Flickr.</span></p>
<p class="flickr-yourcomment">I don&#039;t know about other people, but I do get a lot to think when the end of the year approaches: all that I&#039;ve done, what I have not yet done, what I would like to do, and so on&#8230;</p>
<p>And it is a period when memories surface.</p>
<p>I found the two old CD-ROMs you can see in the picture. And those are memories.<br />
missioncritical software was the company that invented a lot of stuff that became Microsoft&#039;s products: for example <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6f86937b-533a-466d-a8e8-aff85ad3d212&amp;displaylang=en">ADMT</a> and <a href="http://www.microsoft.com/systemcenter/opsmgr/default.mspx">Operations Manager</a>.</p>
<p>The black CD contains SeNTry, the &#034;enterprise event manager&#034;, what later became Operations Manager.<br />
On the back of the CD, the company motto at the time: &#034;software that works simply and simply works&#034;.<br />
So true. I might digress on this concept, but I won&#039;t do that right now.</p>
<p>I have already explained in my other blog <a href="http://blogs.msdn.com/dmuscett/archive/2005/09/02/459914.aspx">what I do for work</a>. Well, that was a couple of years ago anyway. Several things have changed, and we are moving towards offering services that are more measurable and professional. So, since it happens that in a certain job you need to be an &#034;expert&#034; and &#034;specialize&#034; in order to be &#034;seen&#034; or &#034;noticed&#034;.<br />
You know <a href="http://www.muscetta.com/2006/05/29/specialization-is-bullshit/">I don&#039;t really believe in specialization</a>. I have written it <a href="http://www.muscetta.com/2006/11/05/more-on-specialization/">all over the place</a>. But you need to make other people happy as well and let them believe what they want, so when you &#034;specialize&#034; they are happier. No, really, it might make a difference in your carrer <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>In this regard, I did also mention my <a href="http://blogs.msdn.com/dmuscett/archive/2004/11/18/263280.aspx">&#034;meeting again&#034; with Operations Manager</a>.<br />
That&#039;s where Operations manager helped me: it let me &#034;specialize&#034; in systems and applications management&#8230; a field where you need to know a bit of everything anyway: infrastructure, security, logging, scripting, databases, and so on&#8230; <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
This way, everyone wins.</p>
<p>Don&#039;t misunderstand me, this does not mean I want to know everything. One cannot possibly know everything, and the more I learn the more I believe I know nothing at all, to be honest. I don&#039;t know everything, <a href="http://thedailywtf.com/Articles/Classic-WTF-Lock-In-Key-Security.aspx">so please don&#039;t ask me everything &#8211; I work with mainframes</a> <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
While that can be a great excuse to avoid neighbours and relatives annoyances with their PCs though, on the serious side I still believe that any intelligent individual cannot be locked into doing a narrow thing and know only that one bit just because it is common thought that you have to act that way.</p>
<p>If I would <a href="http://twitter.com/gapingvoid/statuses/535752142">stop where I have to stop</a> I would be the standard &#034;IT Pro&#034;. I would be fine, sure, but I would get bored soon. I would not learn anything. <a href="http://www.muscetta.com/2007/09/11/itpro-vs-dev-there-is-no-such-a-thing/">But I don&#039;t feel I am the standard &#034;IT Pro&#034;</a>. In fact, funnily enough, <a href="http://www.google.com/search?hl=en&amp;q=link:www.muscetta.com&amp;btnG=Search">on some other blogs out there I have been referenced as a &#034;Dev&#034;</a> (find it on your own, look at their blogrolls <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ). But I am not a Dev either then&#8230; I don&#039;t write code for work. I would love to, but I rarely actually do, other than some scripts. Anyway, I tend to escape the definition of the usual &#034;expert&#034; on something&#8230; mostly because I want to escape it. I don&#039;t see myself represented by those generalization.</p>
<p>As <a href="http://haacked.com/archive/2007/12/21/faceoff-haack-vs-hanselman-it-gets-real.aspx">Phil puts it</a>, when asked &#034;Are software developers &#8211; engineers or artists?&#034;:</p>
<blockquote><p>&#034;[...] Don’t take this as a copout, but a little of both. I see it more as craftsmanship. Engineering relies on a lot of science. Much of it is demonstrably empirical and constrained by the laws of physics. Software is less constrained by physics as it is by the limits of the mind. [...]&#034;</p></blockquote>
<p>Craftmanship. Not science.<br />
And stop calling me an &#034;engineer&#034;. I am not an engineer. I was even crap in math, in school!</p>
<p>Anyway, what does this all mean? In practical terms, it means that in the end, wether I want it or not, I do get considered an &#034;expert&#034; on MOM and OpsMgr&#8230; and that I will mostly work on those products for the next year too. But that is not bad, because, as I said, working on that product means working on many more things too. Also, I can point to different audiences: those believing in &#034;experts&#034; and those going beyond schemes. It also means that I will have to continue teaching a couple of scripting classes (both VBScript and PowerShell) that nobody else seems to be willing to do (because they are all *expert* in something narrow), and that I will still be hacking together my other stuff (my facebook apps, my wordpress theme and plugins, my server, etc) and even continue to have strong opinions in those other fields that I find interesting and where I am not considered an *expert* <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Well, I suppose I&#039;ve been ranting enough for today&#8230;and for this year <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
I really want to wish everybody again a great beginning of 2008!!! What are you going to be busy with, in 2008 ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/12/27/simply-works/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using Live ID to authenticate to WordPress</title>
		<link>http://www.muscetta.com/2007/11/02/using-live-id-to-authenticate-to-wordpress/</link>
		<comments>http://www.muscetta.com/2007/11/02/using-live-id-to-authenticate-to-wordpress/#comments</comments>
		<pubDate>Fri, 02 Nov 2007 21:39:23 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[LiveID]]></category>
		<category><![CDATA[Passport]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WebSite]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/11/02/using-live-id-to-authenticate-to-wordpress/</guid>
		<description><![CDATA[Yesterday I&#039;ve been hacking a bit with the Windows Live ID SDK and I wrote a very small and simple plugin for WordPress that enables you to login in to WordPress with your passport Live ID. I had read in various places that such a plugin would be welcome&#8230; I looked around and found none [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Yesterday I&#039;ve been hacking a bit with the <a href="http://msdn2.microsoft.com/en-us/library/bb676633.aspx">Windows Live ID SDK</a> and I wrote a very small and simple plugin for <a href="http://www.wordpress.org/">WordPress</a> that enables you to login in to WordPress with your <span style="text-decoration: line-through;">passport</span> Live ID.<br />
I had read <a href="http://wordpress.org/extend/ideas/topic.php?id=689">in various</a> <a href="http://microsoft.blognewschannel.com/archives/2007/08/17/windows-live-id-cardspace-info-cards-available-for-websites">places</a> that such a plugin would be welcome&#8230; I looked around and found none yet (if anyone has instead already written something like this and I missed it I will happily waste the simple stuff I did  for something more advanced/well written&#8230; just let me know <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ).<br />
I took a look at <a href="http://mvolo.com/blogs/serverside/archive/2007/08/12/IIS-Authentication-plugin-for-the-Wordpress-PHP-blogging-engine.aspx">a similar experiment</a>, and eventually even found that there is <a href="http://verselogic.net/projects/wordpress/wordpress-openid-plugin">some conceptually similar plugin written to work with OpenID</a>. The wordpress openid plugin is much more complex and much more advanced than what I did, tough. It will let you log in with just ANY OpenID user, it will automatically create a user for you on that wordpress installation and associate it with your ID, even just for the purpose of commenting, etc.</p>
<p>But in my blog I don&#039;t require or need people to actually log in to do anything. I actually like anonymous/free comment. A CAPTCHA takes care of spammers and I am fine with it so far. Probably for a big site with a lot of users it might make sense, but for my blog so far it doesn&#039;t. But there&#039;s one thing for which this is instead useful: I have always been worried, when logging in through HTTP (thus, without SSL) to my blog from networks I don&#039;t manage or completely trust, that my password could be sniffed over the wire and stolen. Live ID solves my problem by letting Microsoft validate my identity: I have associated my Live ID to the blog&#039;s main user account(=myself), the one writing this post. So the plugin in its current form <a href="http://www.muscetta.com/wp-content/plugins/liveauth/auth.php">is used as a replacement of the login form</a> (the <a href="http://www.muscetta.com/wp-login.php">standard wp-login.php wordpress form</a> CAN still be used if you like, of course, you just don&#039;t HAVE to. Also the use of xmlrpc will still require local user/pwd combination.). Anyway, this new form will authenticate you thorugh Live ID and then check if your Live ID is associated to any local user. If it is, it will log you on to wordpress with that account. Otherwise it will inform you that you are successfully logged on to passport Live, but unfortunately there is no corresponding local account for you, and that it would need to be set up. Setting it up is as difficult as adding a line to the database&#8230; probably adding a form or a property page would be nice, but in my case I just did it with a query:</p>
<p>INSERT INTO `wordpress`.`wp-usermeta` (<br />
`umeta_id` ,<br />
`user_id` ,<br />
`meta_key` ,<br />
`meta_value`<br />
)<br />
VALUES (<br />
NULL , &#039;1&#039;, &#039;LiveID&#039;, &#039;f11fa1d3e82c68776f94a3a5c459b70b&#039;<br />
);</p>
<p>which adds an extra &#034;property&#034; for the first user (admin) called &#039;LiveID&#039; which contains your Live ID (the one above is not my real one, in case you were wondering). When you are authenticated by LiveID and you get back this value, the plugin checks in this table which WordPress userid in the database has been associated with this Live ID and &#8211; if it finds one &#8211; it authenticates you as that user. Of course you should not have duplicates.</p>
<p>My code is mostly based on <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=8BA187E5-3630-437D-AFDF-59AB699A483D&amp;displaylang=en">the SDK PHP Sample</a>, with some modification to integrate it in WordPress as a plugin. Of course I removed the file that is used as &#034;user database&#034; and used wordpress DB instead.</p>
<p>There&#039;s a ton of things that could be improved. I just did not put any more effort and time in it. As you might know if you read this blog, I am not a full time developer. Actually I shouldn&#039;t write code at all for work and I am mainly considered an &#034;infrastructure&#034; guy. Anyway, I would like to code more and even if I am not supposed to, I always try to find stimulating situations that require a bit of integration, thinking out of the box, some scripting, etc&#8230;</p>
<p><strong>[updated: november 3rd 2007]</strong> You can download the sample plugin &#034;AS-IS&#034; here: <strong><a href="http://www.muscetta.com/wp-content/uploads/liveauth.zip">liveauth.zip</a></strong> . This has only been tested and only works with WordPress 2.3.x serie (but should also work with earlier versions &#8211; not tested) <a href="http://www.muscetta.com/wp-content/uploads/liveauth.zip"><br />
</a><br />
<strong>[updated: march 30th 2008]</strong> <a href="http://wordpress.org/development/2008/03/wordpress-25-brecker/">WordPress 2.5</a> has changed the way the authentication cookie is generated, therefore here is an updated version of the plugin that works with the new secure cookies: <strong><a href="http://www.muscetta.com/wp-content/uploads/liveauth02.zip">liveauth02.zip</a></strong><br />
I should really invest some more time in this and clear up the code. I should also make an interface to make the configuration easier, and maybe make a version that works on both 2.3 and 2.5 branches. I am not sure when I will have time for that, though&#8230;</p>
<p><strong>[updated: april 20th 2008]</strong> I have released version 0.3c of the plugin which now finally includes a simple configuration page, and should work on both WordPress 2.3 (and older) and on the 2.5 brach. Please visit the new Windows <strong><a href="http://www.muscetta.com/live-id-wordpress-plugin/">Live ID Authentication WordPress Plugin Page</a></strong>.<a href="http://www.muscetta.com/wp-content/uploads/liveauth.zip"><br />
</a></p>
<p><strong>Disclaimer:</strong><br />
The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />
THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS PROGRAM.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/11/02/using-live-id-to-authenticate-to-wordpress/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Facebook implemented a user.setStatus API!</title>
		<link>http://www.muscetta.com/2007/10/01/facebook-implemented-a-usersetstatus-api/</link>
		<comments>http://www.muscetta.com/2007/10/01/facebook-implemented-a-usersetstatus-api/#comments</comments>
		<pubDate>Mon, 01 Oct 2007 08:55:20 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/10/01/facebook-implemented-a-usersetstatus-api/</guid>
		<description><![CDATA[Finally, you CAN change your Facebook status programmatically in a way that is supported! Some months ago Christian discovered a hack to change your Facebook status. Some other people also used it and extended it. I also ported it to C# and made a winform using its unofficial method. Suddenly after, Facebook asked us to [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Finally, <a href="http://developers.facebook.com/documentation.php?v=1.0&amp;doc=extperms">you CAN change your Facebook status programmatically in a way that is supported</a>!</p>
<p>Some months ago <a href="http://nexdot.net/blog/2007/04/20/updating-facebook-status-using-php">Christian discovered a hack to change your Facebook status</a>. <a href="http://blakebrannon.com/2007/08/18/how-to-sync-facebook-status-with-twitter">Some other people also used it and extended it</a>. <a href="http://www.muscetta.com/2007/08/03/facebook-statetray">I also ported it to C# and made a winform using its unofficial method</a>.<br />
Suddenly after, <a href="http://www.muscetta.com/2007/09/03/its-nice-to-see-things-called-by-their-real-name">Facebook asked us to take down the code</a>, as it violated their terms of service.</p>
<p><a href="http://www.muscetta.com/2007/09/06/facebook-status-change-is-not-a-crime">It has taken a while</a>, <a href="http://www.techcrunch.com/2007/09/06/facebook-opening-up-but-on-its-own-terms/">some struggles</a>, but now they finally recognized the need for <a href="http://adrianspender.com/blog/2007/05/21/federated-status">federated status</a>, and implemented a <strong>user.setStatus</strong> API.</p>
<p><a href="http://www.twitter.com/">Twitter</a> is the first to pick it up, so now <a href="http://twittersweet.com/2007/9/30/integration-between-twitter-and-facebook-status">you can update twitter and have your status propagate in Facebook</a>!</p>
<p>Well done, guys!</p>
<p>When I&#039;ll have some time I might think of rewriting my app using the SUPPORTED method, maybe finally writing that <a href="http://www.25hoursaday.com/weblog/CommentView.aspx?guid=51b24ec1-ec28-4526-b7fe-9d1e6c7fc802">Live Messenger plugin</a>&#8230; it would be nice <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
When I&#039;ll have time&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/10/01/facebook-implemented-a-usersetstatus-api/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Test from WordPress 2.3</title>
		<link>http://www.muscetta.com/2007/09/26/test-wp-23/</link>
		<comments>http://www.muscetta.com/2007/09/26/test-wp-23/#comments</comments>
		<pubDate>Wed, 26 Sep 2007 19:11:55 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/09/26/test-wp-23/</guid>
		<description><![CDATA[Blog works, all the plugin work too. I will *only* have to re-write a whole bunch on SQL queries for my .Net frontend that is now broken. I&#039;ll do that at one stage, now I can&#039;t be asked.<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Blog works, all the plugin work too. I will *only* have to re-write a whole bunch on SQL queries for <a href="http://www.muscetta.com/2007/05/30/this-blog-in-c/">my .Net frontend</a> that is now broken. I&#039;ll do that at one stage, now I can&#039;t be asked.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/09/26/test-wp-23/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ITPro vs. Dev: there is no such a thing.</title>
		<link>http://www.muscetta.com/2007/09/11/itpro-vs-dev-there-is-no-such-a-thing/</link>
		<comments>http://www.muscetta.com/2007/09/11/itpro-vs-dev-there-is-no-such-a-thing/#comments</comments>
		<pubDate>Tue, 11 Sep 2007 19:05:49 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/09/11/itpro-vs-dev-there-is-no-such-a-thing/</guid>
		<description><![CDATA[Dave Winer wisely writes: [...] I&#039;ve been pushing the idea that every app should be a platform for a long time, that in addition to a user interface, every app should have a programmatic interface. For me the idea came from growing up using Unix in the 70s, where every app is a toolkit and [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.scripting.com/stories/2007/09/10/shouldEveryAppBeAPlatform.html">Dave Winer wisely writes</a>:</p>
<blockquote><p><em>[...] I&#039;ve been pushing the idea that every app should be a platform for a long time, that in addition to a user interface, every app should have a programmatic interface. For me the idea came from growing up <strong>using Unix</strong> in the 70s, <strong>where every app is a toolkit and the operating system is a scripting language</strong>. Wiring things together is an integral part of being a Unix user. It&#039;s why programmers like Unix so much [...]</em></p></blockquote>
<p>It is entirely true. The limits are blurry, IMHO. In the Unix world it is common to find full-fledged &#034;applications&#034; which have been written by the ground up by people that were doing SysAdmin tasks, and those &#034;applications&#034; are usually just&#8230; scripts. Simple shell scripts, or something more evolved (PERL, PHP, Python) it does not really matter.</p>
<p>I am so tired of the division traditionally made in the Microsoft world between &#034;Developers&#034; and &#034;IT Professionals&#034;. We even have separate sites for the two audiences: <a href="http://msdn.microsoft.com">MSDN</a> and <a href="http://technet.microsoft.com">Technet</a>. There are separate &#034;TechED&#034; events: for&#034;<a href="http://www.mseventseurope.com/teched/07/developers/Content/Pages/Default.aspx">Devs</a>&#034; and for &#034;<a href="http://www.mseventseurope.com/teched/07/itforum/Content/Pages/Default.aspx">IT Pros</a>&#034;. There are blogs that are divided among the two &#034;audiences&#034;&#8230;</p>
<p>There aren&#039;t two different audiences, really. There are people, with various degrees of expertise. There is no such a thing as a &#034;developer&#034; if he doesn&#039;t know a bit how the underlying system works. His code is gonna suck. And there is not such a thing such a &#034;IT Pro&#034; that builds and integrates and manages systems if he does not have the palest idea of how things work &#034;behind the GUI&#034;. He&#039;s gonna screw things up regardless of how many step-by-step (click-by-click ?) procedures you spoon feed him.</p>
<p>That&#039;s why automation and integration are best done by people who know how to write a bit code.</p>
<p>The <a href="http://www.microsoft.com/powershell">PowerShell</a> <a href="http://blogs.msdn.com/PowerShell/">folk</a> GET IT.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/09/11/itpro-vs-dev-there-is-no-such-a-thing/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Facebook status change is not a crime</title>
		<link>http://www.muscetta.com/2007/09/06/facebook-status-change-is-not-a-crime/</link>
		<comments>http://www.muscetta.com/2007/09/06/facebook-status-change-is-not-a-crime/#comments</comments>
		<pubDate>Thu, 06 Sep 2007 21:34:19 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Blackhat]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[TechCrunch]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/09/06/facebook-status-change-is-not-a-crime/</guid>
		<description><![CDATA[TechCrunch has been speaking to Christian about his PHP code that he had to pull down, my C# code I had to pull down (about which I also posted a comment this week), and the others who did. you can read what they wrote about it at http://www.techcrunch.com/2007/09/06/facebook-opening-up-but-on-its-own-terms/<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>TechCrunch has been speaking to Christian about <a href="http://www.nexdot.net/blog/2007/04/20/updating-facebook-status-using-php/">his PHP code that he had to pull down</a>, <a href="http://www.muscetta.com/2007/08/03/facebook-statetray/">my C# code I had to pull down</a> (about which <a href="http://www.muscetta.com/2007/09/03/its-nice-to-see-things-called-by-their-real-name/">I also posted a comment this week</a>), and <a href="http://blakebrannon.com/2007/08/18/how-to-sync-facebook-status-with-twitter/">the others who did</a>. you can read what they wrote about it at <a href="http://www.techcrunch.com/2007/09/06/facebook-opening-up-but-on-its-own-terms/">http://www.techcrunch.com/2007/09/06/facebook-opening-up-but-on-its-own-terms/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/09/06/facebook-status-change-is-not-a-crime/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#039;s nice to see things called by their real name</title>
		<link>http://www.muscetta.com/2007/09/03/its-nice-to-see-things-called-by-their-real-name/</link>
		<comments>http://www.muscetta.com/2007/09/03/its-nice-to-see-things-called-by-their-real-name/#comments</comments>
		<pubDate>Mon, 03 Sep 2007 10:45:18 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Blackhat]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[lifestream]]></category>
		<category><![CDATA[Risk]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/09/03/its-nice-to-see-things-called-by-their-real-name/</guid>
		<description><![CDATA[Facebook Terms of Service state that it is forbidden to &#034;[...] use automated scripts to collect information from or otherwise interact with the Service or the Site [...]&#034; For this reason, I had to pull down the code of the small application I had previously released, which was &#034;logging&#034; into the mobile web application &#034;pretending&#034; [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.facebook.com/terms.php">Facebook Terms of Service</a> state that it is forbidden to <em>&#034;[...] use automated scripts to collect information from or otherwise interact with the Service or the Site [...]&#034;</em></p>
<p>For this reason, <a href="http://www.muscetta.com/2007/08/03/facebook-statetray">I had to pull down the code of the small application I had previously released</a>, which was &#034;logging&#034; into the mobile web application &#034;pretending&#034; to be a mobile browser and change your status. Big deal!!!</p>
<p>I am quite sure there are a lot of people writing &#034;official&#034; applications (that is using the &#034;platform API&#034; and so on) that are collecting A LOT of information about users who install their applications. They are being sent the info about the visitors by facebook, they are storing them, they might do whatever they please with (study it, sell it to spammers, to marketers, to making-money-assholes) and nobody will ever notice because it is on their servers and nobody can check that.</p>
<p>But a script that changes your status from remote &#8211; since this is not a functionality they CHOSE to expose in their API &#8211; then THAT is a big issue. Doh!<br />
It&#039;s just plain ridiculous, but that&#039;s it.</p>
<p>Sure, the <a href="http://www.facebook.com/developers/tos.php">terms of service for app developers</a> say a bit more in this regard:</p>
<blockquote><p><em>[...]<br />
4) Except as provided in Section 2.A.6 below, <strong>you may not continue to use, and must immediately remove from any Facebook Platform Application and any Data Repository in your possession or under your control, any Facebook Properties not explicitly identified as being storable indefinitely in the Facebook Platform Documentation within 24 hours after the time at which you obtained the data, or such other time as Facebook may specify to you from time to time</strong>;</em></p>
<p><em>5) You may store and use indefinitely any Facebook Properties that are explicitly identified as being storable indefinitely in the Facebook Platform Documentation; provided, however, that except as provided in Section 2.A.6 below, you may not continue to use, and must immediately remove from any Facebook Platform Application and any Data Repository in your possession or under your control, any such Facebook Properties: (a) if Facebook ceases to explicitly identify the same as being storable indefinitely in the Facebook Platform Documentation; (b) upon notice from Facebook (including if we notify you that a particular Facebook User has requested that their information be made inaccessible to that Facebook Platform Application); or (c) upon any termination of this Agreement or of your use of or participation in Facebook Platform;<br />
[...]<br />
You will not directly or indirectly sell, export, re-export, transfer, divert, or otherwise dispose of any Facebook Properties to any country (or national thereof) without obtaining any required prior authorizations from the appropriate government authorities;<br />
[...]</em></p></blockquote>
<p>Are we sure everybody is playing by these rules, when every facebook &#034;application&#034; really runs on the developer&#039;server ? How do you know that they are really storing only what you want them to store, and deleting what you want them to delete ? Everybody knows how difficult it is to really &#034;delete&#034; digital content once it has come into existance&#8230; who knows how many copies of this database/social graph are floating around ?</p>
<p>Of course that is not an issue because people don&#039;t talk about it enough. But a script that changes your status &#8211; now, THAT is a very terrible thing.</p>
<p>I just don&#039;t get this &#034;politically correctness&#034;. It must be me.</p>
<p>Oh, no&#8230; look! It&#039;s not only me!<br />
I had read <a href="http://www.25hoursaday.com/weblog/2007/08/21/FacebookTheSocialGraphRoachMotel.aspx">this post of Dare</a>, but I problably had overlooked the last bit of it&#8230;. because he did point out this Hypocrisy going on:</p>
<blockquote><p><em>[...]<br />
Or (5) the information returned by FQL about a user contains no contact information (no email address, no IM screen names, no telephone numbers, no street address) so it is pretty useless as a way to utilize one’s friends list <strong>with applications besides Facebook</strong> since there is no way to cross-reference your friends using any personally identifiable association that would exist in another service. </em></p>
<p><em>When it comes to contact lists (i.e. the social graph), Facebook is a roach motel. Lots of information about user relationships goes in but there’s no way for users or applications to get it out easily. Whenever an application like FacebookSync comes along which helps users do this, it is </em><em><a href="http://fsbsoftware.com/">quickly shut down for violating their Terms of Use</a>. Hypocrisy? Indeed.<br />
[...]</em></p></blockquote>
<p>He then insists <a href="http://www.25hoursaday.com/weblog/2007/09/02/PutTheUserInControlOtherwiseThingsFallApart.aspx">in a more recent post in calling things by their </a><a href="http://www.25hoursaday.com/weblog/2007/09/02/PutTheUserInControlOtherwiseThingsFallApart.aspx">name</a>:</p>
<blockquote><p><em>[...]<br />
I will point out that 9 times out of 10 when you hear geeks talking about social network portability or similar buzzwords they are really talking about sending people spam because someone they know joined some social networking site. I also wonder how many people realize that these fly-by-night social networking sites that they happily hand over their log-in credentials to so they can spam their friends also share the list of email addresses thus obtained with services that resell to spammers?<br />
[...]<br />
how do you prevent badly behaved applications like Quechup from taking control away from your users? At the end of the day your users might end up thinking you sold their email addresses to spammers when in truth it was the insecure practices of the people who they’d shared their email addresses with that got them in that mess. This is one of the few reasons I can understand why Facebook takes such a hypocritical approach. <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
[...]</em></p></blockquote>
<p>Thanks, Dare, for mentioning Hypocrisy. Thanks for calling things by their name. I do <em><strong>understand</strong></em> their approach, I just <em><strong>don&#039;t agree</strong> </em>with it.</p>
<p>I did pull my small application off the Internet because I have a family to mantain and I don&#039;t want to have legal troubles with Facebook. Sorry to all those that found it handy. No, I cannot even give that to you per email. It&#039;s gone. I am sorry. For the freedom of speech, especially, I am sorry.</p>
<p>I will change my status more often on <a href="http://twitter.com/dani3l3">Twitter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/09/03/its-nice-to-see-things-called-by-their-real-name/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>43things Facebook app</title>
		<link>http://www.muscetta.com/2007/08/28/43things-facebook-app/</link>
		<comments>http://www.muscetta.com/2007/08/28/43things-facebook-app/#comments</comments>
		<pubDate>Tue, 28 Aug 2007 08:36:51 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[43places]]></category>
		<category><![CDATA[43things]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Places]]></category>
		<category><![CDATA[Social Networking]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/28/43things-facebook-app/</guid>
		<description><![CDATA[WOW I already have 13 (thirteen) users for my Facebook application showing your goals pulled from 43things! Sure, gapingvoid has got 700+ users in 3 days, I know. But hey, he&#039;s famous, and I don&#039;t see the point of cluttering my already busy Facebook profile with a cartoon. I do read him and generally like his [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>WOW I already have 13 (thirteen) users for <a href="http://www.facebook.com/apps/application.php?api_key=481ca08c0cea9f311c9ad5a11b0e925b">my Facebook application showing your goals pulled from 43things</a>!</p>
<p>Sure, <a href="http://www.facebook.com/apps/application.php?api_key=129a817243db8922622abd53b2c3732b">gapingvoid has got 700+ users in 3 days</a>, I know. But hey, he&#039;s famous, and I don&#039;t see the point of cluttering my already busy Facebook profile with a cartoon. I do read him and generally like his cartoons, and I am in the <a href="http://www.facebook.com/group.php?gid=2455150406">&#034;friends of the blue monster&#034; group</a> (so to say I like him).</p>
<p>But I prefer reading him in my &#034;normal&#034; aggregator.</p>
<p>I think Facebook apps should rather &#034;inject social objects&#034; (where did I read this definition? sorry I cant recall it or I would appropiately link to you&#8230; I swear).</p>
<p>There are of course other similar applications that just pull comics in your profile (like <a href="http://www.facebook.com/apps/application.php?id=11397560696&amp;b">Dilbert</a>, <a href="http://www.facebook.com/apps/application.php?id=2412082262&amp;b">Garfield</a>, <a href="http://www.facebook.com/apps/index.php?q=comic">etc</a>) but again &#8211; I think this is all stuff that YOU are interested in, and thus should just go into your aggregator &#8211; so YOU can read it; on the opposite your profile in Facebook should talk about YOU and things YOU are doing, for example. Occasionally they can be YOUR posts or they can even be someone else&#039;s posts that you read and want to share/let other people see (that&#039;s why I pull in my <a href="http://www.facebook.com/apps/application.php?api_key=e0e7bb035cf823292dcbba9586adb3d9">Google Reader&#039;s shared items</a> for example &#8211; things I read and want you too to see). If this includes importing other social objects/information from other social networks, like <a href="http://www.facebook.com/apps/application.php?api_key=024f4b8ab5f232414153957e8c5fabc0">the music you are listening to on last.FM</a>, or <a href="http://www.facebook.com/apps/application.php?api_key=8d7e87cc9f11c6d0311cb7b50252548b">the photos you published on Flickr</a>, then it is fine. That&#039;s why I wrote <a href="http://www.facebook.com/apps/application.php?api_key=481ca08c0cea9f311c9ad5a11b0e925b">an app that shows the things you want to do</a>, pulled in from <a href="http://www.43things.com">43things.com</a> and one that shows <a href="http://www.facebook.com/apps/application.php?api_key=36bb682b64617bdea356ccf400c0d6d4">the places you want to visit</a> pulled in from <a href="http://www.43places.com">43places.com</a>. Because I felt those social objects from another network were missing. In fact a user commented &#034;<em>[...] Glad someone finally took a step forward to create this, though <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  [...]</em>&#034;.</p>
<p>But of course what I wrote about which kind of applications you should or shouldn&#039;t have in your profile, remember that this is just my <strike>personal opinion</strike> rant, and everybody is free to put whatever stuff he/she likes onto his/her profile, in the end :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/28/43things-facebook-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Photo Category Visualization</title>
		<link>http://www.muscetta.com/2007/08/26/new-photo-category-visualization/</link>
		<comments>http://www.muscetta.com/2007/08/26/new-photo-category-visualization/#comments</comments>
		<pubDate>Sun, 26 Aug 2007 15:28:34 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Places]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/26/new-photo-category-visualization/</guid>
		<description><![CDATA[Copying the advice by Small Potato, I made a different page for the &#039;Photos&#039; category/tag on this blog. It has been a bit trickier than I first thought, because he keeps his picture uploaded into wordpress itself, while I had to write a small plugin using a regular expression to extract the &#034;IMG SRC&#034; portion of [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/dani3l3/1240463115/" title="Photo Sharing"><img width="500" src="http://farm2.static.flickr.com/1192/1240463115_8df8a01334.jpg" alt="New Photo Category Page" height="432" /></a></p>
<p>Copying <a href="http://www.wpdesigner.com/2007/08/04/how-to-manipulate-category-templates/">the advice by Small Potato</a>, I made <a href="http://www.muscetta.com/category/photos/">a different page for the &#039;Photos&#039; category/tag</a> on this blog. It has been a bit trickier than I first thought, because he keeps his picture uploaded into wordpress itself, while I had to write a small plugin using a regular expression to extract the &#034;IMG SRC&#034; portion of the post content. This way I also experimented with WordPress templates, plugins and structure a bit more than I had done before&#8230; and I am even more convinced than before that it can easily be used as a CMS rather than *just* a bloging software.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/26/new-photo-category-visualization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My lost Facebook Appz! doh!</title>
		<link>http://www.muscetta.com/2007/08/25/my-lost-facebook-appz-doh/</link>
		<comments>http://www.muscetta.com/2007/08/25/my-lost-facebook-appz-doh/#comments</comments>
		<pubDate>Sat, 25 Aug 2007 18:58:44 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[43places]]></category>
		<category><![CDATA[43things]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Social Networking]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/25/my-lost-facebook-appz-doh/</guid>
		<description><![CDATA[I am just figuring out that on this post of the 26th of July I mentioned I was trying to write a simple facebook application. I am not realizing I never wrote anything about it anymore. I did not spend a lot of time figuring out all the possibilities, and indeed I have not looked [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I am just figuring out that <a href="http://www.muscetta.com/2007/07/26/facebook-development/">on this post of the 26th of July I mentioned I was trying to write a simple facebook application</a>. I am not realizing I never wrote anything about it anymore. I did not spend a lot of time figuring out all the possibilities, and indeed I have not looked into it anymore since then, but that very night I did write something. Not just one application, but TWO (copycat) very simple applications: <a href="http://www.facebook.com/apps/application.php?id=2911759627">my43places</a> and <a href="http://www.facebook.com/apps/application.php?id=2849529788">my43things</a>, that pull into your profile the data about the things you want to do you entered in <a href="http://www.43things.com">43things.com</a> and the places you want to visit you entered in <a href="http://www.43places.com">43places.com</a>, respectively.</p>
<p>They are very simple: you enter your user name and they connect to their <a href="http://www.43things.com/about/view/web_service_api">REST web service</a>, extract the information about your places and/or goals, and show them as a list in a box in your profile.</p>
<p>I don&#039;t know why I did not blog about them before&#8230; maybe I thought they were too simple ? Well, they are, but, seriously: who cares? <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/25/my-lost-facebook-appz-doh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Source Projects and Microsoft</title>
		<link>http://www.muscetta.com/2007/08/24/open-source-projects-and-microsoft/</link>
		<comments>http://www.muscetta.com/2007/08/24/open-source-projects-and-microsoft/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 12:16:50 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Places]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/24/open-source-projects-and-microsoft/</guid>
		<description><![CDATA[This CNet article about CodePlex has some VERY interesting points: [...] Bayarsaikhan has posted the top 25 most active open-source projects on Microsoft&#039;s Codeplex site. Looking at the list, it looks like Microsoft developers spend their time doing much the same as the rest of the Java/other world: play games and make the Web world pretty [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://news.com.com/8301-10784_3-9761998-7.html">This CNet article about CodePlex</a> has some VERY interesting points:</p>
<blockquote><p><em>[...] Bayarsaikhan </em><a href="http://www.plentyofcode.com/2007/08/most-active-open-source-projects-in.html" class="external-link"><font color="#0048c0"><em>has posted</em></font></a><em> the top 25 most active open-source projects on </em><a href="http://www.codeplex.com/"><font color="#20328e"><em>Microsoft&#039;s Codeplex</em></font></a><em> site. Looking at the list, it looks like Microsoft developers spend their time doing much the same as the rest of the Java/other world: play games and make the Web world pretty with AJAX. You can see the top project interests below in the Codeplex tag cloud.</em></p>
<p><em>Codeplex is interesting to me for several reasons, but primarily because it demonstrates something that I&#039;ve argued for many years now: </em><a href="http://asay.blogspot.com/2005/06/windows-as-open-source-platform.html" class="external-link"><font color="#0048c0"><em>open source on the Windows platform is a huge opportunity for Microsoft</em></font></a><em>. It is something for the company to embrace, not despise.</em></p>
<p><em>And it does several things well (better than Sourceforge, in my opinion) [...]</em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/24/open-source-projects-and-microsoft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook Mobile is not working for Italy</title>
		<link>http://www.muscetta.com/2007/08/21/facebook-mobile-is-not-working-for-italy/</link>
		<comments>http://www.muscetta.com/2007/08/21/facebook-mobile-is-not-working-for-italy/#comments</comments>
		<pubDate>Tue, 21 Aug 2007 09:04:01 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Social Networking]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/21/facebook-mobile-is-not-working-for-italy/</guid>
		<description><![CDATA[Facebook mobile is not working from mobile operators not in the US, I suppose. I can&#039;t even log on to m.facebook.com with my WIndows Mobile SmartPhone. I can&#039;t send status updates through SMS. I can&#039;t even send them by mail, or I get the following back: So, now, I am updating Twitter. Twitter can be [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<style type="text/css">    .flickr-photo { border: solid 2px #000000; }  .flickr-yourcomment { }  .flickr-frame { text-align: left; padding: 3px; }  .flickr-caption { font-size: 0.8em; margin-top: 0px; }</style>
<p class="flickr-frame"><a href="http://www.flickr.com/photos/dani3l3/1192155232/" title="photo sharing"><img src="http://farm2.static.flickr.com/1341/1192155232_2852c73935.jpg" alt="Facebook Mobile is not working for Italy" class="flickr-photo" /></a></p>
<p>Facebook mobile is not working from mobile operators not in the US, I suppose.<br />
I can&#039;t even log on to m.facebook.com with my WIndows Mobile SmartPhone.<br />
I can&#039;t send status updates through SMS.</p>
<p>I can&#039;t even send them by mail, or I get the following back:</p>
<p><a href="http://www.flickr.com/photos/dani3l3/1191285337/"><img width="416" src="http://farm2.static.flickr.com/1047/1191285337_ba494d53ef_o.jpg" alt="Facebook Mobile is not working for Italy" height="447" /></a></p>
<p>So, now, I am updating <a href="http://twitter.com/dani3l3">Twitter</a>.<br />
Twitter can be updated with an SMS even from Europe. Or it can be updated with a bot running GTalk. Very easy, can do it from everywhere.</p>
<p>I then wrote a small command line application (<a href="http://www.muscetta.com/2007/08/03/facebook-statetray/">based on the same &#034;hack&#034; as the one described before</a>) that runs every five minutes from the scheduler on my server and keeps the two in sync.</p>
<p>I wrote it in C# as a Console application because that&#039;s usually what I do when I want it to run it both on my windows machines and/or on my Linux server (with <a href="http://www.mono-project.com/">MONO</a>). I already used this approach in the past and I found it to be successful. As long as you keep the application simple enough and check out <a href="http://www.go-mono.com/docs">the documentation for the implemented classes on mono</a>, it runs without modification both on windows on the &#034;real&#034; .Net framework and on Mono on Linux. i just copy the executable and I am ready to go.<br />
Not this time, though.<br />
I am hitting what seems to be a bug in mono. I might be able to find a workaround, but I haven&#039;t had the time to dig in the issue yet.<br />
I posted some <a href="http://www.gotmono.com/cgi-bin/yabb/YaBB.pl?board=news;action=display;num=1180633385">info about this on this forum</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/21/facebook-mobile-is-not-working-for-italy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Live ID Web Authentication 1.0 SDK !</title>
		<link>http://www.muscetta.com/2007/08/16/windows-live-id-web-authentication-10-sdk/</link>
		<comments>http://www.muscetta.com/2007/08/16/windows-live-id-web-authentication-10-sdk/#comments</comments>
		<pubDate>Thu, 16 Aug 2007 14:28:50 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Hotmail]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[LiveID]]></category>
		<category><![CDATA[Passport]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/16/windows-live-id-web-authentication-10-sdk/</guid>
		<description><![CDATA[Check this out: Windows Live ID Team has published on the web the SDK that lets you liveID (or &#034;passport&#034;)-enable your applications! http://msdn2.microsoft.com/en-us/library/bb676633.aspx There are even code samples in six different languages: C#, Java, PHP, Python, Ruby e Perl! You can download them from http://go.microsoft.com/fwlink/?LinkId=91761 Wow! Having time, it would be cool to write a [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Check this out:</p>
<p>Windows Live ID Team has published on the web the SDK that lets you liveID (or &#034;passport&#034;)-enable your applications!</p>
<p><a href="http://msdn2.microsoft.com/en-us/library/bb676633.aspx">http://msdn2.microsoft.com/en-us/library/bb676633.aspx</a></p>
<p>There are even code samples in six different languages: C#, Java, PHP, Python, Ruby e Perl! You can download them from <a href="http://go.microsoft.com/fwlink/?LinkId=91761">http://go.microsoft.com/fwlink/?LinkId=91761</a></p>
<p>Wow! Having time, it would be cool to write a WordPress plugin using Passport authentication to authenticate/identify users that want to comment&#8230; mumble mumble&#8230;.. <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Interoperability. Wow.</p>
<p>More info at the Live ID starting Page: <a href="http://dev.live.com/blogs/liveid/archive/2006/05/18/8.aspx">http://dev.live.com/blogs/liveid/archive/2006/05/18/8.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/16/windows-live-id-web-authentication-10-sdk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why do developers tend to forget about people behind proxy servers ?</title>
		<link>http://www.muscetta.com/2007/08/13/why-do-developers-tend-to-forget-about-people-behind-proxy-servers/</link>
		<comments>http://www.muscetta.com/2007/08/13/why-do-developers-tend-to-forget-about-people-behind-proxy-servers/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 11:38:49 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Proxy]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/13/why-do-developers-tend-to-forget-about-people-behind-proxy-servers/</guid>
		<description><![CDATA[I know this is a very common issue. I keep finding way too many software that claim to interact with Web 2.0 sites or services, and connect here or there&#8230;. still forgetting one basic simple rule, that is: letting people use a proxy. Most programmers for some reasons just assume that since they are directly [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I know this is a very common issue.</p>
<p>I keep finding way too many software that claim to interact with Web 2.0 sites or services, and connect here or there&#8230;. still forgetting one basic simple rule, that is: letting people use a proxy.</p>
<p>Most programmers for some reasons just assume that since they are directly connected to the internet, everybody is. Which isn&#039;t always the case. Most companies have proxies and will only let you out to port 80 &#8211; by using their proxy.</p>
<p>&#8230;which in turn is one of the reasons why most applications now &#034;talk&#034; and tunnel whatever application protocol on top of HTTP&#8230; still a lot of softwares simply &#034;forget&#034; or don&#039;t care proving a simple checkbox &#034;use proxy&#034;, which will translate in two or three extra lines of code&#8230; three lines which I personally usually include in my projects, when I am not even a *developer*!! (but that might explain why I *think* of it&#8230; I come from a security and networking background <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )</p>
<p>I thought of writing this post after having read <a href="http://geekswithblogs.net/technetbytes/archive/2007/08/11/114573.aspx">this post by Saqib Ullah</a>.</p>
<p>Anyway. I keep finding this thing over and over again. Both in simple, hobbyist, sample and/or in complex, big, expensive enterprise software. Last time I got pissed off about a piece of code missing this feature was some days ago when testing <a href="http://www.codeplex.com/FacebookToolkit">http://www.codeplex.com/FacebookToolkit</a>. The previous time was during Windows Vista beta-testing (I had found a similar issue in beta2, and had it fixed for RC1.)</p>
<p>Actually, I am being polite saying it is &#034;missing a feature&#034;. To be honest I think missing this &#034;feature&#034; would have to be considered a bug: every piece of software using HTTP *should* include the possibility to pass thorugh proxy (also, don&#039;t forget about  AUTHENTICATED proxies), or the purpose of using HTTP in the first place is defeated!!</p>
<p>Developers!!! You have to remember people ARE behind proxies !!!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/13/why-do-developers-tend-to-forget-about-people-behind-proxy-servers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Powershell and RegExp: a &quot;match&quot; made my day.</title>
		<link>http://www.muscetta.com/2007/08/09/powershell-and-regexp-a-match-made-my-day/</link>
		<comments>http://www.muscetta.com/2007/08/09/powershell-and-regexp-a-match-made-my-day/#comments</comments>
		<pubDate>Thu, 09 Aug 2007 18:45:31 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Exchange]]></category>
		<category><![CDATA[ISA]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/09/powershell-and-regexp-a-match-made-my-day/</guid>
		<description><![CDATA[Today I was working with a customer and friend (Claudio Latini, who I thank for the permission to post this, which is also work of his brain &#8211; especially the regular expression you&#039;ll see reading on!). We are running several projects and activities together and, among several other things, he&#039;s in the process of migrating his users from [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Today I was working with a customer and friend (Claudio Latini, who I thank for the permission to post this, which is also work of his brain &#8211; especially the regular expression you&#039;ll see reading on!).</p>
<p>We are running several projects and activities together and, among several other things, he&#039;s in the process of migrating his users from Exchange 2003 to Exchange 2007. In this infrastructure, he has some ISA Server that publish both the Exchange2003 and the Exchange2007 frontends.</p>
<p>Now he wanted to know HOW MANY and WHICH ONES of his users actually have a PocketPC or other WIndows Mobile device and were actively connecting to the old FrontEnd. You give out mobile devices to people but those things are usually less &#034;managed&#034; &#8211; when compared to corporate PCs, at least. So you loose a bit control of the thing&#8230; usually people with mobile devices using ActiveSync in companies are managers, and especially since some of them might be on holiday at the moment, it was important to know WHO were the people that had to be told to reconfigure their device to point to the new name/server BEFORE he would start complaining about ActiveSync not working anymore&#8230;</p>
<p>So how do you figure out who&#039;s connecting ?</p>
<p>I am NO Exchange expert whatsoever&#8230; but a thing that came in handy was the thing that an ISA Server was reverse-publishing the frontend server. I know ISA (and firewalls/proxies in general) much better than Exchange, so I can help on that side. In the log files, ActiveSync Connections looked like the following URL, passing most parameters in the POST request: <a title="http://www.company.com/exchange?User=Mario&amp;DeviceID=186hkjw6gjw76463uh2g5gi2j3h&amp;Bla=bla" href="http://www.muscetta.org/Admin">http://www.company.com/exchange?User=Mario&amp;DeviceID=186hkjw6gjw76463uh2g5gi2j3h&amp;Bla=bla</a> (and on an unrelated note: yes, if you try to crawl this link, you are a bot <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )</p>
<p>So we exported ISA logs (there are several tools for this, including &#034;<a href="http://www.isatools.org/tools/ISA_Extract_Logs_v1.8.zip">Extract logs</a>&#034;, but we did not use a script, we just used a filter for the correct publishing rule in the &#034;Monitoring &#8211; Logging&#034; tag in ISA Server Console and then copied and pasted those log lines) and tried to see if <a href="http://www.microsoft.com/powershell">PowerShell</a> could help tackle the issue.</p>
<p>Here we load our sample log (in a real log you would have much more information &#8211; each single line wrapping several console rows; I cut it short to the URL to make it more readable.</p>
<pre style="color: #eeedf0; background-color: #012456"><span style="background-color: #012456; color: #00ff00;">PS&gt;</span> get-content log.txt    

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Gino&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Gino&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla</pre>
<p>We know Get-Content does not just display the file, it loads the file into a string array.</p>
<p>So we can cycle through the file and try to extract (using a regexp) the string after &#034;User=&#034; and before the first ampersand (&#034;&amp;&#034;), which translates in the following regular expression:</p>
<p><strong>&#034;User=(?&lt;nome&gt;.*?)&amp;&#034;</strong></p>
<p>(the regexp has been the most difficult thing to figure out, but it is very worth the hassle once you&#039;ve done it&#8230;)</p>
<pre style="color: #eeedf0; background-color: #012456"><span style="background-color: #012456; color: #00ff00;">PS&gt;</span> get-content log.txt | foreach {$_ -match "User=(?<span>&lt;</span>nome&gt;.*?)&amp;" | out-null; $matches}
Name                           Value
----                           -----
nome                           Mario
0                              User=Mario&amp; nome                           Gino
0                              User=Gino&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Gino
0                              User=Gino&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Mario
0                              User=Mario&amp;</pre>
<p>This seems to work. Now we only have to get the Named Captures called &#034;nome&#034; (containing the user name):</p>
<pre style="color: #eeedf0; background-color: #012456"><span style="background-color: #012456; color: #00ff00;">PS&gt;</span> <strong>get-content log.txt | foreach {$_ -match "User=(?<span>&lt;</span>name&gt;.*?)&amp;" | out-null; $matches["name"]}
</strong>Mario
Gino
Antonio Antonio
Gino
Antonio
Antonio
Mario
Mario
Mario
Mario
Antonio
Antonio
Mario
Antonio
Antonio
Mario
Antonio
Antonio
Mario
Antonio
Antonio
Mario
Mario</pre>
<p>Awesome. Now sort them and remove duplicates. Which is one more command in our pipeline:</p>
<p><strong>get-content log.txt | foreach {$_ -match &#034;User=(?&lt;nome&gt;.*?)&amp;&#034; | out-null; $matches["nome"]} | sort-object -uniq</strong></p>
<pre style="color: #eeedf0; background-color: #012456"><span style="background-color: #012456; color: #00ff00;">P&gt;</span> get-content log.txt | foreach {$_ -match "User=(?<span>&lt;</span>name&gt;.*?)&amp;" | out-null; $matches["name"]} | sort-object -uniq
Antonio
Gino
Mario     

<span style="background-color: #012456; color: #00ff00;">PS&gt;</span>
<span style="background-color: #012456; color: #00ff00;">PS&gt;</span></pre>
<p>Now you can call those three users and tell them to modify their ActiveSync configuration <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/09/powershell-and-regexp-a-match-made-my-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook StateTray</title>
		<link>http://www.muscetta.com/2007/08/03/facebook-statetray/</link>
		<comments>http://www.muscetta.com/2007/08/03/facebook-statetray/#comments</comments>
		<pubDate>Fri, 03 Aug 2007 21:44:23 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/03/facebook-statetray/</guid>
		<description><![CDATA[Facebook StateTray, uploaded by Daniele Muscetta on Flickr. This is a Screenshot of the small application I first described in my previous blog post. It is a simple Windows Form that lets you change your status on Facebook without having to browse to the site. It does not rely on Facebook&#039;s API (as they won&#039;t [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<style type="text/css">       .flickr-photo { border: solid 2px #000000; } .flickr-yourcomment { } .flickr-frame { text-align: left; padding: 3px; } .flickr-caption { font-size: 0.8em; margin-top: 0px; } </style>
<p class="flickr-frame"><a href="http://www.flickr.com/photos/dani3l3/986527032/" title="photo sharing"><img src="http://farm2.static.flickr.com/1050/986527032_6dd64a6f5a.jpg" alt="Facebook StateTray" class="flickr-photo" /></a></p>
<p><span class="flickr-caption"><a href="http://www.flickr.com/photos/dani3l3/986527032/">Facebook StateTray</a>, uploaded by <a href="http://www.flickr.com/people/dani3l3/">Daniele Muscetta</a> on Flickr.</span></p>
<p class="flickr-yourcomment">This is a Screenshot of the small application I first described in <a href="http://www.muscetta.com/2007/08/02/facebook-api-and-winform-experiment/">my previous blog post</a>.</p>
<p>It is a simple Windows Form that lets you change your status on Facebook without having to browse to the site. It does not rely on <a href="http://developers.facebook.com/documentation.php">Facebook&#039;s API</a> (as they won&#039;t let you change your status, at least to date) but is really uses a hack on the <a href="http://m.facebook.com">Facebook mobile pages</a>. It is based on <a href="http://www.nexdot.net/blog/2007/04/20/updating-facebook-status-using-php/">PHP code posted by Christian Flickinger</a>, ported to C# (.Net 2.0) by me.</p>
<p>When you pull down the form you get to see the settings:</p>
<p><a href="http://www.flickr.com/photos/dani3l3/999229925/"><img width="459" src="http://farm2.static.flickr.com/1396/999229925_8020fb6938.jpg" alt="Facebook State Tray" height="500" /></a></p>
<p>Those can be stored in an XML file, that gets loaded automatically every time the program starts.<br />
Beware that password ARE displayed and stored in clear text.</p>
<p>The idea so far is that you run it on your PC and you just keep it resized so it does not show the &#034;dangerous&#034; bits.<br />
You can keep it minimized on the tray in windows, pop it up when you need to update your status, write your new status and click &#034;change&#034; &#8211; it will freeze for a couple of seconds while updates your status, since it uses synchronous calls &#8211; then you can minimize it again.</p>
<p><strong><em>UPDATED &#8211;  September 1st 2007: I have been asked by Facebook to pull down the source code from the Net, as it violates their <a href="http://www.facebook.com/terms.php">terms of service</a> (I had not realized that). Apologies to all.</em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/03/facebook-statetray/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Facebook API and WinForm experiment</title>
		<link>http://www.muscetta.com/2007/08/02/facebook-api-and-winform-experiment/</link>
		<comments>http://www.muscetta.com/2007/08/02/facebook-api-and-winform-experiment/#comments</comments>
		<pubDate>Thu, 02 Aug 2007 14:24:26 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Social Networking]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/02/facebook-api-and-winform-experiment/</guid>
		<description><![CDATA[While testing with the Facebook API, I started creating a WinForm using the Facebook Toolkit. What I had in mind was a simple program that would run on my PC, maybe minimized in the system tray, that would let me update my status in a click, thorugh the day, without having to log on to [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>While testing with the <a href="http://developers.facebook.com/documentation.php">Facebook API</a>, I started creating a WinForm using the <a href="http://www.codeplex.com/FacebookToolkit">Facebook Toolkit</a>.</p>
<p>What I had in mind was a simple program that would run on my PC, maybe minimized in the system tray, that would let me <a href="http://www.facebook.com/statusupdates/?ref=tn">update my status</a> in a click, thorugh the day, without having to log on to the website. Most of the day I am busy working, and I don&#039;t really have time to go surf and check Facebook&#8230; but I like the possibility for people to hear how I am doing. Changing the status would keep them up to date, and would keep my profile current.</p>
<p>As I figured out afterwards, their API does not yet let you change your status yet.</p>
<p><a href="http://www.25hoursaday.com/weblog/CommentView.aspx?guid=51b24ec1-ec28-4526-b7fe-9d1e6c7fc802">There are other people asking for this possibility</a>&#8230; but then I went further searching on the Internet, and I found this blog: <a href="http://www.nexdot.net/blog/2007/04/20/updating-facebook-status-using-php/">http://www.nexdot.net/blog/2007/04/20/updating-facebook-status-using-php/</a>. </p>
<p>I just hacked together a small WinForm written in C# that reimplements this idea.</p>
<p><a href="http://www.flickr.com/photos/dani3l3/986527032/" title="Photo Sharing"><img width="500" src="http://farm2.static.flickr.com/1050/986527032_6dd64a6f5a.jpg" alt="Facebook StateTray" height="66" /></a></p>
<p>I indeed would like to thank Christian for the idea, and my friend and colleague Pierluigi for his precious help with the regular expressions <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>At the moment it has terrible things such as hardcoded passwords in it, but as soon as I will have time to polish the code a bit, I will post it.</p>
<p>One more thing I would like to do with it is turning it from a standalone application into a <a href="http://msdn2.microsoft.com/en-us/library/aa905655.aspx">Live Messenger Add-In</a>, so that it synchronizes my messenger status with the one of Facebook. When I will have time for that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/02/facebook-api-and-winform-experiment/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Facebook development</title>
		<link>http://www.muscetta.com/2007/07/26/facebook-development/</link>
		<comments>http://www.muscetta.com/2007/07/26/facebook-development/#comments</comments>
		<pubDate>Thu, 26 Jul 2007 13:30:56 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Places]]></category>
		<category><![CDATA[popfly]]></category>
		<category><![CDATA[Risk]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/07/26/facebook-development/</guid>
		<description><![CDATA[I have been quite hooked into Facebook for the last couple of days, figuring out what it can and cannot do. It can do a lot. The possibility to inject code and brand new application into it is absolutely awesome. PopFly lets you create mashups and even custom blocks, and I liked that too. But [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I have been quite hooked into <a href="http://www.facebook.com">Facebook</a> for the last couple of days, figuring out what it can and cannot do. It can do a lot. The possibility to inject code and brand new application into it is absolutely awesome.</p>
<p><a href="http://www.popfly.ms">PopFly</a> lets you create mashups and even custom blocks, and I liked that too. But you have to use fancy-shiny <a href="http://silverlight.net/">Silverlight</a> (which is very cool indeed, but probably not *always* necesary) and you can only create blocks using Javascript. Sure, as someone as already written, <a href="http://www.paulgraham.com/web20.html">the meaning of AJAX is &#034;javascript now works&#034;.</a> I can understand (even if I don&#039;t know them for sure) the reasons behind certain choices. But I find it limiting. Maybe it is because I don&#039;t like Javascript. It must be it. </p>
<p>Facebook, instead, empowers you to inject code into their social networking framework. Any code. In whatever language you like. They started it in PHP, but you can plug-in whatever you like: Java, Ruby, Perl&#8230;. you can even have your application running on your own server, still providing a seamless experience inside of facebook. This opens up to millions of possibilities, and I got fascinated by that.</p>
<p>At the same time, the paranoid part of myself has been thinking to the security implications of it. This open platform is cool, but it also sounds like a framework for cross-site-scripting (XSS) attacks. Sure, you can &#034;report&#034; an application made by a third party that does something weird&#8230; but who will really notice if all that happens under the hood is that your cookies get stolen (and someone accesses your bank account) ? Will you figure it out it has happenend because <a href="http://en.wikipedia.org/wiki/Dancing_pigs">you wanted to see the &#034;dancing pigs&#034;</a> loaded in your profile ? Or will you figure it out at all ?</p>
<p>This said, I set aside my fear for a while and I delved into coding. What I did learn in the last couple of years, having slowly moved away from security engagements, is to relax. When I was working costantly with security I was a lot more paranoid. Now I case much less, and I live a lot more.</p>
<p>So I developed a couple of quick and simple apps running from this very server into Facebook, and I started using thePHP5 library they provide, so to be able to follow the examples first and figure out how it was working.</p>
<p>Now I also want to take a look at the <a href="http://www.nikhilk.net/FacebookNET.aspx">.NET library for facebook </a>when I have time. It sounds cool.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/07/26/facebook-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IronPython and Visual Studio Shell</title>
		<link>http://www.muscetta.com/2007/06/08/ironpython-and-visual-studio-shell/</link>
		<comments>http://www.muscetta.com/2007/06/08/ironpython-and-visual-studio-shell/#comments</comments>
		<pubDate>Fri, 08 Jun 2007 17:47:03 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[IronPython]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/06/08/ironpython-and-visual-studio-shell/</guid>
		<description><![CDATA[I read on the IronPython Mailing List about this cool integration with Visual Studio Shell! Also, further in the same thread, you can find out that the current CTP of ASP.NET (ASP.NET Futures) also includes ironPython integration. Look at this:<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://lists.ironpython.com/pipermail/users-ironpython.com/2007-June/005045.html">I read on the IronPython Mailing List about this cool integration with Visual Studio Shell</a>! Also, further in the same thread, you can find out that <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=9323777E-FE78-430C-AD92-D5BE5B5EAD98&amp;displaylang=en">the current CTP of ASP.NET (ASP.NET Futures) also includes ironPython integration</a>. Look at this:</p>
<p><a href="http://msdn2.microsoft.com/en-us/vstudio/bb510103.vss_IronPython_large.jpg" title="IronPython running in VS Shell" rel="lightbox[188]"><img src="http://farm2.static.flickr.com/1213/536136720_869f05cb29.jpg" alt="IronPython running in VS Shell" height="389" width="500" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/06/08/ironpython-and-visual-studio-shell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where did I leave that old JavaScript book ?</title>
		<link>http://www.muscetta.com/2007/06/05/where-did-i-leave-that-old-javascript-book/</link>
		<comments>http://www.muscetta.com/2007/06/05/where-did-i-leave-that-old-javascript-book/#comments</comments>
		<pubDate>Tue, 05 Jun 2007 19:51:13 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/06/05/where-did-i-leave-that-old-javascript-book/</guid>
		<description><![CDATA[When testing out PopFly, I figured out I *really* need to know JavaScript better than I do, in order to build &#034;blocks&#034;. And I don&#039;t just need it for PopFly, of course, but in general -&#160;because these days it is ubiquitous, and it is being used so much on the Web. One more thing on&#160;my [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>When testing out <a href="http://www.popfly.ms/">PopFly</a>, I figured out I *really* need to know JavaScript better than I do, in order to build &#034;blocks&#034;. And I don&#039;t just need it for PopFly, of course, but in general -&nbsp;because these days it is ubiquitous, and it is being used so much on the Web. One more thing on&nbsp;my to-do list. <a href="http://www.codinghorror.com/blog/archives/000857.html">Jeff seems to agree</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/06/05/where-did-i-leave-that-old-javascript-book/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This blog in C#</title>
		<link>http://www.muscetta.com/2007/05/30/this-blog-in-c/</link>
		<comments>http://www.muscetta.com/2007/05/30/this-blog-in-c/#comments</comments>
		<pubDate>Wed, 30 May 2007 10:18:21 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/30/this-blog-in-c/</guid>
		<description><![CDATA[I have been busy trying to write a new frontend for this blog that uses .Net. I already blogged about it here. In the last couple of weeks I have been adding stuff &#8211; permalinks using mod_rewrite, I finally show the comments properly, I have added categories and category archives (as in http://www.muscetta.net/dotnet/tag/coding). There is [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I have been busy trying to write <a href="http://www.muscetta.net/dotnet/Blog.aspx">a new frontend for this blog that uses .Net</a>. I already blogged about it <a href="http://www.muscetta.com/2007/05/01/wordpressnet/">here</a>. In the last couple of weeks I have been adding stuff &#8211; permalinks using mod_rewrite, I finally show the comments properly, I have added categories and category archives (as in <a href="http://www.muscetta.net/dotnet/tag/coding">http://www.muscetta.net/dotnet/tag/coding</a>). There is even an <a href="http://www.muscetta.net/dotnet/Feed.aspx">RSS Feed</a>.</p>
<p>The layout is still crap, but I sort of like it being so light weight, so that is not on my priority list so far. Moreover, I am a crap designer.</p>
<p>Before that, tough, I still have to add important functionalities like the possibility to POST comments (which needs a new CAPTCHA, etc, so it will take me a while), and I am having issues with text encoding (it does not show the accented characters properly, yet).</p>
<p>But I am having fun doing it.</p>
<p>[Edit of December 2009 - I killed the above experiment. I had fun doing it, but there is not time for all, it needs a lot of work to keep it running/update it with every wordpress update, and mod_mono is wasting too many resources on the server.]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/30/this-blog-in-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Death by right-click -&gt; Delete ? Nope. PowerShell.</title>
		<link>http://www.muscetta.com/2007/05/30/death-by-right-click-delete-nope-powershell/</link>
		<comments>http://www.muscetta.com/2007/05/30/death-by-right-click-delete-nope-powershell/#comments</comments>
		<pubDate>Wed, 30 May 2007 09:55:42 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/30/death-by-right-click-delete-nope-powershell/</guid>
		<description><![CDATA[So at one stage I was testing the RSS reader capabilities of Outlook 2007, and I imported an OPML file with roughly 500 feeds! Of course I was NOT interested in reading ALL of them, and it was causing quite a bit of work to do on my machine to fetch them all and sync [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>So at one stage I was testing the RSS reader capabilities of Outlook 2007, and I imported an OPML file with roughly 500 feeds! Of course I was NOT interested in reading ALL of them, and it was causing quite a bit of work to do on my machine to fetch them all and sync the content in my mailbox&#8230;</p>
<p>So I figured out it was possible to remove the subscription (from the Tools menu -&gt; Account Settings -&gt; RSS Feeds) but the folders were left there. Now, I didn&#039;t want to have those 500 folders in my mailbox, and I did not even want to die by right-clicking, pressing &#034;delete&#034;, confirming&#8230;. all of this 500 times! No way.</p>
<p>So I wrote this little PowerShell script, I guess it *might* be helpful to someone at one stage, who knows ?</p>
<p>[System.Reflection.Assembly]::LoadWithPartialName(&#039;Microsoft.Office.Interop.Outlook&#039;)<br />
$oApp = New-Object -COM &#039;Outlook.Application&#039;<br />
$rss = $oApp.GetNamespace(&#034;MAPI&#034;).GetDefaultFolder(&#034;olFolderRssFeeds&#034;)<br />
forach ($folder in $rss.Folders)<br />
{<br />
$folder.Delete()<br />
}</p>
<p>Please note that if you don&#039;t have the Office Interop Assemblies installed on your machine, you can&#039;t use the first line. As a result, you will have to change the third line hardcoding the number that represents the RSSFeeds folder, so it would become:</p>
<p>$rss = $oApp.GetNamespace(&#034;MAPI&#034;).GetDefaultFolder(25)</p>
<p>Note: I found out (later, of course) that there is a much more general post on this subject (that is, automating Outlook through PowerShell): <a href="http://www.leeholmes.com/blog/GettingThingsDoneOutlookTaskAutomationWithPowerShell.aspx">http://www.leeholmes.com/blog/GettingThingsDoneOutlookTaskAutomationWithPowerShell.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/30/death-by-right-click-delete-nope-powershell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Popfly</title>
		<link>http://www.muscetta.com/2007/05/19/microsoft-popfly/</link>
		<comments>http://www.muscetta.com/2007/05/19/microsoft-popfly/#comments</comments>
		<pubDate>Sat, 19 May 2007 07:26:24 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Places]]></category>
		<category><![CDATA[popfly]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/19/microsoft-popfly/</guid>
		<description><![CDATA[You can build complex web-mashups in minutes. Read on an interesting review at programmableweb.com and, obviously, more info at the official site http://www.popfly.ms<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.popfly.ms" title="Microsoft Popfly"><img src="http://farm1.static.flickr.com/204/504146344_4b0ad07f51.jpg" alt="Microsoft Popfly" height="375" width="500" /></a></p>
<p>You can build complex web-mashups in minutes.</p>
<p>Read on <a href="http://blog.programmableweb.com/2007/05/19/microsoft-popfly/">an interesting review at programmableweb.com</a> and, obviously, more info at the <a href="http://www.popfly.ms">official site http://www.popfly.ms</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/19/microsoft-popfly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a Script-Based Unit Monitor in OpsMgr2007 via the GUI</title>
		<link>http://www.muscetta.com/2007/05/10/create-a-script-based-unit-monitor-in-opsmgr2007-via-the-gui/</link>
		<comments>http://www.muscetta.com/2007/05/10/create-a-script-based-unit-monitor-in-opsmgr2007-via-the-gui/#comments</comments>
		<pubDate>Thu, 10 May 2007 20:31:40 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA["Management Packs"]]></category>
		<category><![CDATA[authoring]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[management pack]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[MP]]></category>
		<category><![CDATA[MPs]]></category>
		<category><![CDATA[opsmgr]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/10/create-a-script-based-unit-monitor-in-opsmgr2007-via-the-gui/</guid>
		<description><![CDATA[Warning for people who landed here: this post is VERY OLD. It was written in the early days of struggling with OpsMgr 2007, and when nobody really knew how to do things. I found that this way was working &#8211; and it surely does &#8211; but what is described here is NOT the recommended way [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><span style="color: red;"><strong>Warning for people who landed here: this post is VERY OLD. It was written in the early days of struggling with OpsMgr 2007, and when nobody really knew how to do things.<br />
I found that this way was working &#8211; and it surely does &#8211; but what is described here is NOT the recommended way to do things nowadays. This post was only meant to fill in a gap I was feeling existed, back in 2007.<br />
But as time passes, and documentation gets written, knowledge improves.<br />
Therefore, I recommend you read the newly released Composition chapter of the MP Authoring Guide instead<br />
<a href="http://technet.microsoft.com/en-us/library/ff381321.aspx">http://technet.microsoft.com/en-us/library/ff381321.aspx</a> &#8211; and start building your custom modules to embed scripts as <a href="http://blogs.technet.com/brianwren">Brian Wren</a> describes in there, so that you can share them between multiple rules and monitors.</strong></span><br />
This said, below is the original post.</p>
<p><!--  .flickr-photo { border: solid 2px #000000; } .flickr-yourcomment { } .flickr-frame { text-align: left; padding: 3px; } .flickr-caption { font-size: 0.8em; margin-top: 0px; }  --></p>
<p class="flickr-frame"><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/492786198/"><img class="flickr-photo" src="http://farm1.static.flickr.com/221/492786198_d85d81a5b4.jpg" alt="Create a Script-Based Unit Monitor in OpsMgr2007 via the GUI" /></a><span class="flickr-caption"><a href="http://www.flickr.com/photos/dani3l3/492786198/"></a></span></p>
<p class="flickr-yourcomment">There is not a lot of documentation for System Center Operations Manager 2007 yet.<br />
It is coming, but there&#039;s a lot of things that changed since the previous release and I think some more would only help. Also, a lot of the content I am seeing is either too newbie-oriented or too developer-oriented, for some reason.</p>
<p>I have not yet seen a tutorial, webcast or anything that explains how to create a simple unit monitor that uses a VBS script using the GUI.</p>
<p>So this is how you do it:</p>
<p>Go to the <strong>&#034;Authoring&#034;</strong> space of OpsMgr 2007 Operations Console.<br />
Select the <strong>&#034;Management Pack objects&#034;</strong>, then <strong>&#034;Monitors&#034;</strong> node. Right click and choose <strong>&#034;Create a monitor&#034;</strong> -&gt; <strong>&#034;Unit Monitor&#034;</strong>.</p>
<p>You get the &#034;Create a monitor&#034; wizard open:<br />
<a href="http://www.flickr.com/photos/dani3l3/492786202/"><img src="http://farm1.static.flickr.com/202/492786202_861b4818fa.jpg" alt="wizard02" width="500" height="444" /></a></p>
<p>Choose to create a two-states unit monitor based on a script. Creating a three- state monitor would be pretty similar, but I&#039;ll show you the most simple one.<br />
Also, choose a Management pack that will contain your script and unit monitor, or create a new management pack.<br />
<a href="http://www.flickr.com/photos/dani3l3/492786204/"><img src="http://farm1.static.flickr.com/220/492786204_57fb878a47.jpg" alt="wizard03" width="500" height="444" /></a></p>
<p>Choose a &#034;monitor target&#034; (object classes or instances &#8211; see this webcast about targeting rules and monitors: <a href="http://www.microsoft.com/winme/0703/28666/Target_Monitoring_Edited.asx">www.microsoft.com/winme/0703/28666/Target_Monitoring_Edit&#8230;</a> ) and the aggregate rollup monitor you want to roll the state up to.</p>
<p>Choose a schedule, that is: how often would you like your script to run. For demonstration purposes I usually choose a very short interval such a two or three minutes. For production environments, tough, choose a longer time range.<br />
<a href="http://www.flickr.com/photos/dani3l3/492786208/"><img src="http://farm1.static.flickr.com/231/492786208_b48ef74259.jpg" alt="wizard04" width="500" height="444" /></a></p>
<p>Choose a name for your script, complete with a .VBS extension, and write the code of the script in the rich text box:<br />
<a href="http://www.flickr.com/photos/dani3l3/492786212/"><img src="http://farm1.static.flickr.com/196/492786212_60a675bdf5.jpg" alt="wizard05" width="500" height="444" /></a></p>
<p>As the sample code and comments suggest, you should use a script that checks for the stuff you want it to check, and returns a &#034;Property Bag&#034; that can be later interpreted by OpsMgr workflow to change the monitor&#039;s state.<br />
This is substantially different than scripting in MOM 2005, where you could only launch scripts as responses, loosing all control over their execution.</p>
<p>For demonstration purpose, use the following script code:<br />
<em> </em></p>
<p><em>On Error Resume Next<br />
Dim oAPI, oBag<br />
Set oAPI = CreateObject(&#034;MOM.ScriptAPI&#034;)<br />
Set oBag = oAPI.CreateTypedPropertyBag(StateDataType)<br />
Const FOR_APPENDING = 8<br />
strFileName = &#034;c:\testfolder\testfile.txt&#034;<br />
strContent = &#034;test &#034;<br />
Set objFS = CreateObject(&#034;Scripting.FileSystemObject&#034;)<br />
Set objTS = objFS.OpenTextFile(strFileName,FOR_APPENDING)<br />
If Err.Number &lt;&gt; 0 Then<br />
Call oBag.AddValue(&#034;State&#034;,&#034;BAD&#034;)<br />
Else<br />
Call oBag.AddValue(&#034;State&#034;,&#034;GOOD&#034;)<br />
objTS.Write strContent<br />
End If<br />
Call oAPI.Return(oBag)</em><em><br />
</em></p>
<p>[edited on 29th of May as <a href="http://ianblythmanagement.wordpress.com/2007/05/27/scripting-in-2007/">pointed out by Ian</a>: if you cut and paste the example script you might need to change the apostrophes (“) as that causes the script to fail when run - it is an issue with the template of this blog.] [edited on 30th of May: I fixed the blog so that now post content shows just plain, normal double quotes instead than fancy ones. It seems like a useful thing when from time to time I post code...]</p>
<p>The script will try to write into the file c:\testfolder\testfile.txt.<br />
If it finds the file and manages to write (append text) to it, it will return the property &#034;State&#034; with a value of &#034;GOOD&#034;.<br />
If it fails (for example if the file does not exist), it will return the property &#034;State&#034; with a value of &#034;BAD&#034;.</p>
<p>In MOM 2005 you could only let script generate Events or Alerts directly as a mean to communicate their results back to the monitoring engine. In OpsMgr 2007 you can let your script spit out a property bag and then continue the monitoring workflow and decide what to do depending on the script&#039;s result.</p>
<p><a href="http://www.flickr.com/photos/dani3l3/492786214/"><img src="http://farm1.static.flickr.com/225/492786214_96af0cc463.jpg" alt="wizard06" width="500" height="444" /></a></p>
<p>So the next step is to go and check for the value of the property we return in the property bag, to determine which status the monitor will have to assume.</p>
<p>We use the syntax <strong>Property[@Name='State']</strong> in the parameter field, and we search for a content that means an unhealthy condition:</p>
<p><a href="http://www.flickr.com/photos/dani3l3/492787088/"><img src="http://farm1.static.flickr.com/217/492787088_3b3107fb59.jpg" alt="wizard07" width="500" height="444" /></a></p>
<p>Or for the healty one:<br />
<a href="http://www.flickr.com/photos/dani3l3/492787092/"><img src="http://farm1.static.flickr.com/207/492787092_a8559eecf5.jpg" alt="wizard08" width="500" height="444" /></a></p>
<p>Then we decide which status will the monitor have to assume in the healty and unhealty conditions (Green/Yellow or Green/Red usually)<br />
<a href="http://www.flickr.com/photos/dani3l3/492787094/"><img src="http://farm1.static.flickr.com/223/492787094_fac28573d3.jpg" alt="wizard09" width="500" height="444" /></a></p>
<p>Optionally, we can decide to raise an Alert when the status changes to unhealthy, and close it again when it goes back to healty.</p>
<p><a href="http://www.flickr.com/photos/dani3l3/492787098/"><img src="http://farm1.static.flickr.com/194/492787098_72d6ad227f.jpg" alt="wizard10" width="500" height="444" /></a></p>
<p>Now our unit monitor is done.<br />
All we have to do is waiting it gets pushed down to the agent(s) that should execute it, and wait for its status to change.<br />
In fact it should go to the unhealthy state first.<br />
To test that it works, just create the text file it will be searching for, and wait for it to run again, and the state should be reset to Healthy.</p>
<p>Have fun with more complex scripts!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/10/create-a-script-based-unit-monitor-in-opsmgr2007-via-the-gui/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
<enclosure url="http://www.microsoft.com/winme/0703/28666/Target_Monitoring_Edited.asx" length="126" type="video/x-ms-asf" />
		</item>
		<item>
		<title>Ancient and Modern (aka &quot;Digital Printouts&quot; and Writing Secure Systems)</title>
		<link>http://www.muscetta.com/2007/05/05/ancient-and-modern-aka-digital-printouts-and-writing-secure-systems/</link>
		<comments>http://www.muscetta.com/2007/05/05/ancient-and-modern-aka-digital-printouts-and-writing-secure-systems/#comments</comments>
		<pubDate>Sat, 05 May 2007 13:02:31 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Funny]]></category>
		<category><![CDATA[Places]]></category>
		<category><![CDATA[Risk]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/05/ancient-and-modern-aka-digital-printouts-and-writing-secure-systems/</guid>
		<description><![CDATA[Digital Printouts. I often find it funny to use the old reflex camera with films, but I mostly use it as if it was a digital one: I make many shots, some are good some are bad &#8211; I don&#039;t bother printing them, I just let it develop and I scan the pictures I like [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<style type="text/css">    .flickr-photo { border: solid 2px #000000; }  .flickr-yourcomment { }  .flickr-frame { text-align: left; padding: 3px; }  .flickr-caption { font-size: 0.8em; margin-top: 0px; }</style>
<p class="flickr-frame"><a href="http://www.flickr.com/photos/dani3l3/484909653/" title="photo sharing"><img src="http://farm1.static.flickr.com/200/484909653_bcaeb023f5.jpg" alt="Ancient and Modern (aka " class="flickr-photo" /></a></p>
<p class="flickr-yourcomment">Digital Printouts.<br />
I often find it funny to use the old reflex camera with films, but I mostly use it as if it was a digital one: I make many shots, some are good some are bad &#8211; I don&#039;t bother printing them, I just let it develop and I scan the pictures I like from the film (several ones are even posted here this way).<br />
I have even been talking about this with fellow flickerer&#039;s: <a href="http://www.flickr.com/groups/romamor/discuss/72157600009019234/page3/">www.flickr.com/groups/romamor/discuss/72157600009019234/p&#8230;</a></p>
<p>On the opposite, it often happens that I want to print some photos made with the digital camera. So I take them to the shop on the Compact Flash, or more often on a USB pen drive.</p>
<p>Today, tough, something strange happened: the machine they use to print digital photos (some very big professional system for printing on photographic paper with a proprietary application which manages it) hanged while it was trying to load <a href="http://www.flickr.com/photos/dani3l3/357028635">this one photo</a> which was on the USB pendrive.</p>
<p>The guy at the shop got panicked: he said a week earlier a guy got the machine infected with a Virus through his USB pen, and he had to stop working for three days, spend a lot of money to get the system reinstalled&#8230;</p>
<p>I tried to tell him to close the application but he did not even get what I was talking about. He was saying that the system was not responsive&#8230; I was pretty sure the system WAS responsive, it was just the APPLICATION which was hanging, and since it looked like an NT-based system I tried to guide him through CTRL+ALT+DEL, to start &#034;Task Manager&#034;, kill the application (this whole procedure took several minutes, and I had to show him which keys I was talking about as he was abel to find &#034;ALT&#034; but he had never hear of CTRL, left alone &#034;DEL&#034;). It was a Windows2000 Professional&#8230; so I wondered how did he logged in if he did not know that key combination&#8230;.. I asked how did he get in when he started the machine&#8230;. &#034;it opens automatically&#034; he said. I see. I though it must be configured for autologon then. After killing the application he asked &#034;how do I get out of this now??&#034; &#034;This&#034; being Windows Explorer&#8230; I mean, the desktop. I pulled out my USB pendrive he was afraid of, I helped him reboot. He was nervous and he said it took much longer than normal to start up (I don&#039;t believe ONE word of it, it just took much less time than my laptop with Vista takes to start up&#8230; but he was worried and that makes one anxious and makes time flow slower). He was afraid and nervous that the &#034;thing&#034; could have been broken somehow by trying to load a JPEG&#8230;<br />
NOTHING made him confident about me: I tried to reassure him I am an IT Professional, that I work for Microsoft (unfortunately I did not have my business cards with me today, that would have probably helped!), that I put my hands on much more complex and &#034;missioncritical&#034; systems, that I would not bring him any virus whatsoever and I am paranoid about computer security&#8230;<br />
Nothing. Nothing worked to re-assure him that there wasn&#039;t anything to worry about my pen&#8230;</p>
<p>While the machine started I saw it doing <a href="http://support.microsoft.com/kb/315231">AutoAdminLogon</a> with Administrator&#8230; with a password of TWO characters.<br />
Oh my god!<br />
Then he wonders that he gets viruses from strangers. He runs as Administrator all the time!!!</p>
<p>But then I though and asked&#8230; &#034;is there maybe a LIMIT on the SIZE of the file?&#034;. &#034;Of course there is!&#034;.<br />
Right.</p>
<p>Since the photo I wanted to print is actually a composition made of two photos pasted together, and each of the original was a 8 Megapixel photo, the resulting is a 16 Megapixel picture, a JPG file of roughly 8 megabytes in size. Well, this days it isn&#039;t much anyway. We nearly have cameras which produce files with that high resolution&#8230;<br />
..but if THAT application has a limit&#8230; WHY on earth doesn&#039;t it CHECK for the bloody SIZE of the file BEFORE trying to load it ?</p>
<p><strong>I mean, those are professional systems which &#8211; he said &#8211; cost around 150 THOUSAND of Euros&#8230; which they let run with an application which does NOT do any input checking/validation, runs the whole time as Administrator&#8230; while letting people bring in their own CD-ROMs, USB pens, flash memory cards&#8230;.<br />
and they expect it to be safe?</strong></p>
<p>Now the guy was panicked and wouldn&#039;t let me plug my pen in the machine again.</p>
<p>Then he&#039;s keeping his shop closed in the afternoon since it is saturday, and I need that photo (and other ones) printed for tomorrow, because tomorrow it is my grandad&#039;s 91st birthday and I wanted to bring them printed for him and framed as a present!</p>
<p>Morale: I have to find another place to print them in the afternoon, in a rush, because some company sells print systems which are written like crap, which need to run as Administrator and won&#039;t do any input validation in their code. This is one of those situations where a design flaw matters.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/05/ancient-and-modern-aka-digital-printouts-and-writing-secure-systems/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress.Net</title>
		<link>http://www.muscetta.com/2007/05/01/wordpressnet/</link>
		<comments>http://www.muscetta.com/2007/05/01/wordpressnet/#comments</comments>
		<pubDate>Tue, 01 May 2007 08:14:41 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/01/wordpressnet/</guid>
		<description><![CDATA[WordPress.Net, uploaded by Daniele Muscetta on Flickr. It has been quite a while that I wanted to experiment a bit more with ASP.Net but I don&#039;t have a windows machine on the internet. Not one that performs enough anyway. My server runs linux. I have had mono running on it for a while, but its [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><!-- .flickr-photo { border: solid 2px #000000; } .flickr-yourcomment { } .flickr-frame { text-align: left; padding: 3px; } .flickr-caption { font-size: 0.8em; margin-top: 0px; } --></p>
<div class="flickr-frame"><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/479584212/"><img class="flickr-photo" src="http://farm1.static.flickr.com/222/479584212_c5acb5300c.jpg" alt="WordPress.Net" /></a></p>
<p><span class="flickr-caption"><a href="http://www.flickr.com/photos/dani3l3/479584212/">WordPress.Net</a>, uploaded by <a href="http://www.flickr.com/people/dani3l3/">Daniele Muscetta</a> on Flickr.</span></p>
</div>
<p class="flickr-yourcomment">It has been quite a while that I wanted to experiment a bit more with <a href="http://www.asp.net">ASP.Net</a> but I don&#039;t have a windows machine on the internet. Not one that performs enough anyway. My server runs linux. I have had <a href="http://www.mono-project.com">mono</a> running on it for a while, but its support was not complete with the <a href="http://www.debian.org/releases/sarge">old release of Debian</a>, so part of my mono and mod_mono installation were a custom compile and they were breaking from time to time, each time some library got updated. So I did run a &#034;Hello World&#034; page with it, but nothing more, because it was a bit of a mess to mantain and, moreover, because I had not yet figured out how to have it connect with mysql instead than with MS SQL Server.<br />
Also, I did not have any real project or idea to implement in my mind.</p>
<p>Now that I have upgraded to <a href="http://www.debian.org/releases/etch">Debian Etch</a>, mono support seems to be much more out-of-the-box and stable on this release. I also got an idea of what to do with it, so I finally gave it a try.</p>
<p>As a starter, I am trying to re-publish my blog, historically running at <a href="http://www.muscetta.com">www.muscetta.com</a>, on my other <a href="http://www.muscetta.net">muscetta.NET</a> domain (it makes sense to use a .NET domain, right?). But this is not a new site, it is a republish of the same content, but done using C# &#8211; just pointing at the same wordpress&#039; mysql database. Connection to MySQL is done with <a href="http://dev.mysql.com/doc/refman/5.1/en/connector-net-ref-mysqlclient.html">MySql.Data (the ADO.Net driver for MySQL)</a>.</p>
<p>I still need to implement a lot of things/features, such as comment posting (you can only read them now), some layout/styling/framing to make it look nicer, some sidebar/blogroll, feeds, and a many other things. I am not aiming at a complete rewrite (for example I won&#039;t do an administrative interface or a webservice so far), but just a republish/frontend to the visitors.<br />
I don&#039;t know when I will have time to continue writing it, but all in all I am glad it works so far, and I had fun doing it.</p>
<p>Writing ASP.Net for mono on linux in the absence of Frontpage server extentions and WebDAV and the remote debugger is proving slightly more challenging than just dragging and dropping controls in Visual Studio and let it do a lot of work with you. You have to write the code, upload it, and see if it works. No debugging, no intellisense. Just the hard old way of trial and error, which makes development slower, but you learn a hell of a lot more that way. Of course you need  to keep the <a href="http://msdn2.microsoft.com/en-us/Library">MSDN library</a> handly <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>[Edit of December 2009 - I killed the above experiment. I had fun doing it, but there is not time for all, it needs a lot of work to keep it running/update it with every wordpress update, and mod_mono is wasting too many resources on the server.]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/01/wordpressnet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Everybody loves T-Shirts, Etch.</title>
		<link>http://www.muscetta.com/2007/04/14/everybody-loves-t-shirts-etch/</link>
		<comments>http://www.muscetta.com/2007/04/14/everybody-loves-t-shirts-etch/#comments</comments>
		<pubDate>Sat, 14 Apr 2007 18:29:22 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/04/14/everybody-loves-t-shirts-etch/</guid>
		<description><![CDATA[An old photo of Joshua in his Debian T-Shirt has been used (with permission) by Holger Levsen in his presentation of http://www.debian-community.org/ given at FOSDEM 2007. You can check out the slides here: http://layer-acht.org/slides/20070225-debian-community.org-prelaunch.pdf and download a video here: http://meetings-archive.debian.net/pub/debian-meetings/2007/fosdem/ And yes, I feel very &#034;debiany&#034; today. In fact I just finished upgrading my server [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>An old photo of Joshua in his Debian T-Shirt has been used (with permission) by Holger Levsen in his presentation of <a href="http://www.debian-community.org/">http://www.debian-community.org/</a> given at FOSDEM 2007.<br />
You can check out the slides here: <a href="http://layer-acht.org/slides/20070225-debian-community.org-prelaunch.pdf">http://layer-acht.org/slides/20070225-debian-community.org-prelaunch.pdf</a><br />
and download a video here: <a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/fosdem/">http://meetings-archive.debian.net/pub/debian-meetings/2007/fosdem/</a></p>
<p>And yes, I feel very &#034;debiany&#034; today. In fact I just finished upgrading my server from <a href="http://www.debian.org/releases/sarge/">Sarge</a> to <a href="http://www.debian.org/releases/etch/">Etch</a> and it went very smoothly, even if I had to reconfigure / migrate some settings &#8211; for example moving all the virtual server configuration from Apache 1.3 to 2.x &#8230; but it was about time for me to move my ass off 1.3! Among other things I am quite glad now I can use mod_mono and have it update with apt-get, instead than having my own compiled version with all sort of broken dependencies&#8230; also, it performs better &#8211; faster, and takes up the same amount of resources, which I would not have believed and I was in fact slightly concerned about. Nothing to be worried about, it turns out.</p>
<p>Some other guy was pointing me out today all the other improvements in the desktop-feature-space. I would not know, I am a runlevel-2 guy when it comes to linux.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/04/14/everybody-loves-t-shirts-etch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MOM 2005 Alerts to RSS feed</title>
		<link>http://www.muscetta.com/2007/03/22/mom-2005-alerts-to-rss-feed/</link>
		<comments>http://www.muscetta.com/2007/03/22/mom-2005-alerts-to-rss-feed/#comments</comments>
		<pubDate>Thu, 22 Mar 2007 18:07:00 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[MOM2005]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/03/22/mom-2005-alerts-to-rss-feed/</guid>
		<description><![CDATA[I am an RSS Addict, you know that.So I wanted an RSS Feed to show MOM Alerts. I have been thinking of it for a while, last year (or was it the year before?). It seemed like a logical thing to me: alerts are created (and can be resolved &#8211; that is, expire), generally get [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I am an RSS Addict, you know that.So I wanted an RSS Feed to show MOM Alerts. I have been thinking of it for a while, last year (or was it the year before?).<br />
It seemed like a logical thing to me: alerts are created (and can be resolved &#8211; that is, expire), generally get sorted by the date and the time when they have been created, the look pretty much like a list. Also, many people like to receive mail notification when new alerts are generated.<br />
So, if the alert can be sent to you (push), you could also get to it(pull).<br />
Pretty much the same deal with receiving a mail or reading a newsgroup, or syndicating a feed.</p>
<p>At the time I looked around but it seemed like no one had something like this already done.<br />
So I wrote a very simple RSS feed generator for MOM Alerts.<br />
I did it quite an amount of time ago, just as an exercise.<br />
Then, after a while, I figured out that the <a href="http://www.microsoft.com/technet/mom/2005/downloads/tools/reskit.mspx">MOM 2005 Resource Kit</a> had been updated to include such a utility!</p>
<p>Wow, I thought, they finally added what I have been thinking for a while. Might it be because I mentioned it on an private Mailing list ? Maybe. Maybe not. Who cares. Of course, if it is included in the resource kit it must be way cooler than the one I made, I though.<br />
I really thought something along these lines, but never actually had the time to try it out.<br />
I think I just sort of assumed it must have been cooler than the one I made, since it was part of an official package, while I am not a developer. So I basically forgot about the one I wrote, dismissing it as being crap without looking too much into it anymore.<br />
Until today.<br />
Today I actually tried to use the alert to RSS tool included in the resource kit, because a customer asked if there was any other way to get notified, other than receiving notification or using the console (or the console notifier).<br />
So I looked at the resource kit&#039;s Alert-to-RSS Utility.<br />
My experience with it:<br />
1) it is provided in source code form &#8211; which is ok if it was ALSO provided as source. Instead it is ONLY provided as source, and most admins don&#039;t have Visual Studio installed or don&#039;t know how to compile from the command line;<br />
2) Even when they wanted to compile it, it includes a bug which makes it impossible to compile &#8211; solution <a href="http://groups.google.it/group/microsoft.public.mom/browse_thread/thread/79257d4472479fe0/2c21222bb33cb163?lnk=st&#038;q=MOM+Alert+RSS&#038;rnum=1#2c21222bb33cb163">in this newsgroup discussion</a>;<br />
3) if you don&#039;t want to mess about with code since you are using a resource Kit tool (as opposed to something present in the SDK) you can even get it already compiled by someone from somewhere on the net, but that choice is about trust.</p>
<p>Anyway, one way or another, after it is finally set up&#8230;. surprise surprise!!!<br />
It does NOT show a LIST of alerts (as I was expecting).<br />
It shows a summary of how many alerts you have. basically it is an RSS feed made of a single item, and this single item tells you how many alerts you have. What is one supposed to do with such a SUMMARY? IMHO, it is useless the way it is. It is even worse than one of those feed that only contains the excerpt of the article, rather than the full article.<br />
Knowing that I have 7 critical errors and 5 warning without actually knowing ANYTHING of them is pointless.<br />
It might be useful for a manager, but not for a sysadmin, at least.</p>
<p>So I thought my version, even if coded crap, might be useful to someone because it gives you a list of alerts (those that are not resolved) and each one of them tells you the description of the alert, the machine tat generated it, and includes links to the actual alert in the web console, so you can click, go there, and start troubleshooting from within your aggregator!<br />
My code does this. Anyway, since I am a crap coder, since I wrote it in only fifteen minutes more than a year ago, and since I don&#039;t have time to fix it and make it nicer&#8230; it has several issues, and could be improved in a million ways, in particular for the following aspects:</p>
<ol>
<li>is currently depends on the SDK Database views &#8211; it could use the MOM Server API&#039;s or the webservice instead;</li>
<li>it uses SQL Security to connect to the DB &#8211; by default MOM does not allow this &#8211; it is suggested for the SQL instance hosting &#034;OnePoint&#034; to only use Windows Integrated Authentication.. so to make my code work you have to switch back to Mixed mode, and create a login in SQL that has permission to read the database. This is due to the fact that I&#039;ve coded this in five minutes and I don&#039;t know how to use delegation &#8211; if I was able to use delegation, I would&#8230; so that the end user accessing IIS would be the one connecting to the DB. If anybody wants to teach me how to do this, I will be most grateful.</li>
<li>it could accept parameters as URL variables, so to filter out only events for a specific machine, or a specific resolution state, etc etc</li>
<li>At present it uses <a href="http://rss-net.sourceforge.net/">RSS.Net</a> to generate the feed. It could made independent from it, but I don&#039;t really see why, and I quite like that library.</li>
</ol>
<p>The code is just an ASP.Net page and its codebehind, no need to compile, but of course you need to change a couple of lines to match your webconsole address.<br />
Also, you need to get <a href="http://rss-net.sourceforge.net/">RSS.NET</a> and copy its library (RSS.Net.dll) in the /bin subfolder of the website directory where you place the RSSFeed generator page. I see that I wrote this with version 0.86, but any version should do, really.</p>
<p>Here is what it will look like:</p>
<p><a title="Photo Sharing" href="http://www.flickr.com/photo_zoom.gne?id=430556283&#038;size=o"><img width="500" height="375" alt="AlertToRSS" src="http://farm1.static.flickr.com/173/430556283_6eb615a080.jpg" /></a></p>
<p>And here&#039;s the code of the page (two files):</p>
<p><strong>Default.aspx</strong></p>
<p>&lt;%@ Page Language=&#034;C#&#034; AutoEventWireup=&#034;true&#034; CodeFile=&#034;Default.aspx.cs&#034; Inherits=&#034;_Default&#034; %&gt;</p>
<p><strong>Default.aspx.cs</strong></p>
<p>using System;<br />
using System.Data;<br />
using System.Data.SqlClient;<br />
using System.Configuration;<br />
using System.Web;<br />
using Rss;</p>
<p>public partial class _Default : System.Web.UI.Page<br />
{<br />
protected void Page_Load(object sender, EventArgs e)<br />
{<br />
string webconsoleaddress = &#034;<a href="http://192.168.0.222:1272/AlertDetail.aspx?v=a&#038;sid=">http://192.168.0.222:1272/AlertDetail.aspx?v=a&#038;sid=&#034;</a> // must change to match your address</p>
<p>// Inizializza il Feed<br />
RssChannel rssChannel = new RssChannel();<br />
rssChannel.Title = &#034;MOM Alerts&#034;<br />
rssChannel.PubDate = DateTime.Now;<br />
rssChannel.Link = new Uri(&#034;<a href="http://192.168.0.222:1272/rss/">http://192.168.0.222:1272/rss/&#034;);</a> // must change to match your address<br />
rssChannel.LastBuildDate = DateTime.Now;<br />
rssChannel.Description = &#034;Contains the latest Alerts&#034;</p>
<p>// query &#8211; you might want to change the severity<br />
string mySelectQuery = &#034;SELECT ComputerName, Name, Severity, TimeRaised, RepeatCount, GUID FROM dbo.SDKAlertView WHERE Severity &gt; 10 AND ResolutionState &lt; 255&#034;</p>
<p>// SQL Connection – must change SQL server, user name and password<br />
SqlConnection conn = new SqlConnection(&#034;Data Source=192.168.0.222;Initial Catalog=OnePoint;User ID=rss;Password=rss&#034;);<br />
SqlDataReader rdr = null;</p>
<p>try<br />
{<br />
conn.Open();<br />
SqlCommand cmd = new SqlCommand(mySelectQuery, conn);<br />
rdr = cmd.ExecuteReader();<br />
while (rdr.Read())<br />
{<br />
RssItem rssItem = new RssItem();<br />
string titleField = rdr[1].ToString();<br />
rssItem.Title = titleField;<br />
string url = webconsoleaddress + rdr[5];<br />
rssItem.Link = new Uri(url.ToString());<br />
string description = &#034;&lt;![CDATA[ &lt;p&gt;&lt;a xhref=\"" + rssItem.Link + "\"&gt;" + rdr[1] + &#034; &lt;/a&gt;&lt;/p&gt;&lt;br&gt;&#034; + &#034;&lt;br&gt;Computer: &#034; + rdr[0] + &#034;&lt;br&gt;Repeat Count: &#034; + rdr[4] + &#034;&lt;BR&gt;Original ALert Time: &#034; + rdr[3];<br />
rssItem.Description = description;<br />
rssChannel.Items.Add(rssItem);<br />
}</p>
<p>// Finalizza il feed<br />
RssFeed rssFeed = new RssFeed();<br />
rssFeed.Channels.Add(rssChannel);<br />
Response.ContentType = &#034;text/xml&#034;<br />
Response.ExpiresAbsolute = DateTime.MinValue;<br />
rssFeed.Write(Response.OutputStream);<br />
}<br />
finally<br />
{<br />
if (rdr != null)<br />
{<br />
rdr.Close();<br />
}</p>
<p>if (conn != null)<br />
{<br />
conn.Close();<br />
}<br />
}<br />
}<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/03/22/mom-2005-alerts-to-rss-feed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Phrogram &#8211; Kids Programming Language</title>
		<link>http://www.muscetta.com/2007/02/25/phrogram-kids-programming-language/</link>
		<comments>http://www.muscetta.com/2007/02/25/phrogram-kids-programming-language/#comments</comments>
		<pubDate>Sun, 25 Feb 2007 20:11:03 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/02/25/phrogram-kids-programming-language/</guid>
		<description><![CDATA[It was since the old times of LOGO that I did not see an effort to bring kids closer to computer programming. This is what makes Phrogram (previously called KPL &#8211; kids&#039; Programming Language) unique today. On the KPL site you can also read that &#034;KPL isn&#039;t just for kids any more&#034;. This means it [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>It was since the old times of <a title="LOGO" href="http://el.media.mit.edu/Logo-foundation/logo/index.html">LOGO</a> that I did not see an effort to bring kids closer to computer programming. This is what makes <a title="Phrogran" href="http://phrogram.com/">Phrogram</a> (previously called <a href="http://www.kidsprogramminglanguage.com/">KPL &#8211; kids&#039; Programming Language</a>) unique today. On the KPL site you can also read that &#034;KPL isn&#039;t just for kids any more&#034;. This means it has evolved and it is now as complete as a programming language as one of the many other you can choose among to create your full-blown applications and games.</p>
<p>Anyhow, this means that people <strong>might</strong> choose it because it is easy and straightforward to build up complex programs (especially games), but it also still primarly is a very attractive tool to teach the youngest generations how does programming work.</p>
<p>I learned the very basics of programming&#8230; in BASIC ,in fact, on my first Commodore64. What does a kid try to do ? Write a game. I also did. It was painful back then when you had to use instructions such as PEEK and POKE to &#034;draw&#034; the bitmaps making up your sprites and let them move by moving those bits around&#8230; at the elementary school it wasn&#039;t exactly crystal clear to me why did it work, and how. I actually had my issues with much simpler stuff, like figuring out what on earth a multi-dimensional array was, and stuff like that. LOGO simplified all of that, as you finally could just draw on your computer by moving the Turte simply asking her to move back, forward, right, left, and so on&#8230;</p>
<p>Of course twenty years have passed, CPU capacity has massively improved, object oriented programming has become mainstream&#8230;.. so that now, with KPL/Phrogram you can write a real Arcade videogame that uses DirectX 3D graphics with just a bunch of lines of code! This absolutely ROCKS!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/02/25/phrogram-kids-programming-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Out-Flickr!!</title>
		<link>http://www.muscetta.com/2007/01/10/out-flickr/</link>
		<comments>http://www.muscetta.com/2007/01/10/out-flickr/#comments</comments>
		<pubDate>Wed, 10 Jan 2007 15:02:28 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Live]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/01/10/out-flickr/</guid>
		<description><![CDATA[This is soooo cool! An &#034;Out-Flickr&#034; script for PowerShell: http://abhishek225.spaces.live.com/blog/cns!13469C7B7CE6E911!285.entry<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>This is soooo cool! An &#034;Out-Flickr&#034; script for PowerShell:</p>
<p><a href="http://abhishek225.spaces.live.com/blog/cns!13469C7B7CE6E911!285.entry">http://abhishek225.spaces.live.com/blog/cns!13469C7B7CE6E911!285.entry</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/01/10/out-flickr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Out-Blog!</title>
		<link>http://www.muscetta.com/2006/11/24/out-blog/</link>
		<comments>http://www.muscetta.com/2006/11/24/out-blog/#comments</comments>
		<pubDate>Fri, 24 Nov 2006 11:21:19 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2006/11/24/out-blog/</guid>
		<description><![CDATA[[Edited again 25th November -&#160;Jachym gave me some suggestions and insights on the use of parameters, and I slightly changed/fixed the original code I had posted yesterday. There&#160;are still some more things that could be improved, of course, but I'll leave them to the future, next time I'll have time fot it (who knows when [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><span style="color: black">[Edited again 25th November -&nbsp;<a href="http://blog.vyvojar.cz/jachymko/">Jachym</a> gave me some suggestions and insights on the use of parameters, and I slightly changed/fixed the original code I had posted yesterday. There&nbsp;are still some more things that could be improved, of course, but I'll leave them to the future, next time I'll have time fot it (who knows when that will be?)]</span></p>
<p><span style="color: black">This one is a post regarding my first test writing a cmdlet for PowerShell. After a few days since having change my blog&#039;s title to <strong><em>&#034;$daniele.rant | Out-Blog&#034;</em></strong> (where Out-Blog was a fantasy cmdlet name, and the title just meant to mimick PowerShell syntax in a funny way), I stumbled across this wonderful blog post: </span><span style="color: #669966; text-decoration: underline"><a href="http://blog.boschin.it/archive/2006/09/21/4375.aspx">http://blog.boschin.it/archive/2006/09/21/4375.aspx</a></span>&nbsp;<span style="color: black">that describes how to use the assemblies of &#034;Windows Live Writer&#034;. Then I saw the light: I could actually implement an &#034;Out-Blog&#034; cmdlet. I am not sure what this could be useful for&#8230; but I thought it was funny to experiment with. I followed the HOW TO information on this other blog post to guide me through the coding: </span><span style="color: #669966; text-decoration: underline"><a href="http://www.proudlyserving.com/archives/2005/10/lets_all_write_1.html">http://www.proudlyserving.com/archives/2005/10/lets_all_write_1.html</a></span></p>
<p><span style="color: #669966; text-decoration: underline"></span><span style="font-size: 10pt">The result is the&nbsp;</span><span style="font-size: 10pt; color: black">code that follows. you see is pretty much Boschin&#039;s code wrapped into a cmdlet class. Nothing fancy. Just a&nbsp;test. I thought someone might find it interesting. It is provided &#034;AS IS&#034;, mainly for educational purpose (MINE, only&nbsp;mine&#8230;. I&#039;m the one whose education is being improved, not you <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )</span></p>
<p><span style="font-size: 10pt; font-family: trebuchet ms"></span></p>
<p><img src="http://static.flickr.com/119/304859662_fa52bac956.jpg"/>&nbsp;</p>
<p>&nbsp;</p>
</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> System; </p>
<p><span style="color: blue">using</span> System.Collections.Generic; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> System.Text; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> System.Management.Automation; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> WindowsLive.Writer.BlogClient.Clients; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> WindowsLive.Writer.BlogClient; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> WindowsLive.Writer.CoreServices; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> WindowsLive.Writer.CoreServices.Settings; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> WindowsLive.Writer.Extensibility.BlogClient; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> Microsoft.Win32; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">namespace</span> LiveWriterCmdlet </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Cmdlet</span>(<span style="color: maroon">"out"</span>, <span style="color: maroon">"blog"</span>, SupportsShouldProcess=<span style="color: blue">true</span>)] </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">sealed</span> <span style="color: blue">class</span> <span style="color: teal">OutBlogCmdlet</span> : <span style="color: teal">Cmdlet </span></p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 0, Mandatory = <span style="color: blue">true</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> Title </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _title; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _title = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _title; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position=1,Mandatory=<span style="color: blue">true</span>,ValueFromPipeline=<span style="color: blue">true</span>,ValueFromPipelineByPropertyName=<span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> Text </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _text; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _text = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _text; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 2, Mandatory = <span style="color: blue">true</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> BlogApiEndPoint </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _blogapiendpoint; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _blogapiendpoint = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _blogapiendpoint; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 3, Mandatory = <span style="color: blue">true</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> UserName </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _username; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _username = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _username; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 4, Mandatory = <span style="color: blue">true</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> Password </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _password; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _password = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _password; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 6, Mandatory = <span style="color: blue">false</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> ProxyAddress </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _proxyaddress; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _proxyaddress = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _proxyaddress; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 7, Mandatory = <span style="color: blue">false</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">int</span> ProxyPort </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _proxyport; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _proxyport = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">int</span> _proxyport; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 8, Mandatory = <span style="color: blue">false</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> ProxyUserName </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _proxyusername; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _proxyusername = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _proxyusername; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 9, Mandatory = <span style="color: blue">false</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> ProxyPassword </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _proxypassword; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _proxypassword = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _proxypassword; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 10, Mandatory = <span style="color: blue">false</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: teal">SwitchParameter</span> Published </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _published; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _published = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">bool</span> _published; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">protected</span> <span style="color: blue">override</span> <span style="color: blue">void</span> BeginProcessing() </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">base</span>.BeginProcessing(); </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">ApplicationEnvironment</span>.Initialize(); </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">if</span> ((ProxyAddress != <span style="color: blue">null</span>) | (ProxyAddress != <span style="color: maroon">&#034;&#034;</span>)) </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">WebProxySettings</span>.ProxyEnabled = <span style="color: blue">true</span>; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">WebProxySettings</span>.Hostname = ProxyAddress; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">WebProxySettings</span>.Port = ProxyPort; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">WebProxySettings</span>.Username = ProxyUserName; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">WebProxySettings</span>.Password = ProxyPassword; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">else</span> </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">WebProxySettings</span>.ProxyEnabled = <span style="color: blue">false</span>; </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">protected</span> <span style="color: blue">override</span> <span style="color: blue">void</span> ProcessRecord() </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">if</span> (ShouldProcess(Text)) </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">ISettingsPersister</span> persister = <span style="color: blue">new</span> <span style="color: teal">RegistrySettingsPersister</span>(<span style="color: teal">Registry</span>.CurrentUser, <span style="color: maroon">@&#034;Software\Windows Live Writer&#034;</span>); </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">IBlogCredentials</span> credentials = <span style="color: blue">new</span> <span style="color: teal">BlogCredentials</span>(<span style="color: blue">new</span> <span style="color: teal">SettingsPersisterHelper</span>(persister)); </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">IBlogCredentialsAccessor</span> credentialsAccessor = <span style="color: blue">new</span> <span style="color: teal">BlogCredentialsAccessor</span>(<span style="color: maroon">&#034;dummy-value&#034;</span>, credentials); </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">credentials.Username = UserName; </span></p>
<p><span style="font-size: 10pt; font-family: courier new">credentials.Password = Password; </span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">MovableTypeClient</span> client = <span style="color: blue">new</span> <span style="color: teal">MovableTypeClient</span>(<span style="color: blue">new</span> <span style="color: teal">Uri</span>(BlogApiEndPoint), credentialsAccessor, <span style="color: teal">PostFormatOptions</span>.Unknown); </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">BlogPost</span> MyPost = <span style="color: blue">new</span> <span style="color: teal">BlogPost</span>(); </p>
<p><span style="font-size: 10pt; font-family: courier new">MyPost.Title = Title; </span></p>
<p><span style="font-size: 10pt; font-family: courier new">MyPost.Contents = Text; </span></p>
<p><span style="font-size: 10pt; font-family: courier new">client.NewPost(</span><span style="color: maroon">&#034;dummy-value&#034;</span>, MyPost, Published); </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">WriteVerbose(</span><span style="color: maroon">&#034;Posted Successfully.&#034;</span>); </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2006/11/24/out-blog/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Upgraded to WordPress 2</title>
		<link>http://www.muscetta.com/2006/11/20/upgraded-to-wordpress-2/</link>
		<comments>http://www.muscetta.com/2006/11/20/upgraded-to-wordpress-2/#comments</comments>
		<pubDate>Mon, 20 Nov 2006 20:49:49 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2006/11/20/upgraded-to-wordpress-2/</guid>
		<description><![CDATA[It was a snap. I thought it would be much worse. My bad. It was very easy. As soon as I have some more time I need to try with another blog I manage &#8211; now that one has several plugins and several hacks I did to the code myself and it might result trickier&#8230;. [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>It was a snap. I thought it would be much worse. My bad. It was very easy.<br />
As soon as I have some more time I need to try with another blog I manage &#8211; now that one has several plugins and several hacks I did to the code myself and it might result trickier&#8230;. let&#039;s see. Maybe I am worrying for nothing (it would not be unusual).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2006/11/20/upgraded-to-wordpress-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google has pissed me off this week!</title>
		<link>http://www.muscetta.com/2006/10/07/google-has-pissed-me-off-this-week/</link>
		<comments>http://www.muscetta.com/2006/10/07/google-has-pissed-me-off-this-week/#comments</comments>
		<pubDate>Sat, 07 Oct 2006 08:05:16 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[GMail]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Hotmail]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Risk]]></category>
		<category><![CDATA[SPAM]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=142</guid>
		<description><![CDATA[Now I pretty much liked GMail and Google in general. But this time they REALLY pissed me off! I will tell you that I am not a google-hater even if I work for a competing company. Of course not everything that Google does is wonderful, but some of their services are really cool and useful [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Now I pretty much liked GMail and Google in general. But this time they REALLY pissed me off! I will tell you that I am not a google-hater even if I work for a competing company. Of course not everything that Google does is wonderful, but some of their services are really cool and useful and I have never denied to say they rocked when I felt they did. <br />In general, people seem to love them, and their stock value shows it (with the launch of &#034;Code Search&#034; this week <a href="http://asert.arbornetworks.com/2006/10/static-code-analysis-using-google-code-search/">they made a lot of people scream &#034;how cool is this&#034;</a> so that they got back from&nbsp;just under 400&nbsp;dollars to 417!). But that&#039;s not the issue. That is cool, that works. It&#039;s ok they make money if they make cool tools. It&#039;s fine for me. </p>
<p>In fact i consider GMail&nbsp;as being&nbsp;one of the best interface for reading mail that exist&nbsp;out there &#8211; I love &#034;tagging&#034; (oops: it&#039;s called &#034;labelling&#034; in their syntax), speed of search through messages (even tough Outlook 2007 is faster on indexed content, but still you have to buy it and install it on your PC)&#8230; I also especially love the way it shows THREADING&#8230; so that I moved pretty much EVERY mailing list I read on their account: </p>
<p><a title="Photo Sharing" href="http://www.flickr.com/photos/dani3l3/262797621/"><img height="193" alt="Ma come se fa ?" src="http://static.flickr.com/96/262797621_6754165d10.jpg" width="500"/></a> <br />(ok, they could do better with the localized version of &#034;Re:&#034; in replies&#8230;. in Italian a lot of broken MUA&#039;s translate that into &#034;R:&#034; and that isn&#039;t understood by GMail and will make it think it is another thread&#8230;. but that&#039;s a minor issue, and also one that every MUA handling threading has &#8211; including &#034;mutt&#034; &#8211; the real problem is the broken MUAs sending the &#034;R:&#034; in the first place. But&nbsp;I digress too much&#8230;.).</p>
<p>I also keep GMail continuosly opened in a browser during the day because a lot of informative mail and that sent by friends goes there.&nbsp;This to say that&nbsp;I <strong>do</strong> get a lot of their ads (that is &#8211; the point of having such an application, for them&#8230;). <a href="http://mailcall.spaces.live.com/blog/cns!CC9301187A51FE33!4043.entry?_c11_blogpart_blogpart=blogview&amp;_c=blogpart#permalink">On the contrary, Windows Live Mail reduced its ads to show only one&#8230; not to annoy you too much</a>. <br />But the ads in GMail were not *really* a problem (I don&#039;t read them anyway, I just plain IGNORE THEM).</p>
<p>But&nbsp;this week they REALLY pissed me off. They REALLY have. And here is the reason: <br />I have been using a script for MONTHS to backup my database (the one powering THIS blog) and send it &#034;off-site&#034; to my GMail mailbox. Pretty much something like a lot of other people do, described in various <a href="http://www.varlinux.org/vl/html/modules/stories/article.php?storyid=6920">articles</a> and <a href="http://blog.netnerds.net/2006/04/backup-wordpress-to-gmail/">blog posts</a>. Then I was labelling them with a rule, so that I could access my backups easily in case I needed them.</p>
<p>Now I don&#039;t know if this violates their <a href="http://mail.google.com/gmail/help/terms_of_use.html">terms of use</a> in any way&#8230; because I am not really using it as storage with those programs that circulated at one stage that had &#034;reverse engineered&#034; it. Those were bypassing the web interface altogether so people did use it as storage with a program without having to see their ads. That was the issue, I think.&nbsp;In my case,&nbsp;I am just sending MAILS to myself. One per day. I also delete the old ones every now and then, and they are not even huge in sized (attachments of 40 to 50KB so far!!)&#8230; anyway, I know a lot of people that store documents and all sort of stuff even in their corporate mailboxes in Outlook (then maybe index them with <a href="http://www.microsoft.com/windows/desktopsearch/default.mspx">Windows Desktop Search</a> of Google Desktop to find it back)&#8230; I was only doing the same with GMail. I don&#039;t see the big issue here&#8230;.. they might think otherwise&#8230;. but from what happens I don&#039;t think that&#039;s the issue.</p>
<p>Anyway, now it&#039;s been three or four days that my backup mail gets rejected. My SMTP Server gets told: </p>
<p>host gmail-smtp-in.l.google.com[66.249.83.27] said: <br /><em>550-5.7.1 Our system has detected an unusual amount of unsolicited<br />550-5.7.1 mail originating from your IP address. To protect our <br />550-5.7.1 users from spam, mail sent from your IP address has been <br />550-5.7.1 rejected. Please visit <br />550-5.7.1 <a href="http://www.google.com/mail/help/bulk_mail.html">http://www.google.com/mail/help/bulk_mail.html</a> to review <br />550 5.7.1 our Bulk Email Senders Guidelines. <br /></em></p>
<p>Now for fuck&#039;s sake. You know how much I hate SPAMMERS and <a href="http://www.43things.com/things/view/13248">what I would like to do with them</a>. But I also know that it does happen to end up in RBLs and such sometimes. Fine. But&nbsp;GIVE ME&nbsp;a way to tell you that I am NOT one!&nbsp;If you go to the link above, all you find is a form where you can specify that mail that ended up in your &#034;junk&#034; folder actually wasn&#039;t spam. Yeah, right.&nbsp;In my case it does not even go into my &#034;junk&#034; folder! How am I supposed to give me the original header that arrived to THEM if I only have the one sent by my mailserver ? They just blacklisted my mail server&#039;s IP Address! As they say, I even have an SPF record, I always use the same address, etc&#8230;. <br />So I tried to fill in the form, the day after I also tried to contact their <a href="mailto:abuse@google.com">abuse@google.com</a> and <a href="mailto:abuse@gmail.com">abuse@gmail.com</a> addresses. <br />Still nothing. <br />They even tell you (in the automated reply when you contact &#034;abuse&#034;: <br /><em>&#034;[...] For privacy and security reasons, we may not reveal the final outcome of an abuse case to the person who reported it. [...]&#034;.<br /></em>How great. How am I supposed to know if they even READ my complaint ? </p>
<p>You anti-spam people at GMail: <strong>&#034;I am NOT a fucking spammer!!!!!&#034;</strong>. I &#039;haven&#039;t found a better way to tell ya this, you know, than writing it on my blog&#8230; this is just RIDICULOUS!</p>
<p>But to date my mails still get dropped. I&#039;ll probably have to send my backups somewhere else. At this point they pissed me off so much that I am also seriously considering getting back to use my own mailserver also for receiving and reading my mailing lists. Then I won&#039;t get ads there. <br />Afzetterij! <br />(I hope you have some dutch guy on board at Google, as &#034;Google Translate&#034; does not translate from/to dutch yet&#8230;. )</p>
<p>
<strong>Edited on October, 8th </strong>- While GMail REJECTS those mails (it SAYS it is not accepting them), Hotmail simply DROPS them (that is: it does not even SAY it is not accepting them): </p>
<p><em>to=<dani3l3 @hotmail.com>, relay=mx4.hotmail.com[65.54.245.104], delay=3, status=sent (250  &lt;20061008061010.GA19807@muscetta.com> Queued mail for delivery)</dani3l3></em></p>
<p>This way you THINK it is going to be delivered, but it NEVER shows up in your inbox. I don&#039;t know who&#039;s behaving the worst&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2006/10/07/google-has-pissed-me-off-this-week/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>what you need to do is throw away you batch file and start over in this new language&#8230;</title>
		<link>http://www.muscetta.com/2006/06/28/what-you-need-to-do-is-throw-away-you-batch-file-and-start-over-in-this-new-language/</link>
		<comments>http://www.muscetta.com/2006/06/28/what-you-need-to-do-is-throw-away-you-batch-file-and-start-over-in-this-new-language/#comments</comments>
		<pubDate>Wed, 28 Jun 2006 09:36:47 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=122</guid>
		<description><![CDATA[Mainly a cross post to say &#034;me too!&#034; or &#034;I agree completely!&#034;. I am referring to this blog post: &#034;[...] For example, in response to &#034;How do I write a batch file that&#8230;&#034; some people will say, &#034;First, install &#034;. This doesn&#039;t actually solve the problem; it merely replaces it with a different problem. In [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Mainly a cross post to say &#034;me too!&#034; or &#034;I agree completely!&#034;.<br />
I am referring to <a href="http://blogs.msdn.com/oldnewthing/archive/2006/03/22/558007.aspx">this blog post</a>: </p>
<p>&#034;[...]<br />
For example, in response to &#034;How do I write a batch file that&#8230;&#034; some people will say, &#034;First, install
<perl |bash|monad|...>&#034;. This doesn&#039;t actually solve the problem; it merely replaces it with a different problem.<br />
In particular, if the solution begins with &#034;First, install&#8230;&#034; you&#039;ve pretty much lost out of the gate. Solving a five-minute problem by taking a half hour to download and install a program is a net loss.<br />
[...]<br />
So be careful when you suggest a solution that has a high activation energy. Sure, something could be taken care of by a one-line perl script, but getting perl onto the machine is hardly a one-line endeavor.<br />
[...]&#034;</p>
</perl>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2006/06/28/what-you-need-to-do-is-throw-away-you-batch-file-and-start-over-in-this-new-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&quot;Many Eyes Make All Bugs Shallow&quot; &#8211; UpsideDown</title>
		<link>http://www.muscetta.com/2006/06/09/many-eyes-make-all-bugs-shallow-upsidedown/</link>
		<comments>http://www.muscetta.com/2006/06/09/many-eyes-make-all-bugs-shallow-upsidedown/#comments</comments>
		<pubDate>Fri, 09 Jun 2006 11:32:50 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Interop]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=116</guid>
		<description><![CDATA[An interesting interpretation of the &#034;Many Eyes Make All Bugs Shallow&#034; maxim gets given on Jeff Jones&#039; Blog at http://blogs.technet.com/security/archive/2006/06/07/433813.aspx. Only this time the sentence gets applied to Microsoft products, rather than to OSS&#8230;&#8230; Interesting<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>An interesting interpretation of the &#034;Many Eyes Make All Bugs Shallow&#034; maxim gets given on Jeff Jones&#039; Blog at <a href="http://blogs.technet.com/security/archive/2006/06/07/433813.aspx">http://blogs.technet.com/security/archive/2006/06/07/433813.aspx</a>.</p>
<p>Only this time the sentence gets applied to Microsoft products, rather than to OSS&#8230;&#8230; Interesting <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2006/06/09/many-eyes-make-all-bugs-shallow-upsidedown/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts, Blogs, and Ruby with .Net</title>
		<link>http://www.muscetta.com/2006/06/09/thoughts-blogs-and-ruby-with-net/</link>
		<comments>http://www.muscetta.com/2006/06/09/thoughts-blogs-and-ruby-with-net/#comments</comments>
		<pubDate>Fri, 09 Jun 2006 11:14:29 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=115</guid>
		<description><![CDATA[For those who have not seen it yet, Mischa Kroon has a nice blog post about interoperability between Ruby and the .Net framework. It provides several links and things to think about. If you are into .Net, or Ruby, or both, or simply interested about how things can interoperate, give it a read.<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>For those who have not seen it yet, <a href="http://bloggingabout.net/blogs/mischa/archive/2006/05/14/12184.aspx">Mischa Kroon has a nice blog post about interoperability between Ruby and the .Net framework</a>.</p>
<p>It provides several links and things to think about. If you are into .Net, or Ruby, or both, or simply interested about how things can interoperate, give it a read.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2006/06/09/thoughts-blogs-and-ruby-with-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trackback Spam</title>
		<link>http://www.muscetta.com/2006/05/19/trackback-spam/</link>
		<comments>http://www.muscetta.com/2006/05/19/trackback-spam/#comments</comments>
		<pubDate>Fri, 19 May 2006 17:10:05 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[SPAM]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=110</guid>
		<description><![CDATA[Oh I hate spammers, you know ? In fact I&#039;ve also got this goal I would like to mark as &#034;done&#034;&#8230;. &#8230;but that&#039;s more for laughing than to be serious, really. Coming to comment spam, I&#039;ve been dealing quite a lot with the old &#039;b2&#039; (WordPress&#039;s progenitor) at one stage, while I could not be [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Oh I hate spammers, you know ? In fact <a href="http://www.43things.com/things/view/13248">I&#039;ve also got this goal I would like to mark as &#034;done&#034;</a>&#8230;.<br />
&#8230;but that&#039;s more for laughing than to be serious, really.</p>
<p>Coming to comment spam, I&#039;ve been dealing quite a lot with the old &#039;b2&#039; (WordPress&#039;s progenitor) at one stage, while I could not be asked to upgrade yet. <a href="http://www.muscetta.com/2005/04/25/b2-hacks/">At one stage I&#039;d even coded my own unofficial fix for it to keep it going</a> and mantain my sanity&#8230;</p>
<p>Then with WordPress I&#039;ve enabled a CAPTCHA plugin which takes care of robots and only lets HUMANS place comments.</p>
<p>But now it&#039;s the turn of trackback spamming&#8230;.<br />
Sure, a lot of people have seen it AGES before me, simply because people DO read THEIR blog more than mine&#8230;.<br />
In a way, this might mean this is starting to be read &#8211; gosh! Who makes you read this ? Are you really <strong>THAT</strong> bored  to get to read <strong>me</strong>?</p>
<p>Anyway, here&#039;s a couple of useful links proposing approaches to tackle comment and trackback spam. They might be useful to you too:<br />
<a href="http://www.tamba2.org.uk/wordpress/spam/">http://www.tamba2.org.uk/wordpress/spam/</a><br />
<a href="http://photomatt.net/2005/01/05/trackback-spam/">http://photomatt.net/2005/01/05/trackback-spam/</a></p>
<p>Also now, I could get some of those plug-ins&#8230;. probably. For now I don&#039;t have time to test the plug-ins, so I&#039;ve just hacked my own fix, see if it does. Probably I will have to &#039;touch&#039; it again, as I might have broken the trackback feature altogether. Well, it will pretty much test itself. Spammers, where are you now ? I&#039;m watching my logs, please try&#8230;.</p>
<p>[edited: 20th May 2006 - Ok they did send trackbacks tonight and my fix did work <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2006/05/19/trackback-spam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flickr Story</title>
		<link>http://www.muscetta.com/2006/03/11/flickr-story/</link>
		<comments>http://www.muscetta.com/2006/03/11/flickr-story/#comments</comments>
		<pubDate>Sat, 11 Mar 2006 19:00:20 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[Funny]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Places]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=97</guid>
		<description><![CDATA[Haven&#039;t posted in a while, and won&#039;t write much this time either. The truth is that I have been too busy lately &#8211; working, family, and beta testing Windows Vista. But that&#039;s another story and I might have time to tell yuo that another time I get time and will to blog. What I wanted [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Haven&#039;t posted in a while, and won&#039;t write much this time either. The truth is that I have been too busy lately &#8211; working, family, and <a href="http://www.microsoft.com/windowsvista/default.aspx">beta testing Windows Vista</a>. But that&#039;s another story and I might have time to tell yuo that another time I get time and will to blog.</p>
<p>What I wanted to write now, instead, is a link to an <a href="http://www.usatoday.com/tech/products/2006-02-27-flickr_x.htm?POE=TECISVA">article</a> I just read and wanted to share, which is quite interesting as it tells a bit of the <a href="http://www.usatoday.com/tech/products/2006-02-27-flickr_x.htm?POE=TECISVA">story of how Flickr has born</a>. Quite interesting.</p>
<p>Especially, the two things I linked here make you think of the &#034;top-down&#034; vs. &#034;bottom-up&#034; kind of approach.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2006/03/11/flickr-story/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More on Ruby and IMAP</title>
		<link>http://www.muscetta.com/2006/01/05/more-on-ruby-and-imap/</link>
		<comments>http://www.muscetta.com/2006/01/05/more-on-ruby-and-imap/#comments</comments>
		<pubDate>Thu, 05 Jan 2006 12:03:52 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2006/01/05/more-on-ruby-and-imap/</guid>
		<description><![CDATA[I&#039;ve written here of a Ruby IMAP Script. The script is INCREDIBLY simple (but it had to do a simple thing nonethless): #!/usr/bin/env ruby begin_ = Time.now require 'net/imap' if !ARGV[4] puts "USAGE: ruby imapcheck.rb [server] [username] [password] [folder] [flag]" exit end ##### Variable Section ## your imap mail server $SERVER=ARGV[0] ## your imap/smtp mail [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I&#039;ve written <a href="http://www.muscetta.com/2006/01/02/java-oh-java-aka-high-vs-low-level-languages-rant/trackback/">here</a> of a Ruby IMAP Script.</p>
<p>The script is INCREDIBLY simple (but it had to do a simple thing nonethless):</p>
<p><code><br />
#!/usr/bin/env ruby<br />
begin_ = Time.now</p>
<p>require 'net/imap'</p>
<p>if !ARGV[4]<br />
        puts "USAGE: ruby imapcheck.rb [server] [username] [password] [folder] [flag]"<br />
        exit<br />
end</p>
<p>##### Variable Section<br />
## your imap mail server<br />
$SERVER=ARGV[0]<br />
## your imap/smtp mail username<br />
$USERNAME=ARGV[1]<br />
## your imap/smtp mail password<br />
$PASSWORD=ARGV[2]<br />
## your mail folder (for example, INBOX)<br />
$FOLDER=ARGV[3]<br />
## flag to use (as per RFC 2060)<br />
$FLAG=ARGV[4]<br />
##### End Variable Section</p>
<p>imap = Net::IMAP.new($SERVER)<br />
imap.login($USERNAME, $PASSWORD)<br />
imap.select($FOLDER)<br />
count = imap.status($FOLDER,[$FLAG])[$FLAG]</p>
<p>puts "#{count} messages with flag #{$FLAG} \n\n"<br />
total_time = Time.now - begin_<br />
puts "RUNTIME: #{total_time}"<br />
</code></p>
<p>There is another interesting example about this at <a href="http://willj.net/blog/2005/09/19/net-imap-hairy/trackback/">Will&#039;s Blog</a>. It&#039;s funny how people try to do the same things at similar times <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Of course official doc for this is <a href="http://www.ruby-doc.org/core-1.9/classes/Net/IMAP.html">here</a>.<br />
But If you want to snoop at a more complex webmail application using IMAP from <a href="http://www.ruby-lang.org/en/">Ruby</a>/<a href="http://www.rubyonrails.org/">Rails</a> you should seriously check out <a href="http://mailr.org/">Mailr</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2006/01/05/more-on-ruby-and-imap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java&#8230; oh Java&#8230; (aka &quot;High vs. Low level languages rant&quot;)</title>
		<link>http://www.muscetta.com/2006/01/02/java-oh-java-aka-high-vs-low-level-languages-rant/</link>
		<comments>http://www.muscetta.com/2006/01/02/java-oh-java-aka-high-vs-low-level-languages-rant/#comments</comments>
		<pubDate>Mon, 02 Jan 2006 16:14:38 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=85</guid>
		<description><![CDATA[I said here (and someone else said that too) that &#034;Java is the new cobol&#034;. When saying so, I mentioned that En3pY hates Java, here it is another post by him written after I forwarded him this Joel Article (which I read from Scoble, in turn). All in all, in this case, I tend to [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.muscetta.com/2005/12/24/java-is-the-new-cobol-i-confirm/">I said here (and someone else said that too) that &#034;Java is the new cobol&#034;.</a><br />
When  saying so, I mentioned that <a href="http://www.en3py.net">En3pY</a> hates Java, <a href="http://spaces.msn.com/members/en3py/blog/cns!1pLSb3mam2gtAX9zlkiTgjnA!141.entry">here it is another post by him</a> written after I forwarded him <a href="http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html">this Joel Article</a> (which I read from <a href="http://scobleizer.wordpress.com/2005/12/29/joel-says-teaching-java-is-bad-for-cs-students/trackback/">Scoble</a>, in turn).</p>
<p>All in all, in this case, I tend to partially agree on some points but slightly disagree on others with Joel.</p>
<p>In fact, while I do acknowledge the need of  &#034;hardcore&#034; developers to fix and build lower level things and mantain current code (and know WHAT they are doing), there are also many cases where coding in a high level language which abstracts complexity IS actually more efficient and cost effective, not having to reinvent the wheel every time.<br />
So there are a lot of useful and nice programs written by people who DO KNOW what happens under the hood (as good in C as in Assembler), that for simplicity and flexibility run in sandboxes, high level languages, even interpreted ones! <a href="http://www.immunitysec.com/products-canvas.shtml">An example is Dave Aitel&#039;s CANVAS, written in Python.</a> But that&#039;s just an example.</p>
<p>But I do agree with En3pY that I don&#039;t like Java myself, and I consider it being too &#034;heavy&#034;, in general.<br />
Solution on my side, tough, is that you don&#039;t need C or assembler to get cleaner, smaller, more efficient code, you just need better languages. An example of this is a situation I have been involved in some time ago: in that case a colleague (that works with a very large customer who has a very large exchange deployment) needed to do some performance testing of this Exchange system. He had done the testing from some Windows IMAP clients, but the customer also wanted to see the same performance values measured from a Linux box accessing the same exchange via the very same IMAP protocol.<br />
So I wrote a nice and sweet <a href="http://www.ruby-lang.org/en/">Ruby</a> script &#8211; and at the same time another colleague developer a similar application (in Java).<br />
Result: 45 kilobytes of .JAR to do the same things I did in 20 lines of <a href="http://www.ruby-lang.org/en/">Ruby</a> (20 lines &#8211; including comments!).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2006/01/02/java-oh-java-aka-high-vs-low-level-languages-rant/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Java is the new COBOL &#8211; I confirm</title>
		<link>http://www.muscetta.com/2005/12/24/java-is-the-new-cobol-i-confirm/</link>
		<comments>http://www.muscetta.com/2005/12/24/java-is-the-new-cobol-i-confirm/#comments</comments>
		<pubDate>Sat, 24 Dec 2005 15:55:16 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=78</guid>
		<description><![CDATA[I stumbled into the following blog post stating that &#034;Java is the new COBOL&#034;: http://blogs.msdn.com/nigelwat/archive/2005/12/06/500406.aspx It is funny to see how different people at different times get to think the same things. In fact, I would not like to seem arrogant as I never wrote such an accurate analysis, but I used to think myself [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I stumbled into the following blog post stating that &#034;Java is the new COBOL&#034;:<br />
<a href="http://blogs.msdn.com/nigelwat/archive/2005/12/06/500406.aspx">http://blogs.msdn.com/nigelwat/archive/2005/12/06/500406.aspx</a></p>
<p>It is funny to see how different people at different times get to think the same things. In fact, I would not like to seem  arrogant as I never wrote such an accurate analysis, but I used to think myself (and say, mostly as a joke tough) that &#034;Java is the 21st-century&#039;s COBOL&#034; &#8211; which is pretty much the same thing <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>And if you don&#039;t believe that I actually was already saying so, <a href="http://www.en3py.net">En3pY</a> can confirm. I can remember having him cracking up laughing when I first said so to him.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2005/12/24/java-is-the-new-cobol-i-confirm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RSS Thoughts</title>
		<link>http://www.muscetta.com/2005/12/24/rss-thoughts/</link>
		<comments>http://www.muscetta.com/2005/12/24/rss-thoughts/#comments</comments>
		<pubDate>Sat, 24 Dec 2005 15:33:01 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=77</guid>
		<description><![CDATA[I am not quite sure I understand why Roberdan has posted this http://blogs.msdn.com/roberdan/comments/502576.aspx very basic explanation of what an RSS feed is. Probably to start educating the masses, and preparing that amount of business people to WHAT RSS is&#8230;. preparing them to actually use the format when (soon) it will finally be mainstream with Office [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I am not quite sure I understand why Roberdan has posted this <a href="http://blogs.msdn.com/roberdan/comments/502576.aspx">http://blogs.msdn.com/roberdan/comments/502576.aspx</a> very basic explanation of what an RSS feed is.<br />
Probably to start educating the masses, and preparing that amount of business people to WHAT RSS is&#8230;. preparing them to actually use the format when (soon) it will finally be mainstream with Office 12 and IE7&#8230;. to this regard Scoble says &#034;[...]don’t underestimate the effect of Outlook 12’s support of RSS here. It’ll bring millions of new businesspeople into the RSS world. This is HUGE.[...]&#034;. <a href="http://scobleizer.wordpress.com/2005/12/22/outlook-pm-talks-about-upcoming-rss-integration/">http://scobleizer.wordpress.com/2005/12/22/outlook-pm-talks-about-upcoming-rss-integration/</a><br />
And he&#039;s right of course. I keep forgetting RSS is not in the mainstream yet. &#034;My&#034; idea of what is mainstream is mostly polluted by my geeky visions&#8230;</p>
<p>But coming back to the point &#8211; that was Roberdan&#039;s post &#8211; I wanted to comment there, but for some reason I am not able to do so (even though it does not seem to be a problem with <a href="http://blogs.msdn.com">http://blogs.msdn.com</a>, as I can comment to my blog there&#8230; I don&#039;t know)&#8230; so I will comment here (hoping he sees the pingback). The comment I wanted to write is this that follows (in Italian):</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Bisognerebbe inoltre menzionare che anche le liste di SharePoint stesso si possono ri-pubblicare in formato RSS per farle fruire ad altri reader. Per il momento questa possibilita&#039; non c&#039;e&#039; nativamente in SharePoint, ma si puo&#039; attivare installando una web part quale &#034;BlogWave&#034;<br />
<a href="http://blogs.msdn.com/asanto/archive/2004/08/22/218625.aspx ">http://blogs.msdn.com/asanto/archive/2004/08/22/218625.aspx </a>oppure quella messa a disposizione da BlueDogLimited:<br />
<a href="http://www.bluedoglimited.com/Downloads/pages/SyndicationGenerator.aspx">http://www.bluedoglimited.com/Downloads/pages/SyndicationGenerator.aspx</a></p>
<p><a href="http://blogs.msdn.com/dmuscett/archive/2005/09/27/SharePoint_Unortodox_RSS_Feed.aspx">Anch&#039;io ho scritto un simile oggetto che genera feed a partire da liste di siti realizzati con SharePoint, qualora non si avesse la possibilita&#039; di installare webparts sul proprio sharepoint, e lo faccio da remoto, estraendo le informazioni dal Web Service si SPS.</a></p>
<p>Invece per fortuna lo SharePoint &#034;futuro&#034; che uscira&#039;, avra&#039; questa possibilita&#039; nativamente:<br />
<a href="http://radio.weblogs.com/0001011/2005/09/17.html#a11176">http://radio.weblogs.com/0001011/2005/09/17.html#a11176</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2005/12/24/rss-thoughts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails 1.0 is out !</title>
		<link>http://www.muscetta.com/2005/12/14/ruby-on-rails-10-is-out/</link>
		<comments>http://www.muscetta.com/2005/12/14/ruby-on-rails-10-is-out/#comments</comments>
		<pubDate>Wed, 14 Dec 2005 09:59:29 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=74</guid>
		<description><![CDATA[Wow, I missed this yesterday &#8211; final version 1.0 of Ruby on Rails (www.rubyonrails.org) is out [Info "borrowed" from: http://37signals.com/svn/archives2/ruby_on_rails_10_is_live_with_a_new_site_too.php]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Wow, I missed this yesterday &#8211; final version 1.0 of Ruby on Rails (<a href="http://www.rubyonrails.org">www.rubyonrails.org</a>) is out</p>
<p>[Info "borrowed" from: <a href="http://37signals.com/svn/archives2/ruby_on_rails_10_is_live_with_a_new_site_too.php">http://37signals.com/svn/archives2/ruby_on_rails_10_is_live_with_a_new_site_too.php</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2005/12/14/ruby-on-rails-10-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RSS a sloppy format, but successful</title>
		<link>http://www.muscetta.com/2005/05/05/rss-a-sloppy-format-but-successful/</link>
		<comments>http://www.muscetta.com/2005/05/05/rss-a-sloppy-format-but-successful/#comments</comments>
		<pubDate>Thu, 05 May 2005 15:34:07 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[RSS]]></category>

		<guid isPermaLink="false">/?p=42</guid>
		<description><![CDATA[http://www.onlamp.com/pub/a/onlamp/2005/04/22/bosworth.html RSS is a sloppy format. That why is working so well and succeeding. Wow, cool, like it happened for the web. Yep, that&#039;s also a sloppy format, in fact, I agree on this one. Sloppy or not&#8230; who really cares ? Best things in life are usually SIMPLE. What is happening with RSS feeds [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://www.onlamp.com/pub/a/onlamp/2005/04/22/bosworth.html">http://www.onlamp.com/pub/a/onlamp/2005/04/22/bosworth.html</a></p>
<p>RSS is a sloppy format.<br />
That why is working so well and succeeding.<br />
Wow, cool, like it happened for the web.<br />
Yep, that&#039;s also a sloppy format, in fact, I agree on this one.<br />
Sloppy or not&#8230; who really cares ?<br />
Best things in life are usually SIMPLE.</p>
<p>What is happening with RSS feeds in building a logical network of links between content, which is more efficient than the web it runs on.</p>
<p>I like that.<br />
I like that a lot.</p>
<p>A couple of years ago I in fact pushed my friends of a couple of sites to push their information with RSS feeds.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2005/05/05/rss-a-sloppy-format-but-successful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>b2 hacks</title>
		<link>http://www.muscetta.com/2005/04/25/b2-hacks/</link>
		<comments>http://www.muscetta.com/2005/04/25/b2-hacks/#comments</comments>
		<pubDate>Mon, 25 Apr 2005 20:23:39 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[b2]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">/?p=40</guid>
		<description><![CDATA[This blog is based on b2 (cafelog.com). Since b2 is basically not mantained anymore, I really should be planning a move to its spinoff: wordpress (wordpress.org). But I can&#039;t be asked for now, so I&#039;ve only hacked a couple of fixes to the code to save myself from comment spam mainly, and fix some other [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>This blog is based on b2 (<a href="http://www.cafelog.com/">cafelog.com</a>).<br />
Since b2 is basically not mantained anymore, I really should be planning a move to its spinoff: wordpress (<a href="http://www.wordpress.org/">wordpress.org</a>).</p>
<p>But I can&#039;t be asked for now, so I&#039;ve only hacked a couple of fixes to the code to save myself from comment spam mainly, and fix some other security vulnerabilities here and there.</p>
<p>Sure, there might be more, but which software does not have those ?<br />
After all, this is a rather old thing&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2005/04/25/b2-hacks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New layout</title>
		<link>http://www.muscetta.com/2005/04/15/new-layout/</link>
		<comments>http://www.muscetta.com/2005/04/15/new-layout/#comments</comments>
		<pubDate>Fri, 15 Apr 2005 15:07:29 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[b2]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">/?p=37</guid>
		<description><![CDATA[So I finally changed the layout of this site. Not that it is now THAT different. Much of the code stayed the same, but I updated the layout to some more modern stuff and got rid of the FRAMES structure that was still hanging (haunting ?) there&#8230;. I also adjusted some things I did not [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>So I finally changed the layout of this site. Not that it is now THAT different. Much of the code stayed the same, but I updated the layout to some more modern stuff and got rid of the FRAMES structure that was still hanging (haunting ?) there&#8230;.<br />
I also adjusted some things I did not like and that were not &#034;consistent&#034; such as part of the frames being served off muscetta.com and the blog engine was instead served off muscetta.org&#8230;.</p>
<p>In the end it still looks crap, but *I* like it <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2005/04/15/new-layout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Annoying Spammer &#8211; see if they like this&#8230;</title>
		<link>http://www.muscetta.com/2005/01/12/annoying-spammer-see-if-they-like-this/</link>
		<comments>http://www.muscetta.com/2005/01/12/annoying-spammer-see-if-they-like-this/#comments</comments>
		<pubDate>Wed, 12 Jan 2005 20:48:24 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[b2]]></category>
		<category><![CDATA[SPAM]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">/?p=35</guid>
		<description><![CDATA[Well, since I was quite busy cleaning and cleaning their stupid comments over and over again, over all of the old posts, I finally found some time the other day to put my hands in the code of this blog, and implement some checks on dates, so that the older posts are not &#034;commentable&#034; anymore [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Well, since I was quite busy cleaning and cleaning their stupid comments over and over again, over all of the old posts, I finally found some time the other day to put my hands in the code of this blog, and implement some checks on dates, so that the older posts are not &#034;commentable&#034; anymore &#8211; well, I should refine it, as the link to comment is there anyway&#8230; but it checks when you submit and it tells you to buzz off&#8230;. so I bet you can comment-spam me on this new post but at least I won&#039;t have to go through all of the old ones (which was a very tiring task&#8230;).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2005/01/12/annoying-spammer-see-if-they-like-this/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Attack Surface</title>
		<link>http://www.muscetta.com/2004/10/20/attack-surface/</link>
		<comments>http://www.muscetta.com/2004/10/20/attack-surface/#comments</comments>
		<pubDate>Wed, 20 Oct 2004 14:23:15 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Risk]]></category>

		<guid isPermaLink="false">/?p=31</guid>
		<description><![CDATA[Michael Howard (author of &#034;Writing Secure Code&#034;) has released an article on MSDN Magazine titled: &#034;Attack Surface &#8211; Mitigate Security Risks by Minimizing the Code You Expose to Untrusted Users&#034;. It is definitely a good read, stressing developers to adopt a coding strategy that minimizes the risks. You can find his announcement of the article [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Michael Howard (author of &#034;Writing Secure Code&#034;) has released an article on MSDN Magazine titled:<br />
&#034;Attack Surface &#8211; Mitigate Security Risks by Minimizing the Code You Expose to Untrusted Users&#034;.<br />
It is definitely a good read, stressing developers to adopt a coding strategy that minimizes the risks.</p>
<p>You can find his announcement of the article on his BLOG <a target="_blank" href="http://blogs.msdn.com/michael_howard/archive/2004/10/19/244642.aspx">http://blogs.msdn.com/michael_howard/archive/2004/10/19/244642.aspx</a><br />
with link to the article itself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2004/10/20/attack-surface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Annoying spammer and lame defacers &#8211; part three</title>
		<link>http://www.muscetta.com/2004/10/11/annoying-spammer-and-lame-defacers-part-three/</link>
		<comments>http://www.muscetta.com/2004/10/11/annoying-spammer-and-lame-defacers-part-three/#comments</comments>
		<pubDate>Mon, 11 Oct 2004 14:52:13 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[b2]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SPAM]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">/?p=30</guid>
		<description><![CDATA[I am sorry but, since they did it again, I have removed the possibility to post HTML tags into a comment &#8211; this way, if the reason of their idiotic comments was that of increasing their ranking in Google, this won&#039;t at least be accomplished. I prefer to leave anonymus posting capabilities to my visitors, [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I am sorry but, since they did it again, I have removed the possibility to post HTML tags into a comment &#8211; this way, if the reason of their idiotic comments was that of increasing their ranking in Google, this won&#039;t at least be accomplished.</p>
<p>I prefer to leave anonymus posting capabilities to my visitors, but I don&#039;t like helping spammers doing their crap.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2004/10/11/annoying-spammer-and-lame-defacers-part-three/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

