64-bit Windows Server migration stories

3. July 2006 09:57 by Jaguilar in General  //  Tags: ,   //   Comments (0)

We’ve been working during the past two years on 64–bit awareness and helping customers move to the platform. I posted some time ago, on the 64–bit Advantage blog, about the migration of MySpace to 64–bit Windows Servers. Well, I just noticed that there is another story out (has been out for a few months, actually) about the migration of microsoft.com to x64 servers. Pretty interesting read. Take a look at the performance improvements they saw – they were impressive, especially the improvement in the response time.

You can read check it out here.

Questions on the VB Webcasts

30. June 2006 04:13 by Jaguilar in General  //  Tags:   //   Comments (0)

During the Visual Basic webcasts we get several questions, not all of them related to VB migrations. Following the 64–bit webcast’s lead, I think it would be a good idea to share them with you (they were originally asked in spanish, this is my rough translation):

Question: What happens with VB6 applications that use Spread?
Answer: FarPoint's Spread is a widely-used spreadsheet component used in VB6 applications. The current version of the Upgrade Wizard does not support the automated conversion of this component to the .NET equivalent. If you wish to continue using it, you’ll need to use COM interop. There’s a chance that a future version of the VB Upgrade Companion Edition will be able to convert this component.

Question: Does the Upgrade Wizard work for upgrading ASP applications?
Answer: No, it doesn’t. For ASP applications, there is the ASP to ASP.NET Migration Assistant. You can also check out the ASP to ASP.NET v1.x Migration Guide. It is slightly outdated and doesn’t deal with the 2.0 Framework, but should work as a good starting point.
Artinsoft also offers complete migration services for upgrading your ASP application to ASP.NET.

Question: Is there a solution for migration from Visual Foxpro to .NET?
Answer: Unfortunately there is no tool for migrating Visual Foxpro applicationsto the .NET Framework.

Question: Is there a document with and outline of the testing process for migration projects?
Answer: The testing process depends on the type of application. There is no “magic bullet” that will describe this. There is, however, a migration guide, developed between ArtinSoft and Microsoft, that has a chapter on testing the applications. This can be found at Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005.
ArtinSoft also recomends using a slightly modified version of the original application’s test cases.

Question: What version of the .NET Framework is required for the migration tool?
Answer: The Upgrade Wizard is available for version 1.0, 1.1 and 2.0 of the .NET Framework. We are currently using the version bundled with Visual Studio .NET 2005, that uses version 2.0 of the Framework, because it is the most recent version.

Remember to check out all the VB to VB.NET presentations, that can be found at the CEM website.

Pictures from the Santiago Event

29. June 2006 11:28 by Jaguilar in General  //  Tags:   //   Comments (0)

Here are some pictures of the event last week in Santiago.

Asistentes al Evento 4 Asistentes al Evento 2

 Asistentes al Evento 1 Jose presentando 2

 BTW, this is my first post with BlogJet. Nice tool.

Final CEM Visual Basic webcast

29. June 2006 08:24 by Jaguilar in General  //  Tags: ,   //   Comments (0)

Tomorrow I'll be doing the final Webcast in a series about migrating from Visual Basic 6.0 to Visual Basic .NET. This one will be about tecniques on how to migrate common objects in Visual Basic (some controls, database access, forms, etc), and about recommendations on how to test a migrated application.

All in all, there were seven webcasts in the series. They were: (names in spanish...)

I suggest you check them out. :-)

Santiago, Chile, 64-bit Advantage event

29. June 2006 08:10 by Jaguilar in General  //  Tags: ,   //   Comments (0)

Last week we had the final scheduled 64-bit Advantage event in Santiago, Chile. It was an incredible success. The people and organization were really happy with the results. It is a shame that there are very few events like it in Latin America

One of the things that really caught my attention was the fact that there was a well-known (not to us) Linux user/advocate in the audience. The good thing is that he gave us a very positive review for the event, and mentioned that he was surprised of the professionalism we displayed when confronted with cross-platform questions, and how we even address the availability of certain technologies on other platforms (such as POSIX Threads, polymorphic types, etc).

