Posts by Bruce Gruenbaum:
Things have been very quiet from me for a while, but I have had one of the most tumultuous, yet exciting 12 months of my life. Some of it has been amazing. Some of it has been frightening. All of it has been an amazing growing experience.
Exchange Web Services
After my last post on Exchange Web Services, I spent quite a lot of time on a commercial Java-based implementation of the code that I had been talking about on my blog. The development went fairly well and I was very close to a beta when I started serious work on resolving the security aspects of the Java connection to Exchange. This did not go very well. While I was able to make a connection based on Digest authentication, this was not satisfactory for some implementations. The NTLMv2 implementation had to work, and doing it with Java just does not cut it.
I sat back and thought about it for a while and came to the conclusion that there really is no compelling need to fight with Java to get it to communicate with Exchange Server. Windows Communication Foundation (WCF) provides a good mechanism for exposing standard WebServices that can be called from Java, OpenEdge, and any of the ESBs. Not only that, because WCF is .NET based, it also allows me to leverage the .NET managed API for Exchange Web Services and that makes working with the API much easier. Most importantly, the security aspect became a simple issue to resolve.
So I made the decision to switch from Java to .NET for this solution and I started work on a .NET version of what I was working on. Over the next few months, I will be expanding the EWS article series to include the last 3 articles that I was planning to write in Java, but I am also going to add a set of articles that describe exactly the same functionality in .NET.
A Phone Call from Oracle
At roughly the same time as I was getting very frustrated with the Java security issues, I was sitting in my office at DIRECTV one day working when I got a call from an Oracle headhunter who told me that a salesperson that I was working with for a DIRECTV product evaluation had recommended me to her and wanted to know if I would be interested in a position at Oracle. I have had numerous interactions with Oracle in my life as a prospective/existing customer, and I have always been consistently appalled at the behavior of their sales team and the disgustingly poor follow through that I have seen post-sale.
Combining that experience with the takeover of Java and MySQL because of the Sun acquisition, and the fact that Oracle has a reputation for buying products to either intentionally or negligently kill them leaves me with a very bad taste in my mouth about the company.
To me, there is a difference between being ethical and being moral. Morality requires more than just adherence to the law and ethical standards. It requires a proactive program of going beyond what ethics require and giving back. Sun, for all its faults, did everything it could to try and foster a strong OpenSource community. While it made money out of the community, it also gave back to the community in spades. Oracle was already showing signs that it was out to exploit the OpenSource community for whatever profit it could make by whatever means necessary. While not exactly unethical, it's not moral and to me, that is value that I hold in very high esteem.
So my response to the recruiter was that even if they offered me what Larry Ellison earns, I would not work for Oracle under any circumstances, so she needn't waste her time calling me again.
A Phone Call from Microsoft
A couple of weeks later, I got a phone call from a headhunter at Microsoft. My natural reaction was to say "Oh heck, no!" But I decided to listen to what she had to say. She indicated that she had found my profile on LinkedIn and they were interested in talking to me about a position in the Interactive Entertainment Business (IEB). IEB is the organization that creates XBox and runs XBox Live and the manufacturing supply chain for all consumer-facing Microsoft products.
My attitude toward Microsoft had always been consistent. While Microsoft has never really fostered an OpenSource community, it has always provided phenomenal support to its development community. Even though MSDN is an expensive investment if you have to pay for an annual subscription, it is also the most amazing library of help you will find anywhere and the value you get for the cost of the subscription is much better than anything else out there.
In many ways, my attitude to Microsoft was that although it was a big ugly giant, it was more like Shrek than the one in Jack and the Beanstalk! So I heard the recruiter out and went on to do an interview with the hiring manager who asked me to fly to Seattle for a round of interviews.
The Problem with California
I agreed to the interview, but I was really in two minds about whether this was worthwhile. Certainly, I loved what I was doing at DIRECTV. DIRECTV is a great company to work for and they had some amazing stuff going that made me very reticent to leave.
The problem with DIRECTV was that I lived in Arcadia, near Pasadena and DIRECTV is in El Segundo which is 35 miles away. That 35 miles took me through the center of Los Angeles, and while it was only a 30 minute commute when there was no traffic (at 5am), coming home in the afternoon could take anywhere from an hour and a half to two hours. Friday afternoons were always the worst and I hated my commute.
Moreover, California is an exorbitantly expensive place to live. It is absolutely absurd how expensive it is and although I was technically near the ocean, I was far enough away that I might as well be in the middle of nowhere. While the sunshine all year round is nice, the air-conditioning in the Summer, which was pretty much essential, was costing me around $400 per month. LA was not my favorite place in the world to live.
I flew up to Seattle for the interviews process, and while Microsoft does WOW you with the campus and the area, the interview process is grueling. I left feeling positive about how the interviews had gone, but I also left feeling like I didn't think I was making a career move that was going to be that big a shift forward.
A few days after I got back to LA I got an offer from Microsoft, and while it was better than DIRECTV, I really wasn't convinced.
The problem was I was not sure I wanted to leave DIRECTV. It's a really cool company. The technology is fascinating. I was just starting to feel like I understood the entertainment business, and I was not convinced that the grass was any greener on the other side. As a friend of mine said to me, "the grass is always greener… right over the septic tank!"
Allison (my wife) and I did a lot of soul-searching and careful math. I made a number of phone calls and spoke to a lot of people who either work for or had worked for Microsoft and the consensus was consistent. So after a lot of agonizing, we decided to accept the offer and I started work at Microsoft in Redmond at the beginning of November.
At the end of November 201 I went back to California to help Allison with the move. We decided that our dogs were not going to be subjected to flying, so we rented an RV and drove from LA to Seattle via the Pacific Coast Highway and the Redwood Forest. That was an amazing experience, although an unseasonably early snowstorm made for an interesting trip.
A week after I joining Microsoft, my hiring manager announced that he was leaving the team. I was told that if you don't like your manager at Microsoft, just wait a few months and you'll be re-org'd. Little did I know how true that was going to be. My manager's position was not back-filled, so I reported to his manager for a month before he announced that he was leaving the team, too. Both of them were promoted inside the company to other sections, but this was a little surprising. I joked with Allison that if I keep losing managers at this rate, I'd be reporting to Steve Balmer by the end of 2011.
Microsoft is also the most difficult company I have ever worked at to figure out the culture. For a $260B company, it has so much diversity in how different orgs work that it is more like a conglomeration of smaller businesses than one big corporate. The org that I work for – Manufacturing Supply Chain and Information Services (MSCIS) is the best run organization I have ever worked for. Our VP just gets it. His (and our) principles are what I've always believed. I honestly feel like I am finally home.
But work is not everything.
In early January, the most important human being in my life, my wife, Allison, was diagnosed with Ductal Carcinoma in Situ (DCIS) - Breast Cancer. I'd been at my new job for two months and now we had to deal with this. Fortunately, DCIS is sometimes called Stage 0 Breast Cancer because there is no lump yet and it hasn't had a chance to spread. One thing was for sure, though, Allison was going to have to fight this and she needed all the help she could get. The kids had decided to stay in California so the two of us were alone.
Nothing I have ever done in my life could have prepared me for how helpless I felt as I watched the most important person in my life deal with a life-threatening disease. While it drained her and made her sick, I was doing all I could to be successful at Microsoft. That was when I learned something about Microsoft that I could never have guessed going in.
When my boss learned that my wife had breast cancer, he told me to make sure I put her first. I sort of ignored it. Then his boss spoke to me and asked me how my wife was doing. Soon all my indirect managers were concerned about Allison. I was categorically told that my wife was more important than anything that Microsoft needed and I needed to be there for her.
Slowly it started sinking in: Microsoft really is a moral company. The people that work there are more important than the company. Microsoft truly does care.
What really reinforced this for me was a presentation that was done for our senior leadership group by our SEA team who were explaining what we do around social conscience on the production lines overseas. Our VP pointed out that we have done things like install washers and dryers in the dorms on the production lines when the people who work on the lines won't use them.
As I listened to the presentation, I realized that I had made the right decision. Microsoft was not only an ethical company, but they truly care about morality too.
Despite all the upheaval associated with it, I'm finally home.
Now that we have succeeded in creating, updating and deleting calendar items and mastered Exchange Impersonation, it’s time to turn our attention to having Exchange notify us about what it is doing. Part 4 of this series is going to provide a detailed code walk-through of some code that leverages the Subscription API.
The example includes two code examples – one for Java programmers and one for OpenEdge programmers. The OpenEdge version writes updates through the OpenClient via the OpenEdge AppServer to an OpenEdge database.
In part 3 of this series on integrating Exchange Web Services with Java and OpenEdge, we’re going to talk about a technique for accessing mailboxes called Exchange Impersonation. The first part of this article is going to talk about what it is, how it works, and the very serious risks it can potentially introduce to your enterprise. We’ll talk a little about how you can mitigate those risks, how to set it up from an administrative point of view, and then we’ll actually use it.
As with the other articles in this series, there is also a set of sample code that you can download and install to follow along later in the article.
Progress Software Corporation has been running a program to test the OpenEdge GUI for .NET bridge with controls that have no user-interface. My company, Intangere, is very interested in this program because we are looking at releasing a control that would make it possible for OpenEdge developers to communicate directly with a Microsoft Exchange Server and receive mailbox updates for an OpenEdge client.
Intangere thus signed up for the program and created a control that mimics the behavior of a real Exchange Web Services control. This test has been surprisingly successful, and this article provides some information about the test and the code and a document that describes its use.
In part 2 of this series, we are going to spend some time looking at the CalendarItem API, how it works and what it takes to create, get and delete an appointment. Before we start, you should make sure you have your environment set up per the explanation in part 1. If you have done that, you can download the example code for both the Java portion and the OpenEdge portion so you can follow along as we walk through this code together.
Part 2 of this series of articles is dedicated to giving you an overview of the process of connecting to Exchange and doing some basic Calendar item work. Through the sample code, you will learn how to:
– Connect to the Exchange Web Service from Java;
– Create calendar items on the Exchange Server;
– Get calendar items from the Exchange Server;
– Delete calendar items from the Exchange Server; and
– Connect to the Java service from OpenEdge to perform the same operations.
The Java functionality will be exposed as a Web Service so that other platforms can also leverage, which is how we will get at it from OpenEdge. The OpenEdge code leverages the new GUI for .NET and object-oriented extensions, so you may find the example interesting if you have not done this before. [...]
A few weeks ago I wrote about my experiences starting out with the Microsoft Exchange Web Services API and on using the subscription API. In the second article, I said I would write a code walk through that shows how to do the stuff. I had thought of doing a complete walk through like the Dynamic OpenClient code that I did back in November last year, but I wasn’t as busy back then as I am now, and I had the time to actually write up the example properly.
This is part 1 of a multi-part series that will cover the process of connecting to Microsoft Exchange Web Services, submitting requests to Exchange, receiving notifications from Exchange, creating appointments, tasks, and e-mail, and using Exchange Impersonation. There will also be OpenEdge examples interspersed within it. Each part in the series (except this one) will have a downloadable zip file with the code in it that actually runs (at least in my environment) [...]
The thing that sets one business apart from another is the special added value that it brings to the table. It does something different. It has come up with an idea that no one else does quite the same way, or so the business believes. Even when someone else is doing exactly the same thing, the thing that differentiates the two is the way that they do it. This is the “special sauce” that makes a business special.
But how do companies go about finding that “special sauce?” And more importantly, what can they do to maintain it?
While I don’t believe for a second that all the special sauce in the world comes from technology, technology can often be at the very heart of making that special sauce, especially when we are talking about building customer relationships.
Technology can be a huge support in this area, and that’s where research and innovation come in. Using technology to build better business relationships is where the focus of technical growth is, and learning how to apply technology to do so is where research and innovation come in. [...]
This post is a follow-up to my last post in which I spoke about the software that I use to build software. In this post, I want to talk about some of the hardware and operating system infrastructure that I have in place and the roll it performs.
As I said in my last post, I do not like to do work that could be automated. A large part of the work that should be automated is the work around the build process. More than anything else, successful software development depends on being able to produce a repeatable build process where the code that is built is thoroughly tested, installed and verified before it is considered stable. To get to the point of understanding how this all works, the hardware and network infrastructure is pretty important. So that’s where I am going to start. [...]
Someone e-mailed me off-line and pointed out that I post UML diagrams on my blog fairly regularly. He wanted to know what tool I use for this. In the process, his e-mail reminded me that I had written a post back in March of 2009, where I said that an upcoming post would talk about this. Promises, promises!
Actually, now is a really good time to have this conversation because with the work I am doing on the Exchange Web Service code, I have just finished revamping my internal infrastructure to support the equipment and software I need to do the job. So this is going to be a two-part article. In this part, I’ll tell you about the software development components that I use. In the next part, I’ll tell you about the infrastructure components. The problem is that you need to understand some of the details of why, so I’m going to start with a little background.
As you may have guessed from some of my recent posts, I am working on an API that allows an OpenEdge developer to interact with a Microsoft Exchange Server. From the API you will be able to do things like create, update, and delete e-mails, appointments, tasks, and contacts. You will also be able to get attendee availability, and some of the clever stuff that you can do today in Outlook from an OpenEdge application.
The intention is that this API will be accessible from any ABL session (whether character, GUI, GUI for .NET, AppServer or WebSpeed). Obviously, this means that you will need to be able to program against the API and that’s where this survey comes in.
The responses to this survey that was conducted between May 7th, 2010, and May 14th, 2010, are now posted.