sfeldman.NET

.NET, code, personal thoughts

September 2008 - Posts

This post is not sponsored by the manufacturer. Neither do I get dividends from the sales. This is pure lips service to a great product line I've used for years.

We all have cell phones. Well, if you don't (I wonder were you managed to hide all these years), no worries, soon you will. A joke was once told that rather than giving people social identification number, they better be given a cell phone number - that way it's unique and you always keep in touch. As they say, in every joke there's a little portion of joke.

My first cell phone was Nokia 2110i. 2110i A bit bulky, TDMA sound quality, but very user friendly, reliable and simple. I loved that phone - made me feel cool in high school and was helpful when I was missing the last bus.

5120I learned the wonderful meaning of the word "contract" and once could get out of that, got Nokia 5120. That was c-o-o-l. Brand new technology, smaller size, more functionality, improved every single aspect of phone with one important thing - consistency. Nokia managed to keep the learning curve low by leaving the familiar user experience, yet overloading with new and improved functionalities and features (SMS, Wake alarm, better profiles, etc).

Nokia 9110 a.k.a. Communicator was a wet dream of those days, but I never got a chance to own one. Yet playing with it was great - guess what, same familiarity despite the WAP browsing, sophisticated records management and fax capabilities.9110i

nokia-3510 Nokia - Connecting People. With 3510 I felt it was more than a slogan. It was a reality. I loved every feature. Not to mention the colour it brought into the life. Playing more than a snake on your cell - yahoo. Calendar that looked both decent and be useful - again, with same familiar style and ease of use.

While working at Mushroom Interactive, I had a real chance to see what differentiates a good cell phone from a crappy popular toy. Nokia 6600, N-Gage, 3600 went through our office along with other "competitors". What a joke. I will never forget the one we struggled with just to render properly a drop down list (Mobile ASP.NET) - Panasonic. Felt like a merchandise sold a kilo for a buck. nokia-3600

nokia_6600 Nokia_N-Gage

Then the regression days began - we moved to North America and I discovered that being the best is not enough, you also have to know how to do the domestic politics and promote sales. The best I could get through a provider was 3220. 3220 I'd rather have an intermediate Noka than an advanced Samsung. Man I was right. My wife got Samsung :)

These days seems like changes are coming. Nokia N95 (8GB model) made it's debut here, and despite all the sexiness and coolness of iPhone and it's imitators, proves that if you want functionality with UX that just make sense you will find the truth. Now my wife is on N75 and I am (finally) moving on N95.

What's the point in telling all this besides going over the history of some Finish company and it's line of products? They made it right. Not from the beginning, but gradually and consistently. They wanted to be the number one and they became. They put quality on top and they served it. I think this is a great sample and a lesson how we can build software - value user experience and  business value. Listen to what customer desires for, and at the same time be bold enough to innovate. Don't imitate your competitors, let them copy you, be ahead. Don't settle on achieved, wish for more.

PS: if you are interested in time Nokia phones timeline - this will give you a clue :)

Posted by Sean Feldman | with no comments
Filed under:

This is definitely interesting turn of things. Rather than come with it's own exact copy of an existing product, MS will provide an OSS product as a part of a bundle. I wonder if there are more interesting and welcomed surprises coming from this direction.

We have used jQuery for a couple of recent project to save ourselves headaches on the client side, and the library is quiet impressive. Definitely good news.

Posted by Sean Feldman | 1 comment(s)
Filed under:

VMWare has released the 6.5 version with some nice updates (better USB support, Bluetooth support, DirectX support, and last but not the least - Unity feature. What it allows is to run the application from virtual machine in the host as those would be applications running on the host itself - sweet. So now if you need to work on several programs from several virtual machines, you can execute all of them with Unity (in Unity mode) and switching programs/windows would be just a matter of tabbing between those (ALT-Tab) and not a bunch of keystrokes and guest OS get focus / loose focus. Really love this feature.

Posted by Sean Feldman | with no comments
Filed under:

This book is gold. Dig it!  book cover

The timing is amazing. Right after I posted the Team Work entry, I received the book and couldn't stop reading it. Should read it to the end, but had to comment and let others know how good it is. Amazon rating was quite successful this time (12 five stars, 1 one star).

The book is not packed with code and patterns, but with other type of wisdom that is required no less than good programming skills IMO. I could definitely associate written with myself and mistakes I have done in the past and reflect the ways I was dealing with those and how authors of the books have done that. Learning from others mistakes is valuable, learning how to prevent future mistakes be applying techniques and analyzing situations - real gem.

To add to that, the references that authors are giving are excellent as well, (books/materials) I definitely find useful for myself.

Note: make sure you are going to the .com site - this one has the Search Inside feature on the book. I went to the local site (.ca) and it was missing.

Posted by Sean Feldman | with no comments

"I am a team player" - another buzz expression of this days that anyone will bring up if are asked. "Why are you team player?" this is the question to ask and answer.

Personally I find the saying "one had is good, two is better" quite true. It's not just in pairing, it's in everything. When a few people working together (and not necessarily developers only, those can be different skills individuals), they bring up to the table a variety of skills and knowledge. The amount of useful thoughts and information exchanged over a short period of time being is enormous. As a part of the team, even the smallest contribution produces higher chances of success, and as a result of that builds up the confidence and productivity. So being a part of the team is not just being a monkey, but an equal citizen with all the right and responsibilities.

Responsibilities are important. Team player should be responsible to contribute the most to the group effort towards success, and at the same time not to alienate team mates against itself by making them secondary players. Tasks are solely responsibilities of those that have committed to tackle them. Suggesting help is important as much as offering it when being asked. Yet forcing help, or worse, providing the slack in form of completing others tasks constantly is creating a huge flaw IMO. As a responsible team player you have to let others know and understand that help is always there, but it doesn't mean that a person can just write the tasks off to someone else. That way team is no longer a properly functional team.

Every team player has the right to ask for help and not be afraid of that. If you never ask, you never learn, right? Historically we were lead into thinking that if you are asking for help, then you just can't pull it off (common, as a software developers our ego is riding kilometres ahead of us). Wrong thinking. Asking for help is vital when it's required. Pride is not going to solve the problem, but waste time and value that could be provided if only the problem/task would have being solved. Yet one sign of warning with the right to ask for help - not to abuse it. It is easy to go down the road of just shifting it on someone else  plate. True team player doesn't do it.

All this being said, I am not trying to define what team player is. This is more a reflective thinking, personal experience and how I see the team work working successfully.

Posted by Sean Feldman | 3 comment(s)
Filed under: ,

Coming from the ASP.NET development, I am quit used to the fact that a page has a tree of controls and by traversing the tree you can navigate to the elements.

With WPF is it a bit more sophisticated. WPF application has both visual and logical tree or several of those. Josh Smith has wrote a very useful post to start understanding about the subject. Also there is a VS.NET debugger visualizer Woodstock to assist in understanding WPF trees.

The need to have to separate trees comes out of the fact that WPF has several different base classes for elements: ContentElement, Visual and Visual3D.

Visual is a base class for (the list is quit long, so it's not complete)

image

Where ContentElement is a base class for:

image

What is important to mention is that ContentElement derived instances are not a part of the visual tree, but the logical tree. In order to be rendered at all, ContentElement has to be hosted by a Visual control (which makes sense).

An example where it's becoming critical is when trying to traverse the tree from a given element, the order matters. First the logical path attempt and then the visual.

Two .NET framework classes that assist with the task are LogicalTreeHelper and VisualTreeHelper.

Posted by Sean Feldman | 1 comment(s)
Filed under:

This is old news, but Google apparently has release a browser to speed things up (according to Google most of the current browsers are not performing well with CSS, JavaScript, and whole rendering). From a scratch approach worked not bad at all. Though there are several things that are working against this new browser:

  1. Keyboard shortcuts - right now you have to use a mouse to close a tab, or open a new one, or access downloaded files and much more.
  2. Absence of add-ins - one of the strong promoting features for FireFox was a massive support for custom add-ins. Having at least a few and showing that it's the direction would not heart at all. On the other hand, maybe it's not necessarily the direction Google wants to go (and not follow).

Overall - quick, clean, will evaluate more.

Posted by Sean Feldman | 3 comment(s)
Filed under:

WPF

Recently I started to work on a new project in our company that is using WPF technology. As a web developer with almost no experience with desktop applications I find it interesting and challenging at the same time (statefull environment,  no need in intermediate DTO objects, rich UI support, XAML abilities that are beyond regular markup capabilities, etc). Yet there are many questions that have an answer, but feel very weird. A few of those for example

  1. I have a domain object Client. When binding its' properties, I have to implement INotifyPropertyChanged and "pollute" the code with Notifications for UI. When a property is calculated (getter only), another property has to do the notification, which may end up in cascading notification. As a result of this, the responsibility of a Client now also includes UI notification responsibilities. Feels wrong.
  2. XAML - expressing if not everything, but 99% in XAML is cool, but this brings the question of concerns as well. Should bindings be determined in code and not markup? It's easier and faster to refactor code, rather than markup.
  3. VS.NET support for XAML - well, if not R#, I honestly would not manage to do a lot. SP1 does help, but R# is still pulling off a lot more. Seems like IDE is not ready for the XAML yet. Blend 2.5 is an option, but just the designer, which makes code development a bit challenged.
  4. Resources - there are lots of them, and at the same time not many that are nicely arranged/grouped/catalogued. I loved Prism  for WPF - structured, unified, dealing with real-life applications issues. Also connects between WPF and other things no project can exist without.
  5. Updated: Controls support - No DatePicker or Calendar control. There's a lot of attempts to provide a substitute, but IMO MS should care for that as a part of the bandle. TabControl - a bug with validation and switching tabs (validation is not happening). For a control like tabs, this is a bit sloppy.

For myself, I think I need to dig dipper to understand the core concepts and principles of WPF/XAML. The implementation details will be less significant if I grasp the concepts first (as always). You are welcome to share your opinions or advices in terms of where to dig first.

Posted by Sean Feldman | 5 comment(s)
Filed under:

Ok, so I was really upset and spilled a bit more than probably should have to. ScottGu has picked my desperate yell from the blog and suggested a help (2nd time I believe - 1st one occurred when .NET 2.0 SP1 has broken our production web sites, wow, he's good). Apparently there was an issue with SP1 Beta and R# 4.0. I already went through refresh on installs (including removal of addins and components). Plan vanilla .NET FW with Service Packs with no addins installed works fine (well, not crushing, working without R# is impossible).

Since JetBrains just released version 4.1 of R#, it was natural to install it with the refreshed installation I had and see if it's all working or now. It worked, wow, interesting...

Taking a moment and stepping back from this v.XX sp.YY madness I would like to express a huge thank you to Scott -- he didn't have to read the blog, neither I was asking for help, yet he did get involved, and involved a team as well.

My vote goes to replicate this man at MS and assign to more products! Thanks Scott.

Posted by Sean Feldman | 3 comment(s)
Filed under: , ,

SP1

As you probably know, the all new and shiny SP1 for both .NET framework and VS.NET 2008 are out. So I waited a bit, saw that other developers are accepting it and installed it. Great, worked smooth. Till I dared to restart. After that VS.NET 2008 designer "empowered by new abilities deployed with SP1" has showed own of it's hidden jams - complete crash of the IDE with no traces to what has just happened.

Google it. And so I did, reading wondering MS responses to others complaining about the same issue, such as "are you having the admin privileges"? Or better "make sure you uninstall A prior to installing C, but make sure D is not there, or you run the E utility to let you know that F is missing".

And I have a question - WTF?! Can't you guys deploy a normal SP and that's it? If there's a bunch of hotfixes, CTPs and betas that a developer is not using, why to let him go through the pain? And as well, why not to puck utilities to remove thins along or at least provide the link and not just on the forums?

I learned my lesson -- develop in a virtual box. At least that way the pain is not lasting for long (a few hours to recover, rather than a whole day to get to the same square you started from initially).

Posted by Sean Feldman | 6 comment(s)
Filed under: , ,
More Posts