By the way, if you have a chance, go and visit Santiago. It is a beautiful city, the people are amazing, and I can't even start talking about the food, especially seafood. Just remeber to visit Costa Rica first, of course. :-)

Thanks to Christian, Wilson, José, Katina, and the rest of the organization for the hard work and dedication that went into making this event happen!!

Questions from the first 64-bit Web Cast

28. June 2006 06:07 by Csaborio in General  //  Tags:   //   Comments (0)
So the webcast went very well, we had about 40 people who asked very interesting questions which I thought I would share with you.  The typing errors remain as I want the script to be the original one:

Question: Is there any general 64-coding info for starters?
Answer: You can find all kinds of programming info (C++/Managed Code, etc.) on http://www64advantage.com. It is one of the best places to start.

Question: does c# work on 64-bit at this moment?
Answer: Yes, C# and Visual Basic .Net are fully supported in 64-bit with the release of the 2.0 64-bit framework.

Question: Will this webcast be available for download?
Answer: yes in 24 hours at www.microsoft.com/webcasts

Question: From the Developers Perspective, What would be the learning curve from 32 bit programing to 64bit programing?
Answer: It really depends on your programming language. If you are dealing with managed code, oftentimes things can be as easy as just recompiling. With languages such as C++, the API has not changed that much, so given that you watch out for common pitfalls, your 64-bit learning curve should not very steep.

Question: Do we have to sign up for tomorrow's session or are we already registered ?
Answer: You need to sign up for each of the webcasts. The information for tomorrow's webcast: http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032299373&EventCategory=4&culture=en-US&CountryCode=US

Question: I am running XP Pro at home. Can I write 64-bit code without a server?
Answer: You definitely can. Visual Studio and the PSDK will allow you to write 64-bit executables from a 32-bit OS (Server or XP). Remember to always use /wp64!


New Series of 64-bit Related Web Casts

28. June 2006 04:14 by Csaborio in General  //  Tags:   //   Comments (0)
Starting today (like in 30 minutes ;) ), we will start the first webcast in a series of three.  These revolve around most of the things we have discussed in the labs plus some new ones such as issues with 64-bit installers, setting up VS for 64-bit deployment, and multi-threading your application using OpenMP standards.

You can find the whole list here.  Tomorrow, Thursday 29th, I will be presenting a webcast that has many, many demos on how to preserve dependencies in 64-bit.  Feel free to stop by and let me know your comments once the session is over.

If you really have no idea on what to expect when moving to 64-bit, then these webcasts are definitely worth listening to.

Lower Bounds not 0 in VB.NET

14. June 2006 17:31 by Mrojas in General  //  Tags:   //   Comments (0)
The other day a friend asked me. How could he created an array in VB with a lower bound different from 0.

In VB6 you could do something just like this:

Dim b(6 To 12) As Integer 

But in VB.NET it does not work that way. The LowerBound in VB.NET must be always 0. But there is a way to have a lower bound different from 0. It is unclear why this is not very documented but the following code shows how to do it: 

Dim b As Array = Array.CreateInstance(GetType(String), New Integer() {6}, New Integer() {6})

b(6) = 20

b(7) = 1

 

I received this comment:

Hi Mauricio RojaI am converting the VB6 programs to VB.Net2008. When I declare the array in VB.Net the lower bound always "0". When I searched internet got some clue from you. Thanks.Could you please help me to solve the array problem. I have declared a array as "public socketbins(1 to DUT, 1 to SOCK, 1 to 1000) as CBin" in VB6. When I convert this declaration to VB.Net2008 it is not accepted. can you please tell me how to declare the above declaration in VB.Net2008Thanks & RegardsUdhay

And this is my answer:

 

Hi.

Sorry for my late response.

I don’t know what you mean for CBin

But let's says the array type is byte

Then you can do this:

