Start | MVPs 

        MVP Weblogs


In 2012, I thought it might be a good idea to register for a Windows Store Account, oh sorry, 'Windows Developer Services-account'. As you might recall, signing up was a bit of a pain. After a year, I decided to get rid of it as I didn't do anything with it nor did I expect to do anything with it in the future and as it costs money, I wanted to close the account. That too was a bit of a pain.

To sign up for a Windows Store Account/Windows Developer Services-account, Microsoft outsources the verification process to Symantec. The verification process is to make sure that the person who signed up (me) really works at company X (I even own it) and Symantec is seen by Microsoft to be up to the task to do that. As you can read in my sign-up blog post, the process includes Symantec contacting a person other than the person who registered for a company who also has to be entitled to make sure that I am who I am.

Is Symantec, a total different company than Microsoft, really up to the task? Well, let's see, shall we? As you can read above, I signed out of my Windows Store Account almost a year ago. One would think that by now Microsoft would have sent Symantec a memo in which they state that the individual 'Frans Bouma' is no longer a Windows Store developer card-carrier. In case they have (which I can't verify, pun intended), Symantec has a lousy way of keeping track, as last week my company received a lovely request from Symantec to verify with them whether 'Frans Bouma' was indeed working for my company and I was who I said I was. You know, for the Windows Developer Services account.

Now the following might read like I stepped into the oldest phishing trap in the book, but everything checked out properly, we use plain text email only, copied URLs over, the URLs were simple and legit.

We first thought it was spam/phishing so we ignored it. But this morning a new email arrived as a reminder. So we painstakingly went over every byte in the email and headers. Headers checked out (all routed through Verisign, now part of Symantec, and Symantec itself), URLs in the email checked out (we only look at plain text emails). The email was sent to the same person who verified me 2 years ago, and we concluded it must be legit. We had a good laugh about it, but what the heck, let's verify again. How would that work exactly, that verification process?

So we copied the url from the plain text version of the email (which was a simple url into Symantec) to a browser, it arrived at Symantec, listed info about my account, and all that's there to be done is click the verify button. It's laughably simple: just click a button! I do recall the first time it was a phone call, but instead of getting rid of this whole Symantec bullshit, Microsoft decided apparently that clicking a button instead is equal to 'making things simpler'.

After a couple of minutes, I received at my email box the email that cheered 'congratulations! I was re-verified and my Microsoft Developer Services account was renewed and I could keep developing apps for the windows store'.

But… I ended my account almost a year ago? Or did I? To verify whether I really got rid of this crap or not, I went to the sites I went before to register and end the account, but they only showed me XBox Live stuff, no developer account info.

Headers of reply email:

Received: from spooler by sd.nl (**********************); 29 Jul 2014 10:03:43 +0200
X-Envelope-To: frans********************
Received: from authmail1.verisign.com ( by **********************
 (***********************) with Microsoft SMTP Server id; Tue, 29 Jul 2014
 10:06:08 +0200
Received: from smtp5fo-d1-inf.sso-fo.ilg1.vrsn.com
 (smtp5fo-d1-inf.sso-fo.ilg1.vrsn.com [])	by
 authmail1.verisign.com (8.13.8/8.13.8) with ESMTP id s6T8674q001640
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO)	for
 <frans@**********************>; Tue, 29 Jul 2014 08:06:07 GMT
Date: Tue, 29 Jul 2014 08:06:07 +0000
From: <microsoft.orders@symantec.com>
To: <frans@***********************>
Message-ID: <1717526233.2131406621167061.JavaMail.support@geotrust.com>
Subject: Informatie over Microsoft Developer Services-account **********************
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Return-Path: microsoft.orders@symantec.com
X-MS-Exchange-Organization-AuthSource: **********************
X-MS-Exchange-Organization-AuthAs: Anonymous
X-MS-Exchange-Organization-PRD: symantec.com
X-MS-Exchange-Organization-SenderIdResult: None
Received-SPF: None (**********************: microsoft.orders@symantec.com does not
 designate permitted sender hosts)
X-MS-Exchange-Organization-SCL: 0
X-MS-Exchange-Organization-PCL: 2
X-MS-Exchange-Organization-Antispam-Report: DV:3.3.13320.464;SID:SenderIDStatus None;OrigIP:
X-MS-Exchange-Organization-AVStamp-Mailbox: MSFTFF;1;0;0 0 0
MIME-Version: 1.0

