Feeds:
Posts
Comments

Archive for the ‘Uncategorized’ Category

Let’s rename the Internet of Things! #letsrenametheIOT

Why? Because it’s an old-fashioned buzzword!

Read more here: The “Internet of Things” sounds just stupid.

More on my new blog JACKED IN.

Read Full Post »

JACKED IN

Since the beginning of the year, I am pursuing a masters degree in international journalism at a Scottish university.

As such, I have had the great pleasure to talk with a former FT.com editor about my blog here at Scilogs.com, and she gave me great advice. Moreover, one of our first assignments is to come up with a multimedia blog.

These are some key takeaways of my current blogs’ analysis:

  • Use lots of images
  • Use lots of links
  • Use a blog roll
  • Write preferrably short pieces
  • Use a compelling layouts and graphics
  • Create unique content

Short and sweet: Today, I launch a new blog (which is kind of a spin-off of this one). Of course, I will continue contributing to Scilogs/Algoworld and writing about algorithms and prediction models.

The new blog is called JACKED IN, and it is less scientific but more about how technology secretly runs our lives.

Some of the topics will be:

  • The Internet of Things
  • Cyborgs
  • Sci-fi movie reviews
  • Tech projects that influence our future lives

You can read more about it here: Welcome to JACKED IN!

The first post is about a case for renaming the “Internet of Things”.

Are you jacked in?

Martin

Read Full Post »

Dear readers,

I have decided to discontinue this blog and not further publish posts on SharePoint. Thank you for more than 160,000 visits!

I am now writing a blog on algorithms and science, which is hosted at http://www.scilogs.com The blog is called Algoworld:

Algoworld is all about algorithms, mathematical and computer models and how they influence and shape our daily lives. They are either inspired by science, or they are aiding it.
The models and algorithms you will find here deal with the prediction of hurricanes, earthquakes, health and crime (and many more to come!), but also with solving engineering problems like traffic jam optimization. Many of these algorithms are strongly interwoven with the analysis of scientific “big data” – hence they are also facing its implied problems.

You can find it here: Algoworld – algorithms meet science.

I hope to see you there!

Best wishes,
Martin W. Angler

Read Full Post »

Dear all,

The developer dashboard is a very handy tool in Microsoft SharePoint Server 2010, when it comes to analyzing how your site is loading and finding potential bottlenecks. It displays information about databases, webservices, the current page itself and so on. You can see an example of the developer dashboard here. Once enabled, it can be found scrolling at the bottom of the page you want to analyze.

The Developer Dashboard

There are three states the developer dashboard can be in:

  • On: Displayed
  • Off: Not displayed
  • On Demand: Can be toggled by the user.

And you have three possibilities of turning it on or off:

  • STSADM.exe
  • PowerShell
  • SharePoint COM

In this post, we’ll just focus on the STSADM.exe method, since it is the fastest one. STSADM.exe is located in the HIVE folder of SharePoint 2010 (usually “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\”, and there in the “BIN” folder).

The STSADM.exe Method:

On:  stsadm -o setproperty -pn developer-dashboard -pv on

Off:  stsadm -o setproperty -pn developer-dashboard -pv off

On Demand:  stsadm -o setproperty -pn developer-dashboard -pv ondemand

Turning it on “On Demand” creates a new button in the menu, which is shown in the following picture:

On Demand Developer Dashboard Toggle Button

On Demand Developer Dashboard Toggle Button

That’s it! The command takes a few seconds to run and then quits with a “Operation successful” message.

Best regards and stay tuned till the next time,

Martin

Read Full Post »

Dear all,

this week is just awesome! After receiving the Microsoft Community Contributor 2011 Award,

it is a great great pleasure & honour to announce that today I have been awarded with the Microsoft Most Valuable Professional Award as of July 2011, in the field of SharePoint Server 2010!

This means I am the first SharePoint MVP in South Tyrol and one of only a hand full in Italy!

It is awarded by Microsoft for outstanding commitment and contributions in technical communities and it is an appreciation for the voluntary work of contributing to the community.

I am really enjoying having received this award and I’m looking forward to be contributing even more to the Microsoft SharePoint, and even more: to join the network of the MVPs worldwide. Currently, there are 4,000+ MVPs in 90 countries worldwide, and about 180 German-speaking MVPs, among which I am (plus Italian & English 😉 ).

 

It is a great motivation to carry on like this, and I’m looking forward to contribute many more times! Thanks to the community, and thanks to Microsoft!

 

Now I’m looking forward to 2 weeks of holidays in Calabria, Italy and will check back with all of you on July, 18th.

 

Best regards,

Martin

Read Full Post »

I just received the Microsoft Community Contributor Award!
Microsoft Community Contributor Award 2011

Today, while watching TV, I received an email from support@microsoftcommunitycontributor.com. It was stating:

Congratulations! We’re pleased to inform you that your contributions to Microsoft online technical communities have been recognized with the Microsoft Community Contributor Award.

The Microsoft Community Contributor Award is reserved for participants who have made notable contributions in Microsoft online community forums such as TechNet, MSDN and Answers. The value of these resources is greatly enhanced by participants like you, who voluntarily contribute your time and energy to improve the online community experience for others.

[…]

This is a great honor to me to be awarded with this recognition. After all, it’s a great pleasure to dedicate time and to contribute something meaningful to the community. So thanks, Microsoft for awarding me the MCC award, and thanks also to the unknown promotors who have proposed me for this.

This is a big motivation for going on like until now. So I’m looking forward to many, many more contributions!

Thanks and best regards,

Martin

Read Full Post »

Hi fellows,

Today I released the first version of the WADA Visual Studio 2010 extension for web developers – it enables you to being able to attach processes to the VS debugger – not simple processes, but the w3wp. I guess, some of you know the issue:

  • > 1 application pools
  • > 1 w3wp processes

How could we know which process is right for being debugged by us? First, we could use one of the numerous scripts out there (like iisapp.vbs for Windows 2k3), but they provide poor integration into the VS2010 IDE (actually none at all). This is where the strengths of using WADA come into play.

What this Tool Can Do:

  • List all w3wp processes, along with the application pool names
  • List w3wp processes for a specific application pool
  • Attach a selected process to the debugger

Why should I Choose This over Scripts?

  1. You can remain in the IDE
  2. Directly attach W3WP to the Debugger (not possible with e.g. iisapp.vbs)
  3. Filter by Application Pool of Interest (not possible with e.g. iisapp.vbs)
  4. No more need for manually matching IDs (from script output) against the “Attach to Process” window’s process list

Is it Bulletproof?

No. Not at all. Please be aware that this extension comes in its first version and may contain errors and/or undesired behaviour. It also assumes that you have administrative rights on the machine you are working with it (also VS must be run in administrator mode). Hence, I’d like to emphasize that I cannot be held liable for any usage of the code causing undesired behaviour, loss of data, any damages caused to any soft- or hardware (including source code) of the user. Please do not try it in production environments. It is intended for testing purposes only.

In case you intend to test it, it would be really nice if you provided some feedback on it using the post.

Screenshot

WADA_Screenshot

Usage

  1. Go to View -> Other Windows -> WADA Advanced Attacher
  2. Select Application Pool of Interest (optional, otherwise all will be considered)
  3. Click “Get Procs” (ensure that “Only W3WP” is checked)
  4. Select Process from list
  5. Click “Attach”

Download

WADA 1.0 (Visual Studio Gallery)

Installation is done simply through double-clicking on the downloaded .vsix package.

I hope you enjoy it!

Best regards,

Martin

Read Full Post »

Howdy folks,

Here we are back again with an introduction of the new features of the upcoming Visual Studio 2010. Its release has been postponed to the 12th of April, so in the meantime we’ll have to stick to the Beta 2, which is pretty stable already. There are so many improvements that we’ll have to divide it into multiple parts. Let’s dive right in!

1. UI: WPF-Based

The UI is now WPF based, which means a better usability and more extensibility options for us developers. Clearly, introducing VS2010 as a WPF-based application is a big push in the direction of visualization and diagramming. We’ll see later how this can be performed using the new IDE.

The editor, for example, is now WPF-based. Cool, but what does that mean for us? Here are the advantages:

Change font size w/ mouse only, or better: No more Options->Change font size during presentations!

Extension Manager allows easy-to-install-and-use add-ins: Also from online galleries – Single click install and enabling!

Highlighting of related variable/method names (Figure 1)

clip_image002

Figure 1: Highlighting related variable. Note that the highlighter correctly references only the name variable passed as a parameter

You can navigate between the highlighted elements using CTRL + SHIFT and the ARROW keys!

2. Intellisense – Improvements:

Method Matching: When VS2010 brings up the list of available methods (after you typed something), it performs not a simple .StartsWith name comparison, but a .Contains. This leads to the results shown on the next screenshots:

Filtered list is gone: When typing letters, the auto completion list that pops up won’t give you all objects/methods/variables that start with the same letter, but only those who are truly related. Consider Figure 3: We typed IF. In the old version, VS would have brought up not only the items shown in the completion list, but possibly many many more, all starting with I (but not containing or continuing with F). Now the IntelliSense search is narrowed, which makes it a lot easier for the developer to select the correct entry.

clip_image004

Figure 2: Highlighting the related object/variable/method.