Dim socketBins4 = Array.CreateInstance(GetType(Byte), New Integer() {DUT, SOCK, 1000}, New Integer() {1, 1, 1})

And I am sending some code for your tests

 

Module Module1

Const DUT = 100

Const SOCK = 100

'taken and modified from http://blogs.msdn.com/vbfaq/archive/2004/04/20/116660.aspx

Public Class VBArray(Of T)

Private _lbound As Integer

Private _myitems() As T

Public Sub New(ByVal LBound As Integer, ByVal UBound As Integer)

Me.ReDim(LBound, UBound)

End Sub

Public Sub [ReDim](ByVal LBound As Integer, ByVal UBound As Integer)

_lbound = LBound

ReDim _myitems(UBound - LBound + 1)

End Sub

Default Public Property Item(ByVal Index As Integer) As T

Get

Return _myitems(Index - _lbound)

End Get

Set(ByVal Value As T)

_myitems(Index - _lbound) = Value

End Set

End Property

Public Function ToArray() As T()

Return _myitems

End Function

End Class

Sub Main()

 

Dim socketBins4 = Array.CreateInstance(GetType(Byte), New Integer() {DUT, SOCK, 1000}, New Integer() {1, 1, 1})

Dim arrayLenghts() As Integer = {DUT, SOCK, 1000}

Dim arrayLowerBounds() As Integer = {1, 1, 1}

Dim socketBins3 = Array.CreateInstance(GetType(Byte), arrayLenghts, arrayLowerBounds)

socketBins3(1, 1, 1) = 10

MsgBox("LBound for FirstDimension = " & LBound(socketBins3, 1))

MsgBox("LBound for SecondDimension = " & LBound(socketBins3, 2))

MsgBox("LBound for ThirdDimension = " & LBound(socketBins3, 3))

 

MsgBox("UBound for FirstDimension = " & UBound(socketBins3, 1))

MsgBox("UBound for SecondDimension = " & UBound(socketBins3, 2))

MsgBox("UBound for ThirdDimension = " & UBound(socketBins3, 3))

 

socketBins3(0, 0, 0) = 10 ' <--- This will throw an exception

 

'This are other possibilities

'This is not possible Dim socketbins(1 to DUT, 1 to SOCK, 1 to 1000) as Byte

Dim socketbins(0 To DUT, 0 To SOCK, 0 To 1000) As Byte

Dim socketBins2 As New VBArray(Of VBArray(Of VBArray(Of Byte)))(1, DUT)

'And then some init code here

 

End Sub

End Module

 

More Color to your Traces!

29. May 2006 08:37 by Mrojas in General  //  Tags: , ,   //   Comments (0)

Most Visual Basic programmers are familiar with using Debug.Print to follow their code's execution. The .NET environment introduces Tracing falicities that allows you to send messages to files or the console.

However the console output could be improved by using colors to highlight certain events. 
I developed a simple ColorTraceListener that can be used either with the My.Application.Log object or the Trace.TraceXXX methods. 
I first thing to do is create a ClassLibrary. It will be called ColorTraceListener. Add a ColorTraceListener.cs File and fill it with the following code:
 

Imports System

Imports System.Diagnostics

Imports System.Globalization

Imports System.Text

Imports System.Runtime.InteropServices 

Public Class ColorTraceListener

    Inherits ConsoleTraceListener

    Public Sub New()

        MyBase.New()

    End Sub 

    Public Sub New(ByVal useErrorStream As Boolean)

        MyBase.New(useErrorStream)

    End Sub 

    Friend Function IsEnabled(ByVal opts As TraceOptions) As Boolean

        Return ((opts And Me.TraceOutputOptions) <> TraceOptions.None)

    End Function 
 
 

    False)> _

    Public Overrides Sub TraceData(ByVal eventCache As TraceEventCache, ByVal source As String, ByVal eventType As TraceEventType, ByVal id As Integer, ByVal data As Object)

        If ((Me.Filter Is Nothing) OrElse Me.Filter.ShouldTrace(eventCache, source, eventType, id, Nothing, Nothing, Nothing, data)) Then

            Me.WriteHeader(source, eventType, id)

            Dim text1 As String = String.Empty

            If (Not data Is Nothing) Then

                text1 = data.ToString

            End If

            Me.WriteLine(text1)

            Me.WriteFooter(eventCache)

        End If

    End Sub 

    False)> _

    Public Overrides Sub TraceData(ByVal eventCache As TraceEventCache, ByVal source As String, ByVal eventType As TraceEventType, ByVal id As Integer, ByVal ParamArray data As Object())

        If ((Me.Filter Is Nothing) OrElse Me.Filter.ShouldTrace(eventCache, source, eventType, id, Nothing, Nothing, Nothing, data)) Then

            Me.WriteHeader(source, eventType, id)

            Dim builder1 As New StringBuilder

            If (Not data Is Nothing) Then

                Dim num1 As Integer = 0

                Do While (num1 < data.Length)

                    If (num1 <> 0) Then

                        builder1.Append(", ")

                    End If

                    If (Not data(num1) Is Nothing) Then

                        builder1.Append(data(num1).ToString)

                    End If

                    num1 += 1

                Loop

            End If

            Me.WriteLine(builder1.ToString)

            Me.WriteFooter(eventCache)

        End If

    End Sub 
 

    False)> _

    Public Overrides Sub TraceEvent(ByVal eventCache As TraceEventCache, ByVal source As String, ByVal eventType As TraceEventType, ByVal id As Integer, ByVal message As String)

        If ((Me.Filter Is Nothing) OrElse Me.Filter.ShouldTrace(eventCache, source, eventType, id, message, Nothing, Nothing, Nothing)) Then

            Me.WriteHeader(source, eventType, id)

            Me.WriteLine(message)

            Me.WriteFooter(eventCache)

        End If

    End Sub 
 

    False)> _

    Public Overrides Sub TraceEvent(ByVal eventCache As TraceEventCache, ByVal source As String, ByVal eventType As TraceEventType, ByVal id As Integer, ByVal format As String, ByVal ParamArray args As Object())

        If ((Me.Filter Is Nothing) OrElse Me.Filter.ShouldTrace(eventCache, source, eventType, id, format, args, Nothing, Nothing)) Then

            Me.WriteHeader(source, eventType, id)

            If (Not args Is Nothing) Then

                Me.WriteLine(String.Format(CultureInfo.InvariantCulture, format, args))

            Else

                Me.WriteLine(format)

            End If

            Me.WriteFooter(eventCache)

        End If

    End Sub 
 
 
 
 

    Private Sub WriteFooter(ByVal eventCache As TraceEventCache)

        If (Not eventCache Is Nothing) Then

            Me.IndentLevel += 1

            If Me.IsEnabled(TraceOptions.ProcessId) Then

                Me.WriteLine(("ProcessId=" & eventCache.ProcessId))

            End If

            If Me.IsEnabled(TraceOptions.LogicalOperationStack) Then

                Me.Write("LogicalOperationStack=")

                Dim stack1 As Stack = eventCache.LogicalOperationStack

                Dim flag1 As Boolean = True

                Dim obj1 As Object

                For Each obj1 In stack1

                    If Not flag1 Then

                        Me.Write(", ")

                    Else

                        flag1 = False

                    End If

                    Me.Write(obj1.ToString)

                Next

                Me.WriteLine(String.Empty)

            End If

            If Me.IsEnabled(TraceOptions.ThreadId) Then

                Me.WriteLine(("ThreadId=" & eventCache.ThreadId))

            End If

            If Me.IsEnabled(TraceOptions.DateTime) Then

                Me.WriteLine(("DateTime=" & eventCache.DateTime.ToString("o", CultureInfo.InvariantCulture)))

            End If

            If Me.IsEnabled(TraceOptions.Timestamp) Then

                Me.WriteLine(("Timestamp=" & eventCache.Timestamp))

            End If

            If Me.IsEnabled(TraceOptions.Callstack) Then

                Me.WriteLine(("Callstack=" & eventCache.Callstack))

            End If

            Me.IndentLevel -= 1

        End If

    End Sub 

    Private Sub WriteHeader(ByVal source As String, ByVal eventType As TraceEventType, ByVal id As Integer)

        Dim oldColor As ConsoleColor = Console.ForegroundColor

        Select Case eventType

            Case TraceEventType.Error

                Console.ForegroundColor = ConsoleColor.Red

            Case TraceEventType.Critical

                Console.ForegroundColor = ConsoleColor.Magenta

            Case TraceEventType.Information

                Console.ForegroundColor = ConsoleColor.White

                'Case TraceEventType.Resume

                'Case TraceEventType.Start

                'Case TraceEventType.Suspend

                'Case(TraceEventType.Transfer)

                'Case TraceEventType.Verbose

            Case TraceEventType.Warning

                Console.ForegroundColor = ConsoleColor.Yellow

        End Select

        Me.Write(String.Format(CultureInfo.InvariantCulture, "{0} {1}:", New Object() {source, eventType.ToString}))

        Console.ForegroundColor = oldColor

        Me.Write(String.Format(CultureInfo.InvariantCulture, " {0} : ", New Object() {id.ToString(CultureInfo.InvariantCulture)}))

    End Sub

End Class 

The methods that handle the headers in the TextWriteListener are private (WriteHeader and WriterFooter) so we need to override them. Reflector comes very handy in this cases. 

No to test it Create a Vb Console Application: 

Module Module1 

    Sub Main() 
 

        My.Application.Log.WriteEntry("Error!", TraceEventType.Error)

        My.Application.Log.WriteEntry("Warning", TraceEventType.Warning)

        My.Application.Log.WriteEntry("Info", TraceEventType.Information)

        My.Application.Log.WriteEntry("Info", TraceEventType.Critical) 

        Trace.TraceError("An Error Happened!")

        Trace.TraceInformation("Just letting you know!")

        Trace.TraceWarning("Watch the road ahead") 

    End Sub 

End Module 

And use a simple configuration file like the following: 

xml version="1.0" encoding="utf-8" ?>

<configuration>

    <system.diagnostics>

      <trace autoflush="true">

        <listeners>

          <add name="ColorLog" />

        listeners>

      trace>

        <sources>

            This section defines the logging configuration for My.Application.Log -->

            <source name="DefaultSource" switchName="DefaultSwitch">

                <listeners>

                    <add name="ColorLog"/>

                listeners>

            source>

        sources>

        <switches>

            <add name="DefaultSwitch" value="Verbose" />

        switches>

       <sharedListeners>

          <add name="ColorLog" type="Mrojas.ColorTraceListener, ColorTraceListener" />

        sharedListeners>

    system.diagnostics>

configuration> 
 

HP and Intel Developer Workshop in Seattle

29. May 2006 05:29 by Jaguilar in General  //  Tags: ,   //   Comments (0)

In a couple of weeks I'll be teaching some of the lessons at the HP and Intel Developer Workshop in Seattle, WA. The workshop will take place on June 13-15. As with the previous workshop, in Dallas, this is a great oppotunity to port your code to 64-bit windows on the Itanium platform. You'll be surprised that it may be easier to port your source code than it looks - in Dallas we had a guy that ported his code in about an hour! Then again, we've been working with a company for about two years on the port - can't tell you who it is, but if you knew, you'll see why it is taking so long.

The Workshop has all sorts of nice perks. In addition to the quality training given by yours truly and my coworkers, you can also also take with you the Itanium server that you use during the class. You can read all the benefits about it on the Workshop's web page.

Visual Basic Webcasts

26. May 2006 12:59 by Jaguilar in General  //  Tags: ,   //   Comments (0)

