Archive for the 'dica' Category


Syntax Highlighter, Colorindo Seu Código 0

Como migrei para o mundo Mac, sinto falta do Windows Live Writer que tinha um excelente plugin para colorir o código. Testei alguns dos editores de blog para Mac, mas nenhum deles incorpora esse tipo de funcionalidade. Até que encontrei o Syntax Highlighter que aplica essa funcionalidade por meio de javascript e CSS.

Abaixo segue o primeiro código usando ele.

public class HelloWorld
{
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

O que falta ainda é automatizar a inclusão de tags usada pelo syntax highlighter que pede o código dentro da tag pre. Acho que isso é possível de fazer com jQuery.

Update: Existe um plugin para o wordpress aqui. Eu testei ele, mas não vi benefícios por que ele não agrega um controle no wordpress, o que seria o ideal. Ainda tenho que adicionar as tags na mão, ou seja, ao invés de fazer isso:

<pre name="code" class="java">...</pre>

faço isso

[java]...[/java]

Por isso, prefiro ficar com o modo inicial.

MacHeist 3 Bundle Lançado 0

MacHeist 3 Bundle 2009

MacHeist 3 Bundle 2009

Hoje, as 9hs de Brasília tivemos um livecast do MacHeist Reveal Show lançamento do bundle (pacote  de programas) pelo MacHeist. Este ano esta ocorrendo o terceiro evento e ao final uma série de produtos pagos são lançados a um preço baixíssimo, desta vez foi um conjunto de pacotes totalizando +US$500 por apenas US$39.

A transmissão foi apresentada por Chris Pirillo, Veronica Belmont e Lisa Bettany.

Para aqueles que participaram do evento todo ganhou um desconto de US$8 ao realizar uma série de missões, reduzindo para US$31. Incluíndo muitas outras aplicações entregues ao completar cada missão.

Não vou dizer que todos os Apps ofertados são 100% úteis a todos os usuários. O pacote pretende atender uma série de pessoas usuárias de Mac.

Existem desde softwares profissionais a softwares para pessoas comuns em geral, que precisam de uma ferramenta de fácil uso e que remova aquelas simplicidades que todo mundo sabe fazer.

A figura acima foi usada o Little Snapper (screen capture) e o Picturesque (estilizador de imagem), tudo em questão de segundos.

O projeto visa arrecadar dinheiro para doar a diversas instituições (25% do lucro) e de especial se for atingido uma cota de US$100k mais quatro aplicativos serão destravados (unlocked).

Se voce é usuario de Mac vale a pena dar uma conferida e pelo preço vale a pena.

Cuide bem de seus dados 0

Um tópico fora do assunto comum do blog, mas queria alertar aquilo que todo mundo sabe e só ficamos realmente cientes depois que ocorre conosco aquilo que achavamos impossível.

Viagei por cinco dias e deixei meu computador (PC) ligado durante este período. Porém, esqueci ligado o HD externo, eu sei burrice minha. Quando retorno, o que aconteceu? O HD parou de funcionar.

Qual o problema disso? O HD que não foi, hoje em dia memória é a coisa mais barata, estamos entrando na era dos tera bytes, que alguns anos atras parecia impossível de se consumir tanta informação.

O problema são os dados pessoais que não estão em backup, eu sei, burrice minha again. O preço para ter os dados de volta me custou caro $$$. Se tivesse gravado os dados em mídias de DVDs teria economizado a um custo infímo.

Por isso, cuide bem de seus dados pessoais, dedique algumas horas (sim horas, a menos que você seja organizado, preparar tudo que você tem para gravar custa tempo) e tenha uma versão dos dados de 3 em 3 meses, se for mais preguiçoso de 6 em 6 meses. É um trabalho que vale a pena pela dor de cabeça que você poderá ter caso isso venha a acontecer. Lembre-se, os HDs ainda sáo mecânicos o que os tornam componentes frágeis.

Talvez hoje, com o barateamento da memória ter dados guardados em RAID 1 pode ser uma boa opção, embora isso não seja uma realidade para todos.

Lição aprendida:

  • Realize backup com regularidade de seus dados pessoais, é bem provável que aquilo que realmente importa, caibam em 4 ou 5 mídias de DVD;
  • Não deixe seu HD Externo ligado 24hs, eles não são dispositivos para se usar diariamente, são locais de armazenamento secundário;
  • Se dispor de mais de uma máquina, distribua os dados entre elas, redundância nunca é demais.

Como descobrir quais tabelas foram modificadas recentemente 1

Depois de semanas sem postar, vou colocar um post bem breve aqui sobre SQL.

Recentemente precisei descobri quais tabelas foram modificadas recentemente sem ter que ver uma a uma. Se você tivesse poucas tabelas, isso não seria um problema, ver uma-a-uma, digamos umas 15 ou 20 seria até rápido. Mas podemos facilitar um pouco a nossa vida, limitando nossa amostra.

Isto aqui vale para SQL Server, não sei como seria em outras databases (Oracle, Postgree, MySQL e etc).

No SQL Server temos várias Views de sistema, no caso usaremo a View sys.tables, que nos fornece informações diversas sobre as tabelas do banco de dados.

SELECT * FROM sys.tables

Executando um select sobre esta tabela obteremos um resultado semelhante a este:

sys_tables1

A imagem mostra apenas algumas colunas, existem muitas outras, mas vamos nos focar naquelas que precisamo no momento.

Veja que temos os nomes de todas as tabelas, e duas colunas de datas, create_date e modify_date.

A primeira instância, achariamos que teríamos que observer a tabela modify_date e ordenar por ordem decrescente por ela.

SELECT * FROM sys.tables ORDER BY modify_date DESC

Infelizmente, a informação de data de modificação refere-se a inserção de dados, e não sobre sua estrutura.

sys_tables2

A coluna que temos que ver é create_date. Na figura não é possível observar isso, mas a data contida em create_date refere-se a última modificação estrutural realizada sobre ela.

Então bastaríamos fazer:

SELECT * FROM sys.tables ORDER BY create_date DESC

Eu sei que este post não é muito informativo, é mais uma dica.

Abraços e até o próximo post.

Banco de Dados e Null values 0

É comum na modelagem de banco de dados termos colunas com valores nulos. Para tipos como string, que são “reference type”, valor null é extremamente comum, mas e quanto a valores primitivos como: int, float, double, DateTime (struct no C#) e entre outros?

Na versão 2.0 do .NET, sim numa versão já adotada no mercado (.NET 1.1 é bem pouco, espero) apresentou o conceito de Nullable Types que permite você inferir valores nulos à built-in types (ou tipos primitos). Não irei entrar em detalhes muito profundos, pois pretendo ser breve nest post.

A sintaxe é bem simples:

   1: int? a = null;
   2:  
   3: // dois properties para Nullable Types, HasValue e Value
   4: if (a.HasValue) Console.WriteLine(a.Value);

Assim podemos atribuir valores para nulos e não mais valores default para estes tipos de dados.

Ok, isso é bonito mas o IDataReader não possui um método para tratar quando valores são nulos, o que fazemos? Realizamos uma checagem com o método IsDbNull, e se for podemos retornar nulo ou o valor caso OK. Veja abaixo:

   1: int? coluna = reader.IsDBNull(i) ? (int?)null : (int?)reader.GetInt32(i);

Isso resolveria o nosso problema, mas e se tivermos 10 colunas na tabela, esse código polui um pouco, não? Pena que o GetInt32(int i) não lida com campos nulos.

Como podemos melhorar isso?

Podemos usar Extension Methods!

Num post anterior eu cheguei a falar bem básicamente sobre extension methods, veja como resolveríamos este problema:

   1: static class DataReaderTypeHelper
   2: {
   3:     public static int? GetNullOrInt32(this IDataReader reader, int index)
   4:     {
   5:         return reader.IsDBNull(index) ? (int?)null : (int?)reader.GetInt32(index);
   6:     }
   7:  
   8:     public static string GetNullOrString(this IDataReader reader, int index)
   9:     {
  10:         return reader.IsDBNull(index) ? null : reader.GetString(index);
  11:     }
  12:  
  13:     public static DateTime? GetNullOrDateTime(this IDataReader reader, int index)
  14:     {
  15:         return reader.IsDBNull(index) ? (DateTime?)null : (DateTime?)reader.GetDateTime(index);
  16:     }
  17: }

Agora podemos este método e tornar a coisa mais bonita e direta:

   1: int? coluna = reader.GetNullOrInt32(index);

Muito mais simples, fácil e direto de usar. Podemos fazer também para inserção, remoção ou atualização onde valores nulos encrencam no banco de dados também. Normalmente teríamos que fazer:

   1: cmd.Parameters.AddWithValue("@param1", param1);
   2: cmd.Parameters.AddWithValue("@param2", param2);

Se usassemos o código acima, se @param2 pudesse ser nulo no banco de dados, este código geraria uma SqlException caso o valor de param2 fosse nulo, pois o null do c# é diferente do null para o banco de dados, então teríamos que verificar o valor e assim retornar DBNull.Value.

Com Nullable Types, isso ficaria extremamente simples, nada de if‘s:

   1: cmd.Parameters.AddWithValue("@param2", (object)param2 ?? DBNull.Value);

Observe que temos de fazer um cast para object em param2, pois para o compilador o operador ?? deve garantir que param2 e DBNull.Value sejam do mesmo tipo, por que Nullable usa Generics para inferir tipos, embora mascare isso.

Usando novamente Extension Methods podemos fazer uma classe que nos ajude nisso:

   1: static class DbHelper
   2: {
   3:     public static void AddWithValueOrNull(this SqlParameterCollection collection, string param, object value)
   4:     {
   5:         collection.AddWithValue(param, (object)value ?? DBNull.Value);
   6:     }
   7: }

Agora temos um método AddWithValueOrNull para o Parameters que é do tipo SqlParametersCollection. Assim encapsulamos tudo numa sintaxe mais limpa:

   1: cmd.Parameters.AddWithValueOrNull("@param2", param2);

Nota usamos este method apenas para valores que possam ser nulos e não para todos, no caso de chaves primárias devemos usar o AddWithValue mesmo por que devemos reforçar a necessidade de valores não nulos.

Next Page »