09 novembro 2009
What is Software Architecture
09 setembro 2009
Scott Hanselman's 2009 Ultimate Developer and Power Users Tool List for Windows
28 agosto 2009
My Own Code Snippet Formatter
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.
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.
After some weeks working on it in my spare time, it's finally usable.
It is available here.
But, if you want a true syntax highlight tool, try this one.
Enjoy!
23 agosto 2009
How to define the priority of a bug
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.
The result was a compact definition for five priority levels for bug fixes:
- Minimal: A bug is said to be of minimal priority when its occurrence:
- Do not cause any damage to the stored data;
- Do not interrupt the usage of the software;
- Is hard to be observed* and does not bother the user.
- Low: A bug is said to be of low priority when its occurrence:
- Do not cause any damage to the stored data;
- Do not interrupt the usage of the software;
- Is easy to be observed but does not bother the user.
- Normal: A bug is said to be of normal priority when its occurrence:
- Do not cause any damage to the stored data;
- Do not interrupt the usage of the software;
- Is easy to be observed and bothers the user.
- High: A bug is said to be of high priority when its occurrence:
- Causes some damage to the stored data or interrupts the usage of the software;
- Is hard to be observed.
- Maximal: A bug is said to be of maximal priority when its occurrence:
- Causes some damage to the stored data or interrupts the usage of the software;
- Is easy to be observed.
* 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.
15 agosto 2009
Parsing a Delphi DFM File
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.
If for some reason you need a DFM parser, or just for curiosity, you can download it from here.
Here is an example of how to use it:
class Program {
static void Main(string[] args) {
var fileName = @"c:\Unit1.dfm";
var dfmParser = new DfmParser(fileName);
dfmParser.ReadFile();
foreach (var node in dfmParser.Nodes) {
if (node.PropertyType == "string") {
node.PropertyValue = "'Hello World!';"; }
}
dfmParser.SaveFile();
}
}
The example above loads this file:
object Form1: TForm1Left = 0
Top = 0
object Label1: TLabelLeft = 8
Top = 40
Caption = 'Label1'; end object Label2: TLabelLeft = 48
Top = 40
Caption = 'Label1'; endendAnd rewrites like this:
object Form1: TForm1Left = 0
Top = 0
object Label1: TLabelLeft = 8
Top = 40
Caption = 'Hello World!'; end object Label2: TLabelLeft = 48
Top = 40
Caption = 'Hello World!'; endendIf you find some use for this, enjoy :)
23 julho 2009
Best Practices for Individual Contribution
Today, in his blog, Scott Hanselman is talking about how to be a good individual contributor.
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.
Below I’m quoting his points, but you need to see the original post, as there are many good contributions also in the comments section.
- Consciously manage your personal brand.
- 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.
- Push the Limits
- 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.
- Conserve your keystrokes.
- 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.
- Don’t give bile a permalink.
- 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.
- Write down what you’re trying to accomplish and hang it on the wall.
- 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.
- Manage Up
- 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.
- Have a System to Manage Information Flow
- 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.
Remember, don’t lose the original post.
18 julho 2009
JQuery Framework
As I don’t work with web development at the moment, and did few things related in the past, JQuery 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.
This month, Luis Abreu 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.
I’ll keep it up to date as soon as new posts come up.
- JQuery: getting started;
- JQuery: understanding the JQuery function;
- JQuery: chaining;
- JQuery: getting started with selectors;
- JQuery: more on selectors;
- JQuery: custom selectors;
- JQuery: understanding how selectors are implemented;
- JQuery: working with the wrapped HTML elements – part I;
- JQuery: working with the wrapped HTML elements – part II;
- JQuery: working with the wrapped set – part III;
- JQuery: interacting with the wrapped set – part IV;
- JQuery: working with the wrapped set – part V;
- JQuery: interacting with the wrapped set- part VI;
- JQuery: creating new HTML snippets;
- JQuery: interacting with the wrapped set – part VII;
- JQuery: interacting with the wrapped set – part VIII;
- JQuery – interacting with the wrapped set – part IX;
- JQuery: getting started with events;
- JQuery: more on events;
- JQuery: unbinding with anonymous functions;
- JQuery: one-shot event handlers;
- JQuery: shortcuts for the most used events;
- JQuery: triggering events;
- JQuery: binding handlers for current and future element’s events;
- JQuery: DOM 0 level event model;
- JQuery: DOM 2 level event model;
- JQuery: DOM 3 level event model;
- JQuery: DOM level event model support;
- JQuery: more on triggering events;
- JQuery: more on the triggerHandler method;
- JQuery: common “event pairs” helpers;
- JQuery: utilities functions I – browser detection;
- JQuery: utility functions II – trimming strings;
- JQuery: utility functions – testing helpers;
- JQuery: utility functions IV – interacting through arrays;
- JQuery: utility functions VI – checking if an item is in an array;
- JQuery: utility functions VII – concatenating arrays;
- JQuery: utility functions VIII – creating arrays from other objects;
- JQuery: utility functions IX – transforming arrays;
- JQuery: utility functions X – extending objects;
- JQuery: getting started with effects;
- JQuery: fading elements;
- JQuery: sliding;
- JQuery: running custom animations;
- JQuery: getting started with AJAX;
- JQuery: the $.get and $.post methods;
- JQuery: the $.getJson method;
- JQuery: deferred script loading;
- JQuery: full control with the $.ajax function;