Freitag, November 10, 2006

DEV358 New Cryptography: Algorithms, APIs and Architecture


Rafal Lukawiecki
Abstract:
Are you still using DES, RSA, MD5 or SHA-1? Do you know how this might expose your company to a loss? Why is CAPI 1.0 being retired? Is the architecture of the new Open Cryptographic API for Windows (CNG) any better than CAPI 2? What is Suite-B? Do you realise that the next few years will see a dramatic replacement of those security fundamentals we used to silently rely on? These are some of the question we will answer in this information-packed and fast-paced level 300 session aimed Developers and Architects who are already familiar with basic cryptographic and security concepts. While we are not going to explain the inner workings of any of the covered algorithms, we will give you a good background to all the new ones, so that you can make better choices while designing security for your systems. Microsoft Windows Vista will be the first commercial operating system to include a full support for all of those innovations, closely followed by the “Longhorn” Server, so consider this as an opportunity to incorporate the awesome power of the recent developments in your software. For the curious, we may even tell you why we cannot tell you about Suite-A...


So, letzte Session an dieser TechEd. Leider… obwohl ich müde bin und den Kopf voller neuer Sachen habe ;-) Ist immer interessant, aber auch sehr anstrengend und ermüdend. Zum Schluss gönn ich mir nochmals (das 1. Mal in diesem Jahr) Rafal Lukawiecki. Rafal ist einer meiner lieblings Speaker. Ich habe ihn vor 3 Jahren das erste Mal gesehen und war begeistert. Er kann sehr komplexe Themen sehr bildlich und immer mit einer prise Humor rüberbringen. Ich habe durch ihn damals das 1. Mal das Konzept von Public und Private Key wirklich verstanden. Also bin ich nun gespannt was kommt. Wie ich Rafal kenne, wird er aber unsere Köpfe trotzt der letzten Session nicht in den "Idle" Modus versetzen.
Rafal beginnt mit einer Erklärung, wo dass heute in der Kryptographie sind und weshalb es einen neue braucht. Er erklärt, dass es sein Ziel ist, uns alle zu Kryptographie Fans zu machen ;-)
Er geht davon aus , dass alle Anwesenden wissen, was Symmetric, Public Key und Hibryd Kryptographie ist….

Heutige, vor Vista Empfehlungen:
At present (Nov 2006), consider using the following cryptographic mechanisms available in Windows XP and Server 2003 in preference to others:
• AES-128 (or AES-192, or AES-256)
• RSA 2048 (or longer)
• “SHA-2” (i.e. SHA-256, or SHA-512)
• DSA (or SHA-2/RSA signatures)


DES, IDEA, RC2, RC5, Twofish are not Recommended !!!


Rijndael (AES) Recommended :

Current US standard
• Winner of the AES (Advanced Encryption Standard) competition run by NIST (National Institute of Standards and Technology in US) in 1997-2000
• Comes from Europe (Belgium) by Joan Daemen and Vincent Rijmen. “X-files” stories less likely (unlike DES).
• Symmetric block-cipher (128, 192 or 256 bits) with variable keys (128, 192 or 256 bits, too)
• Fast and a lot of good properties, such as good immunity from timing and power (electric) analysis
• Construction, again, deceptively similar to DES (S-boxes, XORs etc.) but really different

CAST and GOST
Not used widely anymore – avoid

• CAST
• Canadians Carlisle Adams & Stafford Tavares
• 64 bit key and 64 bit of data
• Chose your S-boxes
• Seems resistant to differential & linear cryptanalysis and only way to break is brute force (but key is a bit short!)
• GOST
• Soviet Union’s “version” of DES but with a clearer design and many more repetitions of the process
• 256 bit key but really 610 bits of secret, so pretty much “tank quality”
• Backdoor? Who knows…


Rely on Cryptosystems
Please:

• Indeed: never use just an algorithm, but an entire cryptosystem
• For example:
• If you use DES etc. in a simple “loop” to encrypt a stream of data you literally lose all security
• Instead: use a technique designed for adapting an algorithm to a streams of data, such as CBC (Cipher Block Chaining)
• Microsoft never implement just an algorithm – always a complete cryptosystem, e.g. RSA-OAEP etc.


Dangerous Implementations:
• Cryptographic applications from not-well-known sources
• I “just downloaded this library”
• Insist on using built-in systems where possible:
• Microsoft OS: CNG, CAPI, CAPICOM, MS CSP etc.
• Smartcards: certified CSPs
• Elsewhere: FIPS-140-2 compliant implementations
○ See csrc.nist.gov/cryptval

RC4
Generally Not Recommended
• Symmetric
• Fast, streaming encryption
• R. Rivest in 1994
• Originally secret, but “published” on sci.crypt
• Related to “one-time pad”, theoretically most secure
• But!
• It relies on a really good random number generator
○ And that is a problem
• Nowadays, we tend to use block ciphers in modes of operation that work for streams

RSA, DSA, ElGamal
• Asymmetric
• Slow and computationally expensive – need a computer
• Security increasingly being questioned
• Rivest, Shamir, Adleman – 1978
• Popular and well researched
• Strength in today’s inefficiency to factorise into prime numbers
• Some worries about key generation process in some implementations
• DSA (Digital Signature Algorithm)
• Mainly for digital signing, not for encryption, used in US
• Variant of Schnorr and ElGamal signature algorithm
• ElGamal
• Relies on complexity of discrete logarithms

MD5, SHA
• Hash functions – part of the digital signature
• Goals:
• Not reversible: can’t obtain the message from its hash
• Hash much shorter than original message
• Two messages won’t have the same hash
• MD5 (R. Rivest)
• 512 bits hashed into 128
• Mathematical model still unknown
• Recently (July 2004) broken, do not use on its own
• SHA (Secure Hash Algorithm)
• US standard based on MD5
• MD5 and MD4 broken
• SHA-0 broken (July 2004), SHA-1 probably too weak (partly broken, full break alleged by Chinese recently), use SHA-256 at least

Diffie-Hellman, “SSL”, Certs
• Methods for key exchange and transport
• DH (1976) always generates a new “key-pair” for each asymmetric session
• Certificates are the most common way to exchange public keys
• Foundation of Public Key Infrastructure (PKI)
• SSL uses a protocol to exchange keys safely, but also requires PKI


APIs of Today
• Microsoft CryptoAPI (CAPI) 2.0 is the interface to all CSPs
• Cryptographic Service Providers
○ Built-in or smartcard-based
• .NET Framework 1.1 and 2.0 (and 3.0) wraps most of the functionality of CAPI in classes:
• System.Security.Cryptography and its subclasses:
○ .Pkcs
○ .X509Certificates
○ .XML
• Or you can use the CAPICOM library

Cryptography of Tomorrow
Quantum Cryptography?
• Method for generating and passing a secret key or a random stream
• For keys, not data
• Polarisation of light (photons) can be detected only in a way that destroys the “direction” (basis)
• Works up-to-120km of a dedicated fibre-optic link
• Seems pretty perfect, if a bit tedious and slow
• Practical implementations still use AES/DES etc. for actual encryption
○ Magiq QPN: http://www.magiqtech.com/press/qpn.pdf
• Don’t confuse it with quantum computing, which won’t be with us for at least another 50 years or so, or maybe longer…

More Practical Solution

• US NSA and NIST recommendation is to implement “Suite-B” protocols
• This is very rarely done in today’s software
• Good news: Microsoft supports Suite-B in Windows Vista (and Longhorn Server)
• For all internal implementations Microsoft will not use weaker algorithms than Suite-B
○ But, of course, they will support your choice to do so if you wish

Vista Supports NSA Suite B
www.nsa.gov/ia/industry/crypto_suite_b.cfm

• Required cryptographic algorithms for all US non-classified and classified (SECRET and TOP-SECRET) needs
• Except a small area of special-security needs (e.g. nuclear security) – guided by Suite A (definition is classified)
• Announced by NSA at RSA conference in Feb 2005

Mathematical Designs

• Many cryptographic algorithms (e.g. DSA) rely on a class of mathematical designs related to the concept of discrete logarithms
• These can be implemented over the finite field of any abelian group
• Normally, this means using integers modulo a prime number
• Alternatively, elliptic curve groups could be used
• This leads to ECC


Elliptic Curve Cryptography
ECC
• More efficient design, using fewer bits of key for the same strength
• Breaking these designs seems even harder than traditional ones
• Leads to faster algorithms with fewer problems
• Primarily used to enhance algorithms of existing design, such as DSA


Suite-B Algorithms

• Encryption: AES
• Digital Signature: EC-DSA
• Key Exchange: EC-DH or EC-MQV
• Hashing: SHA-2

Suite-B Encryption

• AES
• FIPS 197 (with keys sizes of 128 and 256 bits)
• This is a specific implementation of Rijndael algorithm allowing use of 128 bit data blocks only
• Keys of 192 bits are not used (although FIPS specifies them)
• Please note that most 256 bit implementations are much slower than 128 bits
• In general, anything of 81 bits or more in this class of cryptography is considered “good enough” for typical commercial applications

Suite-B Digital Signatures

• Elliptic Curve Digital Signature Algorithm (EC-DSA)
• FIPS 186-2 (using the curves with 256 and 384-bit prime moduli)
○ Microsoft also supports 521-bit keys
• This is a classical DSA algorithm applied over the algebra of finite fields of elliptic curves
Suite-B Key Exchange
• Elliptic Curve Diffie-Hellman or Elliptic Curve MQV
• Draft NIST Special Publication 800-56 (using the curves with 256 and 384-bit prime moduli)
• Microsoft will also support 521-bit keys
• Remember DH?
• It is susceptible to man-in-the-middle attacks, so it requires authentication in most applications
• Usually done (not very efficiently) with digital signatures
• EC-MQV: Menezes, Qu, and Vanstone protocol
• Authenticated key exchange
• Design similar to DH
• Uses the discrete logarithm concept
• Also requires a pre-existing, verified and trusted long-term public/private keypair
○ Which is only used for trust establishment, not for actual encryption or signing
○ This gives it an important forward-secrecy property
• Suite-B uses the EC implementation of MQV

Suite-B Hashing

• Secure Hash Algorithm
• FIPS 180-2 (using SHA-256 and SHA-384)
• As MD5 and SHA-0 have been broken and SHA-1 has been allegedly broken we do not have much choice
• Almost no alternatives exist
• SHA-2 should suffice for a few years, but ultimately it must be replaced
• SHA-2 allows: 224, 256, 384, and 512 bit lengths

APIs for Suite-B Today?

• There are no widely used or supported libraries or APIs for Suite-B and most operating systems of today
• However…

Cryptographic Next Generation API
CNG

• CAPI 1.0 has been deprecated
• May be dropped altogether in future Windows releases
• CNG
• Open cryptographic API for Windows Vista/Longhorn
• Ability to plug in kernel or user mode implementations for:
○ Proprietary cryptographic algorithms
○ Replacements for standard cryptographic algorithms
○ Key Storage Providers (KSP)
• Enables cryptography configuration at enterprise and machine levels

• Main CNG Features

• Cryptography agnostic
• Kernel-mode for performance and security (better performance than CAPI 1.0)
• FIPS-140 Certification
• 140-2 and Common Criteria (CC) on selected platforms
• 140-1 everywhere
• CC compliance for long-term key storage and audit
• Suite-B of course, but also supports all existing algorithms available through CryptoAPI 1.0
• Key Isolation and Storage using TPMs
• Developer-friendly model for plug-ins

Three APIs within CNG:

• CNG Cryptographic Primitive Functions
○ The “main” API: all algorithms are here
• CNG Key Storage Functions
○ Allows interaction with the new Key Storage Providers concept
§ Supports existing devices (smartcards) and future types of tokens
○ Interface for all secure key creation, including the EC-DH and EC-MQV* methods
○ Interface for import and export of keys using PKCS #7 and #8
• CNG Cryptographic Configuration Functions
○ For registering and managing additional cryptographic functions
Read: http://msdn2.microsoft.com/en-us/library/aa375276.aspx

