Jeremy Cottino

Il est bien plus beau de savoir quelque chose de tout que de savoir tout d'une chose. [Blaise Pascal]

ITIL V3 core volumes and their processes

No comments
As part of my exam preparation for ITIL V3 foundation, here is a very simple flowchart that shows all 5 ITIL Core volumes and their processes. Inputs/outputs are also displayed.


This exam will close the 2010 certification season :-), see you next year... MCPD web 3.5 is in the pipe, will see for others...

No comments :

Post a Comment

SQL Server Edition for Your Needs

1 comment
What I found on those certifications is some questions around what version of SQL server to use in specific case.
This page, Choose the Right Edition for Your Needs, on the Microsoft website, describes each available version of SQL Server 2008 and their characteristics. I don’t want to re-write this page but in few words, what’s need to be known for the exam is:
·         Core Editions, including Enterprise and Standard edition are used in medium to large company environment. These versions contain advances tools and features
·         Specialized Editions, Workgroup, Web and Developer are departmental solutions; the key word is low-cost solution.
·         SQL Server 2008 Express (Free Edition) Entry level database, ideal for learning and ISV redistribution
·         SQL Server Compact 3.5 (Free Edition) Embedded database for developing desktop and mobile applications

1 comment :

Post a Comment

Change privilege level of a Windows application

5 comments
As part of my preparation for the first exam, I discovered some features I didn’t know yet. As usual, the best way for me to remember them is to write a short review. Cheat sheet inside...
Today, the subject is: Security and privilege elevation… tada…

I will not care about the WHY this is needed, just about the HOW. By default, any .net application run as current user (invoker) and does not check any security level. Let’s imagine that we have to develop an application that needs to modify registry or add/update files in %ProgramFiles%. The invoker should be part of the local admin group or the application should not start.

This is this new pop up we discovered with Windows Vista and now in Windows 7.


Quick Note:
How to take a screenshot of the User account control pop up? Seems to be a stupid question, but try it and with default configuration, this is not possible. Here is how to do it:
You have to configure UAC to not switch to the secure desktop, and then you'll be able to take a screenshot of the UAC prompt.
Run Secpol.msc as administrator, expand Local Policies, Security Options, policy "User Account Control: Switch to the secure desktop when prompting for elevation", set to "Disabled". It is recommended to revert the changes after you've taken the screenshots.

After this quick note, let’s go back to our business. On your Windows application, add a new file called Application Manifest File. This will create app.manifest.


The default configuration of the manifest below shows: requestedExecutionLevel level="asInvoker", meaning that the application runs with the same privilege as the calling application.
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

If you want that the application request administrator privilege to be launched, replace the previous config. by the one below, with requestedExecutionLevel level="requireAdministrator"

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

Note that with requireAdministrator as the level attribute parameter, the .exe icon changes, note the small windows shield icon.

To summarize, the three different values for the level attribute:
  1. requireAdministrator: The application must be started with Administrator privileges; it won't run otherwise.
  2. highestAvailable: The application is started with the highest possible privileges.  If the user is logged on with an Administrator account, an elevation prompt appears. If the user is a Standard User, the application is started (without any elevation prompt) with these standard privileges.
  3. asInvoker: The application is started with the same privileges as the calling application.

5 comments :

Post a Comment

Certification season is open

No comments
Autumn seems to be certification season for me. After successfully pass the 70-433 - SQL Server 2008 database development certification, my new challenges come to Windows forms using .Net framework 3.5.

The first one will be 70-505 Microsoft .NET Framework 3.5, Windows Forms Application Development









Then 70-536 Microsoft .NET Framework - Application Development Foundation

And finally if I still have energy 70-563 PRO Designing and Developing Windows Applications Using the Microsoft .NET Framework 3.5









After that I could be MCPD :P

Because for me the easiest way to remember something is to write it, following posts will be dealing with some parts of those certifications that I have trouble to remember.
For those who love the "For dummies"  book cover, you can create your own here.

No comments :

Post a Comment

Explained to myself, what is Twitter?

1 comment
I have created my Twitter account few days ago and did not really find the "Good" way to use it.
I found this free webinar from ITMPI about "Using Twitter in the Enterprise". As it was quite interesting, let me share some resources around Twitter.
This webinar was presented by Edward Yourdon (Find him on Wikipedia, or on his blog). Slides of this presentation can be donwloaded here.

Let's start with a nice video that present Twitter called Twitter in plain English.


Amongs many other, here are some Twitter client-based programs:
  • Seesmic: presented as the best Twitter client for Desktop, Web and Mobile, manage multiple Twitter accounts, Facebook feeds and pages and access Twitter Lists.
  • Twhirl: a desktop client for the Twitter microblogging platform, powered by Adobe AIR
  • TweetDeck: a simple and fast way to experience Twitter
  • Tweetie: An iPhone/iPad client.
Some articles:
Also some tools that can be usefull (honestly, i did not try any so...)
  • TweetStats: In ur Tweets, Graphin' Your Stats!
  • TweetCube allows you to share files on Twitter
  • Displayed as a cloud, tweetclouds: Quickly view 'what's being said' across the Twittersphere
  • Twitterfone to... guess what, microblog over mobile phone.

1 comment :

Post a Comment

25 Cool Windows 7 Keyboard Tricks That Will Impress Your Friends

No comments
An article from one of my favorite general information site makeuseof.com, 25 Cool Windows 7 Keyboard Tricks That Will Impress Your Friends.
On this article, I have discovered the Windows Mobility Center, that provide in a small Windows usefull commands for your laptop(Volume, WiFi, Presentation settings...), can be accessible with [Windows] + [X]

No comments :

Post a Comment

New webinar on MS Project 2010

No comments
New York City MPUG chapter presents WebnLearn: Harnessing the Power of New Features of MS 2010 (1 PDU); Nov. 23, 2010 18:00 (CET). Register here.


Teaser from MPUG:
Dale Howard, noted author, speaker, and Microsoft Project MVP, will present Harnessing the Power of the New Features in Microsoft Project 2010. In this lively presentation, Dale will show you how to harness the power of some of the new features included in the Microsoft Project 2010 desktop application, including the following:
• Customizing the Ribbon and the Quick Access menu
• Using a Highlight filter
• Using Manually Scheduled tasks to plan for undefined tasks
• Using the Inactivate feature to cancel an unnecessary task
• Using, formatting, and exporting the Timeline view
• Creating a custom field using the Add New Column virtual column

No comments :

Post a Comment

Using XML within SQL Server 2008

1 comment
During my work for the SQL certification (70-433 TS: Microsoft SQL Server 2008, Database Development), I found many difficult questions (difficult for me…) around the usage of XML within SQL server.
This article will not deal with all XML features that are available within SQL Server 2008, but just give some key points that I need to remember for the exam:

The XML Schema repository
For more information on the usage of XML Schema and XSD file format, you can just Google it; I found for example this article on Wikipedia.
You can add as many XML schemas in SQL server as you may need. To add a new XML Schema, the TSQL command is:

CREATE XML SCHEMA COLLECTION MyXmlSchema N'<?xml version="1.0" encoding="UTF-16"?>
<xsd:schema xmlns="..." ...>
....
</xsd:schema>'

Note also the availability of following queries:
ALTER XML SCHEMA COLLECTION MyXmlSchema N'...
DROP XML SCHEMA COLLECTION MyXmlSchema N'...

The xml Native Data Type
SQL Server 2005 supports a new native data type named xml that you use in exactly the same way as any other built-in data type

Typed and Un-typed xml Columns
When you provide a schema for the XML documents you will store, you can create a typed xml column in a table:
CREATE TABLE MyTable(MyKey int, MyXml xml(MyXmlSchema))

Without providing schema, you create an un-typed xml column:
CREATE TABLE MyTable(MyKey int, MyXml xml)

Inserting and Selecting on an xml Column
You can insert an XML document into an xml column in the same way as you would do for any other built-in data type. You can insert it as a string value, or use the CAST or CONVERT functions to specifically convert it to an xml type:
INSERT INTO MyTable(MyKey, MyXml)
      VALUES (1, '<FootBallClub id="1"><Name>Olympique de Marseille</Name><Position>1</Position></FootBallClub>')
INSERT INTO MyTable(MyKey, MyXml)
      VALUES (2, CAST('<FootBallClub id="2"><Name>Nimes Olympique</Name><Position>2</Position></FootBallClub>' AS xml))
INSERT INTO MyTable(MyKey, MyXml)
      VALUES (3, CONVERT(xml, '<FootBallClub id="3"><Name>Milan AC</Name><Position>100</Position></FootBallClub>'))

To extract an XML document from an xml column, you can convert it to nvarchar data type for example:
SELECT CONVERT(nvarchar(500), MyXml) as MyXmlDoc FROM MyTable

Querying XML in SQL server

XQuery support is available since SQL Server 2005. If you wish to have a tutorial about XQuery, you can go on the W3C Web Site

The following methods are available for the xml object in SQL Server:
  • The query method, which returns a fragment of un-typed XML
  • The value method, which returns a single value from the XML and exposes it as a standard (non-xml) SQL data type
  • The exist method, which can be used to test whether a specific node/value exists in the XML data
  • The modify method, which executes an XML Data Modification Language (XML-DML) statement
  • The nodes function, which returns a single-column rowset of nodes from the XML

Using the query Method
These are example of SQL statements that query the table we just created:
SELECT MyXml.query('/FootBallClub[@id="1"]/Name') FROM MyTable
The result is:
<Name>Olympique de Marseille</Name>

To get just the value of the matching element, you can use the data function:
SELECT MyXml.query('data(/FootBallClub[@id="1"]/Name)') FROM MyTable  
In this case, the result would be just:
Olympique de Marseille