(replaced sensitive own info with ****)

I wonder: will Symantec for the rest of my life try to verify me as a Windows Store developer even though I have no longer a subscription on that service from Microsoft? The data in Symantec's databases about this account will likely never be purged unless they get rid of the account data from Microsoft entirely or I stop verifying (but even then).

In 2012 I already found it pretty bad that my account info with Microsoft was shared with another 3rd party, Symantec, and today I find it even worse: I no longer have a Windows Store dev account with Microsoft, but Symantec a) still thinks I do and b) keeps the information about me while I never had the intention to sign up with Symantec at all.

Microsoft will never attract large droves of devs writing apps for its Windows Store unless it makes the whole process seamless and without leaking sensitive information to 3rd party corporations who can do whatever they please with it.

comments 7/29/2014 11:03:39 AM


We've released LLBLGen Pro v4.2 RTM! v4.2 is a free upgrade for all v4.x licensees and if you're on v3.x, you can upgrade with a discount.

For what's new, I'd like to refer to the what's new page on the LLBLGen Pro website. Smile

comments 7/2/2014 1:33:08 PM

door: Jan Karel Pieterse
RefTreeAnalyser 2.0 has just been updated. Improved performance of formula checking and added formula block highlighting. Ever had to work out the logic of other people's Excel files? Ever had to untie the spaghetti-knots of a large Excel workbook's formulas? Then you know what a nightmare this can be! Now there is the RefTreeAnalyser! With this tool, finding out how a cell in a workbook derives its results and what other cells depend on the cell is a breeze.
comments 6/20/2014 5:50:00 PM


This morning we've released LLBLGen Pro v4.2 BETA! The beta is available to all v4 customers and can be downloaded from the customer area -> v4.2 section.

Below is the extensive list of new / changed features. Enjoy! Smile

LLBLGen Pro v4.2 beta, what's new / changed.

Main new features / changes


  • Allowed Action Combinations: Specify which actions are allowed on an entity instance: Any combination of Create/Read/Update/Delete.
    Supported on: LLBLGen Pro Runtime Framework (all combinations, R mandatory), NHibernate (CRUD and R).
    Action Combinations make it easy to define e.g. entities which can only be created or read but never updated nor deleted. The action combinations are defined at the mapping level and checked inside the runtime and are additional to the authorization framework.


  • Copy / Paste support for all model elements (entity, value type, typed list, typed view, table valued function call, stored procedure call):
    Paste full (with mappings and target tables) or just model elements, across instances (stand alone designer only) or within the project (VS.NET integration and standalone designer).
  • Automatic re-apply changed settings on existing project:
    e.g. changing a pattern for a name will reapply the setting on the existing model, making sure the names comply with the setting value.
  • New name patterns for auto-created FK/UC/PK constraints (model first).
    This makes it possible to define a naming pattern for e.g. FK constraints other than the default FK_{guid}. You can use macros to make sure the FK name reflects e.g. the fields and the tables it is referencing.
  • It's now possible to save search queries in the project file.
  • Ability to define default constraints for types, per type - DB combination (model first).
    This makes it possible to for example define a custom type, e.g. EmailAddress, based on the .NET string type, with length 150 and a default of "undefined@example.com" for SQL Server and then define a field in an entity with type 'EmailAddress'. Creating the database tables from this model in the designer will then result in a default constraint on the table field the email address field is mapped on with value "undefined@example.com".
  • General editors per project element type:
    one editor which is kept open and will show the selected element in the project explorer, making it very easy to check / edit configurations on multiple elements. This will make it possible to e.g. edit or look at mapping data for several entities quickly by opening the general entity editor and opening the field mappings tab while selecting the entities to check / edit in the project explorer: the field mappings tab is kept the tab visible so the data of the selected entity is shown each time.
  • Intellisense helpers in QuickModel for types, names and relationship types:
    It's now possible to open helper lists of names in scope, types available and the list of relationship types to help you write quick model expressions more easily.
  • Hide / Filter warnings:
    It's now possible to hide / filter out warnings in the error/warning pane based on warning ID. The hidden/filtered out warnings are viewable again using a toggle and which IDs are filtered out is stored in the project.
  • Element selection rules on tasks (code generator).
    It's now possible to define selection rules on tasks in a run queue for the code generator which select which elements participate in the task, based on setting values. This makes it easy to define a setting for a user which is then taken into account in the code generator to execute different tasks based on the value of the setting.
  • New refactoring: replace selected fields with existing value type.
    This makes it easier to work with value types in the designer: if a selected value type matches (based on a set of defined rules) the selected fields, the fields are replaced with the selected value type and mappings are adjusted accordingly.
  • Automatically assign found sequences to entity fields based on a pattern (database first).
    Based on a name pattern the reverse engineering engine will select fields of entities which should get a sequence assigned to them, if the name pattern resolves to a name of a found sequence. This makes it easier to reverse engineer models from databases which use sequences for identity values, like Oracle and PostgreSQL.

LLBLGen Pro Runtime Framework

  • Expression support during Inserts
    It's now possible to define an expression on an entity field which is used during inserts. The expression defined is used to produce the field value.
  • Generate Typed Lists as POCO classes with a Linq or QuerySpec query.
    It's now possible to generate a typed list or all typed lists (controllable through settings) as a simple POCO class which holds the data of a row in the resultset and a Linq or QuerySpec query to execute the typed list.
  • Generate Typed Views as POCO classes and use them in Linq and QuerySpec.
    It's now possible to generate a typed view or all typed views (controllable through settings) as a simple POCO class and use it in Linq or QuerySpec queries.
  • Transparent Transient Error Recovery (adapter only).
    The transient error recovery system introduced in v4.1 has been upgraded so it can now be used transparently: define once and it is automatically used when executing a query. It's no longer necessary to explicitly execute a query through a recovery strategy.
  • Cached resultset tagging for easy cache purge/retrieval
    It's now possible to tag a query's resultset if that resultset is cached so the resultset can be retrieved from the cache using the tag and also it's now possible to purge the resultset(s) associated with the tag from the cache.
  • Action Combination support (see above).
    It's now possible to define an entity type as e.g. Read Only or Read / Create (or any of the other combinations) and the engine will automatically check at runtime whether an action (e.g. delete of an entity instance) is allowed or not and will deny the action if the action isn't part of the defined allows action combinations of the entity type.

Entity Framework

  • Code First support (Entity Framework v6+)
    It's now possible to generate Entity Framework v6 code with Code First mappings instead of EDMX using mappings. This allows you to keep using model first or database first modeling techniques in the designer and emit Code First output: POCO classes for the entity model and Code First code defining the model mappings.


  • Support for Read-only entities (See Action Combinations above)
  • String lengths are now emitted into the mappings:
    The lengths in the mappings make sure NHibernate makes the right decisions at runtime with respect to strings.

Minor features / changes


  • Support for <DependentUpon> element in CS/VBProj files (Code generator)
  • Support for default presets (Code generator)


  • Added a setting to control whether names are singularized during reverse engineering
  • When a relationship is marked as 'ModelOnly', the backing FK (and UC) of the original relationship when it wasn't model only, are now removed from the relational model data if the FK (and UC) are created by the designer and if there's no other model element relying on them (e.g. another relationship). Previously, they're kept around.
  • .NET 4.5.2 has been added as a supported platform
  • A directive has been added to the designer's config file to enable (it's disabled by default) high-DPI winforms support on .NET 4.5.2.
  • Context menus for entities in project explorer and model views have been re-ordered and more commands have been added to make working with the elements through context menus more convenient.
  • Stored procedure call parameters and Table-valued-function call parameters are now selectable in the code generation info tab and settings specifically for these elements will now show up there.
  • SQL Server 2014 is now a supported database (through the SQL Server driver/templates).
  • When a typed view was mapped onto a stored procedure resultset, it will now use the stored procedure name strip pattern instead of the Table Valued Function strip pattern to produce a proper procedure name for the macro {$ProcFunctionName}.
  • The default sorting on the error lister is no longer on 'Time' but on message type, Source so errors appear first, then warnings, and the messages are sorted within the message type on source, ascending.
  • In a typed list, when a relationship join hint was changed, the project wasn't marked as 'changed'.
  • When a project is loaded, all root nodes are now collapsed, which makes it easier to work with larger projects.
  • When a new element is added to the project, e.g. entity or typed view either directly or through reverse engineering, the state of the root nodes are remembered so the root nodes no longer all expand when an element is added, only the root node of the added element(s) is expanded to show the new elements.
  • Setting an existing field to a custom shortcut will set the maxlength/precision/scale In v4.2, setting an existing field to a shortcut which has a default length/precision/scale set will receive these values for maxlength/precision/scale, overwriting an existing value.
  • Multi-line input support in QuickModel: it's now possible to paste multiple lines with quick model statements in the input box, which are then executed one by one
  • Preference names are now beautified. Preferences are now properly word broken and lower cased, and thus easier to read than the previous preferences which were equal to the camelcased property names.
  • Catalog explorer details are now automatically shown when a node is selected if details viewer is open.
  • A 'Collapse Child Nodes' feature has been added to the context menu of certain nodes in project explorer and catalog explorer. All nodes which have child nodes which can have child nodes have now a 'Collapse Child Nodes' feature in their context menu, so it makes it easier to reset the tree to a workable form after many expand actions.
  • PostgreSQL driver now also obtains materialized views as 'views'. Postgresql servers v9.3 or later required.
  • It's now possible to define different default values for resultset retrieval. A driver will retrieve stored procedure resultsets using default values for the parameters of the procedures selected. At the wizard tab for stored procedure selection, the user can now click a button to define different default values for the supported value types (and string), to avoid stored procedures being excluded because they reject the original default values (e.g. a stored procedure which requires a value larger than 0 for an int parameter otherwise it will return with an error will now no longer do so if the default for int is set to a value larger than 0).
  • License file can now also be placed in 'My Documents\LLBLGen Pro'

LLBLGen Pro Runtime Framework

  • QuerySpec: Multiple calls to query.From(operand) are now appending the operand to the existing From clause if operand starts with QueryTarget. If it doesn't start with QueryTarget and there's an existing From clause, it will overwrite the existing From clause.
  • OData: The OData Support Classes now support the IgnorePropertiesAttribute on entity classes. The names specified using the attribute have to be defined on the entity type the attribute is defined on, so inherited properties can't be filtered out using this attribute.
  • Low level api: Duplicate sort clauses are now filtered out so accidentally added duplicates through e.g. OData are no longer causing exceptions at runtime.
  • Dynamic Query Engines: when the source of a field isn't known, the field creator functionality will no longer emit a dangling '.' but will simply only emit the field name/alias. This way constucts like .OrderBy("Name".Ascending()) will work, where the engine will emit ORDER BY [Name] ASC. Previously the above construct would result in ORDER BY .[Name] ASC which would fail.
  • Query traces: The value of a parameter of type DateTime value in a query is now emited as a ISO 8601 / Roundtrip formatted string, which is more precise than the previous 'ToString()' call on the DateTime which didn't include fractions of a second.
  • FunctionMappings added (Linq/QuerySpec): sbyte/byte/ushort/short/uint/int/ulong/long.ToString() mappings have been added to all DQEs for all databases.
  • EntityBase(2).AllowReadsFromDeletedEntities allows code to read from an entity that has been marked as deleted. It's been set to 'false' as the default which will result in an exception if code reads from a deleted entity, like in previous versions.
  • SQL Server 2014 is now a supported database (through the SQL Server DQE/templates). Use 2012 compatibility to utilize the 2012 or higher features.
  • FIX: QuerySpec: A projection lambda was created using a parameter which was created for every new query, which resulted in a new cache key for the lambda so the lambda was compiled every time instead of re-using a cached version. The lambda is now created using the same parameter as the original and the compiled version cached is re-used in subsequential executions of the same projection so query creation is a bit quicker.
  • FIX: QuerySpec: QuerySpec doesn't properly replace function mappings in derived tables.
  • QuerySpec: There's now a class available to create a projection lambda quickly for Select<T>() calls, called ProjectionLambdaCreator. This class has two overloads of its Create() method which creates at runtime a projection lambda for T from either a specified fields set or a fields creation class (e.g. CustomerFields). The overload which accepts the fields creation class caches the created lambda and is therefore much faster than a lambda created in code and compiled by the C# / VB.NET compiler which will create a new Expression<Func<T>> at runtime each time it is run.
  • QuerySpec: There's now a special Select method available which produces its own lambda projector from two types given: .Select<SomeDTO, SomeElementFields>()
  • QuerySpec: The usage of QueryTarget is now also supported in DynamicQuery / DynamicQuery<T> instances, but only in appending join operands to an existing query

  • QuerySpec. you don't need to create a new field for each targeted subquery field anymore, if you want to effectively clone the projection of a subquery. It's now possible to clone a projection of a derived table/aliased subquery in an outer query's Select() method.

  • It's now possible to generate case insensitive SQL for case sensitive databases using a setting.

Entity Framework

  • It's now possible to define the return type of a fetch method for a stored procedure call which returns a typed view: this is required if the stored procedure has output parameters as Entity Framework doesn't read the output parameters until the resultset has been enumerated which is too late. The setting controls whether the code generator will generate a work around for this or not. The work around does change the method's return type, hence the setting.

comments 6/2/2014 1:53:47 PM

door: Jan Karel Pieterse
I somehow managed to break the commenting function of my site. Today I fixed it again and you can go ahead and ask your questions or add your comments once more.
comments 6/2/2014 8:30:00 AM

door: Jan Karel Pieterse
My free Flexfind tool for Excel has been updated to build 584. Fixed a bug regarding replacing when search was done in Values.
comments 5/8/2014 11:35:00 AM

door: Jan Karel Pieterse
Wees er nu echt snel bij, want de registratie sluit al op 7 mei! Op 14 mei 2014 organiseren wij in Amsterdam de eerste "Amsterdam Excel Summit". Een absoluut unieke groep Excel MVP's zal in mei 2014 in Amsterdam zijn om hun geweldige Excel kennis met u te delen. Deze MVP's zijn in Amsterdam voor een bijeenkomst en wij zijn erin geslaagd om deze mensen voor ons evenement te boeken. Er is slechts weinig kans dat een dergelijke mogelijkheid zich nogmaals zal voordoen, dus wees er snel bij als u dit niet wilt missen!
comments 4/28/2014 12:15:00 PM

door: Jan Karel Pieterse
Be quick to join us in Amsterdam on May 14 2014, for the registration on the first Amsterdam Excel Summit closes on May7th! An absolute unique group of Excel MVP's will gather in Amsterdam to share their expert knowledge with you. The Excel MVP's happen to be in Amsterdam for a meeting and we've succeeded in getting some of them to present at our event. There is not much chance on this happening again anytime soon, so make sure you register!
comments 4/28/2014 12:15:00 PM

door: Jan Karel Pieterse
I have added a new article to my site, describing a class module to help measuring your VBA performance.
comments 4/15/2014 7:15:00 PM

door: Jan Karel Pieterse
Als je wel eens die vervelende melding hebt gehad over kringverwijzingen toen je een formule maakte of toen je een Excel bestand opende, lees dan dit nieuwe artikel. Excel detecteert een kringverwijzing zodra een reeks formules ertoe leidt dat dezelfde cel meer dan eens in serie berekeningen wordt aangedaan. Veel gebruikers vinden de kringverwijzingen melding uiterst verwarrend en hebben geen idee waardoor die verschijnt. In dit artikel tracht ik het mysterie omtrent deze situatie weg te nemen.
comments 4/14/2014 1:00:00 PM

door: Jan Karel Pieterse
RefTreeAnalyser 2.0 has just been updated. Added hotkeys for Check Formulas and for Objects. Ever had to work out the logic of other people's Excel files? Ever had to untie the spaghetti-knots of a large Excel workbook's formulas? Then you know what a nightmare this can be! Now there is the RefTreeAnalyser! With this tool, finding out how a cell in a workbook derives its results and what other cells depend on the cell is a breeze.
comments 4/3/2014 6:00:00 PM

door: Jan Karel Pieterse
RefTreeAnalyser 2.0 has just been updated. Improved reporting and fixed a bug or two. Ever had to work out the logic of other people's Excel files? Ever had to untie the spaghetti-knots of a large Excel workbook's formulas? Then you know what a nightmare this can be! Now there is the RefTreeAnalyser! With this tool, finding out how a cell in a workbook derives its results and what other cells depend on the cell is a breeze.
comments 3/31/2014 7:30:00 PM

door: Jan Karel Pieterse
I have added a new page to my article on Slicers, which shows you how to get the selected items of a slicer into a worksheet cell.
comments 3/21/2014 4:45:00 PM

door: Jan Karel Pieterse
I have updated the page on Excel startup problems today with information about a newly discovered tool, the Office Configuration Analyzer Tool (OffCAT).
comments 3/20/2014 5:15:00 PM

door: Jan Karel Pieterse
I have added a new page to my article on Slicers, which shows you how to synchronise slicers which drive different PivotCaches.
comments 3/13/2014 6:15:00 PM