In the next few weeks I'll be doing several webcasts for Microsoft Latin America. They are about Visual Basic 6.0 to Visual Basic .NET migrations, and will be given in spanish.

The first presentation will be this Friday, and it is called Why consider a project to upgrade from Visual Basic 6.0 to Visual Basic .NET?. In this presentation, we'll talk about the business and technological factors that influence the decision to upgrade an application. The second one is about Understanding the Upgrade Wizard, in which we'll talk about the process of upgrading an application from Visual Basic 6.0 to Visual Basic .NET.

Some other webcasts are planned, but there's no date assigned yet. As soon as there is, I'll post all the information here.

 

No, there's no mixing of J# and Windows Forms components

25. May 2006 09:56 by Jaguilar in General  //  Tags: ,   //   Comments (0)

We have been aware of that fact for a while, but we tried anyway - and it doesn't work. The main issue is that the components were implemented separately, and respond to different object hierarchies. Windows Forms receive components that extend the System.Windows.Forms.Control class, while Java containers receive objects that extend from javax.swing.JComponent. This causes an incompatibility, as the code will not even compile when you add an object from the "other" hierarchy, as shown in the following example. Trying to compile this code:

      JFrame frame = new JFrame("HelloWorldSwing");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      ...
      ComboBox cb = new ComboBox();
      frame.getContentPane().add(cb);

will give you this compilation error:

      Cannot find method 'add(System.Windows.Forms.ComboBox)' in 'java.awt.Container'

The exact same thing happens when you try to add a J# Component to a Windows Form. There are of course technical reasons for this, like the fact that the J# runtime was developed independently, thus components expect a different environment when being drawn, and that it uses a different event handling mechanism (based on Java instead of .NET). But it is a bummer not being able to use a JTable and, for example, a DateTimePicker side-by-side.

On Visual J#, Swing support and supplemental UI libraries

25. May 2006 06:32 by Jaguilar in General  //  Tags:   //   Comments (0)

A colleague of mine passed me this great link, which details the differences in API support between the different versions of Java, including J#. This is a great resource if you're considering moving your Java application to J# 2005, as it will tell you exactly which packages will give you a headache.

It is also worth mentioning that if you're working with Visual J#, the Supplemental UI Library is a must. This library includes an implementation of several Swing classes and packages, plus some support for additional classes added to the java.util.* package since JDK 1.2 (remember that J# supports the JDK up to 1.1.4). This Supplemental Library is already included in the Microsoft Visual J# Version 2.0 Redistributable Package.

And don't forget that there's a Visual J# 2005 Express Edition as well!!

Ultimate Visual Basic Upgrade Guide now available in print!

24. May 2006 05:28 by Fzoufaly in General  //  Tags:   //   Comments (0)

You can find it on Amazon, Barnes and Nobles or all other major book chains.

I highly recommend it!
0-7356-2298-1padMicrosoft Press 073562298104/2006
List Price: $49.99padPaperbackpad694 pagespadCD or DVD included.
Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005 was jointly developed jointly by the Microsoft patterns & practices team and ArtinSoft, a company with vast experience in Visual Basic upgrades and developer of the Visual Basic Upgrade Wizard and the Visual Basic Upgrade Wizard Companion. This guide provides proven practices to upgrade applications that were developed with Visual Basic 6.0 and reach functional equivalence with a minimal amount of effort and cost. The guide also includes guidance for common advancements after the upgraded applications are running on the .NET Framework.

Intel's Early Access Program

26. April 2006 00:43 by Csaborio in General  //  Tags:   //   Comments (0)
Did you know that you can get Intel's suite of tools such as VTune, the C/C++ compilers, and threading tools for free? These tools, when purchased are worth every cent. So how can you get them? Go to the Intel Early Access program webpage at the Intel site and read on.

How to use the Intel Compiler with Visual Studio 2003

26. April 2006 00:32 by Csaborio in General  //  Tags:   //   Comments (0)
So we have mentioned that using the Intel compiler to generate 32 or 64-bit binaries is possible with Visual Studio, but we have not mentioned how to do it...until now.

