Wednesday, November 26, 2008

Merchandising

All I really have to say about merchandising in general is that I don't know anything.  What I do know is that Milyli Inc now has a product line consisting of our logo on great t-shirts.  

Are you tired of guessing what other people want?

Not exactly sure what Jesus would do?






Tuesday, November 18, 2008

Freeware During a Recession

Fine, we may not actually be in a recession, yet, but I don't think anyone will begrudge me should I say that the economy isn't as strong as it used to be. Because of that, many companies may start taking a harder look at using freeware to solve their business problems. I've already gone on and on about how using freeware doesn't necessarily save a company money in the long run, so I'll try not to revisit that topic... much. But how is the economy going to affect the open source movement and what will be the ongoing fallout?

First off, let me say that personally, I don't think the recession should play into the decision of using free software. You may get the code for free, but you still need people to set it up, integrate it, support it and train your employees to use it. When all is said and done, I have yet to see any conclusive study that shows using free software saves a company money in the long run just because it is free. (Though I would love to see such a study should one exist.) That should be all for the rehashing. 

What with the economy being what it is though, maybe only the accounts payable column of the budget is all that will matter and the cost of the software will be what swings the decisions. I for one would hate to run or work for a company where the right tools for the job "cost too much" causing employees aggravation and lower productivity. However, some productivity gain is better than no productivity gain and if the money really isn't there, maybe freeware will end up being the path companies take.

Let's take a look at the development side of open source. Many of the best open source initiatives are sponsored by large companies. Will those companies be able to continue paying developers to work full or even part time on software that brings in no direct revenue? If developers get laid off, will they be able to support themselves on jobs that pay them less money, if they can find them? Will they need to work longer hours making money instead of spending time on freeware initiatives?

The truth is that the open source movement was started during times of abundance. I wish I was one of the lucky software programmers that, thanks to stock options that lined my savings and retirement accounts, I could take a couple years off with little to no pay to work for the benefit of people that want free software. Yes, I am jealous and maybe a little bitter. But jealousy doesn't pay the bills and neither do positive intentions. They also don't affect my ability to write good code. I just need to get paid for it.

If there are more developers out there in my situation than there are those that that are financially independent and can code for only the warm, fuzzy feeling of living to a higher ideal, the open source movement will stall. Even in the worst case scenario I'm not saying that it will die out. But with less time devoted to them, those projects will not be able to maintain all the ground that they have made up in terms of quality and features.

This brings us back to the companies that bought into free software. 'Bought free software?' Moving on... The software that they got for free will not come in as cheap if it takes longer to get bug fixes or those bug fixes need to be made by new in house developers. If the feature set of that software falls behind the software that competitors are using, not having the advancements that the paid software later incorporates will hurt their competitiveness. Recovering from such situations will be even more costly as once again, companies will need to install and learn new tools if they need to switch back.

To me, it looks like the downturn in the economy is not going to help the open source movement in the long run. In general, if companies start using free software solely in response to a recession in order to cut costs, I think they will only be postponing larger costs until later. Maybe that's what it will take to survive for now, but it will probably end up costing more.

Thursday, November 13, 2008

Content Control vs Content Presenter

I ran into a problem with how some of my controls were displayed in Silverlight recently. I had created my own extender panel back in Silverlight 2 Beta 2. It turns out it was much the same as the one that has now been released in the Silverlight Control Toolkit. But when Silverlight 2 was finally released recently, my control went from looking like this...



... to looking like this ...


Basically, my content area shrank to nothing. Yes, something changed between the beta and the release, but complaining about it wasn't going to solve my problem so I started trying to figure out how to bring my code back in line.

Fortunately, the control toolkit was also released at the same time. I took a look at the Expander control and realized that I wasn't displaying my content the best way. There seem to be two ways to show content in a content control: use another content control or use a content presenter. The latter is a much better way and the changes are minimal.

To fix the problem I changed my XAML in generic.xaml from this...

<ContentControl
Grid.Row="1"
Content="{TemplateBinding Content}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" />

... to this...

<ContentPresenter
Grid.Row="1"
Content="{TemplateBinding Content}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"/>

And all was once again well. There are many other values I could bind to here including the alignment values, but that was not the focus of this post so I simplified it. The point is that when creating your own content control, you want to use ContentPresenters to display the content. Chances are very good using the ContentPresenter is the recommended approach. But that doesn't stop many people from giving examples using the ContentControl, and I just happened to find one of those examples first.
[Edit]
This is becoming a popular post so I decided to revisit it. Memory told me that this wasn't well written. After a re-read wowever, I realize the only thing that I can really do is explain the issue a different way.
When creating a custom control that you want other developers to be able to determine the contents of, it is easiest to extend ContentControl. ContentPresenter is what is used to show the definition of the Content DependencyProperty within the content control. It is possible to achieve the same effect without extending ContentControl, but then you need to explicitly define your Content DependencyProperty.
Also, if you have multiple content areas within your control (e.g., a title area and data area), you can either use a ContentControl and define the second DependencyProperty or you can extend Control and define both Content properties yourself (e.g., TitleContent and DataContent).
I hope this edit makes things more clear.
[/Edit]

Friday, November 7, 2008

Keeping the Company Busy

A new experience that I have had while building this little company now known as Milyli is that there is always something to be done. In the five months or so since my partners and I started this venture, there has never been a time where I did not have a list of things to get done. Dealing with a long list of tasks is not hard. All you need to do is break tasks down, prioritize them and start knocking them down.

If a task seems like it is too large to prioritize because it will take too long, you should probably break it down first. These tasks are the types of ongoing chores that never seem to end: design and write the code for the summer release, be a part of your user community to build customer awareness and credibility. If these tasks have deadlines far out in the future, they can be broken down into more discrete units and prioritized with everything else. Design the whizbang feature on Friday, code the bell feature by Tuesday, write that new blog post between 9 and 10 tomorrow. If you are unable to prioritize large tasks, they probably just haven't been broken down and planned out enough.

Prioritizing is usually fairly easy. There are the things that need to be done at a certain time: go to the bank, go to the client meeting, deliver and deploy the project. These are items you put on your calendar, set a reminder and go do them at the correct time. Sure there will be times when you need to be two places at once, but that's what great partners and employees are for. If you don't trust them to do their jobs, you probably shouldn't have gone into business with them or hired them.

You also have the sort of tasks you need to do in order to successfully complete those time sensitive tasks: get your business documentation together for your banker, put together an agenda for you client meeting and answer any outstanding questions from the last meeting, package up all the components you need to deploy and make sure your scripts are in working order. It's important to browse your calendar for a few weeks out to make sure you allocate time to get these things done.

You don't need to tell me that this is an over simplification. There are all sorts of conflicts and hard decisions that need to be made. But I find the trick has been to get all the information you can or need and then make a decision. After that, spend the time getting the work done instead of prolonging the deliberations. Get informed, make a decision, and act. Hm, maybe it really is simple.

One of the nice things about keeping busy is that there is a real sense of accomplishment. Some tasks get marked as done in a physical system and some only get scratched off a mental list, but all of them are valuable. Another benefit is that, because work is getting done, less of it piles up. Sure there is always something that needs to get done; your to-do list will never be empty. But if you manage your time well, you will finish everything by the time you need to and also have time for all the other things you like to do besides work.

And that is where the real change for me is. I have both more sense of accomplishment and a better work life balance than I did at my last job. I think the problem there was that the developers were either not kept busy or they were overloaded. We could either have been implementing more features or we could have been tackling better, more intricate features and we would have been kept busy. Peaks and troughs of the lack in quality or quantity of designs and the overloading could have been mostly evened out by making sure all the work that came before development was correctly prioritized and appropriate deadlines were enforced.

I guess that's a task I will need to tackle. Figure out how to keep employees at my company busy without overloading them. I don't exactly know how to do that just yet. I figure that when it becomes an issue and when others are entrusted to do the work that I am doing now, I will make the time to break that task down, set up some defined goals and keep myself busy making sure others are as fulfilled at the company as I am.

Thursday, November 6, 2008

Silverlight 2 on Vista Problem

I'm not writing this blog post to recreate the solution to the problem I had.  If that's what you're looking for, here's the link.  I just wrote this to document another situation where this problem has arisen and help promote the solution to make it easier to find.

I ran into this snag when updating my Vista box to the latest version of the Silverlight tools.  The Visual Studio and Silverlight updaters worked fine for the most part.  There were no problems running those tools or opening Visual Studio after running them.

What I did run into was a problem that a few developers have seen in other circumstances.  When trying to open a WCF Services project that was part of my solution, Visual Studio showed me the error:
Unable to read the project file "xxx.xxx".  The Web Application Project xxx is configured to use IIS.  To access local IIS Web sites, you must install the following Windows components:
Internet Information Services
IIS 6 Metabase and IIS 6 Configuration Compatibility
ASP.NET
In addition, you must run Visual Studio in the context of an administrator account.
The difference between my experience and others was that I already had these features installed and I was running in administrator mode.  When I tried uninstalling or adding features, I always received an error from the windows feature installer.
An error has occurred.  Not all of the features were successfully changed.  
After a good deal of searching I found a solution that fixed everything for me.  It was a bit difficult to find because most of the answers only dealt with the first error.  Rupak Ganguly, thanks for the full scoop.