Case sensitivity: Another nice feature highlighted in figure 2 is the Pascal-Case typing of the capital letters IF, which brings correctly up our method, since its signature contains both I and F as of the method name. Try typing If (f is lowercase), and you won’t find the IsFasterThan method in the auto completion list anymore.

3. References dialog improvements

Remember the Add References dialog in figure 3?

clip_image006

Figure 3: Add references underwent some perception changes.

First of all, Microsoft realized that most people are using it to reference other projects, so they brought up the Projects tab by default. But that’s not all: We all LOVED to wait 30 seconds for the list of .NET or COM objects to appear, right? Because of that, while we are browsing by default the projects, VS2010 is asynchronously loading the available assemblies already. Saves time and nerves.

4. Search and Navigation

Let’s press CTRL + , anywhere in the editor. The window Navigate To will appear, providing us a very powerful search across the entire solution. The search results are updated as we type. From here, we can navigate directly to the found item. Figure 4 shows the dialog.

clip_image008

Figure 4: The Navigate To dialog is a powerful search and navigation mechanism, providing also essential information about the found items. Big improvement over the VS2008 style’s CTRL+SHIFT+F (and subsequent find results crawling without navigation to the desired item)!

5. Call Hierarchy

Remember the Find All References option in the editor’s context menu? It provided us information about where a method/variable has been used. Tell you what. We have a much more powerful way of doing this now: The Call Hierarchy option (Figure 5).

clip_image010

Figure 5: Context menu for the IsFasterThan method, highlighting the new View Call Hierarchy option.

This is the result: A list of all callers (“Calls To”) and callees (“Calls From”) of IsFasterThan (Figure 6). Every caller/callee can be expanded into its own callers/callees. As of figure 6, e.g. Main. This is a really expressive feature which outperforms Find All References by far. However, a possible drawback might be that you could expand the list to infinity by alternating the caller/callee relationship. Figure 6 shows the resulting

image

Figure 6: The View Call Hierarchy window, showing callers/callees of IsFasterThan.

6. Project dialog with search and .NET version selection

Figure 7 shows the improved New Project dialog.

clip_image012

Figure 7: The NewProject dialog. Please note the search field in the right upper corner and the .NET framework dropdown list (center), where now also version 4 of the .NET framework is available.

7. Code Snippets

The code snippets are accessible via the Tools menu, or by pressing the shortcut CTRL + K, CTRL + B

Additional snippets are now available also for HTML, JavaScript and SQL. In sub-categories you can find the different snippets already provided by VS2010. Moreover, you can add your own snippets (as we already know from previous VS versions), as well as remove and import snippets. Figure 8 shows the Code Snippets dialog.

clip_image002[1]

Figure 8: The Code Snippets dialog, showing the newly available languages, as well as subcategories in the Code Snippets Manager.

8. Environment settings: Code Optimized

One more newly available feature is a new default environment setting (remember you had to choose which default settings you wanted to use when starting VS2010 for the first time?). There is one newly available feature which will simply allow you to reduce your viewport to only the code when developing (hence removing the designer). If you have already chosen your first-time-startup environment settings: Don’t worry! The next screenshot explain how you can access the new Web Development (Code Optimized) default environment setting. First, choose Tools –> Import and Export Settings.

image

Figure 9: Import and Export Settings wizard. Choose Reset all settings here. Then you will be prompted whether or not you want to save your current settings. Choose as you wish there. Then proceed.

image

Figure 10: Default environment settings. Note the Web Development (Code Optimized) option, which is new to VS2010. Choose it and VS will immediately switch to those settings, removing e.g. the designer buttons and providing you with a much more lightweight code editor window. Very handy for developers who want to only focus on the code.

9. Conclusion

So I’d say this is about it for this time. Of course there are a lot more features which need to be covered.

The next lessons will deal with creating customized startup pages for VS2010, and introduce the new language features and tools of Visual Studio 2010.

In the meantime, enjoy exploring VS’ new capabilities and features, and hang on till the next time!

Best regards,

Martin

Read Full Post »

Howdy ladies and gents out there,

