Adam Sills

Globeranger iMotion Edgeware Platform Weblog (mostly)

  Home  |   Contact  |   Syndication    |   Login
  12 Posts | 0 Stories | 2 Comments | 11 Trackbacks

News

Archives

Post Categories

Globeranger

Globeranger Coworkers

My Links

Friday, February 02, 2007 #

A business partner using Visual Studio 2005 developing workflow components emailed me through here, so I figured I'd post the answer.

Problem:
When you use one of the iMotion project item templates in Visual Studio 2005, it will product the wrong language code. A C# project will create VB.NET code and vice versa.

Cause:
There is a bug in the installer where the registry keys used to install templates into Visual Studio are reversed (causing the language switch).

Solution:
Log onto DevHelp (http://devhelp.globeranger.com) and go to Support then Utilities for the iMotion Platform. The (current) first download in the list is a registry file you can use to fix the problem. Download the file and import it into your registry.


Monday, September 18, 2006 #

Since I originally posted this in July, I've gotten absolutely nowhere with Microsoft. I have, however, had a couple hundred google searches for things like “IE7 beta process.start error“. Since then my bug was closed, someone else reopened it, and I've found another similar bug where the IE7 beta and RC take over shell execute and deny programs from being launched.

Luckily for me, our workaround was to simply not use the shell (ShellExecute=false) but that definitely isn't an option for everyone.

UPDATE (9/7/2006):
Microsoft closed my bug without really looking at it. I got “not an IE problem“. Luckily, someone else has picked up the cause and resubmitted with a bit more information for me. If you are having this problem and want it fixed (because ShellExecute=false may not work for you), then go here and vote/validate the bug:
https://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=180644

UPDATE 2 (9/18/2006):
Microsoft closed the new bug again without really looking at it. “Please see if it happens in Beta 3“ they said. Today I found another variation of what appears to be the same bug.
https://connect.microsoft.com/IE/feedback/viewfeedback.aspx?FeedbackID=202102

Their product feedback process is really a pain. And you can't call product support services on a beta product so you're stuck submitting feedback through a system where feedback gets ignored. GAH.

ORIGINAL:
So I've come across a real interesting side-effect of the IE7 Beta 3 install. A program running as SYSTEM under .NET 1.1 (either as a Windows service or as a scheduled task) cannot start a process using the Process.Start method. It fails with a Win32Exception (”Access is denied”).

A SYSTEM program gets an access denied error? That's an awfully strange effect of a browser update, don't you think? To get this sample program to run as SYSTEM, create a scheduled task and specify SYSTEM as the username (and don't enter a password). Then just right-click the scheduled task and select Execute.

Here's the simple code that fails when run under SYSTEM:

using System;

using System.Diagnostics;

using System.IO;

 

namespace NetUserIE7Tester {

      class Class1 {

            [STAThread]

            static void Main(string[] args) {

                  StreamWriter writer = new StreamWriter( "C:\\ie7netusertest.log", false, System.Text.Encoding.UTF8 );

                  ProcessStartInfo info;

 

                  try {

                        info = new ProcessStartInfo(Environment.SystemDirectory + "\\ipconfig.exe",

                              "/all");

                        info.WindowStyle = ProcessWindowStyle.Hidden;

                        Process.Start(info).WaitForExit();

                  }

                  catch( Exception ex ) {

                        writer.WriteLine( "Exception trying to IPconfig: " + ex.ToString() );

                  }

 

                  writer.WriteLine( "Finished" );

                  writer.Close();

            }

      }

}

 

Note that this is just sample code. It doesn't have to be IPCONFIG.exe, it can be ANY executable (in the case of my program, I'm using one of the NET.exe commands). If you run this program under any other user account (an account that can actually be logged in with) it executes perfectly.

If you're feeling frisky and want to try it out and it breaks on your IE7 Beta 3 install also (Windows XP, .NET 1.1, I haven't tried it on anything else), could you go to this IE7 bug and indicate that you can reproduce it?

https://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=152600


Thursday, October 05, 2006 #

Standard stuff (pulled off our website):

We are looking for a software engineer to join our world-class product development team, which is responsible for the architecture, design and development of GlobeRanger's flagship product, iMotion. This position requires a creative, passionate, and technically strong individual that excels in challenging projects and team environments.

* Five or more years experience developing object oriented products and solutions
* Two or more years of experience developing in C# and .Net
* Excellent verbal and written communication skills
* Must enjoy collaborating and working with team members
* BSEE, BSCS or equivalent experience

Company information:
GlobeRanger Corporation
Careers page:
http://www.globeranger.com/company/careers.asp

Want to apply:
Send email with resume to careers@globeranger.com


Standard stuff (pulled off our website):

Candidate must be highly motivated, innovative and able to work independently. Applicant must be able to communicate effectively and work well in a high performance, fast paced, team environment. Applicants will be tasked with Testing our Software Development Kit, .NET API's, interfaces and class templates for our RFID and Sensor Platform. Candidates will also be testing application user interfaces and may be assisting Technical Support with second level technical support calls as needed. A qualified candidate must have been part of a complete Quality Assurance effort within the total development life cycle and must have broad experience in testing components which run under Windows Services. Responsibilities will include writing test cases, developing test scripts, testing API's and SDK's. Degree in Computer Science or related technical field is preferred.

Required Skills:
* Experience in software life cycle testing methodologies
* Software Test Life Cycle and Development Life Cycle
* OOP, Windows Development
* Software development experience with Microsoft development tools & methodologies including the .NET Framework & C#.
* Background in object based or object oriented programming
* Experience in the use of XML, Web Services, RDBMS interfaces
* Worked on a high performance team in a high-tech startup or startup-like environment.

Additional Skills:
* Specification documentation (UML, State/ Transition Diagramming, Dataflow Diagramming, Use case documentation)
* Enterprise integration methods and tools (e.g. connecting to large ERP, SCM, CRM, WMS, legacy backend data processing subsystems)
* Microsoft MOM, SMS, Biztalk, MSMQ, IIS
* RFID & sensors
* VB.NET, Windows CE / Pocket PC Development, Compact Framework
* Test automation tools (Seque in particular)
* Handheld & Portable device usage using Windows CE, PPC OS & .NET Compact Framework
* Wireless LAN/WAN knowledge & experience

Company information:
GlobeRanger Corporation
Careers page:
http://www.globeranger.com/company/careers.asp

Please submit your resume in confidence to careers@Globeranger.com


Tuesday, September 19, 2006 #

Just recently Symbol bought Matrics. Now Motorola has decided to get heavy into RFID and bought Symbol.

http://www.motorola.com/mediacenter/news/detail.jsp?globalObjectId=7268_7209_23

This could lead to some really interesting product ideas. It could also lead to Symbol going stagnant for a while during yet another corporate restructuring.


Monday, July 03, 2006 #

UPDATE (9/7/2006):
Microsoft closed my bug without really looking at it. I got “not an IE problem“. Luckily, someone else has picked up the cause and resubmitted with a bit more information for me. If you are having this problem and want it fixed (because ShellExecute=false may not work for you), then go here and vote/validate the bug:
https://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=180644

UPDATE 2 (9/18/2006):
Microsoft closed the new bug again without really looking at it. “Please see if it happens in Beta 3“ they said. Today I found another variation of what appears to be the same bug.
https://connect.microsoft.com/IE/feedback/viewfeedback.aspx?FeedbackID=202102

Their product feedback process is really a pain. And you can't call product support services on a beta product so you're stuck submitting feedback through a system where feedback gets ignored. GAH.

ORIGINAL:
So I've come across a real interesting side-effect of the IE7 Beta 3 install. A program running as SYSTEM under .NET 1.1 (either as a Windows service or as a scheduled task) cannot start a process using the Process.Start method. It fails with a Win32Exception (”Access is denied”).

A SYSTEM program gets an access denied error? That's an awfully strange effect of a browser update, don't you think? To get this sample program to run as SYSTEM, create a scheduled task and specify SYSTEM as the username (and don't enter a password). Then just right-click the scheduled task and select Execute.

Here's the simple code that fails when run under SYSTEM:

using System;

using System.Diagnostics;

using System.IO;

 

namespace NetUserIE7Tester {

      class Class1 {

            [STAThread]

            static void Main(string[] args) {

                  StreamWriter writer = new StreamWriter( "C:\\ie7netusertest.log", false, System.Text.Encoding.UTF8 );

                  ProcessStartInfo info;

 

                  try {

                        info = new ProcessStartInfo(Environment.SystemDirectory + "\\ipconfig.exe",

                              "/all");

                        info.WindowStyle = ProcessWindowStyle.Hidden;

                        Process.Start(info).WaitForExit();

                  }

                  catch( Exception ex ) {

                        writer.WriteLine( "Exception trying to IPconfig: " + ex.ToString() );

                  }

 

                  writer.WriteLine( "Finished" );

                  writer.Close();

            }

      }

}

 

Note that this is just sample code. It doesn't have to be IPCONFIG.exe, it can be ANY executable (in the case of my program, I'm using one of the NET.exe commands). If you run this program under any other user account (an account that can actually be logged in with) it executes perfectly.

If you're feeling frisky and want to try it out and it breaks on your IE7 Beta 3 install also (Windows XP, .NET 1.1, I haven't tried it on anything else), could you go to this IE7 bug and indicate that you can reproduce it?

https://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=152600


Friday, July 28, 2006 #

Well, my first reporting of a bug to Microsoft (via the phone, through product support services) has finally resulted in a KB article.

http://support.microsoft.com/kb/913548/

I submitted this bug to Microsoft on November of 2005 and it finally made a public KB article on June 1 of 2006. At least this was a relatively minor issue.


Monday, July 17, 2006 #

See the press release on the globeranger website or see the press release on the Psion Teklogix website.


Friday, June 30, 2006 #

A link between event controls in the iMotion Edgeware Platform represents the flow of data in the form of an event and delivered through a method invocation and is the primary way for event controls to “talk” to each other. This in-band communication may not always be the most appropriate way for one event control to execute another event control and an out-of-band method of communication may be more appropriate. ... (more) ...

Monday, February 06, 2006 #

I can't even remotely explain how important I feel the "hit by a bus and now we don't have any who knows [x]" behavior in companies is (or rather, the lack of said behavior). I think it's just a common behavior when you have a single person work from start to finish on a given section of a software application: you have the guy who wrote the interface, the girl who wrote the server application, the guy who built the installer. Ask one of them to take over for someone else during a vacation period, and you'll likely get a blank stare and a "it's not my code so I'm not comfortable working on it", or perhaps the work will get done but get done incorrectly, thus requiring the originator of the code to re-implement it correctly.

I've experienced this at every job I've been at. I'm the ALE (Application Level Events) "master" in our product. Aside from Daniel, I'm the only engineer who thoroughly knows the specification. Aside from some coworkers' spelunking through my code, I'm the only one who really knows the server-side code. There are two coworkers who could pick it up really easily though, so the ALE service will be maintainable if I get hit by a bus.

Our security service, on the other hand, was written primarily by one guy (server-side all the way to the UI) and is a bit of a black box to everyone else (and that's how he designed the APIs, so it's expected). I've worked a bit in the security service, but definitely wouldn't feel comfortable taking it over completely without a pretty big learning curve.

That said, I think at GlobeRanger we have very good cross-pollination of our code, especially the server-side (which is arguably the most important).

One area I don't think we have historically had cross-pollination has been in the realm of building our installers. We use InstallShield (of course) and we have a single InstallShield expert. That expert has kick-started every project's installer at least, though typically he has been responsible for the entire installer from start to finish. We've had one other guy build installers, I used to build the device adapter installers (that's been transferred to one of the device adapter developers), and on our most recent iMotion version (the 5.1 bugfix/2.0 compatibility patch, which has ~40 reversioned assemblies and ~25 reversioned merge modules) I've taken over installer duty. Aside from the nuances of InstallShield and Windows Installer (how to properly format merge modules for patches, etc), I think we now have four people who could keep that one job function agile. If installer builder #1 and #2 are busy with other duties, we have a third or fourth who could take over.

Like I said, I can't even begin to express how important I feel this is. In all cases, if I were to leave for the day or leave for vacation or get hit by the bus, it is incredibly important that I leave my work in a state that could get picked up by someone else. Maybe I'll have an emergency flight to a customer for support tomorrow but we still need to release another build of iMotion.

I've worked at a place or two where I was the only one who knew half of the systems (small teams of 4-6 people in an IT department of a business shop) and others were the same. While many people take the job security stance, I think that's detrimental not only to yourself but to the business you work. First off, if a business is going to downsize, no matter how much you're the only one who knows a system, you're going to get canned (the solution, obviously, is to become incredibly skilled so that it would be a detriment to lose your expertise rather than try to stay in your mediocrity but keep your code hidden). Second, if you're the only one who knows a system, who are they going to turn to when they need some random features implemented? I don't know about everyone else, but if I had the choice between "some random boring generic feature in the system that I wrote" and the "cool new product", I'd lean towards the latter. I'd want to make sure that I have the capacity to let someone else take over my work so I can move on.

Though I think my attitude may differ from many others.

Anyway, this all started when I got to thinking about how at GlobeRanger we implemented a pretty strict automated build system quite a while ago. We built some internal development tools over a couple weeks, we invested in a build tool (instead of going with NAnt or other free ones), and build some reusable scripts to make building new scripts easier (for instance, we create a manifest of projects applicable to any given release vehicle and a build step will automatically figure out what to get, where to get it and automatically build it all through visual studio; a single parameterized step that gets fed a manifest and builds all code associated with it). My recent experience with building the installer for this latest patch release of iMotion has been amazing. I reversion a merge module (or 25), the other developers handle assigning the projects to the build, and then I click a single button to start a build of the product. We can have it scheduled for nightly or continuous building, but it doesn't do us much good on these minor releases.

Our original procedure involved one guy building everything on his box. All modules, all code, everything. That got tedious so he built a one-off to build all the code and installers. Unfortunately it was incredibly cryptic and suffered from it's-how-he-works-so-you-can't-understand-it-easily (e.g., he works in a certain pattern that is drastically different to yours, so understanding the system is more of a pain) and now this build system is a hit-by-a-bus problem. Eventually that got moved to a build box which helped on standardization and cleanliness of builds, but nonetheless it was problematic. Then we got a build tool and invested in internal development tools and made sure to implement 1-button click builds and we now have the capability to allow just about anyone to work with our builds. All we need now is a way to automatically have our merge modules build themselves!

The reason I was thinking about this is I'm leaving for my honeymoon in a couple days and I'll be gone two weeks. I'm incredibly confident that this project won't stagnate and any one of the developers will be able to handle building the product in my absence. I won't receive any "sorry to call you on your honeymoon, but, um, we can't figure out how to build the product". I won't come back to a huge list of tasks because somebody else couldn't figure out how to take care of my stuff while I was gone. Perhaps I just don't want to feel important enough and require people to call me if they want to touch "my stuff". Or perhaps I just like to have some peace of mind while I'm away.


Thursday, December 15, 2005 #

Application Level Events (ALE) is a standard created by EPCGlobal, Inc., an organization of industry leaders devoted to the development of standards for the Electronic Product Code (EPC) and Radio Frequency Identification (RFID) technologies. The ALE specification is a software specification indicating required functionality and behavior, as well as a common API expressed through XML Schema Definition (XSD) and Web Services Description Language (WSDL). The behavior expressed through the ALE..

Thursday, December 08, 2005 #

Scott Guthrie is posting that they're developing a new project type for ASP.NET projects in Visual Studio 2005. I still have no idea why that crackpot (note, "crackpot" is meant to be funny) thought that removing the concept of a project from ASP.NET would sit well with people who had been creating ASP.NET applications for four or more years (with another year for betas).

Enough people have complained publicly about it (I have, though not very vocally) that they're putting it back in. And I don't buy the crap that it's mostly for project upgrading from VS2003. It has nothing to do with upgrading projects. It has everything to do with pulling the rug out from everyone's feet and only some people don't mind.