In addition to CNG:

• .NET Framework System.Security.Cryptography
○ Microsoft will extend the .NET Framework to cover CNG in the future
○ At present, it is a Windows native API
• TBS: TPM Base Services
○ For interaction with Trusted Platform Modules
• Certificate Enrolment API



Using CNG – Two Models

• Depending on your needs, you use CNG with:
• Algorithms and keys provided by a Key Storage provider (such as smartcards)
○ All function names begin with “N”, such as NCryptOpenStorageProvider
○ This is the CNG Key Storage Functions API
§ Ncrypt.h, Ncrypt.lib and Ncrypt.dll
• Algorithms and keys generated by the operating system’s software providers
○ All function names begin with “B”, such as BCryptOpenAlgorithmProvider
○ This is the CNG Cryptographic Primitive Functions API
§ Bcrypt.h, Bcrypt.lib and Bcrypt.dll
• I only explain “B” in next slides, but “N” is very similar

So, Who Encrypts?
Reason for the Two APIs

• “B-API” if
• You want Vista/Longhorn (or future OS) to do the encryption, you use the “B-API”
○ Implementation provided by a Key Storage Provider
○ Microsoft or other
• “N-API” if
• You have a smartcard, HSM (hardware security module), or a TPM
○ All computations performed by the device
○ Generally, OS has nothing to do with that

Summary:
• Today’s cryptography has just accelerated its evolution
• Windows Vista and Longhorn Servers will be at the front of innovation in this field
• You can benefit from the increased security by using BitLocker or the APIs such as CNG
• Developers life is easier with CNG than ever with CAPI
• It is an exciting time to be using cryptography!

Es würde jetzt sehr lange dauern, alles was er am "Rande" noch erzählt hat. Wie erwartet, eine typische Rafal Session. Sehr interessant, auch wenn ich nicht alles auf Anhieb verstanden habe. Aber das ist bei Ihm meistens so. Das gehörte muss sich zuerst setzten, sich einige Gedanken darüber machen und irgendwann wird ein Lichtlein aufgehen .. ;-) Die Folien habe ich mir gesichert, so dass ich sie mir immer und immer wieder reinziehen kann ….

Obwohl dies die letzte Session war, wartet noch mit "ausschalten". Ich habe diesen Beitrag zu einem grossen Teil noch im Flugzeug geschriebe. Will sagen, ich hab mindestens noch ein Fazit, ein paar Bilder usw.... stay tuned! (Aber zuerst geniesse ich jetzt das weekend, zumindest was davon übrgbleibt ;-) )

OFF308 Development Model for Customizing the new Office Ribbon User Interface (UI)

Jaser Elmorsy , Max Hauser
Abstract:
The new UI introduced with 2007 Microsoft Office system codenamed 'Ribbon' is fully customizable through a new, declarative programming model using XML. This session dives into details of this mark-up language and describes how the Ribbon interacts with DLL-based code of Add-Ins developed in C# or VB.NET (or even VB6). It even shows you a couple of real live applications for Office 2007 clients. Also you will learn about the use cases and guidelines for customizing the Ribbon bar and when to use Custom Task Panes for customizing the Office UI instead.



Die Converence neigt sich langsam dem Ende zu, Irgendwie hat es auch keine Sessions mehr, welche neu oder interessant sind für mich. Ich habe mich für diese Session entschieden, weil wir hier, wenn wir dann mal Office System 2007 einsetzen (Client Side) , dann könnten wir doch auch im Ribbon gewisse RTC Spezifische Sachen machen (Vorlagen ? ;-) )

Zuerst erfolgt eine Erklärung, was das Ribbon ist und welche Controls es auf dem Ribbon gibt. Ich möchte jetzt nicht alle aufzählen, ich verzichte auch auf Screenshots, weil wer sich für das Ribbon interessiert, kennt es entweder schon, oder geht auf mein Office Blog.

Das erste was gezeigt wird, ist ein Custzom Tab im Ribbon auf Dokumenten Basis. Das heisst, dass im Ribbon ein zusätzlicher Tab erscheint, immer wenn ich genau das eine Dokument öffne. Macht sinn für Templates.

Nun wird im Studio (Visual Studio 2005 R2 (RTM vor 3 Tagen ) !!) ein Custom Ribbon gebaut. Dies ist als Project Type im neuen Studio enthalten.

Es folgt nun ein from scratch geführte demo, wo Methode um Methode erstellt wird. Es geht ein wenig schnell, wenn ich alle jetzt beschreiben und Dokumentieren möchte. Die Samples sind aber auf MSDN verfügbat. Was jetzt gebaut wurde, ist ein Control, welches eine Image suche darstellt. Ich habe eine kleine Search box, gebe den Namen der Company ein, von der ich ein Logo will. Ich gebe Microsoft ein, sehe eine Auswahl (Also PopUp) der Images, welche auf der Yahoo Bilder Suche(via WebService) gefunden wurde. Wenn ich nun das Logo anklicke, wird es an der aktuellen Stelle im Dokument eingefügt. Es werden nun noch cool looking ToolTips etc. hinzugefügt.

Das ganze Ribbon kann komplett selbst geschrieben werden. Wenn ich ein Control definitiv nicht im Ribbon haben will, dann muss ich from scratch starten, ein Eigenen Ribbon bauen, und alle Controls, welche ich haben will, wieder hinzufügen (Execpt dem, welches ich nicht haben will) .

Nun geht es um die Customization der QAT. Dies wird definitiv nicht empfohlen, da es das einzige Control ist, welches der User Steuern kann.

Nun ist das Thema Contextual Tabs. Dies kann nicht programmatisch geschehen, sondern man kann die bestehenden verwenden für die Eigenen Controls.

Nun geht es um Shared Add-Ins. Dies geschieht Wizard geseuert, zumindest der erste Schritt. Danach kann ich meine Methoden implementieren. Als Beispiel nehmen sie die OnPrint Methode. Sie überschreiben die Methode, so dass immer wenn ein "OnPrint" Event gefeuert wird, erscheint nun eine MsgBox, wo darauf hingewiesen wird. Dass es sich um "Confidential" Content handelt, willst du den wirklich drucken ? Wenn ich nein klicke geschieht nichts, wenn ja, wird die normale OnPrint WinForm aufgerufen. Witzig ist, das dies nun für alle MS Applikationen funktioniert. Witzig ist, dass es für Acces nicht funkioniert. Dazu muss ich ein eigenen UI machen, da es für Access andere ID's gibt. Ist nicht ein Problem und mit einem Switch Statement schnell gemacht… aber lustig, dass Access immer noch nicht "Office" ist. Outlook ist auch noch eine Ausnahme. Weil in Outlook gibt es nur in den sog. Inpsectors das Ribbon. In Outlookk existieren 19 Ribbons ! .
Es folgt nun ein Beispiel, wie sie einControl machen, mit welchem ich in den Kontakten für die Business Cards verschiedene Templates verwenden kann.

Es geht jetzt noch um die bestehenden Add-Ins, und wie man diese übernehmen kann. Die meisten sollten funktionieren, man müsse es ausprobieren...

Photo Break







DEV302 Microsoft XNA and the Future of Game Development

Rob Miles
Abstract:
XNA represents a major milestone in the field of game development, bringing game creators a unified platform and the safety of managed code. It also greatly reduces the difficulties faced when starting out in game development, closing the gap between idea and working implementation. The recent release of XNA Express gives programmers a chance to get to grips with the XNA framework and use it to create content for both the PC and the XBOX 360.Beginning with an overview of the XNA platform and the XNA Express development tools, this demo packed presentation then moves into the ‘nitty gritty’ of game development using XNA, leading to a fully realised casual game running on an XBOX 360. Whether you are a seasoned games coder, or a programmer thinking of moving into game development this session will give you plenty of food for thought and information to get you started.


Freitag morgen, ich hab nicht wirklich eine Session gefunden heute, aus der ich einen Business Value ziehen kann. Deshalb schaue ich auch ein wenig für mich…und zuviel wissen kann man ja nie ;-)

The Video Game Business
The scale of the enterprise

• Bigger than the movies?
• Some people say that video games are now bigger money spinners than the movies:
• The game “GoldenEye” made more money than the film. And cost a lot less to produce.
• Set to grow even more?
• The potential of a connected, high performance, easy to program gaming appliance in millions of homes is bound to lead to new opportunities.
• Just about anything is amenable to some form of gaming tie-in
○ "Casual" games are a huge growth area

Game Developer Challenges
Big Games are hard to make

• A modern, full price game is extremely complex to create
• It contains not just code, but a huge number of additional resources produced by a range of specialists
• Managing these is very difficult
• You need to ensure that all elements are up to date
• You need to track dependencies
• You need to determine which elements are part of the game
• Game developers do not have the time to develop appropriate management tools
• Software development tools are inappropriate


Small teams can’t cut it any more

• Writing games for sale to the mass market has become the province of specialist games houses
• There are niche markets for things like the mobile platform, but the cost of developing, marketing and delivering a modern game is prohibitive for the small developer
• With the huge cost of game production, the publishers are much less likely to pursue novel gaming ideas
• New games are often tied to movies or TV
• Games are often sequels of older ones


XNA for the Game Studio
Managing the content with a pipeline

• The XNA content “pipeline” provides a unified mechanism for the storage, processing and retrieval of resource items
• A set of “importers” are provided for standard resource types
• Developers can make their own importers if they want to expand the range of these
• Content items are held in a typesafe manner within the repository and can be extracted and processed appropriately as part of the build process



XNA for the Games Studio
Making a nice place to work

• One of my rules when starting a new project is:
Make yourself a nice place to work
• By this I mean that it should be easy to deploy, test and debug code as I write it
• No manual intervention to build the system
• Fully automated and instrumented tests
• Good code management and re-factoring support
• XNA is based on Visual Studio 2005 Team Foundation Server
• Good for "Agile Development"

XNA and Agile Development

• The rich, integrated toolset that you get with XNA is very amenable to Agile Development
• Pair programming
• Rapid iteration (test – code – re-factor)
• Test driven development
• Has been shown to improve programmer productivity and reduce burnout
• Has great potential in the games industry

XNA ist based on .net und die games werden in C#2.0 geschrieben, Alles ist managed Code. Ich entwickle und teste im Visual Studio 2005 und kann direkt zur Xbox360 Deployen !

Es kommt jetzt eine Demo, einfaches Spiel (“Hot Salad Death with Cheese”), aber anschaulich wie der Weg is und wie das geht
Folgende vorgehensweise ist grundlegend:

1. Initialise all the resources at the start
2. fetch all textures, models, scripts etc
3. Repeatedly run the game loop:
4. Update the game engine
○ read the controllers, update the state and position of game elements
5. Draw the game environment
○ render the game elements on the viewing device

Skeleton:

partial class Game1 : Microsoft.Xna.Framework.Game
{
public Game1() {
graphics = new GraphicsDeviceManager(this);
content = new ContentManager(Services);
}
protected override void LoadGraphicsContent(bool loadAllContent) {
}
protected override void Update(GameTime gameTime) {
}
protected override void Draw(GameTime gameTime) {
}
}

Initialisierung:


Texture2D cheeseTexture;
SpriteBatch spriteBatch;
protected override void LoadGraphicsContent(bool loadAllContent) {
if (loadAllContent)
{
cheeseTexture = content.Load("cheese");
spriteBatch = new SpriteBatch(graphics.GraphicsDevice);
}
}

• LoadGraphicsContent is called when our game starts
• It creates our cheese texture and loads an image into it
• It also creates a SpriteBatch instance to manage the drawing process

Die Content Pipeline managed den Content als Resources. Jede Ressource bekommt einen Asset Name. Die Load Methode der ContentManager gibt uns den Zugang zu den Ressourcen.

Jetzt kommt das Drawing:

protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
spriteBatch.Draw(cheeseTexture,
new Rectangle(
cheeseX, cheeseY,
cheeseTexture.Width, cheeseTexture.Height),
Color.White );
spriteBatch.End();
base.Draw(gameTime);
}


Und jetzt noch das Game Update:

protected override void Update()
{
cheeseX = cheeseX + cheeseXSpeed;
if ((cheeseX <= 0) ||
(cheeseX + cheeseTexture.Width > Window.ClientBounds.Width))
{
cheeseXSpeed *= -1;
}
// repeat for Y
// Let the GameComponents update
UpdateComponents();
}

Nun haben wir einen Käse, der auf dem Bildschirm herum bounced. ;-)

• XNA provides support for keyboard, mouse and XBOX 360 controller
• You can plug a controller into an PC and it will just work
• A wireless PC controller interface will be available later
• The game controller buttons are polled during the update method

Ich vezichte auf den Code, der für den Xbox Kontroller eingefügt wurde. Sieht sehr einfach aus, im Stil von, wenn links gedrückt wurde, fahre nach Links ;-)

Ich kann alle Blöcke als Komponents "rausnehmen" ähnlich wie Components bei WinForms. So kann ich die immer wieder verwenden, kann sie auch unabhängig behandeln. Z.B. den Hintergrund ändern als Component, ohne dass ich alles anpassen muss.

Nun fügen wir dem ganzen einen Background hinzu. Geht auch sehr einfach.
We just have to extend the DrawableGameComponent class and implement LoadContent, Update and Draw methods. This is directly analogous to components in Windows Forms


Display Text:

• The XNA framework does not support text rendering directly
• I render a set of characters to a bitmap and then copy the characters from the bitmap into the display area
• I have implemented this as another component
• This gets the text to be displayed from the game instance and then draws it on the screen
• I can get different font sizes by scaling the text as I render it

Adding Sound:

• Sound makes a huge difference to a game
• XNA has very powerful sound creation facilities
• The Microsoft Cross Platform Audio Creation Tool (XACT) is used to create soundbanks which are loaded by the game
• This tool is provided as part of the XNA Express distribution
• The sound banks are managed by the content manager


Nun ist das Game fertig. Scheint wirklich alles sehr einfach zu gehen.

Es folgt die Empfehlung, dass wenn man neu ist im Game Programming, soll man mit 2D Games anfangen. Es ist einfacher, später auf 3D zu switchen.

Xna in the Future:

• The current XNA Express Beta 2 lets you use Visual Studio Express to write XNA games for the PC
• In December it will be possible to create them for the XBOX itself
• To write games for the XBOX 360 you will have to pay an annual fee
• Then the content manager and build tools will be made available

Three reasons why we should all be writing games

• It is easy
• XNA and .NET lower the difficulty bar and make it possible to target a range of platforms in one shot
• Using .NET as the underlying platform gives games integrity and reliability right out of the box
• You can make money
• There is a market for “casual” games which are quick to play
• XBOX Live will provide a means by which such games can be sold
• It is fun!
• Any developer can write viable games and enjoy doing it

Gute Session, erstaunlich auch, dass ich natürlich das gesamte .net nutzen kann. Ich kann Games entwickeln, die auf eine Xbox360 und auf einem Pocket PC laufen.

Wieder etwas, wo ich sagen muss, hät ich nur mehr Zeit…

XNA Blog

OFF311 Building Collaboration Applications using the 2007 Office System Unified Communications Infrastructure

Kyle Marsh
Abstract:
This session explains how to integrate presence and instant collaboration into smart client applications and web portals using the Unified Communications Platform. We will show how contextual collaboration can be added to your applications using Office Communicator Extensibility, the Unified Communication Client Platform, or the Communicator Web Access UI Controls or the Communicator Web Access AJAX Service. We will introduce how you can integrate Unified Communications into your business processes by building on our SIP Signaling APIs or our middle tier platform. We will also introduce how you can extend and enhance the way an enterprise communicates by using the Office Communications Server SDK.


Hmm, wieder so ein slot… gleich vier Sessions wären interessant gewesen. Diese habe ich ausgewählt, um mir neue Ideen zu holen. Ich denke, dass so das eine oder andere von mir einmal zur Diskussion aufgeworfen werden wird intern.

Zuerst wird vorgestellt, was Office Communications Server 2007 bringt und was alles damit möglich ist.



Es werden verschiedene Dienste (wenn das die Firma erlaubt) unterstützt. Interessant ist die Tatsache, das ich mit anderen Companys komunnizieren kann. (Video, PPT etc.) Dies könnte man nutzen, um den Support persönlicher zu machen ;-) Ist aber auch Interessant, für die Zusammenarbeit (z.B namics) mit externen Partnern. So ist sehr viel möglich, ohne gleich ein "reales" Meeting zu organisieren und Sitzungszimmer zu suchen.
Der Communication Server kann auch mit Wireless Headsets etc. umgehen. Natürlich kann er auch VOIP und ich kann diverse VOIP Systeme integrieren. Outlook 2007 ist voll integriert und lässt sich als komplette Messaging Zentrale einsetzten. Egal, ob voice, video oder Instant Messaging.

• Unified Communications Enable your Services
• Supply services over Unified Communications
• Send an alert to a user that they need to call a customer.
• Start a conversation with a user when they become available and have expense reports to approve. Show information from the reports and ask for approvals
• Use the IM Channel to send structured data
• Control a PBX
• Control an audio conference provider
• Transaction data

Enhance Enterprise Communications
• Communications Server is the center of Enterprise Communications
• Communications Server Applications
• Routing Applications
• Authorization – Ethical Walls
• Call Center Routing
• Content Logging
• Filtering/Virus Scanning
• Billing
• Translation


Es gibt sogenannt Presence Kategoryen, wo man definieren kann, wer sieht was, wer kann welche Infos über mich abrufen etc.



Es werden z.B auch verschiedene Voice Devices unterstützt. Das heisst, wenn jemand mehrere Voice Devices besitzt (Tel. am Arbeitsplatz, Mobile etc.) Ich kann OCS so einstellen, dass er weiss, wann wo ich das letzte mal "Idle" war oder welche Device ich zuletzt genutzt habe. Wenn jemand einen Voice Call macht, dann entscheided OCS selbst, auf welche Device er den Call leitet.
Oder ich kann einen Call erhalten, seh wer anruft und am (z.B mobile) Phone entscheiden, wo ich den Call annehme. Also kann ich sagen, ich will jetzt über mein Festnetz Home Phone mit der Person sprechen. Dies, ohne den Call angenommen zu haben, sondern ich telefoniere gleich über das Home Phone, obwohl ich auf dem Handy angerufen wurde.

Contextual Unified Communications:

• Communicate with the right person at the right time
• Your applications are the “Contact List”
• Use the Standard Communications Experience via Office Communicator Automation
• Your application can be a first class communications client
• VoIP – 2 party and multiparty
• Video – 2 party and multiparty
• Drive Conferencing
• Instant Messaging
• Call Control of a desktop phone

Enhance Enterprise Communications:

• Communications Server is the center of Enterprise Communications
• Communications Server Applications
• Routing Applications
• Authorization – Ethical Walls
• Call Center Routing
• Content Logging
• Filtering/Virus Scanning
• Billing
• Translation

Es folgt eine Demo, wo der OC Client gezeigt wird. Die Version 2007 und der Web Client.Es wird gezeigt, wie ich in meinen Applikationen diese Funktionen nutzen kann, welche API's es gibt etc.
Eine sehr ausführliche Demo, viele Code Beispiele und was ich wo alles einbringen kann. Es ist mittels des API's möglich, seinen Komplett eigenen Messenger zu schreiben mit Funktionen, die der "original Messenger nicht hat.
Es werden am ende noch diverse Samle Apps gezeigt, wie ich wo was ändern oder überschreiben kann.
Relativ interessant für uns… werden wir wohl nie haben oder durchsetzten können.