terça-feira, 19 de junho de 2012

Erro 404 Magento Connect (Magento Downloader)

Passei muito tempo tentando encontrar a solução para esse erro. Infelizmente não vou poder explicar a solução, apenas disponibilizá-la.

Primeiro, se você viu esse erro antes de aparecer a tela de login, é apenas um problema de permissão. Coloque a pasta downloader/ com permissão 755 e o arquivo index.php dentro dela com 644 e pronto.

Se após tentar de tudo, você depois de informar os dados de acesso no magento connect não consegue conexão, o problema é no servidor. Aparentemente algum problema com a conexão com o MySQL. Utilizei o componente pdo.so definido no php.ini na pasta raíz do magento. Porém essas configurações não foram herdadas na pasta downloader/. Foi só copiar o php.ini com as configurações de módulos necessários para a minha instalação do magento para a pasta downloader/ e pronto. Funcionou!

sábado, 2 de junho de 2012

A importância da análise de cada caso particular no desenvolvimento de sistemas

Irei retratar nesse texto uma experiência que estou tendo ao desenvolver um sistema em que os requisitos não foram bem definidos. Irei dar dicas baseado nessa experiência para que outros desenvolvedores, principalmente iniciantes façam um trabalho bem feito, com cumprimento de prazos e por um valor justo.

É difícil imaginar desenvolver um site de conteúdo simples utilizando contrato de escopo aberto (é claro que dependendo da necessidade, se houver funcionalidades que são um pouco fora do comum e são muito específicos do negócio do cliente), mas um sistema onde as funcionalidades são variáveis e são muito dependentes do negócio do cliente, ou seja, onde será mais trabalhoso utilizar um sistema pronto e adaptar às necessidades do que criar do zero (leia-se criar do zero desenvolver utilizando uma framework, então não totalmente do zero) na minha opinião é a primeira opção que deve ser utilizada.

Recebi um telefonema de uma pessoa com quem trabalhei a algum tempo. Essa pessoa queria que eu fizesse um site para o condomínio. Fui até lá e não era um simples site a ser feito, e sim um sistema que gerencia reservas, cadastro do condômino, automóveis, mural de mensagens e várias coisas. Parece simples? Primeiro erro.

Muitas vezes quando visualizamos o sistema com essas funcionalidades em mente parece ser algo simples. Mas tem um detalhe que muitas vezes esquecemos e é muito importante: O Back-end, ou área do administrador. Nessa área deveremos mais cedo ou mais tarde incluir ACLs (Lista de controle de acesso) para que cada tipo de usuário possa acessar as funcionalidades à ele destinadas (nesse caso: administrador, síndico, porteiro).
O administrador deve poder fazer tudo, inclusive excluir registros, adicionar e editar. Há registros que não desejamos eliminar nunca do sistema, nesse caso deveremos colocar um campo 'ativo' por exemplo para indicar se o registro deve ou não aparecer... E por aí vai!

Além do Back-end, o front-end possui muitos itens que esquecemos como o desenvolvimento da interface, a integração de formulários com ajax e por aí vai...

Sem perguntar muito e sem anotar nada pensei em um preço menor, mas por experiência aumentei o valor, e acharam alto, mas mesmo assim acordaram o valor passado menos um pouco de barganha. Pelo trabalho que já tive estou fazendo esse sistema mais pelo portfólio do que pelo valor pago, pois está saindo bastante barato.

Depois de considerado terminado o sistema, faltando alguns itens, enviei por e-mail para apresentá-lo ao síndico. Me ligaram e disseram que estava OK, só algumas mudanças...

Muitas coisas não foram especificadas, como as regras para as reservas. O formulário que me passaram do condômino não estava bom, teve que ser alterado, o layout da página também, o mural, os classificados....

Meu erro, não colher corretamente os requisitos. É claro que eu tinha idéia do sistema, e até desenvolvi corretamente, mas muitos detalhes passaram por questões de funcionalidades não especificadas.

A partir desse momento comecei a marcar encontros semanais com o Síndico para irmos melhorando o sistema, e dessa forma está quase terminado. É um sistema que me toma bastante tempo e por esse motivo o valor que cobrei inicialmente não foi bom. Mantenho a minha palavra e guardo como experiência.

A partir disso enumero algumas dicas:

  • Utilize um contrato de escopo aberto, é algo incrível no desenvolvimento de software. Quem não sabe o que é isso, leia:  http://www.improveit.com.br/xp/praticas/contrato. Uma das coisas mais interessantes são os entregáveis semanais pois é possível avaliar os requisitos e melhorar o sistema de acordo com as necessidades, além de receber um bom valor pelo trabalho.
  • Cuidado com os clientes que não são experientes com computadores, esse é o caso, o cliente não é muito familiarizado com algumas ferramentas o que prejudica o processo de desenvolvimento, como por exemplo comunicação por e-mail. Se possível tente instruir o seu cliente a trabalhar da melhor forma, utilizando ferramentas boas e produtivas disponíveis.
  • Avalie bem antes de colocar o preço no serviço. Se possível peça um tempo para pensar, mas dê um prazo para enviar a proposta e não fure com esse prazo! Se você não é um programador com portfólio grande, ou é iniciante, não coloque preços altos, mas também não peça valores simbólicos. Peça um valor que te manterá financeiramente enquanto você faz o sistema. Se quiser fazer somente por portfólio, procure alguém que não possa pagar e tenha uma idéia legal e faça de graça. Acredite, no momento que você cobra R$300,00, você ficará pensando que está tendo todo aquele trabalho por R$300,00 e não lembrará muito do seu portfólio. Quando nada é cobrado, você sabe e tem em mente porque está fazendo aquele trabalho. Motivação é muito importante.
    Se o cliente não aceitar o seu preço não faça o trabalho, você tem medo que esse seja a sua única oportunidade? Não é, existem muitas pessoas que querem fazer sistemas mas não tem orientação de como começar ou onde ir buscar, em quem confiar, etc. Vá em busca de outros trabalhos e conseguirá, avalie o cliente, avalie a idéia, dê preços menores com base na situação dele, mas lembre-se: Reverta sua motivação para a boa idéia do cliente e não para o valor que você irá receber.
  • Dê prazos maiores do que o que realmente leva para fazer o trabalho, o cliente quer urgente? Todos querem, mas ele não irá encontrar ninguém que faça o que ele quer bem feito e na velocidade que ele diz que precisa. Diga isso a ele e se ele não aceitar o seu prazo não faça o trabalho. Em casos que você acha que vale a pena, dê o prazo máximo, mas prepare-se para trabalhar mais de 10 horas por dia. E dando prazos maiores não é diferente, comece agora!
  • Redija um contrato. Isso dá profissionalismo, faça um padrão e vá melhorando a cada trabalho.
  • Aceite desafios. Não sabe nem por onde começar? Seja sincero, diga ao cliente que nunca trabalhou com isso mas tem conhecimentos suficientes para pesquisar e fazer um bom trabalho. E vá atrás, não fique esperando cair do céu. Se achar que não tem tempo para descobrir, ou o cliente precisa com uma urgência real, não aceite o trabalho, seja sincero com o cliente. Ele irá te indicar para outra pessoa.
Qualquer dica nova eu posto aqui. Qualquer dúvida, estou a disposição nos comentários.

quinta-feira, 10 de maio de 2012

PrettyPhoto is not a funcion

Tive um problema hoje ao inserir uma galeria do PrettyPhoto. Funcionava normalmente em outra página então simplemente copiei e colei o script jQuery (vindo do Google CDN) e o caminho do script do PrettyPhoto e é claro o link para o CSS do PrettyPhoto.

Mas sempre que eu clicava na imagem era redirecionado para a url da própria imagem (já que é o comportamento padrão caso não sejam carregados os scripts da PrettyPhoto). Porém o script do PrettyPhoto estava linkado e aberto corretamente pelo browser como pude observar no FireBug, assim como o jQuery.

Verifiquei que o erro apresentado era de que "PrettyPhoto is not a function" que significa que a função prettyPhoto que é definida no script PrettyPhoto.js não existe. Mas se ela está declarada porquê não existe?

Depois de buscar bastante, encontrei a solução aqui: http://www.wptavern.com/forum/troubleshooting/1961-thumbnail-linking-3.html - Último Post #24

Então troquei o código


$(document).ready(function() {
$("a[rel^='prettyPhoto']").prettyPhoto();
});


por


jQuery(document).ready(function($) {
$("a[rel^='prettyPhoto']").prettyPhoto();
});

Ainda estou procurando por uma explicação exata do porque não ter funcionado sem passar o objeto jQuery($) por parâmetro. Assim que identificar o porque eu posto aqui. Por enquanto serve como uma dica para salvar o seu dia!

sábado, 10 de março de 2012

#1025 - Error on rename of - MySQL - Erro ao deletar foreign key

Por vezes ao criar uma foreign key no MySQL e errar em sua definição ou mesmo necessitar deletá-la acontece esse erro. No PHPMyAdmin não é possível deletar o índice pois causa o mesmo erro. A solução não é complicada:

ALTER TABLE nome_da_tabela DROP FOREIGN KEY nome_da_foreign_key

Pronto, após esse passo, se ainda houver o índice é só deletá-lo com a mesma instrução acima mudando FOREIGN KEY por INDEX.

Se não criou a foreign key com um nome definido por você veja a lista de índices para saber o nome.

Essa postagem não é uma tradução, mas encontrei a solução nesse artigo: http://wolfram.kriesing.de/blog/index.php/2006/mysql-says-1025-error-on-rename-of-but-means

terça-feira, 27 de dezembro de 2011

Certificação Digital - MEI - Como emitir seu certificado digital (e-CNPJ)

Um certificado digital hoje é essencial para qualquer empresário. A começar pela necessidade de geração de nota fiscal eletrônica.

Para emitir um certificado digital para sua empresa é necessário escolher uma empresa especialista em certificação digital como a Certsign. Fiz a emissão do meu certificado de ontem para hoje e vou listar os passos para adquirir o seu:

1º. A Certsign está com uma promoção especial para micro e pequenos empresários, o valor é de R$189,00 do tipo A3 (que é fornecido no Token). Válido por um ano, mais 6 meses no valor promocional. Ou seja, no total a validade é de 1 ano e meio.

2º Efetue a compra do certificado, o pagamento pode ser feito em até 3x sem juros no cartão ou a vista no boleto. A desvantagem do boleto é a demora na confirmação do pagamento.

3º Após isso é necessário agendar o comparecimento a um ponto de verificação para levar a documentação da sua empresa. Isso é feito através desse link: http://www.certisign.com.br/suporte/certificadosdigitais/e-cnpj/Agendamento que você recebe ao confirmar sua compra.

4º Veja os documentos necessários: http://www.certisign.com.br/suporte/certificadosdigitais/e-CNPJ/Validacao%20e%20Documentos Vou detalhar para o MEI os documentos necessários. Todos os outros passos são válidos para qualquer empresa, mas os documentos listados abaixo são específicos para a validade do MEI:

  • (A) Documentos da empresa:
  • (B) Documentos do empresário (todos com cópia, menos foto 3x4):
    • RG
    • CPF
    • Título de Eleitor (opcional)
    • Comprovante de endereço (conta de água, luz, telefone fixo ou móvel e etc.)
    • Foto 3x4 recente
5º Leve no local e horário marcado os documentos e você sairá de lá com o Certificado digital (e-Token em formato de pendrive).

No próximo artigo explicarei como utilizar seu certificado digital. Até lá!

sexta-feira, 7 de outubro de 2011

Novo Kindle

No início da semana procurei novamente pelo Kindle, um aparelho que desejo comprar algum tempo devido à facilidade de leitura proporcionada por ele. Acabo não conseguindo dedicar tempo à leitura pela manipulação de livros físicos e falta de espaço. Acredito que com o Kindle posso resolver esse problema. 

Quando visitei o site da Amazon tive a surpresa de ver o novo kindle (os novos kindles) que iniciam com seu preço de $79 (dóllares), a versão com propaganda. Somente disponível a versão sem teclado que acabei adquirindo mas não no site da Amazon e sim em um site de compras coletivas. No site da Amazon também vi a versão Touch e o Kindle Fire, que acredito ser uma revolução no mercado de Tablets.

Um ponto que me chamou a atenção foi o texto da página inicial, que diz (tradução livre): "Existem dois tipos de empresas: Aquelas que trabalham duro para fornecer seus produtos a um custo mais elevado e as que trabalham duro para vender os seus produtos pelo menor preço possível. A Amazon se encaixa no segundo grupo". E qualquer pessoa que visite o site e veja o valor de $199 por um produto com a qualidade aparente do Kindle Fire, com os recursos descritos, perceberá que essa frase não é conversa de vendedor.

Segundo o Diário de Pernambuco, cada venda do Kindle gera um prejuízo para a Amazon: "Observadores da indústria afirmam que a varejista está, na verdade, tendo um prejuízo de pelo menos US$ 10 em cada unidade vendida. A IHS iSuppli disse que os componentes empregados na fabricação do Kindle Fire custam US$ 191,65 . Despesas de fabricação adicionais levam o custo total para US$ 209,63.". Fonte: http://www.diariodepernambuco.com.br/nota.asp?materia=20111026080713

 A versão Kindle Touch e Kindle Fire está disponível apenas para pré-venda e para endereços dos US. A versão Kindle Touch e Kindle Fire está disponível apenas para endereços no US. Para adquirí-lo aqui no Brasil é necessário recorrer ao eBay ou pagar absurdo de impostos quando o aparelho chegar por aqui. O lançamento está previsto para 21 de Novembro de 2011 (Esse prazo foi alterado para 15 de Novembro de 2011). O Novo kindle mais leve e a versão sem teclado já está disponível.


Review

O Kindle é realmente um aparelho que impressiona ao observar seu papel eletrônico (e-paper ou e-ink), quanto mais luz melhor. Esse é um ponto bom e ruim, pois não é possível ler no escuro, mas a impressão é que estamos mesmo lendo um livro.

Se você quer um aparelho em que o foco é a leitura, o Novo Kindle é perfeito. O teclado da 3ª geração somente faz falta ao tentar navegar na internet ou na primeira vez que o ligamos e temos que digitar nossos dados para registro. Ainda é possível enviar seus documentos pessoais e receber via wi-fi no Kindle.

Quando nos registramos na Amazon através do Kindle recebemos um e-mail para onde podemos enviar documentos (inclusive PDF) e receber convertidos no Kindle. Todos os jornais possuem um período de 14 dias de teste, e achei muito melhor receber um jornal todo dia pela manhã em um dispositivo portátil do que em papel que serve muito para a desorganização. É uma pena que são poucos editores que aderiram ao formato digital.

Existem muitos livros em Português, além disso é possível baixar PDFs do site Domínio Público e enviar para o seu e-mail do Kindle e receber o livro convertido.

Basicamente é isso, recomendo o Kindle para leitura, é perfeito. Ao invés de possuir uma pilha de livros que ocupa bastante espaço, você pode ter milhares de livros em um dispositivo fino, bonito e portátil. Qualquer dúvida, se estiver pensando em comprar um, só enviar um comentário com sua dúvida.

quinta-feira, 22 de setembro de 2011

Como configurar o retorno automático do PagSeguro em dois ou mais sites

Se você chegou à essa página através de algum motor de busca deve estar a procura de uma solução para um problema comum, com a versão 1 da API do PagSeguro.

Nessa API somente podemos ter configurado uma url de retorno do PagSeguro. Basicamente funciona bem, mas se tivermos dois sistemas distintos que efetuam as operações em bancos de dados diferentes, teremos um problema.

Para resolver essa solução temos que utilizar um critério de diferenciação de cada um dos sites. Acho interessante utilizar o campo “VendedorEmail”, você pode ter diversos e-mails cadastrados no PagSeguro, ao enviar o cliente via POST para a página de pagamento do PagSeguro, você envia o email do vendedor, no campo “email”.

Inicialmente achei que estava incorreto e acabei fazendo a diferença pela Referência, já que a referência era sempre o número do pedido, coloquei um “c_” para um site e assim por diante, no início da referência. E funciona bem.

Com PHP podemos fazer um redirecionamento temporário que reenvia os dados via POST, mas utilizar essa opção me fez perder muito tempo. Acontece que utilizando a biblioteca curl do PHP (que o PagSeguro utiliza para enviar o POST para a url de retorno) por algum motivo esse redirecionamento temporário não acontece, logo não funciona.

Então ao invés de fazer um redirecionamento temporário, utilizo curl para enviar os dados à página correta. Para exemplificar:

if (count($_POST) > 0) {
    if (strpos($_POST['Referencia'], 'c_') !== false) {
        $url = "http://www.site1.com.br/retorno_pagseguro.php";
    } else {
        $url = "http://www.site2.com.br/pagseguro/PagSeguroRetorno.php";
    }
    $ch = curl_init();
   
    $fields_string = '';
    $count = 0;
    foreach ($_POST as $key=>$item) {
        if ($count > 0)
            $fields_string .= '&';
        $fields_string .= $key . '=' . $item;
        $count++;
    }
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST, count($_POST));
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

    $result = curl_exec($ch);

    curl_close($ch);
   
} else {
    header("Location: http://www.site.com.br/mensagem-de-conclusao");
}
?>

Esse é o código que nos interessa, como expliquei acima, prefixei a referência com “c_”, então verifico se existe essa string no campo Referencia, utilizando a função strpos que retorna false, caso o segundo parâmetro string não esteja dentro do primeiro parâmetro string. Então se ele estiver eu defino que a url a ser enviado o POST é a url do primeiro sistema (a ordem não importa), podem ser informadas quantas páginas forem necessários, quantos sistemas você necessitar utilizar na mesma conta.

A última url é a url a qual o usuário será redirecionado quando voltar ao site, essa página deve ser única para todos os sistemas, pois nenhum dado de GET ou POST é enviado.

Com curl enviamos o POST, percorro o array $_POST para formatar a string que é necessária para definir o cabeçalho de envio e por fim chamo a função curl_exec que irá enviar o POST.

Dessa forma, você pode adaptar sua lógica com qualquer sistema.

Se tiver dúvidas ou precisar de ajuda para algum problema específico só enviar a dúvida nos comentários.

terça-feira, 7 de junho de 2011

JavaScript Orientado a objeto: Passando métodos de objetos como parâmetros para setInterval e setTimeout

É freqüente a necessidade do programador javascript escrever funções ou rotinas utilizando um contador para executar determinada ação em um intervalo de tempo, principalmente em ambientes utilizando ajax onde você necessita executar uma função em determinado espaço de tempo.

setInterval e setTimeout

A função setTimeout do javascript difere-se da setInterval por um detalhe: setInterval executa a função passada por parâmetro infinitamente em intervalos de milisegundos passados como segundo parâmetro à função. Ex: setInterval('funcao()', 1000).

Obs: 1000 milisegundos equivalem à 1 segundo.

A função setTimeout executa a função passada por parâmetro apenas uma vez, depois de passados a espera, também em milisegundos, ao segundo parâmetro da função. Ex: setTimeout('funcao()', 1000)

Como passar métodos por parâmetro
É possível programar em javascript orientado a objetos. Nesse post não vou entrar nos detalhes de orientação à objetos. Mas se você desejar passar um método por parâmetro dentro de seu objetos para uma das funções acima?

Primeiro, há outra forma de passar a função por parâmetro: (Iremos referenciar sempre setInterval, mas tudo que se aplica à essa, se aplica a setTimeout. A diferença entre as duas está no tópico anterior)

setInterval(funcao, 1000). Ou seja, passa uma função apenas pelo nome, nesse caso é passado a referência da função.

Dado a seguinte classe:
<script type="text/javascript">
function Classe() {
    var intervalo = 1; // Intervalo em segundos
    this.metodo = function() {
        alert("Estou dentro de um setInterval!");
    }
    // Aqui vai o método que chama o setInterval e passa o this.metodo como parâmetro
    this.set = function() {
        setInterval(this.metodo, intervalo*1000); // Transforma segundos em milisegundos multiplicando por 1000
    }
}
var c = new Classe();
c.set();
</script>

Esse código funciona?

Funciona!

MAS


Se quiséssemos chamar um outro método dentro do Classe.metodo e ainda passar parâmetros para o método passado na função, NÃO FUNCIONA!

Mudando a classe anterior:

<script type="text/javascript">

function Classe() {
    var intervalo = 1; // Intervalo em segundos
    this.metodo = function(msg) {
        this.metodo2(msg); // Chamando um outro método para exibir o alert
    }
    this.metodo2 = function(msg) {
        alert(msg);
    }

    // Aqui vai o método que chama o setInterval e passa o this.metodo como parâmetro
    this.set = function(msg) {
        setInterval(this.metodo(msg), intervalo*1000); // Transforma segundos em milisegundos multiplicando por 1000
    }
}
var c = new Classe();
c.set('Estou dentro de um setInterval');
</script>

Primeiro, esse código gerará um erro, você não está passando uma referência da função para setInterval e sim o valor resultante da função, nesse caso undefined. Esse problema é fácil de resolver:

setInterval(function() {this.metodo(msg);}, intervalo*1000);

Ótimo, agora estou passando a referência de uma função que executa o método em seu corpo. Mas ainda causará um erro. A função this.metodo2() não está definida!

Isso acontece porquê o this.metodo está sendo chamado repetidamente dentro do contexto do objeto window, ao qual pertence a função setInterval e setTimeout (window.setInterval, window.setTimeout) e não dentro do contexto do objeto. Dessa forma, os métodos chamados dentro do método passado por parâmetro estarão dentro do contexto de window.

A SOLUÇÃO


Devemos passar uma cópia do objeto para a função chamada em setInterval ou setTimeout dessa forma:

<script type="text/javascript">

function Classe() {
    var self = this; // Essa é a cópia do objeto

    var intervalo = 1; // Intervalo em segundos

    this.metodo = function(msg) {

        this.metodo2(msg);

    }

    this.metodo2 = function(msg) {

        alert(msg);

    }

    // Aqui vai o método que chama o setInterval e passa o this.metodo como parâmetro

    this.set = function(msg) {

        setInterval(function() {self.metodo(msg);}, intervalo*1000); // E aqui enviamos o método no contexto desse objeto
    }

}

var c = new Classe();

c.set('Estou dentro de um setInterval');
</script>

Atente às linhas: 

var self = this;

Faz a cópia do objeto para uma variável privada do objeto.

setInterval(function() {self.metodo(msg);}, intervalo*1000);

Aqui é feita a "mágica", passo uma função por referência que executa o método pelo objeto passado por cópia, e não this, que estariam referenciando o objeto window.

Qualquer dúvida, só postar nos comentários. Até a próxima!

sábado, 28 de maio de 2011

Google Maps API - Parte 1 - Gerando mapas estáticos (apenas imagens)

Prezados leitores,

Estou iniciando uma nova série de tutoriais, com três ou quatro partes explicando como gerar mapas em seus sites ou sistemas web utilizando a API do Google Maps, que é extremamente funcional. Os posts são semanais.

Nessa primeira parte, veremos como exibir um mapa de determinada localidade, esse mapa não é navegável, ou seja, é apenas uma imagem estática. A exibição de mapas dinâmicos utilizando JavaScript será vista na próxima parte.

Vamos iniciar com um exemplo. A imagem abaixo já está com a url no formato do mapa estático. Ela exibe o Distrito Federal do Brasil:


Vejam como a url para exibir esse mapa é simples: http://maps.google.com/maps/api/staticmap?center=Brasilia,DF&zoom=14&size=256x256&sensor=false

Ou seja, basta incluir essa url no atributo src da tag img, por exemplo:

<img src="http://maps.google.com/maps/api/staticmap?center=Brasilia,DF&zoom=14&size=256x256&sensor=false" alt="Mapa do Distrito Federal, Brasil">

Nessa url se baseia o uso de imagens estáticas, essa é a base: http://maps.google.com/maps/api/staticmap?$parametros$

São diversos os parâmetros que podem ser informados. O parâmetro sensor é obrigatório, ele indica se o dispositivo cliente possui um identificador de localidade, como um dispositivo GPS em um celular. Inicialmente definiremos sempre como false (a não ser que você deseje construir uma aplicação que utiliza a localização GPS), mas falarei mais sobre esse parâmetro na parte 2 desse tutorial.

O parâmetro center também é obrigatório, caso não haja nenhum marcador definido, como nessa url. E veja que legal, o Google geocodifica (geocodificar é o ato de transformar um endereço da forma como entendemos para números que informam as coordenadas do local) o endereço passado por parâmetro. Então como diria o meu professor: "É chuchu com tody".

Obs: Ao invés do endereço pode ser informado a latitude e longitude, separados por vírgula. Como geralmente é mais útil informar um endereço, usarei nesse tutorial apenas endereços.

Então se quiséssemos apontar o mapa para onde está localizado o estádio Maracanã no Rio de Janeiro, precisamos apenas alterar o parâmetro center da url: http://maps.google.com/maps/api/staticmap?center=Maracana,Rio+de+Janeiro,RJ,Brasil&zoom=15&size=256x256&sensor=false


Reparem que os espaços são substituídos pelo sinal +, isso é feito para codificar a URL, geralmente isso é feito automaticamente, e você poderia informar os espaços. Mas não custa nada inserir um + no lugar do espaço, isso pode evitar transtornos futuros.

Também notem que alterei o parâmetro zoom, esse parâmetro indica o nível do zoom da imagem, quanto maior, mais detalhe.

Por fim, nesse primeiro exemplo, o parâmetro size indica o tamanho da imagem retornada em pixels. Na documentação da API do Google Maps é informado o limite máximo de 640x640px. Esse parâmetro deve ser informado na seguinte ordem: horizontal x vertical. Ex: 500x400.

Existe também o parâmetro format que indica o formato de retorno, pode ser PNG (padrão), JPG ou GIF.

Um outro parâmetro interessante é o maptype. Esse parâmetro informa o tipo de mapa a ser retornado, o padrão é roadmap, que retorna um mapa desenhado com as estradas e indicações, como um Guia 4 rodas. Os outros três tipos são: satellite, hybrid e terrain.

Veremos um exemplo:

Alterando o atributo maptype para o tipo satellite, que retorna um mapa com a foto de satélite do mesmo local, o estádio Maracanã no Rio de Janeiro:


Essa foi a url utilizada: http://maps.google.com/maps/api/staticmap?center=Maracana,Rio+de+Janeiro,RJ,Brasil&zoom=15&size=256x256&sensor=false&maptype=satellite

Note que apenas alterei o parâmetro maptype.

O tipo hybrid é uma união dos tipos roadmap e satellite. Já o tipo terrain apenas mostra o terreno e vegetação.

Marcadores

Essa parte é muito importante, ao informar marcadores, não é necessário informar o parâmetro center. É difícil explicar o que é um marcador, então vou mostrar no mapa abaixo:


Esse balão com um "A" é um marcador.

A url para desenhar esse marcador no mapa: http://maps.google.com/maps/api/staticmap?center=Maracana,Rio+de+Janeiro,RJ,Brasil&zoom=15&size=256x256&sensor=false&maptype=satellite&markers=label:A|color:red|Maracana,Rio+de+Janeiro,RJ,Brasil

Para inserir um marcador basta adicionar o parâmetro markers, para cada marcador deve ser adicionado um parâmetro. Dentro desse parâmetro temos atributos de estilo. Se informarmos apenas o endereço (ou latitude,longitude) é exibido um marcador na cor vermelha com um ponto no lugar do label. Para mudar isso inserimos os estilos, que são color, label e size.

O atributo color pode ter qualquer valor válido de cor de 24 bits, como um número hexadecimal: 0xFFFFFF (Branco) ou uma das seguintes cores definidas: black, brown, green, purple, yellow, blue, gray, orange, red, white.

Os valores de atributos são separados por um pipe (|).

O atributo label é o nome do marcador, no exemplo acima o label é A.

O atributo size possui três opções: tiny, mid, small. E como o nome indica, informa o tamanho de cada marcador.

Os valores de marcador são informados como a notação CSS, atributo:valor, ou seja, utilizando dois pontos (:). O último elemento da url, depois de um | é o endereço ou coordenada, sem nenhum par, apenas o valor, como no exemplo acima.

Agora um exemplo prático com mais de um marcador:


Esse exemplo mostra o mapa com o parâmetro center no Brasil, como zoom 5 e dois marcadores, um no Rio de Janeiro (R) e outro em Brasília. Todos possuem estilos.

Essa é a url da imagem acima: http://maps.google.com/maps/api/staticmap?center=Brasil&zoom=3&size=256x256&sensor=false&maptype=satellite&markers=label:B|color:blue|Brasilia,DF,Brasil&markers=label:R|color:0xFFFFCC|size:mid|Rio+de+Janeiro,RJ,Brasil

Há outro recurso da API que é o de exibição de rotas ou caminhos (paths), mas explicarei sobre ele nos próximos tutoriais. Então até lá!

Referência (Documentação da API do Google Maps): http://code.google.com/intl/pt-BR/apis/maps/documentation/staticmaps/

Obs: Segundo a documentação, há um limite para solicitações de desenho de mapas, que é de 1000 por dia. Porém, ao solicitar um mesmo endereço não é contado como uma nova solicitação.

sábado, 21 de maio de 2011

Controle de tempo - NeoTriad

Acredito que o NeoTriad é o tipo de ferramenta, além de uma idéia, que é de extrema importância para todos que trabalham em um emprego formal ou autônomo (principalmente).

A organização do tempo é muitas vezes vista como perda de tempo, ou que é algum tipo de idéia que nos impulsiona a trabalharmos mais. Porém o sentido é totalmente contrário, é difícil visualizar essa questão a curto prazo, mas organizando o tempo é possível aproveitar ao máximo o tempo de trabalho e ter mais tempo livre, mesmo gastando um tempo para planejar o seu dia, semana, mês e por aí vai.

A administração do tempo permite aproveitar ao máximo, mas é preciso ter força de vontade para conseguir se organizar, não é uma tarefa fácil e nem algo que você consegue "da noite pro dia". Por isso é importante o uso de uma ferramenta que te auxilia nesse objetivo.

A empresa NeoTriad possui alguns produtos nesse segmento. O destaque é o NeoTriad.com que é um sistema online para gerenciamento de tempo, nele você tem um controle sobre tarefas e projetos, além de gráficos para controle e a divisão de tarefas entre a chamada Triad (Urgente, Importante e Circunstancial), que permite se organizar e focar no que é importante.

Também no site da NeoTriad existem vídeos que explicam sobre diversos assuntos dentro do tema "Gerenciamento de tempo", pode parecer perda de tempo ver esse tipo de vídeo e estudar essas informações, mas garanto que não é.

Já existe uma versão Desktop do NeoTriad, só não acho muito vantajoso já que é um produto separado do NeoTriad.com, no entanto não há renovações ou assinaturas, e os dois podem sincronizar informações.

O preço, acho bem em conta: R$12,90 por mês. Você pode pagar com PagSeguro, Cartão de Crédito e Boleto Bancário. E pode testar o produto gratuitamente por um mês.

Acesse o NeoTriad e confira: http://www.neotriad.com

domingo, 15 de maio de 2011

Controle de Finanças - Contas OnLine

Um sistema de controle de finanças, em uma atualidade onde todas as pessoas estão sempre "correndo", é uma ferramenta importante.

As vezes fazemos o controle de contas a pagar ou receber de memória, mas comumente esquecemos uma ou outra o que nos leva a pensar que vai sobrar uma grana no final do mês (ou que vai faltar, no caso de esquecer as contas a receber, porém esse é um erro bem menos comum..).

O controle utilizando papel e caneta é algo muitas vezes inviável, pois todos já sabemos o quanto é difícil manter papéis de forma organizada: como escrever, aonde guardar, que padronização utilizar e etc. Ou mesmo utilizando arquivos eletrônicos, o que muitas vezes ainda incorrerá em questões desse tipo.

Durante uma busca por esse tipo de ferramenta, encontrei o Contas On-line, que é um sistema de gerenciamento financeiro que possui diversos recursos e ao mesmo tempo tem uma interface simplificada, ou seja, fácil de usar e aprender.

Entre os recursos que se destacam no Contas On-line estão:
- Lançamentos automáticos (cadastro de contas fixas e parcelamentos)
- Organização de centros de custo/lucros
- Integração com pagamentos em Cartão de Crédito
- E diversos outros

E o preço é justo, o plano básico com até 45 lançamentos por mês é grátis, e pode ter dois usuários cadastrados. O maior plano é de 1200 lançamentos mensais que sai por um valor de R$50,00 por mês, permitindo 20 usuários por conta.
A cada 100 lançamentos a mais deve ser acrescido o valor de R$50,00 anual.

Todos os planos são renovados anualmente.

Então acesse a ferramenta, faça o seu cadastro e planeje-se: https://www.contasonline.com.br/Default.aspx?PRP=IN&Ind=11883511012

É importante ressaltar que essa ferramenta por si só não é capaz de fazer o planejamento de sua vida financeira por você. É preciso dedicar um tempo para se organizar e inserir suas informações na ferramenta, e assim manter um controle sobre suas contas.

sábado, 14 de maio de 2011

Sistema de exibição de dicas (tooltips) com javascript

As tooltips são textos que geralmente são exibidos para auxiliar o usuário a preencher um formulário, por exemplo.

É extremamente importante que um sistema de informação contenha informações claras acerca do objetivo traçado. Isso inclui ajudar o usuário a entender partes do sistema que não está familiarizado ou que realmente seja difícil de compreender.

Uma tooltip geralmente segue a estrutura de uma imagem com um ponto de interrogação que quando o mouse passa sobre ela, é exibido um quadro com a dica para preencher determinado campo ou apenas com informações sobre um texto ou algo do tipo.

É esse tipo de tooltip que irei descrever nesse post.

Pré-requisitos: jQuery

O uso da biblioteca jQuery tem o intuito de simplificar, diminuir as linhas de código, mas o mesmo objetivo pode ser conseguido sem muitas alterações para ser utilizado sem jQuery.

Esse é o código JavaScript que faz todo o trabalho:

// Executa a função passada por parâmetro quando a página é carregada
$(document).ready(function() {
// Atribui uma função para o evento onmouseover do elemento imagem
$('div.dica img').mouseover(function(e) {
var el = $('div.dica .texto-dica');
// Atribui ao elemento de texto o valor do atributo alt da imagem, que contém o texto da dica
el.html($(this).attr('alt'));
// Exibe o elemento com o texto
el.show();
// Ajusta com css para que o elemento se localize na posição Y e X do mouse
el.css({
'position':'fixed',
'top':e.pageY,
'left':e.pageX
});
});
// Quando o usuário tirar o mouse da imagem, retira o elemento com o texto
$('div.dica img').mouseout(function(){
var el = $('div.dica .texto-dica');
// Esconde o elemento com texto
el.hide();
});
});

A partir desse código devemos definir a estrutura do código html que exibirá a estrutura:

Você deve utilizar uma imagem para que ao passar o mouse, a dica seja exibida, pode utilizar uma imagem como essa:

<div class="dica"><img src="dica.png" alt="A dica deve ser escrita aqui" /> <div class="texto-dica"></div> </div>

Importante!

A dica deve ser escrita no atributo alt da imagem, para manter o padrão que exige um atributo alt nas tags img.
A formatação dos itens pode ser da forma que achar necessário. Abaixo um exemplo de código css:

.dica { display:inline; } .texto-dica { display:none; background:#FFF; border:1px solid #333; padding:4px; width:200px; text-align:justify; }

Apenas uma propriedade é obrigatória, o display:none no .texto-dica para que o texto não esteja em exibição ao iniciar a página.
A propriedade display:inline na div .dica tem a função de manter a div na mesma linha que está inserindo as informações, por exemplo ao lado de um campo de texto.

Então, por enquanto é isso pessoal, se precisarem de ajuda ou tiverem qualquer dificuldade envie um comentário.

sábado, 7 de maio de 2011

O Gmail é grande

Ao efetuar logout no Gmail hoje, comecei a calcular o quanto de espaço disponível aumenta em nossas contas do Gmail. Já havia percebido a contagem muito antes, desde o meu primeiro acesso ao Gmail a alguns anos atrás, mas não tinha parado para fazer o cálculo. Então observe a conclusão nesse post.

O contador que aparece na página inicial do Gmail informa um aumento de segundo em segundo na casa de bytes. Lembrando que 1B (Byte) = 8 bits, 1KB (KiloByte) = 1024B, 1MB (MegaByte) = 1024KB e 1GB (GigaByte) = 1024MB.

Fiz duas coletas de informação. Com intervalo de 2 minutos cada uma, avaliando quantos bytes aumentaram.

Na primeira, das 21:14:30 às 21:16:30, a diferença foi de 0,000489MB (7580,573984MB - 7580,574473MB), ou seja 512,753664 Bytes.

Na segunda amostra, das 21:20:00 às 21:22:00, a diferença foi de 0,000485MB (7580,575327MB - 7580,575812MB), ou seja 508,55936 Bytes.

São poucas amostras e de pequeno tamanho para informar um valor mais preciso, mas podemos estimar uma média: 510,656512 Bytes, e simplificamos para 510B e chegamos às definições à seguir:

  • Em um minuto ganhamos 510B de espaço em disco para armazenar nossos e-mails
  • Em uma hora ganhamos em média 30KB a mais de espaço.
  • Em um dia ganhamos em média 717KB.
  • Em uma semana ganhamos em média 5MB
  • Em um mês (30 dias) ganhamos em média 21MB.
  • E em um ano ganhamos em média 255MB.
É um valor baixo. Se analisarmos o contador na página inicial do Gmail, veremos que a impressão é de que o armazenamento aumenta rapidamente, porém ele cresce na casa de Bytes, causando essa interpretação fora da realidade.

Porém, acredito que esse valor possa ser incrementado de acordo com o tempo e até duplicado ou triplicado, não implicando necessariamente que teremos apenas 255MB de armazenamento disponível a mais nas contas do Gmail por ano.

Na minha opinião, o que mais "pesa" em utilidade do Gmail não é o espaço e sim o sistema de webmail que é extremamente funcional.

Até a próxima.


segunda-feira, 8 de novembro de 2010

Microempreendedor Individual (MEI)

Já imaginou regularizar o seu pequeno comércio varejista na internet?

Se você possui uma loja virtual com pouco volume de vendas, mas que possua o interesse de crescer, seria interessante se você tivesse um CNPJ para dar mais credibilidade aos seus clientes, inclusive podendo emitir notas fiscais.

Melhor ainda, é poder ter esses benefícios pagando pouco imposto. Um valor fixo mensal, total de R$6,00 - R$1,00 de ICMS, imposto para Comércio e Indústria e R$5,00 de ISS, imposto para prestadores de serviço. O valor total mensal a ser pago é de R$62,10. Os outros R$56,10 são da contribuição mensal para a previdência social, garantindo ao MEI todos os benefícios de quem contribui para a previdência, como auxílio doença, auxílio maternidade, aposentadoria por idade (após 15 anos de contribuição) e outros.

Muitas pessoas tem a curiosidade de como criar uma empresa pela internet. A verdade é que não existe uma empresa que exista exclusivamente na internet. É necessário haver um local para atendimento ao público, recebimento de correspodências e diversos outros fatores. Como MEI você poderá registrar o seu endereço residencial como endereço da empresa. Apenas para solicitar o Alvará definitivo haverá burocracia, porém é possível. Lembrando que a partir do momento que você registra uma empresa com o seu endereço residencial como comercial, este passa a ser um endereço público, ou seja, os dados de endereço da sua empresa serão públicos para quem desejar consultar informações sobre esta.

Para saber mais informações sobre o Empreendedor Individual, acesse: http://www.portaldoempreendedor.gov.br
No Sebrae, há um curso online sobre o assunto. É bem simples, educativo, contem as informações essenciais sobre o programa, não muito detalhado. Para fazer o curso, acesse: http://www.ead.sebrae.com.br/

Os passos para se cadastrar como MEI são os seguintes:

  1. Não é essencial, mas extremamente recomendável, que você faça uma consulta prévia na Administração Regional da Cidade em que pretende abrir o negócio. Aqui em Taguatinga, pode ser feito na agência da Secretaria das Cidades no Na Hora, no Shopping Top Mall. A consulta prévia é necessária para saber se é possível que se exerça atividade econômica em seu endereço.
  2. Acesse o Portal do Empreendedor: http://www.portaldoempreendedor.gov.br - No menu, clique em "Formalize-se"
  3. Entre as opções, você pode ler o Manual para preenchimento do formulário. Para iniciar o preechimento vá em "Para realizar uma nova inscrição - Clique aqui".
  4. Preencha todos os dados necessários, verifique atentamente, pois é burocrático alterar qualquer dado futuramente. Não há opção para escolher um nome empresarial (Razão Social), esse será composto pelo seu nome completo seguido do seu CPF. Do mesmo modo, não é possível escolher um nome Fantasia. Escrevi um artigo sobre como alterar essa informação depois de registrado o MEI. Clique aqui para ler.
  5. Ao final do preenchimentos das informações e confirmação. Será emitido o Certificado de Condição de Microempreendedor Individual, esse certificado é importante e deve ser impresso. Por exemplo, para abertura de contas bancárias, será solicitado esse Certificado. E serve ainda como Alvará provisório.
  6. Após o registro, compareça à Secretaria da Fazenda para registrar gratuitamente a inscrição estadual. Esse registro demora para sair, e atualmente está sendo realizado pela receita em um período pré-definido. Portanto compareça o mais cedo possível à Secretaria e solicite sua inscrição estadual, mas o prazo que antes era de até 10 dias úteis, chega a um mês, dependendo da data de registro do MEI. Geralmente as inscrições estaduais são registradas no próximo mês ao registro do CNPJ, mas mesmo assim você deve comparecer à Secretaria da Fazenda e solicitar a sua.
  7. Após essas operações você estará com sua empresa formada.
Não é obrigatório para o MEI emitir nota fiscal para pessoa física, apenas para Pessoa Jurídica. Mesmo assim você deve informar o valor dos produtos vendidos sem nota no Relatório Mensal de Receitas Brutas.

Para emitir notas fiscais é necessário possuir a inscrição estadual e então dar entrada com a solicitação de autorização para emitir notas fiscais ou solicitar nota fiscal avulsa. Esse procedimento deve ser feito na Secretaria da Fazenda.

Logo atualizarei esse artigo com mais informações. Ainda estou esperando minha inscrição estadual, provavelmente receberei essa semana.

Qualquer dúvida, estou disponível para responder as dúvidas que por ventura você possa ter com relação à condição de microempreendedor individual.

Como registrar nome fantasia para o microempreendedor individual (MEI)

Atualizado em 09/12/2012: Finalmente após algum tempo o Portal do Empreendedor foi atualizado (no dia 29 de Novembro de 2012), agora é possível fazer a alteração de nome fantasia de forma muito fácil e prática através do portal. Desse modo, a forma descrita a abaixo não é mais necessária, a não ser que por algum motivo você não consiga alterar o nome fantasia no Portal do Empreendedor: http://www.portaldoempreendedor.gov.br/. Além de alterações você pode solicitar a baixa, ou seja, o portal agora está completo. Para alterações siga os passos indicados na página: http://www.portaldoempreendedor.gov.br/mei-microempreendedor-individual/roteiro-para-alteracao

Texto antigo:

Depois de me registrar como Microempreendedor individual, tive dificuldades para conseguir alterar o nome fantasia. Na internet existem várias perguntas sobre esse assunto e em nenhum lugar há informações claras de como conseguir registrar o nome fantasia.

Antes de realizar o registro, fui no Sebrae saber mais informações. Sobre o nome fantasia já perguntei como acrescentaria, o atendente me disse que eu deveria ir até a junta comercial no Setor de Autarquias Sul e realizar a alteração do nome fantasia, e deveria ser pago uma taxa de R$30,00.

Na Junta Comercial, que também é o Sebrae, me informaram que um contador deveria preencher o formulário para alteração e então encaminhar o mesmo para a Junta Comercial, e depois sim, seria realizado a alteração (nesse caso inclusão, porém mesmo assim chamada alteração).

Compareci a um escritório de contabilidade que atende ao MEI, porém os contadores também tinham poucas informações sobre o programa. Tentaram me ajudar, procurando o formulário para alteração do nome fantasia do MEI no site da Junta Comercial, porém não encontraram.

Finalmente, voltei ao Sebrae para tentar buscar informações sobre o processo, e com sorte a atendente do lado tinha a informação de como proceder para a alteração. Imprimiu os passos para mim, executei e deu tudo certo. Abaixo mostro os passos para incluir o nome fantasia no CNPJ para o MEI:

  1. Acesse o site http://www.receita.fazenda.gov.br
  2. No menu esquerdo do site, clique em "Download de programas"
  3. Em seguida clique em "Baixar o receitanet"
  4. Faça download do Programa Receitanet 2010.02 B. Atenção! Não baixe o Receitanet Java, para funcionar com o programa CNPJ é necessário o Receitanet, o Receitanet Java não funciona.
  5. Instale o programa Receitanet.
  6. Em seguida, volte à página inicial http://www.receita.fazenda.gov.br
  7. Novamente no menu esquerdo, clique em "Download de programas" e clique em "Programas para empresas"
  8. Clique em "CNPJ - Cadastro Nacional de Pessoa Jurídica"
  9. Baixe e instale o programa CNPJ.
Finalizado a instalação do programa CNPJ, você deve agora preencher um formulário no programa. Siga os passos abaixo para realizar essa operação:

  1. Abra o programa CNPJ (Não é necessário abrir o Receitanet, ele serve para enviar o formulário via internet para a receita)
  2. No menu superior, clique em "Documentos" -> "Novo"
  3. Marque a caixinha "Pessoa Jurídica e demais Entidades".
  4. Nos campos que aparecem, marque "Alteração cadastral"
  5. Informe seu CNPJ, UF de origem e município de origem.
  6. O Formulário será criado, você tem três janelas: "Eventos", "Identificação", "Representante/preposto"
  7. Em "Eventos", marque a caixinha "Dados cadastrais / Situações especiais". Você deverá informar o código do evento, que para a alteração do nome fantasia é o código 221 - Alteração do título do estabelecimento (nome fantasia). Em "data do evento" informe a data atual, que é a data de envio desse formulário.
  8. Em "Identificação", informe seu CNPJ, Código da Natureza Jurídica (MEI - 213-5). Informe o nome fantasia pretendido (deve conter no máximo 55 caracteres), e o NIRE (esse número está no certificado de condição de Microempreendedor individual, ao lado do CNPJ).
  9. Em "Representante / preposto", marque a caixinha "Representante". Preencha seu nome e CPF.
  10. Pronto, o formulário está preenchido. No menu superior, clique em "Documentos" -> "Gravar para Transmissão". Selecione o documento na lista e clique em "OK". Antes de enviar você receberá uma informação sobre a data, se quiser ler mais clique em sim, porém a data a ser preenchida deve ser a data atual, do envio do documento, então nesse caso, se já tem certeza dessa informação, clique em "Não", e confirme o seu envio, clicando em "Enviar". (Obs: se você clicar em "Sim", para ver informações sobre a data, terá que abrir novamente o documento e clicar em "gravar transmissão" para concluir o processo).
Agora você receberá as informações para acompanhar a sua solicitação. Geralmente demora em média de uma hora para o DBE estar disponível. Para imprimir o número de acompanhamento, clique em "Documentos" -> "Abrir". Selecione o seu documento, quando abrir, novamente no menu superior, clique em "Documentos" -> "Imprimir..". Escolha a opção "Recibo de entrega do CNPJ" e clique em OK. Selecione o documento clicando duas vezes na pasta e pronto, o número será impresso.

Para acompanhar o processo, acesse: http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/fcpj/consulta.asp

Informe os números impressos do documento.

Ainda não acabou, quando o DBE (Documento Basico de entrada) estiver disponível, você deve imprimí-lo, assinar e reconhecer firma em cartório e entregar pessoalmente na Receita Federal.

Aqui em Brasília, em um desses endereços:

Brasília: SAS Qd. 03 Bloco O Térreo
Taguatinga: QSD - Área Especial Comércio - Lote 4 - Ed SPAZZIO DUO - Taguatinga Sul

sexta-feira, 20 de novembro de 2009

[Dica] - Como alterar a versão de Action Script de um arquivo Fla

Nesses dias recebi um material em Flash para criar a navegação. Já tenho o sistema pronto, só necessitando algumas adaptações. Mas na hora de incluir o script que faz a "mágica" da navegação, não funcionou, pois o mesmo foi criado utilizando como opção o uso de Action Script 3.0 e o meu script foi escrito na versão 2.0;

Não penei muito, pesquisei rapidamente no Google e não encontrei nada (acho que não soube procurar direito). Mas fui ver algumas opções do arquivo e acabei encontrando uma forma para alterar a versão do action script que será utilizada. A seguir os passos para alterar (Simples!);

Menu File (Arquivo) -> Publish Settings... (Configurações de publicação) -> Flash -> Script: Coloque a versão que desejar.

sábado, 2 de maio de 2009

FLISOL DF - 25 de Abril de 2009 - 3ª Edição

Estive presente na 3ª edição do FLISOL DF, estou aqui para expressar minha opinião sobre o evento.

Esse é o 5º evento sobre software livre que frequentei, um desses eventos foi a segunda edição do FLISOL DF no ano passado.

De cara, na chegada do evento percebi que estavam bem mais organizados que no ano anterior. Acabei chegando depois da abertura do evento, pois não consegui acordar cedo o suficiente para chegar às 09:00. No ano passado, houve atraso de uma hora, acabei confiando que iria acontecer novamente, mas quando cheguei lá corri para pegar a primeira palestra que eu tinha selecionado, pois já tinha começado.

A primeira palestra que escolhi foi "Joomla no mercado de trabalho - Um CMS de sucesso!" ministrada por Washington Ribeiro. Ao chegar no Laboratório TUX onde foi realizada a palestra, o local já estava lotado, tive que pegar uma cadeira para me sentar na sala, enfim, deu tudo certo. Gostei da palestra, muito interessante, mas abordou aspectos fundamentais sobre o Joomla, nada de tão específico nem prático. Houve também uma discussão sobre filosofia do Software Livre que foi divertida e educativa, até mesmo a mulher do palestrante que é professora de inglês e estava filmando a palestra entrou no papo, e se saiu bem.

Depois do fim da palestra ao meio dia, fui para casa almoçar, pois a minha casa é na rua da FAJESU.

Voltei novamente para o evento às 13:00 para tentar a palestra Proxy Squid ou Desenvolvendo aplicações PHP com Zend Framework. Havia uma fila de pessoas à espera dos palestrantes, enquanto isso descobri que a sala em que havia a palestra "Desenvolvendo aplicaçõe sPHP com Zend Framework" ficava no andar de cima. Fui até lá, no entanto a sala já estava lotada. Voltei para tentar a palestra Proxy Squid, no entanto o palestrante não veio mesmo, também o palestrante que iria ministrar "Zabbix: monitorando serviços e economizando milhões" não compareceu ao evento. Em instantes o Prof. Ronald veio avisar que havia tentando contactar os dois, sem sucesso, e que os participantes que estavam no aguardo podiam ir à outras salas para ver as outras palestras.

Bom, gostaria de fazer um comentário sobre os palestrantes que não vieram. Esse é um evento em que eles doam seu tempo para compartilhar conhecimento, então não recebem nada em termos financeiros para ministrar as palestras no evento. Se acontece algum imprevisto, não há problema em faltar ao evento, mas é de fundamental importância que isso seja avisado aos organizadores do evento, pois na falta da informação deixam o evento desorganizado, e a culpa muitas vezes cai sobre os organizadores, injustamente. De qualquer forma, pode ser que os palestrantes tenham tido algum problema que os impossibilitou de avisar.

Apesar disso, o evento foi muito bom, continuemos os comentários...

A palestra sobre Latex foi adiantada devido ao ocorrido, no entanto o palestrante preferiu aguardar um pouco até dar a hora de início da palestra por conta das pessoas que viriam no horário.

Ministrada pelo professor Alexandre Zaghetto, foi a melhor palestra que assisti no evento. Muito bem explicada e sobre um assunto muito interessante que eu não tinha tido contato ainda que é o Latex. Uma linguagem de marcação para a produção de documentos estilizados de acordo com algum padrão.

Ao final da palestra sobre Latex, assisti a palestra "Desenvolvendo aplicações Desktop com PHP-GTK". O palestrante não parecia estar bem à vontade (me lembrei muito de quando eu apresento trabalhos na Faculdade), um pouco nervoso. Muitas pessoas sairam da sala antes da palestra terminar. Me desculpem, caso alguém não pense assim, mas na minha opinião, sair antes da palestra terminar é falta de educação, e ainda incentiva o palestrante a desistir. Por mais que eu não estivesse muito satisfeito com a palestra eu fiquei até o fim. A palestra não foi longa, 30 minutos. Uma explicação básica sobre o funcionamento do PHP-GTK com exemplos.

Agora vem uma das melhores partes, fora a palestra sobre Latex. Ganhei uma camisa e uma bolsa de estudos da Training tecnologia (Infelizmente não vou poder fazer o curso devido ao valor que ainda é alto e me pegou em um mês atribulado financeiramente. Mas adoraria fazer pois é com Julio Neves)!! Nem acreditei quando vi meu nome lá escrito no sorteio (apesar de ser o 50º). É a primeira vez que ganhei alguma coisa sorteada em algum evento. Fiquei feliz!! hehe.

Finalizando, gostaria de parabenizar a organização do evento que nesse ano cumpriu seu papel e o evento foi super organizado. Parabéns de verdade! Ao mesmo tempo gostaria de pedir desculpas por não participar da organização, pois moro na rua da FAJESU, tão perto. Mas andei super oculpado esses dias, na realidade até hoje. Deveria ter escrito essa postagem no sábado do FLISOL, mas só consegui hoje. A correria está grande.

Gostaria de parabenizar todos os palestrantes que se disporam à ir ao evento compartilhar conhecimento, parabéns especial ao professor Alexandre que ministrou a palestra sobre Latex muito bem. E também parabéns à todas as pessoas envolvidas no evento direta ou indiretamente. O FLISOL DF foi muito bom, está a cada ano melhor, vamo que vamo!

Longa vida ao Software Livre!

segunda-feira, 26 de novembro de 2007

Solução para pagamentos online. Receber pagamentos com cartão de crédito e boleto bancário sem ser empresa.

Se você deseja receber pagamentos através de cartão de crédito ou boleto bancário mas não é pessoa jurídica. Existe uma maneira muito interessante de conseguir isso.

O que vou indicar aqui não tem foco somente para pessoas físicas, mas pode ser utilizado também em empresas, que podem reduzir o alto custo de manutenção com as empresas de cartões crédito.

A solução que apresento à você leitor, é o PagSeguro.

O que é PagSeguro?

Transações internacionais são possíveis com o PayPal que é uma companhia de pagamentos online, mas necessita do uso de cartão de crédito internacional.

Criado com o nome de BRPay, o atual PagSeguro era a solução para pagamentos online no Brasil.
Conheci o BRPay, no entanto usufrui de seus recursos pois não conhecia as ferramentas de integração. Eu imaginava que só havia o carrinho de compras personalizado do BRPay.

Ao ler um documento informando sobre como receber pagamentos online, fui informado sobre duas companhias que faziam esse serviço, então soube sobre o muito mais que eu poderia fazer com o BRPay. Personalizar a comunicação entre os meus sites e as transações efetuadas.

Obs: Mencionei duas empresas que fazem o serviço, mas nesse artigo me concentrarei na BRPay(PagSeguro), porque já mantenho sites operando com esse serviço.

No entanto, quando acessei o BRPay para acessar o meu cadastro (já o tinha feito há algum tempo para comprar um E-book que utilizava o sistema BRPay para receber pagamentos) me deparei com a PagSeguro. A minha primeira impressão quanto ao nome foi ruim, no entanto, agora acho melhor por estar no nosso idioma.

A UOL comprou a BRPay e trocou o nome para PagSeguro. As propagandas do PagSeguro estão sendo bastante veiculadas, está ficando cada vez mais forte, e se tornará comum na internet.

Soluções de Integração PagSeguro

Bom, o webmaster que tentou integrar o PagSeguro como meio de pagamento do seu site deve ter tido problemas, principalmente por uma grande falha que na minha opinião o PagSeguro tem: a falta de um usuário para testes. A integração do PagSeguro com o seu site não é algo tão simples, é preciso ter paciência e saber muito bem o que está fazendo.

Por enquanto vou abordar de forma sucinta, ou seja, de forma teórica a maneira de fazer a integração.

Se você apenas vai redirecionar o usuário para a página do PagSeguro para o pagamento, sem que ele tenha que voltar à sua página, é bem simples, você só precisa enviar os dados através de um formulário pelo método "POST". Envia os dados do usuário (opcional) e os dados dos itens que foram escolhidos, total da compra e frete. Esses dados estão bem explicitados no link: "meios de integração avançadas", no site do PagSeguro.

O problema: Retorno automático

Nesse problema se vão dias, pois não há uma explicação detalhada na página do PagSeguro sobre como funciona o retorno automático. O mesmo funciona da seguinte maneira:

O site envia os dados ao PagSeguro, o usuário realiza o pagamento, e enquanto estão sendo exibidos os detalhes da transação do PagSeguro ao usuário, o PagSeguro envia um POST por "trás", escondido, com os dados da transação, você recebe os dados e pode armazená-los em um banco de dados, ou fazer o que quiser com eles.

Em breve, estarei explorando mais a fundo, e mostrarei uma aplicação prática em ASP..
Aguardem...

Quem quiser conhecer o pagseguro, acesse: http://www.pagseguro.com.br

Continua....

terça-feira, 20 de novembro de 2007

Dreamweaver perde senha, dreamweaver não salva senha, dreamweaver não guarda senha ftp!!

Toda vez que abre o Dreamweaver 8 tem que digitar a senha de ftp de novo?

Então, a solução é baixar e instalar a atualização para ele disponível em: http://www.adobe.com/support/dreamweaver/downloads_updaters.html

Provavelmente você irá escolher a opção Inglês que é a primeira. Salve, instale e pronto! Problema resolvido.

quinta-feira, 18 de outubro de 2007

Web 2.0

Nos últimos tempos temos ouvido falar sobre web 2.0, afinal, o que é web 2.0?

Por muito tempo tive essa dúvida, apenas ouvia falar sobre web 2.0. Ao pesquisar encontrava várias controvérsias sobre o que é a web 2.0, blogs e mais blogs falando sobre o assunto mas cada um levando sua opinião individual sem conceituar corretamente a web 2.0. Em algumas dessas opiniões é salientado o fato de que a web 2.0 somente existirá quando os sites seguirem o padrão W3C. Na minha opinião é um comentário válido porém equivocado, pois a questão de webstandards é a tecnologia por trás da web 2.0, mas não é fundamental para que a web 2.0 exista.

Li artigos de revistas falando sobre o assunto, as matérias dizem que a web 2.0 é uma nova era da internet, onde as pessoas podem interagir umas com as outras no ambiente virtual, e que o "cara" que começou essa nova tecnologia foi o Google.

Essas matérias que li eram corretas, no entanto, ainda estava em dúvida. Pensei: "Já li muito sobre web 2.0, sei o que é, mas se alguém me perguntar o que é web 2.0?".
Não conseguiria responder com um conceito que pudesse ser objetivo e auto-explicativo.

No dia 15 de outubro de 2007, assistindo ao Jornal Hoje da Rede Globo, em uma matéria sobre vagas para profissionais de TI. Um profissional de Recife, Mozart Araújo, especializado em criação de aplicativos para dispositivos móveis, falou sobre como era promissor a área em que trabalhava e enfatizou também a web 2.0. Então ele conseguiu na minha opinião expor o conceito de web 2.0 em poucas palavras e de forma objetiva: "...web 2.0, onde são criadas aplicações altamente complexas para ser rodadas dentro do browser”.

Então, o conceito de web 2.0:


Web 2.0 são aplicações complexas rodando em um browser (navegador)

Agora que temos o conceito de Web 2.0, podemos falar das tecnologias que são utilizadas no seu desenvolvimento.

Basicamente, temos quatro elementos: AJAX, WebStandads, JavaScript, Linguagem de servidor.

AJAX

Considero o principal elemento da Web 2.0 (ou o mais chamativo). Lembrando que não é uma tecnologia, AJAX significa Assyncronous JavaScript And XML. Ou seja, é o uso de JavaScript para fazer requisições assíncronas ao servidor sem que seja necessário recarregar a página. Esse objeto do JavaScript busca a página XML e manipula o DOM (Document Object Model - É a hierarquia de elementos da linguagem html que pode ser controlada por linguagens de script do lado cliente) com código JavaScript.

Geralmente faz a requisição a uma script com código de servidor, que ao receber as informações enviadas via HTTP, as processa e retorna o resultado para o objeto AJAX. Por esse motivo é tido uma aparência de uma aplicação desktop, já que não é necessário que a página seja carregada novamente.

WebStandards

Já publiquei um artigo falando sobre webstandards, que tem o principal objetivo de manter um padrão no desenvolvimento de páginas para a internet, no que diz respeito a linguagem (X)HTML. Os principais objetivos e vantagens são:
  • Separação de código de marcação e estilização, através das folhas de estilo CSS
  • Melhor desempenho, menos linhas de código
  • Código mais limpo, e melhor visualização do código, possibilitando uma melhor manutenção por outros profissionais
  • Acessibilidade, prover acesso à deficientes visuais, estando de acordo com as regras da W3C. Para que pessoas sem visão possam acessar a internet através de leitores de tela
  • O controle dos objetos pelo DOM através de linguagens script client-side, se torna mais eficiente, eliminando possíveis erros

JavaScript

Existem outras linguagens de script client-side, como VBScript e JScript (ambos da Microsoft), porém JavaScript é o mais utilizado e vem da família de linguagens com a sintaxe de C. Com JavaScript é possível criar interações com o cliente, pois o código é executado diretamente no navegador do usuário.

Um exemplo interessante é o relógio em tempo real, você pode requisitar a hora certa no servidor que o site está hospedado, e com JavaScript fazer a atualização de segundo em segundo, para que o relógio fique atualizado.

Outra aplicação com o uso de JavaScript, você pode ver no iGoogle (http://www.google.com.br/ig?hl=pt-BR), que é a página inicial personalizada do Google. Nessa página é possível movimentar pequenas janelas mudando-as de posição. Acesse e veja você mesmo!

Linguagem de servidor

Sem uma linguagem rodando no servidor seria praticamente impossível criar algo interessante. Dentre as mais usadas estão:

ASP: Active Server Pages - Páginas ativas de servidor. Não é uma linguagem, é um ambiente para execução de scripts, VBScript (padrão), JScript, ou JavaScript (diferente de ser no cliente, é código javascript rodando no servidor, no ambiente ASP).
ColdFusion: É uma linguagem de servidor criada pela Macromedia. Usam-se tags como no html para programar. Não vou entrar em maiores detalhes, pois não conheço detalhadamente a linguagem.

...Continua

Quem quiser ler a matéria referida, do Jornal Hoje, acesse o endereço: http://jornalhoje.globo.com/JHoje/0,19125,VJS0-3076-20071015-305991,00.html