If the xml column is a typed column, you must specify the namespace:
SELECT MyXml.query('declare namespace s="http://blablabla"; ...

If you are familiar with FLWOR XQuery’s (For/Let/Where/Order by/Return), you can build an Xml document that contains all FootBallClub that have Id’s lower than 5.
Let’s add this document in a new row, of our table:
<FootBallClub id="1">
<Name>Olympique de Marseille</Name>
<Position>1</Position>
</FootBallClub>
<FootBallClub id="2">
<Name>Nimes Olympique</Name>
<Position>2</Position>
</FootBallClub>
<FootBallClub id="3">
<Name>Milan AC</Name>
<Position>100</Position>
</FootBallClub>

Here is the query
SELECT MyXml.query('
<myclubs>
{
  for $p in //FootBallClub
  where data($p/@id) < 2
  order by $p/name[1]
  return $p/Name
}
</myclubs>')
FROM MyTable WHERE MyKey = 4

In this case the result is
<myclubs><Name>Olympique de Marseille</Name></myclubs>

Using the value Method

SELECT MyXml.value('(/FootBallClub[@id="1"]/Name)[1]', 'nvarchar(30)') FROM MyTable

Return Olympique de Marseille

Using the exist Method

SELECT MyXml.exist('(/FootBallClub[@id="1"]/Name)[1]') FROM MyTable
Return 1 (if false return 0)

Using the modify Method
…To delete a node
UPDATE MyTable SET MyXml.modify('delete /FootBallClub[@id="3"]')
WHERE MyKey = 4

…To insert a new node
UPDATE MyTable SET MyXml.modify('insert <FootBallClub id="4"><Name>Milan AC V2</Name><Position>101</Position></FootBallClub> before (/FootBallClub[@id="2"])[1]')
FROM MyTable WHERE MyKey = 4

To specify the destination position in case of insert statement, you can choose between:
{as first | as last} into | before | after

…to update a node
UPDATE MyTable SET MyXml.modify('replace value of (/FootBallClub[@id="4"]/Name/text())[1] with "Milan AC new name"')
FROM MyTable WHERE MyKey = 4

Note the text(): this need to be specified because we are using un-typed xml column. For typed xml, the statement would be
'replace value of (/FootBallClub[@id="4"]/Name)[1] with xs:string("Milan AC new name ")')

Using the nodes Method

SELECT T.colName.query('.')
FROM MyTable
CROSS APPLY MyXml.nodes('/FootBallClub') as T(colName)
This query returns all clubs present in each of the nodes of each column. In our case it returns 6 lines (1 in line 1, 1 in line 2, 1 in line 3 and 3 in line 4)

Passing Parameters to an XQuery
The following 2 queries are identical:

SELECT MyXml.query('//Name') FROM MyTable
WHERE MyXml.value('(/FootBallClub/@id)[1]', 'int') = 1

Or by using sql:variable
DECLARE @clubId INT
SET @clubId = 1
SELECT MyXml.query('//Name') FROM MyTable
WHERE MyXml.exist('/FootBallClub[./@id = sql:variable("@clubId")]') = 1

They return 2 lines that contains Olympique de Marseille (1 in line 1 and 1 in line 4)

In this last case we will use sql:column("MyKey") to query the table
SELECT MyXml.query('
<result>
  <MyColumnId>{ sql:column("MyKey") }</MyColumnId>
  <ClubName>{ data(//Name) }</ClubName>
  <ClubPosition>{ data(//Position) }</ClubPosition>
</result>
')
FROM MyTable WHERE MyKey = 1

1 comment :

Post a Comment

New free webinars

No comments
From PM Center Usa, 2 news and FREE interesting webinars:

  • Risk Management Made Easy for Projects on Oct. 28, 2010 18:00(CET), Register here
  • Earned Value Analysis – Why it Doesn’t Work on Nov. 4, 2010 17:00 (CET), Register here
0.5 PDU for each.
I would love to know the arguments of the speaker regarding Earned Value Management and the fact that this do not work... Will see...

No comments :

Post a Comment

Project Management: Understanding Earned Value Management

6 comments
One of the the favorite question of a project sponsor during a steering meeting is “So, what is the status of my project?” If things are looking good, a frequent answer from the project manager often sounds like this: “Well, we seem to be within the budget and it looks like we will meet the target go live date…”. If things are a bit dicey, he or she might say “Well, there have been some roadblocks and bottlenecks, so it looks like the timeline might slip by a few weeks and we will also need an additional budget…” Now if I were a project sponsor, this is definitively not what I would want to hear. I will share in this post a good way to report on project status, using a simple methodology: the Earned Value Management.

The goal of Earned Value Management (EVM) is to objectively understand what was accomplished, and compare it to work planned, in other words what was spent and how. By using EVM, the project manager wants to manage cost (and schedule) rather than just monitoring and reporting it.

Let’s take an example of a project status. The project, 10000 CHF budget, 10 days effort, will produce 10 deliverables. The status report gives the following elements: Time elapsed 5 days, spent to date 6000 CHF, deliverables produced: 5 complete and 1 half done. What is the status of this project? How far along are we? What about the performance of the team? If we spend 60% of the budget, does that imply that we have 60% of the project completed?

Without EVM, we just make inspection. With EVM, we make management. EVM can help the team to accurately report on project status and accurately identify trends (and problems). The project manager is then able to answer following questions:
  • What is the status of the project?
  • What are the problems and how to fix them?
  • What is the impact of each problem, and what are present and feature risks?
Here are the basic elements used in EVM (note that money is used to monitor costs AND schedule)


Let’s take again our previous example to illustrate it. We need to produce 10 deliverables within 10000 CHF budget (=> 1000 CHF per deliverable), 5 days of work we already spent 6000 CHF and have 5 deliverables + 1 half done.

In the following graph, we just plot all information.

In most projects, the Planned Value looks like an S-Curve.
What is the status of this project? To know it we will use variance calculation:
Cost Variance CV= EV-AC = 5500-6000 = - 500 CHF negative => bad
Schedule Variance SV= EV-PV = 5500-5000 = + 500 CHF positive => good
Variances can also be represented as indexes. Those indexes can be viewed as the factor of performance.
Cost Performance Index CPI = EV / AC = 5500/6000 = 0.916 Less than 1 => bad
Schedule Performance Index SPI = EV / PV = 5500/5000 = 1.1 More than 1 => good
The Estimate At Completion EAC can be calculated in four different ways depending on the trends of the project:
  • If there is no variances in the project EAC ‘no variances’ = BAC / CPI
  • If the initial estimates are flawed EAC ‘fundamentally flawed’ = AC + ETC
  • If the trend will change EAC ‘atypical’ = AC + BAC – EV
  • If the trend will stay the same until the end EAC ‘typical’ = AC + ((BAC – EV) / CPI)
Let’s say for our example that the first estimate is flawed, we need to calculate the Estimate To Complete, ETC. 4.5 deliverables need to be finished.
EAC = AC + ETC = 6000+4500 = 10500 CHF
The Variance At Completion VAC can be now calculated as VAC = BAC – EAC = 10000-105000 = -500 CHF => the project will cost more than planned.

As a conclusion for this sample project, you are now able to give an objective status:
  • Project is over budget, we spend more than planned.
  • Project is ahead of schedule, we produce quicker.
  • Project will cost 500CHF more than planned at the end, but we will probably deliver earlier
In such case, we could imagine that removing a resource inside the team will reduce the cost, and even if it delays the time we have enough margins for this.
As a general conclusion on EVM systems, to be effective, the system should be put in place as earlier as possible. An established baseline must exist (based on scope analysis and the Work Breakdown Structure) against which to measure progress.
EVM also contains more indicators such as To Complete Performance Index, the TCPI (which provides a projection of the anticipated performance required to achieve either the BAC or the EAC). Project managers can also perform variance analysis and management and contingency reserve analysis (trend analysis).

To summarize, this table contains useful formulas for EVM

6 comments :

Post a Comment

Getting started with jQuery

No comments
What is jQuery
jQuery is a JravaScript based framework that emphasizes interaction between JavaScript and HTML. The main goal is to simplify common commands of JavaScript. It was first realized in the beginning of 2006. jQuery is free, open source software Dual-licensed under the MIT License and the GNU General Public License.
The jQuery file can be downloaded here (http://docs.jquery.com/Release:jQuery_1.3.2).
jQuery contains the following features:
  • DOM (Document Object Model) element selections using the cross-browser open source selector engine Sizzle, a spin-off out of jQuery project
  • DOM traversal and modification (including support for CSS 1-3 and basic XPath)
  • Events
  • CSS (Cascading Style Sheet) manipulation
  • Effects and animations
  • Ajax (asynchronous JavaScript and XML)
  • Extensibility
  • Utilities – such as browser version and the each function.
  • JavaScript Plug-ins
Microsoft has announced plans to bundle jQuery initially in Visual Studio for use within ASP.NET AJAX framework and ASP.NET MVC Framework.

Examples: Access the selection in an HTML drop down list
jQuery usually exists as a single JavaScript file, containing all the common DOM, Event, Effects, and Ajax functions. It can be included within a web page using the following mark-up:
Suppose we have the following drop down list mark-up, where Vegetable has been selected

How can we use JQuery to determine the text of the selected option (Olympique de Marseille)?
One way is to use an xpath-like expression:
The #clubs tells us to go to the XML node with id = “clubs”. The option tells us to find all tags under categories with tag-name option.  The [@selected] tells us to find the option tag containing an attribute with a key called selected. The text function tells JQuery to return the text in the selected option tag (which in this case is Olympique de Marseille)
Another way to get the option text is to use the built in JQuery filter for getting the selection
A third way to get the option text is to use the find function on the clubs node:
The find function searches for the node within clubs containing the criteria, which in this case is a selected option.
For more information about jQuery, check their website at http://jquery.com/

No comments :

Post a Comment