Arquivo da Categoria ‘PHP’

Taxas e Índices (script PHP)

quarta-feira, 31 de outubro de 2007

Para quem quer atualizar pagamentos atrasados com Poupança, TR, IDTR, SELIC ou INPC estou disponibilizando alguns scripts PHPs que eu criei e deixo rodando na crontab. Os scripts estão bem mal trabalhados mas cumprem suas funções(descartar lixos e obter as taxas e/ou índices). Eles estão mal trabalhados pois eu já cansei de fazer códigos documentados, muito bem estruturados e no mês seguinte o site com a fonte das informações mudar ou até mesmo parar de oferecer estes dados e eu ter que reprogramar tudo…

Baixar os scripts PHP para coleta de Taxas e Índices ( Poupança, TR, IDTR, SELIC ou INPC )

Nunca tentei entrar em contato com nenhuma instituição que publique Taxas e Índices para saber da possibilidade de criarem um XML, mas acho isso era o mínimo, assim como acho que os correios deveria disponibilizar gratuitamente um CSV, script SQL ou qualquer coisa do gênero com a tarifação para utilizar em comércios eletrônicos, afinal de contas quem consulta o preço no mínimo pretende utilizar o serviço, por este motivo colocarei um robô (script PHP) para coleta da tabela integral de tarifas dos correios de todos os serviços( sedex, pac, etc ) em breve.

Abraços

PHP: “Você quis dizer …”

quarta-feira, 31 de outubro de 2007

Quer corrigir erros de grafia quando um usuário tenta utilizar o seu motor de busca?

Programo com PHP a muito tempo, mas conheci esses dias as funções suggest ( www.php.net/suggest ), que baseado em dicionários tenta corrigir possíveis erros de grafia.

Google Custom Search Engine

quarta-feira, 31 de outubro de 2007

Personalizando o Google para o seu website:

http://www.google.com/coop/cse/

é possível tirar as propagandas, dar ênfase no seu website, ou até mesmo restringir o google no seu website, tudo personalizado.

[]s

Utilizabilidade

quarta-feira, 24 de outubro de 2007

Site muito interessante aqui da UFSC…

http://www.labiutil.inf.ufsc.br/

Abraços

Livros

terça-feira, 16 de outubro de 2007

Estou terminando de ler e indico:

Robert Wong está entre os 200 principais headhunters do mundo, em seu livro ele dá excelentes dicas para uma vida profissional e pessoal de sucesso baseado principalmente na sua experência pessoal e na sua origem oriental com experiências ocidentais, leitura bem construtiva pessoalmente e profissionalmente, recomendo.

Próximas aquisições:

Desenvolvendo Aplicações para celular com J2ME

sábado, 15 de setembro de 2007

Um cliente me pediu um desenvolvimento de aplicações para SmartPhones e me deu como opção um BlackBerry e o Nokia E61, dois excelentes aparelhos, os dois são práticos e como o público alvo da aplicação é eram pessoa com mais de 40 anos, e por isso eu não estava certo se eles iriam utilizar, mas aparentemente esta sendo muito bom…

Algumas características dos aparelhos:

BlackBerry:
- o gateway de conexão com a internet é a própria RIM (não me agradou saber disso);
- o “mouse” é um botão de rolagem, a princípio é a coisa mais estranha do mundo parece que você não vai se acostumar, mas com pouco tempo de uso(pouco mesmo), você acaba se adaptando e ele se torna muito prático e você consegue usar quase tudo com uma única mão sem dificuldade;
- o navegador eu achei muito ruim, ele não trabalhava direito com JavaScript, não aceitava iframe, etc. parece ser bem limitado;

Nokia E61:
- Sistema operacional: Symbian (é um linux);
- Navegador é o opera (é fantástico, aceita tudo, e a tela útil parece maior que o blackberry);
- Possui suporte a um telefone IP via protocolo SIP, este eu não consegui testar até hoje;
- Suporta Conexão Wifi e Bluetooth;
- Cartão Mini SD hotswap;
- Roda aplicações J2ME;

Para este cliente acabei reaproveitando um código e o sistema adaptado foi todo via WEB (PHP), mas com o incentivo de um professor (Jordan – www.webpack.com.br ) acabei fazendo alguma brincadeira com o J2ME.

Primeiro quero deixar bem claro que eu tenho aversão a JAVA, para mim não existe nada tão ruim… para o desenvolvedor pode ser a melhor coisa do mundo, mas para o usuário final é uma naba, trava mais que windows, é mais lento que 286, etc… não vem ao caso, mas tenho que concordar que se ele roda bem nos celulares podemos e devemos usar esta linguagem.

Para quem quer desenvolver aconselho utilizar o ECLIPSE com o Wireless Toolkit, partindo do ponto que você já instalaou estas ferramentas, siga os passos abaixo:

