<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2855987558321942179</id><updated>2012-02-17T00:11:20.261-02:00</updated><category term='c#'/><category term='jquery'/><category term='tools'/><category term='javascript'/><category term='java'/><category term='wpf'/><category term='reference'/><category term='best practices'/><category term='mac os x'/><category term='web development'/><category term='core i7'/><category term='architecture'/><category term='quality control'/><category term='caliburn'/><category term='windows 7'/><category term='delphi'/><category term='operating system'/><title type='text'>Rafael Romão</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2855987558321942179.post-3774448141625642578</id><published>2010-01-07T10:09:00.057-02:00</published><updated>2011-09-04T11:50:15.116-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='caliburn'/><title type='text'>Building a Shell Application using Caliburn</title><content type='html'>I'm planing to use &lt;a href="http://caliburn.codeplex.com/"&gt;Caliburn &lt;/a&gt;for a large project this year, and the first thing I need to do is to implement the infrastructure for the WPF applications.  My favorite user interface model is, for years now, the Shell model, which allows one active screen at a time plus some secondary popup screens and eventual dialog windows.  Caliburn is highly customizable and one of the pieces you can choose to replace is its DefaultWindowManager, which is the object responsible for displaying views in a dialog or popup screen.  I will use this post to show my implementation of the Shell model using Caliburn, which I think can also be used as a Caliburn Getting Started.  I will assume you have already read the &lt;a href="http://caliburn.codeplex.com/documentation"&gt;Caliburn documentation&lt;/a&gt; and is familiar with the &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx"&gt;MVVM&lt;/a&gt; pattern and the Shell Application Model.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Step 1: Create the project&lt;/span&gt;:  The first thing to do is to open VS2008 and create a WPFApplication.  I'm assuming you have caliburn installed, so add references to the following assemblies: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Caliburn.Core;&lt;/li&gt;
&lt;li&gt;Caliburn.PresentationFramework;&lt;/li&gt;
&lt;li&gt;Microsoft.Practices.ServiceLocation.&lt;/li&gt;
&lt;/ul&gt;These assemblies are available in the Bin folder of the Caliburn instalation.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Step 2: Create the infrastructure types:&lt;/span&gt;  The second step is to create three types that will contain all the infrastructure code for using Caliburn as a Shell application.  &lt;span style="font-style: italic; font-weight: bold;"&gt;WindowManager&lt;/span&gt;  Caliburn uses a DefaultWindowManager to show dialog and popup windows, but it does not allow us to customize these windows' properties. In order to do so, will extend the DefaultWindowManager and configure Caliburn to use our WindowManager instead of the default. &lt;br /&gt;
&lt;pre class="_brush: csharp"&gt;
public class WindowManager : DefaultWindowManager, IWindowManager {
    public WindowManager(IViewStrategy viewStrategy, IBinder binder)
        : base(viewStrategy, binder) {
    }

    //Display a view in a dialog (modal) window
    public new bool? ShowDialog(object rootModel, 
                                object context, 
                                Action&amp;lt;ISubordinate, Action&amp;gt; handleShutdownModel) {
        var window = base.CreateWindow(rootModel, context, handleShutdownModel);
        window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
        window.WindowStyle = WindowStyle.ToolWindow;
        window.Title = ((IPresenter)rootModel).DisplayName;
        return window.ShowDialog();
     }

    //Display a view in a popup (non-modal) window
    public new void Show(object rootModel, 
                         object context, 
                         Action&amp;lt;ISubordinate, Action&amp;gt; handleShutdownModel) {
        var window = base.CreateWindow(rootModel, context, handleShutdownModel);
        window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
        window.Title = ((IPresenter)rootModel).DisplayName;
        window.Show();
    }
}
&lt;/pre&gt;
This window manager reintroduces the Show and ShowDialog methods, which we can use  to customize the popup and dialog windows.  &lt;span style="font-style: italic; font-weight: bold;"&gt;BaseShellViewModel&lt;/span&gt;  Caliburn allows us to inform a view model to be used as an application shell.  Let's define this view model: &lt;br /&gt;
&lt;pre class="_brush: csharp"&gt;
public abstract class BaseShellViewModel : MultiPresenterManager {
    protected IServiceLocator Locator { get; private set; }

    public BaseShellViewModel(IServiceLocator locator) {
        this.Locator = locator;
    }
    public void Show&amp;lt;T&amp;gt;() where T : IPresenter {
        this.ShutdownCurrent();
        this.Open(Locator.GetInstance&amp;lt;T&amp;gt;());
    }
    public void ShowDialog&amp;lt;T&amp;gt;() where T : IPresenter {
        Locator.GetInstance&amp;lt;IWindowManager&amp;gt;().ShowDialog(
            Locator.GetInstance&amp;lt;T&amp;gt;()
        );
    }
    public void Popup&amp;lt;T&amp;gt;() where T : IPresenter {
        Locator.GetInstance&amp;lt;IWindowManager&amp;gt;().Show(
            Locator.GetInstance&amp;lt;T&amp;gt;()
        );
    }
}
&lt;/pre&gt;Look that this base shell view model publish methods to open views in the shell, in a popup window and as a dialog.  &lt;span style="font-weight: bold;"&gt;BaseApplication&lt;/span&gt;  One of the ways to use Caliburn is to make your WPF application extend the CaliburnApplication class.  Here we'll create a base application class, which extends CaliburnApplication, and make our WPF applications extend this base application, keeping all Caliburn configuration within this base class. &lt;br /&gt;
&lt;pre class="_brush: csharp"&gt;
public abstract class BaseApplication&amp;lt;TShellViewModel&amp;gt; : CaliburnApplication 
    where TShellViewModel : BaseShellViewModel {

    protected override object CreateRootModel() {
        var binder = Container.GetInstance&amp;lt;DefaultBinder&amp;gt;();
        binder.EnableBindingConventions();
        binder.EnableMessageConventions();
        return Container.GetInstance&amp;lt;TShellViewModel&amp;gt;();
    }

    protected override void ConfigurePresentationFramework(
        PresentationFrameworkModule module
    ) {
        module.UsingWindowManager&amp;lt;WindowManager&amp;gt;();
    }
}
&lt;/pre&gt;As we need to inform Caliburn which is our shell view model, I introduced a generic parameter for that. Note also the call to UsingWindowManager, which informs Caliburn that it must use our WindowManager instead of the default one.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Step 3: Setup the application&lt;/span&gt;  Now that we have the infrastructure code, let's configure our WPF application to use it.  &lt;span style="font-weight: bold;"&gt;The ShellViewModel&lt;/span&gt;  The first thing to do is to create our ShellViewModel. Create a folder named ViewModels in the project and a class named ShellViewModel inside it. Make this class extend our BaseShellViewModel. &lt;br /&gt;
&lt;pre class="_brush: csharp"&gt;
public class ShellViewModel : BaseShellViewModel {
    public ShellViewModel(IServiceLocator locator)
        :base(locator) {
    }
}
&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;The ShellView&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;  Now that we have a ShellViewModel, let's create our ShellView. Create a folder named Views in the project and a WPF Window called ShellView inside it. Change this view according to the code below. This will make our view act as a dock station for the application views. &lt;br /&gt;
&lt;pre class="_brush: xml"&gt;
&amp;lt;window minheight="768" minwidth="1024" title="Symbion" 
    windowstartuplocation="CenterScreen" windowstate="Maximized" 
    x:class="CaliburnDemo.Views.ShellView" 
    xmlns:cal="http://www.caliburnproject.org" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&amp;gt;
    &amp;lt;dockpanel&amp;gt;
        &amp;lt;dockpanel background="Gray" name="DockViewPanel"&amp;gt;
            &amp;lt;itemscontrol itemssource="{Binding Presenters}"&amp;gt;
                &amp;lt;itemscontrol.itemtemplate&amp;gt;
                    &amp;lt;datatemplate&amp;gt;
                        &amp;lt;contentcontrol cal:view.model="{Binding}"&amp;gt;&amp;lt;/contentcontrol&amp;gt; 
                    &amp;lt;/datatemplate&amp;gt;
                &amp;lt;/itemscontrol.itemtemplate&amp;gt;
            &amp;lt;/itemscontrol&amp;gt;
        &amp;lt;/dockpanel&amp;gt;
    &amp;lt;/dockpanel&amp;gt;
&amp;lt;/window&amp;gt;
&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;App.xaml and App.xaml.cs&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;  The last thing to do is to make our application to extend our BaseApplication. &lt;br /&gt;
&lt;pre class="_brush: csharp"&gt;
public partial class BaseApplication : BaseApplication&amp;lt;ShellViewModel&amp;gt; { 
}

public partial class App : BaseApplication {
}
&lt;/pre&gt;As WPF does not support generics, we need to workaround it by creating a concrete base class to our application, fixing our ShellViewModel as the generic parameter. Now change the app markut to reflect the above change. &lt;br /&gt;
&lt;pre class="_brush: xml"&gt;
&amp;lt;this:baseapplication x:class="CaliburnDemo.App" 
    xmlns:this="clr-namespace:CaliburnDemo"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&amp;gt;
    &amp;lt;application.resources&amp;gt;

    &amp;lt;/application.resources&amp;gt;
&amp;lt;/this:baseapplication&amp;gt;
&lt;/pre&gt;Everthing set up!&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Step 4: Create a test view&lt;/span&gt;  Now that we have everything set up, let's create a test view and run our application.  Create a view model, in the ViewModels folder, named TestViewModel. Make it implement the IPresenter interface and be sure to remove the exceptions from the generated interface implementation methods. Give it a DisplayName too.  Create a UserControl, in the Views folder, named TestView and paint it some color to mark it.  Add a method to our ShellViewModel as follows: &lt;br /&gt;
&lt;pre class="_brush: csharp"&gt;
public void ShowViews() {
    Show&amp;lt;TestViewModel&amp;gt;();
    Popup&amp;lt;TestViewModel&amp;gt;();
    ShowDialog&amp;lt;TestViewModel&amp;gt;();
}
&lt;/pre&gt;Add a button to the ShellView as follows: &lt;br /&gt;
&lt;pre class="_brush: xml"&gt;
&amp;lt;button cal:message.attach="ShowViews" height="50" name="ShowViews" width="178"&amp;gt;Show Views&amp;lt;/button&amp;gt;
&lt;/pre&gt;Run &lt;a href="http://sites.google.com/site/rafaelromao/CaliburnDemo.zip?attredirects=0&amp;amp;d=1"&gt;it&lt;/a&gt; and have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2855987558321942179-3774448141625642578?l=rafaelromao-intl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/3774448141625642578/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://rafaelromao-intl.blogspot.com/2010/01/building-shell-application-using.html#comment-form' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/3774448141625642578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/3774448141625642578'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/2010/01/building-shell-application-using.html' title='Building a Shell Application using Caliburn'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2855987558321942179.post-8258741442917172606</id><published>2009-11-09T09:34:00.006-02:00</published><updated>2009-11-10T16:38:23.197-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>What is Software Architecture</title><content type='html'>When people question me about my main interests in software development, or about exactly what I do in my job, I use to say I like to act as a Software Architect, which is a pompous title, and most people don't take it seriously, by finding it is just a job title and not a real role in the development process.

Probably most of you who know from inside a software development process know what is the job of a Software Architect, but some ones might not.

This week I found &lt;a href="http://msdn.microsoft.com/en-us/library/ee658093.aspx"&gt;this great reference&lt;/a&gt;, which explains exactly what I feel to be a Software Architecture, as well as what is the job of a Software Architect.

So, that is the answer for what I like to do for living.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2855987558321942179-8258741442917172606?l=rafaelromao-intl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/8258741442917172606/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/11/what-is-software-architecture.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/8258741442917172606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/8258741442917172606'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/11/what-is-software-architecture.html' title='What is Software Architecture'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2855987558321942179.post-214235696858657053</id><published>2009-09-09T08:52:00.003-03:00</published><updated>2009-09-10T08:58:21.092-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><title type='text'>Scott Hanselman's 2009 Ultimate Developer and Power Users Tool List for Windows</title><content type='html'>As I said in my first post, this blog will also serve as a kind of &lt;a href="http://del.icio.us/"&gt;delicious &lt;/a&gt;for me, so you will see me posting many references to other blogs' posts.

One reference I couldn't let pass is &lt;a href="http://www.hanselman.com/blog/ScottHanselmans2009UltimateDeveloperAndPowerUsersToolListForWindows.aspx" target="_blank"&gt;this&lt;/a&gt; post of &lt;a href="http://www.hanselman.com/blog" target="_blank"&gt;Scott Hanselman's blog&lt;/a&gt;: An amazing &lt;a href="http://www.hanselman.com/blog/ScottHanselmans2009UltimateDeveloperAndPowerUsersToolListForWindows.aspx" target="_blank"&gt;list of tools&lt;/a&gt; for Windows developers and power users.

For sure they worth a try.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2855987558321942179-214235696858657053?l=rafaelromao-intl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/214235696858657053/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/09/scott-hanselmans-2009-ultimate.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/214235696858657053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/214235696858657053'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/09/scott-hanselmans-2009-ultimate.html' title='Scott Hanselman&apos;s 2009 Ultimate Developer and Power Users Tool List for Windows'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2855987558321942179.post-5247071132989793401</id><published>2009-08-28T22:04:00.005-03:00</published><updated>2009-09-05T15:41:43.438-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>My Own Code Snippet Formatter</title><content type='html'>&lt;p&gt;Some weeks ago when I needed to publish code snippets here for the first time, I looked for plug-ins for Windows Live Writer and found two good alternatives, from which I decided to use the simpler one.&lt;/p&gt;  &lt;p&gt;After that, I started to build my own code snippet formatter. Only for C# snippets, and using JavaScript, that is far from what I'm used to write.&lt;/p&gt;  &lt;p&gt;After some weeks working on it in my spare time, it's finally usable.&lt;/p&gt;  &lt;p&gt;It is available &lt;a onclick="javascript: pageTracker._trackPageview('/downloads/CSCodeSnippetFormatter')" href="http://sites.google.com/site/rafaelromao/CSCodeSnippetFormatter.htm"&gt;here&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;But, if you want a true syntax highlight tool, try &lt;a onclick="javascript: pageTracker._trackPageview('http://www.dreamprojections.com/syntaxhighlighter')" href="http://www.dreamprojections.com/syntaxhighlighter" target='_blank'&gt;this one&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2855987558321942179-5247071132989793401?l=rafaelromao-intl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/5247071132989793401/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/08/my-own-code-snippet-formatter.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/5247071132989793401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/5247071132989793401'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/08/my-own-code-snippet-formatter.html' title='My Own Code Snippet Formatter'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2855987558321942179.post-1202781600752740597</id><published>2009-08-23T19:59:00.001-03:00</published><updated>2009-08-23T19:59:41.345-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='quality control'/><title type='text'>How to define the priority of a bug</title><content type='html'>&lt;p&gt;Some time ago a tester told me we didn't have a formal criteria to define the priority of a bug, and that the few criteria he know were not easy to use. After some thoughts, we decided to work together to define a criteria that would be good for us.&lt;/p&gt;  &lt;p&gt;The result was a compact definition for five priority levels for bug fixes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Minimal: A bug is said to be of minimal priority when its occurrence:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Do not cause any damage to the stored data;&lt;/li&gt;      &lt;li&gt;Do not interrupt the usage of the software;&lt;/li&gt;      &lt;li&gt;Is hard to be observed* and does not bother the user.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Low: A bug is said to be of low priority when its occurrence:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Do not cause any damage to the stored data;&lt;/li&gt;      &lt;li&gt;Do not interrupt the usage of the software;&lt;/li&gt;      &lt;li&gt;Is easy to be observed but does not bother the user.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Normal: A bug is said to be of normal priority when its occurrence:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Do not cause any damage to the stored data;&lt;/li&gt;      &lt;li&gt;Do not interrupt the usage of the software;&lt;/li&gt;      &lt;li&gt;Is easy to be observed and bothers the user.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;High: A bug is said to be of high priority when its occurrence:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Causes some damage to the stored data or interrupts the usage of the software;&lt;/li&gt;      &lt;li&gt;Is hard to be observed.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Maximal: A bug is said to be of maximal priority when its occurrence:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Causes some damage to the stored data or interrupts the usage of the software;&lt;/li&gt;      &lt;li&gt;Is easy to be observed.&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;* A bug is said to be of hard observation when it only occurs in extraordinary use cases, it means, in situations that are rarely provoked by the user.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2855987558321942179-1202781600752740597?l=rafaelromao-intl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/1202781600752740597/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/08/how-to-define-priority-of-bug.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/1202781600752740597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/1202781600752740597'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/08/how-to-define-priority-of-bug.html' title='How to define the priority of a bug'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2855987558321942179.post-1211622269853743682</id><published>2009-08-15T17:39:00.003-03:00</published><updated>2009-08-15T18:01:02.811-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Parsing a Delphi DFM File</title><content type='html'>&lt;p&gt;Some time ago a friend asked me to help him to parse a DFM file into .NET objects. 
We tried to find something in the web that does the job but no success, so I accepted the challenge and wrote the parser he needed.&lt;/p&gt;  &lt;p&gt;If for some reason you need a DFM parser, or just for curiosity, you can download it from &lt;a href="http://sites.google.com/site/rafaelromao/DfmParser.cs" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Here is an example of how to use it:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; &lt;span class="typ"&gt;Program&lt;/span&gt; { &lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;    static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args) { &lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;var&lt;/span&gt; fileName = &lt;span class="str"&gt;@"c:\Unit1.dfm"&lt;/span&gt;; &lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;var&lt;/span&gt; dfmParser = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="typ"&gt;DfmParser&lt;/span&gt;(fileName); &lt;/pre&gt;&lt;pre class="alt"&gt;        dfmParser.ReadFile(); &lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; node &lt;span class="kwrd"&gt;in&lt;/span&gt; dfmParser.Nodes) { &lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (node.PropertyType == &lt;span class="str"&gt;"string"&lt;/span&gt;) { &lt;/pre&gt;&lt;pre&gt;                node.PropertyValue = &lt;span class="str"&gt;"'Hello World!';"&lt;/span&gt;; &lt;/pre&gt;&lt;pre class="alt"&gt;            } &lt;/pre&gt;&lt;pre&gt;        } &lt;/pre&gt;&lt;pre class="alt"&gt;        dfmParser.SaveFile(); &lt;/pre&gt;&lt;pre&gt;    } &lt;/pre&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The example above loads this file:&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;object&lt;/span&gt; Form1: TForm1&lt;/pre&gt;&lt;pre&gt;  Left = 0&lt;/pre&gt;&lt;pre class="alt"&gt;  Top = 0&lt;/pre&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;object&lt;/span&gt; Label1: TLabel&lt;/pre&gt;&lt;pre class="alt"&gt;    Left = 8&lt;/pre&gt;&lt;pre&gt;    Top = 40&lt;/pre&gt;&lt;pre class="alt"&gt;    Caption = &lt;span class="str"&gt;'Label1'&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;object&lt;/span&gt; Label2: TLabel&lt;/pre&gt;&lt;pre&gt;    Left = 48&lt;/pre&gt;&lt;pre class="alt"&gt;    Top = 40&lt;/pre&gt;&lt;pre&gt;    Caption = &lt;span class="str"&gt;'Label1'&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And rewrites like this:&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;object&lt;/span&gt; Form1: TForm1&lt;/pre&gt;&lt;pre&gt;  Left = 0&lt;/pre&gt;&lt;pre class="alt"&gt;  Top = 0&lt;/pre&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;object&lt;/span&gt; Label1: TLabel&lt;/pre&gt;&lt;pre class="alt"&gt;    Left = 8&lt;/pre&gt;&lt;pre&gt;    Top = 40&lt;/pre&gt;&lt;pre class="alt"&gt;    Caption = &lt;span class="str"&gt;'Hello World!'&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;object&lt;/span&gt; Label2: TLabel&lt;/pre&gt;&lt;pre&gt;    Left = 48&lt;/pre&gt;&lt;pre class="alt"&gt;    Top = 40&lt;/pre&gt;&lt;pre&gt;    Caption = &lt;span class="str"&gt;'Hello World!'&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you find some use for this, enjoy :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2855987558321942179-1211622269853743682?l=rafaelromao-intl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/1211622269853743682/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/08/parsing-delphi-dfm-file.html#comment-form' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/1211622269853743682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/1211622269853743682'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/08/parsing-delphi-dfm-file.html' title='Parsing a Delphi DFM File'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2855987558321942179.post-2227563797013357671</id><published>2009-07-23T00:44:00.002-03:00</published><updated>2009-07-23T00:45:43.938-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><title type='text'>Best Practices for Individual Contribution</title><content type='html'>&lt;p&gt;Today, in his blog, &lt;a href="http://www.hanselman.com/blog/BestPracticesForIndividualContribution.aspx" target="_blank"&gt;Scott Hanselman&lt;/a&gt; is talking about how to be a good individual contributor.&lt;/p&gt;  &lt;p&gt;Whatever it means, what he shows  is a good bunch of best practices for how to be a good professional. I was surprised to see how much I agree with his points, and I only did not see me in the situations he describes for the one about twitter, cause I don’t tweet, but yet in this case, I completely agree with the general rule.&lt;/p&gt;  &lt;p&gt;Below I’m quoting his points, but you need to see the &lt;a href="http://www.hanselman.com/blog/BestPracticesForIndividualContribution.aspx" target="_blank"&gt;original post&lt;/a&gt;, as there are many good contributions also in the comments section.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;&lt;b&gt;&lt;span style="color:#808080;"&gt;Consciously manage your personal brand.&lt;/span&gt;&lt;/b&gt;&lt;/em&gt;      &lt;ul&gt;       &lt;li&gt;&lt;em&gt;&lt;span style="color:#808080;"&gt;You work here to help the company, but also yourself. No one will manage your “personal brand” except you. How are you perceived? Do you know? Take negative feedback gracefully, and implement change. Rinse, repeat.&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;b&gt;&lt;span style="color:#808080;"&gt;Push the Limits&lt;/span&gt;&lt;/b&gt;&lt;/em&gt;      &lt;ul&gt;       &lt;li&gt;&lt;em&gt;&lt;span style="color:#808080;"&gt;Chris Sells told me once, If you’re not getting in trouble with your boss at least twice a year, you’re likely not pushing the envelope hard enough. Two slaps a year might be the cost for 10 successes. If you’re not moving forward, well, you’re not moving forward.&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;a href="http://blog.jonudell.net/2007/04/10/too-busy-to-blog-count-your-keystrokes/"&gt;&lt;strong&gt;&lt;span style="color:#808080;"&gt;Conserve your keystrokes&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style="color:#808080;"&gt;.&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt;      &lt;ul&gt;       &lt;li&gt;&lt;em&gt;&lt;span style="color:#808080;"&gt;When you’re emailing a single person or a reasonably sized cc: list, ask yourself, are you wasting your time? Is this a message that 10 people need to see, or 10,000? Is email where you should be spending your time. Actively be aware of the number of people you communicate with , and the relative level of influence. Is a blog post seen by 50,000 more or less valuable than a single email to your skip-level? Only you can answer, but only if you’re consciously trying to conserve your keystrokes. Your fingers DO have an expiration date; there’s a finite number of keystrokes left, use them wisely.&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;a href="http://www.hanselman.com/blog/DontGiveBileAPermalinkFindingBalanceWithinTheNoAssholeRule.aspx"&gt;&lt;strong&gt;&lt;span style="color:#808080;"&gt;Don’t give bile a permalink&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style="color:#808080;"&gt;. &lt;/span&gt;&lt;/strong&gt;&lt;/em&gt;      &lt;ul&gt;       &lt;li&gt;&lt;em&gt;&lt;span style="color:#808080;"&gt;While you’re on the clock, think about what you tweet and FB. It only takes one bad link to undo a year’s work. Same goes for tweeting product launches before they’ve launched. &lt;/span&gt;&lt;/em&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;b&gt;&lt;span style="color:#808080;"&gt;Write down what you’re trying to accomplish and hang it on the wall.&lt;/span&gt;&lt;/b&gt;&lt;/em&gt;      &lt;ul&gt;       &lt;li&gt;&lt;em&gt;&lt;span style="color:#808080;"&gt;Make T-Shirts. Tell your spouse and kids. If you’re working towards a goal, tell people. It’ll keep you honest and it’ll motivate you. Saying things out loud help make them reality.&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;b&gt;&lt;span style="color:#808080;"&gt;Manage Up&lt;/span&gt;&lt;/b&gt;&lt;/em&gt;      &lt;ul&gt;       &lt;li&gt;&lt;em&gt;&lt;span style="color:#808080;"&gt;Are your commitments aligned with your boss and your bosses boss? Do you have visibility into their commitments? If not, ask for them. Make sure your accomplishments are making yourself, and your boss, look good.&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;b&gt;&lt;span style="color:#808080;"&gt;Have a System to Manage Information Flow&lt;/span&gt;&lt;/b&gt;&lt;/em&gt;      &lt;ul&gt;       &lt;li&gt;&lt;em&gt;&lt;span style="color:#808080;"&gt;If you’ve got 1000 emails in your Inbox, it’s not an Inbox. It’s a pile of crap. Have a system, any system, to triage your work. Any item in your inbox should be processed: Do it, drop it, defer it, delegate it. There are no other actions to take. Are you effectively managing your information flow? Try scheduling time for email on your calendar.&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Remember, don’t lose the &lt;a href="http://www.hanselman.com/blog/BestPracticesForIndividualContribution.aspx" target="_blank"&gt;original post&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2855987558321942179-2227563797013357671?l=rafaelromao-intl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/2227563797013357671/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/07/best-practices-for-individual.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/2227563797013357671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/2227563797013357671'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/07/best-practices-for-individual.html' title='Best Practices for Individual Contribution'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2855987558321942179.post-5385897491227317298</id><published>2009-07-18T20:58:00.002-03:00</published><updated>2009-08-22T17:49:06.565-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><title type='text'>JQuery Framework</title><content type='html'>&lt;p&gt;As I don’t work with web development at the moment, and did few things related in the past, &lt;a href="http://jquery.com/" target="_blank"&gt;JQuery&lt;/a&gt; is something completely apart of what I’m used to work with, but at the same time, as I intend to work with it in the future, it is something that interests me a lot.&lt;/p&gt;  &lt;p&gt;This month, &lt;a href="http://msmvps.com/blogs/luisabreu" target="_blank"&gt;Luis Abreu&lt;/a&gt; is writing a series of posts in his blog that gives a good introduction for that amazing framework and then I decided to post a reference for such posts here, for future use, and for the appreciation of the readers.&lt;/p&gt;  &lt;p&gt;I’ll keep it up to date as soon as new posts come up.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/10/jquery-getting-started.aspx" target="_blank"&gt;JQuery: getting started&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/11/jquery-understanding-the-jquery-function.aspx" target="_blank"&gt;JQuery: understanding the JQuery function&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/13/jquery-chaining.aspx" target="_blank"&gt;JQuery: chaining&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/13/jquery-getting-started-with-selectors.aspx" target="_blank"&gt;JQuery: getting started with selectors&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/14/jquery-more-on-selectors.aspx" target="_blank"&gt;JQuery: more on selectors&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/15/jquery-custom-selectors.aspx" target="_blank"&gt;JQuery: custom selectors&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/15/jquery-understanding-how-selectors-are-implemented.aspx" target="_blank"&gt;JQuery: understanding how selectors are implemented&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/16/jquery-working-with-the-wrapped-html-elements-part-i.aspx" target="_blank"&gt;JQuery: working with the wrapped HTML elements – part I&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/17/jquery-working-with-the-wrapped-html-elements-part-ii.aspx" target="_blank"&gt;JQuery: working with the wrapped HTML elements – part II&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/17/jquery-working-with-the-wrapped-set-part-iii.aspx" target="_blank"&gt;JQuery: working with the wrapped set – part III&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/18/jquery-interacting-with-the-wrapped-set-part-iv.aspx" target="_blank"&gt;JQuery: interacting with the wrapped set – part IV&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/18/jquery-working-with-the-wrapped-set-part-v.aspx" target="_blank"&gt;JQuery: working with the wrapped set – part V&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/19/jquery-interacting-with-the-wrapped-set-part-vi.aspx" target="_blank"&gt;JQuery: interacting with the wrapped set- part VI&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://feedproxy.google.com/%7Er/Laneten/%7E3/RZNvHRgEhvE/jquery-creating-new-html-snippets.aspx" target="_blank"&gt;JQuery: creating new HTML snippets&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/20/jquery-interacting-with-the-wrapped-set-part-vii.aspx"&gt;JQuery: interacting with the wrapped set – part VII&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/20/jquery-interacting-with-the-wrapped-set-part-viii.aspx"&gt;JQuery: interacting with the wrapped set – part VIII&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://feedproxy.google.com/%7Er/Laneten/%7E3/Pw6CLzi-umg/jquery-interacting-with-the-wrapped-set-part-ix.aspx"&gt;JQuery – interacting with the wrapped set – part IX&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/24/jquery-getting-started-with-events.aspx"&gt;JQuery: getting started with events&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/24/jquery-more-on-events.aspx"&gt;JQuery: more on events&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/26/jquery-unbinding-with-anonymous-functions.aspx"&gt;JQuery: unbinding with anonymous functions&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/26/jquery-one-shot-event-handlers.aspx"&gt;JQuery: one-shot event handlers&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/29/jquery-shortcuts-for-the-most-used-events.aspx"&gt;JQuery: shortcuts for the most used events&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/29/jquery-triggering-events.aspx"&gt;JQuery: triggering events&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/29/jquery-binding-handlers-for-current-and-future-element-s-events.aspx"&gt;JQuery: binding handlers for current and future element’s events&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/07/30/jquery-dom-0-level-event-model.aspx"&gt;JQuery: DOM 0 level event model&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/01/jquery-dom-2-level-event-model.aspx"&gt;JQuery: DOM 2 level event model&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/03/jquery-dom-3-level-event-model.aspx"&gt;JQuery: DOM 3 level event model&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/03/jquery-dom-level-event-model-support.aspx"&gt;JQuery: DOM level event model support&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/04/jquery-more-on-triggering-events.aspx"&gt;JQuery: more on triggering events&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/05/jquery-more-on-the-triggerhandler-method.aspx"&gt;JQuery: more on the triggerHandler method&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/05/jquery-common-event-pairs-helpers.aspx"&gt;JQuery: common “event pairs” helpers&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/07/jquery-utilities-functions-i-browser-detection.aspx"&gt;JQuery: utilities functions I – browser detection&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/07/jquery-utility-functions-ii-trimming-strings.aspx"&gt;JQuery: utility functions II – trimming strings&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/07/jquery-utility-functions-testing-helpers.aspx"&gt;JQuery: utility functions – testing helpers&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/07/jquery-utility-functions-iv-interacting-through-arrays.aspx"&gt;JQuery: utility functions IV – interacting through arrays&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/10/jquery-utility-functions-vi-checking-if-an-item-is-in-an-array.aspx"&gt;JQuery: utility functions VI – checking if an item is in an array&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/10/jquery-utility-functions-vii-concatenating-arrays.aspx"&gt;JQuery: utility functions VII – concatenating arrays&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/10/jquery-utility-functions-viii-creating-arrays-from-other-objects.aspx"&gt;JQuery: utility functions VIII – creating arrays from other objects&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/10/jquery-utility-functions-ix-transforming-arrays.aspx"&gt;JQuery: utility functions IX – transforming arrays&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/10/jquery-utility-functions-x-extending-objects.aspx"&gt;JQuery: utility functions X – extending objects&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/11/jquery-getting-started-with-effects.aspx"&gt;JQuery: getting started with effects&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/12/jquery-fading-elements.aspx"&gt;JQuery: fading elements&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/13/jquery-sliding.aspx"&gt;JQuery: sliding&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/14/jquery-running-custom-animations.aspx"&gt;JQuery: running custom animations&lt;/a&gt;; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/17/jquery-getting-started-with-ajax.aspx"&gt;JQuery: getting started with AJAX&lt;/a&gt;;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/19/jquery-the-get-and-post-methods.aspx"&gt;JQuery: the $.get and $.post methods&lt;/a&gt;;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/19/jquery-the-getjson-method.aspx"&gt;JQuery: the $.getJson method&lt;/a&gt;;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/19/jquery-deferred-script-loading.aspx"&gt;JQuery: deferred script loading&lt;/a&gt;;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/08/19/jquery-full-control-with-the-ajax-function.aspx"&gt;JQuery: full control with the $.ajax function&lt;/a&gt;;&lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2855987558321942179-5385897491227317298?l=rafaelromao-intl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/5385897491227317298/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/07/jquery-framework.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/5385897491227317298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/5385897491227317298'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/07/jquery-framework.html' title='JQuery Framework'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2855987558321942179.post-4490502889055165254</id><published>2009-07-17T18:45:00.002-03:00</published><updated>2009-07-17T22:29:08.613-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='core i7'/><category scheme='http://www.blogger.com/atom/ns#' term='operating system'/><title type='text'>Windows 7 – First Impressions</title><content type='html'>&lt;p&gt;In setember 2007, I bought my first Mac. A 13” entry model MacBook that cost me, in Brazil, something like US$ 1700,00. It was expensive, but a good price for Brazil.&lt;/p&gt;  &lt;p&gt;After that, I sold my 1 year old PC and stopped using windows at home. Only a few times I recurred to Bootcamp to run Windows for some small jobs.&lt;/p&gt;  &lt;p&gt;Earlier this year, I started to think about to buy a new Mac, this time a top level MacBook Pro, as soon as Snow Leopard, and maybe a Nehalen upgrade, are available.&lt;/p&gt;  &lt;p&gt;Turns out that I put my feet on the Earth, did a cost survey and noticed that now, for the a little more than I payed for my entry model MacBook, I would be able to build a Core i7 PC, almost equivalent to the Mac Pros. It means, I can keep my macbook, that is still good, and build a new system for the half of the price I would pay for a MacBook Pro, and with much more performance.&lt;/p&gt;  &lt;p&gt;But if I buy a PC, I’ll not be able to continue using the OS I’m loving, so the issue now is to give up or not of Mac OS X.&lt;/p&gt;  &lt;p&gt;Windows XP and Vista are not good competitors, and I don’t like linuxes. Then I remembered Windows 7 RC was out, and decided to give it a try.&lt;/p&gt;  &lt;p&gt;After a month using it, I can say Windows 7 is an awesome system. Maybe not so fast and stable as Leopard, but so easy to use and atractive as it. And also, until where I could go with the RC, so much faster and stable than Windows Vista.&lt;/p&gt;  &lt;p&gt;The UAC, that everyone uses to disable in Windows Vista, now works fine, it means, only when necessary.&lt;/p&gt;  &lt;p&gt;The new task bar is the most impressive of the new features, and it reminds me so much the Mac OS Dock, so I’m loving it. The only downside for me until now is that it is not possible to fix the Recicle Bin on it.&lt;/p&gt;  &lt;p&gt;The new window handling functions are good too. And obviously, there are several other improviments through the whole system.&lt;/p&gt;  &lt;p&gt;I think this time Microsoft is taking the right way.&lt;/p&gt;  &lt;p&gt;Hope it become better until the launch day.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2855987558321942179-4490502889055165254?l=rafaelromao-intl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/4490502889055165254/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/07/windows-7-first-impressions.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/4490502889055165254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/4490502889055165254'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/07/windows-7-first-impressions.html' title='Windows 7 – First Impressions'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2855987558321942179.post-1900763486515712492</id><published>2009-07-11T20:41:00.003-03:00</published><updated>2009-07-16T15:25:54.864-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>A comparative study of the Java and C# languages</title><content type='html'>&lt;p&gt;If you search the web for comparisons between the Java and C# programming languages, you will end up finding two great articles, among many others.&lt;/p&gt;&lt;p&gt;The first one is written by Dare Obasanjo, and available in his site &lt;a href="http://www.25hoursaday.com/CsharpVsJava.html" target="_blank"&gt;25 Hours A Day&lt;/a&gt;. The other, that is not so descriptive but provides great examples, is a code for code comparison available in the &lt;a href="http://www.javacamp.org/javavscsharp/" target="_blank"&gt;JavaCamp.org&lt;/a&gt; website.&lt;/p&gt;&lt;p&gt;I’m citing these two great resources because now I’ll post here the final work I did for my System Analysis course, that is also a comparison between such languages.&lt;/p&gt;&lt;p&gt;The main differences between my comparison and the one made by Dare Obasanjo is that the mine tries to use a didactic line, running from the easiest languages aspects to the most complex ones. Also, and a downside for most of the readers of this blog, is that it’s only available in portuguese.&lt;/p&gt;&lt;p&gt;If you speak portuguese, maybe you enjoy!&lt;/p&gt;&lt;p&gt;&lt;a title="http://sites.google.com/site/rafaelromao/monografia_rafaelromao-cei-as-t8.pdf" href="http://sites.google.com/site/rafaelromao/monografia_rafaelromao-cei-as-t8.pdf" target="_blank" onClick="javascript: pageTracker._trackPageview('/downloads/Monografia')"&gt;A comparative study of the Java and C# languages&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2855987558321942179-1900763486515712492?l=rafaelromao-intl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/1900763486515712492/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/07/comparative-study-of-java-and-c.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/1900763486515712492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/1900763486515712492'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/07/comparative-study-of-java-and-c.html' title='A comparative study of the Java and C# languages'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2855987558321942179.post-5903832642589740290</id><published>2009-07-08T19:48:00.006-03:00</published><updated>2009-07-17T18:49:29.119-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>Replacer</title><content type='html'>&lt;p&gt;One of the reasons I create this blog is to publish some smart small tools I built to make my fellows lives, and mine of course, easier.&lt;/p&gt;  &lt;p&gt;The most useful of such tools is Replacer.&lt;/p&gt;  &lt;p&gt;Replacer is a search and replace tool I built back in 2006 when I couldn’t find any such tool in the Internet that could make the job the way we needed.&lt;/p&gt;  &lt;p&gt;It is pretty simple to use and its main purpose is to search or replace, at the same time, several one line text blocks in all files that match the given filter criteria.&lt;/p&gt;  &lt;p&gt;The main features of Replacer are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Filter criteria to include and exclude files; &lt;/li&gt;    &lt;li&gt;Classic search options like case sensitive and whole word only; &lt;/li&gt;    &lt;li&gt;Search or replace several one line text blocks at the same time; &lt;/li&gt;    &lt;li&gt;Possibility to ignore comment blocks; &lt;/li&gt;    &lt;li&gt;Find only the first occurrency of the search text on each file; &lt;/li&gt;    &lt;li&gt;Create backups before to replace; &lt;/li&gt;    &lt;li&gt;Prompt a confirmation before each replacement; &lt;/li&gt;    &lt;li&gt;In the result screen, highlight the word that contains the search text; &lt;/li&gt;    &lt;li&gt;In the result screen, show the number of the row where the text was found. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The main limitations are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Only one line text blocks can be used *; &lt;/li&gt;    &lt;li&gt;One line comment blocks cannot be ignored, only blocks with a start and an end mark; &lt;/li&gt;    &lt;li&gt;Not fully tested, maybe it doen’t work with some kind of files; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As said before, it was not tested to become a sellable product, so if you want to use it, you must consider that statement that says it is distributed ‘as is’, offers no warranty and must be used by your own risk.&lt;/p&gt;  &lt;p&gt;&lt;a title="Replacer.zip" onclick="javascript: pageTracker._trackPageview('/downloads/Replacer')" href="http://sites.google.com/site/rafaelromao/Replacer.zip?attredirects=0"&gt;Replacer.zip&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hope you enjoy!&lt;/p&gt;  &lt;p&gt;&lt;span style="color: rgb(128, 128, 128);font-size:78%;" &gt;* I’ve started to work in a version that supports multiple line blocks, but it has introduced some bugs, so I’ll not publish it yet.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2855987558321942179-5903832642589740290?l=rafaelromao-intl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/5903832642589740290/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/07/replacer.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/5903832642589740290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/5903832642589740290'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/07/replacer.html' title='Replacer'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2855987558321942179.post-3936707849712528791</id><published>2009-07-06T23:51:00.006-03:00</published><updated>2009-07-10T13:57:31.078-03:00</updated><title type='text'>First Post</title><content type='html'>&lt;p&gt;Hi all!&lt;/p&gt;&lt;p&gt;There is a long time since I started to think about to create this blog.&lt;/p&gt;&lt;p&gt;Many things passed thru my mind that made me think: “It is a good thing for a blog post”, but I didn’t have a blog.&lt;/p&gt;&lt;p&gt;Why didn’t I simply create a blog and post such things?&lt;/p&gt;&lt;p&gt;The reason was the doubts. What blog engine to use? Restrict the content to tecnology/programming related? Which language to post in? English or Portuguese? And such doubts, among others, made me postpone the blog creation over and over.&lt;/p&gt;&lt;p&gt;Now, in the end of the first work day of my vacations, I decided to put the hands on and create it, using blogspot, restricting the content and posting in english, even though I would be much more confortable writing in my native language.&lt;/p&gt;&lt;p&gt;So that is it. From now on I’ll try to post some interesting articles and comments here.&lt;/p&gt;&lt;p&gt;Hope you enjoy!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2855987558321942179-3936707849712528791?l=rafaelromao-intl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rafaelromao-intl.blogspot.com/feeds/3936707849712528791/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/07/first-post.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/3936707849712528791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2855987558321942179/posts/default/3936707849712528791'/><link rel='alternate' type='text/html' href='http://rafaelromao-intl.blogspot.com/2009/07/first-post.html' title='First Post'/><author><name>Rafael Romão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-xGTocObaG7M/TlUvDUUj3sI/AAAAAAAAAKg/3lUNOEJ-IlA/s1600/3bb4829f7495beb2219fe8b15b4e34ac.png'/></author><thr:total>0</thr:total></entry></feed>
