Rodrigo Guerreiro

"The purpose of a programming system is to make a computer easy to use", in The Mythical Man-Month
posts - 61, comments - 16, trackbacks - 8

Thursday, October 14, 2010

How about an extension method?

imageSince the release of this nice feature for the .NET Framework, many of us are using extension methods to simplify our code. And according to the DRY principle it’s best to not re-invent the wheel. So, you can search for already “invented” extension methods in the site http://www.extensionmethod.net/

 

ExtensionMethod.NET is a database of C# 3.0 and Visual Basic 2008 extension methods. It contains many user-rated extension methods that will expand your code library immediately.

Extension methods add functionality to existing classes and allow you to expand the .NET framework. This way your favorite functions integrate seamlessly into the framework. For more information about extension methods visit the C# 3.0 and Visual Basic 2008 MSDN Library pages.

posted @ Thursday, October 14, 2010 7:25 AM | Feedback (0)

The Quine problem

Some time ago, Bruno presented to me and Manso the Quine problem (in the context that it’s a problem used in job interviews). In simple words it’s a program that outputs its own source code without using any IO (of course it uses the standard output for the obvious reasons).

I accepted the challenge and developed my very own implementation in C#.

using System;

namespace Quine
{
class Program
{
static void Main()
{
var s = @"using System;

namespace Quine
{1}
class Program
{1}
static void Main()
{1}
var s = @"
"{0}"";
Console.Write(s, s, (char)123, (char)125);
Console.ReadKey();
{2}
{2}
{2}"
;
Console.Write(s, s, (char)123, (char)125);
Console.ReadKey();
}
}
}

Now I challenge you guys.

Until next time ;)

 

P.S.: wow…two posts in the same day :)

posted @ Thursday, October 14, 2010 7:09 AM | Feedback (0)

Friday, June 05, 2009

For whom is sleeping

Have you heard of Project Natal? If not then you’re definitely sleeping…

Fortunately I hereby provide you a real nice video that should hook you up :)

 

Until next time ;)

posted @ Friday, June 05, 2009 7:52 AM | Feedback (0)

Friday, April 24, 2009

ASP.NET MVC – What is that?

Many people still think like this. Others think they know what MVC is, but are all wrong. Another type of developers still think that Web Forms is the way to go and MVC generates all bunch of crappy code.

To all of them I say this: Go Learn MVC Now!

…or go read Rob Conery’s post. He wrote a all lot better the reasons why you should learn MVC than I could ever write.

Until next time ;)

posted @ Friday, April 24, 2009 12:45 PM | Feedback (0)

I’m jealous of the Norwegians

You’re probably wondering why I’m jealous of the Norwegians. As you know, I live in Portugal, that beautiful place bathed by the Atlantic ocean. And now you thinking: “He lost it completely. How could he be jealous of the Norwegians? They have snow and cold when he has sun and warm temperatures. He has lovely beaches when they have nice rocks.” Well, all of that is true. But I’m still jealous and the reason is this.

The Norwegians are so luck. They have the opportunity of watching speakers like Scott Hanselman, Phil Haack, Michael Feathers, Robert C. Martin (aka Uncle Bob), Roy Osherove, Juval Lowy, Ted Neward, Michele Leroux Bustamante, Ayende Rahien, Jeremy D. Miller, Ian Griffiths, Jimmy Nilsson, Scott Bellware and Glenn Block, just to name a few. And all of them are going to be there this year. All together. Oh…I’m so jealous!!!

At some point, in the NDC site, you can find the following:

“The idea behind Norwegian Developers Conference is that it should be able to measure up against any conference in the world. All the speakers are experienced and right at the top of their respective trees.”

I don’t remember in Portugal having this quality in our developer conferences. Until when I have to wait to someone come up with a conference with this quality in Portugal? Until when I have to wait to watch Scott Hanselman or Jeremy D. Miller without having to exit my country?

In Portugal, I estimate that exists, more or less, 10.000 developers. There’s enough audience to support a conference of this quality. I hope that this post enlights someone (aka business-person) to start a similar developer conference able to rival with the best in the world.

Until next time ;)

posted @ Friday, April 24, 2009 8:01 AM | Feedback (4)

