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.