Como iniciar sua Gyro Wrist Ball sem firulas!

sku_1265_1

De começo achei que era impossível iniciar a rotação sem puxar a cordinha, mas agora já consigo quase todas as vezes. É como andar de bicicleta!

Para aprender a iniciar ela manualmente, primeiro inicie o movimento com o cordão e a acelere. Então segure-a firmemente e observe o movimento que ela faz na sua mão. É este movimento (como de uma moeda caindo e rodando numa mesa) que teremos que fazer se quisermos iniciar ela apenas com o dedão.

Pois bem, pare e segure-a firmemente numa das mãos. Tanto faz esquerda ou direita. Coloque a "palma" do dedão na frestinha entre o rotor e a capa plástica da bola, então com toda velocidade possível leve seu dedão para frente, como se estivesse estralando os dedos, arrastando o rotor com isso. Imediatamente comece a imitar o movimento natural anterior. Não se apresse e tente não perder o movimento – as luzinhas deverão se acender em breve!

Com a prática você pega o jeito e poderá dizer adeus a cordinha 😛

Até porque já perdi a minha cordinha várias vezes -.-;

Acessórios Dremel em Vinhedo, Valinhos e Região

Por um bom tempo andei procurando um certo acessório para minha micro-retífica (rotary tool) dremel, o mandril de aperto rápido 4486. Ter este acessório evita ter de comprar outras pinças, além de tonar muito mais rápido e fácil trocar entre brocas de tamanhos diferentes.

Um dia, passando por acaso na Cosama, em Vinhedo, encontrei este e outros acessórios a um preço muito convidativo. Não me lembro quanto exatamente, mas sei que custavam menos de R$10,00 (chega a custar até R$40,00 em outras lojas do ramo – acho que não souberam evaluar o preço do produto). Recentemente revigoraram seu site e disponibilizaram uma loja virtual.

COSAMA – Coml. Agro Tintas São Matheus Ltda.

Tintas, Ferragens, Ferramentas e Hidráulica

Fones: (19) 3876-3081 / 3876-2443 Fax: (19) 3876-4758
Av. Independência, 7232 – Jd. São Matheus – Vinhedo-SP
Site: www.cosama.net – Email: atendimento@cosama.net

 


View Larger Map

Linus Torvalds e a Contribuição da Microsoft

Traduzindo o tópico de Hugh Pickens para o Slashdot:

 

    “Após a decisão recente da Microsoft em contribuir com 20.000 linhas de código para a comunidade Linux, Christopher Smart, da Linux Magazine, conversou com Linus Torvalds, criador do Linux, e perguntou-lhe se o código era alguma coisa sobre a qual ele estaria contente em incluir em seu sistema, mesmo que seja oriundo da Microsoft.

    “Acredito muito na importância da tecnologia do que na importância política. Não me importo de quem venha, desde que existam sólidas razões para o código, e desde que nós não tenhamos de nos preocupar sobre licenças e etc. Posso fazer brincadeiras sobre a Microsoft de vez em quando, mas ao mesmo tempo, eu considero este ódio a Microsoft uma doença. Eu acredito em desenvolvimento aberto, e isto muitas vezes envolve não apenas tornar o código aberto, mas também não deixar outras pessoas e outras companias de fora.”

     

    Smart perguntou então, se a Microsoft estaria contribuindo com o código para beneficiar a comunidade Linux ou a própria Microsoft. “Eu concordo que esta ação está sendo dirigida por razões egoístas, mas é assim que todo código aberto é escrito! Todos nós ‘cotucamos nossas próprias feridas’. Foi por isso que eu comecei o Linux, foi por isso que comecei o git e é por isso que ainda estou envolvido. É a razão para todos acabarem envolvidos com o open source, em certo ponto”, diz Torvalds. “Então reclamar sobre o fato da Microsoft ter pego uma área egoísta para trabalhar é simplesmente estúpido. Claro que eles escolheram uma área que os ajuda. Esse é o ponto no open source – a habilidade de tornar o código melhor para suas necessidades particulares, para quem quer que este “suas” esteja se referindo”.

 

De longe, um dos argumentos mais sensatos que ja vi até hoje. Muito distante desse outro fanatismo esdrúxulo que encontramos difundido por ai.

C# 3.0 – Guia de Bolso

Alguns dias atrás passei na Saraiva e resolvi comprar alguns livros. Oras, se direto gasto dinheiro com tranqueiras da china, porque não dispensar alguma graninha em algo mais útil?

Pois bem, uma das minhas aquisições foi o livro C# 3.0 Guia de Bolso, Tradução da Segunda Edição. Achei interessante pois minha habilidade .net ficou parada na versão 2.0 por muito tempo. Logo sairá a versão 4.0 e eu ainda nem descobri para que servem essas classes novas Func e Action inseridas no framework.

Para programadores atarefados que desejam um guia compacto de C# 3.0 e LINQ, porém de fácil leitura, o C# 3.0 Guia de Bolso, Tradução da Segunda Edição, informa exatamente o que você precisa saber – sem longas instruções ou exemplos em excesso.

Apesar de sua compactabilidade, este guia de bolso não economiza na profundidade e nos detalhes. Ele adota os desafios conceituais de aprendizagem do C# 3.0 e LINQ.

O guia inclui ilustrações e exemplos de código para explicar:
Os novos recursos do C# 3.0, como as expressões lambda, tipos anônimos, propriedades automáticas, e muito mais.

  • Todos os aspectos da sintaxe C#, tipos predefinidos, expressões e operadores.
  • A criação de classes, structs, delegates e eventos, enums, genéricos e limitadores, manipulação de exceção e iteradores.
  • As sutilezas do boxing, sobrecarga de operação, covariância de delegates, resolução do método de extensão, reimplementação de interface, tipos nullable e operação de lifting.
  • LINQ, começando pelos princípios da seqüência, execução adiada e operadores típicos de query, e finalizando com uma referência completa à consulta de sintaxes – incluindo múltiplos geradores de junção, agrupamento e continuação de queries.

Se você já conhece Java, C++ ou uma versão anterior do C#, o C# 3.0 Guia de Bolso, Tradução da Segunda Edição, é a opção ideal.

 

Pois bem, acontece que, depois de três dias lendo esporadicamente este livro, estou concluindo sua tradução não é das melhores…

O livro em si é ótimo, o conteúdo é exatamente o que eu procurava. Sem enrolações, mas ainda assim com todas as informações mais críticas e interessantes. Para um guia de bolso, não deixa absolutamente nada a desejar.

Mas como nem tudo é perfeito, vez ou outra tive que me deparar com alguns erros de digitação. Poucos, considerando o número de páginas do livro, mas o suficiente para que eu notasse e viesse aqui publicar minha opinião. Existem também algumas traduções que eu particularmente não concordo que deveriam ser feitas, como por exemplo, uma seção onde se traduz where T : new() para Onde T : new(), em restrições de parâmetros genéricos. Mas claro, isto talvez faça sentido de um ponto de vista mais didático.

Ao fim das contas, minha opinião é a seguinte: Se quiser um ótimo guia de referência para C# 3.0, então compre este livro. Ou, se gostar de uma leitura em língua inglesa, busque pelo original.

How Google Tricks Microsoft Into a Fake Competition

break_thumb-5B8-5D

Or: The Most Overlooked Point In How Google Competes With Microsoft And Nearly Everyone Else Outside The Web

From the very principle, it was never Google’s aim to replace other browsing software such as Internet Explorer, Firefox or Safari with Chrome. In fact, what Google truly wanted, was rather to improve them.

 

break

Let me explain in simple words: Google doesn’t actually cares if you are using Chrome, IE or Firefox as long as you are using them to access Google. Didn’t you notice what happened after Google released Chrome? All other browsers adopted the concept of a JavaScript VM. All other browsers incorporated inovation from Google so now the Web loads faster. By adding competition and promoting the benefits of a secure browser architecture, Google has increased the momentum for further web-as-software-platform development. This will make sure not only Google and its services loads faster and look more appealing, but that it does so in every browser, for everyone.

 

Google indeed seems to have a brilliant plan: bringing innovation improving and exploring ideas and then letting everyone borrow its ideas improvements for free so it can profit while every other competitor wastes time and money improving their own products, thinking they are competing with Google. While, in fact, they aren’t: They are just building more room for Google to expand upon. And the Google Chrome Operating System is certainly part of this.

But note that, while those may be bad news for Google’s (virtual) competitors, for us, users, it means a lot more. It’s no doubt the Google Chrome OS will surely play a major role in the paradigm shift we are all living now, where everything is becoming web and being put in the clouds. Lets just wait for some real competition, let the technology evolve, and we shall all benefict.

 

Truth is: In the end, even if Chrome OS fails, it still a win. For Google, and for us.

Coding Guidelines

A few months ago I found a very interesting guide about coding styles and programming other guidelines. Certainly a must read for every obsessive-compulsive dot-Net programmer seeking the ultimate perfection!

—————

Algum tempo atrás, encontrei um artigo muitíssimo interessante sobre excelentes práticas em estilo de programação. Com certeza um requerimento para todo programador com transtorno obsessivo-compulsivo buscando a contínua perfeição em dot-Net!

 

[Link: http://blogs.msdn.com/brada/articles/361363.aspx]

Análise de Poder Discriminativo Através de Curvas ROC

contingencia_thumb-5B1-5D

Quando desenvolvemos sistemas, métodos ou testes que envolvem a detecção, diagnósticos ou previsão de resultados, é importante validar seus resultados de forma a quantificar seu poder discriminativo e identificar um procedimento ou método como bom ou não para determinada análise. No entanto, devemos levar em conta que a simples quantificação de acertos num grupo de teste não necessariamente reflete o quão eficiente um sistema é, pois essa quantificacao dependerá fundamentalmente da qualidade e distribuição dos dados neste grupo de teste.

 

Para exemplificar, tomemos o exemplo de um sistema para detecção de diabetes em pacientes, cuja saída é 1 ou 0 indicando se o paciente possui a condição ou não.  Agora, suponha que ao aplicamos este sistema num grupo de teste contendo 100 pacientes, dos quais já sabemos quais tem diabetes ou não, o sistema acerta 90% dos diagnósticos. Parece muito bom, não?

Não exatamente. O que não levamos em conta foi a distribuição da condição no grupo de teste. Revelamos agora que, no grupo de teste, 90% dos pacientes, na verdade, tinham a condição. O sistema, portanto, poderia simplesmente ter dito “1” a qualquer entrada apresentada, e mesmo assim, ainda conseguiria 90% de acerto já que os restantes 10% eram saudáveis. A esta altura, já não podemos ter a certeza de que o tal sistema seria tão bom assim.

 

contingencia
Tabela de Contingência (matriz de confusão)

Para casos como este, outras medidas foram criadas a fim de desconsiderar eventuais desbalanceamentos nos grupos de teste. Antes de entrar nestas medidas, apresento-lhe a chamada tabela de contingência (ou matriz de confusão), que servirá de base para as demais medidas apresentadas. Seu funcionamento é simples: consideramos valores positivos que o sistema julgou positivos como verdadeiros positivos (acerto), valores positivos que o sistema julgou negativos como falso negativo (erro), valores negativos que o sistema julgou como negativos como verdadeiros negativos (acerto), e valores negativos que o sistema julgou positivos como falso positivos (erro).

 

A seguir, apresentamos algumas medidas dela derivadas.

Acurácia

    A proporção de predições corretas, sem levar em consideração o que é positivo e o que é negativo. Esta medida é altamente suscetivel a desbalanceamentos do conjunto de dados e pode facilmente induzir a uma conclusão errada sobre o desempenho do sistema.

    ACC = TOTAL DE ACERTOS / TOTAL DE DADOS NO CONJUNTO

            = (VP + VN) / (P + N)

Sensibilidade

    A proporção de verdadeiros positivos: a capacidade do sistema em predizer corretamente a condição para casos que realmente a têm.

    SENS = ACERTOS POSITIVOS / TOTAL DE POSITIVOS

             = VP / (VP + FN)

Especificidade

    A proporção de verdadeiros negativos: a capacidade do sistema em predizer corretamente a ausência da condição para casos que realmente não a têm.

    SPEC = ACERTOS NEGATIVOS / TOTAL DE NEGATIVOS

             = VN / (VN + FP)

Eficiência

    A média aritmética da Sensibilidade e Especificidade. Na prática, a sensibilidade e a especificidade variam em direções opostas. Isto é, geralmente, quando um método é muito sensível a positivos, tende a gerar muitos falso-positivos, e vice-versa. Assim, um método de decisão perfeito (100 % de sensibilidade e 100% especificidade) raramente é alcançado, e um balanço entre ambos deve ser atingido.

    EFF = (SENS + ESPEC) / 2

Preditividade Positiva

Preditividade Negativa

Coeficiente de Correlação de Matthews – ou Coeficiente φ (phi)

    O coeficiente de correlação de Matthews é uma medida de qualidade de duas classificações binárias que pode ser usada mesmo se as classes possuem tamanhos bastante diferentes. Retorna um valor entre −1 e +1, em que um coeficiente de +1 representa uma predicao perfeita, 0 uma predicao aleatoria media, e –1 uma predicao inversa. Esta estatistica é equivalente ao coeficiente phi, e tenta, assim como a eficiência, resumir a qualidade da tabela de contingência em um único valor numérico passivel de ser comparado.

    MCC = φ = (VP*VN – FP*FN) / sqrt((VP + FP)*(VP + FN)*(VN + FP)*(VN + FN))

    Note que, se qualquer uma das somas no denominador for igual a zero, o denominador pode ser considerado 1, resutando num MCC igual a 0 que seria o limite correto para esta situação.

 

A Curva de Receiver Operating Characteristic (ROC)

A curva ROC (ou curva de ROC) foi desenvolvida por engenheiros elétricos e engenheiros de sistemas de radar durante a Segunda Guerra Mundial para detecter objetos inimigos em campos de batalha, tambem conhecida como teoria de detecção de sinais. A análise ROC tem sido utilizada em medicina, radiologia, psicologia e outras areas por muitas décadas e, mais recentemente, foi introduzida à áreas como aprendizado de máquina e mineracao de dados.

 

example-roc-curves
Curvas ROC de diferentes classificadores

Como o resultado de sistemas de classificação em classes geralmente são contínuos, ou seja, produzem um valor situado dentro de um determinado intervalo contínuo, como [0;1], é necessário definir um ponto de corte, ou um limiar de decisão, para se classificar e contabilizar o número de predições positivas e negativas (como diagnósticos verdadeiros e falsos no caso de ocorrência de uma patologia). Como este limiar pode ser selecionado arbitrariamente, a melhor prática para se comparar o desempenho de diversos sistemas é estudar o efeito de seleção de diversos limiares sobre a saída dos dados.

Para cada ponto de corte são calculados valores de sensibilidade e especificidade, que podem então serem dispostos em um gráfico denominado curva ROC, que apresenta no eixo das ordenadas os valores de sensibilidade e nas abscissas o complemento da especificidade, ou seja, o valor (1-especificidade).

 

Um classificador perfeito corresponderia a uma linha horizontal no topo do gráfico, porém esta dificilmente será alcançada. Na prática, curvas consideradas boas estarão entre a linha diagonal e a linha perfeita, onde quanto maior a distância da linha diagonal, melhor o sistema. A linha diagonal indica uma classificação aleatória, ou seja, um sistema que aleatoriamente seleciona saídas como positivas ou negativas, como jogar uma moeda para cima e esperar cara ou coroa. Definitivamente, não é o tipo de sistema mais confiável possível. No entanto, um sistema cuja curva ROC esteja localizada abaixo da diagonal ainda pode ser convertido num bom sistema – basta inverter suas saídas e então sua curva também será invertida.

Uma medida padrão para a comparacao de sistemas é a área sob a curva (AUC), que pode ser obtida por métodos de integração numérica, como por exemplo, o método dos trapézios. Teoricamente, quanto maior a AUC, melhor o sistema.

 

Exemplo de como fazer uma curva ROC no Excel.

 

Calculando a área de uma curva ROC no Microsoft Excel®

    Coloque os pares sensibilidade e (1-especificidade) nas colunas A e B, respectivamente. Caso sejam 10 pontos (de A1 a B10), utilize a seguinte fórmula:

    =SUMPRODUCT((A6:A15+A5:A14)*(B5:B14-B6:B15))*0,5

Determinando o melhor ponto de corte

Finalmente, a partir de uma curva ROC, devemos poder selecionar o melhor limiar de corte para obtermos o melhor desempenho possível. Para isto, podemos utilizar como parâmetro de comparação a medida de eficiência apresentada acima ou o valor φ (phi). Assim, podemos obter o limiar que apresente a melhor combinação de valores de especificidade e sensibilidade para o sistema.

Determinando o erro padrão no cálculo da área

O erro padrão de uma curva ROC se refere ao desvio padrão assumido ao aplicarmos nosso sistema a uma amostra da população do que se aplicássemos a população inteira. Esta medida parte do fato que, dependendo de quais amostras de uma população tomemos os valores para produzir nossa análise ROC, a área sob a curva poderá variar de acordo com a distribuição particular desta amostra.

O calculo do erro é, em certo ponto, simples, pois parte de apenas três valores conhecidos: a área A sob a curva ROC, o número Na de casos da amostra que apresentam a condição investigada (por exemplo, com diabetes) e o número Nn de casos que não a apresentam (sem).

ERRO = sqrt((A*(1 – A) + (Na– 1)*(Q1 – A²)+(Nn– 1)(Q2 – A²))/(Na * Nn))

em que:

    Q1 = A/(2 – A)
    Q2 = 2*A²/(1 + A)

 

Código

Na segunda parte da versão em inglês deste artigo está disponível uma implementação de curvas ROC em C#, incluindo código-fonte e aplicativos de demonstração.

 

Guias Recomendados

Receiver Operating Curves: An Introduction – Excelente página sobre curvas ROC e suas aplicações. Inclui excelentes applets que permitem brincar com as curvas, compreender melhor seu funcionamento e seu significado. Direcionado tanto a quem busca uma rápida introdução ao tema quanto a pesquisadores já familiarizados com a área.

 

Referências

WIKIPEDIA, The Free Encyclopedia, “Receiver Operating Characteristic”, Disponível em: <http://en.wikipedia.org/wiki/Receiver_operating_characteristic> Acesso em: 07 jul. 2009.

SABATTINI, R. M. E.; “Um Programa para o Cálculo da Acurácia, Especificidade e Sensibilidade de Testes Médicos”; Revista Informédica, 2 (12): 19-21, 1995. Disponível em: <http://www.informaticamedica.org.br/informed/sensib.htm> Acesso em: 07 jul. 2009.

ANAESTHESTIST.COM, “Receiver Operating Curves: An Introduction”, Disponível em: <http://www.anaesthetist.com/mnm/stats/roc/Findex.htm> Acesso em: 13 jul. 2009.

 

Notícias Interessantes

BBC NEWS MAGAZINE, A scanner to detect terrorists; Artigo muito interessante sobre como estatísticas são mal interpretadas quando divulgadas pela mídia. “To find one terrorist in 3000 people, using a screen that works 90% of the time, you’ll end up detaining 300 people, one of whom might be your target”. Escrito por Michael Blastland.