Wednesday, April 22, 2009

Where the developer meets the social

Today, I’ve watched the presentation that Scott Hanselman gave in Devscovery last monday. (if you also want to watch it, check Scott’s post)

His keynote got me thinking, whereas the reason for this post. I’m just going to write about my own experiences and I assume that who reads this later may or may not agree with me.

I’m not social. Period!

You may think that as developers our work needs a very small percentage of social interaction. Basically, meetings. Well, but if we want to succeed as developers and climb the ladder in software engineering you’ll need social interaction. I’m really up for information/knowledge sharing. We, the geeks, know the tools that better help us doing that sort of thing.

 

Where am I

  • Blog: This blog has the purpose to share my ideas with others (and getting their reaction, which until now result in just one person) but mainly I’m using it in order to google myself later :) and you can find great developer/blogger out there that have valuable information. I do think that reading blogs is far more important than writing one. There are already great information on how build apps using best practices, a specific technology, how to test our code and so on.
  • Linkedin: In the past it was usual to exchange business cards. I remember my father having an agenda with all his connection’s business cards. But now, I use Linkedin simply because the people on my network is constantly updating their profile and anyone who wants can check what I’m doing or what I’ve done. Since I created my profile I was contacted more often, for job interviews.
  • Twitter: Where you’ll find me more often. I really like the way I’m getting information from the people I follow. The Twitter usage is suppose for you to write what you’re doing. But I’m using it mostly to share articles and posts that I find interesting. And that engaged some very interesting discussions.
  • Stackoverflow: I blame myself for forget to mention that lately you can also find me at Stack Overflow. It’s an incredibly web app that allows a community information exchange. The site is like QA with wiki. Very cool. Way better than this one. [UPDATE]

 

It’s all about sharing information

I think that is also important some sort of gathering where we all discuss and exchange ideas in software engineering. See one of my latest posts:

…put people talking and sharing experiences with each other.

The bottom line is: developer meeting the social == exchanging information

Until next time ;)

posted @ Wednesday, April 22, 2009 2:28 PM | Feedback (1)

Wednesday, March 04, 2009

ASP.NET MVC RC2 + xUnit + Gallio

In case you didn't notice, ASP.NET MVC RC2 is out. Following that release, I've decided to create a new ASP.NET MVC project, but using xUnit instead of MSTest for the test framework. I also want this change to have no impact in the way I develop, which means that I want the unit tests to run inside Visual Studio 2008.

 

Why xUnit?

Here's why.

 

Introducing Gallio

From Gallio homepage:

The Gallio Automation Platform is an open, extensible, and neutral system for .NET that provides a common object model, runtime services and tools (such as test runners) that may be leveraged by any number of test frameworks.

The Gallio platform seeks to facilitate the creation of a rich ecosystem of interoperable testing tools produced by and for the community at large so as to address a far wider range of testing needs than any previous independent testing framework has done before. Unit tests, integration tests, performance tests, and even semi-automated test harnesses should all be able to leverage common facilities where appropriate. Moreover, they should present consistent interfaces to the world so that they can easily be integrated into the systems and processes of the enterprise.

At present Gallio can run tests from MbUnit versions 2 and 3, MSTest, NBehave, NUnit, xUnit.Net, and csUnit.  Gallio provides tool support and integration with CCNet, MSBuild, NAnt, NCover, Pex, Powershell, Resharper, TestDriven.Net, TypeMock, and Visual Studio Team System.

 

Combining all together

DISCLAIMER: The following steps are provided "as is" without any warranty or support. Use this under your own responsibility. Also, this only works in Visual Studio 2008 Team System and I'm assuming that you already have the ASP.NET MVC RC2 installed (but I assume that this also works with RC1 but I haven't test it).

 

1. Download xUnit (xunit-1.1.zip) and Gallio latest releases.

2. Unzip the xUnit file and run the xunit.installer.exe. In the ASP.NET MVC section click on the Enable button (case it's enabled which in this case you'll need to do nothing) and you'll get the green result, like in the picture below.

image  image

3. Execute the downloaded GallioBundle-3.0.5.546-Setup-x86.msi installer and follow the instructions.

4. Create a new ASP.NET MVC project.  When the below screen appears you're now able to choose the xUnit as the test framework. Click OK.

image 

5. Now the tricky part. Unload the test project (right-click on the project and choose the Unload project option).

6. Right-click on the unloaded project and choose Edit...csproj and you'll get something like this:

 image

7. Right below the image element paste this.

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>  
8. Save and reload the project.
9. Build the solution. Probably you'll get the errors below (if not go to step 10). This happens because the xUnit project templates are built for the ASP.NET MVC RC1 and we're using the ASP.NET MVC RC2. Simply add references in the test project to the assembly System.Web.Routing and System.Web.Abstractions. See the release notes in case you're interested knowing what changed. Basically, this assemblies are no longer distributed with the MVC installer because are already shipped with .NET Framework 3.5 SP1.
image
10. Build again the solution and hopefully all goes OK.
11. Now go to Test->Windows->Test View. Again, this only works in Visual Studio 2008 Team System. With luck you'll have 9 unit tests.
12. Select all and run. You're now running the tests successfully inside the Visual Studio 2008 with Gallio (Check the icon between the checkbox and the result column).
The two last tests are failing, once again, because are built for the RC1. I'll leave the resolution to you :)
image 
 
Success! Hope this helps someone.
 
Until next time ;)
 
Technorati Tags: , , ,

posted @ Wednesday, March 04, 2009 10:35 AM | Feedback (1)

Tuesday, March 03, 2009

My vision in Portugal

Last weekend it was held in Seattle the ALT.NET conference. One of the things that grabbed my attention was that they practiced the Open Space Technology. That's an interesting approach on sharing our thoughts with the all the ones attending the conference. Although, at least for me, the real advantage of the ALT.NET conferences (and also the ALT.NET user groups) is that put people talking and sharing experiences with each other.

For the past weeks Bruno and I have been talking about patterns, methodologies, open source apps and alternative tools. I think that's very into the ALT.NET spirit. Unfortunately, our thoughts are being kept just to us. No one is taking advantage of our conclusions.

My vision is: a software discussion user group in Portugal (or one in Lisbon and another in Porto). I'm releasing this thought as my own. I haven't shared it with anyone. But I would like to know if someone else thinks like me and advocates this idea. I know that exists this group that have been engaging a lot of discussion in the subject of software. But I would like to have in Portugal a freely available discussion on software open to everyone. Senior developers mixed with junior and newbies. A real exchange.

Please send me an email with your suggestions\ideas (rodrigo [one dot] guerreiro [a] agilior [another dot] pt). I would like very much this idea to grow. That's my vision.

posted @ Tuesday, March 03, 2009 8:16 AM | Feedback (1)

Friday, February 27, 2009

Follow me around...

...here. Also I've updated my blog page with my recent tweets ( <-- left side).

If you're interested in the couple words that I mumble every once and a while, follow me :)

posted @ Friday, February 27, 2009 10:03 AM | Feedback (0)

Wednesday, January 21, 2009

An one year delayed welcome post...

ONE YEAR. That's the time I had to wait to post a welcome to João Manso. Finally he started to post.

What I have to say about Manso (that's how we call him, or, as he prefers, "O Manso")?

I've worked with him in two distinct companies, including Agilior. Also he and Pedro were my classmates at ISEL.

It seems that I can't get rid off him. Just kidding!

Welcome Manso! :)

posted @ Wednesday, January 21, 2009 7:37 AM | Feedback (1)

Tuesday, November 25, 2008

Trying to get a Typemock Isolator free license :)

Typemock are offering their new product for unit testing SharePoint called Isolator For SharePoint, for a special introduction price. it is the only tool that allows you to unit test SharePoint without a SharePoint server. To learn more click here.

The first 50 bloggers who blog this text in their blog and tell us about it, will get a Full Isolator license, Free. for rules and info click here.

posted @ Tuesday, November 25, 2008 8:05 AM | Feedback (0)

Friday, November 14, 2008

Email address format validation in XSD schemas

I know that I owe you, my faithful readers (which BTW my last reports tells me that in total are...hum...zero), a couple of posts since August. I promise that I'll try to keep you (I mean...no one) updated with my recent thoughts :)

Back to the real post...

Yesterday, in one of our clients, we found out a real nice and tricky bug. In the BizTalk solution we have a message schema that looks something like this:

image

It's typical to insert a validation rule in the email. So, the Email field should look something like this:

image

In case you're wondering, this is done by setting the Base Data Type property with xs:string, setting the Data Type property with "Email" (just write it out) and paste "\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" (without the ") into the Pattern property.

Now let's generate an instance of this schema. One example that's complaint with this schema could be:

<ns0:Person xmlns:ns0="http://TestingEmailAddressFormat.Message">
  <Name>John Doe</Name>
  <Address>Lisbon street, 1</Address>
  <Phone>555-5555</Phone>
  <Email>johndoe@somewhere.com</Email>
</ns0:Person>

If you validate this XML against our schema you'll get the message "Validate Instance succeeded for schema Person.xsd...". Perfect!

But let's perform a small change in Email field:

<ns0:Person xmlns:ns0="http://TestingEmailAddressFormat.Message">
  <Name>John Doe</Name>
  <Address>Lisbon street, 1</Address>
  <Phone>555-5555</Phone>
  <Email>john_doe@somewhere.com</Email>
</ns0:Person>

Validating this won't get us that nice message of success. Instead we get something like "error BEC2004: The 'Email' element is invalid - The value 'john_doe@somewhere.com' is invalid according to its datatype 'http://TestingEmailAddressFormat.Message:Email' - The Pattern constraint failed". That's a little awkward, because we were sure that our regex expression was right.

After some googling, Bruno found the reason for this error. It seems that in the .NET framework the "\w" option is equivalent to [a-zA-Z_0-9]. As you can see, it includes the "_" (underscore). But in the XSD schemas, the "\w" option doesn't include the "_"(underscore).

Bottom line, we had to change our validation regex expression for the Email field to "[A-Za-z0-9_]+([-+.'][A-Za-z0-9_]+)*@[A-Za-z0-9_]+([-.][A-Za-z0-9_]+)*\.[A-Za-z0-9_]+([-.][A-Za-z0-9_]+)*" (without the ").

Until next time ;)

 

posted @ Friday, November 14, 2008 6:52 PM | Feedback (1)

Tuesday, August 05, 2008

How to edit ACL?

I don't know about you, but I hate ACLs...

For Windows versions prior to Vista and according to this page I've got to do something like this in order to edit an ACL:

httpcfg set urlacl /u {http://URL:Port/ | https://URL:Port/} /aACL

where ACL should a SDDL string. Well, that's the part I HATE. I don't want to be a SDDL expert and I don't even want to understand them! Period!

It seems I'm not the only one who thinks like that. In his post, Paul gives two options how to edit an ACL in a more easier form:

  1. Read Keith Brown's post how to edit the ACL programmatically; (We could use this option in order to edit the ACL when installing the service)
  2. Use a little GUI application, called HttpNamespaceManager, that Paul developed. (I've already used it and it works smoothly)

Fortunately, the way how they are edited changed in Vista\Win2k8 OS:

netsh http add urlacl url=http://+:8080/MyUri user=DOMAIN\user

Hope this helps someone

 

Technorati Tags:

posted @ Tuesday, August 05, 2008 1:32 PM | Feedback (0)

Monday, May 26, 2008

I'm amazed!

Pedro showed me this link. It's a Homer Simpson image using only CSS. Incredible!

I guess that someone has to much free time in his hands :)

Until next time ;)

 

UPDATE: And how about drawing a Manga cartoon using the HTML <table>? Thanks André for this one:

posted @ Monday, May 26, 2008 3:13 PM | Feedback (0)

Which workflow should I use?

At this moment, Microsoft has 2 different tools in order to build workflows:

Although they are equal in many aspects, we should consider their differences in order to build our Enterprise Application/Integration and choose the best that fits our needs. Luckily, from now on, we have a resource that should help us with that task.

Kent Brown wrote an article entitled BizTalk Server 2006 or WF? Choosing the Right Workflow Tool for Your Project. I advise you to read it.

Until next time ;)

 

posted @ Monday, May 26, 2008 7:32 AM | Feedback (0)

Friday, May 23, 2008

Let's think about this...

For some time now I've been following Steve Vinoski's blog. In case you're wondering he's one of the best authorities on distributed computing. (You can read more about him here)

His last post really amused me :) It's entitled Just What We Need: Another RPC Package. He talks about the upcoming release of a new client/server messaging system by Cisco. Simply he asks "Why? Do we really need yet another client/server messaging system?".

He's right! Think about this: how many messaging systems do we have? How many succeeded? Why are we inventing the wheel over and over? The answer is simple: everyone wants a piece of the pie! And that piece is money! For me this is one of the main reasons why the computer industry is so far behind of other major industries, like construction, aeronautic or even the mechanical:

  • In the computer industry we don't have an outside impartial entity that monitors the software quality. In construction and aeronautic we do.
  • In the computer industry everyone who wants to, can write a piece of software (call it the best of the world) and sell it. In the other industries we have to be certified in order to construct a building or an airplane.
  • In the computer industry there are dozens and dozens of patterns and standards. But, no one monitors if the standard or the pattern is well applied. Do you see this happening in other industries?

I bet that sooner or later our industry will have to follow the other industries. Their behavior is proven to be the right one.

Food for thought...

Until next time ;)

 

posted @ Friday, May 23, 2008 11:05 AM | Feedback (-1)

Monday, May 19, 2008

BizTalk posters

Recently the BizTalk Server Team released another poster. It's the Business Activity Monitoring (BAM) poster. You can download it from here.

This poster follows the previously posters that were released:

Until next time ;)

 

posted @ Monday, May 19, 2008 8:02 AM | Feedback (0)

Monday, May 12, 2008

Open the champagne bottle!

Brian Harry just announced that the upcoming R3 release of BizTalk Server 2006 is going to have support in the TFS Team Build.

For the couple months now, we have been building our BizTalk solutions in our build server using only the devenv.exe. But it's a really pain in the *backside* to put it to work. We're managing, but this announce really made us (at least me) smile :)

Until next time ;)

 

posted @ Monday, May 12, 2008 12:59 PM | Feedback (0)

Friday, May 09, 2008

BizTalk Flat file hints - part 2

Following my last post I'm going to describe another hint related to the BizTalk flat files schemas.

Let's use this flat file definition:

Definition Appear how many times Example
Tag: HEA
FileNumber: (length = 4)
1 HEA1234
Tag: ENT
Date: (length = 12)
unbounded ENT200805091416
Tag: DESC
DescID: (length = 3)
Text: (length = 100)
0..1 DESC001This is a test
Tag: VAL
ValueID: (length = 3)
Value: (length = 3)
0..1 VAL001123
Tag: EOF
FileNumber: (length = 4)
1 EOF1234

Under the root node we're going to have 3 main elements: HEA, ENT and EOF. Under the ENT element exists the DESC and VAL elements. But each one may or may not exist independently of one another. But if both of them exist, the order must be DESC->VAL. A first schema definition could be:

image 

Pay attention that the Min Occurs field for the Description and Value elements must be set to 0. Using this example to validate our schema definition, we get an error.

Example Error description

HEA1234
ENT200805091416
DESC001This is a test
VAL001123
ENT200805091416
VAL001123
EOF1234

C:\test2.flat.txt: error BEC2004: Unexpected data found while looking for:
'DESC'
'ENT'
'EOF'
The current definition being parsed is Entry. The stream offset where the error occured is 77. The line number where the error occured is 6. The column where the error occured is 0.

Apparently our schema is well defined. But reading carefully the error message we find out that the error occurred after parsing the second ENT element. The parser is expecting a DESC, ENT or EOF element. But the Description and Value nodes in our schema have the Min Occurs field set to 0.

Once again the solution lies in another magical field of our schema. It's called Parser Optimization and have two possible values: speed and complexity. By default is set to speed. According to this, when the Parser Optimization is set to "complexity mode the flat file parsing engine uses both top-down and bottom-up parsing, and tries to fit data more accurately. In speed mode, the parser tries to fit data as they appear in the stream."

To set the Parser Optimization field click on the <Schema> node and choose the complexity value. It should look like this:

image

Now we're able to get a success return after validating our example file. I hope this could help someone.

Until next time ;)

 

posted @ Friday, May 09, 2008 12:46 PM | Feedback (2)

Thursday, May 08, 2008

BizTalk Flat File hints

For the past week I've been working with some real complicated flat files. So I've came across with some hints that I'm going to share with you.

Hint #1

Let's say that you have the following flat file definition:

Definition Appear how many times
Tag: HEA
FileNumber: (length = 4)
1
Tag: MSG
MsgID: (length = 3)
FreeText: (length = 100)
unbounded
Tag: EOF
FileNumber: (length = 4)
1

One example for this definition could be:

HEA1234
MSG001This is a test
EOF1234

Using the above example to create our schema using the flat file schema wizard, probably you'll get something like this:

image

Now try to validate the following flat file:

HEA1234
MSG001This is a test
MSG002This is another test
EOF1234

Probably you're getting this error:

C:\test.flat.txt: error BEC2004: Unexpected data found while looking for: '\r\n'
The current definition being parsed is Root. The stream offset where the error occured is 51. The line number where the error occured is 3. The column where the error occured is 20.

This happens because the second MSG element is larger that the one we used to create the schema. As you can see in our initial definition, the FreeText field has a maximum length of 100 characters. So you have to set the Positional Length field to 100.

image

Hint #2

But if we validate it again we get the same error but in a different position. The problem is that we specified 100 characters of length and neither of FreeText fields in our example has that length.

The solution lies on a magic field called Allow Early Termination. According to this, the Allow Early Termination field "indicates whether positional records can terminate early or must contain data for all record fields." By default is set to No, which means that the record must contain data for all the fields. To solve our problem we must set it to Yes. Click in the <Schema> node and you can find the Allow Early Termination field.

image

Now if we validate it once again we get a success message. I hope this helps someone.

Until next time ;)

 

posted @ Thursday, May 08, 2008 2:35 PM | Feedback (1)

Tuesday, April 08, 2008

Facts and Fallacies of Software Engineering

When I read this post from Jeff Atwood suddenly came to mind the presentation (video) that Bruno and Tiago gave at TechDays 2005. Basically, the points that they mentioned there are the same that Jeff described in his post (based on the book Facts and Fallacies of Software Engineering, by Robert L. Glass). I'll put them here for everyone read and meditate it.

People

  1. The most important factor in software work is the quality of the programmers.
  2. The best programmers are up to 28 times better than the worst programmers.
  3. Adding people to a late project makes it later.
  4. The working environment has a profound impact on productivity and quality.

Tools and Techniques

  1. Hype (about tools and technology) is a plague on the house of software.
  2. New tools and techniques cause an initial loss of productivity / quality.
  3. Software developers talk a lot about tools, but seldom use them.

Estimation

  1. One of the two most common causes of runaway projects is poor estimation.
  2. Software estimation usually occurs at the wrong time.
  3. Software estimation is usually done by the wrong people.
  4. Software estimates are rarely corrected as the project proceeds.
  5. It is not surprising that software estimates are bad. But we live and die by them anyway!
  6. There is a disconnect between software management and their programmers.
  7. The answer to a feasability study is almost always "yes".

Reuse

  1. Reuse-in-the-small is a solved problem.
  2. Reuse-in-the-large remains a mostly unsolved problem.
  3. Reuse-in-the-large works best in families of related systems.
  4. Reuseable components are three times as hard to build and should be tried out in three different settings.
  5. Modification of reused code is particularly error-prone.
  6. Design pattern reuse is one solution to the problems of code reuse.

Requirements

  1. One of the two most common causes of runaway projects is unstable requirements.
  2. Requirements errors are the most expensive to fix during production.
  3. Missing requirements are the hardest requirements errors to correct.

Design

  1. Explicit requirements 'explode' as implicit requirements for a solution evolve.
  2. There is seldom one best design solution to a software problem.
  3. Design is a complex, iterative process. Initial design solutions are usually wrong and certainly not optimal.

Coding

  1. Designer 'primitives' rarely match programmer 'primitives'.
  2. COBOL is a very bad language, but all the others are so much worse.

Error removal

  1. Error removal is the most time-consuming phase of the lifecycle.

Testing

  1. Software is usually tested at best to the 55 to 60 percent coverage level.
  2. 100 percent test coverage is still far from enough.
  3. Test tools are essential, but rarely used.
  4. Test automation rarely is. Most testing activities cannot be automated.
  5. Programmer-created, built-in debug code is an important supplement to testing tools.

Reviews and Inspections

  1. Rigorous inspections can remove up to 90 percent of errors before the first test case is run.
  2. Rigorous inspections should not replace testing.
  3. Post-delivery reviews, postmortems, and retrospectives are important and seldom performed.
  4. Reviews are both technical and sociological, and both factors must be accommodated.

Maintenance

  1. Maintenance typically consumes 40 to 80 percent of software costs. It is probably the most important software lifecycle phase.
  2. Enhancements represent roughly 60 percent of maintenance costs.
  3. Maintenance is a solution-- not a problem.
  4. Understanding the existing product is the most difficult maintenance task.
  5. Better methods lead to more maintenance, not less.

Quality

  1. Quality is a collection of attributes.
  2. Quality is not user satisfaction, meeting requirements, achieving cost and schedule, or reliability.

Reliability

  1. There are errors that most programmers tend to make.
  2. Errors tend to cluster.
  3. There is no single best approach to software error removal.
  4. Residual errors will always persist. The goal should be to minimize or eliminate severe errors.

Efficiency

  1. Efficiency stems more from good design than good coding.
  2. High-order language code can be about 90 percent as efficient as comparable assembler code.
  3. There are tradeoffs between optimizing for time and optimizing for space.

Research

  1. Many researchers advocate rather than investigate.

Unfortunately most of software developers and software companies don't consider this, at least in Portugal. I say no more!

Until next time ;)

 

Technorati Tags: ,

posted @ Tuesday, April 08, 2008 9:08 AM | Feedback (0)

Monday, April 07, 2008

The world is upside down...

This was my felling after I read this post.

In a positive way, things are changing inside Microsoft. Some years ago you would never seen some prerequisites to install like this:

Runtime: Java EE 5 on Sun Glassfish v2 + Sun WSIT/Metro (JAX-WS extensions), Tool: Netbeans 6.0 IDE.

But now Microsoft is willing to work together with their partners/competitors, struggling for a better "interoperable" world. This shouldn't be a surprise. In the past 21st of February they released a communication stating:

1. ensuring open connections
2. promoting data portability
3. enhancing support for industry standards
4. fostering more open engagement with customers and the industry, including open source communities.

If you're wondering, the above requisites are for a sample inside the R11 release of BizTalk Services that shows how to use the BizTalk Services Identity Security Token Service (STS) to secure the communication between a Java client and a Java service providing federated authentication and claims-based authorization.

Bravo Microsoft!

Until next time ;)

 

posted @ Monday, April 07, 2008 8:37 AM | Feedback (0)

Thursday, April 03, 2008

TechDays 2008 - day #3 review...and last

Final day, final review...finally :)

INT06 - Parallel Extensions para a Plataforma .NET 3.5 (link)

For quite some time I've been following Bart's blog. So I couldn't miss one of his presentations in our TechDays. Basically he talked about the new Parallel Extensions framework released by Microsoft. The namespace is System.Threading.Parallel with two classes for the for cycle and the foreach cycle. Also in this release we can find the PLinq, which is an implementation of Linq for parallel work, using the classes that I've mentioned. It can only be used for XML and objects, because the parallel work has to be local (local resources such as CPUs). Because most of .NET Framework collections aren't thread-safe, then it was also released thread-safe implementations for the most common collections.

What can I say about Bart? Well, is a geek (in the good way) and he goes really deep in his presentations. Nice job.

DEV09 - Enterprise Library 4: Construção de Aplicações Extensíveis através de Dependency Injection (link)

If ever heard about the Dependency Injection pattern then I should be happy to know that Microsoft released a Dependency Injection container distributed under the Enterprise Library, called Unity. That was the subject of Hugo's presentation. He talked about the various patterns that Unity has, such as Service Locator, Dependency Injection, Fluent Interface, Abstract Factory and Strategy Design Pattern. Also was good to know that Unity is a standalone assembly, meaning that we can use it wherever we want without having the overload of the entire Enterprise Library. Also it's completely extensible.

Hugo Batista presented this very well, to the point that I bet that almost everyone left the room knowing what Unity is and what we can do with it.

WEB05 - ASP.NET Futures - Dynamic Data Controls and Astoria Services (link)

For some time now I've been away of the ASP.NET world. So I decided to go to at least one presentation about that subject. This was the one I chose, and I didn't regret it. The Dynamic Data basically is a generator of .NET pages for a specific data model. For me, in order to understood it, I tried at home. You can also do that by following Scott's tutorial.

A little word about Matt Gibbs. He really knows how to talk to real world developers. And also what great demos he brought us. I really learned.

VST03 - Hardcore Debuging e Profiling de Aplicações .NET (link)

How do you debug your applications that already are in production? How can you find errors without the Visual Studio? This was explained in this session. I must say this was another boring presentation but yet very useful. It's a little bit complicated explain how to debug applications without Visual Studio. Basically it's all about memory dumps and analyze it. There are a few applications to help in that. So I simply post what applications they recommended and search about it (read: google it), ok?

A little word about Filipe Prezado and João Loureiro. My guess is that they are REALLY GOOD debugging applications and giving support. But in terms of a presentation they have to involve their audience a little bit more.

NOTE: While looking for the links of the above applications I've found this similar presentation.

DEV08 - Criação de Providers LINQ Personalizados (LINQ To Anything) (link)

Last presentation of the event and another Bart's session. And I was to tired to take notes :) But it was.

Conclusions

Best presentation: For me the best presentation was the "Software + Services: The Convergence of SaaS, SOA and Web 2.0".

Worst presentation: Sorry, but I have to say that it was "Construíndo Soluções EDI/AS2 com o Microsoft Biztalk Server 2006 R2".

From 0 to 10, I'm giving 8.5 rate to this year Techdays. It was better than last year's but I think that still has to improve. A little word about Raymond Chen's presentation and the work that Techdays organization had to brought him to us. It was very nice. Something to remember for the future.

Until next time ;)

 

Technorati Tags:

posted @ Thursday, April 03, 2008 3:53 PM | Feedback (0)

Tuesday, April 01, 2008

BizTalk Server Operations Guide

From time to time I get this questions:

  • "How can I know if the BizTalk is the right tool for the job?"
  • "How to plan for disaster recovery?"
  • "How to configure BizTalk for high availability?"
  • "How to have different environments with BizTalk?"
  • "What should I backup in the BizTalk databases and how?"
  • "How to use log shipping? Is it possible?"
  • "How to deploy using scripts?"

Certainly you have also asked yourself this sort of questions. Well, lucky for you there's now a great document with the answer to this questions and to a lot more. You can get it here (there's a PDF, DOCX or CHM version).

This document was assembled based on real-world experiences. It's called the "BizTalk Server Operations Guide".

For more details check the BizTalk Server Team blog.

Until next time ;)

 

posted @ Tuesday, April 01, 2008 2:14 PM | Feedback (0)

Tuesday, March 25, 2008

It's always my fault!

Sometimes (in fact, most of the times) it's hard to say that the fault is mine. Probably the first words out of my mouth will be "It's theirs fault", specially in integration projects. Tiago have banged some considerable times in my head because of this. I know he's right. I should ALWAYS first check if the error is mine and assume that it could be, before blaming on someone else.

This thought came to mind when I read Jeff Atwood's post. In some point of his post says:

...If you're going to subject the world to your software, take full responsibility for its failures. Even if, technically speaking, you don't have to. That's how you earn respect and credibility...If the problem lies in some other bit of code that you don't control, you'll not only have learned essential troubleshooting and diagnostic skills, you'll also have an audit trail of evidence to back up your claims, too. This is certainly a lot more work than shrugging your shoulders and pointing your finger at the OS, the tools, or the framework-- but it also engenders a sense of trust and respect you're unlikely to achieve through fingerpointing and evasion...

I'll certainly struggle to follow this thoughts.

So, young programmers be humble and think that the fault is always yours.

Until next time ;)

posted @ Tuesday, March 25, 2008 4:49 PM | Feedback (0)

Powered by: