Some non-geek blog lovin’

I promised my wife I’d link to her blog, so here it is:

Running on Veggies: Adventures in Healthy Living

Back to the geeky stuff shortly!

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

Android–Create a ListView with rounded corners

In a previous post I showed how to create a custom multi-line ListView bound to an ArrayList. Let’s make it a little more visually appealing and give each item some rounded corners.

If you followed the previous how-to you wound up with something that looked like this:

image

To put each ListView item (name, address & phone) into its own rounded-corner box, create a new file in your res/drawable directory called border.xml, and paste in the following code:

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <stroke android:width="1dp" android:color="#FFFFFF" />
    <padding android:left="5dp" android:top="5dp" android:right="5dp" android:bottom="5dp" />
    <corners android:radius="8dp" />
</shape>

Then, specify the background of your LinearLayout in custom_row_view.xml:

android:background="@drawable/border"

And that’s it:

image

Of course, you can mess with colors, padding etc. to get the look you want, and you can apply this to just about any object in your layout.

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

Accessing all context properties in a custom BizTalk pipeline component

Previously I talked about how to create a custom BizTalk pipeline component, and gave a few examples for accessing specific context properties. I wanted to be able to dump all the context properties to disk for examination, so I added a few lines of code and an on/off switch.

First, add two properties to your component:

private bool _EnableContextTrace;
private string _FileTraceLocation;

public bool EnableContextTrace
{
    get { return _EnableContextTrace; }
    set { _EnableContextTrace = value; }
}

public string FileTraceLocation
{
    get { return _FileTraceLocation; }
    set { _FileTraceLocation = value; }
}

Make sure to add them to the Load() and Save() methods in the IPersistPropertyBag region:

public virtual void Load(Microsoft.BizTalk.Component.Interop.IPropertyBag pb, int errlog)
{
    object val = null;
    val = this.ReadPropertyBag(pb, "EnableContextTrace");
    if ((val != null))
        this._EnableContextTrace = ((bool)(val));
    val = this.ReadPropertyBag(pb, "FileTraceLocation");
    if ((val != null))
        this._FileTraceLocation = ((string)(val));
}

public virtual void Save(Microsoft.BizTalk.Component.Interop.IPropertyBag pb, bool fClearDirty, bool fSaveAllProperties)
{
    this.WritePropertyBag(pb, "EnableContextTrace", this.EnableFileTrace);
    this.WritePropertyBag(pb, "FileTraceLocation", this.FileTraceLocation);
}

And finally add some code to the Execute method to loop through all the context properties and write them to a text file:

if (_EnableContextTrace && _FileTraceLocation.Length > 0)
{
    IBaseMessageContext contextList = inmsg.Context;
    string name;
    string nmspace;
    string contextItems = "";
    for (int x = 0; x < contextList.CountProperties; x++)
    {
        contextList.ReadAt(x, out name, out nmspace);
        string value = contextList.Read(name, nmspace).ToString();
        contextItems += "Name: " + name + " - " + "Namespace: " + nmspace + " - " + value + "\r\n";
    }

    using (StreamWriter outfile = new StreamWriter(_FileTraceLocation + "ContextProperties.txt"))
    {
        outfile.Write(contextItems);
    }
}

After building the DLL and adding it to the Pipeline Components directory, you should be able to configure the properties:

image

Deploy the project, drop and file in, and examine the contents of the ContextProperties.txt file that was created. In my case I ran a HIPAA 837 file through and got the following:

Name: FileCreationTime - Namespace: http://schemas.microsoft.com/BizTalk/2003/file-properties - 2/6/2012 7:41:01 PM
Name: ReceivedFileName - Namespace:
http://schemas.microsoft.com/BizTalk/2003/file-properties - C:\Temp\Split5010Claims\Input\0217_ACS_UIC_837P_OUT_20120203124952.edi
Name: ActivityIdentity - Namespace:
http://schemas.microsoft.com/BizTalk/2003/messagetracking-properties - {BDE71A7F-7351-480E-90A9-3607A92FAE2F}
Name: AdapterReceiveCompleteTime - Namespace:
http://schemas.microsoft.com/BizTalk/2003/messagetracking-properties - 2/6/2012 7:41:01 PM
Name: PortName - Namespace:
http://schemas.microsoft.com/BizTalk/2003/messagetracking-properties - Input5010_P
Name: InboundTransportLocation - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - C:\Temp\Split5010Claims\Input\*_837P_*.edi
Name: InterchangeID - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - {E0124062-FF6C-41B1-94F9-BDC929D54FC4}
Name: ReceiveInstanceID - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - {28D3080A-DE0F-48AC-AB08-C0B61285061F}
Name: ReceiveLocationName - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - Input5010_P_FILE
Name: ReceivePortID - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - {C4184808-467F-400F-9681-84924F44E9F4}
Name: ReceivePortName - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - Input5010_P
Name: AuthenticationRequiredOnReceivePort - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - False
Name: InboundTransportType - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - FILE
Name: LRPMsgBodyTracking - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - 0
Name: MessageExchangePattern - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - 1
Name: ReceivePipelineID - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - {45C53C6F-DBE9-49DB-AE7B-58A9D0901730}
Name: ReceivePortAuth - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - 0
Name: MessageType - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - http://schemas.microsoft.com/BizTalk/EDI/X12/2006#X12_00501_837_P
Name: SuspendMessageOnRoutingFailure - Namespace: http://schemas.microsoft.com/BizTalk/2003/system-properties - True
Name: ISA05 - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - 30
Name: ISA06 - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - 208876513
Name: ISA07 - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - 30
Name: ISA08 - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - 205498481UIC5
Name: ISA15 - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - P
Name: ISA_Segment - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - ISA*##*##########*##*##########*30*123456789      *30*987654321UIC5  *120203*1249*U*00501*000000064*0*P*:~
Name: GS01 - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - HC
Name: GS02 - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - 208876513
Name: GS03 - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - 205498481UIC5
Name: GS07 - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - X
Name: GS08 - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - 005010X222A1
Name: ST01 - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - 837
Name: GS_Segment - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - GS*HC*123456789*987654321UIC5*20120203*1249*64*X*005010X222A1~
Name: ReuseEnvelope - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - False
Name: TsSequenceNumberInGroup - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - 72
Name: GE01 - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - 72
Name: AgreementPartIDOnReceive - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - 0
Name: AgreementID - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - 0
Name: AgreementName - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - BTSGuestParty
Name: SenderPartyName - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - BTS-SENDER
Name: PartyName - Namespace:
http://schemas.microsoft.com/BizTalk/2003/messagetracking-properties - BTSGuestParty
Name: SourcePartyID - Namespace:
http://schemas.microsoft.com/BizTalk/2003/system-properties - s-1-5-7
Name: ReceiverPartyName - Namespace:
http://schemas.microsoft.com/Edi/PropertySchema - RECEIVE-PARTNER

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

Creating a custom BizTalk 2010 pipeline component–Part 3

I hadn’t intended for there to actually be a part 3 to this series, but I realized that I failed to talk about how to get the xml back into the message once you’re done messing with it. You have to convert it to a MemoryStream and assign it to IBaseMessage.BodyPart.Data, like this:

public Microsoft.BizTalk.Message.Interop.IBaseMessage Execute(Microsoft.BizTalk.Component.Interop.IPipelineContext pc, Microsoft.BizTalk.Message.Interop.IBaseMessage inmsg)
{
    IBaseMessagePart bodyPart = inmsg.BodyPart;
    Stream originalStream = bodyPart.GetOriginalDataStream();
    if (originalStream != null)
    {
        XmlDocument myXml = new XmlDocument();
        myXml.Load(originalStream);

        myXml = DoWork(myXml); //Whatever you actually want to do to the xml

        byte[] outBytes = System.Text.Encoding.ASCII.GetBytes(myXml.OuterXml);
        MemoryStream memStream = new MemoryStream();
        memStream.Write(outBytes, 0, outBytes.Length);
        memStream.Position = 0;
        bodyPart.Data = memStream;
        pc.ResourceTracker.AddResource(memStream);
    }

    return inmsg;
}

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

Creating a custom BizTalk 2010 pipeline component–Part 2

In the last post I showed how to create the skeleton of a pipeline components, add it to the toolbox, integrate it into a BizTalk app and deploy & test it. This time I’ll go over working with the XML, reading and writing message context properties, and reading and writing custom component properties.

To get the xml portion of the message, you can get a Stream from IBaseMessage.Body.Part.GetOriginalDataStream() and load it into an XmlDocument. In our case we’re manipulating the structure of an 837 HIPAA claim, so I’m not going to going into all the details, but here’s a method to write the xml out to a file:

protected void WriteXmlToFile(IBaseMessage message, string fileName)
{
    IBaseMessagePart bodyPart = message.BodyPart;
    Stream originalStream = bodyPart.GetOriginalDataStream();
    XmlDocument xdoc = new XmlDocument();
    xdoc.Load(originalStream);
    xdoc.Save(fileName);
}

You can read the various message context properties (see this link for a list) by querying IBaseMessage.Context, like this:

protected void ReadContextProperties(IBaseMessage message)
{
    string inboundTransportType = (string)message.Context.Read("InboundTransportType", "http://schemas.microsoft.com/BizTalk/2003/system-properties");
    string receivedFileName = (string)message.Context.Read("ReceivedFileName", "http://schemas.microsoft.com/BizTalk/2003/file-properties");
    string interchangeID = (string)message.Context.Read("InterchangeID", "http://schemas.microsoft.com/BizTalk/2003/system-properties");
}

You can write (update) context properties with IBaseMessage.Context.Write:

protected void WriteContextPropertyValue(IBaseMessage message, string propertyName, string propertyNamespace, string propertyValue)
{
    message.Context.Write(propertyName, propertyNamespace, propertyValue);
}

Reading custom properties is done in the Load() method that was automatically generated by the Pipeline Component Wizard. In the last post I created a property called “TestProperty”, and this is the code that was created:

public virtual void Load(Microsoft.BizTalk.Component.Interop.IPropertyBag pb, int errlog)
{
    object val = null;
    val = this.ReadPropertyBag(pb, "TestProperty");
    if ((val != null))
    {
        this._TestProperty = ((string)(val));
    }
}

So, tying this all together in the Execute() method would look something like this:

public Microsoft.BizTalk.Message.Interop.IBaseMessage Execute(Microsoft.BizTalk.Component.Interop.IPipelineContext pc, Microsoft.BizTalk.Message.Interop.IBaseMessage inmsg)
{
    WriteXmlToFile(inmsg, _TestProperty);

    ReadContextProperties(inmsg);

    WriteContextPropertyValue(inmsg, "ReceivedFileName", "http://schemas.microsoft.com/BizTalk/2003/file-properties", "NewFileName");

   return inmsg;
}

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

Creating a custom BizTalk 2010 pipeline component–Part I

Recently at work we had a need to be able to manipulate the XML version of a HIPAA EDI file before it hit any of our BizTalk orchestrations, so I decided to do this with a custom pipeline component. There are other (possibly better…) ways of doing this, but sometimes you just have to work with what you’ve got. I can never remember all the little bits and pieces you have to set up in a custom pipeline component, so I decided to give the BizTalk Server Pipeline Component Wizard a try. The wizard walks you through a few simple screens, then builds a skeleton component that you can add your code to.

Download and extract the Wizard. Unzipping the downloaded file should give you a Visual Studio solution. Build it, then run the setup.exe file located in the PipelineComponentWizard Setup project.

Create a new BizTalk solution (or open an existing one) that would need to use EdiReceive pipeline. You don’t need to include the Component Wizard project you just built into this solution. For example, you could just create a simple project that takes an EDI file in a receive location and drops the disassembled XML to a Send Port. Compile and deploy it, then configure it and test that it’s working properly.

Now, create an additional project in the same solution. Under BizTalk Projects, you should see a new type of project: BizTalk Server Pipeline Component Project.

NewProject

Click next on the welcome screen and you’ll get to General setup. Here you’ll set the namespace and classname, decide whether you’ll building a receive or send pipeline, where the component will sit in the pipeline (which stage), and the language to use.

GeneralSetup

On the next screen, UI settings, you’ll define the component name, version, and short description.

image

Next you’ll set Design-time variables that can be accessed within Visual Studio. I didn’t really need any for my project, but I added one just to show how it worked.

Variables

Click Next, then Finish. Once the wizard completes you’ll have a new project with a .cs file containing the skeleton code for you to finish, and a .resx file containing the name/value pairs to describe your component. You should have the following sections created in the class:

  • Design-time variables (public properties) defined in the wizard.
  • IBaseComponent members – the Name, Version and Description of the component.
  • IPersistPropertyBag members – utilities to read and write values from the property bag.
  • IComponentUI members – the icon to show in the toolbox, and a Validate method that will be called during the build process. You can implement your own code here.
  • IComponent members – the Execute method that’s going to do the actual work. Initially it just returns the IBaseMessage that it receives, so you have a passthrough pipeline component.

Compile the project, and copy the DLL to the C:\Program Files (x86)\Microsoft BizTalk Server 2010\Pipeline Components directory (your exact path may be different, of course). In Visual Studio, select Tools –> choose Toolbox Items, then select the BizTalk Pipeline Components tab. Check the component you just created and click OK.

Now, add a new pipeline to your BizTalk project. You should see the component you just created in the toolbox. Drag the EDI disassembler to the Disassemble stage, and the new component to the Validate stage.

Pipeline

Display the properties of the new component and you’ll see that the TestProperty created is accessible.

Properties

Build and re-deploy the BizTalk project. In the Administration Console, you’ll now have the new pipeline available when configuring the Receive Location; choose it instead of the EdiReceive pipeline. Start the application, drop a file in, and you should see… absolutely no difference from before! Your pipeline is disassembling the EDI file into XML, and your custom component is just passing it through with no modifications.

Next time in part 2, I’ll talk about what you need to do to actually manipulate the XML and the message properties.

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

Validating NPI (National Provider Identifier) numbers in SQL

If you work with any kind of healthcare data, then odds are you’ll deal with NPI (National Provider Identifier) numbers. The NPI is a 10-digit number consisting of 9 digits (with the first digit being a 1 or a 2) followed by a check digit. The check digit uses the Luhn algorithm, which is calculated like this:

  1. Double the value of alternate digits beginning with the rightmost digit.
  2. Add the individual digits of the products resulting from step 1 to the unaffected digits from the original number.
  3. Subtract the total obtained in step 2 from the next higher number ending in zero.  This is the check digit.  If the total obtained in step 2 is a number ending in zero, the check digit is zero.

So for example:

Let's say the 9-digit part of the NPI is 123456789.
NPI without check digit:
1     2     3     4     5     6     7     8     9
Step 1: Double the value of alternate digits, beginning with the rightmost digit.
2            6          10          14          18
Step 2:  Add constant 24, plus the individual digits of products of doubling, plus unaffected digits.
24 + 2 + 2 + 6 + 4 + 1 + 0 + 6 + 1 + 4 + 8 + 1 + 8 = 67
Step 3:  Subtract from next higher number ending in zero.
70 – 67 = 3
Check digit = 3
NPI with check digit = 1234567893 

We needed a way to check our SQL database for valid NPI numbers, so this SQL does the trick:

CREATE FUNCTION  [dbo].[IsValidNPI](@NPI varchar(20)) 
RETURNS int AS

-- Returns 1 for valid or missing NPI
-- Returns 0 for invalid NPI

-- SELECT [dbo].[IsValidNPI]('1234567893')
-- SELECT [dbo].[IsValidNPI]('123456789a')

BEGIN
   Declare @Result int, @Len int, @Index int, @Total int, @TmpStr varchar(2), @TmpInt int
   Set @Result = 0
   Set @Total = 0
   Set @NPI = IsNull(@NPI,'')
   Set @Len = Len(@NPI)

   If @Len = 0
      Set @Result = 1
   Else
   Begin
      If @Len <> 10 or IsNumeric(@NPI) = 0 or @NPI like '%.%'
         Set @Result = 0
      Else
      Begin
         Set @Index = @Len

         While @Index > 1
         Begin
            Set @TmpStr = Substring(@NPI, @Index, 1)
            Set @Total = @Total + Cast(@TmpStr as int)

            Set @TmpStr = SubString(@NPI, @Index-1, 1)
            Set @TmpInt = Cast(@TmpStr as int) * 2
            If @TmpInt < 10
               Set @Total = @Total + @TmpInt
            Else
            Begin
               Set @TmpStr = Cast(@TmpInt as varchar(2))
               Set @Total = @Total + Cast(Substring(@TmpStr,2,1) as int)
               Set @Total = @Total + Cast(Substring(@TmpStr,1,1) as int)
            End
            Set @Index = @Index - 2
         End

         If @Len % 2 = 1
            Set @Total = @Total + Cast(Substring(@NPI,1,1) as int)
         If @Len = 10
            Set @Total = @Total + 24

         If @Total % 10 = 0
            Set @Result = 1
         Else
            Set @Result = 0
      End
   End
   Return(@Result)
END

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

Book Review: MAKE Ultimate Kit Guide 2012; O’Reilly Media

If you're interested in hacking (and by that I don't mean programming, I mean cobbling together various wires, circuits, bits and gizmos to form something new and innovative) then you've probably come across MAKE magazine. The folks at MAKE have released a special edition: MAKE Ultimate Kit Guide 2012. At 101 square-bound pages, and a $9.99 price tag, it's something more than a magazine but not quite a book.

The first 30 pages are devoted to the kit "industry" itself, with articles on:

  • The Rally Fighter, the radical DIY car you build at the micro-factory
  • How kits drive innovation, from steam engines to computers to 3D printing and microcontrollers
  • DIY Drones – autonomous plane and copter kits
  • Classic Heathkits and Erector Sets
  • Most Dangerous Kits, and more

Then, it's on to reviews of 175 of the best kits available today - everything from robots to audio gear to food, and much more. You get 2-3 reviews per page, each with a short description and rated on 5 different criteria: Complexity, Components, Documentation, Community and Completeness. There are kits starting at $3 (a "Learn To Solder" badge) up into the thousands (a vegetable oil conversion kit for diesel vehicle, for example). You won't find these at your local hobby store, but with 22 different categories of kits there's bound to be something that anyone will find interesting.

Personally, I've already ordered an Arduino starter kit, and a South-Pointing Chariot Kit (see the photo, it's a medieval mechanism using a complex geared differential that will always point the same direction). I've also got my eye on the Rally Fighter, a $75,000 off-road racer that's also street legal... wonder if I can buy it a piece at a time over the next... umm... 30 years or so?

You can find MAKE: Ultimate Kit Guide 2012 at this link.

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

Dallas event: Kinect for Developers

What could you build with the XBox Kinect? Well we want to know!

Connect your Kinect to your PC and build an application using your favorite .NET language.

Kinect for Developers is a 2-day workshop for developers, artists and technicians interested in Kinect hacking or 3D scanning. This hands on workshop will teach you the basics of programming for Kinect and the potentials for developing on video and depth sensor cameras. Expect live demonstrations, presentations, food, and lots of hacking. You can come pitch your idea, form a team, build your application over the weekend and compete for awesome prizes.
Additionally, 2-weeks after the workshop, come back for a fast-pitch to AT&T for a chance to collaborate with the AT&T Foundry. During this 2-week break, developers can continue to work in teams or work on their own Kinect applications. Deadline for submitting your application to fast-pitch to the Foundry is February 8th.
Kinect for Developers is brought to you by Microsoft, AT&T Foundry and Gravity Center.

Keynote Presentation by Tim Huckaby

TimTim Huckaby (http://www.timhuckaby.com, http://interknowlogy.com) is focused on the Natural User Interface (NUI)- Touch, Gesture, and Neural in Rich Client Technologies like HTML5, Silverlight, WPF, & IOS on a broad spectrum of devices that include computers, tablets, the Surface, the Kinect, and mobile devices.
Tim has been called a “Pioneer of the Smart Client Revolution” by the press. Tim has been awarded many times for the highest rated technical presentations and keynotes for Microsoft and many other technology conferences around the world. Tim is consistently rated in the top 10% of all speakers at these events. Tim has been on stage with, and done numerous keynote demos for many Microsoft executives including Bill Gates and Steve Ballmer.

Some interesting applications for the Kinect:

Tentative Schedule: On Saturday we will focus on getting you up to speed on developing for the Kinect with a series of presentations and hands on labs. On Sunday we will break up into teams and you will have a chance to build an application with the Kinect where help will be available just in case. At the end of the day we will demo what we have worked on. Catered Lunch and snacks will be provided both days.

  • Saturday Jan 28 9 AM – 10 AM: Welcome, registration, networking, coffee
  • Saturday Jan 28 10 AM – Noon: Instruction & Hands on labs
  • Saturday Jan 28 Noon – 1 PM: Catered Lunch
  • Saturday Jan 28 1 PM – 5 PM: Instruction & Hands on labs
  • Sunday Jan 29 9 AM – Noon: Build an app with your team with advisors to help you over any rough parts. 
  • Sunday Jan 29 Noon – 1 PM: Catered Lunch
  • Sunday Jan 29 1 PM – 3 PM: Build an app with your team with advisors to help you over any rough parts.
  • Sunday Jan 29 3 PM – 5 PM: Demo what you have built

Space is limited only 50 seats are available, Register Today!

What you will need:

  • Laptop
  • Basic understanding of .NET Development
  • Kinect software and Visual Studio – you can download this for free from Microsoft, however follow the instructions carefully. http://kinectforwindows.org/download
  • Kinect (optional – we will be working in teams and will have one available for each team)
  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

Dallas event: State of .NET Fall 2011

Don’t miss out on these great session with Markus Egger in the Dallas office!

Where: Microsoft Dallas Office – 7000 SR-161 (George Bush Turnpike), Dallas, TX 75039
When: Tuesday, December 13, 2011 – 1:30 – 4:30 PM
Signup for this FREE event in Dallas

Join Markus Egger, Microsoft RD and one of the longest running MVPs, for an afternoon of free information. CODE Magazine and EPS Software are in a unique position to share information based on real world experience in projects that are either our own or one of the many projects we get to see in our role as mentors, trainers and consultants, as well as feedback we receive from CODE Magazine readers. This is NOT marketing hype! We will tell you which information you should invest time and money in, and which ones to avoid.

Topics Include:

  • Windows 8
    • Metro” Development
    • The impact of Windows 8 on today’s development effort
    • The future of C# and VB
    • The future of HTML and JavaScript
    • The future of C++
  • WPF, Silverlight, and other XAML technologies today and tomorrow
  • Architecture to serve the needs of modern applications
  • The need for SOA (Service Oriented Architecture) today and tomorrow
  • HTML 5, CSS3, and JavaScript
  • ASP.NET MVC, Razor and jQuery
  • “Visual Studio Async”
  • Windows Phone 7 and other mobile devices
  • and more!

Attendees of this free event will come away with a clear understanding of which technologies to use for various technical challenges. Questions? Please e-mail info@eps-software.com or call 832-717-4445 x32. For additional information, please visit www.codemag.com/training.

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati