formas.gif formas2.gif

Pessoal, adicionei no blog uma página de ferramentas, uma página de livros e uma mini biografia minha, focada no técnico, junto com uma foto aí do lado esquerdo.

Coloquei os livros que estou lendo, assim como livros importantes que já li. A lista ainda está pequena, preciso compilá-la, e estou meio sem tempo. 

As ferramentas são algumas do meu artigo de ferramentas na .Net Magazine do ano passado (edição 41), e outras que estou descobrindo ou lembrando e colocando por aqui, geralmente com uma chamada em um post do blog. Eu adoro ferramentas de produtividade, então a lista deve crescer.

Espero que gostem. Feedbacks, como sempre, são bem vindos. 


Postado na(s) categoria(s) Blog , Indicação de conteúdo pelo Giovanni Bassi em 13 de maio de 2008 às 02:13 | Tags: , ,

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

ilovespecsharp Estava lendo o blog do Greg Young, e me deparei com um post sobre SPEC#, que é uma nova linguagem, que, segundo o paper de Overview, é um superconjunto do C#.

Achei interessantíssimo, até porque traz idéias que já vi em outras linguagens ao .Net. Uma das mais interessantes seria o fato de um método poder informar quais exceções ele lança, algo assim:

char Read()

    throws SocketClosedException;

Outra possibilidade interessante seria poder dizer qual o escopo de mudança de variáveis possível. Então o método informaria as variáveis que vai alterar:

class C {

    int x , y;

    void M() modifies x ; { . . . }

A linguagem se chama Spec# porque o código especifica o que vai fazer. Muito interessante mesmo.

Como a idéia toda é muito legal, me junto ao Greg para solicitar a linguagem e todo o sistema, que ainda está em pesquisa no Microsoft Research:

Eu também quero Spec# !


Postado na(s) categoria(s) Tecnologia em pesquisa pelo Giovanni Bassi em 11 de maio de 2008 às 21:08 | Tags: , ,

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Pessoal, eu não sei vocês, mas eu não gosto muito de regular expressions ("expressões regulares" em português). Eu conheço, sei como funciona, mas é chato demais... Aquele monte de letrinhas, uma em cima da outra, não é muito explicativo, que dirá prático. Eu começo a dar espaço para tentar separar cada parte da regex, dou enter para colocar alguma hierarquia, idento... começa a ficar cada vez mais confuso.

E no final, quando você tem que concatenar tudo de novo para colocar no código, já era, todo o esforço para organizar a regex é perdido, o resultado final é um "stringão".

Pois bem, um certo Roy Osherove resolveu nos ajudar. Criou duas ferramentas muito legais, chamadas Regulazy e Regulator, para ajudar no trabalho de criação de Regex.

regulator

O Regulator ajuda a criar as regex, utilizando colorização de código. Ele ajuda também a validar uma determinada string, podendo também utilizar funções de separação e substituição de strings.

Não bastasse isso ele também gera o código da sua regex em VB ou C# e tem diversas outras features que eu ainda não descobri, já que acabei de descobrir essa excelente ferramenta.

 

 

regulazy

O Regulazy ajuda os preguiçosos (daí o nome) a criar regex. Você digita uma string na janela, e ele deriva uma regex para você. Ajuda ainda na nomeação de subgrupos e várias outras coisas.

Também gera o código em VB e C#.

Para quem gosta do assunto e gosta de se aventurar com as regex na unha, só com o notepad, sugiro uma visita aos seguintes sites:

Regular-expressions.info
Expressões Regulares - Guia de Consulta Rápida
Wiki de regex em regex.pro.br


Postado na(s) categoria(s) Regex pelo Giovanni Bassi em 25 de abril de 2008 às 00:01 | Tags: ,

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Gosto muito de trabalhar com Powershell. Não fiz muitas coisas ainda, mas o que eu fiz tem sido bem divertido.

Uso muito para automatizar pequenas tarefas que demoram para executar. Vou mostrar hoje um arquivo .ps1 que você pode criar para solicitar o início ou a parada de um serviço NT. Para ajudar, ele vai usar alguns scripts de elevação (para o Vista) publicados na MSDN Magazine americana ano passado, na edição de Junho. Se você resolver por para rodar o script que está aqui, vai precisar dele. Coloquei a elevação para que o script possa rodar, já que no Windows Vista não dá para parar ou iniciar serviços sem elevar. Ver o status de um serviço é possível, e por isso não solicito elevação nesse caso.

Para iniciar ou parar um serviço, é só chamar o nome do script, seguido do nome do serviço (se estiver parado ele inicia e vice-versa):
Servico.ps1 MSSQLSERVER

Para parar é só chamar com parâmetro off:
Servico.ps1 MSSQLSERVER off

Para iniciar é só chamar com parâmetro on:
Servico.ps1 MSSQLSERVER on

Para saber o status é só chamar com parâmetro query:
Servico.ps1 MSSQLSERVER query

Você vai precisar assinar o script para rodar. Para isso, veja as instruções no próprio Powershell:
get-help about_signing

Se tiverem problema para assinar me digam que posto aqui como fazer.

Vejam o script comentado:

#variáveis

$ligar = $FALSE

$desligar = $FALSE

$query = $FALSE

$Acao = $Args[1]

$servico = $Args[0] #"MSSQLSERVER"

 

#se o parametro não foi passado, exibe o funcionamento:

if ($servico -eq $null)

{

      Write-Host "O serviço não foi especificado." `

      -ForegroundColor DarkRed

      "Para rodar este script chame o nome do arquivo `

      PS1 (Servico.ps1), mais o nome do serviço `

      (por exemplo, ""MSSQLSERVER""). "

      ""

      "Por exemplo:"

      "Servico.ps1 MSSQLSERVER"    

      "Você também pode especificar se quer iniciar o serviço:"

      "Servico.ps1 MSSQLSERVER on"

      ""

      "Desligar o serviço:"

      "Servico.ps1 MSSQLSERVER off"

      ""

      "Ou somente saber se ele está rodando:"

      "Servico.ps1 MSSQLSERVER query"    

      ""

      return

}

 

#se não há ação verifica se o serviço está ligado,

#se estiver desliga e vice-versa

if ($Acao -eq $null)

{

      #verificando se está ligado

      if ((Get-Service $servico).STATUS -eq "Stopped")

      {

            $ligar = $TRUE

      }    

      else

      {

            $desligar = $TRUE

      }

}

else

{

      #se for parâmetro de query, anota:

      if (($Acao.ToString().ToUpper() -eq "QUERY") `

            -or ($Acao.ToString().ToUpper() -eq "Q"))

      {

            $query = $TRUE

      }

      else

      {

            #se for para ligar, anota:

            if (($Acao.ToString().ToUpper() -eq "ON") `

                  -or ($Args[0] -eq "1"))

            {

                  $ligar = $TRUE

            }

            else

            {

                  $desligar = $TRUE

            }

      }    

}

 

if ($ligar)

{

      #inicia o serviço, se der pau, guarda

      Start-Service $servico -ErrorAction silentlycontinue `

            -ErrorVariable erro

 

      if ($erro -ne $null)

      {

            if ($erro[0].ToString().Contains("Cannot open " `

                  +  $servico + " service on computer"))

            {

                  #se por causa da elevação, então eleva:

                  Write-Host "Não está elevado." `

                        -ForegroundColor DarkRed

                  elevate powershell -command `

                        "C:\users\giovanni\desktop\teste.ps1" $Args

                  return

            }          

      }    

     

      #msg de ok:

      Write-Host "O serviço $servico foi ligado." `

            -ForegroundColor Blue

      Read-Host "Clique para continuar"

}

if ($desligar)

{

      #para o serviço, se der pau, guarda

      Stop-Service $servico -Force -ErrorAction `

            silentlycontinue -ErrorVariable erro

     

      if ($erro -ne $null)

      {

            if ($erro[0].ToString().Contains("Cannot open " +  `

                  $servico + " service on computer"))

            {

                  #se por causa da elevação, então eleva:

                  Write-Host "Não está elevado." `

                        -ForegroundColor DarkRed

                  elevate powershell -command `

                        "C:\users\giovanni\desktop\teste.ps1" $Args

                  return

            }          

      }    

      #msg de ok

      Write-Host "O serviço $servico foi desligado." `

            -ForegroundColor Blue

      Read-Host "Clique para continuar"

}

#verificando se o serviço está rodando:

if ($query)

{

      if ((Get-Service $servico).STATUS -eq "Stopped")

      {

            Write-Host "O serviço $servico está desligado." `

                  -ForegroundColor Blue

      }    

      else

      {

            Write-Host "O serviço $servico está ligado." `

                  -ForegroundColor Blue        

      }    

}


Postado na(s) categoria(s) Powershell pelo giovanni bassi em 24 de abril de 2008 às 00:21 | Tags:

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

O inglês tem um ditado:

"If it ain't broke, don't fix it. "

Quer dizer: "Se não está quebrado, não conserte."

Essa frase devia ser gravada em aço e pendurada em todas as salas onde acontecem atividades ligadas à Engenharia de Software. Cada vez que colocamos a mão em uma linha de código que estava funcionando perfeitamente "só para arrumar um negócio" trazemos um risco gigantesco ao processo como um todo. Não fazemos aplicações cheias de funções independentes, fazemos sistemas que trabalham interligados, com funções que dependem umas das outras.

Esse princípio anda de mãos dadas com o YAGNI (You ain't gonna need it), que sugere que você não adicione funcionalidades, até que elas sejam necessárias.

Todos nós passamos por essa tentação. Aqui no Brasil ela vem com as famosas 2 palavras "Já que":

  • "Já que" eu vou arrumar esse cadastro, já vou indentar direito esse código.
  • "Já que" eu vou ter mexer nessa inclusão, vou arrumar também a alteração para manter o padrão.
  • "Já que" vou incluir uma coluna na tabela, vou aproveitar e trocar a chave que está errada.

Já viu o que acontece depois... Você identou o código e sem querer esbarrou em alguma tecla: pau! Você modificou a rotina de alteração para manter o tal do padrão, e arrancou sem querer uma regra de negócio: pau! Você trocou a chave da tabela, e um cadastro que ninguém sabia que existia (alguém sempre usa...) passou a dar problema: pau!

Se você vai alterar um aplicativo, trate o trabalho como um reparo em uma peça de cristal. Segure-o com cuidado, repasse o plano do que vai fazer, e não mexa onde não deve!

 


Postado na(s) categoria(s) Dicas pelo Giovanni Bassi em 17 de abril de 2008 às 17:38 | Tags: , ,

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

capa_net50_G

Pessoal, continuando a falar da edição 50 da revista .Net Magazine, tem outro artigo meu na deste mês: Novidades do Visual Basic 9.

Falo de inferência de tipos, tipos anônimos, lambdas, LINQ (entre outras novidades) e termino concluindo o que todos já sabemos: O VB continua sendo uma linguagem incrível, altamente profissional, flexível, e que não vai sumir amanhã ou depois, por mais que essa briga sem sentido (e aparentemente sem fim) entre VB e C# continue.

A edição também traz uma opinião do Mauro Sant'Anna bem interessante sobre arquitetura e arquitetos.

Como sempre, não dá para perder.

 

 


Postado na(s) categoria(s) Artigos técnicos pelo Giovanni Bassi em 16 de abril de 2008 às 01:32 | Tags: , , ,

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

capa_net50_G Saiu a edição 50 da .Net Magazine, com o quarto artigo da série de Design Patterns. Esse está falando de abstract factory, e vai puxar um pouco do artigo da edição anterior. Eu acho um dos melhores artigos da série, já que vai tratar de um conceito já existente no Framework .Net há bastante tempo, e explicitado claramente no namespace System.Data, com as factories de providers, como o SQL Server e o Oracle.

Vale a pena dar uma olhada, já que o Abstract Factory é o que o pessoal costuma chamar de "factory", apesar de existir também o padrão "factory method", que, apesar de relacionado, é outro padrão por completo.

Enfim, espero que gostem. Na minha opinião, é o tipo de conhecimento indispensável a qualquer desenvolvedor que se coloque como Sênior.


Postado na(s) categoria(s) Artigos técnicos pelo Giovanni Bassi em 16 de abril de 2008 às 01:24 | Tags: , , ,

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5