quarta-feira, 23 de fevereiro de 2011

Artigo sobre WordPress publicado na Clube Delphi 126

Já está disponível no site da Dev Media a algum tempo, e logo chegará nas bancas a revista Clube Delphi edição 126.

Nesta edição saiu um artigo meu sobre o WordPress, como integra-lo com uma aplicação Delphi para postagens ou monitoria do que se fala sobre sua marca. Esse artigo foi uma pincelada no assunto. A integração ainda pode se dar via RSS, webservices e outros tipos de customização. Além disso o que foi apresentado não se aplica apenas ao WordPress, mas ao Magento e Joomla também.

Gostaria de destacar o artigo do Rodrigo Araújo sobre Expressões Regulares. Sempre quisemos ter isso no Delphi e agora temos nativo, o que é muito bom.

Padrão Strategy do Rafael Stavarengo é um dos que eu recomendo fortemente a leitura. Aliás, todos os artigos do Rafael Stavarengo são fortemente recomendados. O cara manja muito de POO eDesign Patterns.

O Datasnap XE é O DATASNAP. Tudo o que você esperava de melhorias nessa tecnologia agora estão aí, disponíveis. E o Rodrigo Carreiro Mourão, outra fera, fala de DataSnap associado a generics, RTTI e DAO.

O artigo de capa é indispensável para quem quer praticar XP. Os builds DEVEM ser automatizados.

Espero que todos tenham uma ótima leitura.

sexta-feira, 18 de fevereiro de 2011

Criando um arquivo unicode com BOM a partir do Delphi 7

Hoje um colega que leu meu post sobre quebra de linhas no Delphi 7 e no Delphi novo teve uma dúvida: Ele não estava conseguindo criar um arquivo de conexão UDL válido. Todos eles davam erro ao abrir.

Ele me disse que usar widestring não resolveu.

Fiquei surpreso do porque ele precisaria gerar o udl pelo Delphi, já que é possível apenas criar um arquivo de texto vazio, renomear ara .udl, e o arquivo será criado normalmente. Mas, ele tinha essa necessidade.

Uma das coisas que descobri hoje é que este arquivo, além de começar com [oledb], deve obrigatoriamente ter o "comentário" abaixo. Ou seja, não é apenas um comentario.

[oledb]
; Everything after this line is an OLE DB initstring

O conteúdo deve ser idêntico a esse. Mas não é apenas o conteúdo. Mesmo que se grave os cabeçalhos corretamente e as strings de conexão, e mesmo que as strings sejam widestrings de dois bytes (unicode) o arquivo em si ainda precisa de alguma coisa.

Essa alguma coisa é o BOM: Abrindo um arquivo que funcione em um editor hexadecimal verá que o arquivo começa com os bytes FF e FE.

Esse FF FE se chama BOM, Byte order mark, (http://en.wikipedia.org/wiki/Byte_order_mark) e diz para o programa que estiver lendo o arquivo qual é o formato (unicode ou não) e qual a orientação (big endian ou litle endian).

O BOM em si é um único char, um widechar de 2 bytes. Como você sabe o tamanho do BOM de cara fica fácil escrever ele no stream: o tamanho será 2, ou 1 * sizeof(widechar). Não concatene o BOM, nem "tipe" ele, pois ele será deformado. Grave-o como um puro array de 2 bytes.

Há alguns programas que não precisam do BOM, pois tentam inferir o tipo de arquivo pelo conteudo. Mas outros, como o programinha do windows que le/edita os udl ou o proprio notepad++ salvam o arquivo já com o BOM, e precisam dele para ler.

Faça o seguinte: crie uma const chamada BOM e grave essa constante no arquivo antes de gravar o restante do conteudo. Repare que o problema não é a quebra de linha, mas sim o BOM.


Mas atenção: não é apenas só por causa do BOM.

Como ja dissemos antes o arquivo deve ter inicialmente 3 linhas onde a primeira é [oledb] e a segunda deve ter exatamente 52 caracteres e deve ser exatamente: "; Everything after this line is an OLE DB initstring"

Exemplo de arquivo udl que se conecta em bases dbase.
[oledb]
; Everything after this line is an OLE DB initstring
Provider=MSDASQL.1;Persist Security Info=False;Data Source=dBASE Files

Exemplo de código usando const ou array de bytes. Perceba que um char pode ser representado pelo seu valor hexadecimal contanto que seja precedido de #$. O BOM é #$FF#$FE.
procedure TForm1.Button1Click(Sender: TObject);
var
  teste: WideString;
const
//  BOM = #$FF#$FE;
    BOM: array[1..2] of Byte = ($ff, $fe); 
begin

  with TFileStream.Create(ExtractFilePath(Application.ExeName)+'\teste.udl', fmCreate) do
  try
    teste :=
      '[oledb]'+#13#10+
      '; Everything after this line is an OLE DB initstring'+#13#10+
      'Provider=MSDASQL.1;Persist Security Info=False;Data Source=dBASE Files';
    //você sabe que o BOM tem um tamanho fixo, que é 2 bytes. O bom é um único widechar de 2 bytes
    Write(BOM, 1 * sizeof(widechar)); //2
    Write(Pointer(teste)^, Length(teste)*SizeOf(WideChar));
  finally
    Free;
  end;

end;


faça o download do exemplo.

Have fun ;)

quarta-feira, 16 de fevereiro de 2011

Coisas que eu aprendi no Delphi Meeting

A apple é mesmo revolucionária.
Depois do Ipod


do IPhone



E do IPad













É hora do.....


IPim

quinta-feira, 10 de fevereiro de 2011

Qual é sua segunda linguagem? E sua terceira?

Bom pessoAll, antes de mais nada, minha primeira linguagem é Delphi/Lazarus/Object Pascal e ponto final.
Tirando o Delphi a que eu mais gosto e respeito é C/C++, porém nunca arrumei um projeto, pago ou hobby, nessas linguagens. Só coisa acadêmica mesmo.


Todos os posts que discutem sobre linguagens geram bastante polêmica, por mais bobo que seja o assunto.
Eu gosto de olhar o site da TIOBE freqüentemente http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html


Position
Feb 2011
Position
Feb 2010
Delta in PositionProgramming LanguageRatings
Feb 2011
Delta
Feb 2010
Status
11Java18.482%+1.13%  A
22C14.986%-1.62%  A
34C++8.187%-1.26%  A
47Python7.038%+2.72%  A
53PHP6.973%-3.03%  A
66C#6.809%+1.79%  A
75(Visual) Basic4.924%-2.13%  A
812Objective-C2.571%+0.79%  A
910JavaScript2.558%-0.08%  A
108Perl1.907%-1.69%  A
1111Ruby1.615%-0.82%  A
12-Assembly*1.269%-  A-
139Delphi1.060%-1.60%  A
1419Lisp0.956%+0.39%  A
1537NXT-G0.849%+0.58%  A--
1630Ada0.805%+0.44%  A--
1717Pascal0.735%+0.13%  A
1821Lua0.714%+0.21%  A--
1913Go0.707%-1.07%  A--
2032RPG (OS/400)0.626%+0.27%  A--


Lá tem gráficos e comparativos do uso das linguagens. Java e C/C++ são sempre absolutos, e com os novos smartphones, principalmente o Android, a tendência é a popularidade do Java aumentar.
Agora o que me surpreendeu foi o python!!! Eu queria que minha terceira linguagem fosse o Ruby, (já que a segunda é o C#, empatado com o PHP) mas o python está em quarto lugar.

Vocês repararam que embora o Java esteja em primeiro eu não tenho a mínima vontade de aprender Java, a não ser que seja por causa do Android? Pois é, eu não sigo modinhas.

E vocês, qual é a sua segunda e terceira linguagem?

Postagens populares

Marcadores

delphi (60) C# (31) poo (21) Lazarus (19) Site aos Pedaços (15) sql (13) Reflexões (10) .Net (9) Humor (9) javascript (9) ASp.Net (8) api (8) Básico (6) Programação (6) ms sql server (5) Web (4) banco de dados (4) HTML (3) PHP (3) Python (3) design patterns (3) jQuery (3) livros (3) metaprogramação (3) Ajax (2) Debug (2) Dicas Básicas Windows (2) Pascal (2) games (2) linguagem (2) música (2) singleton (2) tecnologia (2) Anime (1) Api do Windows (1) Assembly (1) Eventos (1) Experts (1) GNU (1) Inglês (1) JSON (1) SO (1) datas (1) developers (1) dicas (1) easter egg (1) firebird (1) interfaces (1) introspecção (1) memo (1) oracle (1) reflexão (1)