1- Abra o Eclipse;
2- Clique em “New”, “Other”, e selecione o item “JAVA MIDLET SUITE”;

3- Avance no wizard do novo projeto até o fim;
4- Com um clique no o botão direito sobre o novo projeto, clique em “New”, “Other”, e selecione o item “JAVA MIDLET” – Não é o midlet suite!!;
5- Avance no wizard do novo midlet até o fim;
6- Cole o teste abaixo, se for preciso mude o nome da classe “teste” para o nome da sua classe java midlet:

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;public class teste extends MIDlet implements CommandListener {

private Display theDisplay;
private TextBox txbMensagem;
private Ticker tick;
private Form form1;
private TextField texto1, texto2;
private Command autenticar;
private Alert alert;

public void teste() {
theDisplay = Display.getDisplay(this);
texto1 = new TextField(”Nome:”,””,20,TextField.ANY);
texto2 = new TextField(”Senha:”,””,15,TextField.PASSWORD);

form1 = new Form(”Autenticação”);
form1.append(texto1);
form1.append(texto2);

tick = new Ticker(”Mensagem rolando”);
form1.setTicker(tick);
autenticar = new Command(”OK”,Command.OK,0);
form1.addCommand(autenticar);
form1.setCommandListener(this);
theDisplay.setCurrent(form1);
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub
}

protected void pauseApp() { // TODO Auto-generated method stub
}

protected void startApp() throws MIDletStateChangeException {
this.teste();
}

public void commandAction(Command cmd, Displayable arg1) {

// TODO Auto-generated method stub

  if (cmd == autenticar){
if(texto1.getString().equalsIgnoreCase("aaa")){
txbMensagem = new TextBox("autenticado","",15,0);
theDisplay.setCurrent(txbMensagem);
}else{
alert=new Alert("Atenção","nome inválido",null,null);
alert.setTimeout(5000);
tick=new Ticker("bé! senha errada");
alert.setTicker(tick);
theDisplay.setCurrent(alert);
}
}
}
}

Agora para rodar este código no emulador é só clicar com o botão direito em cima da classe e logo em seguida nos botões RUN AS e EMULATED J2ME MIDLET ….

Legal né? fácil? também achei… Para publicar o código em seu celular é simples siga os passos:

1- Botão direito em cima do projeto;
2- Clique em J2ME e “CREATE PACKAGE”;
3- Agora é só copiar o .JAD e o .JAR que estão dentro da pasta deployed, dentro da pasta do projeto no workspace do eclipse para dentro do celular e instalar :)

Abraços,
Fernando Costa

Como fazer um Benchmark de aplicações HTTP

sábado, 15 de setembro de 2007

Trabalho a 7 anos para um cliente com um banco de dados já bem ultrapassado, poucas pessoas conhecem ele, é o ZIM, e por ser bem antigo ele não possui nenhuma feature nativa para conexão com linguagens WEB, sendo assim, eu com mais um colega de trabalho que é desenvolvedor ZIM desenvolvemos conector PHP 2 ZIM para poder trabalhar, mas este conector trabalha com algumas limitações que ocasionalmente demandam um pouco mais de tempo de desenvolvimento, mas em momento nenhum impedem o desenvolvimento….

Tentando melhorar esta plataforma desenvolvi um “driver ODBC para ZIM” que tirou todas as limitações de comando no banco (ele não tirou a limitação de telas, mas nem é preciso, afinal de contas quem vai trabalhar com as telas é o HTML com PHP), ficou a coisa mais linda do mundo mas antes de sair implementando com esta nova ferramenta resolvi fazer um benchmark de um algoritmo rodando no sistema antigo e no sistema novo para ajudar na escolha de implementação.

Legal… mas como fazer um benchmark de aplicações HTTP?

Pesquisando encontrei três ferramentas:

  • httperf
    Ferramenta capas de fazer tudo a partir de simples requisições para simular clientes, disponível em: http://www.hpl.hp.com/personal/David_Mosberger/httperf.html
  • Apache Bench
    Ferramente simples de benchmarking, distribuida com o servidor web Apache.
  • Autobench
    É um script Perl script para automatizar uma série de testes no httperf em todo o servidor (um uma parte do servidor). Ele faz um “parse” na saída do httperf conseguindo exportas os dados para documentos CSV ou até mesmo gráficos. Disponível em: http://www.xenoclast.org/autobench/

A ferramenta chamada “ab” ou Apache HTTP server benchmarking tool, é uma simples e excelente ferramenta, consultando o manual(“man ab”) dá para incrementar o benchmark, mas basicamente dá para fazer assim:

ab -n [número de requisições] -c [número de conexões concorrentes] [http://site]

Exemplo:

[root@server ~]#  ab -n 100 -c 5 http://www.google.com.br/This is ApacheBench,
Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0

Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Copyright (c) 1998-2002 The Apache Software Foundation,
http://www.apache.org/Benchmarking www.google.com.br (be patient).....done

Server Software:        gws

Server Hostname:        www.google.com.br

Server Port:            80

Document Path:          /

Document Length:        2976 bytes

Concurrency Level:      5

Time taken for tests:   8.54946 seconds

Complete requests:      100

Failed requests:        16

(Connect: 0, Length: 16, Exceptions: 0)

Write errors:           0

Total transferred:      328742 bytes

HTML transferred:       297542 bytes

Requests per second:    12.41 [#/sec] (mean)

Time per request:       402.747 [ms] (mean)

Time per request:       80.549 [ms] (mean, across all concurrent requests)

Transfer rate:          39.85 [Kbytes/sec] received

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:      161  170   7.3    172     196

Processing:   190  224  59.2    207     613

Waiting:      166  199  58.9    183     589

Total:        352  394  59.7    380     774

Percentage of the requests served within a certain time (ms)

50%    380

66%    384

75%    395

80%    400

90%    417

95%    532

98%    680

99%    774

100%    774 (longest request)

[root@server ~]#

HTTPERF

       httperf  [--burst-length  N] [--client I/N] [--close-with-
       reset] [-d|--debug  N]  [--failure-status  N]  [-h|--help]
       [--hog] [--http-version S] [--num-calls N] [--num-conns N]
       [--port N] [--rate X] [--recv-buffer N] [--send-buffer  N]
       [--server  S]  [--think-timeout X] [--timeout X] [--uri S]
       [-v|--verbose]  [-V|--version]  [--wlog  y|n,F]   [--wsess
       N,N,X] [--wset N,X]

Manual: http://www.hpl.hp.com/research/linux/httperf/httperf-man.txt

AUTOBENCH

O autobench pode ser executado desta forma:

autobench --single_host --host1 www.test.com --uri1 /10K --quiet
          --low_rate 20 --high_rate 200 --rate_step 20 --num_call 10
          --num_conn 5000 --timeout 5 --file resultado.tsv

O resultado deste comuando vai ser o arquivo resultado.tsv:

----------------------
dem_req_rate	req_rate_testhost	con_rate_testhost
min_rep_rate_testhost	avg_rep_rate_testhost	max_rep_rate_testhost
stddev_rep_rate_testhost	resp_time_testhost	net_io_testhost	errors_testhost
200	199.3	19.9	182.0	199.7	200.6	2.6	90.0	243.7	0
300	298.4	29.8	273.8	299.2	300.6	4.6	90.0	364.9	0
400	397.2	39.7	364.7	398.6	401.8	7.1	90.1	485.7	0
500	495.7	49.6	454.9	497.8	501.8	10.1	90.1	606.0	0
600	593.7	59.4	546.0	596.7	601.8	13.6	90.1	725.9	0
700	691.5	69.1	637.6	695.6	700.2	16.7	90.1	845.5	0
800	788.8	78.9	728.6	794.1	802.8	20.7	90.1	964.4	0
900	885.9	88.6	819.5	892.8	900.4	24.3	90.2	1083.2	0
1000	982.5	98.3	910.6	991.1	1008.2	28.8	90.2	1201.3	0
1100	1078.8	107.9	1001.7	1089.1	1101.2	32.8	90.2	1319.0	0
1200	1175.0	117.5	1092.6	1186.5	1200.4	38.0	90.5	1436.6	0
1300	1270.4	127.0	1182.5	1283.1	1312.3	44.9	90.6	1553.3	0
1400	1365.8	136.6	1273.3	1381.7	1401.1	47.8	91.4	1669.9	0
1500	1459.3	145.9	1341.9	1474.6	1505.1	65.1	100.8	1784.2	0
1600	1549.5	155.0	1414.9	1561.9	1607.7	72.6	124.2	1894.5	0
1700	1619.9	162.0	1443.8	1628.7	1726.8	96.6	212.4	1980.6	0
1800	1580.3	158.3	1478.3	1656.2	1757.1	100.2	282.6	1932.2	0.016025641025641
1900	1636.8	165.6	1481.0	1646.9	1759.6	118.4	300.1	2001.2	0.115314586283633
----------------------
2000	1641.5	173.0	1502.6	1659.1	1741.4	94.3	312.5	2006.9	0.53740779768177

Um exemplo de gráfico gerado pelo autobench:

Agora com o tempo de execução eu cheguei a conclusão que a nova versão precisa de melhorias na performance, pois a antiga ainda está ganhando :(

Abraços,
Fernando Costa

Fontes:
http://www.xenoclast.org/autobench/
http://www.hpl.hp.com/research/linux/httperf/
http://www.apache.org/