1
I just took the Programmer Personality Test which is based on the Myers-Briggs Personality Test. I am a DLSB – Doer Low level Solo situation liBeral programmer. If you want to take it you can take it here:
I just took the Programmer Personality Test which is based on the Myers-Briggs Personality Test. I am a DLSB – Doer Low level Solo situation liBeral programmer. If you want to take it you can take it here:
Some call it the best windows mobile phone currently available, others call it too expensive, others, well they are just jealous.
Several days ago I got an opportunity to get a new phone so I took it. A friend of mine who was so smitten with my Cingular 8125 cell phone that I won at Tech Ed 2006 went out and got one themselves several months ago. A few days ago their phone was stolen. Since they only owned the phone for a very short time, it was going to cost the full retail price to replace it. Most of us are familiar with how the carriers contracts work. My contract period happened to expire recently and I could upgrade. My friend offered me a fair market price for my phone and I decided to take the offer as an opportunity to get a newer model. I know, I know, I’m a great friend 🙂
I was really happy with my 8125 in terms of the features. There were a few things that bugged me about the 8125 though. I wouldn’t call it the “perfect” device and for the record I never recommended it to anyone unless they were a power user. I always loved the keyboard sliding out and seeing everyone’s eyes get big as if they were 8 years old and had just watched a Transformers commercial for the very first time. The 8125 only had a 200MHz processor so it wasn’t the fastest kid on the block. With a lot applications open, switching views (by sliding the keyboard out) could get sluggish more times than not. It did play movies and MP3s with ease and was good at multi-tasking and was extremely stable (unlike previous Treo’s I’ve owned).
The form factor of the 8125 is what I really liked about the device. Having a big keyboard to type on is nice. The downside to this form factor is it isn’t a one handed device. To do pretty much anything it required sliding the keyboard out. The keyboard was really too large to type with one hand. Good luck doing anything if you had another hand occupied (steering wheel for example).
The first time you open the 8125 the reaction is, wow, nice keyboard. Then you try to use it and start to notice things aren’t as easy as they should be. The keyboard took up the entire area allowed but things were too crammed. I couldn’t easily dial numbers with the keyboard since they were on top of the row. The two action buttons were too close to the top and hard to press. Since the keyboard did take up the whole allowable area you had to use two hands to type on it or dial numbers. The device is great at doing email and text messages and this is where the keyboard shines. I could type faster on this device than any other I’ve ever owned (including Blackberry, Treo, Danger). Obviously there are some areas to improve with the 8125. So how does the newer 8525 stack up?
The 8525 builds upon the 8125’s form factor and fixes a few usability problems. If you’ve owned the 8125, you really notice the small details they fixed. For starters let’s start with the keyboard. Based on the picture above notice it doesn’t take up the entire area. This means it is smaller and easier to navigate with one hand. They also removed the numbers from the top row, and made them blue and put them in the keyboard itself to make it faster to enter numbers. The action buttons on the very top are not jammed up against the bottom of the device and are easier to press. The keyboard itself also has a completely different feel and even though the keys are smaller, they are extremely easy to use and type with.
Another major addition in terms of usability is the addition of the scroll wheel and “ok” buttons which are positioned on the left of the device. This is a very welcomed feature and allows you to do a lot of things quicker and easier. For example if you are on the phone screen, simply scroll down and you will see your speed dial options. Much faster than having to press speed dial then the number you want to dial. When reading emails you can press and hold the scroll wheel and a context menu appears whereby you can delete or move emails. Honestly it reminds me of my blackberry days a lot. The only difference is I can touch the screen to carry out actions instead of relying on the scroll wheel for my only way to interact with the device.
On the front of the device they added a windows button and an ok button. Honestly I think these keys are useless and they are there to only make the other keys smaller and harder to hit. This is one area I wish they’d left alone because I was perfectly happy with the way the 8125 was. I actually wanted them to add this to the 8125 but since you have the scroll on the 8525 these buttons on the front aren’t needed I don’t think.
The 2.0 megapixel camera takes decent pictures. Much better than the 1.3 megapixel camera on the 8125. It also has a slider on the back which allows you to move between portrait and landscape mode. I haven’t used it honestly but it is there. Here is a picture I took from the back of my deck over looking the back yard. Click it to view the full 1600×1200 picture. This was taken on the highest settings available.
Another welcomed feature is the 400MHz processor. So far the device has been really responsive and the battery life has been better than expected. Syncing with the device in Windows Vista works very well. I like the way they integrated tagging of pictures and videos when syncing with the new Vista Windows Photo Gallery application. If you haven’t used the new Windows Mobile Center here is what it looks like below. This new version in Vista completely replaces Active Sync which leaves all of us warm and fuzzy inside.
The 8525 has other features such as Bluetooth, WIFI, and oh, 3G baby! It also has a built-in light sensor which detects if it is dark and then turns on the blue back light on the keyboard. A feature that is extremely welcomed. On the 8125 I constantly pressed the space bar to get the keyboard to turn the back light on. I did read somewhere that someone holds their finger on the sensor to make it come on although I haven’t had to do this yet. If you have an Exchange Server you can also get your email in real-time just like a blackberry and with 3G, the wireless modem feature allows you to get on the Internet wherever service is available with your notebook.
Push to talk is also incorporated with the 8525 although it will not be available until a few months. This is kind of a bummer since my sister and her husband have push to talk on their phones. At least I have someone to play PTT with 🙂
Windows Mobile 6.0 also just got released recently and I hope this device gets an update ROM soon. Mobile 6 has a lot of nice features and since it is the latest, I of course want it!
If you haven’t looked into this device and you are a power user I would say give it a shot. By far the best device I’ve owned to date and I hope I have another friend that gets their phone stolen when the next model comes out. 🙂
This is the year that a lot of us will have to choose one conference over the other since PDC is on the 2007 calendar. If you were given the choice where you had to choose one event over the other, which one would you go to? TechEd 2007 or PDC 2007?
In 2005 I attended PDC 2005 and in 2006 I attended TechEd 2006 in Boston. I’ve been to both events and enjoyed both. PDC 2005 we got to first see Windows Workflow Foundation, Windows Communication Foundation and other goodies that just RTMed as of late. They really are different type of events since PDC is going to talk about things that are on the horizon from the developer perspective and TechEd is focused more on today’s technologies. On the flip side TechEd is a larger event and an opportunity to interact with more people and see a wider variety of topics.
For those of you that have been to both events more times than I have, which one do you enjoy the most? Is it better to go to PDC 2007 and get an early jump on what is coming out? Or, better to go to TechEd 2007 and take advantage of the labs and broaden your base of knowledge by stepping outside of your comfort zone? Respond with your comments below if you don’t mind.
Sometimes you read a blog post and you are so excited to see such a feature announced in a new product that you blog about it yourself. This is one of those posts.
After moving to Windows Vista I had troubles with RSSBandit and had fallen behind on my news needless to say so sorry for those that already read this announcement from Olaf about EntLib 3.0.
Moving from environment to environment is something a lot enterprise customers deal with. We spend thousands upon thousands of dollars replicating environments to test our software, yet we are left normally coming up with our own solutions to handle changes from environment to environment.
That is why I am happy to see this new feature added to the CTP release of Enterprise Library 3.0. Here is a screen shot of how things will be handled in the console tool:
Here is how the system works as quoted by Olaf:
Every environment that is configured in the tool, will maintain its own “Environment Delta File” (or .dconfig file), which is updated after saving the configuration as a whole. This Environment Delta File contains all the differences specific to that environment and some additional metadata for merging the differences into a new and complete configuration file that can be deployed. The main advantage here is that an Environment Delta File can be distributed separately of the original configuration file and managed by someone that has access to all the passwords, server-names and what not of the different environment.
Very cool stuff. Olaf also noted a command line tool which will assist in automating the build process for each environment. Great stuff!
Before I start this article, let me be up front and state that I do not use DataSets 100% of the time. I do use the heck out of them in demos and presentations because, well, they demo well. There is a never ending debate on whether to use DataSets or not. I say use them, but not in all situations. That’s my official stance on them. In a lot of cases they make sense, espeically when doing binding to a DataGrid and reconciling changes, in others they don’t. We are not here today to argue for or against them though. What I will share with you are some tips that many may or may not know when using DataSets with Web Services.
As the tip states, include only the tables you need. I never create one master DataSet with all of my tables from my Database. I find it to be hard to work with and typically if I am working on a module basis which means I don’t need everything anyway, just the tables that apply to the module I am working with. I see a lot of time where people create DataSets where they include the entire database in a DataSet. I don’t, especially for modules. A lot of the time I will have a DataLayer that is made up of several different DataSets, not one large one. Here’s an example of what I’m talking about:
This example from the AdventureWorks database has only two DataTables in it: Contact and ContactType. This is all I need if I am going to deal with a Contact. It is easier to manage and look at, and less of a code footprint. If you are passing this information over a web service, by default, the schema of the DataSet goes along for the ride. Having more tables, means more schema information, which brings me to my second tip.
If you are using a Strong Typed DataSet, before you return your DataSet from a Web Service, mark it to not include the schema. Here is a sample web method using the Strong Typed DataSet seen above.
[WebMethod]
public ContactDataSet GetContactsByLastname(string lastname)
{
DataLayer.ContactDataSetTableAdapters.ContactTableAdapter ta = new DataLayer.ContactDataSetTableAdapters.ContactTableAdapter();
ContactDataSet ds = new ContactDataSet();
ds.Merge(ta.GetByLastName(lastname));
return ds;
}
Here is the output from this web method saved to the file system.
The majority (95%) of what is in the file is the Schema Definition for the DataSet. This is why the file is 5.23KB. The only part we *really* want is the row data. This is one of the major reasons people stay away from DataSets. Which is a shame since they provide a lot of functionality. It turns out we can fix this problem with one line of code. Here is the new code sample whereby we exclude the schema:
[WebMethod]
public ContactDataSet GetContactsByLastname(string lastname)
{
DataLayer.ContactDataSetTableAdapters.ContactTableAdapter ta = new DataLayer.ContactDataSetTableAdapters.ContactTableAdapter();
ContactDataSet ds = new ContactDataSet();
ds.Merge(ta.GetByLastName(lastname));
ds.SchemaSerializationMode = SchemaSerializationMode.ExcludeSchema;
return ds;
}
If we run this example which excludes the XSD, we immediately see a smaller footprint. We go down from 5.23KB to 1.54KB:
And here is the output from the web service. Much much smaller than previous, and it contains the data we primarily care about althought it does include a few straglers which I would like to see removed entirely from future versions. Maybe the .Net team can add a new flag to the enumeration which is SechamSerializationMode.JustGiveMeMyData. 🙂
<?xml version=“1.0“ encoding=“utf-8“?>
<ContactDataSet msdata:SchemaSerializationMode=“ExcludeSchema“ xmlns:msdata=“urn:schemas-microsoft-com:xml-msdata“ xmlns=“http://keithelder.net/“>
<xs:schema id=“ContactDataSet“ targetNamespace=“http://tempuri.org/ContactDataSet.xsd“ xmlns:mstns=“http://tempuri.org/ContactDataSet.xsd“ xmlns=“http://tempuri.org/ContactDataSet.xsd“ xmlns:xs=“http://www.w3.org/2001/XMLSchema“ xmlns:msdata=“urn:schemas-microsoft-com:xml-msdata“ attributeFormDefault=“qualified“ elementFormDefault=“qualified“>
<xs:element name=“ContactDataSet“ msdata:IsDataSet=“true“ msdata:UseCurrentLocale=“true“>
<xs:complexType>
<xs:choice minOccurs=“0“ maxOccurs=“unbounded“ />
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata=“urn:schemas-microsoft-com:xml-msdata“ xmlns:diffgr=“urn:schemas-microsoft-com:xml-diffgram-v1“>
<ContactDataSet xmlns=“http://tempuri.org/ContactDataSet.xsd“>
<Contact diffgr:id=“Contact1“ msdata:rowOrder=“0“>
<ContactID>19978</ContactID>
<NameStyle>false</NameStyle>
<FirstName>Keith</FirstName>
<LastName>Elder</LastName>
<EmailAddress>not@telling.com</EmailAddress>
<EmailPromotion>1</EmailPromotion>
<PasswordHash>hash</PasswordHash>
<PasswordSalt>salt</PasswordSalt>
<rowguid>cd9ea7c0-d192-4a9f-9999-e9a0c6b117a9</rowguid>
<ModifiedDate>2007-01-30T11:16:48.703-06:00</ModifiedDate>
</Contact>
</ContactDataSet>
</diffgr:diffgram>
</ContactDataSet>
Note, if you are using plain datasets, you have to include the schema, always.
The last tip while not exclusive to DataSets is worthy of noting nontheless. That is to turn on Gzip compression in IIS. You will notice a drastic performance increase of data moving over the wire. XML compresses really well with Gzip and I’ve seen 20K or 26K messages get turned in 2-4K easily. For smaller messages you may don’t want to Gzip since it will actually add to the message footprint. The good news is when you create your proxy class to call the web service, you can choose if you want to support it or not. Here’s an example:
MyService proxy = new MyService();
proxy.EnableDecompression = true;
This is supported in .Net 2.0. The above lines will set the HTTP header when the service is called to tell IIS that Gzip compression is supported and IIS will then zip the contents and send them back down. If you have a very small message then set this to false, otherwise you will add overhead of the compression.