Since the release of Squiggle 1.0, we’ve received plenty of feedback and feature requests. Newer version has one of the most demanding features “File Transfer”. Squiggle can now help you exchange documents with your colleagues.

    You can download the latest version of Squiggle from http://squiggle.codeplex.com/

    Overroot is pleased to announce the release of yet another product “Squiggle”. Squiggle is a free LAN messenger designed for instant messaging within small and medium offices. Squiggle, having a simple and intuitive user interface, is an easy to use LAN chat solution for your LAN or a private network. It is based on peer-to-peer technology and requires no dedicated server or an internet connection.

    You can download Squiggle from http://squiggle.codeplex.com/

    Following are the key features of Squiggle. 

    • Server-less LAN chat.
    • System tray notifications for online users.
    • Taskbar notification for new messages.
    • Set a display message.

    If you have any suggestions, comments or you’re willing to participate in this open source project, then please send us an email at info [at] overroot [dot] com

    SharePoint quite often performs slow because of the fact that every bit of information served by SharePoint is saved in a database including images, documents, list data, dynamic pages, e.t.c.

    There are different ways of improving performance some of which are mentioned on Chris O’Brien’s blog. We know that SharePoint is a ASP.NET application and there are many established techniques for improving performance of a ASP.NET website or any website in general, that can be applied to SharePoint as well.

    The ones I’m going to talk about are those which do not require any programming.

    • Minify and combine Javascript and CSS
      This reduces the no. of request a browser makes for retrieving and rendering a page. When we combine multiple javascript files and minify the final file, we’re effectively reducing ‘N’ no. of requests to one and the downloaded payload is also smaller in size. Add client side  caching to this and same client won’t even request the same set of javascript files on any subsequent pages.

      NCachePoint and Aptimize provide this in their SharePoint performance accelerator products.

    • CSS Sprites (Combine Images)
      Combine images into a single image and use CSS sprite technique to render different portions of that image on the page. This also helps in reducing the no. of trips a browser makes to the server. This technique can also take advantage of client side caching.

      NCachePoint and Aptimize provide this in their SharePoint performance accelerator products.

    • Session Caching
      Saving sessions in database allows you to share the session among multiple servers in your farm but the database becomes the bottle neck for the SharePoint farm. To get around this you can save your sessions in a distributed cache which can allow you to get rid of sticky routing and still not be dependent on a single machine to serve the sessions.

      NCachePoint allows you to cache your sessions in a distributed cache that comes free with it.

    • List Caching
      SharePoint makes heavy use of list data which is stored in database. Database is optimized to store relational data then why is the performance of lists not optimal?
      In SharePoint all  list data is stored in a single table called AllUserData. This table has a long list of columns  that can save every perceivable type of data in each column of a list entry.

      Since a user can  define any type of list with any no. of columns of any type, querying this table becomes difficult and hence quite inefficient.

      One way to get around this is to cache the output of lists and serve the cached output each time list is retrieved.

      NCachePoint provides the list caching feature.

    • ViewState Caching
      With so many web parts loaded on a single SharePoint page, we get many ASP.NET controls loaded at the same time all of which have to save some state that needs to be preserved across postbacks. Typically viewstate is saved in the page that is rendered to the browser and it goes back and forth between post backs (User clicks and interaction with the controls).

      You can use a 3rd party solution to cache view state in a distributed cache and
      prevent this payload from traveling between the server and client for effectively reducing the request size and quicker response time.

      NCachePoint provides viewstate caching for SharePoint

    • Externalize the BLOBs to RBS or EBS
      All documents that are uploaded in SharePoint, are saved in database as BLOBs. This makes your SharePoint database grow abnormally large and bloated. Sql Server is optimized for relational data not BLOB data and hence saving blobs in database has a severe performance hit. If you externalize the blobs to EBS (External BLOB storage) or RBS (Remote Blob
      Storage), you’ll not only see performance gain but also you can use a cheaper storage
      to save the BLOBs and hence save yourself from storage cost.

      EBS was an interface provided with WSS/MOSS 2007 where as RBS is an interface provided by Sql Server 2008. EBS is supported both in SharePoint 2007 and SharePoint 2010 where as RBS can only be used with SharePoint 2010 and Sql Server 2008.

      NCachePoint, AvePoint, StoragePoint all provide EBS and RBS for SharePoint for BLOB externalization.

    If you buy an off the shelf solution for increasing SharePoint performance you can
    save yourself from the cost of development and maintenance of any custom solution
    which could potentially be error prone if not done right.

    Alachisoft has recently released NCachePoint 2.0 (BETA) which has all the above mentioned features and is available at http://www.alachisoft.com/ncachepoint/index.html

    Their product sits in front of a distributed cache which saves all your content so the lookup of any resource is amazingly fast and helps a lot in improving performance of SharePoint farm. The good news is that they have a free edition called NCachePoint Express which can be used on WSS 2007 and SharePoint Foundation 2010 (WSS 2010).

    I’m glad to announce that what started as a side project, has now been adapted by Overroot i.e. Stack Overflow Client.

    Version 1.0 has been released which periodically checks the active questions list and shows you popup from system tray.

    Screen shot of StackOverflow desktop client

    StackOverflow notifier popup

    Your feedback will help us a great deal so if you want a feature or report a bug please do so on http://stackoverflowclient.codeplex.com

    There have been updates in the client since I last blogged about the SO client. Since the first version received some attention I thought there might be people who are just interested in downloading the client instead of building one so I quickly added some features, cleaned it up and upload the binaries on http://stackoverflowclient.codeplex.com

    In order to turn that sample into a working client I had to add another class called StackOverflowNotifier.

        class StackOverflowNotifier
        {
            event EventHandler LoggedIn;
            int PollInterval { get; set; }
            event EventHandler QuestionsReceived;
            event EventHandler RequestLogin;
            void Start();
            void Stop();
        }
    

    As you can see the class polls the stackoverflow active questions page periodically and downloads all the questions. The Start method, starts the timer that raises its ‘Tick’ event after regular intervals.
    It was important to use the System.Windows.Forms.Timer timer because it raises the tick events on the UI thread and you can not interact with the WebBrowser control from a non UI thread.

    The default polling interval is 2 minute as of now and when the questions are downloaded you are notified in system tray via a popup only if there are any questions received with ‘Interesting’ attribute set to true.
    Though the latest list of questions is updated in the list view so you can click on the tray icon to view the current list of questions.

    I found a very nice Tray notification control for WPF at http://www.hardcodet.net/projects/wpf-notifyicon which I used in the project. I used the FancyBaloon user control shipped in its samples and modified it so that it can be bound to a collection view so I can put the next/previous buttons and allow user to navigate through questions from the same popup instead of showing 10 different popups.

    The above mentioned minor re-factoring helped clean up the code in the MainWindow. I also fixed a couple of bugs and added a trace listener that shows popup on the tray if the client barfs on exception while parsing the html.

    Thats pretty much it. Go get your copy of the latest version and start answering some questions on SO

    Introduction

    If you’ve discovered this blog post via search engine most likely you want to build a StackOverflow desktop client. Someone once said ‘talk is cheap, show me the code’ so you can go straight to http://stackoverflowclient.codeplex.com/ and download the code sample that logs you into StackOverflow site and shows you all the latest posts in a WPF application.

    StackOverflow client as we know it is a popular site for asking programming related questions. One of the great things about this site is that it has a reputation system in which you get upvoted for the right answers and downvoted for the wrong answers. What this means is that people with higher reputation are most likely very smart people like Jon Skeet and Marc Gravell. However if you have low reputation this could also mean that you do not have time to visit the site more often and answer more questions. This is exactly why you would need a desktop client for SO. Without boring you with further introductory information lets get straight to the code.

    Design

    There are many ways in which you can build a client for SO

    1. Monitor the RSS feeds and show desktop popups (Easiest but not very useful)
    2. Log into the site using WebClient class and maintain the sessions (Harder way and can be easily detected and blocked unless done right)
    3. Put a Web Browser control on your form and simulate navigation on it, read and parse the html to extract information (Medium difficulty and can easily break with css/markup changes but they are not very frequent.)

    I chose the 3rd way of building the client.
    So essential ingredients for writing a client in WPF/C# for SO using the 3rd methods are as follows:

    A question on StackOverflow can be represented by a class with following definition

    class Question
    {
    public Uri Url { get; set; }
    public string Title { get; set; }
    public bool Interesting { get; set; }
    public int Votes { get; set; }
    public int Answers { get; set; }
    public int Views { get; set; }
    }

    All the information in this class can be easily populated by parsing the home page of the SO site.
    The bool interesting property tells if you’ve marked the tag as interesting on your SO profile which highlights the questions for you so you can easily find questions that have the same tags in which you’re interested.

    So for parsing the html of the page you will need a component in your code called StackOverflowParser.
    I’ll cut the implementation details here and just tell you what services each component provides.
    So the Parser currently has two methods

    public IEnumerable GetQuestions(string html){}
    public bool IsLoggedIn(string html){}
    

    Both the methods take html of a page and return you some information based on the parsed html (using HtmlAgilityPack).

    To determine that you’re logged in the IsLoggedIn just checks for a link to logout page in the html “/users/logout”. This link would only appear on a page if you’re logged in.

    To get the questions from the home page, the GetQuestions method finds all the divs with id “question-summary”. These divs contain all the questions and information related to them that can be parsed into Question object.

    Now that the basic parsing component is ready we need a component that uses this parser and navigates on the site to particular pages that have the relevant html on them.
    For this you need a StackOverflowNavigator component. This component currently has following methods:

    public void BeginNavigateToHome(Action callback){}
    public void BeginGetActiveQuestions(Action> callback){}
    public void EnsureLoggedIn(Action action){}
    

    And following events

    public event EventHandler RequestLogin = delegate { };
    public event EventHandler LoggedIn = delegate { };
    

    BeginNavigateToHome asynchronously navigates the WebBrowser control (which is passed in the constructor) to the Home Page and then executes the action that you’ve passed as callback.

    BeginGetActiveQuestions similarly navigates to the home page, parses out the questions and raises the callback that you’ve passed. This method also ensures that you’re logged in using EnsureLoggedIn method because ‘bool interesting’ property of Questions can only be populated if you’re logged in hence it checks if you’re not logged in then it raises the ReqestLogin event. The form on receiving this event should open up a window with the same WebBrowser control on it and make it visible because the navigator will have navigated the page to the login page of SO site.

    When the user enters his login/password SO redirect the person to the home page. The navigator constantly monitors the Web Browser control and on each navigation it checks where the user is now logged in and as soon as the user is logged in it raises the LoggedIn event. This is when you can hide the window because user is now logged in and soon your call back of activequestions will be raised because thats one of the pending tasks the navigator had to do.

    As soon as you get the callback with questions you can then iterate over the questions and show popups on desktop to notify the user about new questions.

    You will obviously need to keep last set of questions to make sure that you don’t show the popups repeatedly.

    The code sample on codeplex simply shows the active questions on WPF window in a ListBox control. Since Overroot is going to pursue some other ideas as our upcoming products you are free to take this project from here and build a complete SO client on it.

    If you want to contribute to this project contact hasan#overroot$com (Replace # with @ and $ with .)
    If you have any trouble understanding the code just leave a comment on this post or send me an email.

    Happy coding!

    Event logging is a standard way for applications to record important events. Most of the windows applications log their messages, warnings and errors in event log.

    Microsoft SharePoint Server, although, has it’s own centralized logging mechanism but it does not log it’s messages to event log. SharePoint LogViewer has a new feature in it’s most recent version (v2.5) to record all or few of the events in window’s event log. You can select the minimum SharePoint severity level from which the logs should be reported to event log.

    In SPLV, we used System.Diagnostics.EventLog class to write messages to event log.
    Following is the C# code to write log entries to event log.

    string source = "Demo Application";
    if (!EventLog.SourceExists(source))
    EventLog.CreateEventSource(source, "Application");
    EventLog.WriteEntry(source, "Message!", EventLogEntryType.Error);
    

    Although, these lines of code work fine, it, however, requires the application to run under the administrator’s account otherwise it may throw a System.Security.SecurityException.

    To have this feature working in SPLV, we recommend it’s users to run SPLV under the administrative privileges.

    SPLV 2.5 has all the promised features and more.
    A complete list of features currently available is as under:

    • View multiple SharePoint log files at once
    • Search by any field
    • Filter the log by any field
    • File drag & drop support
    • Live monitoring for entire farm
    • Export filtered log entries
    • Bookmark log entries
    • Get popup notification of SharePoint log events from system tray
    • Receive email notifications on errors
    • Redirect log entries to event log
    • SharePoint 2010 Support
    • Run at startup

    Share Point Log Viewer 2.5 is the best log viewer available now at http://sharepointlogviewer.codeplex.com
    We’ll be releasing its website soon. stay tuned.

    SharePoint Log Viewer 2.5 will have the following features:

    • Minimize log viewer to tray
    • Get popup notification of SharePoint log events from tray
    • Redirect log entries to event log
    • Send email notifications on errors

    SPLV is the only actively developed and continuously updated log viewer for WSS/MOSS 2007/2010.

    As promised we’ve released the v2.0 of SharePoint Log Viewer.
    You can now monitor ULS logs of entire farm by simply running it on one machine.
    No installation or configuration required to make it work.
    You can monitor the entire farm as long as you have Windows File Sharing feature enabled.

    With this release we’ve also fixed a lot of bugs so this is now the ultimate choice for viewing and monitoring SharePoint logs.