Tattoo: Back to front - Part 6


It has been a while since I last worked on my tattoo to come, there has been to main reasons for this.

  • I simply have not had the time.
  • I did feel that I had reached a point where I didn’t know where or how to continue, but still had small things i didn’t like completely.

During my vacation over Christmas however i ended up drawing a bit again.

This time the tail got another re-design so to speak, but i haven’t drawn the entire tattoo up yet, so this is the tail by it self.

031-tail

I actually really like the result, there is very small details that has to be fixed, but I actually thing that the tail could serve as a Tattoo by it self, of course then it wouldn't be a “tail” but just a pattern.

Here they are photo shopped together, and it is clear that it leaves a bit of work around the edges of the inner circle.

031-6

Besides that, the front and upper part needs some more work as well, yet the new tail makes for a more complete look, and it also fits in better with the rest, I still like some aspects from the old tail, but then i also like certain aspects from all the parts I have removed, there is always small things that pleases me in what i draw, regardless, sometimes they just work to bring ideas, other times they stand out and would be better served alone.

But this puts some progress in it again, hopefully in 6 months it will begin to take form on my back rather just keep being on paper.

author: Jens Melgaard | posted @ Tuesday, January 05, 2010 10:00 PM | Feedback (0)

Visual Studio 2008 add-in: Profile Manager v0.3 preview.


So the next version of the Profile Manager add-in is taking form, and I will proberly soon release it in a beta, like 4-8 weeks from now, depending on how much work i have at actual work.

Alot of stuff has been going on, most of all the entire architecture has changed, or rather it now has an actualy architecture with integration, logic, model and presentation tiers ect.

Im making this post to give a heads up on the new user interface additions, consider it a rough lineout though, I’m not intirely done with it all yet.

Startup Dialog

When Visual Studio starts up, a dialog enables one to change the current profile before Visual Studio loads.

image

Depending on use this can be usefull so that windows arent misplaced when going from a dual-screen to a single-screen environment, in my own case this is when I log on my workstation at work from home through remote desktop, since dual-sceen isn’t supported for us there.

Management Interface

The management interface has been extended greatly to support for all the changes to the Profile concept, as such both Layouts (what profiles was before) and contexts are managable from the same interface as profiles are, also a page for general setings is added.

The basic look and feel is the same for all pages, below is the Context page shown in both an edit and view state.

imageimage

The same look and feel is applied to the Profiles page, but editing profiles is by far more complex since they bind contexts, layouts ect. together.

 image image 

Ease of use

This all implies advanced usage, but this might not be what fits to all needs, maybe you just want a simple and easy way to switch the layout of windows, the same way as v0.2 worked.

But because of the new functions, things aint so easy anymore, however to simplify the lifecycle of profiles it will be posible to link newly saved layouts directly to a profile that will be given the same name. This happens if the “Link to new Profile” is checked off.

image  

Obviously this can’t be selected of one just wishes to overwrite an old layout. So the checkbox is disabled of an already existing layout is choosen.

image

Thats it for now, a short heads up, and I hope to be done with it soon, and maybe also have a prober installer this time.

author: Jens Melgaard | posted @ Sunday, January 03, 2010 6:37 PM | Feedback (0)

Jira 4.0, GreenHopper, SVN and Visual Studio…


Ive been a bit inactive here on my blog for a while, it is not because there has been nothing to talk about, in fact there has been plenty, and maybe I’ll be able to catch up on that, but this post is about some of my core development environment at home.

ClearCase / ClearQuest

As someone might also have noticed, I have been bitching a bit about ClearQuest / ClearCase which we have switched to at work, and only god knows why (and i don’t belive in him so that might pose a problem?)… So In light of those posts I would post something positive on what they try to accomplish.

It’s not that IBM fails completely, some of the very core ideas is good engough, well those ideas might actually not even originate form IBM, so maybe they do fail, but i can’t say for shure since i don’t know the history of CC/CQ enough, what I do know that the core ideas are just drowning in bad implementation, weather it be the interface or deeper.

And then there is the core things that is missing, like Atomic Commits which is a very interesting area to talk about on ClearCase apparently, I have seen comparison matrix’s that claims that ClearCase does have it, but thats a lie, however the latest release should actually have it though, there is just one problem, it only works under a specific project model which is a real kicker to me, do I dare to ask why it only works under a specific model?… If that does not scream bad design, I don’t know what does.

But enough about CC/CQ.

Jira 4.0

http://www.atlassian.com/software/jira/

JIRA is an Issue tracking system implemented in Java with a web based platform.

JIRA seems to be very well implemented if you ask me, it is very lightweight in the default deployment containing only the very basics, however it should cover the simple needs for very small and new projects.

From that point the system can grow with the project and the added needs a bigger project gets, this could be:

  • Linking issues together.
  • Sub-Items
  • Custom Fields
  • Time Tracking
  • ect.

Those are more basic extentions, and all directly bundled with JIRA, but JIRA also offers other ways to fit it into the projects needs, personally I have no experience in extending Jira my self, but there is already a load of plugins out there, from “SCC Connecters”, “Agile Management” and so on, some are bundled with the installation, others can be purchached or downloaded for free, actually much of the code functionality in JIRA is implemented as plugins. Here is some i use:

  • GreenHopper – Agile project management, I will have a paragraph on this by it self.
  • RPC JIRA – For accessing jira through “code” as such.
  • JIRA Subversion – Plugin that can link subersion commits to Jira issues, I will also go deeper into this.

And there is many more out there.

JIRA ofc also alow you to ajust what types of issues you have on your project, what resollution types, states, priorities and so on, bassicly everything can be ajusted more or less.

In all that, many of the core functions are the same of Clear Quest, so what is better?, for one major thing. the whole way it is presented to the user. The interfaces is much more user friendly and intuitive where CQ is actually counter-intuitive on many points.

There is things missing, or things that could be better, but iw you where to make a scale from -100% to 100% where -100% means total counter productive and counter intuitive, and 100% being the opposite (the perfect interface). I would place CQ in the range from -50% to -75%, yes in the counter productive and counter intuitive area, but JIRA i would place around the 80%-90% for the general user interface (what all the developers, project managers ect would use)… and then around 60%-70% for the administration interface because it is slightly less intuitive, but that is overall ok.

image

Some things I do miss is:

  • Creating new “linked” issues directly from an issue, much like the way you can create Sub-Items. This would serve well when JIRA is used to also store things as stories, features ect. since it would ease the process of breaking features into stories, you can however ofc. just have stories as Sub-Items, but after trying that I didn’t really like it.
  • Choose how Sub-Items time tracking in handled towards there parent, as it is in JIRA it is added together, but when one might use the sub items to break down the issue, then the hours on the parent should be a ROM which remains that way, while the more accuarate estimate is only the sum of the Sub-Items.
  • More levels of sub-tasking, not that I need it, however the option seems to be missing.

GreenHopper

http://www.atlassian.com/software/greenhopper/

GreenHopper is an Agile Project management tool for JIRA, it basicly tries to imcorporate the SCRUM process into JIRA and offers planning bords, task boards, chart boards and so on, and it does it’s job well most of the way.

Im not shure just how usefull the task board would be to the general SCRUM team, it proberly has more use to a team where members are located at different places which is proberly mostly seen in the OpenSource world, but I won’t draw any conclusion on it, logging work and closing issues is actually something I do through the task board, so if nothing else it has that conveniecense level, here it would however be smart if moving an item would be able to auto trigger the “log work” dialog.

But all in all, it’s rather good, or at least much better than or equal to any other tools ive seen for it.

Here is a glimt of the planning board, simply drag items to the scehduled versions:

image

Mingle from ThoughtWorks seems to be a worthy competitor with card to code links, time tracking ect. But it seems to be very similar to a Jira, GreenHopper and FishEye implementation, where it just has some advantages and other disadvantages.

Mingle can be found at:

http://www.thoughtworks-studios.com/mingle-agile-project-management

The JIRA way seems to have a price advantage as well as it seems to be more extensible. Mingle sounds easyer to install, and if i know ThougtWorks right it properbly more scaleable as well, meaning less hardware for large deployments.

JIRA Subversion

https://plugins.atlassian.com/plugin/details/291

This is a plugin used to link Subversion commits to JIRA issues, the commits and comments will apear on a tab at the bottom of each issue, it is very easy to work with and will allow for linking several issues to a single commit.

Simply add the “Issue-Id” in the comment and the plugin will pick it up after some time. Personally I put it in the beginning and enshure that it is easy noticable, e.g. “[JVS-12] Commit comment…” and the result will be:

image

Compared to the CC/CQ way, this is way less invasive for the devoloper, yet the linking can still be enforced, but enforcing it requires some work, like commit hooks ect. So where in CC/CQ it is more a core thing, here it becomes a gimick unless you do something.

But looking at how it works, enforcing would not even make it close to as intrusive as the whole CC/CQ procedure which is just purely painfull.

What is lost i gues, is a linking from the various branches in a project to the issue, or more specificly what branches an issue has been fixed on and merged to, and I’m not shure that is possible, and… I can see the use for it, but mostly for projects that has been released in various supported versions, but the intrusinveness of CC/CQ is to high a price to pay for it, and is ultimately not really the facilitator for that specific feature, how hard or easy it would be to add to the JIRA – SVN combination i don’t know either.

It all put together

All these things put together seems to work really well, it is a bit of a hassle to install it all, especially all the JIRA related things, but this is mostly because I installed JIRA, Confluence, FishEye as well as making an attempt on Crowd, but I have not gotten it all to work just yet.

The connection this post is about though all works really great togther.

To summerize the tools:

That will be it for this post, maybe more to come.

author: Jens Melgaard | posted @ Tuesday, December 29, 2009 1:09 AM | Feedback (0)

Atlassian – Here Be Dragons


I thought this required a little attention, I thought it was a lifting spin on the task of installing and integrating, if not all, then most the Atlassian products.

http://confluence.atlassian.com/display/ATLAS/Here+Be+Dragons

They do seem to have quite an interesting product suite, but I properly won’t replace my CruiseControl.NET with there Continues Integration Server (Bamboo).

However, I would be very interesting in installing Jira, Confluence (which I have already mentioned before, and we have installed at work), FishEye and maybe Crucible although the whole “Code Review” thing is not something we do much at work, since we lift the quality through frequent inspections and a high level of communications, also trying to implement a rotating pair programming method.

Oh and if you manage to complete the dragon quest (installing ALL! products) you apparently get a free T-Shirt…

Go slay dragons >.<

author: Jens Melgaard | posted @ Monday, November 30, 2009 9:09 AM | Feedback (0)

More suffering in the name of ClearCase / ClearQuest – Atlassian Confluence lifts my day


While I still live in the hell of ClearCase and ClearQuest.

If there in contrast to my beliefs was a God and a Hell as the bible mention it, I am very sure that all developers who has ever worked on ClearCase / ClearQuest (without trying to sabotage it) is headed there, while all developers forced to work with it gets a free pass to heaven no matter what other sins they might have performed.

The Visual Studio integration of ClearCase / ClearQuest just plain simply sucks. Or that might imply that it actually works a little?, my recommendation for that is to NEVER install it!… A list if strikes towards it:

  • It makes Visual Studio unstable as hell, you have to live with very frequent crashes.
  • Adding files fails 50% of the time, they seems like they are added looking at the icons ect. but in fact they are not and you have to re-add them in the CC Explorer (Which only sucks a little less)
  • ReSharper becomes… uhmm… I am not shure what to call ReSharper when it can’t refactor anymore.
    And now you might think, isn’t this a bug in ReSharper?, well ReSharper works fine with all other Source Control Systems I know of, so for me it is easy to cast blame at IBM.
  • It does not integrate with the SCC model, one of the reasons given by IBM for this seems to be pure lack of knowledge on there side.
    Reason: “We can’t do this under the SCC model”
    Counter: “Why the hell can SVN, TFS and others do it under the SCC model then"?”
  • Requires explicit check-out, yes the automatic checkout it actually does provide, is sure to jump “randomly” around in the file, forgetting the change you made that resulted in the checkout or inserting that change a “random” place. (It might not be random, but it does sure seem so)

Oh and then there is ALL those features it just simply lack.

Don’t even get me started on those.

On the bright side

We have started to use Atlassian Confluence an “Enterprise Wiki” as they call it, and i must say, i DO NOT sway to java solutions often, but this wiki which is directly targeted at team/company collaboration, is the best ting I have seen to lift exactly that.

But be warned, i tried getting it to run on Apache Tomcat 6.0 first as a WAR file (or whatever, I’m not very into the Java application servers), but I never got that to work, my very first experience with a Java application server made me think “What's all the fuzz about Java being good at this stuff, this F**** shit doesn't work in any prober way”.

In the end I used the standalone deployment pre-packed with a Apache Tomcat 5.??, after some hassle I even got it up and running on a SQL Server 2005 Express.

The installation experience can be a REAL pain, and you may be close to giving up many times along the way, but I can only say DON’T!!! give up, it may not seem like it is worth it, but if I am to judge that, I would say that it totally is…

An yes, it does have bugs and such, but in contrast to the above mentioned product (ClearCase), the bugs is in the corners where you rarely go, and not in the dead center where you always work.

Even better, it is very affordable for small companies and teams as well, 10$ for a 10 user starter edition, that is just a brilliant idea if you ask me, plus if your a non-profit or Open Source project it is FREE!… (they do require some verification in this case though, and well that's both acceptable and understandable)

Now go INSTALL!… you will thank me. (well only if you need a collaborative tool)

author: Jens Melgaard | posted @ Thursday, November 19, 2009 2:29 PM | Feedback (1)

It is not what it seems!…


clip_image002

IT IS NOT WHAT IT SEEMS!...

I’m using ClearCase to either:

· Rebasing my stream…

· Delivering my stream…

· Updating my view…

· Adding new files…

· Checking changes in…

· …

This was made while I was rebasing, it was done before ClearCase was.

author: Jens Melgaard | posted @ Tuesday, October 27, 2009 12:36 PM | Feedback (0)

My first days with ClearCase and ClearQuest


As a company wide choice, we are moving to ClearCase and ClearQuest one project at at time until we are all on that platform.

Most of the projects is moving from CVS while a few others are using Team Foundation Server. We are one of those going from CVS but i have been on a project using TFS as well as using SVN at home, so I have some experience with at least a few kinds of Version Control Systems.

On the Issue, feature and enhancement part, I have seen a few different systems as well, here under MetaQuest Census, a in house developed tool (even worse than MetaQuest Census), and Bug Net which i use at home.

Expectations

For over a year we have waited for ClearCase and ClearQuest and we have really looked forward to it, CVS really isn't that good, but when you think about when CVS started and that it is properly more of “legacy” reasons that it is still maintained, i think it is ok that CVS is fairly problematic to work with and that it has some fundamental flaws.

After all it was much much better that what we had back then.

So being a project using CVS we things could hardly be worse, well ofc they could duh… we could be using a normal file share for the project, but i can’t imagine that being use for even the most simple projects, hell I use a Version Control system at home just for ONE developer, my self…

So we expected things to get better, way better actually, ClearCase was widely sold today and as an IBM product it had to at least rival SVN and TFS right? ClearQuest was also suppose to be an upgrade, after all MetaQuest Census is hardly worth any effort.

So YES…. things where changing for the better.

Days in hell

So now that we have made the switch, a week in so its fair to say that this is a first hand experience and that things may be much much better over time, but I HAVE to vent.

This is days in hell, or if there's a worse place that's where we are.

Current grudges.

  1. NO REPOSITORY DELTA!
    Not shure thats the right “Term”, but whenever you update, rebase or likewise. ClearCase still goes though EVERY single item, not like SVN/TFS where you only have to look at the change sets between the version you checked out and the most recent, the only reason that it then can beat CVS in performance is ONLY because it’s a database.

  2. NO ATOMIC COMMITS!
    Despite my belief and what I’ve read on the web, ClearCase is NOT atomic commits!… well apparently it is a setting or something, the problem is that with this setting enabled, if you commit large amounts of files, you might get a timeout and that means you can’t commit the whole bunch anyways.

  3. NO CHANGESETS!
    AS WE KNOW THEM From SVN/TFS i have to add, in SVN/TFS a change set is created for every commit. ClearCase has “changesets” but it is not the same thing, instead a changeset in ClearCase is bound to an activity, an activity you can commit on more than ones if you wish i might add. This leaves it to a manual process to make sure that you can trace commits in a similar way.

  4. NO SIMPLICITY!
    ClearCase is power packed with thousands of dialogs, windows, and other stuff just making it harder for you to do what you really wanted! Just this little screenshot of the amount of different tools it includes should give a good idea. 

     image

    Many tools can be invoked directly from another tool ofc. Why are they all even here? I'm sure I won’t EVER use the “Remove View” tool or “History Browser” tool from here, Just give us one prober tool instead of 30+ half decent tools.

    As a good example, to check out a file you have to associate it to an activity (To create one you need a Request, that has a Task where you can then create an activity), and then give a reason to why you checked it out. BUT WHY?

    But in the end you need to have at least 3 tools open i find:
      1. ClearCase Explorer
      2. ClearQuest Client (One of them, i know if 3 so far)
      3. And a ClearCase Project Explorer

  5. NO SIMPLE UPDATE!
    Whenever you take an update from a stream, you won’t just get the latest, no if you have a change to a file, it will update your file against that version, why the hell would i want to do that? then there would be no reason what so ever for me to ever call update.

    Apparently there is a feature added to the new client (which apparently isn't stable either) that makes update work as you would expect it to work, while this is good, it shouldn’t be added as a Feature!!… Just FIX! the current update so it works as we all expect and want it to!…

    The current Update is useless to me, the best effect it will have is to “break” my local view!…
    Evaluate that i have a File “A.cs” which contains a class “A” that uses another class “B” defined in “B.cs”, now i have added something to “A”, and in the mean time Peter adds something to both “A” and “B”, and the change happens to be a new Method on “A” that “B” uses. Now when i update i will get the new “B” but not the new “A”, now my local copy is broken because “B” calls something in “A” that doesn’t exist because i didn’t get the new “A” merged down. GREAT JOB ClearCase!…

    (There is workarounds for this, and we have a project which has a “script” that does the right update, but that you have to create a script for this SHOULD say enough about it)!

It can only get better

Ironically enough they have this background in the ClearCase Explorer under an about pane:

image 
Well i guess that little image can be seen in to ways…

My way of seeing it is that ClearCase is a Vortex that sucks down any Quality and Speed, leaving only the rest for you to work with.

But after all, things can (HOPEFULLY) only get better from here on, and i REALLY hope they does, and that ClearCase/ClearQuest becomes more smooth to use, but i doubt i will EVER be able to recommend it to anyone ever knowing that there's much better Version Control systems out there and that JIRA seems to be a way better alternative which can integrate with many Version Control Systems.

I Haven’t tried it, but I am thinking about trying the 30 day trial, I just wish i could get a bit prolonged trial, like 90 days or even 180 days. I Doubt that I can get a OpenSource license even though I freely share (so far at least) my spare time projects when i feel they have something to offer, after all I am a single person, not a well known OpenSource project.

Disclaimer!

ALL the above is opinions and first hand experiences, problems listed might be circumstantial because of how we use it or because we are new to it, but i didn’t promise anything else.

author: Jens Melgaard | posted @ Thursday, October 15, 2009 2:28 PM | Feedback (2)

Sushi School


Well, not school as such, but we had an event today where we got a few words on how you make sushi.

And of course we got to try it out our self as well.

It is surprisingly easy actually, now we didn’t have to cook the rise and cut the fish, but i still had imagined that making those little pieces of food was difficult, maybe partly because I just didn’t know what was going on.

Well i do now, and it is not something i wouldn’t dare at home.

It is in fact also the very first time I have tasted it, so I was exited to get to do that as well.

Here is a few examples of what we ended up with.

IMG_0024

To the left there is for 2 persons, and the 2 smaller “dishes” to the right is one person each. (How much we made each).

Here is my dish. Because the roles got mixed up a bit, I’m not 100% sure that i was actually the one making all of it on this particular dish, but i know i made most of it at least.

IMG_0025

To judge on the looks, it doesn’t seem to be all that much at all. But it really is, well you might know that if you have already tried it, if you have not you would properly think the same way as I did… (“That is hardly enough for me”)… WELL IT IS!…

And it is even to much as well, and because i didn’t know that, i did not get to taste all of it sadly since i started out with eating a lot if the roles, well my mistake, and I know now, as such i only finished about half of the above.

Anyways, i won’t bore you anymore… But if you haven’t already, i can only encourage you to try it!!!.

author: Jens Melgaard | posted @ Monday, September 07, 2009 8:25 PM | Feedback (0)

Visual Studio Extensions: A Command Pattern binding menu items


 

During my days of working with Visual Studio Packages we have on work come up with a “Command Pattern” for binding menu items defined in the .vsct files to classes so they are easier to work with.

It’s not a fully elaborated Command Pattern where you bind the commands together in a “string” of commands enabling you to go back and regret your actions, instead it just helps to isolate the implementation of each menu item.

First some simple basics.

ICommand

The ICommand interface is implemented for all commands so we are able to generalize all implemented commands.

   1:  public interface ICommand
   2:  {
   3:      void Execute( object sender, EventArgs args );
   4:  }

CommandAttribute

The Command Attribute class is used to define the binding between the implemented command class and an item defined in the .vsct file, the class is used as a C# attribute on all command classes.

   1:  public class CommandAttribute : Attribute
   2:  {
   3:      public int CommandId { get; private set; }
   4:      public Guid CommandSet { get; private set; }
   5:   
   6:      public CommandAttribute( int commandId, string commandSet )
   7:      {
   8:          CommandId = commandId;
   9:          CommandSet = new Guid(commandSet);
  10:      }
  11:  }

CommandController

The CommandController is what actually binds the implementation together with the .vsct file, what it does is, when ever the "RegisterCommand<T>” method is called, it creates a new instance of they type supplied, digs out the “CommandAttribute” from the type and then uses the attribute to bind it to a defined menu item in the usual VSX way.

   1:  public class CommandController
   2:  {
   3:      private readonly IMenuCommandService mcs;
   4:   
   5:      public CommandController(IMenuCommandService mcs)
   6:      {
   7:          this.mcs = mcs;
   8:      }
   9:   
  10:      public void RegisterCommand<T>() where T : ICommand, new()
  11:      {
  12:          ICommand command = Activator.CreateInstance<T>();
  13:   
  14:          Type type = typeof(T);
  15:          object[] commandInfo = type.GetCustomAttributes(typeof(CommandAttribute), false);
  16:          if(commandInfo.Length > 0)
  17:          {
  18:              CommandAttribute attribute = commandInfo[0] as CommandAttribute;
  19:              if (attribute != null)
  20:              {
  21:                  CommandID commandID = new CommandID(attribute.CommandSet, attribute.CommandId);
  22:                  MenuCommand menuCommand = new MenuCommand(command.Execute, commandID);
  23:                  mcs.AddCommand(menuCommand);
  24:                  return;
  25:              }
  26:          }
  27:          throw new ArgumentException("Type "+typeof(T).FullName+"did not have an CommandAttribute attached.");
  28:      }
  29:  }

Usage

Now instead of having all the Guids and Id’s that correspond to an item in the .vsct file in a huge “Constant” file, they are now defined closer to the code they actually executes. The constant file does not hurt if to use in this scenario either, as such you can see the guid for the command set is fetched from that still.

   1:  [Command(0x101, GuidList.GUID_COMMAND_SET)]
   2:  public class MyCommand : ICommand
   3:  {
   4:      public void Execute(object sender, EventArgs e)
   5:      {
   6:          MessageBox.Show("Hello fom MyCommand");
   7:      }
   8:  }

 

Within the Initialize method of the Package class (where you inherit from “ProjectPackage”) the following lines of code is used to registering the actual commands.

   1:  IMenuCommandService mcs = GetService<IMenuCommandService>();
   2:  if ( null != mcs )
   3:  {
   4:      CommandController controller = new CommandController(mcs);
   5:      controller.RegisterCommand<MyCommand>();
   6:      //... more register calls.
   7:  }

 

I choose to keep command controller and usage explicit, but in reality the registration of these bindings could easily have been automated, this could be done using castle for registering them in or another way.

Another thing to note if you start using castle, is that you can suddenly use castle to initialize the command objects as well, allowing them to have dependencies.

In any case, your commands will be likely to depend of the DTS interface for some stuff, there is several ways to get around this without castle, what we did at first was adding an interface to our package implementation exposing 2 methods.

   1:   public interface IPackageService
   2:   {
   3:      T GetToolWindow<T>(int id, bool create) where T : ToolWindowPane;
   4:      T GetService<T>();
   5:  }

And then added that as a Property to the ICommand interface as well as passing it to the CommandController, now the ICommand interface looks as:

   1:  public interface ICommand
   2:  {
   3:      IPackageService PackageService { get; set; }
   4:      void Execute(object sender, EventArgs e);
   5:  }

 

And when we create a new command in the command controller, we instantly after sets the PackageService property.

   1:  ICommand command = Activator.CreateInstance<T>();
   2:  command.PackageService = service;

 

This is not ideal, it would be better to provide it in the constructor of the command, however this gives a sort of hidden requirement to the implementation, using castle or any other kind of IoC/DI would make for a better solution here, but for now I wanted to keep it simple.

Next ill talk some about a few notifications we can get from Visual Studio, one in particular that will allow us to wait with initialization if we so happens to need the DTS interface during that.

author: Jens Melgaard | posted @ Wednesday, August 19, 2009 9:06 AM | Feedback (0)

Dinner for ….


Not 2, just me.

Had this sudden urge for Chili Con Carne the other day, but stores was closed so I had to wait until today.

We get it at work every now and then, or rather we get what I might refer to as “Con Carne”, because there is not really much chili about it.

But after all that is to be expected I suppose, some of us might like that it is HOT!, but others not so much, so to please the most, it is never HOT...

But today, I was the damn cook, and little did i know that it would take nearly 3 hours to make, and that I overshot the amount by about 11 persons, yes I am fairly confident that the portion i made was enough for at least 12 hungry men!… But it was so worth it! Tasted SO damn good, and it was HOT! as it is suppose to be.

And here is the result… or well, one dish of it, the rest is in the fridge.

ChiliConCarne

Now, I am not really sure that wine is the better thing for this dish, and at least not Rosé, but it worked out ok if you ask me.

What more to say than “bon appetite”…. for me that is…

author: Jens Melgaard | posted @ Monday, July 27, 2009 8:44 PM | Feedback (0)

Copyright © 2009 Jens Melgaard. Except where otherwise noted, this work is licensed under the Creative Commons Attribution 3.0 License.
This blog is based on Subtext 2.1