Blog do Felipe S. Gomes

Opiniões sobre cidadania, governo, tecnologia além de algumas amenidades :)

Arquivos da tag ‘programação’

Script para retirar emails duplicados

com 2 comentários

Fiz um script para retirar emails duplicados de uma lista, colocar estes emails em ordem alfabética e retirar os emails que constam em uma lista de exclusão.

Talvez seja problemático o fato do script ter sido feito com a sintaxe do python 3 :(

O script deve rodar em uma pasta que contenha um arquivo mailing.txt com uma lista de emails e outro arquivo mailing opt-out.txt com lista de emails que devem ser retirados da lista principal. Estes arquivos devem ter um endereço por linha.

O script:

#!/usr/bin/python
import datetime, os, sys
print("Removing double entries in mailing and opt-outs")
 
t = datetime.datetime.now()
timeStamp = str(t.today()).replace(':', '-')
fMailing = 'mailing.txt'
fMailingOut = 'mailing opt-out.txt'
backupFolder = 'mailing-backup' + os.sep
fMailingBackup = backupFolder + fMailing + '.' + timeStamp + '.backup'
fMailingOutBackup = backupFolder + fMailingOut + '.' + timeStamp + '.backup'
 
try:
  fMailingHandle = open(fMailing)
  fMailingList = fMailingHandle.readlines()
except IOError:
  print('Put a file named ' + fMailing + ' in this folder before running me.')
  sys.exit()
 
try:
  fMailingOutHandle = open(fMailingOut)
  fMailingOutList = fMailingOutHandle.readlines()
except IOError:
  print('Put a file named ' + fMailingOut + ' in this folder before running me.')
  sys.exit()
 
lstEmail = []
lstOptOut = []
 
for email in fMailingList:
  lstEmail.append(email.lower())
 
for email in fMailingOutList:
  lstOptOut.append(email.lower())
 
fMailingHandle.close()
fMailingOutHandle.close()
 
#transform in a set to make each email unique
print("Original size: mailing=", len(lstEmail), ", out-out=", len(lstOptOut))
lstEmail = set(lstEmail)
lstOptOut = set(lstOptOut)
 
for email in lstOptOut:
  try:
    lstEmail.remove(email)
  except KeyError:
    #print("email da lista de out-out não existe no mailing: tudo bem!")
    pass
 
print("Actual size: malling=", len(lstEmail), ", out-out=", len(lstOptOut))
print("Saving results in files... I'll keep some backup files (with timestamps).")
 
if os.path.exists(backupFolder):
  print('backup folder exist')
else:
  os.mkdir(backupFolder)
  print('bakckup folder does not exist')
 
print(fMailing, ", " , fMailingBackup)
os.rename(fMailing, fMailingBackup)
os.rename(fMailingOut, fMailingOutBackup)
 
#save the opt-out list ina a file
fMailingOutHandle = open(fMailingOut, 'w')
for email in sorted(lstOptOut):
  fMailingOutHandle.write(email)
fMailingOutHandle.close()
 
#save the mailing in a file
fMailingHandle = open(fMailing, 'w')
for email in sorted(lstEmail):
  fMailingHandle.write(email)
fMailingHandle.close()
 
print("Ready, done :) ")

Gostou do texto? Compartilhe:
  • del.icio.us
  • Facebook
  • Live
  • Rec6
  • Technorati
  • LinkedIn
  • MySpace
  • Netvibes
  • Twitter

Escrito por Felipe S. Gomes

7 de abril de 2009 às 13:50

Publicado em tecnologia

Tags , ,

Uma Pérola em Java

sem comentários

Hoje encontrei uma verdadeira pérola. Um código em java com muito POG na veia.
public String execute() {
  if (checkboxCota.length == 0) {
  } else {
    for(int i=0; i < checkboxCota.length; i++) {
      total = total + Double.parseDouble(checkboxCota[i]);
    }
  }
  return SUCCESS;
}

Gostou do texto? Compartilhe:

Escrito por Felipe S. Gomes

20 de março de 2008 às 10:47

Publicado em tecnologia

Tags , ,

Os plugins que eu utilizo no eclipse

sem comentários

Eu utilizo o eclipse wtp europa que possui todos os plugins que eu preciso. Esta versão do eclipse pode ser baixada por este link:

Versão para o Windows
Todas as versões, inclusive linux e Windows

O eclipse wtp europa é a consolidação de diversos plugins. Com ele dá para programar em java, editar qualquer arquivo xml, arquivos jsp e sql. Existem uma perspectiva que permite a conexão com qualquer banco de dados jdbc, e a partir daí posso rodar queries sql simples. Para tarefas mais exigentes eu utilizo um programinha externo chamado Squirrel SQL. Prefiro utilizar o wtp com o Squirrel ao plugin quantum, que também é um bom plugin.

Dificilmente eu trabalho com o hibernate. Quando isso acontece eu utilizo um segundo plugin para o eclipse que é o hibernate tools, do grupo jboss. Fora isso não instalo nenhum plugin. É comum o eclipse ficar instável após a instalação de muitos plugins. Por isso eu prefiro uma instalação mais enxuta que normalmente se limita ao wtp.

Um outro plugin que muitos colegas usam é o sysdeo. O papel desse plugin é iniciar e derrubar o tomcat e facilitar o debug. Eu não gosto nada nada desse plugin, e prefiro fazer o debug dispensando o uso de quaisquer plugins. Para fazer isso, veja esse link: .

Por fim, existe o plugin para o struts chamado Easy Struts. Esse plugin dá uma visão gráfica do struts-config.xml. Eu deixei de utilizar o plugin assim que eu entendi como funciona o xml, porque eu sempre achei, e continuo achando que o struts-config.xml é uma aberração da natureza. Agora com o struts 2 ficou bem mais fácil de mapear as ações, e eu não sinto necessidade alguma de plugin.

Bem, esses são os plugins que eu utilizo ou que já utilizei no eclipse.

Gostou do texto? Compartilhe:

Escrito por Felipe S. Gomes

8 de agosto de 2007 às 4:57

Publicado em tecnologia

Tags , , , , , , , , , , , , ,

Hotdeploy no tomcat

sem comentários

Voltei a acreditar no hotdeploy do tomcat.

O tomcat tem o recurso de deploy de aplicativos com o tomcat rodando. Isso economiza muito tempo de desenvolvimento, pois o processo de ligar o tomcat pode demorar bastante tempo. Acontece que quando algo de errado acontece vários problemas imprevisíveis se propagam, consumindo tempo de desenvolvimento (a toa). É por este motivo que a maioria dos desenvolvedores java que conheço sempre desligam o tomcat para realizar um novo deploy. Além de chato é ineficiente.

Descobri que este problema é mais comum no Windows. Vou explicar o porquê. Quando um deploy é feito com um arquivo war, o seu conteúdo é descompactado na pasta webapps, e um arquivo de configurações xml é criado na pasta conf do tomcat. O processo de undeploy apaga o xml, o arquivo war e toda a pasta do context. Até aí tudo bem.

É comum, também, abrir com um navegador de pastas e arquivos, como o Windows Explorer, a pasta do contexto que se está desenvolvendo para verificar se está tudo correto, ou mesmo para atualizar arquivos jsp, por exemplo. Aí que está o problema. Se no Windows um arquivo fica aberto em um notepad, por exemplo, toda a estrutura de diretórios fica presa pelo processo do notepad, e o tomcat falha ao tentar efetuar o undeploy. Parte dos arquivos são apagados, e outros tantos ficam para trás.

Depois de um processo de undeploy falho como este o context não estará mais disponível para consulta no seu browser, mas se o mesmo context for reinstalado com um deploy, é bem provável que problemas estranhos surjam. Conheço gente que faz um undeploy no tomcat, um clean no projeto do eclipse, outro clean no ant, fecha o tomcat, abre o tomcat e finalmente faz o deploy. Outros, menos superticioso se contentam em fechar e abrir o tomcat. Chamo este processo, tanto o completo quanto o resumido, de macumbate. Uma espécie de padrão no desenvolvimento java para web.

No meu linux eu não tenho este problema. Dificilmente fecho o tomcat, e quando o faço é porque preciso atualizar alguma biblioteca do common/lib ou porque já fiz algumas dezenas de deploy e ocorre um problema de espaço em memória (PermGen).

Gostou do texto? Compartilhe:

Escrito por Felipe S. Gomes

12 de junho de 2007 às 8:02

Publicado em tecnologia

Tags , , , , , ,

Discussão sobre padrão Struts

sem comentários

No guj está rolando uma discussão sobre o padrão de desenvolvimento web com struts 1.

http://www.guj.com.br/posts/list/58008.java

Eu não gosto do Struts 1 porque vejo todo mundo confuso com os conceitos dele, e simplesmente ignorando a maior parte das automatizações do framework.

Infelizmente ainda não vejo um novo padrão despontar no lugar do Struts 1. Como “os grandes” devem apontar para o Struts 2 ou jsf, estou estudando para entender melhor estes dois frameworks.

Gostou do texto? Compartilhe:

Escrito por Felipe S. Gomes

24 de abril de 2007 às 10:41

Publicado em tecnologia

Tags , , , , , , , ,