<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-34678326</id><updated>2011-10-25T04:34:16.359-04:00</updated><title type='text'>Scott Vintinner's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-34678326.post-3734668051528788104</id><published>2008-10-13T09:35:00.002-04:00</published><updated>2008-10-13T09:45:09.425-04:00</updated><title type='text'>Stock Quotes Web Part for Sharepoint 2007</title><content type='html'>Thomas Burke Holland (&lt;a href="http://armsinfragilehands.blogspot.com/"&gt;http://armsinfragilehands.blogspot.com/&lt;/a&gt;) has taken the source code from my &lt;a href="http://svintinner.blogspot.com/2007/02/stockquotes-replacement-stock-quote.html"&gt;Sharepoint 2003 Stock Quotes Web Part&lt;/a&gt; and created a web part that works on Sharepoint 2007.  Check out his web site and download the 2007 version of the web part from the CodePlex web site:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codeplex.com/svstockticker"&gt;http://www.codeplex.com/svstockticker&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-3734668051528788104?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/3734668051528788104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=3734668051528788104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/3734668051528788104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/3734668051528788104'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2008/10/stock-quotes-web-part-for-sharepoint.html' title='Stock Quotes Web Part for Sharepoint 2007'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34678326.post-4429683263102125509</id><published>2008-09-16T13:44:00.005-04:00</published><updated>2008-09-16T14:50:38.595-04:00</updated><title type='text'>Adding a Serial port to a VM on ESXi</title><content type='html'>Back when we setup our System Center Operations Manager servers, we decided to virtualize them using VMware.  Although we had an ESX cluster with datastores on our SAN, we felt that it would be counterproductive to put the monitoring system on the same hardware that we wanted to monitor.  After all, an ESX or SAN outage would take the monitoring system offline so nobody would get notified.&lt;br /&gt;&lt;br /&gt;Therefore we setup a separate Dell 2850 with Windows 2003 Server 64-bit, running the free VMware Server.  At the time we setup our virtual root management server with a serial GSM modem so that it could send SMS notifications (&lt;a href="http://svintinner.blogspot.com/2008/02/how-to-configure-scom-2007-to-send-sms.html"&gt;more on that here&lt;/a&gt;).  Since our GSM modem was serial based, all we needed to do was plug the cable into the 2850's COM1 port, then add a virtual serial port onto the virtual machine and connect it to COM1.&lt;img src="http://www.flakshack.com/blog/digionesp.jpg" style="float: right; border:0px" /&gt;&lt;br /&gt;&lt;br /&gt;When VMware released their &lt;a href="http://www.vmware.com/products/esxi/"&gt;ESXi hypervisor&lt;/a&gt; for free, we decided to change from VMware Server to VMware ESXi.   The hypervisor promised better performance and memory management and seemed like a nice upgrade.  Unfortunately we soon discovered that &lt;a href="http://kb.vmware.com/kb/1003129"&gt;VMware ESXi 3.5 update 2 does not support mapping a physical serial port to a virtual serial port&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To work around this problem, we purchased a &lt;a href="http://www.digi.com/products/serialservers/digionesp.jsp"&gt;Digi One SP&lt;/a&gt; serial over ethernet device for around $150.  So now instead of connecting the modem directly to the COM1 port on the back of the Dell server, it now connects to this device which is connected to an ethernet port.  The steps are pretty simple:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Attach the device directly to a spare ethernet NIC on the back of our Dell server using a &lt;a href="http://en.wikipedia.org/wiki/Ethernet_crossover_cable"&gt;cross-over cable&lt;/a&gt;.  Note that we could just connect it to our existing network infrastructure, but again we wanted the monitoring system to be self contained and able to send pages even if the network was offline.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the VMware Infrastructure Client, add a new virtual switch to the ESXi server.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Shut down the RMS virtual machine to add a new virtual NIC which is assigned to the new switch we just created.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Power ON the VM and configure the new NIC with an unused private address (in our case 192.168.0.1).&lt;/li&gt;&lt;li&gt;Uninstall the existing GSM modem from the RMS virtual machine.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Install the Digi One SP software on the RMS virtual machine.  The software takes you through a wizard which detects the device and allows you to configure its IP address (in our case 192.168.0.2).  Accept all the defaults to install a "RealPort" virtual COM3 port.&lt;/li&gt;&lt;li&gt;Install the GSM modem through the control panel and connect it to the new COM3 port.&lt;/li&gt;&lt;li&gt;Test using the Microsoft SMS Sender and then with Operations Manager.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;On a side note, we've been extremely happy with VMware ESXi.  I think the performance improvement has been noticable.  Besides, I appreciate not having to install all the Microsoft patches on it every month.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-4429683263102125509?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/4429683263102125509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=4429683263102125509' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/4429683263102125509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/4429683263102125509'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2008/09/adding-serial-port-to-vm-on-esxi.html' title='Adding a Serial port to a VM on ESXi'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34678326.post-3355492461338002967</id><published>2008-08-11T13:51:00.003-04:00</published><updated>2008-08-13T09:11:22.912-04:00</updated><title type='text'>Simple Cisco Router Management Pack for SCOM 2007</title><content type='html'>I've written a simple "proof-of-concept" management pack to monitor some of my Cisco routers.  The MP is configured to discover a Cisco 2600, 2800,  and 2801 router.  Currently it will monitor up to 4 interfaces for up/down port status, errors and incoming/outgoing bps.  It will also monitor some general environmental conditions (fan &amp;amp; temperature state).&lt;br /&gt;&lt;br /&gt;Note that this is an extremely simple management pack.  It will not discover all of your interfaces or anything like that.  For my purposes, I simply hard-coded rules for interfaces 1-4 and used overrides to enable or disable them depending on the device.&lt;br /&gt;&lt;br /&gt;Unfortunately, after going through the process of creating this SNMP management pack, I've come to the conclusion that it is really too much work.  If you can afford one of the 3rd party SNMP management tools (like &lt;a href="http://www.quest.com/system-center/"&gt;Quest System Center&lt;/a&gt; or &lt;a href="http://www.jalasoft.com/"&gt;Jalasoft Xian Network Manager&lt;/a&gt;), you'll find your job much easier.&lt;br /&gt;&lt;br /&gt;For more details on writing your own SNMP management packs, check out my previous article: &lt;a href="http://svintinner.blogspot.com/2008/05/example-snmp-management-pack-for-scom.html"&gt;Example SNMP Management Pack for SCOM 2007&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here's a screenshot of the performance view&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.flakshack.com/blog/cisco-snmp-performance.png" /&gt;&lt;br /&gt;&lt;br /&gt;You can download my sample Cisco management pack here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flakshack.com/blog/RBH.Cisco.Routers.Management.Pack.xml"&gt;RBH.Cisco.Routers.Management.Pack.xml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;*Reminder: it is unlikely that this management pack will work on your system without tweaking the XML.  This management pack also requires Raphael Burri's SNMP Discovery Provider, which I discuss in my article: &lt;a href="http://svintinner.blogspot.com/2008/05/example-snmp-management-pack-for-scom.html"&gt;Example SNMP Management Pack for SCOM 2007&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This sample management pack is licensed under the Creative Commons Attribution 3.0 License. To view a copy of this license, visit &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;http://creativecommons.org/licenses/by/3.0/ &lt;/a&gt;or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-3355492461338002967?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/3355492461338002967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=3355492461338002967' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/3355492461338002967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/3355492461338002967'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2008/08/simple-cisco-router-management-pack-for.html' title='Simple Cisco Router Management Pack for SCOM 2007'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34678326.post-5738018853366129048</id><published>2008-05-28T16:41:00.006-04:00</published><updated>2008-08-11T14:34:51.642-04:00</updated><title type='text'>Example SNMP Management Pack for SCOM 2007</title><content type='html'>I've finished creating my first SNMP management pack for Microsoft System Center Operations Manager 2007 (SCOM/OpsMgr) using &lt;a href="http://rburri.wordpress.com/2008/04/29/snmp-discovery-provider-for-opsmgr-2007"&gt;Raphael Burri's SNMP Discovery Provider&lt;/a&gt;.  For some reason Microsoft failed to include a means of identifying different types of SNMP devices in OpsMgr (called a Discovery).  Thankfully Raphael has written a quick MP to provide this functionality.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flakshack.com/blog/SimpleDiscoveryExample.xml"&gt;Here is a link to a simple discovery only template XML.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.flakshack.com/blog/RBH.Ecosaire.AC.Management.Pack.xml"&gt;Here is a link to my full Ecosaire Air Conditioner SNMP Management Pack.&lt;/a&gt;  *Note that this is provided as an example only.  If you have an Ecosaire AC unit and want to use my MP, let me know and I'll give you a copy of the required SNMP config files for the Ecosaire unit.&lt;br /&gt;&lt;br /&gt;If you take a look at the discovery only XML, you can see the following required sections:&lt;br /&gt;&lt;br /&gt;First we see the reference to Raphael's SNMP Discovery provider.   Obviously you need to have this MP installed on your OPS server.&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;reference alias="CustomSNMP"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;id&amp;gt;&lt;span style="font-weight: bold;"&gt;Custom.SNMP.Library&lt;/span&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;version&amp;gt;&lt;span style="font-weight: bold;"&gt;1.0.0.1&lt;/span&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;publickeytoken&amp;gt;&lt;span style="font-weight: bold;"&gt;e5c80663d573f08c&lt;/span&gt;&amp;lt;/publickeytoken&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     &amp;lt;/reference&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next take a look at the ClassTypes sections.  In the ClassTypes section, we identify the main class.  Notice how its base class is Microsoft.SystemCenter.NetworkDevice.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;ClassTypes&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;ClassType ID="&lt;span style="font-weight: bold;"&gt;RBH.Ecosaire.AC.Management.Pack.SNMPDevice&lt;/span&gt;" Accessibility="Internal" Abstract="false" Base="&lt;span style="font-weight: bold;"&gt;NetLib!Microsoft.SystemCenter.NetworkDevice&lt;/span&gt;" Hosted="false" Singleton="false" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/ClassTypes&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;A few lines down you will find the corresponding Discovery section where we will discover our new class.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;DiscoveryTypes&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;DiscoveryClass TypeID="&lt;span style="font-weight: bold;"&gt;RBH.Ecosaire.AC.Management.Pack.SNMPDevice&lt;/span&gt;"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;Property TypeID="&lt;span style="font-weight: bold;"&gt;System!System.Entity&lt;/span&gt;" PropertyID="DisplayName" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;/DiscoveryClass&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/DiscoveryTypes&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Next you'll see the DataSource section of the discovery.  Notice that the TypeID is set to use the CustomSNMP from Raphael's management pack.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;DataSource ID="DS" TypeID="&lt;span style="font-weight: bold;"&gt;CustomSNMP!Custom.SnmpQuery.FilteredOIDDiscoveryProvider&lt;/span&gt;"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Inside the DataSource you'll see the Interval (how often to run the discovery) along with some base SNMP properties.  These base properties are set by the Microsoft Network Device management pack on any SNMP device you've added to your OpsMgr server.  We can just use the previously discovered properties for those values here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;Interval&amp;gt;&lt;span style="font-weight: bold;"&gt;3600&lt;/span&gt;&amp;lt;/Interval&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;IP&amp;gt;&lt;span style="font-weight: bold;"&gt;$Target/Property[Type="NetLib!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$&lt;/span&gt;&amp;lt;/IP&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;CommunityString&amp;gt;&lt;span style="font-weight: bold;"&gt;$Target/Property[Type="NetLib!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$&lt;/span&gt;&amp;lt;/CommunityString&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;Version&amp;gt;&lt;span style="font-weight: bold;"&gt;$Target/Property[Type="NetLib!Microsoft.SystemCenter.NetworkDevice"]/Version$&lt;/span&gt;&amp;lt;/Version&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The SnmpVarBinds section identifies the SNMP Object Identifier (OID) that we are going to check.  If you think back to the Windows Registry based discovery wizard, you identify the registry key in one section, then create an expression to check the value of that key in a second section.  We use the same concept here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;SnmpVarBinds&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;SnmpVarBind&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;OID&amp;gt;&lt;span style="font-weight: bold;"&gt;1.3.6.1.2.1.1.2.0&lt;/span&gt;&amp;lt;/OID&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;Syntax&amp;gt;&lt;span style="font-weight: bold;"&gt;0&lt;/span&gt;&amp;lt;/Syntax&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;Value VariantType="8" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;/SnmpVarBind&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/SnmpVarBinds&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The OID listed above is a generic OID that will respond to an SNMP GET with the specific OID identifier of that device.  For example, if I do an SNMP GET against my air conditioner it will always return 1.3.6.1.4.1.8072.3.2.10.  Doing the same request against any of my Cisco 6509 switches will always return 1.3.6.1.4.1.9.1.283.&lt;br /&gt;&lt;br /&gt;Next you will see the Expression section.  This is where we perform the actual query to determine if the SNMP object is the right type.  As mentioned above, we are checking to see if SNMPGET(1.3.6.1.2.1.1.2.0) == 1.3.6.1.4.1.8072.3.2.10.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;SimpleExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;ValueExpression&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &amp;lt;XPathQuery&amp;gt;&lt;span style="font-weight: bold;"&gt;/DataItem/SnmpVarBinds/SnmpVarBind[OID='1.3.6.1.2.1.1.2.0'][1]/Value&lt;/span&gt;&amp;lt;/XPathQuery&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;/ValueExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;Operator&amp;gt;&lt;span style="font-weight: bold;"&gt;Equal&lt;/span&gt;&amp;lt;/Operator&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;ValueExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;Value Type="String"&amp;gt;&lt;span style="font-weight: bold;"&gt;1.3.6.1.4.1.8072.3.2.10&lt;/span&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;/ValueExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/SimpleExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/Expression&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note that if this is not specific enough for you, Raphael demonstrates how to query a specific OID and do a regex expression in his documentation.  For example, if you need to distinguish between SNMP devices by some other means you might want to check some other SNMP value.&lt;br /&gt;&lt;br /&gt;The ClassID and InstanceSettings sections round out the required sections.  This is similar to the last page of the Registry Discovery wizard where you map discovered values onto properties of the class.  Since this is just a demonstration, this section only includes the required DisplayName and IPAddress properties.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;ClassId&amp;gt;&lt;span style="font-weight: bold;"&gt;$MPElement[Name="RBH.Ecosaire.AC.Management.Pack.SNMPDevice"]$&lt;/span&gt;&amp;lt;/ClassId&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;InstanceSettings&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;Settings&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;Setting&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;Name&amp;gt;&lt;span style="font-weight: bold;"&gt;$MPElement[Name="NetLib!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$&lt;/span&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;Value&amp;gt;&lt;span style="font-weight: bold;"&gt;$Target/Property[Type="NetLib!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$&lt;/span&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/Setting&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;Setting&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;Name&amp;gt;&lt;span style="font-weight: bold;"&gt;$MPElement[Name="System!System.Entity"]/DisplayName$&lt;/span&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;Value&amp;gt;&lt;span style="font-weight: bold;"&gt;$Target/Property[Type="System!System.Entity"]/DisplayName$&lt;/span&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/Setting&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/Settings&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/InstanceSettings&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With this discovery, I can now distinguish this SNMP device from all the other SNMP devices on my system.&lt;br /&gt;&lt;br /&gt;Screenshots:&lt;br /&gt;&lt;br /&gt;State View showing only my discovered SNMP device&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.flakshack.com/blog/snmp_discovery1.png" /&gt;&lt;br /&gt;&lt;br /&gt;Performance View showing only my discovered SNMP device stats&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.flakshack.com/blog/snmp_discovery2.png" /&gt;&lt;br /&gt;&lt;br /&gt;Authoring Window showing Monitors for my SNMP class&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.flakshack.com/blog/snmp_discovery3.png" /&gt;&lt;br /&gt;&lt;br /&gt;Add Rule Wizard in the Console showing the Rule target as my new class&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.flakshack.com/blog/snmp_discovery4.png" /&gt;&lt;br /&gt;&lt;br /&gt;I'm lazy and like to use the GUI to avoid working in the XML as much as possible.  In my experience, once I have the base discovery added to the management pack, using the GUI tools to add rules, monitors, etc. works as expected.  The functionality is different between the Authoring Console and the Operations Console, so if you can't do something in one try it in the other.  For example, I was able to create an SNMP Trap Event Collection rule in the Operations Console, but I couldn't add an Alert onto that rule without using the Authoring Console.&lt;br /&gt;&lt;br /&gt;Finally, some tips on creating your own rules/monitors.&lt;br /&gt;&lt;br /&gt;When creating alerts for your rules and monitors, you can use the following variables (subsituting your own OIDs).&lt;br /&gt;&lt;br /&gt;For a Rule:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;$Data/EventData/DataItem/SnmpVarBinds/SnmpVarBind[OID='1.3.6.1.4.1.9839.2.1.2.2.0'][1]/Value$&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For a Monitor:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;$Data/Context/SnmpVarBinds/SnmpVarBind[OID='1.3.6.1.4.1.9839.2.1.2.2.0'][1]/Value$&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When creating an expression inside a monitor, use this variable for the parameter name:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For more help with SNMP Monitors check out &lt;a href="http://www.aquilaweb.com/blog/index.php?itemid=54"&gt;David Allen's Guide to SNMP Probe Based Monitors&lt;/a&gt;.  For examples, check out the completed management pack above.&lt;br /&gt;&lt;br /&gt;This sample management pack is licensed under the Creative Commons Attribution 3.0 License. To view a copy of this license, visit &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;http://creativecommons.org/licenses/by/3.0/ &lt;/a&gt;or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-5738018853366129048?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/5738018853366129048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=5738018853366129048' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/5738018853366129048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/5738018853366129048'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2008/05/example-snmp-management-pack-for-scom.html' title='Example SNMP Management Pack for SCOM 2007'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34678326.post-1194309220300500463</id><published>2008-05-14T15:07:00.003-04:00</published><updated>2008-05-14T16:04:10.874-04:00</updated><title type='text'>Sharepoint Weather Web Part working again</title><content type='html'>In the last few days the Weather XML stopped working on my Sharepoint site.  Coincidentally I'd received an email from Weather.com regarding their service. &lt;br /&gt;&lt;br /&gt;Weather.com now seems to require a partner ID in addition to the key.  You will want to sign in to their XOAP page to update your agreement and get a partner ID.  I have updated the original post with a new URL.  I have also updated the XSL template to include the promo links which are apparently required by the license agreement.  If you had previously downloaded my XSL template, you should update your template to the latest version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-1194309220300500463?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/1194309220300500463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=1194309220300500463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/1194309220300500463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/1194309220300500463'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2008/05/sharepoint-weather-web-part-working.html' title='Sharepoint Weather Web Part working again'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34678326.post-1297459336767976706</id><published>2008-03-12T14:06:00.000-04:00</published><updated>2008-03-12T14:07:14.487-04:00</updated><title type='text'>Empty Stock Quotes Problem Resolved</title><content type='html'>I have updated the Stock Quotes web part to fix the problem where the web part appears but without any visible quotes. Apparently in the last few days, Yahoo changed their code so that the CSV file returned is line delimited with a line feed (LF) instead of a carriage-return and line feed (CRLF). As a result, my code was incorrectly parsing the file.&lt;br /&gt;&lt;br /&gt;The updated version of the file is available from &lt;a href="http://svintinner.blogspot.com/2007/02/stockquotes-replacement-stock-quote.html"&gt;the main article&lt;/a&gt;, or via &lt;a href="http://www.flakshack.com/blog/StockQuotes.zip"&gt;direct download here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you have modified your own copy of the code, just edit this line in the RenderStockQuotes function:&lt;br /&gt;&lt;br /&gt;Old:&lt;br /&gt;Dim quotes() As String = Split(stockData, vbCRLF)&lt;br /&gt;New:&lt;br /&gt;Dim quotes() As String = Split(stockData, Chr(10))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-1297459336767976706?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/1297459336767976706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=1297459336767976706' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/1297459336767976706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/1297459336767976706'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2008/03/empty-stock-quotes-problem-resolved.html' title='Empty Stock Quotes Problem Resolved'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34678326.post-6682556107325718034</id><published>2008-02-20T15:31:00.010-05:00</published><updated>2008-02-20T17:05:37.839-05:00</updated><title type='text'>How to configure SCOM 2007 to send SMS messages</title><content type='html'>We recently started using Microsoft System Center Operations Manager (SCOM 2007) to monitor all of our computer systems.  Our previous monitoring system was setup with an old U.S. Robotics modem which used to dial Verizon's TAP modem to send pages to our cell phones whenever there was a problem with the system.   A lot of companies seem to rely on SCOM's email alerts for their notifications, but I wanted to make sure that I would receive notifications even if (or especially if) our email servers or internet connection were offline.&lt;br /&gt;&lt;br /&gt;Unfortunately I discovered that SCOM 2007 did not include built-in TAP support.  I searched around for third party dialers, but found them overpriced and poorly designed.  Fortunately, I discovered that Microsoft had built SMS (Short Message Service) functionality into SCOM 2007.  What this means is that when properly configured, my managment server can directly send SMS alert notifications to any pager using a special wireless modem.&lt;br /&gt;&lt;br /&gt;The first thing that you have to do to get this working is to purchase a GSM compatible wireless modem.  Not knowing a lot about wireless networks, I spent a lot of time tr&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vo3dIfo5MKo/R7yTRlkVVbI/AAAAAAAAAAM/dZc5xZTOtyQ/s1600-h/multitechmodem.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_vo3dIfo5MKo/R7yTRlkVVbI/AAAAAAAAAAM/dZc5xZTOtyQ/s320/multitechmodem.png" alt="" id="BLOGGER_PHOTO_ID_5169168402666050994" border="0" /&gt;&lt;/a&gt;ying to get this to work with my Verizon Blackberry 8830.  As I discovered, in the United States only certain wireless carriers are GSM compatible (AT&amp;amp;T and Cingular).&lt;br /&gt;&lt;br /&gt;I did some research and found this great modem from MultiTech Systems:  &lt;a href="http://www.multitech.com/PRODUCTS/Families/MultiModemGPRS/"&gt;MultiModem GPRS (MTCBA-G-F4)&lt;/a&gt;.  This is a wireless serial modem that is GSM compatible (AT&amp;amp;T approved).  It also supports SMS messaging with PDU mode (which is required for SCOM 2007 to work).&lt;br /&gt;&lt;br /&gt;Once I received the modem, I brought it down to the AT&amp;amp;T wireless store near my office and signed up for service to get a SIM card.  All we really wanted was unlimited text messaging, but we also ended up having to purchase a minimum data plan.   Note that you do not need Data/Internet service for this to work, you only need Text Messaging.  The end cost for service was around $56.00/month.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vo3dIfo5MKo/R7yWzFkVVcI/AAAAAAAAAAU/wqyI2Dv2Pis/s1600-h/modemcontrolpanel.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_vo3dIfo5MKo/R7yWzFkVVcI/AAAAAAAAAAU/wqyI2Dv2Pis/s320/modemcontrolpanel.png" alt="" id="BLOGGER_PHOTO_ID_5169172276726552002" border="0" /&gt;&lt;/a&gt;When selecting the modem, I specifically chose the serial version instead of the USB version. Since many people run SCOM on a 64-bit platform, you may run into driver related issues with the USB version.  My SCOM server runs on VMWare Server, so I knew that the Serial version would be much less trouble than the USB version.&lt;br /&gt;&lt;br /&gt;After installing the SIM card in the modem, I set it up next to my SCOM server and plugged in the included serial cable into COM1.  I then downloaded the latest modem definition file (INF) from the &lt;a href="http://www.multitech.com/SUPPORT/Families/MultiModemGPRS/drivers.asp"&gt;MultiModem GPRS drivers page&lt;/a&gt; and went through the wizard to add the modem to my server.&lt;br /&gt;&lt;br /&gt;Once Windows had recognized the modem, I was able to begin testing.  Before testing in SCOM 2007, you will want to test using the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=06a4f997-7f69-4891-8929-37b9041924a2&amp;amp;displaylang=en"&gt;Microsoft SMS Sender&lt;/a&gt;.  This is a quick little utility to send SMS (Short Message Services) messages.  Upon launching the program, it immediately selected my GSM&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vo3dIfo5MKo/R7yYYFkVVdI/AAAAAAAAAAc/R35EsX4DfSs/s1600-h/smssender.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_vo3dIfo5MKo/R7yYYFkVVdI/AAAAAAAAAAc/R35EsX4DfSs/s320/smssender.png" alt="" id="BLOGGER_PHOTO_ID_5169174011893339602" border="0" /&gt;&lt;/a&gt; modem.  I typed in the number of my cell phone, a test message and clicked "Send."  The program took about 5 seconds and then came back with a notice that the message was sent successfully.  I received the SMS message on my phone a few seconds later.&lt;br /&gt;&lt;br /&gt;Now that I'd confirmed that the modem worked, all that was left was to configure the Operations Manager computer to use SMS messages.  To do this, launch the Operations Console.  Click on the Administration tab and click on the Settings icon on the left side.  Double-click on the Notifications icon on the right side, then click on the "Short Message Service" tab.  Click on the "Enable short message service notifications" checkbox and click OK.&lt;br /&gt;&lt;br /&gt;In order to receive alerts, two additional steps are required:  Create a recipient and create a subscription.&lt;br /&gt;&lt;br /&gt;To create a recipient, right-click on the Recipients icon on the left side and choose "New Notification Recipient."  Enter a display name, and click on the "Notification Devices" tab.  Click the Add button, then choose "Short Message Service" as the notification channel.  Enter the cell phone number in the Delivery address for the selected channel section and click Next.  &lt;span style="font-weight: bold;"&gt;IMPORTANT:  you must enter the phone number in the format + [country] [area code] [phone number].&lt;/span&gt;   For example, although I used 7045551212 in my SMS sender test to specify my North Carolina based cell phone, that number will not work in Operations Manager.  In OpsMgr, I had to specify: +17045551212.   To continue, modify the schedule as necessary, then click Next.  In the Notification device name, provide a name for the cell phone and click Finish.  Click OK to close the Notification Recipient Properties window.&lt;br /&gt;&lt;br /&gt;To create the subscription, right click on the Subscriptions icon on the left side and choose "New Notification Subscription."  This is where you will decide what type of alerts will be sent to the cell phone via SMS.  In the Subscription Name box, type something like "Urgent Alerts To Cell Phones."  Click on the Add button to add the recipient that you selected in the previous step.  Click on the Next button.  Complete the rest of the wizard, identifying which alerts you want to receive on your mobile phone as a text message.&lt;br /&gt;&lt;br /&gt;That's it!  It is surprisingly easy.  I was especially surprised to find that I didn't have to tell Operations Manager which modem to use to send the SMS message.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-6682556107325718034?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/6682556107325718034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=6682556107325718034' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/6682556107325718034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/6682556107325718034'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2008/02/how-to-configure-scom-2007-to-send-sms.html' title='How to configure SCOM 2007 to send SMS messages'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vo3dIfo5MKo/R7yTRlkVVbI/AAAAAAAAAAM/dZc5xZTOtyQ/s72-c/multitechmodem.png' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34678326.post-2287210285533151712</id><published>2008-02-07T14:40:00.001-05:00</published><updated>2008-02-07T14:49:04.660-05:00</updated><title type='text'>Stock Quotes Web Part Updated</title><content type='html'>I have updated the Stock Quotes web part to fix the overflow error when certain stocks would have very high volumes:&lt;br /&gt;&lt;br /&gt;System.OverflowException: Value was either too large or too small for an Int32.  at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at StockQuotes.StockQuotes.RenderStockQuotes()&lt;br /&gt;&lt;br /&gt;I have changed the parse object to be an uInt64, so it should be a while before we see enough volume to experience this problem again.&lt;br /&gt;&lt;br /&gt;You can download the updated version from the link in the main &lt;a href="http://svintinner.blogspot.com/2007/02/stockquotes-replacement-stock-quote.html"&gt;Stock Quotes post&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-2287210285533151712?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/2287210285533151712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=2287210285533151712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/2287210285533151712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/2287210285533151712'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2008/02/stock-quotes-web-part-updated_07.html' title='Stock Quotes Web Part Updated'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34678326.post-8321085735821189738</id><published>2007-03-28T11:00:00.000-04:00</published><updated>2007-03-28T11:03:22.393-04:00</updated><title type='text'>Updated directions for installing StockQuotes web part</title><content type='html'>I have updated the directions for installing the StockQuotes web part.   The new directions include a corrected SafeControls line (previously the case was incorrect).  I've also included some further directions for where to put the StockQuotes.DLL file and some additional troubleshooting steps.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://svintinner.blogspot.com/2007/02/stockquotes-replacement-stock-quote.html"&gt;http://svintinner.blogspot.com/2007/02/stockquotes-replacement-stock-quote.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-8321085735821189738?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/8321085735821189738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=8321085735821189738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/8321085735821189738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/8321085735821189738'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2007/03/updated-directions-for-installing.html' title='Updated directions for installing StockQuotes web part'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34678326.post-3129250703197796352</id><published>2007-02-09T09:41:00.003-05:00</published><updated>2008-05-14T16:00:32.014-04:00</updated><title type='text'>How to use Weather.com to replace the MSNBC weather web part</title><content type='html'>As most Sharepoint 2003 administrators know, Microsoft discontinued support for their MSNBC Web Parts on February 6, 2007 (&lt;a href="http://support.microsoft.com/kb/929197"&gt;KB 929197&lt;/a&gt;).     Here are some directions for replacing the MSNBC Weather web part by using data provided by Weather.com.&lt;br /&gt;&lt;br /&gt;If you look around the Weather.com website, you'll see a link for getting weather on your website using a "Weather Magnet."  Unfortunately the weather.com "Weather Magnet" does not work in Sharepoint because of the built-in FORM tags.  If you try to follow their directions to insert the script into a content-editor web part, the result is that none of the Sharepoint web part pane buttons will work.&lt;br /&gt;&lt;br /&gt;Fortunately, Weather.com provides another means of getting data to your Sharepoint users via an XML file.  Therefore you can use the built-in Microsoft XML Web Part to display this data.  Here are some quick directions:&lt;br /&gt;&lt;br /&gt;1. Sign up for the Weather Channel XML: &lt;a href="http://www.weather.com/services/xmloap.html"&gt;http://www.weather.com/services/xmloap.html&lt;/a&gt;.  As part of this process you will get a KEY to use when downloading the XML file from Weather.com.&lt;br /&gt;&lt;br /&gt;2. Download the SDK. Unzip the images from the SDK into a folder. I saved mine to my sharepoint server's wpresources directory in a folder called weather. Example: c:\Program Files\Common Files\Microsoft Shared\web server extensions\wpresources\weather\64x64&lt;br /&gt;(I believe that this directory is available on any default sharepoint server via http://server/_wpresources/).&lt;br /&gt;&lt;br /&gt;The XSL file expects to find the images in /_wpresources/weather, so if you place the images somewhere else, you should update the XSL source.&lt;br /&gt;&lt;br /&gt;3. Add a Microsoft XML web part to your sharepoint page.  Set the XML link to (text-wrapped):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;http://xoap.weather.com/weather/local/&lt;/span&gt;&lt;span style="font-style: italic;"&gt;28246&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;?cc=*&amp;amp;link=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;xoap&amp;amp;prod=xoap&amp;amp;par=&lt;/span&gt;&lt;span style="font-style: italic;"&gt;yourpartnerid&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&amp;amp;key=&lt;/span&gt;&lt;span style="font-style: italic;"&gt;yourkey&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(substitute your weather.com key, partnerid and your zip code)&lt;br /&gt;&lt;br /&gt;4.  Download my XSL file for weather.com from below, then click on the "XSL editor" button on the web part properties page and paste in the code from the attachment.&lt;br /&gt;&lt;br /&gt;You do NOT need to edit the XSL file. It uses variables from the XML file. For example, the variable {$zipcode} in the XSL file is replaced with the zip code in the XML file you receive from weather.com.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Here's a preview of what it looks like.  Note that the blue around the image is a result of the Internet Explorer PNG transparency bug.  The blue will not appear when using IE 7.0+ or Firefox.  If this is a problem for you, you can convert all the images from PNG format to GIF format and simply adjust the XSL.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://www.flakshack.com/blog/weatherWebPart.PNG" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flakshack.com/blog/weatherXSL.txt"&gt;Download XSL Template*&lt;/a&gt;  (last updated 5/14/200)&lt;br /&gt;&lt;br /&gt;*Please do not link your sharepoint sites directly to this file.  Instead, cut and paste the contents into your web part settings by clicking on the "XSL Editor" button.&lt;br /&gt;&lt;br /&gt;The XSL file and these directions are licensed under the Creative Commons Attribution 2.5 License.&lt;br /&gt;To view a copy of this license, visit &lt;a href="http://creativecommons.org/licenses/by/2.5/"&gt;http://creativecommons.org/licenses/by/2.5/&lt;/a&gt;&lt;br /&gt;or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco,&lt;br /&gt;California, 94105, USA.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;The services provided by Weather.com may be changed at any time. I am not associated with Weather.com in any way and I have no idea as to the legality of your use of this code with respect to downloading data from the Weather.com website. Please refer to Weather.com for any applicable copyright or usage information.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Finally&lt;/span&gt;&lt;br /&gt;If you find this helpful, please leave a comment here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-3129250703197796352?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/3129250703197796352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=3129250703197796352' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/3129250703197796352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/3129250703197796352'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2007/02/how-to-use-weathercom-to-replace-msnbc.html' title='How to use Weather.com to replace the MSNBC weather web part'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34678326.post-117037834605596408</id><published>2007-02-01T20:02:00.002-05:00</published><updated>2008-10-13T09:49:00.736-04:00</updated><title type='text'>StockQuotes - A replacement stock quote web part for Sharepoint 2003</title><content type='html'>&lt;span style="font-style: italic;"&gt;Update for Sharepoint 2007 users: Thomas Burke Holland has released a version of this web part for Sharepoint 2007.  Get it &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.codeplex.com/svstockticker"&gt;here&lt;/a&gt;&lt;span style="font-style: italic;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As most Sharepoint 2003 administrators know, Microsoft will discontinue support for their MSNBC Web Parts on February 6, 2007 (&lt;a href="http://support.microsoft.com/kb/929197"&gt;KB 929197&lt;/a&gt;).   Since I was unable to find a suitable replacement for the MSNBC Stock Quote web part, I decided to program my own using the stock data provided by Yahoo!.&lt;br /&gt;&lt;br /&gt;It is important to note that this web part is provided by me and I have nothing to do with Yahoo!.  All of the references to Yahoo! are meant to give them all the credit for the data.&lt;br /&gt;&lt;br /&gt;Here is a screenshot of the default web part:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.flakshack.com/blog/stockquotes.png" border="1" /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;In this next screenshot, you can see the settings window.  Here is where your users can identify the stocks they wish to track.  These stocks are a Sharepoint Personal setting, so they can be different for each user.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.flakshack.com/blog/stockquotes-settings.png" border="1" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;As you can see from the settings, there is an option to display the company name in addition to the stock symbol.  Here's a screenshot of what that looks like:&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.flakshack.com/blog/stockquotes-withnames.png" border="1" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Finally, if you select the display charts option in the settings, you will see charts of both the intra-day and weekly results for the stocks you've chosen.  Screenshot:&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.flakshack.com/blog/stockquotes-withcharts.png" border="1" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;To install this web part:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1.  Locate the directory where sharepoint portal server is installed  (i.e. C:\Inetpub\wwwroot).  You should see a web.config file in this location.&lt;br /&gt;&lt;br /&gt;2.  Edit the web.config file:&lt;br /&gt;2.1. In the safecontrols section, add the following line (note that this is case sensitive!):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;SafeControl Assembly="StockQuotes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=24291b4f7bc336a4" Namespace="StockQuotes" TypeName="*" Safe="True" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;2.2 Change the trust level to "Full."  You may skip this step if you are installing the web part to the GAC (not recommended for security reasons).&lt;br /&gt;&lt;br /&gt;&amp;lt;trust level="Full" originurl=""&amp;gt;&lt;br /&gt;&lt;br /&gt;2.3 Save the web.config file and run iisreset at a command prompt.&lt;br /&gt;&lt;br /&gt;2.4  In your sharepoint root directory (typically C:\Inetpub\wwwroot), create a directory called "bin" if it doesn't already exist.  Copy the StockQuotes.dll file into this new directory (C:\Inetpub\wwwroot\bin).  Be sure that the permissions on the bin directory and the file itself are the same as the wwwroot directory, otherwise you may see an "Access denied" error message.&lt;br /&gt;&lt;br /&gt;Alternatively, you may install the web part to the Global Assembly Cache by dragging the StockQuotes.dll file into C:\Windows\Assembly.  You must restart the server after doing this before the web part will work properly.  If you do this step, you can leave the trust level at "WSS_Minimal." Please note that the best practice is to install web parts in the bin directory instead of into the GAC.  Besides being better for security, it allows you to replace web parts without having to restart the whole server.&lt;br /&gt;&lt;br /&gt;3.  Import the StockQuotes.dwp file to load the web part on the page.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;***Please note that the stock symbols are currently stored as a sharepoint Personal property.  Some web part zones do not permit personalization (for example, the web part zones on the home page of the portal).  Therefore if you load this web part in one of these restricted zones, your users will not be able to customize the settings (although you can specify the settings under Shared View).  You will notice that the "Change Symbols" link is hidden when the web part is loaded in a restricted zone.&lt;br /&gt;&lt;br /&gt;If you have a single-portal web server, you can consider editing the template file to change a web part zone so that it can be personalized by the users.  To do this, edit:&lt;br /&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\TEMPLATE\1033\SPS\default.aspx&lt;br /&gt;Look for the web part zones at the bottom and change: AllowPersonalization="true"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;The services provided by Yahoo may be changed at any time.  I am not associated with Yahoo in any way and I have no idea as to the legality of your use of this code with respect to downloading data from the Yahoo.com website.  Please refer to Yahoo for any applicable copyright or usage information.  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My web part (StockQuotes.dll) and source code are licensed under the Creative Commons Attribution 2.5 License.&lt;br /&gt;To view a copy of this license, visit http://creativecommons.org/licenses/by/2.5/&lt;br /&gt;or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco,&lt;br /&gt;California, 94105, USA.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How To Get It&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flakshack.com/blog/StockQuotes.zip"&gt;Download (zip file containing .DLL file and source code)  &lt;/a&gt;- Last Updated 2/2/2008&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notes&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I have tested on a fresh install of Sharepoint Portal Server 2003 on both portal and wss pages.  The web part has not been tested with Sharepoint 2007.&lt;/li&gt;&lt;li&gt;Your web server must be able to contact the Yahoo Finance web servers.  Although the charts are downloaded directly by the users, the content of the stock quotes is downloaded by the server before the web part is rendered.  The file downloaded by the server is extremely small (it is a comma delimited file showing on the data on the screen).   Currently this data is not cached due to the variety of different searches your users may perform.  Therefore, this small data file is downloaded from Yahoo each time the web part is loaded by each user.  If you have a high-traffic web site, you will want to consider how this will impact the performance of your server.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Troubleshooting&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Assembly stockquotes.dll security permission grant set is incompatible between appdomains.&lt;/span&gt;&lt;br /&gt;Check the trust level setting in your web.config (typically c:\inetpub\wwwroot\web.config) and be sure that it is set to Full.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Error   Access is denied: 'StockQuotes'. &lt;/span&gt;&lt;br /&gt;Check the permissions on the StockQuotes.DLL file in the bin directory (typically c:\inetpub\wwwroot\bin).   To adjust these permissions, set both the bin directory and the dll file to inherit the permissions of the parent folder (on the file properties Security tab, click Advanced and click the checkbox to Allow inheritable permissions from the parent to propagate to this object...).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Web Part Error: This page has encountered a critical error. Contact your system administrator if this problem persists.   (on existing Sharepoint web parts)&lt;/span&gt;&lt;br /&gt;This can occur if the safecontrols line is not exactly correct.  In my instance miscapitalizing &lt;span style="font-style: italic;"&gt;Safe="True"&lt;/span&gt; as &lt;span style="font-style: italic;"&gt;safe="True"&lt;/span&gt; caused the built-in web parts to malfunction (note that the "S" must be capitalized).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;A Web Part or Web Form Control on this Web Part Page cannot be displayed or imported because it is not registered on this site as safe.  &lt;/span&gt;(when adding the web part to a page or viewing a page with the web part already added)&lt;br /&gt;This can be caused by 3 issues:  1.  The SafeControls entry in the web.config file is missing or incorrect, 2.  Sharepoint cannot find or access the StockQuotes.DLL (is it installed in the bin directory?  if installing in the GAC, did you reboot?), or 3. The DWP file you are importing contains incorrect information about the Assembly and Type info for the web part.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Finally&lt;/span&gt;&lt;br /&gt;If you use my web part, please send add a comment here.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-117037834605596408?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/117037834605596408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=117037834605596408' title='36 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/117037834605596408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/117037834605596408'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2007/02/stockquotes-replacement-stock-quote.html' title='StockQuotes - A replacement stock quote web part for Sharepoint 2003'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><thr:total>36</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34678326.post-116682476090270617</id><published>2006-12-22T16:26:00.000-05:00</published><updated>2006-12-22T17:06:11.080-05:00</updated><title type='text'>Updated Ajax RSS Web Part</title><content type='html'>I've updated my &lt;a href="http://svintinner.blogspot.com/2006/09/ajax-rss-web-part-for-sharepoint.html"&gt;Ajax RSS Web Part&lt;/a&gt; to include a fix.  The previous version would correctly present an error if the URL provided for the RSS feed did not exist or could not be accessed.  Unfortunately, if the remote server did exist but was too slow to respond, the Web Part would wait forever for the response.&lt;br /&gt;&lt;br /&gt;I ran into this recently when the Charlotte.com web server seemed to stop responding.   If I tried to load their web page in Internet Explorer, it would just continue loading and never error out.  As a result, our Sharepoint home page also appeared to lock up.&lt;br /&gt;&lt;br /&gt;If a web part page ever locks up on you, you can use the "magic" web part maintenance URL to disable any rogue web parts (the URL is 2 lines below):&lt;br /&gt;&lt;br /&gt;http://servername/_layouts/1033/spcontnt.aspx?PageView=Shared&amp;&lt;br /&gt;url=%2fdefault.aspx%3fMode%3dEdit%26PageView%3dShared&lt;br /&gt;&lt;br /&gt;This URL allows you to delete or close any web part in case you cannot access the web part page directly.&lt;br /&gt;&lt;br /&gt;In any case, I added the following code to launch the RSSFeed.Read() call in a separate thread and time it out when required.  The code will wait for 9 seconds for the remote web server to respond before it will abort the operation.&lt;br /&gt;&lt;pre style="font-size: 10px; font-family: 'lucida console',courier monospace;"&gt;&lt;br /&gt;'Create a separate thread to load the RSS Feed so we can&lt;br /&gt;'cancel if it is taking too long&lt;br /&gt;Dim threadSuccessful As Boolean = True&lt;br /&gt;Dim thread As New Thread(New ThreadStart(AddressOf GetRSSObject))&lt;br /&gt;Dim timeStart As DateTime = Now&lt;br /&gt;thread.IsBackground = True&lt;br /&gt;thread.Start()&lt;br /&gt;Do&lt;br /&gt;'If the thread finishes, then exit loop&lt;br /&gt;If Not thread.IsAlive() Then&lt;br /&gt;   Exit Do&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;'wait for 100 milliseconds so we don't tie up the CPU&lt;br /&gt;thread.Sleep(100)&lt;br /&gt;&lt;br /&gt;If DateDiff(DateInterval.Second, timeStart, Now) &gt; 10 Then&lt;br /&gt;   'If it has been 10 seconds, stop waiting&lt;br /&gt;   thread.Abort()&lt;br /&gt;   threadSuccessful = False&lt;br /&gt;End If&lt;br /&gt;Loop&lt;br /&gt;&lt;br /&gt;If threadSuccessful Then&lt;br /&gt;Dim timeToLive As Int32 = GetRSSFeedTTL()&lt;br /&gt;&lt;br /&gt;'Add the feed to the cache of the web server.  The cache entry should&lt;br /&gt;'expire when the next revision of the news feed is ready.&lt;br /&gt;context.Cache.Add(_rssURL, newsFeed, Nothing, _&lt;br /&gt; newsFeed.LastModified.AddMinutes(timeToLive), _&lt;br /&gt; TimeSpan.Zero, Web.Caching.CacheItemPriority.Normal, Nothing)&lt;br /&gt;Else&lt;br /&gt;errorDetail = "Timeout waiting for the &amp;lt;a href=""" &amp; _rssURL &amp;amp; _&lt;br /&gt;"""&amp;gt;specified news feed&amp;lt;/a&amp;gt; to respond."&lt;br /&gt;End If&lt;/pre&gt;&lt;br /&gt;I then moved the RSS code into its own sub:&lt;br /&gt;&lt;pre style="font-size: 10px; font-family: 'lucida console',courier monospace;"&gt;&lt;br /&gt;'-----------------------------------------------------------------&lt;br /&gt;'Code to populate the newsFeed object...called as a thread&lt;br /&gt;'-----------------------------------------------------------------&lt;br /&gt;Sub GetRSSObject()&lt;br /&gt;   newsFeed = RssFeed.Read(_rssURL)&lt;br /&gt;End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Please note that once an error occurs the Ajax functions are disabled.  Therefore, if you see the timeout error message once, the web part will not keep retrying in the background unless you refresh the whole page.&lt;br /&gt;&lt;br /&gt;You can dowload the updated code and compiled binary from &lt;a href="http://svintinner.blogspot.com/2006/09/ajax-rss-web-part-for-sharepoint.html"&gt;the main post&lt;/a&gt;.  If you've already installed it previously, just replace the AjaxRSS.dll with this updated version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-116682476090270617?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/116682476090270617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=116682476090270617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/116682476090270617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/116682476090270617'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2006/12/updated-ajax-rss-web-part.html' title='Updated Ajax RSS Web Part'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34678326.post-115870317938753606</id><published>2006-09-20T18:30:00.000-04:00</published><updated>2007-04-18T17:48:41.434-04:00</updated><title type='text'>Ajax RSS Web Part for Sharepoint</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29"&gt;Ajax&lt;/a&gt; is a relatively new way of programming web pages that allows a the web browser to interact with a web server without requiring entire page loads or form posts.  The most common example of a web page that uses Ajax is &lt;a href="http://maps.google.com/"&gt;Google Maps&lt;/a&gt;, where you will notice that the web page manages to keep feeding you new data without ever actually having to load a new page.&lt;br /&gt;&lt;br /&gt;I've spent the last 2 years programming a number of web parts for Microsoft Sharepoint Portal Server using Visual Studio.NET.   A few weeks ago, I finally found the time to test out the &lt;a href="http://www.ajaxpro.info/"&gt;Ajax.NET library&lt;/a&gt; and was instantly sold on using Ajax in all of my new web part projects.&lt;br /&gt;&lt;br /&gt;Like many companies, our Sharepoint home page is designed to be a central dashboard (meant to be left open all day) which allows users to quickly see information from all over the company.  Currently, our Sharepoint home page is configured to auto automatically reload every few minutes to keep the data fresh.  With Ajax, I'll be able to update the data in the web parts themselves instead of reloading the whole page.  The result has a more polished feel than a clumsy page refresh.&lt;br /&gt;&lt;br /&gt;The first step for the project was to create an &lt;a href="http://en.wikipedia.org/wiki/RSS_%28file_format%29"&gt;RSS&lt;/a&gt; news reader to replace the Microsoft XML reader that was currently being used.  You'll find details about this Ajax RSS News Reader below, installation instructions and downloads for the web part in either binary or source format.&lt;br /&gt;&lt;br /&gt;First, the obligatory screenshots:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Screenshot 1:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.flakshack.com/blog/ajaxrss-screenshot1.PNG" id="ajax3" align="middle" /&gt;&lt;br /&gt;&lt;/div&gt;Screenshot 2:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.flakshack.com/blog/ajaxrss-screenshot2.PNG" id="ajax3" align="middle" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Screenshot showing settings window:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.flakshack.com/blog/ajaxrss-settings.PNG" id="ajax3" align="middle" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-weight: bold;"&gt;Advantages/Features of this web part&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Web part automatically updates itself as long as the web page is open, ensuring the latest RSS feed data.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;News feeds are cached on the Sharepoint server so subsequent requests are answered from cache as long as the data is current.     The default refresh time is 5 minutes, but that may be overriden by a TTL within the feed itself, or in the web part settings.  To see the active TTL, look at the tooltip for the web part by mousing-over the web part title.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The web part automatically sets the title name according to the name on the RSS Feed.&lt;/li&gt;&lt;li&gt;Feed logo is optionally displayed as a watermark in the background so it doesn't take up space.&lt;/li&gt;&lt;li&gt;If only the title is displayed, the tooltip will show the summary of the article if you mouseover the link.&lt;/li&gt;&lt;li&gt;The web part uses the very hip &lt;a href="http://wiki.script.aculo.us/scriptaculous/show/Effect.Highlight"&gt;Scriptaculous Highlight Effect&lt;/a&gt; to show when the data has been refreshed.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;How to install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1.  Locate the directory where sharepoint portal server is installed  (i.e. C:\Inetpub\wwwroot).  You should see a web.config file in this location.&lt;br /&gt;&lt;br /&gt;2.  Edit the web.config file:&lt;br /&gt;2.1. In the &amp;lt;SafeControls&amp;gt; section, add the following line:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;SafeControl Assembly="AjaxRSS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=464e1ec8837b09fa" Namespace="AjaxRSS" Typename="*" Safe="True"&amp;gt;   &amp;lt;/SafeControl&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2.2.  (Updated) Add the following right above the last &amp;lt;/configuration&amp;gt; tag:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;location path="ajaxpro"&amp;gt;&lt;br /&gt;&lt;span style="padding-left: 10px;"&gt;&amp;lt;system.web&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="padding-left: 20px;"&gt;&amp;lt;httpHandlers&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="padding-left: 30px;"&gt;&amp;lt;add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro, Version=6.9.27.3, Culture=neutral, PublicKeyToken=4735ae9824c7d3ec"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="padding-left: 20px;"&gt;&amp;lt;/httpHandlers&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="padding-left: 10px;"&gt;&amp;lt;/system.web&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;/location&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.3  Change the trust level to "Full".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;trust level="Full" originurl=""&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2.4  Save the web.config file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.  Create a bin directory in the virtual server root (i.e. C:\Inetpub\wwwroot\bin) and copy the *.DLL files (AjaxPro.dll, AjaxRSS.dll and RSS.dll) into this location.&lt;br /&gt;&lt;br /&gt;4.  Copy the folder with the Script.aculo.us javascript files into the wpresources folder (ex: C:\Program Files\Common Files\Microsoft Shared\web server extensions\wpresources\scriptaculous)&lt;br /&gt;&lt;br /&gt;5.   Add the path (/ajaxpro) to the excluded paths in Sharepoint Central Administration:&lt;br /&gt;5.1  On the server, click on Start...All Programs...Sharepoint Portal Server...Sharepoint Central Administration.&lt;br /&gt;5.2  Click Configure virtual server settings from the Virtual Server List page  (this is under the Portal Site and Virtual Server Configuration section)&lt;br /&gt;5.3  Click on the virtual server you will be running the web part on.&lt;br /&gt;5.4  Click on "Define managed paths" (this is in the Virtual Server Management section).&lt;br /&gt;5.5  In the Add a New Path section, type:  /ajaxpro&lt;br /&gt;5.6  Change the type to "Excluded Path"&lt;br /&gt;5.7  Click on the OK button.&lt;br /&gt;&lt;br /&gt;6.  Open a command prompt and run &lt;span style="font-weight: bold;"&gt;iisreset&lt;/span&gt; to restart the web server.&lt;br /&gt;&lt;br /&gt;7.   Open Internet Explorer and go to the sharepoint site.  Import/upload the AjaxRSSReader.dwp file to load the web part on the page.&lt;br /&gt;&lt;br /&gt;7.  To test, simply assign a RSS feed to the URL settings and set the override to 1 (so it will update every minute).&lt;br /&gt;&lt;br /&gt;Ajax.NET code is available here:  &lt;a href="http://www.ajaxpro.info/"&gt;http://www.ajaxpro.info/&lt;/a&gt;&lt;br /&gt;Scriptaculous code is available here:  &lt;a href="http://script.aculo.us/"&gt;http://script.aculo.us/&lt;/a&gt;&lt;br /&gt;RSS library for .NET is available here:  &lt;a href="http://rss-net.sourceforge.net/"&gt;http://rss-net.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please refer to those sites or the source code for any applicable copyright information.&lt;br /&gt;&lt;br /&gt;My web part (AjaxRSS.dll) and the source code is licensed under the Creative Commons Attribution 2.5 License.  To view a copy of this license, visit &lt;a href="http://creativecommons.org/licenses/by/2.5/"&gt;http://creativecommons.org/licenses/by/2.5/ &lt;/a&gt;or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Download&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flakshack.com/blog/AjaxRSS.zip"&gt;Binary + Source&lt;/a&gt;  (zip)  * last updated 12/22/2006&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notes&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I have tested on a fresh install of Sharepoint Portal Server 2003.  The web part has not been tested with Sharepoint 2007.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The web part should not be installed in the GAC (Global Assembly Cache) as this will currently break the ajax functionality.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Finally&lt;/span&gt;&lt;br /&gt;If you use my web part, please add a comment here.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34678326-115870317938753606?l=svintinner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://svintinner.blogspot.com/feeds/115870317938753606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34678326&amp;postID=115870317938753606' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/115870317938753606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34678326/posts/default/115870317938753606'/><link rel='alternate' type='text/html' href='http://svintinner.blogspot.com/2006/09/ajax-rss-web-part-for-sharepoint.html' title='Ajax RSS Web Part for Sharepoint'/><author><name>Scott</name><uri>http://www.blogger.com/profile/08785160111186874744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://www.flakshack.com/blog/jordi1.jpg'/></author><thr:total>5</thr:total></entry></feed>
