-
Thursday, July 02, 2009
The Madison, WI .NET User group has asked me to speak at their July 8 meeting. I’ll be talking about the technologies that .NET makes available for writing RESTful .NET Services: ASP.NET/IIS MVC WCF ADO.NET Data Services I’ll be skipping the Azure/Cloud specific choices since I only have an hour to cover things. My feeling is that the audience will be hosting all of their own services for the time being, so the above 4 items will be the most interesting to them. If you are interested in seeing the talk, please sign up here. I hope to see a few of you out there.
Full story
-
Sunday, June 14, 2009
I’m on vacation this week. I’ll be back to posting on June 23, 2009.
Full story
-
Wednesday, June 10, 2009
I recently had an email conversation with a former colleague. He works at an organization that uses some pretty cutting edge technology. My feeling is that the organization firmly understands the value of moving to the latest and greatest is fraught with peril but rewards the early pioneers if these moves happen appropriately. In particular, they are already evaluating Oslo. I’m a big fan of proactive thinking. I have long heard rumors that the Chicago market is too backward or old fashioned, and I just don’t see that. Instead, I hear that a Chicago business is actively hiring and is using the latest and greatest technology to make their business more competitive. We also have a very active Ruby and Python community which, from what I can tell, is growing every month. I think that the city has already turned itself into a tech hub. We just need ...
Full story
-
Monday, June 08, 2009
This is day #3 of my journey through the .NET 4.0 assemblies. I’m planning to split up large assemblies over several days so that I give bigger assemblies proper treatment. Today, that won’t be happening! By the way, this is actually turning out to be pretty neat. .NET ships with a lot of interesting pieces, and the assemblies that sort early in the alphabet (because they don’t start with System) are pretty interesting glimpses into how .NET does things. Today, we look at IEExecRemote. This assembly contains a single type: IEExecRemote, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a FullTrust: True In GAC: True Number of types: 1 Number of namespaces: 1 Types: Class IEHost.Execute.IEExecuteRemote So, what does this IEExecuteRemote do? Reading the docs, we see that this is another class that “supports the .NET Framework infrastructure and is not intended to be used directly from your code.” So what? What ...
Full story
.NET
-
Friday, June 05, 2009
Over the years, I’ve come to use Google for SOOOOOOO much. Over the past week, I changed my default search engine in Internet Explorer and Firefox over to Bing. From what I think I’m seeing, Bing slightly exceeds Google in effectiveness. It might be that the UI is a little fresher, the results have slightly better relevance, or just that it is something new. Regardless, after several days of really heavy use, I don’t think I’m returning to Google search anytime soon. FWIW, I tend to type in sentence based queries as opposed to sophisticated boolean logic. Bing likes my questions better than Google does, and that let’s me get my job done faster. From what I’m seeing, Bing is a little bit better. A little bit is enough for me to switch.
Full story
-
Friday, June 05, 2009
I’m on day 2 of going through assemblies in .NET 4.0. I may miss a day here and there, but I want to find out what is in all the libraries. For some of the bigger libraries, I think I’ll do a namespace breakdown over several days. The assembly today is CustomMarshalers, and it has very few classes; 4 to be exact. CustomMarshalers, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a FullTrust: True In GAC: True Number of types: 4 Number of namespaces: 1 Types: Class System.Runtime.InteropServices.CustomMarshalers.ExpandoToDispatchExMarshaler Class System.Runtime.InteropServices.CustomMarshalers.EnumeratorToEnumVariantMarshaler Class System.Runtime.InteropServices.CustomMarshalers.TypeToTypeInfoMarshaler Class System.Runtime.InteropServices.CustomMarshalers.EnumerableToDispatchMarshaler These classes all handle special scenarios for interacting with COM. Since there are only 4 classes, I’ll cover each. ExpandoToDispatchExMarshaler The CLR will not use this marshaler automatically. You need to know when it is needed. When P/Invoking a function or declaring a CLR wrapper for a COM object, you may have an object that only implements IDispatchEx...
Full story
.NET
-
Thursday, June 04, 2009
One of the questions I had at the Chicago Code Camp in my Google App Engine presentation was about permissions on deleting values from table storage. In GAE, each item in the datastore has a globally unique key—absolutely unique across all entities in your application and, I believe, unique across all objects. The question was this: if I figure out an ID of your objects, can I cause a delete from a second GAE application? Fortunately, no. At the time of this writing, I have an object (a picture) whose ID is ahJzc2VlbHktc2lsdmVybGlnaHRyDwsSCUltYWdlRmlsZRgCDA. I tried deleting that exact ID from a different application. The delete failed. So, the delete would only work if it comes from the application in question. That’s what I hoped happened, and it does. Thanks for the great question!
Full story
Google App Engine
-
Thursday, June 04, 2009
In the spirit of DNRs “Better Know a Namespace”, I’m going to go ahead and try to understand what the 140 assemblies on my machine that appear to be part of .NET 4.0 actually do. I’ll go through these as I can, just as a way to know what exists. Here is the first one: Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a FullTrust: True In GAC: True Number of types: 10 Number of namespaces: 1 Types: Interface Accessibility.IAccPropServices Interface Accessibility.IAccPropServer Enum Accessibility.AnnoScope Value type Accessibility._RemotableHandle Interface Accessibility.CAccPropServices Class Accessibility.CAccPropServicesClass Value type Accessibility.__MIDL_IWinTypes_0009 Interface Accessibility.IAccessible Interface Accessibility.IAccessibleHandler Interface Accessibility.IAccIdentity This assembly provides the interfaces and struct definitions needed to interact with the Windows Accessibility system. The assembly is a managed wrapper for the COM accessibility interface. This interface helps assistive technology products work with applications. It also provides a way to access, identify, and ...
Full story
.NET
-
Wednesday, June 03, 2009
For me, Hunter is the first deep contact I ever got into Microsoft. Way back when (1998!) I wrote a book called Windows Shell Programming. At that time, I was spending a lot of time in the Windows Shell newsgroups looking for answers as well as answering questions. At the time, Hunter was a Software Development Engineer in Test for the Windows Shell team. He quickly figured out that I was writing a book on his team’s product and did everything he could to help me understand how various features worked. Hunter is a big part of the reason that the book, my first, came out as well as it did. He actually made sure that I got decent answers from people on the shell team (Raymond Chen reviewed and answered a lot of my questions via Hunter). I didn’t realize that he is now a VIP in ...
Full story
-
Wednesday, June 03, 2009
I was digging through the .NET 4.0 assemblies and started with a group that is near and dear to my heart: System.ServiceModel.*. I know—that’s the super cool but really hard thing to understand in .NET, at least, that’s what I seem to see all the time. Last night, I poked around in System.ServiceModel.Channels—a new assembly in .NET 4.0. This assembly contains two interesting features: The ability to send messages in process. The ability to send blobs as is. The in process channel was frequently asked for by users back in the Indigo beta days. As a matter of fact, this was typically the first channel that the channel team would write to make sure that the latest iteration of the channel model still worked and made sense. Then, the channel was checked into the build verification tests (BVTs), but never into the product. Finally, with .NET 4.0, that class has ...
Full story
WCF
-
Monday, June 01, 2009
Last night, Lake County Illinois had some fierce lightning going on. When the cloud is ready to make a lightning flash, nature has its ways of determining the most effective path between the cloud that wants electrons and ground, which has an infinite supply of electrons (not really, but for the math, it works out to treat our planet as an infinite supply). That path will flow through the air to the ground for most of the Earth. That said, antennas connected to ground can offer a better choice. Last night, that choice was made with my antenna. When lightning strikes, damage happens. My antenna is grounded, but some of the surge also went through the coax cable anyhow. I’m happy to report that all the signal goes through a small, $14.99 Maganovox 10 dB Signal Amplifier (model M61116). This unit helps make sure that I don’t lose signal strength ...
Full story
-
Saturday, May 30, 2009
I’ve uploaded my slides and demo code for Chicago Code Camp: Intro to Google App Engine. Enjoy!
Full story
-
Wednesday, May 27, 2009
Once you have Virtual Box up and running, you’ll want to install the Virtual Box Guest Additions. To do this, follow these steps: Start your Ubuntu VM and log in. Press the right CTRL key and select Devices—>Install Guest Additions. Open up a terminal window (Applications—>Accessories—>Terminal) type in: cd /media/cdrom type in: sudo bash ./autorun.sh A new window will come up and work for a while. When it is done, it will tell you to reboot the VM. Reboot the VM when you see this message. Log in again when the reboot is complete. Press [Right Ctrl]+F. You now have full screen mode activated. I’m posting this because the top rated instructions for Virtual Box and Ubuntu 9.04 that enable Full Screen mode have too many steps.
Full story
-
Tuesday, May 26, 2009
Linux seems to be the OS of choice for utility computing providers. EC2 charges 3 cents/hour for Linux instances (when buying $325 or $500 hours in bulk) compared to the 12.5 cents per hour charged for the comparable Windows instance. Given the price savings, that’s incentive enough for me to try building an app on the Linux system. OK, and the fact that knowing Linux will open up a wealth of Open Source tools to me AND I’ll be able to use the Advanced Packaging Tool (aka apt) to get and install applications. If I go the Windows route, I would lose the apt path, and that’s unacceptable since the Windows installations are a bit more difficult than the Linux ones. I’m also not willing to give up Windows 7 as my main OS, which means I need a VM to run things. My filter process to pick out a ...
Full story
-
Thursday, May 21, 2009
…and that is going to change, because it isn’t good to keep such things a secret! You out there. Did you know that Chicago is a major technology hub. We just hide the technology in mundane things: finance, insurance, shipping, and other forms of commerce. Amazingly, a lot of this tech is profitable. Very profitable. Trading firms are coming up with some incredible innovations in automated trading to notice when the market is moving a certain way and then take advantage of the few seconds where noticing is profitable and turn that observation into profit. Parallelization, grid computing, and more is happening in a wealth of areas. Unfortunately, broadcasting these discoveries and strategies is a losing proposition because many of these trading strategies only remain profitable while no one else has figured out the pattern. As soon as the pattern becomes common knowledge, the systems become too optimized to do ...
Full story
-
Wednesday, May 20, 2009
I’m at IIW this week and have had my days jam packed with info, meeting folks, and getting stuff done. As a result, I haven’t posted much this week. As you may know, VS 2010 Beta 1 dropped this week. I’ve been busy chasing down sources to find out if Azure works with .NET 4.0. I would hope it does, but no word. I’m downloading the beta now and will try putting up a .NET 4.0 app later tomorrow. I’ll post if I find success. Wish me luck! UPDATE! I got a response back from one of my sources, before VS2010 finished downloading. Here’s what I have: “Yes – [Azure will allow .NET 4.0] but you have to include ALL the .NET 4.0 assemblies (i.e. it’s a real pain), as Windows Azure only has .NET 3.5SP1 deployed today. Once .NET 4.0 is officially released, Windows Azure will be updated.” So, ...
Full story
-
Thursday, May 14, 2009
In case you missed it, GAE updated their Java SDK to version 1.2.1. Responses can now be up to 10 MB in size. A full list of changes can be found here.
Full story
Google App Engine
-
Monday, May 11, 2009
You can download the source for my F# AWS application from here. The remaining posts start on April 13, 2009, and run through today (with a few interruptions from me on other topics).
Full story
Utility Computing
F#
Amazon Web Services
-
Friday, May 08, 2009
I wish I could say that their is something amazing that I did differently from everyone else who has hosted on EC2, but that’s just not so. Once you get an EC2 instance running, the rest of the process is identical to connecting to a virtual machine anywhere. If you need to add additional Windows components, the directions in this post are dynamite. If you use the management console, the directions on the Amazon article are pretty easy to map to actions in the UI without much thought. So, you are deploying to a virtual machine that is easily duplicated across the Amazon EC2 infrastructure. I would say that the strongest reason to use EC2 is that you already know how to use it. A second reason to use EC2 over your own data center is this: if you are using S3 and SimpleDB, you don’t pay for ...
Full story
EC2
Utility Computing
Amazon Web Services
-
Wednesday, May 06, 2009
(You can review my description of S3 here.) Because Amazon’s Simple Storage Service, S3, has been around for quite a while, the community has built a large number of libraries to access S3 programmatically. The C# space is pretty well crowded as well, and many folks wrote libraries that are good enough for their needs, then released those libraries to the world. The trick in picking an S3 library does not revolve around picking a best library. Instead, it involves finding one written by someone who had a similar set of needs. When looking for a library, think about how you want to add, update, and delete objects in S3. Write down the use cases. Then, download a set of libraries and keep messing with them until you find one that matches your needs. My planned usage involves: Create a bucket once, when the application first runs. (This step ...
Full story
Utility Computing
F#
S3
Amazon Web Services