I have found a web page on the Intel site that shows you step by step instructions on how to use it. The link can be found here.

Of course this brings the immediate question on whether this will work with Visual Studio 2005. Furthermore, if it does work, will it be a supported scenario? Stick around and I may have the answer to these and other questions on my next blog entry.

Weighing POGO Profiles

26. April 2006 00:23 by Csaborio in General  //  Tags:   //   Comments (0)
Even though we have talked quite a bit about POGO on our 64-bit sessions, we seldom have mentioned how you can actually weigh down the profiles that you use. In order to find this information, check this link at the MSDN site that explains everything.
If you want to 'take it up a notch' when it comes to POGO and find exactly what is happening with your scenarios, check this blog post from Kang Su Gatlin.
If there is anything you would like to know about POGO, just let me know and I'll more than happy to research it for you!

PowerShell (formely Monad) RC1 OUT!!

25. April 2006 13:04 by Jaguilar in General  //  Tags:   //   Comments (0)

Today Microsoft announced the release of Powershell RC1. This is a task-oriented shell, formerly known as Monad. I saw a very impressive demo a couple of weeks ago at the Longhorn Server SDR, and, as a UNIX shell geek, I have to admit that I am in love with it.

I definitely love the way you work with objects and properties, instead of having to parse a text entry to obtain some information. I always keep forgetting if it is cut -c 10-17 or 9-16 or some other variation.. I can now do a File.Name on a shell script - how cool is that!!

Another thing is that it really enforces the naming conventions when you create a new command, or CmdLet as they’re know in MonadSpeak. ALL cmdlets have to be named in the form verb-noun, so they are easy to remember and you can also figure out what they do very easily. For example, if you want you cmdlet to be called get-ewis, you create a .NET class and define it in the following way: 

namespace ais.samples
{                
   [Cmdlet(VerbsCommon.Get, "ewis")]
   public class GetEWIsCommand: Cmdlet
   ...

 By doing it this way, there is no possibility of creating strange-sounding names - you never name you cmdlet explicitly, you just describe the verb and noun that you'll use. You could still create a cmdlet with a weird combination of verb-noun, but it would require a deliberate effort to mislead your users.

 And, finally, you are working with the complete .NET object model. This gives all the power of the .NET framework on the command line.

We were also told at the SDR that new servers coming out of Redmond will have their admin tools based on Powershell (can't get used to the name..), starting with Exchange 12. Servers that are currently close to release won’t support it because of scheduling issues, but we were assured future versions will. At last, Windows will be manageable from the command line - and with the Server Core capability coming out, that will become a big deal.

The press release for Mon..Powershell is here, and you can download RC1 here.

JLCA Training still online

25. April 2006 09:11 by Jaguilar in General  //  Tags: ,   //   Comments (0)

An version of the JLCA training is still available online from Microsoft's website here. It has a chapter on the JLCA Companion, and also includes a chapter on migrating BEA's technologies.

Check it out.

Yes, there is hope for SWT to .NET migrations

20. April 2006 17:05 by Jaguilar in General  //  Tags: ,   //   Comments (0)

SWT is a commonly used Java GUI framework, brought to the masses by the Eclipse project. Every once in a while there is customer that wants to migrate from a SWT-based application to C# using the JLCA, but so far this conversion required a significant effort in order to build the necessary infrastructure.

Well, now there's hope. I just noticed that the good guys at ICSharpCode have a version of SWT for .NET, called the Sharp Widget Toolkit (SharpWT or #WT). With this library and the JLCA Companion, we should be able to automate the conversion of a significant portion of SWT-based application, and get them up and running on .NET very quickly. Based on their previous work, the SharpWT library should be very high quality - they also developed the #ziplib library, to which we've often converted the java.util.zip.* classes, and other projects you can check out on their website.

So, there you have it - there is hope for SWT to .NET migrations. ;o)

Categories