Category Archives: Desenvolvimento

Novidades, críticas, comentários sobre o desenvolvimento e programação de sistemas, assunto que tanto agrada este autor.

Conhece a POG? Tenho certeza que sim!

Para o desenvolvedores, a primeira impressão diante da definição da POG é uma bela gargalhada. Nada melhor do que a própria definição:


Definição de POG

A Programação Orientada a Gambiarras (POG ou WOP – Workaround-oriented programming) é um paradigma de programação de sistemas de software que integra-se perfeitamente a qualquer grande Paradigma de Programação atual.

A Programação Orientada a Gambiarras foi uma evolução natural do uso do Programa Bacalhau, também conhecido como ATND – Artifício Técnico Não Documentado, dos anos 1.960–80, e vem de uma antiga expressão brasileira, “Para quem é, bacalhau basta” (época em que o peixe seco ainda era barato). Programadores e analistas mais preocupados em usar buzzwords costumam utilizar o termo workaround para impor respeito.

O pessoal da equipe de desenvolvimento com que trabalho não conseguiu resistir nem à primeira definição.


Mas venhamos e convenhamos, o motivo de tanta risada não foi só o texto bem elaborado, mas o sim o fato de muitas dessas definições refletirem muitas verdades que vivemos no dia a dia. Alguma delas são no mínimo fundamentais:


Nonsense Flag

Por um legítimo impulso gambiarrizador solucionador de problemas, o desenvolvedor salpica um monte de variáveis com nomes sensacionais como “newCounter2“, “jaTrocouDeAba“, “passouPorAqui“, “numeroMagico“, “naoAchou” e etc.

Mega Zord

Programadores dos anos 80 o conhecem como Daileon. Semelhante ao padrão Lone Wolf. Motivo: criar várias funções, cada uma executando um passo de um algoritimo, causam lentidão no sistema por este ter que interromper seu fluxo para chamá-las. Esse problema pode ser resolvido com uma única e gigante guerreira função, que recebe vários parâmetros que definirão o que esta deverá fazer. Geralmente usado em conjunto com Nonsense Flag.

Exemplo(Atenção! A quebra de linhas foi usada aqui apenas para melhor entendimento! Evite essa prática! Escreva os parâmetros todos em uma única linha para não comprometer a eficiência do código!!!):

//Processa
public static Object processar(String file, int dados, char variavel, Object status, int linhas,
String query, String usuario, string senha, String banco,
String host, int dia, int mes, int ano, Object entrada,
Object saida)
throws Exception {
//Aí é aquilo, mermão…


return processado;
}

Esse padrão também pode ser usado com SQL. SELECTs aninhados devem ser evitados pois diminui a eficiência, foda-se se ninguém entender que merda aquilo faz.


Simplesmente fantástico! Você programador, se sentir-se tão familiarizado quanto eu fiquei, bem vindo ao clube!

Abraços

Tomás

Fonte: http://desciclo.pedia.ws/wiki/POG

Importando dados do SQL Server para o Excel com VBA e ADO

Essa é uma pergunta que aparece quase sempre nos fóruns de Excel que frequento. O bom é que a própria Microsoft dá a resposta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Sub RetrieveSQLServerData()
' Cria a conexão.
    Dim cnPubs As ADODB.Connection
    Set cnPubs = New ADODB.Connection    ' Variável para armazenar a String de Conexão.
    Dim strConn As String
 
    'Informa o SQL Server OLE DB Provider.
    strConn = "PROVIDER=SQLOLEDB;"
 
    'Conecta à base de dados Pubs no servidor local.
    strConn = strConn & "DATA SOURCE=(local);INITIAL CATALOG=pubs;"
 
    'Usa autenticação integrada.
    strConn = strConn & " INTEGRATED SECURITY=sspi;"
 
    'Abre a conexão.
    cnPubs.Open strConn
 
    ' Cria o objeto Recordset.
    Dim rsPubs As ADODB.Recordset
    Set rsPubs = New ADODB.Recordset
 
    With rsPubs
        ' Associa a conexão.
        .ActiveConnection = cnPubs
        ' Extrai os dados.
        .Open "SELECT * FROM Authors"
        ' Coloca os dados na planilha.
        Plan1.Range("A1").CopyFromRecordset rsPubs
 
        ' Fecha a transação
        .Close
    End With
 
    ' Fecha conexão
    cnPubs.Close
    Set rsPubs = Nothing
    Set cnPubs = Nothing
 
End Sub

Como importar dados de Microsoft SQL Server em Microsoft Excel

Apenas para constar, segue o código fonte pronto para usar:Bom proveito!

Tomás Vásquez

Visual Studio 2005 – Extendendo o DataGridView Windows Forms

É, às vezes a Microsoft se esquece de algumas coisas, mas tenta consertar logo depois, seja por meio de patches ou através de exemplos postados em seu Knowledge Base.

Um desses esquecimentos, pelo menos que vivenciei, foi a falta do controle DateTimePicker para o .NET Compact Framework, quando me envolvi em um projeto para Pocket PCs. Apesar do controle não existir na ToolBox do Visual Studio .NET, a Microsoft o disponibiliza no site MSDN com código fonte e tudo mais. O link para o código nesta data é:
http://www.microsoft.com/downloads/details.aspx?FamilyID=11e2aa23-a6d3-441b-b622-b3a4d7695f44&DisplayLang=en

Não ter o controle pode dar um ar de imcompleteza à ferramenta, mas pensando pelo lado bom, talvez a real intenção seja mostrar o que é possível fazer com a esta. Venhamos e convenhamos, que programador se daria ao trabalho de construir do zero um DateTimePicker com todas as suas características? Acho que vale a observação.

Completando o assunto, acho que a Microsoft decidiu fazer o mesmo com o DateTimePicker para o controle DataGridView Windows Forms no Visual Studio 2005. Ele não é nativo, mas é possível adicioná-lo na nossa solução com o código também disponibilizado pela Microsoft:
http://msdn2.microsoft.com/en-us/library/7tas5c80(vs.80).aspx

Além de simplesmente embuti-lo no projeto, vale as pena uma bela olhada no código fonte.

Abraços

Tomás Vásquez

Diferença entre datas em C#

O que era uma simples tarefa no VB clássico era tirar a diferença entre duas data baseado no conjunto de funções que a linguagem oferecia. Algo parecido pode ser nas linguagens .NET, porém não de forma tão intuitiva. Existem novos objetos e classes (estruturas ou structs no caso do DateTime) que precisam ser conhecidas e utilizadas para conseguir a mesma informação.

O código abaixo mostra um exemplo de como obter tais dados de forma simples utilizando a linguagem C#.

1
2
3
4
5
6
7
8
9
DateTime startTime = DateTime.Now;
 
DateTime endTime = DateTime.Now.AddSeconds( 100 );
 
TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
Console.WriteLine( "Time Difference (hours): " + span.Hours );
Console.WriteLine( "Time Difference (days): " + span.Days );

No exemplo acima, foram criados dois objetos DateTime sendo um com a data atual e o outro com 100 segundo a mais do que a data corrente. Basta executar o método Subtract() da struct DateTime para obter um objeto TimeSpan com a diferença de valores entre as duas datas. O objeto TimeSpan representa um intervalo de tempo, ou duração de tempo, medida como um número positivo ou negativo de dias, horas, minutos, segundos e frações de segundo.

Saída:

1
2
3
4
Time Difference (seconds): 40
Time Difference (minutes): 1
Time Difference (hours): 0
Time Difference (days): 0

Como pode ser visto, 100 segundo equivalem a exatos 1 minuto e 40 segundos, que é o resultado exato do código. Outras propriedades como a quantidade de milisegundos poderia ser também avaliadas.

Um descritivo completo da classe TimeSpan pode ser visto no MSDN: http://msdn2.microsoft.com/en-us/library/system.timespan.aspx

Apesar de ser uma abordagem diferenciada, trata-se de uma mecanismo poderoso de tratamento de data e hora no .NET.

Referência: http://www.dotnetspider.com/kb/Article552.aspx