Blog – FAQ 5

Blog - FAQ 5Opa, hoje é dia de FAQ? Legal!
Pessoal, para aprimorar a base de conhecimento do blog, apresento-lhes a quinta compilação de perguntas que recebo nos comentários dos artigos ou por e-mail. Caso vocês tenham uma resposta mais adequada para alguma das perguntas, não hesite em deixá-la nos comentários! Go, go, go!

 

(referente ao artigo sobre os níveis de programadores)
Discordo em colocar o Analista de Sistemas como superior. Em muitos casos, o Analista de Sistema é um tecnólogo sem experiência em projetos reais, portanto, seria mais adequado colocar um Gerente de Programação como cargo mais alto dentro da área de desenvolvimento, ou até mesmo um Arquiteto.
Agradeço pelo seu ponto de vista. Na minha jornada profissional, até o momento, só tenho trabalhado em empresas onde os Analistas de Sistemas já foram, por alguns anos, desenvolvedores de software. Portanto, eles possuem uma base de conhecimento técnico fundamental e são capazes de conciliá-la com os aspectos conceituais da regra de negócio. Na minha visão, isso é o que define um bom Analista de Sistemas.
Por outro lado, concordo com você: após a função de programador pleno, o profissional pode se tornar um Arquiteto de Software ou um Coordenador de Desenvolvimento, caso queira prosperar na área técnica.

 

Você poderia fornecer alguma dica sobre como criar um esquema para ativação de softwares, de forma que o sistema não seja utilizado sem autorização em outros computadores?
Existem algumas opções eficientes para implementar esse bloqueio, entre elas, o uso do número serial do HD (HD Serial).
Nessa modalidade, a aplicação somente é executada em computadores nos quais o número serial está autorizado. Para aprimorar a segurança, alguns desenvolvedores criam um sistema de criptografia para retornar uma chave de licença baseada no número serial do HD. O procedimento é este:

  • O cliente fornece o número serial do HD para o desenvolvedor;
  • O desenvolvedor entra com o número serial do HD em um sistema de criptografia e cria uma chave de segurança;
  • O desenvolvedor fornece a chave de segurança para o cliente para que ele possa abrir a aplicação.

Outra opção viável é utilizar a nuvem para fazer essa validação, caso o cliente sempre esteja conectado à Internet. Por exemplo, toda vez que a aplicação for executada, uma rotina pode comparar o número serial do HD com os números seriais autorizados em algum servidor na web.
O mesmo pode ser feito também com o endereço MAC do computador.

 

Há alguma forma de enviar newsletters via Delphi?
Eu ainda não tive a oportunidade de criar um remetente de newsletters pelo Delphi, mas acredito que exista diferentes formas para implementá-los. Uma delas é adicionar uma página HTML no corpo do e-mail utilizando o Body.LoadFromFile do TIdMessage, componente do conjunto Indy. Outra forma é enviar apenas o link no e-mail e carregá-la no evento OnLoad da página através de uma função Javascript. Assim que possível, vou procurar elaborar algo e postar no blog!

 

Gostaria de saber como devo calcular o valor de locação do meu software.
O valor da locação está intimamente relacionado com a região em que você está, ramo de atividade do cliente, número aproximado de manutenções por mês e a complexidade do software. É necessário levar todos esses pontos em consideração antes de definir o valor de locação. Por exemplo, já encontrei softwares para controle de estoque locados por 200 reais, ao mesmo passo que também já conheci softwares para supermercados por 5 mil reais mensais. O ideal é estipular um valor que seja compatível com o tempo e esforço que você levará para realizar as manutenções. Mas lembre-se: valorize o seu trabalho! Para bons profissionais, não existe “sisteminha” ou “programinha”. O trabalho de desenvolvimento de software exige profissionalismo e você deve se recompensar por isso.

 

É possível utilizar a cláusula IN (SQL) em tempo de execução? Tentei com o ParamByName mas recebi a mensagem de erro “Conversion error from string”.
Para utilizar parâmetros em uma cláusula IN, você deverá concatenar o texto ao invés de usar o ParamByName. Na verdade, aparentemente o ParamByName não traz suporte para utilizar a cláusula IN.
Se você tem um componente TEdit com o texto “11, 12, 13” preenchido pelo usuário, uma das alternativas para montar a instrução é apresentada abaixo:

var
  Texto: TStringList;
  Parametros: string;
  i: integer;
begin
  Texto := TStringList.Create;
  Texto.CommaText := ',';
  Texto.Text := Edit1.Text; // texto: 11, 12, 13
 
  Parametros := '(';
  for i := 0 to Texto.Count - 1 do
    Parametros := Parametros + Texto[i] + ',';
 
  Parametros[Length(Parametros)] := ')';
  Texto.Free;
 
  Query.Close;
  Query.SQL.Text := 'Select * from TABELA where Codigo in ' + Parametros;
  Query.Open;
end;

 

Como posso salvar uma imagem no banco de dados? É necessário criar uma coluna do tipo Varbinary (MAX)?
Já houveram muitas discussões sobre salvar imagens no banco de dados e ainda existem. Eu, particularmente, prefiro salvar o caminho da imagem ao invés da imagem em si. Na minha opinião, salvar imagens no banco de dados pode deixá-lo muito pesado e afetar o desempenho da aplicação, principalmente se for utilizada em uma rede. Na parte 7 sobre dicas de desenvolvimento eu explico com mais detalhes essa questão das imagens.
No caso do Delphi, a minha sugestão é criar um campo do tipo VARCHAR (de tamanho 100, por exemplo) com o nome de “Imagem” e salvar o caminho usando o TOpenPictureDialog.FileName. Para carregar a imagem, basta fazer o caminho inverso, ou seja, ler o caminho que está no banco de dados e atribuir ao componente TImage:

var
  CaminhoFoto: string;
begin
  CaminhoFoto := DataSet.FieldByName('Imagem').AsString;
  Image1.Picture.LoadFromFile(CaminhoFoto);
end;

 

Preciso criar uma nova tabela e fazer algumas alterações em uma tabela existente no banco de dados em produção. Como criar e fazer alteração via código?
Já passei por uma situação semelhante e criei um atualizador automático, ou seja, um aplicativo independente que se conecta ao banco de dados e realiza as alterações necessárias na(s) tabela(s). Após um tempo, modifiquei este aplicativo para que ele carregasse um script SQL em tempo de execução, me dispensando de gerar um novo executável para cada atualização no banco de dados do cliente.

 


Confira também os outros FAQs:

FAQ 01 | FAQ 02 | FAQ 03 | FAQ 04 | FAQ 05 | FAQ 06 | FAQ 07 | FAQ 08 | FAQ 09


 

Compartilhe!
Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Pin on PinterestEmail this to someone

12 comentários

  1. Bom dia André!
    André, quero lhe fazer uma pergunta de forma pessoal.
    Eu tenho um sistema que emite NF-e. Mas ele esta todo procedural, nada de OO.
    O que na sua opinião seria o certo a fazer:
    1 – Migrar o sistema usando conceitos de RTTI, OO e scrum, que estou estudando.
    2 – Fazer o sistema do zero?

    1. Olá, Benedito! No meu ponto de vista, depende da complexidade e do tamanho do seu software. Quanto maior a quantidade de unidades de código-fonte, mais demorado será a fase de migração. Além disso, convenhamos que, o mesmo tempo que você irá gastar para transformar o código procedural em orientado a objetos será basicamente o mesmo tempo que você levará para modelar o projeto do zero, portanto, eu optaria por refazer o software.
      Porém, lembre-se também de levar o prazo em consideração, bem como as ferramentas e tecnologias que irá utilizar. Talvez apenas migrar o sistema aos poucos (de forma incremental) pode ser a opção mais viável.

      Abraço!

  2. Outra indagação.
    No seu artigo de Programador Junior, Pleno…Senior…Quem eu sou? Gostaria de Saber onde ficam os programadores autonomos. Geramente a gente cria, idealiza e constroi…as vezes com mais técnica e estudo outras com mais “jeitinho” e muita gambiarra…. como se categoriza esses desenvolvedores?

    1. Benedito, já tive a mesma dúvida que você e cheguei à conclusão de que o nível do programador autônomo está intimamente ligado com os anos de experiência e principalmente com os projetos que ele desenvolveu. Claro, e não devemos esquecer também do domínio na regra de negócio. Por exemplo, se um desenvolvedor sempre trabalhou com programação na área de automação comercial, é bem provável que ele se torne um programador pleno ou sênior caso seja contratado por uma empresa, já que ele terá um conhecimento considerável neste ramo.
      Sendo um pouco mais específico, eu acredito que não exista uma maneira exata do próprio programador se auto intitular em um dos níveis, ao menos que ele tenha alguma certificação que comprove a sua excelência. Porém, há algumas formas de “medir” o próprio nível de conhecimento, como participar de fóruns sobre programação, discutir com outros profissionais, praticar katas e criar um portfólio do seu trabalho.

      Abraço!

  3. Existe alguma forma de gravar uma imagem no banco de dados sem utilizar o ParamByName? Estou usando um TIbScript para executar vários scripts de uma só vez (devido a velocidade), mas no IbScript não consigo setar uma imagem como no IbQuery por exemplo, pois ao fazer um LoadFromStream ou LoadFromFile, dá um access violation e pelo que debuguei é devido a não criação de um componente dentro do próprio Ibscript.
    Alguma dica pra eu gravar estas várias imagens de uma só vez?

  4. Eu sempre tive a duvida, sou analista e programador ou o que?
    Na minha opinião, o Analista deve conhecer os procedimentos necessários para criar a aplicação(‘Solução’), conhecimento do ramo do negocio, procedimentos usados, necessidades e melhoramentos no metodo de trabalho, ñ precisa saber programação.
    Já o programador converte a ‘Soluçao’ em um Software executavel.
    Mas quem vai determinar a linguagem a extrutura e o tipo do BD, seria o coordenador de desenvolvimento.
    Como desde o inicio até hoje, nunca trabalhei para uma empresa de desenvolvimento, (quando tentei uma colocação, já tinha clientes, fui visto como concorrente, ñ procurei mais). Como minha formação é ‘administração de empresas’, me considero ‘Analista Programador’.
    Só queria ganhar como tal.KKKK

    1. Obrigado pelo comentário, Gerson!
      Já tive a oportunidade de trabalhar em três empresas de desenvolvimento e adquiri um conhecimento sobre os papéis e funções em uma equipe. O profissional que conhece o ramo de negócio, no qual você mencionou, é o Analista de Negócio. As especificações de requisitos, considerando as características técnicas do projeto, são documentadas pelo Analista de Sistemas. As soluções técnicas, por sua vez, geralmente são elaboradas pelos Projetistas. Por fim, os programadores implementam as funcionalidades e os Analistas de Testes garantem a qualidade da entrega. Observe que é um fluxo de atividades bem delimitado.
      Só a título de conhecimento, empresas que utilizam Desenvolvimento Ágil definem papéis especiais, como o Product Owner e Scrum Master, nos quais podem ser comparados, respectivamente, a um Analista de Negócios e um Líder da equipe de desenvolvimento.

  5. Gostaria de acrescentar alguns pros e contras na ativação do software.
    Um dilema também para mim.
    O uso do Serial do HD pode ser burlado clonando o HD.
    O MAC é bom mas se for trocada ou acrescentada uma placa de rede ou instalado um modem USB, muda ou acrescenta um MAC.
    Mais uma é reconhecer as características do hardware, como memória e processador.
    Eu uso alguns destes e outros, todos juntos e criptografados, o MAC tive que fazer uma rotina para verificar se foi acrescentada uma placa de rede, mas na troca só validando novamente.
    Mas pra mim acrescentar a Verificação e/ou Atualização periódica pela internet, é a melhor solução.
    Afinal concordo plenamente com você André, ñ existe ‘sisteminha’ ou ‘programinha’, se eu crio eles com rapidez e facilidade, é fruto de anos de estudo e pratica no desenvolvimento de soluções, temos que proteger nossas criações e produtos de uso não autorizado.

    1. Olá, Gerson! Obrigado novamente pela contribuição!
      Nunca imaginei que o número serial de um HD poderia ser clonado.
      Acredito que uma das melhores soluções é utilizar Cloud para realizar essa validação. Por exemplo, ao iniciar a aplicação, uma rotina abre uma conexão com um servidor Web e verifica um arquivo que contenha os dados de licença, validando a ativação. Dessa forma, não é possível “burlar” a permissão de uso, já que o arquivo de licenças só estará disponível na nuvem. Conheço vários desenvolvedores que empregaram essa estratégia com sucesso.

  6. Ola, André.
    Estou comentando os tópicos em separado, para diminuir o tamanho e tentar facilitar a leitura.
    Que tipo de programador eu sou?
    Posso me comparar com o Benedito, sou autônomo, ñ tive formação em programação ou analise(‘só existia Analista de sistemas em Pós, no meu tempo’).
    Você citou Thomas Edison em outro tópico, e entendo assim, temos que criar produtos vendáveis, úteis, estáveis e fáceis de usar.
    Normalmente o cliente ñ quer saber a tecnologia usada ou a formação do desenvolvedor. Mas acho muito importante para quem esta entrando no ramo procure uma boa formação e certificações adicionais, conhecimento nunca é demais.
    Seguindo a sua orientação, ñ para medir o conhecimento, mas aprimorar ele e se possível compartilhar a experiência, que estou aqui.
    Concordo com você que para o programador autônomo(em outras palavras), vale muito mais apresentar os softwares implantados como referencia de qualidade e da satisfação dos clientes, isso pode ser determinante na escolha do seu produto pelo cliente, mas para ser contratado por uma empresa de desenvolvimento, acho melhor formação e certificação.

    1. Gerson, os níveis de programadores autônomos são delimitados pelo tempo de experiência com programação, portfólio e conhecimento na regra de negócio. Com base na experiência que você possui (na qual pude notar pelos comentários), eu o classificaria como um Analista Programador, já que você também faz o meio de campo dos requisitos com o cliente. Além disso, já possui um projeto completo em produção.
      Bom, atualmente, empresas de desenvolvimento realmente exigem certificações, mas o tempo de experiência também é fundamental, afinal, não existe melhor aprendizado do que o conhecimento adquirido na prática do cotidiano com a linguagem/ferramenta. É comum encontrar exigências como “Mínimo de 3 anos de experiência com a linguagem X” em descrições de vagas.

      Obrigado pela participação, Gerson! Abraço!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Preencha o campo abaixo * Time limit is exhausted. Please reload CAPTCHA.