Here we go with another NHibernate common problem solved for you. Recently the question arose whether it is possible or not to execute a query with NHibernate that checks whether a property lies in a given range of values or not. Not much of a problem, we would say, since HQL can do it just directly using its SQL-like syntax. For example, if we recall our example DevJour1 from part 1 of the NHibernate noob series, we could define a query in the Book.hbm.xml file:

   1: <query name="GetAllBooksWithinRange">

   2:   <![CDATA[

   3:     select b from Book b where b.Title in ('It', 'Salem's Lot',                                                  'Langoliers');

   4:   ]]>

   5: </query>

Snippet 1: Excerpt from the Book.hbm.xml file: HQL query returning all books whose title lies within a certain range of values.

Problem solved? Not quite. Another requirement to this query was to provide custom sorting w/ a custom field and a custom sort direction. Sounds familiar, doesn’t it? Remember our first NHibernate troubles post: Custom Sorting. Simply put, using HQL, this is not possible. So we had to use Criteria queries. But how do we implement the range value check for a given property using Criteria queries? It’s simple, really:

   1: public static List<Book> GetAllBooksWithinRange()

   2: {

   3:     String[] titles = { "It", "Salem's Lot", "Langoliers" };

   4:     ISession session = Program.OpenSession();

   5:     List<Book> books = session.CreateCriteria(typeof(Book)).

   6:         Add(Restrictions.In("Title", titles)).

   7:         List<Book>().ToList<Book>();

   8:     return books;

   9: }

Snippet 2: Excerpt from the Book class.

BookGetAllBooksWithinRange()explained (line by line):

3: Definition of our range of values

4: Opening a session, recall from Program class of the Custom Sorting article.

5: Creating criteria for type Book .

6: Crucial part: Adding Restrictions.In (NHibernate.Criterion), passing the property that needs to be checked (Title) and the list of range values.

7-8: Calling the List() method(s) and returning the retrieved list

Important: This works also, when comparing a property of a property with a range of values. Example: Assuming, Book contains a class Author , which in turn contains a property Surname. Then we could formulate such a comparison statement like follows:

.Add(Restrictions.In(“Author.Surname”, names)).


Under the assumption that names is an array containing strings.

That’s it! I’m sure there are more problems to be solved!

See you later!

Best regards,

Martin

Read Full Post »

Hello all,

This time we’ll do a quick exploration of how we can apply Code Contracts to interfaces. As you know from our post First Steps with Code Contracts, the preconditions and postconditions (Contract.Requires and Contract.Ensures calls, respectively) must be placed inside a method body.

Therefore, when defining an interface, we run into a problem: We do not have method bodies there. Of course we could put such calls inside each effective implementation of the interface methods. Clearly, this is not what we want, since

  • We do not want to replicate code in x classes that implement our interface and
  • Future implementations of our interface would contain the conditions we need

Luckily, the Code Contracts provide us with a powerful mechanism that allows us to define a class which implements that interface and which will do the necessary checks.

The Contract Class

Let’s see how this is done, right? For this example, please recall our example from the First Steps with Code Contracts introductory article.

 

   1: namespace Vehicles

   2: {

   3:     interface IVehicle

   4:     {

   5:         void Drive(Int32 speed);        

   6:     }

   7: }

Snippet 1: The IVehicle interface

Also do recall that we did not define any pre- or postconditions for our interface (how could we? – there is no method body).

This is exactly the place, where we will put a so called Contract Class, that will implement our interface. Every time the interface is called, the conditions put into our Contract Class will be injected. This holds for every implementation of our interface.

We basically need two things:

1. A class that implements our interface IVehicle that is marked as Contract Class via an attribute:

 

   1: [ContractClassFor(typeof(IVehicle))]

   2: public class IVehicleContract : IVehicle

   3: {

   4: }

Snippet 2: Contract Class implementing the interface we want to fulfil requirements

2. Another class that links up our interface to the ContractClass

   1: [ContractClass(typeof(IVehicleContract))]

   2: public partial interface IVehicle

   3: {

   4: }

Snippet 3: The link between the interface and our Contract Class

Hint: Don’t worry: You do not have to implement these two classes from scratch: The Code Contracts come with a bunch of predefined snippets that can be executed right away. The following snippet will do the trick for generating the Contract Classes for an interface:

 

cintf ->(TAB – TAB)

The next step is to implement the interface for IVehicleContract.

clip_image002

Figure 1: Explicitly implementing the interface IVehicle for the IVehicleContract class.

The result is shown in Snippet 4:

   1: [ContractClassFor(typeof(IVehicle))]

   2: public class IVehicleContract : IVehicle

   3: {

   4:     void IVehicle.Drive(int speed)

   5:     {

   6:         throw new NotImplementedException();

   7:     }

   8: }

As a next step, we can implement our conditions in the method body of IVehicle.Drive method in IVehicleContract, like shown in Snippet 5:

   1: [ContractClassFor(typeof(IVehicle))]

   2: public class IVehicleContract : IVehicle

   3: {

   4:     void IVehicle.Drive(int speed)

   5:     {

   6:         Contract.Requires(speed >= 0);

   7:     }

   8: }

Snippet 5: precondition in interface method implementation.

What does this mean now? Well, for every implementation of the interface IVehicle , the code precondition will be injected. In other words:

 

The condition we define in the Contract Class must hold for all implementations of the interface.

 

That was it already (for this time)! It is as simple to use as it seems.

 

Enjoy and stay tuned for the next time!

Best regards,

Martin

Read Full Post »

Older Posts »