Occasional rantings about Dynamics CRM/365, Power BI and Azure cloud. Taking the first small steps in machine learning, Python and algorithmic trading
Sunday, November 28, 2004
Web services discovery
When a .vsdisco file is requested, the .NET framework analyzes the directory in which the .vsdisco file is located, as well as that directory's subdirectories and returns markup that contains references to all web services in that directory and the directory's subdirectories (It is however possible to exclude some directories from being searched).
A vsdisco file would look this
<?xml version="1.0" ?>
<dynamicDiscovery xmlns="urn:schemas-dynamicdiscovery:disco.2000-03-17">
<exclude path="_vti_cnf" />
<exclude path="_vti_pvt" />
<exclude path="_vti_log" />
<exclude path="_vti_script" />
<exclude path="_vti_txt" />
</dynamicDiscovery>
Dynamic discovery is however disabled by default. With the .Net framework you had to remove the comments from the following lines in your machine.config. With the .Net framework 1.1 these lines are removed from the machine.config so you have to add them yourself.
<!--<add verb="*" path="*.vsdisco"
type="System.Web.Services.Discovery.DiscoveryRequestHandler,
System.Web.Services, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>-->
As you can see dynamic discovery is accomplished in ASP.NET by mapping the file name extension VSDISCO
to an HTTP handler that scans the host directory and subdirectories for ASMX and DISCO files. For more info about http handlers definitely take a look at Using HTTP Modules and Handlers to Create Pluggable ASP.NET Components
Saturday, November 27, 2004
WIFI
Is WIFI finally becoming mainstream? From personal experience I find it still not very easy to use and I actually got some problems after upgrading Windows XP to SP2. Before SP2, the connection speed switched between 1MB, 10 MB,... up untill 54 MB. Now, it just stops at 1MB and don't changes... anybody any ideas?
Well, one thing that has changed with SP2 for the better, is that you can actually repair your connection now. If you right clicked your connection pre SP2 and clicked repair, it just stalled... now it works.
Office 2003 development
Links
Essential tools for web designers (... or wannabee web designers like me)
Wednesday, November 24, 2004
Sketches
Tuesday, November 23, 2004
Information Bridge Framework - the sequel
Monday, November 22, 2004
InfoPathHelper : add offline support for InfoPath
Sunday, November 21, 2004
Migrating to SharePoint 2003
Microsoft KB820328: "SharePoint Portal Server 2001 will not function on Windows Server 2003 because of incompatibilities between the versions of the Microsoft Web Storage System and Microsoft Internet Information Services (IIS) 6. There are currently no plans to release an update to the Web Storage System in SharePoint Portal Server 2001 to make it compatible with Windows Server 2003."
There are some tools available to ease a migration, such as SPIN and SPOUT. SPOUT is a document library Export Tool for SharePoint. SPOUT will export the workspace document library content as an XML manifest file and the individual content files. The XML manifest files is used to describe the different objects and properties of the documents. After running, SPOUT will generate 3 files:
I did some testing with SPOUT a while ago, just to get an idea how fast it would be. I ran it in a test environment with Windows 2000SP4, 512 MB RAM,SharePoint Portal Server 2001 SP2a, .Net Framework 1.1. On average I got export times between 1 and 3 secs per file with file size as the most important factor. Even when this would run twice as fast in a production environment time is still a limiting factor, exporting about 100000 files would take about 27 hours. You should also take into account the size of manifest.xml file, since XML parsing can become quite troublesome when your XML files contain a lot of data. (Tip : use Xpath queries since XMLDom manipulations can be very memory intensive, qua memory usage can run as high as 10 times the original filesize.)
Number of files | Size manifest.xml | MBs exported | Duration | |
Test 1 | 69 | 96K | 42.9 | 41 sec |
Test 2 | 154 | 216K | 48.6 | 55 sec |
Test 3 | 280 | 396K | 56.8 | 1min11sec |
Test 4 | 709 | 982K | 167 | 3min6sec |
If you want to try out some alternative tools for export and import you should definitely check out this GotDotNext workspace. Before starting a migration, take a look at the following links:
Saturday, November 20, 2004
Friday, November 19, 2004
Reflector for .Net + addons
SharePoint : Ghosted vs unghosted pages
The concept of ghosted pages is something that you have to understand when customizing SharePoint. All items in SharePoint are by default stored in the database, but some aspx pages are not stored in the SharePoint database but on the file system, e.g. default.aspx for each site and also the search.aspx page for SharePoint Portal Server. These pages are called ghosted pages. These pages are pulled from the cache at runtime and therefore it will increase the scalability from the system since all uncustomized pages are reused accross all of the sites and there is no unnecessary data storage or retrieval.
But these ghosted can become unghosted when they are modified with e.g. FrontPage. However FrontPage is not the only culprit, when you modify one of these pages through webfolders with notepad, then the page will also become unghosted. These unghosted pages are stored in the database. Normally if a page which is used in a site definition is changed, this change will apply to all sites created with this site definition,but if you're page is unghosted this will not happen. There is also a slight performance impact of about 10% between ghosted and unghosted pages because the files are being read from the database instead of the cached filesystem. You can check if a page has become unghosted with ghosthunter utility or by checking the vti_hasdefaultcontent field obtained through the Properties property of the SPFile object.
There have been a lot of postings about ghosted and unghosted page and the role of Frontpage in this issue, take a look at them, they will provide more detail about for example the difference in parsing, so check them out
Wednesday, November 17, 2004
SharePoint development part I - Webparts
When we think about developing on the SharePoint platform, the first thing that comes to mind is webpart development but there are actually more development tasks with SharePoint:
- Web part development : one of the SharePoint development topics which gets the most attention
- Developing with SharePoint lists : involves creating xml schema definitions, writing SharePoint Object Model code, adding your own UI
- Writing custom workflow: SharePoint does not provide workflow out of the box but allows you to add your own workflow through the use of eventhandlers
- Customizing SharePoint UI : starts from simple things like changing stylesheets, images and logos to create completely new site templates
- Extending and customizing SharePoint search
In the coming weeks I will write more postings about SharePoint but in this first posting I'm going to focus on webpart development. You should approach webpart development as any other programming task.
- Make sure you understand the basics. A good article to start with is A developers introduction to webparts on MSDN or The definitieve hello world webpart from John Durant
- Think about the design, what you want to accomplish. Since webparts are basically enhanced ASP.Net server controls which live in SharePoint context, the number of options are immense. But you also have to think about the enhancements which are provided by the webpart framework. So if you want to just display data maybe think about using the dataviewwebpart for the moment and don't immediately start with a datagrid. Know the potential of connectable webparts. Definitely check out the 3 articles from Patrick Tisseghem:
- Webpart basics
- Webparts and usercontrols : this is definitely the fastest way to develop webparts, instead of writing everything yourself, you can use usercontrols which are loaded by the webpart
- Connectable webparts
- Webpart basics
- Developing and debugging For debugging definitely check out this posting
Debugging Web Parts - a full explanation of the requirements Something which is also easily forgotten is that you can also force a debug from within your code with the following statement System.Diagnostics.Debugger.Break() - Deploying and testing: Deploying webparts isn't that simple, but there are some nice tools out there to help you with the deployment such as InstallAssemblies. I recommend however doing all the steps manually a couple of times, this will help your understand how SharePoint works. One of the nicest tools to aid in deployment is wppackager. WPPackager will create MSIs to install the webparts. For testing your webparts you should take a look at
Testing webparts checklist on MSDN
More links
Tuesday, November 16, 2004
My boss is blogging and also....
Monday, November 15, 2004
Enterprise Library and Application blocks
I have been using the .Net application blocks for quite a while now and it is great to see that they will have a successor in the future, check out the blog of Scott Densmore,Enterprise Library 'The Day After'.For those of you who don't know the application blocks, take a look at them. Application blocks are basically parts of code which can be freely downloaded from MSDN, they contain samples and source code so you can easily extend them. They are written with best practices in mind and are nicely documented.
Overview application blocks
Sunday, November 14, 2004
Heathers resume blog idea
MSN Search beta
:-(
If you want to know what other people say about it, take a look at
Saturday, November 13, 2004
Office Information Bridge Framework (IBF)
Office Information Bridge Framework (IBF) is a new solution that provides a standardised way for developers to integrate data from enterprise applications (CRM,HR, ERP,...) into Office. IBF is an example of a service oriented architecture in which your LOB applications are connected to Office through a webservices layer. At the clientside IBF leverages the smart tag and smart document functionality of Office 2003 Professional.
Links
Office for Small Business Management
will includes the familiar Microsoft Office 2003 programs as well as an updated version of Microsoft Office Outlook 2003 with Business Contact Manager and Microsoft Office Small Business Accounting—a new, comprehensive financial management package. So also take a look at http://msdn.microsoft.com/isv/technology/sba/ I guess that when Microsoft will get the localization issue right, it will even become popular worldwide. But don't put your bets on it yet , II overheard saying that Microsoft seems to think that localization is the difference between English UK and English US, ... :-)
Friday, November 12, 2004
MSCMS - Disabling delete for authors
The last couple of months I have been doing a lot of Microsoft Content Management Server (MSCMS) development and I think it definitely allows you to do some cool stuff. For those of you who don't know, MSCMS allows users without any html knowledge or special tools to publish content to a corporate website while maintaining a common look and feel and supporting an approval process for all of your published content.
The product has however some shortcomings and last week the functional analyst of our project stumbled on one of them. For every posting you can define an approval process with authors, editors and moderators, so after an author creates a posting, the editor first approves the layout and then the moderator approves the content (This is a very quick overview). So for about every change, you need to go through this approval process EXCEPT for deletion of postings
The obvious thing todo to disable the delete for authors was to add an ASP.Net panel control around the delete section in the defaultconsole.ascx and put it to visible false when a user had no editor or approve rights. Well this doesn't seem to be very simple:
So basically I'm stuck, anybody any ideas....
Gotdotnnet CMS code samples and more
Thursday, November 11, 2004
SOA - Part 2
Tuesday, November 09, 2004
What I'm reading.
Sunday, November 07, 2004
Service Oriented Architecture (SOA) and other stuff....
One of the hottest topics lately seems to be Service Oriented Architecture and how to implement it. But it is also a major source of confusion and I think that for most developers, SOA is still a big mystery. The main problem seems to be that we have to translate these high level concepts to low-level code, because in the end we just like to write code. However I still think that SOA is an important concept that every developers needs a basic understanding about, so the next couple of weeks I'm going to try to write some posting about SOA, providing some summaries of presentations that I saw and links to interesting sites and blogs.
Lets start with the basics, what is SOA? At PDC 2003 Pat Helland gave a presentation about SOA. The key message was the following:
Definitely check out Pats blog if you want to read more interesting stuff...
A couple of months later I saw a presentation from Clemens Vasters, he mainly talked about the same concepts but things got a little clearer. There are only 2 types of services, message producers and message consumers. The messages flow through "pipelines", a pipeline is a sequence of services and each service transforms the message. He also gave some concrete tips :
Now if you want to know more about it, check out:
Is it going too fast?
Blogger went down
java.lang.RuntimeException: Unable to load blog object for blogID: 7753577
at com.pyra.blogger.UserBlog.getBlog(UserBlog.java:176)
at org.apache.jsp.blog_pyra._jspService(blog_pyra.java:589)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356)
at com.pyra.blogger.frontend.PyraJspDispatchPipe.invoke(PyraJspDispatchPipe.java:83)
at com.google.servlet.pipe.ServletPipe.invokeNextPipe(ServletPipe.java:118)
at com.google.servlet.pipe.StatsPipe.invoke(StatsPipe.java:64)
at com.google.servlet.pipe.ServletPipe.invokeNextPipe(ServletPipe.java:118)
at com.google.servlet.pipe.PendingRequestPipe.invoke(PendingRequestPipe.java:31)
at com.google.servlet.pipe.ServletPipe.invokeNextPipe(ServletPipe.java:118)
at com.google.servlet.pipe.HttpRedirectPipe.invoke(HttpRedirectPipe.java:43)
at com.google.servlet.pipe.ServletPipe.invokeNextPipe(ServletPipe.java:118)
at com.pyra.blogger.frontend.IdentityCookiePipe.invoke(IdentityCookiePipe.java:137)
at com.google.servlet.pipe.ServletPipe.invokeNextPipe(ServletPipe.java:118)
at com.google.servlet.exceptionhandling.ExceptionHandlerPipe.invoke(ExceptionHandlerPipe.java:99)
at com.google.servlet.pipe.ServletPipe.invokeNextPipe(ServletPipe.java:118)
at com.google.servlet.pipe.LocaleContextPipe.invoke(LocaleContextPipe.java:134)
at com.google.servlet.BaseServlet.doGet(BaseServlet.java:89)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
.... and so on.
Friday, November 05, 2004
How to create a webpart in ASP 2.0
Thursday, November 04, 2004
More Office 12 details ...
Wednesday, November 03, 2004
Citrix Metaframe 3.0
The last couple of days I worked at a customer who was using Citrix Metaframe Presentation Server 3.0, it was the first time that I saw this product and I have to admit that I'm impressed. It enables user to start their everyday applications from within a browser environment. It was great to see that the web interface used ASP.Net and the nice thing is that you can completely customize it. If you run into problems, definitely check out the Citrix support site .
After developing the UI we deployed it to a production server on which a previous version of Metraframe was running as well so we didn't do an install but copied the directory with the files and created the necessary virtual directories. Everything worked except the ICA files were not correctly handled. It seemed that we still associate the ICA extension with the aspnet dll in IIS.
After installing ASP.Net, we however noticed that some of the users which were still using the Citrix 1.5, had problems logging into the web applications. They got a very strange error "error while encoding a gif file". It seems that while installing ASP.Net some userrights were removed. If you encounter this error, just give the anonymous user access to the nfuseicons directory
Integrating SharePoint and Content Management Server
One of the most posed questions lately seems to be how do we integrate SharePoint and Content Management Server. People often start working together on documents in SharePoint and later want to publish this document in an easy way to CMS (That authors can't work together on a CMS posting - because of the locking principle - is definitely a missing feature in CMS). With the release of SharePoint Connector for Content Management Server (Previously codenamed Spark) in february 2004- some things were solved.
In short the connector enables the following :
- Content from CMS can be displayed in SharePoint webparts
- Documents in SPS can be exposed to MCMS managed sites
- Integrating SPS search with the content in CMS
Miscellaneous links
- Emmanuel Desigaud wrote a paper that shows how to integrate SharePoint Server 2003 Search into a MCMS site using a WebService
- If you need more info about CMS in general, check out the blog of Stefan Gossner and Mark Harrison. These are definitely resources you can't affort to miss.
- Review of the MCMS Connector for SharePoint Technologies by Stephen Huen. He also added a set of user controls to Code Project, which are used to Search CMS with SharePoint
- How to maintain a Microsoft Content Management Server database
Tuesday, November 02, 2004
Webparts in ASP.Net 2.0 vs SharePoint webparts
Monday, November 01, 2004
SharePoint in only 28 steps ;-)
SharePoint multilinguage features
When you are living in a country which has 3 official languages like me - yes we have Dutch, French and German in Belgium - multilanguage definitely becomes an issue when doing a portal implementation. Unfortunately multilanguage is not a very strong feature in SharePoint. Windows SharePoint Services allows you to choose a different language at the moment of site creation when you install language packs, once the site is created it is not possible to switch the language anymore. For SharePoint Portal Server it is even worse, it only support the language of the SharePoint installation, so if you want to have a French Portal you have to install the French version of SharePoint Portal Server. There are however some articles which can guide you, but better multilanguage functionality is definitely something I want to see in the next version of SharePoint. One of the things I noticed which were very hard to find where the way of working of thesaurus files in SharePoint.The best documentation is found in the SPS 2001 Resource Kit and still seems to be correct. Another interesting document is the one on Technet which describes the international features of SharePoint 2003.
I tried out the feature of expansion sets in SharePoint 2003 and how it works with files which have different languages and different formats. SharePoint uses thesaurus files to enhance its search functionality. The thesaurus allows you not only to search for the search term, but also for synonyms and other matching words, like words with the same stem. You can expand the thesaurus by adding tags to the thesaurus file(s). For example, when a user searches for ‘apple*’, you want to automatically search for ‘pomme*’ and ‘appel*’ as well so that documents containing the French and Dutch translations of the word ‘sugar’ will be added to the search results. This is an example of stemming. An expansion set for the word "author" is for example that it searches for documents containing "writer"
There are different thesaurus files for every language, these are xml files - e.g. tsneu.xml is the neutral thesaurus file,tseng.xml is for English, tsnld.xml is for Dutch. The easiest way to test it, is to modify the xml files at local_drive\Program Files\SharePoint Portal Server\Data\Applications\Application UID\Config and then restart the service Microsoft SharePointPS Search.
I added the following lines to the xml files
<expansion>
<sub weight="0.5">author</sub>
<sub weight="0.5">writer</sub>
</expansion>
Well it seems that depending of the file type a different thesaurus file will be used, this happens because of the way how iFilters are implemented.
Then I tried the search for different file types :
Miscellaneous SharePoint links: