sábado, 28 de abril de 2012

Ocorreu um erro. Tente novamente no Youtube

Nos últimos 2 meses, o Youtube está experimentando problemas de carregamento de vídeos, pequenos ou grandes.

A que se devem estes problemas ?

O Youtube se tornou uma nova provedora de TV. Com isto, o espaço publicitário se deslocou para este site. Muitos ganhos estão se dando através dele. Mas o usuário está sendo penalizado. Além de ter que saltar os anúncios, os vídeos estão sendo atrasados por programas de estatísticas e cookies instalados no computador cliente.

Mais um agravante é estabelecido pelos níveis de segurança dos browsers Chrome, Internet Explorer, Firefox e Opera.

Para resolver este problema, "limpamos" os controles de segurança EXAGERADA e manipulação de arquivos temporários de um controle de navegador num pequeno pacote. Para sua segurança, use somente com o Youtube:

http://www.4shared.com/file/uVzb0qH4/Youtube.html?

A segurança, publicidade e estatística chegou na níveis proibitivos na Internet, e nem quem tem 10 Mb de banda larga consegue ver as coisas direito. Anúncios bancários, de sites de venda e outras chatices nos enervam.

CHEGA. Use este programa e seja feliz. Ele não contém spyware, adware nem "chateware".

terça-feira, 24 de abril de 2012

DimLeg - Dimensiona e coloca legendas em imagens

No dia a dia de uma agência, produtora de mídia ou agência de serviços Web, o tratamento de fotos, mesmo básico, toma muito tempo.



Para atender às exigências mais básicas, sem adquirir produtos excessivamente caros e complexos, nossa equipe compôs uma especificação com exigências muito sumárias para tratamento de imagens, se concentrando nos padroes básicos BMP e JPG, evitando os "cliques direitos" menus suspensos e a poluição de infinitos comandos que só servem para confundir os iniciantes.

O resultado é um software livre, em constante evolução, a ser baixado pelo link:



Carregando uma imagem

A imagem pode ser carregada:

1 - Pela barra de endereço de imagens:


2 - Pelo botão Colar:

Tome o cuidado de deixar a caixa de percentual em 100 % a cada carregamento (ela estará habilitada após o primeiro carregamento).

Cortando imagens (CROPing)

A área de ferramentas para corte de imagens está no lado direito do aplicativo:



Usem e abusem.

sexta-feira, 16 de março de 2012

Configurando CGI no servidor Quick n Easy

A configuração de servidores Web para executar CGIs é um trabalho aborrecido, pois os produtores deste segmento de software se preocupam com tecnologias muito novas, e se esquecem do tão útil, consagrado, eficiente e seguro CGI (se for bem feito, e se estiver atrás de um Firewall bom).

É preciso entrar no software gerenciador e acessar a opção de menu e depois a aba de CGI:


Se não for possível ler os parâmetros, vamos repetí-los aqui:

Extension: exe

Interpreter: C:\Windows\system\cmd.exe /c

Experimente agora executar CGIs.

Lazarus Pascal - Criando componentes - II

No post anterior ( Lazarus Pascal - Criando componentes - II ) discutimos o protótipo da classe TGeraHtml. Agora falta realmente colocar funcionalidades nesta classe que será um componente.

Vamos criar duas variáveis PRIVADAS (private) que armazenarão o texto de HTML gerado em duas formas:


  • A forma de lista de strings;
  • A forma de texto inteiro (uma só string);


Estas variáveis são FHTMLDoc (formato de lista de strings) e FHTMLText (uma só string inteiriça). Para seguir o padrão do Lazarus usamos a letra "F" antecedendo os nomes das variáveis privadas.

E na seção Published da classe definimos a propriedade DocumentoHtml com o tipo TStringList, que lê ou devolve o parâmetro FHTMLDoc.

O pacote para o componente

Vamos então criar um pacote para este componente:


É mostrada uma tela de diálogo onde colocamos a unidade do componente (UComponente_GeraHtml.pas) através do botão Add:


Pressione o botão Compile e depois Install (1a. vez) ou Use => Install (2a. vez em diante).

Após o Install, se tudo der certo, o Lazarus vai reiniciar.

Coloque este componente em um formulário, e observe o Object Inspector:


Observe que apenas pela declaração de uma propriedade TStringList (DocumentoHtml) já aparece o botão que aciona o editor de código. No entanto, ele ainda não é operacional pelo fato de necessitar de acréscimos para funcionar.

O construtor da classe

Os métodos e propriedades funcionais aparecem no Object Inspector, mas para que funcionem corretamente, é preciso que o componente tenha um construtor. Deixamos de colocá-lo para mostrar a sua necessidade:



No construtor é preciso declarar a herança do construtor da classe imediatamente superior (TComponent) expresso na variável AOwner de chamada. Repare que no construtor fizemos a inicialização do campo de tipo TStringList, pois isto é necessário para que se consiga invocar o editor de código ao se pressionar o botão "..." ao lado do campo. Recompilamos o pacote e instalamos.

Quando clicamos no botão "...'" aparece o Editor abaixo:


Erros

No entanto, você vai obter erros para acessar este editor e até para gravar algum formulário com este componente incorporado. Apesar da propriedade DocumentoHtml ser do tipo TStringList, vamos optar pelo tipo TStrings e fazer a sua atribuição no construtor por um método acessor considerando sim o tipo como TStringList. Portanto, devemos proceder às seguintes alterações:



Caso a visibilidade desta imagem não o satisfaça, vamos enumerar o que fizemos:


  • A variável FHTMLDoc, que armazena o valor da propriedade DocumentoHtml, foi declarada como TStrings;
  • Declaramos um método acessor (procedure setHtmlDoc) que envia um valor do tipo TStrings;
  • Modificamos o tipo da propriedade DocumentoHtml para TStrings;
  • Colocamos o método acessor para ajustar a propriedade DocumentoHtml;
  • No construtor, criamos a variável que armazena a propriedadeDocumentoHtml como TStringList, apesar de ela ser do tipo TStrings;
  • No método acessor, utilizamos a procedure Assign do tipo TStrings;


Desta forma, o componente não mais dá o erro de Access violation até para salvar um formulário onde foi colocado este componente.







quinta-feira, 15 de março de 2012

Lazarus Pascal - Criando componentes - I

Sem enrolação, vamos explicar detalhadamente a criação de componentes no novo e excelente Lazarus Pascal (0.9.30.2).

Unit

O componente é baseado numa Unit. Como até esta versão do Lazarus não temos uma template de componente, teremos que:

Criar uma nova Unit (File => New Unit) e através do Project Inspector tirá-la do projeto.

Este é o corpo default de uma unit:


Vamos compor uma classe que será INCORPORADA à paleta de componentes do Lazarus para uso posterior. Ela será algo útil como um gerador de códigos HTML. Na maior parte de seus métodos obteremos como resultado (retorno de função) código HTML gerado.

A classe

Os componentes são expressos em forma de classes Pascal que se conectam ao framework do Lazarus para poderem ser incluídos em formulários Lazarus.

O nome de nossa classe será TGeraHtml. Desta forma, seu protótipo dentro de uma Unit Lazarus. Desta forma, o protótipo de nossa classe será:

O nome da classe leva a letra "T" antes do nome para ficar dentro do padrão Lazarus. O componente é uma extensão da classe TComponent (é óbvio). O protótipo de TComponent já carrega consigo uma série de interfaces que o tornam adequado a ser incluído em um formulário.

Procedimento de registro

Para ser incorporado à paleta de componentes do Lazarus, o componente precisa ter um método de registro na paleta, dando a forma final do protótipo de componentes do Lazarus Pascal.


Repare que salvamos a Unit com um nome sugestivo, e que por isto o Lazarus altera seu nome na cláusula Unit.

Este é o protótipo básico do componente.

domingo, 19 de fevereiro de 2012

CGI - Erro de ODBC 126 no Microsoft Access Driver

Programando em CGI no Sistema Windows Seven, e não podendo escolher o IIS (o Express e o Cassini não executam CGI), fizemos a opção pelo Tomcat. Tendo que usar o Microsoft Access devido aos custos com exportação de dados e conversão de tipos para o Mysql em aplicações legadas, optamos pelo servidor Tomcat 7. O Tomcat é mais compatível com a arquitetura CGI e ainda roda servlets JSP.

Diante de todos estes fatores, o acesso aos dados por ODBC tornou-se o mais viável. Mas ao tentar este acesso, o browser informou que não era possível acessar o ODBC via MIcrosoft Access Driver devido ao erro de sistema 126.

Em sistemas Microsoft isto é muito comum, pois cada atualização joga DLLs sobre as já existentes, provocando conflitos entre número de parâmetros e seus tipos de dados. E isto ocorre com o pacote de objetos que contém o ODBC. Com isto, a biblioteca odbcjt32.dll pode se tornar incompatível com o sistema da máquina (pasmem).

Resolvendo o problema no Windows XP e Seven

Vamos resolver o problema de forma que possa ser aplicado ao Windows XP e Seven.


    Como o Seven não vai deixar (em alguns casos) você copiar a biblioteca odbcjt32.dll para o C:\Windows\System32, crie um diretório C:\Meusystem com os arquivos:

     msjter40.dll
     odbcjt32.dll
     odbcji32.dll

Tire as bibliotecas odbcji32.dll e  msjter40.dll do C:\Windows\System32.
   
 No registro do Windows, na chave ODBCINST.INI, altere os parâmetros Driver e Setup do Microsoft Access Driver para este PATH (C:\Meusystem ):






segunda-feira, 13 de fevereiro de 2012

Lazarus Object Pascal - Programando em CGI

CGI é uma antiga forma de programar não proprietária em sua infra-estrutura, como é o ISAPI da Microsoft.

Vamos a algumas particularidades da programação em CGI que o tornam mais conveniente que o ISAPI em determinadas situações.

O ISAPI precisa ser preparado a base de objetos, forma de concepção de programação que exige planejamento anterior. Após o planejamento de métodos e propriedades que o objeto vai ter, é preciso utilizar ferramentas Microsoft de construção e dominar terminologias de construção que mudam de ano para ano e que provocam o advento de ferramentas cada vez mais complexas.

Se você desejar fazer uma aplicação simples de banco de dados e desejar ler um banco de dados em um arquivo TXT com uma certa estrutura, ou um XML, vai ter que dominar os aborrecidíssimos e instáveis objetos Microsoft, e que são portas para invasão, devido à não checagem de invasão de áreas de memória.

O Lazarus Pascal

O Lazarus Pascal, clone quase idêntico 100 % ao Delphi, possui componentes e capacidades já bem construídos em função das numerosas inconsistências do seu semelhante. Instale os dois pacotes do diretório:

<Diretório de Instalação>\Lazarus\Components\fpweb

Os pacotes a serem instalados são (nesta ordem):

weblaz.lpk
lazwebextra.lpk

Utilize a opção do menu:

Package => Open Package file (lpk)

Compile e Instale ambos, NA ORDEM QUE RECOMENDAMOS.

Se tudo correr bem, o Lazarus vai reiniciar.

Primeira versão - Utilizando o objeto TCustomCGIApplication


Inicie um novo projeto do tipo console.

program project1;

{$mode objfpc}{$H+}

uses
  Classes, SysUtils, httpDefs, custcgi, custweb
  { you can add units after this };
Type

    TMyCGIApp = Class(TCustomCGIApplication)
    Protected
      function InitializeWebHandler: TWebHandler; override;
    end;
      TMyCGIHandler = class(TCGIHandler)
       public
         procedure HandleRequest(ARequest: TRequest; AResponse: TResponse); override;
       end;

{$R *.res}
Procedure TMyCGIHandler.HandleRequest(ARequest : Trequest; AResponse : TResponse);
begin

AResponse.Content := '<H1>Hello</H1>';
end;

function TMyCGIApp.InitializeWebHandler: TWebHandler;
begin
   Result := TMyCGIHandler.Create(self);
end;

begin
   With TMyCGIApp.Create(Nil) do
     try
       Initialize;
       Run;
     finally
       Free;
     end;
end.


Segunda versão - Usando fpweb e o WebModule

Utilize a opção de novo projeto do tipo CGI Application.

A unit gerada nem precisará ser mexida:


unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, HTTPDefs, websession, fpHTTP, fpWeb, fphtml;

type

  { TFPWebModule1 }

  TFPWebModule1 = class(TFPWebModule)
    HTMLProducer1: THTMLEntityProducer;
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  FPWebModule1: TFPWebModule1;

implementation

{$R *.lfm}

initialization
  RegisterHTTPModule('TFPWebModule1', TFPWebModule1);
end.  

A única alteração virá como resultado da colocação de um componente THTMLEntityProducer da paleta fpweb.

Selecione o WebModule, e clique em sua propriedade Actions (que inicia com o valor 0 items). Aparece uma caixa de diálogo, onde você deverá pressionar o botão Add. Clicando na nova ação (action) aparecem as suas propriedades no Object Inspector. Clique então em Contents e coloque um trecho de HTML como abaixo:


<H1>HTMLEntityProducer</H1>
<P>Action 1</P>

Coloque o valor True na propriedade Default.

Compile e coloque o executável em um diretório com autorização de execução de cgis em um servidor web. Se você executar este programa pelo Lazarus, ele mostrará a mensagem:

Project <nome do projeto> raised Exception Class 'Exception' with message:
No REQUEST_METHOD passed from server.

Os fóruns de discussão da Internet não foram capazes de esclarecer os usuários do Lazarus de forma correta a respeito deste erro e nem do uso correto dos componentes fpweb. Foi preciso um enorme esforço para descobrir estas informações, sem documentação. Por isso estamos colocando esta ajuda para os "abandonados pelos técnicos".