posts - 50, comments - 82, trackbacks - 58

My Links

News



View Marcin Celej's profile on LinkedIn

Archives

Post Categories

Wednesday, October 22, 2008

New MVP on GWB

nagroda I can proudly announce that I received an MVP title this month.
I am MVP in Visual C# category even though my primary expertise is
Software Architecture. There are only 33 MVPs here in Poland so it
is a huge distinction to me.

With the title I received MVP award: you can see what is inside on
pictures on both sides.

Additionally: I am new INETA country leader for Poland.

We'll see what happens next.
certyfikat

posted @ Wednesday, October 22, 2008 10:11 AM | Feedback (2) |

Thursday, June 12, 2008

Microsoft Technology Summit in Warsaw (Poland)

MTS2008_205_105 Meet me on the biggest IT conference in Poland - MTS 2008. 10 tracks, 100 sessions, 60 speakers - including my good colleague and Regional Director of Poland - Tadeusz Golonka. For those who speak Polish it is a great opportunity to see all the cutting edge stuff in one place. For those that don't - only tears are left as conference cost is pretty low - approximately 100 EUR.

Let's meet there. If you gonna be there email me.

posted @ Thursday, June 12, 2008 1:27 AM | Feedback (0) |

Sunday, March 30, 2008

Another geek in town

One of my friends is in our geek town now - http://geekswithblogs.net/faf/Default.aspx

Łukasz Olbromski is a leader of one of the fastest growing .NET user groups in Poland - Wrocławska Grupa .NET. This guy is a working hero for me. He does at least twice as much as I do in Krakowska Grupa Deweloperów .NET. I believe he would have a lot to say about building community and managing a set of volunteers.

We are organizing Heroes Community Launch together. I'll post about that soon in more details. We have big plans in this area.

posted @ Sunday, March 30, 2008 7:48 PM | Feedback (0) |

Monday, February 11, 2008

My presentation on IT Academic Days

Some time ago I had a lecture on one of the IT Academic Days events that was held in Poland. I finally got some pictures from that event so I blog about it now even though it was more than 2 months ago. This little person in the middle of the picture on right is me. I was speaking to 150 students about workflow engines. I showed them Windows Workflow Foundation engine and its usage and then I followed it with my company solution that I designed and implemented (Free Workflow - free is only a name). I believe the presentation was a success. Students were laughing at my silly jokes (it's usually good sign of acceptance of the presenter) or maybe they were laughing at me (I don't know it yet). Anyway it was a great show.

I created two workflow samples.
First one showed a flow of student request to deanery (I found this word in a dictionary but I mean a place where students come to get something done - :-). It was created with WWF and I believe they enjoyed the sample. The second one showed pizza ordering workflow and this one wasn't so funny but was much more real. The first sample was to get their attention and the second one was the real knowledge. I don't dare to believe they learned anything during my lecture. I only wanted them to know what worklfowing is all about. When I asked at the beginning, who knows what workflow is, only 3 people admitted they know. After the presentation I asked who is interested in deepening his knowledge about the topic and there was many hands up.

I believe my presentation goal was achieved.
wyklad

posted @ Monday, February 11, 2008 10:54 AM | Feedback (0) |

Wednesday, January 30, 2008

Community To Community - first .NET conference in Poland organized by Polish user groups

c2c_logo Polish .NET and SQL user groups are organizing a conference in Poland. It is called Community To Community (C2C). You can check it on http://c2c2008.pl/. It will take place on April 5th.
We (Kraków .NET User Group) are responsible for the site. It is Sitefinity CMS - thanks to Telerik that sponsored the license.

We will have two tracks on the conference - .NET and SQL. One of our presenters is Dino Esposito - that's our star. We also plan to give a few lectures to the responsibility of the user groups in Poland. We'll see how it works. As it is first such conference here, I believe we will learn a lot and it will help us organize next such event. I believe we have strong community here in Poland so we will not stop the running train.

posted @ Wednesday, January 30, 2008 5:34 AM | Feedback (0) |

Tuesday, January 29, 2008

European Silverlight Challenge - Polish edition

ESC_Logo_plain

I wasn't blogging recently as I am organizing Polish edition of European Silverlight Challenge. The contest is organized by INETA Europe in the entire Europe. Project submission has just been extended till February 8th. We already have 7 projects published on the site (see http://poland.silverlightchallenge.eu/VisorParticipaciones.aspx). I believe it makes us the winners in number of published projects. The entire site is in Polish but I believe you can download all the projects without any problem. I organized bunch of prizes - including XBox and Wii. MSDN subscription and bunch of licenses for well known software products is given by INETA (check it here and here) - including my beloved Resharper.

You can check the main contest page at: http://www.silverlightchallenge.eu
You can also find there a map of all European countries that take part in the contest.

The Silverlight is not much popular yet but we managed to motivate some people to learn that and write a project for the contest. I hope I can gather at least 3 more projects till February 8th.

posted @ Tuesday, January 29, 2008 9:17 AM | Feedback (0) |

Thursday, January 24, 2008

Visual Studio 2008 InstallFest in Poland

Inspired by Scott Hanselman and his relation from Visual Studio 2008 InstallFest in Portland Polish user groups started the series of events in Poland. First such event was organized by Szymon Kobalczyk in Kraków and you can read about it on his blog. I was one of the organizers of the event so I cannot tell I liked it because I loved it. It was a huge fun for me. I believe it was a great success.

At the moment there was a second InstallFest in Wrocław. I was there, and I think it was also well organized. We had a 'What's new in VS 2008 and .NET 3.5' and 'Visual Studio Extensibility' lectures. After that there was a contest - whit a set of questions concerning VS and .NET 3.5. Even I won something: Resharper licence (I created an extension method that multiplied int). We also played Counter Strike and had a powerball contest (one of my friends won this one with 11 300 swings per second). I had a great time there. Great thanks to Łukasz Olbromski from the .NET User Group in Wrocław.

You can find info about the InstallFest in Wrocław on Chris Koenig blog and  Tadeusz Golonka (Polish Regional Director) blog: Visual Studio 2008 InstallFest we Wrocławiu (blog in Polish language)

I know that other .NET user groups in Poland host the event also. The next one will be in Gdańsk (http://www.codeguru.pl/fullnews-2685.aspx - also in Polish language) and another 3 or 4 user groups is organizing them at the moment.

We also plan to start SQL Server 2008 InstallFest around .NET and SQL user groups in Poland. It looks like this kind of event is a hit here. It is something we missed for some time in user groups organization. I believe it's just a beginning.

posted @ Thursday, January 24, 2008 10:39 AM | Feedback (0) |

Wednesday, November 07, 2007

Checking if WCF service is configured in your app.config

When you need to startup WCF service conditionally - depending on your application configuration it is quite easy to achieve it by checking the ServiceHost.BaseAddresses collection. If your app.config file does not contain your service configured the collection will be empty. Here is the snippet:

ServiceHost host = new ServiceHost(typeof(MyService));
if (host.BaseAddresses.Count < 1)
     return;

host.Open();

Next time I will post how to plug-in service startup in your application startup with a plug-in model i described in my post Plugging-in application initialization code.

posted @ Wednesday, November 07, 2007 7:18 AM | Feedback (0) |

Wednesday, October 31, 2007

SQL date filtering - between date from and to

I ve been recently creating few reports that required dates as parameters. It is quite common to have a report that must be provided range of dates (from and to). I investigated few reports that was created by my colleagues and I found those reports are not intuitive. Let me explain:

When I see two dates that must be provided to a report I believe that when I provide the same date in from and to parameters it will show all data for the paricular day. See screenshot below:

from-to1

But to achieve this you need to create a query in a specific way. Usually in such case both parameters passed to the query are equal so if you want your report to work in an intuitive way you need to write this kind of SELECT:

SELECT
    MyDate
FROM
    MyTable alias
WHERE
    (alias.MyDate >= @DateFrom) AND
    (alias.MyDate < DATEADD(d, 1, @DateTo))

Here the MyDate should be greater or equal to DateFrom and less to DateTo (but the DateTo is added with one day).

Maybe it's obvious but I found many reports with the bug. developer usually do not care (or do not know) if the report shows what it should show. Baka (stupid in Japanese) developer.

If you want to provide open range of dates: 

  • start with infinite end   from-to2
  • end with no start from-to3
  • no date filtering at all from-to4

use the following snippet:

SELECT
    MyDate
FROM
    MyTable alias
WHERE
    (@DateFrom IS NULL OR alias.MyDate >= @DateFrom) AND
    (@DateTo IS NULL OR alias.MyDate < DATEADD(d, 1, @DateTo))

This blog entry will be useful at least for my colleagues.

posted @ Wednesday, October 31, 2007 9:00 AM | Feedback (1) |

Monday, October 29, 2007

Evaluating Community Server

I've been recently looking for a service that could be used as a medium of communication within a community. I do not want to type that I was looking for a community server as it is name of a product but I was. I needed it for Cracow .NET User Group that I am member of. I considered:

Each of them has different set of features and can be applied to different requirements. All of them fullfil my requirements. I finally chose google groups because of lack of any additional cost but the Community Server is very interesting. I installed it (xcopied) at home and try to use it with my wife.

If you need a server for community look at the Community Server.

posted @ Monday, October 29, 2007 11:08 AM | Feedback (2) |

Sunday, October 21, 2007

Google Code - google applications API

I've found that not too many of my coleagues know that almost every google application has its own API. E.g. the google calendar has API that is available in .NET. I am interested in the calendar automation so I hope I will find some time to use the Google Calendar APIs and Tools.

Anyway all that is available for developers in google applications is avialable here: http://code.google.com/

Just check it. Maybe you will find something interesting for you.

posted @ Sunday, October 21, 2007 8:34 AM | Feedback (1) |

Friday, October 12, 2007

WCF vs Remoting - sending plain objects

I've finally found some time to test WCF performance vs .NET Remoting in sending 'plain' objects. Here you can find my previous results of sending DataSet through the wires.

The test project described in this article can be downloaded here.

What I tested:

  • Plain [Serializable] object
  • Marked with or without [DataContract] attribute
  • I tested client latency (not server throughput)

What are my results:

I hoped it will be different but it occurs that the .NET Remoting is better in sending plain objects than WCF. It isn't much better but it still is a bit.

What I tested is an operation that returns a Human object (with Name, FirstName and few other members) and I executed the method 100 times for each service type. Each time I created a new service proxy (WCF or Remoting), invoked the method and closed the proxy (in WCF only). My results (in seconds) are:

  • WCF: 1.2 s
  • Remoting: 0.71 s - this one is better

I tested the Human class with both [Serializable] attribute and without [DataMemeber] and with the [DataMember] set. Both of my results are equal - so it doesn't matter (from client latency point of view) whether you place the DataMember or Serializable attribute as WCF respects both.

Why those results favour the .NET Remoting:

  • I believe it is caused by the fact that WCF 'requires' closing service proxy and I measure it in my tests - so when .NET Remoting sends only one request to the server WCF sends two (first with the invocation and second with the information to close the service) - it could be probably improved with Single Call service.
  • WCF sends data in XML format internally and .NET Remoting uses binary format. Whatever people say I believe it is not possible to outperform binary format with any text based (e.g. xml) format which is redundant in nature - maybe I will be surprised some day.

Conclusion:

I do not try to show that the .NET Remoting is better than WCF. I only try to figure out real life situation in which I would probably use WCF. I try to answer whether it is faster or not as I already know IT IS BETTER than Remoting. Really. I use it in my projects and I am thrilled. Why do I write this? To stop receiving emails from people that try to tell me how can I change my tests to show that the WCF is better. I am pretty sure that every test can be prepared in such a way that it shows what it is required to show. I do not want to do that.

posted @ Friday, October 12, 2007 8:53 AM | Feedback (9) |

Tuesday, October 09, 2007

Deploying WCF application

I finished my first set of WCF services that my enterpise application exposes. I am ready to deploy them and I found some problems. The .NET 3.0 is 'only' a set of libraries build on top of .NET 2.0. I thought all I need to do is to publish the libraries (I need WCF only) with my application in the bin folder - xcopy it. Unfortunatelly it occurs it's not so easy. I extracted the libraries out of my GAC and tried to execute my test app on a clean machine. It didn't work as I used app.config to configure the WCF - I had an exception that said something about app.config (I do not remember it at the moment). I posted the issue on WCF foum and it occurs the .NET 3.0 must be installed on the machine (at least if you want to configure it in app.config as the setup registers config handlers - or whatever the name of this stuff is - in your machine.config file)

OK. I decided to extend my setup to include the .NET 3.0 as a prerequisite. I downloaded:

.Net 3.0 bootstrapper - this is bootstrapper that downloads the 'real' setup during instalation. I didn't inlude it in my app for obvious (at least to me) reasons.

.Net 3.0 full redistributable - this is full redistributable and I use this as a prerequisite to my application (it has approximately 50 MB). Hopefuly setting a .NET Framework 3.0 as prerequisite instals also the .NET 2.0.

.Net 3.0 merge module - I hoped I could find merge module for .NET 3.0 but it's not available.

Here is also an article that helped me understand the .NET 3.0 deployment scenarios: http://msdn2.microsoft.com/en-us/library/aa964978.aspx

I still do not know how to distribute the .NET 3.0 with ClickOnce but I will have to find it out. I'll post it when I find it.

posted @ Tuesday, October 09, 2007 7:35 AM | Feedback (1) |

Monday, October 08, 2007

Plugging-in application initialization code

Many times in my development live I had to plug-in some code into an existing application that should be xeceuted during startup / cleanup / ... . If you own the application you can always hardcode another line of code that invokes your static initialization class. But:

  • What to do if a circular dependency occurs?
  • Is the hardcoding clean?

In such case there is a pattern (or snippet) that allows you to plug-in some dynamic invocation of code. Below is an example how to declare Init method in a MyStartup class. The class implements IInit interface and is pointed by [Init] attribute. Without an further explanation the sample tells us to execute the startup during application initialization.

[assembly: Init(typeof(MyNamespace.MyStartup))]

namespace MyNamespace
{
public class MyStartup : IInit
{
public void Init()
{
// Do something - e.g. format all drives } } }

Below is code required for the above initailization to compile. Do NOT read it - you will get bored.

public interface IInit
{
void Init();
}

[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
public class InitAttribute : Attribute
{
private Type _startupType;
public Type StartupType
{
get { return _startupType; }
}

public InitAttribute(Type startupType)
{
if (startupType == null)
throw new ArgumentNullException("type");

if (typeof(IInit).IsAssignableFrom(startupType) == false)
throw new ArgumentException(
String.Format("Type {0} does not implement IInit interface.", startupType));

this._startupType = startupType;
}

internal static void InvokeInit(IEnumerable<Assembly> assemblies)
{
foreach (Assembly assembly in assemblies)
{
foreach (InitAttribute attr in assembly.GetCustomAttributes(typeof(InitAttribute), true))
{
IInit startup = (IInit)Activator.CreateInstance(attr.StartupType);
startup.Init();
}
}
}
}

When you have such a code all you need is to invoke InitAttribute.InvokeInit(...) passing assemblies you want to traverse during application initialization.

Off course one can add some additional logic to the initailization - e.g. dependency (so you could tell that your init should be run after some other init) or other methods invoked during other application stages - e.g. CleanUp().

I believe this approach is intuitive and clean. Maybe it is known for all of you byt maybe not. Try it out.

posted @ Monday, October 08, 2007 7:05 AM | Feedback (0) |

Thursday, October 04, 2007

Tracking everyday activities

When you want to do something weekly do it daily - this is one of principles that I find very useful.

Small steps allow you to achieve a snow ball effect - do something slowly step by step.

Simple task executed every day during years allows to achieve something really big - this one I believe is the most important of those three.

OK. Those are my principles but each time I try to follow those rules I find it difficult as flesh is weak and only mind is strong - I find it most difficult to do something in regular basis.
But I am not alone. I know many people has the same problem. What I recently found is an onlie tool that helps tracking such everyday activities - goals.
You can find it here: http://www.joesgoals.com/
I placed the resolution chart as my home page so I see it every day and it reminds me that I should achieve at least some of my goals.

Please, let me know if anyone has some better ideas / suggestions how to keep motivating yourself.

posted @ Thursday, October 04, 2007 8:33 AM | Feedback (0) |

Powered by: