<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel xmlns:blog="http://www.dotnetnuke.com/blog/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
    <title>Vicenç Masanas</title>
    <description>My personal blog on DotNetNuke.</description>
    <link>http://www.dotnetnuke.com/Resources/Blogs/BlogId/7.aspx</link>
    <language>en-US</language>
    <webMaster>vmasanas@hotmail.com</webMaster>
    <pubDate>Wed, 23 May 2012 17:03:59 GMT</pubDate>
    <lastBuildDate>Wed, 23 May 2012 17:03:59 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 4.0.0.0</generator>
    <item>
      <title>Everthing you always wanted to know about the DotNetNuke package installer</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2854/Everthing-you-always-wanted-to-know-about-the-DotNetNuke-package-installer.aspx</link>
      <description>&lt;p&gt;&lt;a title="sdc1" href="http://www.flickr.com/photos/55139215@N08/5127372177/"&gt;&lt;img style="margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; float: left;        border-width: 0px;border-style: solid;" alt="sdc1" src="http://farm5.static.flickr.com/4010/5127372177_3329292d4c.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Early this week I was at the great &lt;a href="http://www.dotnetnuke.comwww.sdc.nl" target="_blank"&gt;OpenForce Europe&lt;/a&gt; conference organized by the SDN at The Netherlands.     &lt;br /&gt;
As always it's been a great conference with lots of great sessions and plenty of opportunities to meet some old DNN friend and made some new ones! Networking (and drinking beers) is as important as good sessions, and we have had both of them!&lt;/p&gt;
&lt;p&gt;At my session "DotNetNuke installation manifest file (.dnn) explained!" we took a deep look at all the options provided by DotNetNuke for a installing all kind of Extensions (libraries, modules, providers, skins, ...).&lt;/p&gt;&lt;div class="category"&gt;Category: &lt;a href=http://www.dotnetnuke.com/Resources/Blogs/CatID/9.aspx&gt;Development&lt;/a&gt;&lt;/div&gt;</description>
      <author>vmasanas@hotmail.com</author>
      <category domain="http://www.dotnetnuke.com/Resources/Blogs/CatID/9.aspx">Development</category>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2854/Everthing-you-always-wanted-to-know-about-the-DotNetNuke-package-installer.aspx#Comments</comments>
      <slash:comments>1</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2854/Everthing-you-always-wanted-to-know-about-the-DotNetNuke-package-installer.aspx</guid>
      <pubDate>Sat, 30 Oct 2010 06:13:00 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2854</trackback:ping>
    </item>
    <item>
      <title>Google Sitemap Provider for DotNetNuke</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2404/Google-Sitemap-Provider-for-DotNetNuke.aspx</link>
      <description>&lt;p&gt; At &lt;a href="http://www.sdc.nl"&gt;&lt;u&gt;&lt;font color="#800080"&gt;OpenForce Europe &lt;/font&gt;&lt;/u&gt;&lt;/a&gt;I showed how to create a&lt;strong&gt; new provider feature for DotNetNuke&lt;/strong&gt;. In this case it was a provider for creating Sitemaps (see &lt;a href="http://www.sitemap.org"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;www.sitemap.org&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;) for google search optimization. In DNN 5 we added a few options to better support sitemaps but the implementation was still very simple.&lt;/p&gt;</description>
      <author>vmasanas@hotmail.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2404/Google-Sitemap-Provider-for-DotNetNuke.aspx#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2404/Google-Sitemap-Provider-for-DotNetNuke.aspx</guid>
      <pubDate>Sat, 07 Nov 2009 14:58:00 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2404</trackback:ping>
    </item>
    <item>
      <title>Interesting week ahead: CodeCamp, OF, and more!</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2380/Interesting-week-ahead-CodeCamp-OF-and-more.aspx</link>
      <description>&lt;p&gt; &lt;/p&gt;</description>
      <author>vmasanas@hotmail.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2380/Interesting-week-ahead-CodeCamp-OF-and-more.aspx#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2380/Interesting-week-ahead-CodeCamp-OF-and-more.aspx</guid>
      <pubDate>Sat, 10 Oct 2009 07:06:00 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2380</trackback:ping>
    </item>
    <item>
      <title>DotNetNuke install wizard translations</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2245/DotNetNuke-install-wizard-translations.aspx</link>
      <description>&lt;p&gt; &lt;/p&gt;</description>
      <author>vmasanas@hotmail.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2245/DotNetNuke-install-wizard-translations.aspx#Comments</comments>
      <slash:comments>5</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2245/DotNetNuke-install-wizard-translations.aspx</guid>
      <pubDate>Sat, 09 May 2009 11:19:00 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2245</trackback:ping>
    </item>
    <item>
      <title>DotNetNuke event in Alicante - Spain</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/1888/DotNetNuke-event-in-Alicante-Spain.aspx</link>
      <description>&lt;p&gt;(If you don't understand spanish, you'd better don't come, because we'll not have translators &lt;img alt="" src="/Providers/HtmlEditorProviders/Fck/FCKeditor/editor/images/smiley/msn/wink_smile.gif" /&gt;. The event will also be available online thanks to Microsoft)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Soluciones Web Empresariales con DotNetNuke&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nos complace invitarle al segundo evento sobre DotNetNuke organizado por la comunidad en españa TodoDNN.es. DotNetNuke es el CMS (Sistema de Gestión de Contenido) líder desarrollado en ASP.NET el cual es de libre distribución y código libre (Open Source). Promocionando este tipo de software disponemos de la colaboración de Microsoft MSDN España entre otras empresas. La asistencia es gratuita y puede registrarse a dicho evento al final de este mensaje.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fecha&lt;/strong&gt;: 25 de Julio de 2.008 &lt;br /&gt;
&lt;strong&gt;Lugar&lt;/strong&gt;: &lt;a href="http://www.centrodenegociosalicante.com/"&gt;Centro de Negocios de Alicante&lt;/a&gt; (Alicante)&lt;br /&gt;
&lt;strong&gt;Agenda&lt;/strong&gt; &lt;br /&gt;
16:00-16:30 Bienvenida e introducción a DNN &lt;br /&gt;
16:30-17:45 Localización en DotNetNuke (Vicenç Masanas) &lt;br /&gt;
17:45-18:15 Descanso &lt;br /&gt;
18:15-19:30 Plataforma de negocios para ISPs (Francisco Pérez)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Organiza&lt;/strong&gt;: TodoDNN.es &lt;br /&gt;
&lt;strong&gt;Colaboradores&lt;/strong&gt;: MSDN España, Disgrafic ITec, Dotware, 2P Systems, Xepient Solutions y Live Data Security.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032381363&amp;Culture=es-ES"&gt;Registro Presencial&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032381361&amp;Culture=es-ES"&gt;Registro Webcast&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;a href=http://www.dotnetnuke.com/Resources/Blogs/EntryId/1888/DotNetNuke-event-in-Alicante-Spain.aspx&gt;More ...&lt;/a&gt;</description>
      <author>vmasanas@hotmail.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/1888/DotNetNuke-event-in-Alicante-Spain.aspx#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/1888/DotNetNuke-event-in-Alicante-Spain.aspx</guid>
      <pubDate>Fri, 04 Jul 2008 11:03:00 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=1888</trackback:ping>
    </item>
    <item>
      <title>RAD with DotNetNuke</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/1804/RAD-with-DotNetNuke.aspx</link>
      <description>&lt;p&gt;Next week I'm presenting DNN as a successfull tool for Web RAD on Madrid and Barcelona thanks to Microsoft Spain. If you're around come by and say hello. It will be an introductiory session on what DNN is but also we'll see some of the new features DNN Cambrian will give us.&lt;/p&gt;
&lt;p&gt;More information and registrations: &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032375244&amp;Culture=es-ES"&gt;Madrid&lt;/a&gt;, &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032375246&amp;Culture=es-ES"&gt;Barcelona&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;a href=http://www.dotnetnuke.com/Resources/Blogs/EntryId/1804/RAD-with-DotNetNuke.aspx&gt;More ...&lt;/a&gt;</description>
      <author>vmasanas@hotmail.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/1804/RAD-with-DotNetNuke.aspx#Comments</comments>
      <slash:comments>3</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/1804/RAD-with-DotNetNuke.aspx</guid>
      <pubDate>Wed, 16 Apr 2008 17:44:00 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=1804</trackback:ping>
    </item>
    <item>
      <title>Big sites, big modules, big problems? Easy solution!</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/1713/Big-sites-big-modules-big-problems-Easy-solution.aspx</link>
      <description>&lt;p&gt;I've been fighthing for long with an issue we have on a quite big installation (75+ portals, 6500+ pages, 11000+ modules).&lt;br /&gt;
The issue only manifested when installing some modules and it would cause the application to die because of a timeout, so we were unable to install any new modules.&lt;/p&gt;
&lt;p&gt;The problem turned out to be in the way the installer process the .dnn file and how it updates the module information.&lt;br /&gt;
Basically it went that way:&lt;br /&gt;
- Register the DesktopModules&lt;br /&gt;
- Register any ModuleDefintions for the modules&lt;br /&gt;
- Register all the ModuleControls for all definitions&lt;/p&gt;
&lt;p&gt;So in a medium-large module this could be like 4-5 modules, 10-12 moduledefinitions, and 30-40 controls.&lt;br /&gt;
The problem is that in each of these updates the system did a clear on the host cache. So all the information that DNN uses to cache was cleared after each of these updates (so around 50 times). That caused that the same information was read again from the db after each call causing at the end the timeout.&lt;/p&gt;
&lt;p&gt;The issue with this problem is that it would only appear in big sites and when installing big modules. This it's like and exponential issue: the bigger the site and the bigger the module the easier you'll get this error.&lt;/p&gt;
&lt;p&gt;We changed the code so next version will include the fix for this but in the meantime you can patch your DNN installations by doing this easy fix (this applies to any DNN version up and including 4.8). To solve this issue you'll have to open the DotNetNuke solution in VS.NET and recompile the DotNetNuke.dll:&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;u&gt;PaDnnInstallerBase.vb&lt;/u&gt;&lt;/strong&gt;, look for method:&lt;br /&gt;
&lt;em&gt;Protected Overridable Sub RegisterModules(ByVal Folder As PaFolder, ByVal Modules As ArrayList, ByVal Controls As ArrayList)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;change the following calls:&lt;br /&gt;
&lt;em&gt;objDesktopModules.UpdateDesktopModule(objDesktopModule)&lt;br /&gt;
objModuleDefinitons.UpdateModuleDefinition(objModuleDefinition)&lt;br /&gt;
ModuleControlController.UpdateModuleControl(objModuleControl)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;to:&lt;br /&gt;
&lt;em&gt;objDesktopModules.UpdateDesktopModule(objDesktopModule, &lt;strong&gt;&lt;font color="#ff0000"&gt;False&lt;/font&gt;&lt;/strong&gt;)&lt;br /&gt;
objModuleDefinitons.UpdateModuleDefinition(objModuleDefinition, &lt;font color="#ff0000"&gt;&lt;strong&gt;False&lt;/strong&gt;&lt;/font&gt;)&lt;br /&gt;
ModuleControlController.UpdateModuleControl(objModuleControl, &lt;strong&gt;&lt;font color="#ff0000"&gt;False&lt;/font&gt;&lt;/strong&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;and just before this line, at the end of the method code:&lt;br /&gt;
&lt;em&gt;InstallerInfo.Log.EndJob(REGISTER_End)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;add&lt;br /&gt;
&lt;strong&gt;&lt;font color="#ff0000"&gt;&lt;em&gt;DataCache.ClearHostCache(True)&lt;/em&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;u&gt;DesktopModuleController.vb&lt;/u&gt;&lt;/strong&gt; change:&lt;br /&gt;
&lt;em&gt;Public Sub UpdateDesktopModule(ByVal objDesktopModule As DesktopModuleInfo)&lt;br /&gt;
    DataProvider.Instance().UpdateDesktopModule(objDesktopModule.DesktopModuleID, objDesktopModule.ModuleName, objDesktopModule.FolderName, objDesktopModule.FriendlyName, objDesktopModule.Description, objDesktopModule.Version, objDesktopModule.IsPremium, objDesktopModule.IsAdmin, objDesktopModule.BusinessControllerClass, objDesktopModule.SupportedFeatures, objDesktopModule.CompatibleVersions, objDesktopModule.Dependencies, objDesktopModule.Permissions)&lt;br /&gt;
    DataCache.ClearHostCache(True)&lt;br /&gt;
End Sub&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;to:&lt;br /&gt;
&lt;em&gt;Public Sub UpdateDesktopModule(ByVal objDesktopModule As DesktopModuleInfo)&lt;br /&gt;
 UpdateDesktopModule(objDesktopModule, True)&lt;br /&gt;
End Sub&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Friend Sub UpdateDesktopModule(ByVal objDesktopModule As DesktopModuleInfo, ByVal clearCache As Boolean)&lt;br /&gt;
 DataProvider.Instance().UpdateDesktopModule(objDesktopModule.DesktopModuleID, objDesktopModule.ModuleName, objDesktopModule.FolderName, objDesktopModule.FriendlyName, objDesktopModule.Description, objDesktopModule.Version, objDesktopModule.IsPremium, objDesktopModule.IsAdmin, objDesktopModule.BusinessControllerClass, objDesktopModule.SupportedFeatures, objDesktopModule.CompatibleVersions, objDesktopModule.Dependencies, objDesktopModule.Permissions)&lt;br /&gt;
 If clearCache Then DataCache.ClearHostCache(True)&lt;br /&gt;
End Sub&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;u&gt;ModuleDefinitionController.vb&lt;/u&gt;&lt;/strong&gt; change:&lt;br /&gt;
&lt;em&gt;Public Sub UpdateModuleDefinition(ByVal objModuleDefinition As ModuleDefinitionInfo)&lt;br /&gt;
    DataProvider.Instance().UpdateModuleDefinition(objModuleDefinition.ModuleDefID, objModuleDefinition.FriendlyName, objModuleDefinition.DefaultCacheTime)&lt;br /&gt;
    DataCache.ClearHostCache(True)&lt;br /&gt;
End Sub&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;to:&lt;br /&gt;
&lt;em&gt;Public Sub UpdateModuleDefinition(ByVal objModuleDefinition As ModuleDefinitionInfo)&lt;br /&gt;
 UpdateModuleDefinition(objModuleDefinition, True)&lt;br /&gt;
End Sub&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Public Sub UpdateModuleDefinition(ByVal objModuleDefinition As ModuleDefinitionInfo, ByVal clearCache As Boolean)&lt;br /&gt;
 DataProvider.Instance().UpdateModuleDefinition(objModuleDefinition.ModuleDefID, objModuleDefinition.FriendlyName, objModuleDefinition.DefaultCacheTime)&lt;br /&gt;
 If clearCache Then DataCache.ClearHostCache(True)&lt;br /&gt;
End Sub&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And finally in &lt;strong&gt;&lt;u&gt;ModuleControlController.vb&lt;/u&gt;&lt;/strong&gt; change:&lt;br /&gt;
&lt;em&gt;Public Shared Sub UpdateModuleControl(ByVal objModuleControl As ModuleControlInfo)&lt;br /&gt;
    provider.UpdateModuleControl(objModuleControl.ModuleControlID, objModuleControl.ModuleDefID, objModuleControl.ControlKey, objModuleControl.ControlTitle, objModuleControl.ControlSrc, objModuleControl.IconFile, CType(objModuleControl.ControlType, Integer), objModuleControl.ViewOrder, objModuleControl.HelpURL, objModuleControl.SupportsPartialRendering)&lt;br /&gt;
    DataCache.ClearHostCache(True)&lt;br /&gt;
End Sub&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;to:&lt;br /&gt;
&lt;em&gt;Public Shared Sub UpdateModuleControl(ByVal objModuleControl As ModuleControlInfo)&lt;br /&gt;
 UpdateModuleControl(objModuleControl, True)&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Public Shared Sub UpdateModuleControl(ByVal objModuleControl As ModuleControlInfo, ByVal clearCache As Boolean)&lt;br /&gt;
 provider.UpdateModuleControl(objModuleControl.ModuleControlID, objModuleControl.ModuleDefID, objModuleControl.ControlKey, objModuleControl.ControlTitle, objModuleControl.ControlSrc, objModuleControl.IconFile, CType(objModuleControl.ControlType, Integer), objModuleControl.ViewOrder, objModuleControl.HelpURL, objModuleControl.SupportsPartialRendering)&lt;br /&gt;
 If clearCache Then DataCache.ClearHostCache(True)&lt;br /&gt;
End Sub&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;now recompile and just copy DotNetNuke.dll to your DNN installation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As always remember to make a copy of your files before doing any upgrade and try it on a testing site.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Conclusion:&lt;br /&gt;
Caching is a very important thing since it can save your application from the most expensive db calls (and in DNN we have quite a few of those).&lt;br /&gt;
But it's also very important to understand how it is used and check that your code is working fine in different situations.&lt;/p&gt;&lt;br /&gt;&lt;a href=http://www.dotnetnuke.com/Resources/Blogs/EntryId/1713/Big-sites-big-modules-big-problems-Easy-solution.aspx&gt;More ...&lt;/a&gt;</description>
      <author>vmasanas@hotmail.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/1713/Big-sites-big-modules-big-problems-Easy-solution.aspx#Comments</comments>
      <slash:comments>15</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/1713/Big-sites-big-modules-big-problems-Easy-solution.aspx</guid>
      <pubDate>Sat, 26 Jan 2008 09:59:00 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=1713</trackback:ping>
    </item>
    <item>
      <title>OpenForce material</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/1629/OpenForce-material.aspx</link>
      <description>I've just posted the material for the presentations I did both in OpenForce Europe and USA.
Get them &lt;a href="http://dnnjungle.vmasanas.net/Home/OpenForce07/tabid/126/Default.aspx"&gt;here&lt;/a&gt;.</description>
      <author>vmasanas@hotmail.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/1629/OpenForce-material.aspx#Comments</comments>
      <slash:comments>3</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/1629/OpenForce-material.aspx</guid>
      <pubDate>Thu, 08 Nov 2007 16:03:41 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=1629</trackback:ping>
    </item>
    <item>
      <title>Recommendation for a Book Reader / TabletPC</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/1514/Recommendation-for-a-Book-Reader-TabletPC.aspx</link>
      <description>&lt;p&gt;&lt;img height="128" hspace="30" width="195" align="right" vspace="30" alt="" src="/Portals/25/CoreTeam/BlogFiles/vmasanas/PRS500U2.jpg" /&gt;I've been thinking lately on getting something like the &lt;a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/ProductDisplay?catalogId=10551&amp;storeId=10151&amp;langId=-1&amp;productId=11038811"&gt;Sony Book Reader&lt;/a&gt;. You know with so many information on the net I'm very used to download documents, manuals, even blogs! and read them offline at night. Since I'm not a top computer geek I'm not very familiar with this kind of hardware. I was thinking also that maybe a simple &lt;a href="http://www.tabletpcreview.com/"&gt;TabletPC&lt;/a&gt; or &lt;a href="http://www.windowsmarketplace.com/content.aspx?ctId=392&amp;tabid=1"&gt;ultramobile pc&lt;/a&gt; would do the job, but I'm not sure.&lt;/p&gt;
&lt;p&gt;Has to be something realy slim and portable and easy to read with, something you would take with you to bed ( well, not for that you are thing of...).&lt;/p&gt;
&lt;p&gt;The idea is that it should be mainly for reading and other features as a bonus. Any suggestion?&lt;/p&gt;&lt;br /&gt;&lt;a href=http://www.dotnetnuke.com/Resources/Blogs/EntryId/1514/Recommendation-for-a-Book-Reader-TabletPC.aspx&gt;More ...&lt;/a&gt;</description>
      <author>vmasanas@hotmail.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/1514/Recommendation-for-a-Book-Reader-TabletPC.aspx#Comments</comments>
      <slash:comments>4</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/1514/Recommendation-for-a-Book-Reader-TabletPC.aspx</guid>
      <pubDate>Wed, 15 Aug 2007 09:34:49 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=1514</trackback:ping>
    </item>
    <item>
      <title>Installing and upgrading modules in DNN, a developer's view</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/1246/Installing-and-upgrading-modules-in-DNN-a-developers-view.aspx</link>
      <description>&lt;p&gt;There's some misunderstanding on how DotNetNuke Modules are installed and which steps are executed during a module installation or upgrade.&lt;br /&gt;
I'll try to cover both scenarios on this post and I hope this helps to get a clearer idea of how this works.&lt;/p&gt;
&lt;p&gt;Let's first take a look at &lt;span class="SubHead"&gt;what happens when a module is installed:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;As you may know all the internal versioning of modules (and even the core itself) is built around the &lt;strong&gt;&lt;version&gt;&lt;/strong&gt; node on the .dnn installer manifest and the sql scripts that are included in the installation zip.&lt;/p&gt;
&lt;p&gt;When the module is installed DNN will run all sql scripts with a number lower or equal than the one specified in the &lt;version&gt; node. Finally the version in that node will be saved on the DesktopModules table. This will help the core on future upgrades so it can know what version is currently installed.&lt;/p&gt;
&lt;p&gt;First thing to note here: A given xx.xx.xx.SqlDataProvider script will only be run once. So no matter how many times you reinstall the same module, each sql script will only run once. This is great because otherwise you will see lots of errors when (for example) trying to create a table that already exists.&lt;br /&gt;
This gives to another point: if you had some trouble with a module (for example you removed a stored procedure accidentally during development), repeating the same process again (without first deinstalling the module) will not produce the same result.&lt;br /&gt;
So don't expect that reinstalling the same version that's currently installed will solve that problem. Can solve others, but not problems with the database.&lt;/p&gt;
&lt;p&gt;Another thing that happens when you install a module is that it fires the "UpgradeModule" method if the module implements the IUpgradeable interface.&lt;/p&gt;
&lt;pre&gt;Public Interface IUpgradeable&lt;br /&gt;  Function UpgradeModule(ByVal Version As String) As String&lt;br /&gt;End Interface&lt;/pre&gt;
&lt;p&gt;In fact this method will be called once after any sql script has been executed and it will be passed the version number of the current script. So you have to code your upgrade logic knowing that this method can be called multiple times. This is usually done testing for the Version parameter on a "select case" statement.&lt;br /&gt;
The method call will be routed through the EventQueue system after the web application is restarted. A minor difference with regards to how the sql scripts are executed exists though: even if there's no sql script on the module, this method will be called at least once. This is needed to be sure that at least the upgrade logic is executed, even if no sql script exists. So if you are installing a module whose final version will be 03.03.03, be sure that UpgradeModule will be called at least once with that version number.&lt;/p&gt;
&lt;p&gt;Also notice that all UpgradeModule(..) calls will be made after all sql scripts have already run. This is true because they will be fired after the application is restarted and the end of the module installation process.&lt;br /&gt;
So again, be sure not to do something "strange" on your upgrade logic, assuming that the database has a special structure. For example query a given stored proc, you know in version 01.01.01 existed, because the code will be executed when all scripts for version 03.03.03 are already installed and maybe that stored proc. doesn't exist anymore.&lt;/p&gt;
&lt;p&gt;On first time installations this is more or less all that's involved. Upgrading a module has a couple of differences worth noting.&lt;/p&gt;
&lt;p&gt;&lt;span class="SubHead"&gt;What happens when a module is upgraded:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Execution of sql scripts is more or less the same: each file with a version number greater than the current version number stored on the DesktopModules table, and less or equal than the number included in the &lt;version&gt; node of the .dnn installer manifest will be run in order.&lt;/p&gt;
&lt;p&gt;After each xx.xx.xx.SqlDataProvider script is run, the core will search for a corresponding "xx.xx.xx.txt" file on the upgrade package. This file can contain a list of files you want to remove from older versions of your module. You have to specify a file on any line using the relative path from the root of the DNN installation. For example:&lt;br /&gt;
bin\DotNetNuke.Modules.Survey.dll&lt;br /&gt;
bin\DotNetNuke.Modules.Survey.SqlDataProvider.dll&lt;br /&gt;
DesktopModules\Survey\c.gif&lt;/p&gt;
&lt;p&gt;So if this file is 03.03.03.txt, and there's a 03.03.03.SqlDataProvider file, it will be "executed" just after the sqlscript and before the UpgradeModule for this version.&lt;br /&gt;
This is also another point where you have to make attention: the delete file will only be processed if there's a related sql script. &lt;br /&gt;
Afterwards the application is restarted all the UpgradeModule(...) will be called for each sql script that has been run before. Again, UpgradeModule will be called at least once for the final version (the one in the &lt;version&gt; node) , even if no sql script exists.&lt;/p&gt;
&lt;p&gt;I hope this brief explanation helps to understand how DNN processes modules during installation and successive upgrades.&lt;/p&gt;&lt;br /&gt;&lt;a href=http://www.dotnetnuke.com/Resources/Blogs/EntryId/1246/Installing-and-upgrading-modules-in-DNN-a-developers-view.aspx&gt;More ...&lt;/a&gt;</description>
      <author>vmasanas@hotmail.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/1246/Installing-and-upgrading-modules-in-DNN-a-developers-view.aspx#Comments</comments>
      <slash:comments>17</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/1246/Installing-and-upgrading-modules-in-DNN-a-developers-view.aspx</guid>
      <pubDate>Tue, 09 Jan 2007 23:28:00 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=1246</trackback:ping>
    </item>
  </channel>
</rss>
