| James's profileJames McCaffreyBlogLists | Help |
|
February 23 The 5 Types of Software Development Positions at MicrosoftThis past week I've had discussions with quite a few Microsoft developers on the following question: "If you had to divide up software developers into a handful of category-buckets, how would you do it?" Interestingly, I've heard virtually the same answer from almost every person at Microsoft. Most developers categorize software development at Microsoft into 5 buckets:
1. Systems Development - Designing and writing relatively low-level code, typically using C/C++ (called Win32 or "native" code). Other common skill requirements include assembly language, algorithms, MFC, device drivers, "raw" COM, and ATL COM. Systems Development positions often are in the Windows product groups and server product groups.
2. Application Development with .NET - Creating software programs intended for use by human beings using C# or VB.NET. Common skill requirements include Win Form design, ADO.NET (to connect to SQL databases), lightweight SQL (writing queries), socket programming, and multi-threading.
3. Web Development with .NET - Creating Web-based applications using ASP.NET technology (C# or VB.NET). Related skill requirements are HTML, JavaScript, SQL, ADO.NET, IIS, and XML.
4. SQL Design and Development - Specialized SQL skills. Except for the SQL Server product itself, SQL is never a standalone product. But at Microsoft some products have positions where the emphasis is on SQL databases and code. Skill requirements include expert-level knowledge of: joins, triggers, stored procedures, and indexes.
5. Other - Everything else. Of course this is a huge category in terms of job descriptions, but the first four buckets I've listed capture the majority of job positions. Examples of "Other" include non-ASP.NET Web development (using classic ASP and VBScript), and hybrid native (Win32 = C++) and managed (.NET = C#) code development. February 17 Accessing Remote Security Event Log Information with Windows PowerShell, IIAn interesting problem is to access the Security Log portion of a System Event Log on a remote machine using Windows PowerShell. The intrinsic get-event Windows PowerShell cmdlet only works on a local machine. The intrinsic get-wmiobject cmdlet with a "win32_ntlogevent" argument can access most types of log files (Application and System in particular) on a remote machine but not the Security log file. So, if you want remote security events you can directly or indirectly call .NET Framework methods. The screenshot below shows the basic ideas of one approach. The first command creates a new ConnectionOptions object. This is really a preliminary step. The second command shows that by default, I do not have elevated privileges to connect to a remote security log file. So, in my third command I enable those privileges. I could also have specified a different user and password if necessary at this stage. My fourth command creates a new ManagementScope object to a remote machine (named vte020) using elevated privileges. My fifth command establishes a connection to the remote machine using the connect() method. The sixth command creates a SQL-like query to fetch all information from all log files in the remote Event Log. In practice you would usually filter at this point with a "WHERE" rather than later as I do in this demo. My seventh command creates a ManagmentObjectSearcher using the query I just created. My eighth command retrieves the entire Event Log using the get() method. The remaining commands successively filter down to just the Security event log, then just security events of type "audit success", and then just the first event in that collection. I finish by displaying the Message property of the first audit success event in the security log. February 10 Accessing a Remote Security Event Log Using Windows PowerShellI’ve been working with Windows PowerShell a lot recently. PowerShell is Microsoft’s new shell and scripting language. You can think of PowerShell as a vast improvement over the old cmd.exe and .bat files. There are two ways to access the system Event Log with PowerShell. The first is to use the built-in “cmdlet” named get-event. For example, the command $e = get-event stores into object $e an object representing the entire event log on the local machine. The second technique is to use the built-in get-wmiobject. For example, the command
$e = get-wmiobject –class win32_ntlogevent –computerName ‘zeus’ fetches event log information for remote computer ‘zeus’. Now you can get the System or the Application event log with a command like $app = $e | where-object { $_.logfile –eq “application” }. And then you can get just application errors with $errors = $app | where-object { $_.type –eq “error’ }. But unfortunately, by default, you cannot fetch the Security event log using this technique because by default, the WMI account cannot access the Security log. This is annoying as all heck and I haven’t been able to find a good work-around . . . yet. I am tentatively scheduled to facilitate a Windows PowerShell hands-on lab at the upcoming Microsoft Management Summit. There will be several PowerShell experts from the Microsoft PowerShell team at MMS 2007 including Jeffrey Snover (architect) and Scott Ottaway (senior product manager), and you can bet I’m giong to pick their brains on the problem of accessing a remote Security log file using the get-wmiobject cmdlet. Check out MMS 2007 at http://www.mms2007.com. February 05 The Difference Between Windows CE and Windows MobileI've been working with Windows Mobile and Embedded systems lately. Although I am a big fan of Microsoft technologies, I find the terminology used in the mobile and embedded space quite confusing and very irritating. Let me toss out my 2 cents on what some of the key terms mean. Windows CE is a customizable operating system, designed for non-PC gadgets with limited memory, power, and IO devices such as PDAs, cell phones, and robotic systems. Because Windows CE does not share a common kernel with the rest of the Windows OS family (XP, Server 2003, and so on), working with Windows CE software (the OS itself and applications which run on WinCE) is quite a bit different from working on non-WinCE systems. An exception to this generalization is writing .NET applications because the WinCE .NET Compact Framework is very similar to the regular .NET Framework. Now "Windows Mobile" is a term which just means a set of three systems built using different WinCE components: Pocket PC, Pocket PC Phone Edition, and SmartPhone. Great -- Pocket PC is like a super-PDA or a super-trimmed-down-PC. But what's the difference between Pocket PC Phone Edition, and SmartPhone? I like to think of a Pocket PC Phone Edition gadget as a PDA which can make phone calls, and a SmartPhone gadget as a phone which has some PDA functionality. However, the mobilespace is so dynamic that trying to pin down differences is somewhat futile. |
|
|