segunda-feira, agosto 30, 2010

Fábrica de Software é uma Besteira (por Fabio Akita)

O maior desserviço à área de Desenvolvimento de Software já criado na nossa história recente foi o termo “Fábrica de Software”. Pior aindadepois que a Índia implementou esse conceito em larga escala, tornando-o famoso e com credibilidade.
Digo isso porque a partir do momento que se encara “Desenvolvimento de Software” como uma tarefa de “Fábrica”, onde entra uma especificação de um lado e sai um software do outro, você acabou de destruir qualquer inovação na área. Pior ainda, considera que todo programador é necessariamente um “operário”.
Porque estamos falando de “Fábrica”, os cursos de “Engenharia de Software” se tornaram mais populares que os de “Ciências da Computação”. E mais paradoxal ainda é ver estudantes se formando como “engenheiros” mas trabalhando como “pedreiros”.
Mais ruim ainda é quando gerentes de TI, “CIO”s, “CTO”s, que sequer foram da área de software, sequer escreveram uma linha, acham que entendem como se faz software. Dado que o mercado fala de “Fábrica”, o que eles vão implementar são “linhas de produção” e junto com isso todos os procedimentos que colocam o operário em linha. Planilhas de horas, métricas de linhas de código, ou pontos de função ou pontos de história ou qualquer bobagem dessas, gantt charts e cronogramas “precisos” de entrega, etc.
A metáfora está completamente errada. Desenvolvedores não são operários, e sim os “arquitetos” propriamente ditos. O trabalho de operário em software é do compilador, este sim, que empilha um byte sobre o outro seguindo uma especificação: o código do software.
Repetindo: o código do software é a especificação, a planta baixa, e o compilador é o operário que faz o trabalho braçal.
O que chamamos hoje de “arquitetos” não são arquitetos, na verdade não são nada. Não há como ser um arquiteto sem ser um programador sênior antes. Um bom programador pode se tornar um arquiteto.
Agora, o problema é que o conceito de “Fábrica” se espalhou rapidamente. O governo e as instituições de ensino abraçaram isso. Me deixa extremamente triste visitar áreas do Brasil onde as únicas opções
de trabalho para programadores são essas “Fábricas”. As faculdades também se depreciaram para atender essa demanda e formar “operários” com diplomas de “engenheiros”, e assim toda uma nova geração de programadores pensa com cabeça de operário.
Uma ressalva para ser politicamente correto: não tenho nada contra operários, muito pelo contrário, é uma profissão tão respeitada como qualquer outra. Porém, ninguém vende operários de obra como arquitetos e nem os próprios operários se acham arquitetos.
Eis porque digo que foi um desserviço: toda uma geração inteira de programadores desperdiçada pensando em software enquanto empilhar tijolo. Levará pelo menos mais 2 gerações inteiras para, talvez, conseguirmos reverter isso.
Agora pensemos: e se em vez de “Fábrica” mudássemos o termos para algo mais adequado como “Atelier de Software”? Como isso mudaria a forma como você pensa e trabalha com software?

quinta-feira, agosto 26, 2010

Projeto do ano... RapidSMS

Muitas iniciativas são expostas diariamente na internet, e a que conheci foi o RapidSMS.
O objetivo é salvar vidas eliminando a desnutrição com apenas um SMS. O projeto foi fundado pelo UNICEF inicialmente e depois portado para outras plataformas.

Conheça mais do projeto em:
http://en.wikipedia.org/wiki/RapidSMS
http://www.rapidsms.org/

Bloquear o desktop da máquina (lock desktop)

Para os aficionados (além de mim) em equipamentos portáteis, o bluetooth tem uma funcionalidade interessante em Linux e Windows.
O de travar a área de trabalho ao detectar o afastamento do dispositivo. Interessante que pode ser qualquer dispositivo. 

Perdeu o sinal, trava!

Para Windows é o btprox
O btprox é bastante limitado se comparado ao blueproximity. Mas não deixa de cumprir o papel a que foi proposto.

Para Linux é o blueproximity

A tela de configuração do btprox é simples e para travar o desktop é só colocar o comando:
rundll32.exe user32.dll, LockWorkStation 


Já no blueproximity:
fonte da imagem: http://marcelo.mmello.org/2010/08/sensor-de-presenca-no-linux-ativandodesativando-a-protecao-de-tela-do-seu-computador/

quinta-feira, agosto 19, 2010

Python Logging - Outro exemplo de log com gravação da excessão

Matt Wilson mostra como evoluir um sistema de logs e a versão final esta a seguir:

import logging, logging.handlers

# Make a global logging object.
x = logging.getLogger("logfun")
x.setLevel(logging.DEBUG)

# This handler writes everything to a file.
h1 = logging.FileHandler("/var/log/myapp.log")
f = logging.Formatter("%(levelname)s %(asctime)s %(funcName)s %(lineno)d %(message)s")
h1.setFormatter(f)
h1.setLevel(logging.DEBUG)
x.addHandler(h1)

# This handler emails me anything that is an error or worse.
h2 = logging.handlers.SMTPHandler('localhost', 'logger@tplus1.com', ['matt@tplus1.com'], 'ERROR log')
h2.setLevel(logging.ERROR)
h2.setFormatter(f)
x.addHandler(h2)

def g():

    1/0

def f():

    logfun = logging.getLogger("logfun")

    logfun.debug("Inside f!")

    try:

        g()

    except Exception, ex:

        logfun.exception("Something awful happened!")

    logfun.debug("Finishing f!")

if __name__ == "__main__":
    f()


fonte: http://blog.tplus1.com/index.php/2007/09/28/the-python-logging-module-is-much-better-than-print-statements/

quarta-feira, agosto 18, 2010

Esteganografia com Python

Photos

There may be a message hidden in this picture. Or not. Flickr photo by John C Abell
Georgia Tech researchers have developed a tool called Collage that will allow Internet dissidents to insert hidden messages into Twitter posts and Flickr images in order to circumvent the censorship measures imposed by oppressive governments.
‘This project offers a possible next step in the censorship arms race’
The tool, which is implemented in Python and uses the OutGuess framework, relies on a technique known as steganography to weave hidden messages into an image file. It uses an automated testing tool called Selenium to facilitate the deployment of the messages. The researchers believe that hiding subversive messages inside content that is indistinguishable from legitimate social network activity will reduce the chances of detection.
“This project offers a possible next step in the censorship arms race: rather than relying on a single system or set of proxies to circumvent censorship firewalls, we explore whether the vast deployment of sites that host user-generated content can breach these firewalls,” the project’s website explains. “We have developed Collage, which allows users to exchange messages through hidden channels in sites that host user-generated content.”

It’s worth noting that steganography is one method that was used by the Russian spy ring that was recently detected operating within the United States. As we noted last month, a lot of government surveillance is driven by automated keyword-matching and pattern analysis methods that do broad sweeps, but are blind to simple tricks like steganography. Obscuring the substance of a message in an image and deploying it in a nonthreatening and high-volume medium like a social network would make it harder to find.
The Collage software will be released soon and will be published on the Georgia Tech Network Operations and Internet Security (GTNoise) website.

link: http://www.wired.com/epicenter/2010/08/beat-censorship-by-hiding-secret-messages-in-flickr-photos/

Manuais do Opensuse 11.3 em Pt-BR

http://code.google.com/p/opensuse-startup-pt-br/downloads/list

Direto da comunidade brasileira atuante no opensuse.

sexta-feira, agosto 13, 2010

Comandos úteis no Linux - Como descobrir o processo que está utilizando uma porta

Caso vc não saiba o software que está bloqueando uma determinada porta, alguns comandos que podem ajudar.

netstat -nl | grep (mais uma vez o uso do grep para filtrar a saída de dados)
# netstat -nl | grep 1234

Resultado:
tcp        0      0 0.0.0.0:1234            0.0.0.0:*               LISTEN

E para descobrir o processo que está usando esta porta:
# fuser -n tcp 1234
Resultado: 
1234/tcp:             5133

então temos o porta/protocolo e logo em seguida o processo, bastando apenas um:

# kill 5133

Lembre-se que para "matar" um processo que você não seja o dono é necessário ser super usuário, e neste caso o root:
# su

quinta-feira, agosto 12, 2010

Verificar processos no Linux, sem visualizar o processo q originou a chamada


Para verificar processo no Linux:
# ps
Incrementando um pouco mais:
# ps faux

O grep utilizado abaixo em conjunto com o ps mostra o resultado apenas o que está escrito após o grep, neste caso usei " (aspas) pq a expressão tem um espaço.

Mas ao fazer:
# ps faux | grep "alguma coisa"
Ele retorna:
root     30665  100  0.1   3304   760 pts/0    S+   14:55   0:00     \_ grep alguma coisa
Resumindo, nada de interessante, além do próprio processo que o gerou.
E para não mostrar o processo que o gerou, é só mandar mais um grep "invertido" (ou contrário) [0] que não irá apresentar qq processo que tenha grep.
# ps faux | grep "alguma coisa" | grep -v grep
Ele irá retirar o processo do grep... não mostrando nada!

Se alguém conhece alguma outra magia negra com o mesmo resultado, comente que eu publico.

[0] do man grep:
-v, --invert-match Invert the sense of matching, to select non-matching lines.  (-v is specified by POSIX.)

Abraço,

segunda-feira, agosto 09, 2010

Drive DVD/CD não detectado no Windows

Percebi que minha máquina não mostrava a unidade de DVD, verifiquei as configurações, retirei (não é hot-swap mas é possível retirar) e verifiquei que não havia danos aparentes.

Vamos a procura de alguém já havia passado pelo problema, eis que a Microsoft disponbiliza uma ferramenta para corrigir este problema.

O link: http://support.microsoft.com/gp/cd_dvd_drive_problems

Concordando com a instalação, ele verifica e corrige o problema.

A Microsoft tem palmas da minha parte, facilitando as correções de problemas que o Windows apresenta.

Boas práticas para o desenvolvimento de software utilizando banco de dados

http://java.sapao.net/Home/evitar-super-usu%C3%A1rios-para-acessos-a-bases-de-dados
http://java.sapao.net/Home/evitar-command-injection

Exemplo de exportação para CSV no PostgreSQL

Post da lista PostgreSQL por Shairon Toledo:

Vc pode usar o psql.

test_development=# \f ';'
Field separator is ";".
test_development=# \a
Output format is unaligned.
test_development=# \t
Showing only tuples.
test_development=# \o /tmp/teste.csv
test_development=# select * from documents;
test_development=# \o
test_development=# \q
Este último comando é para Linux
$ cat /tmp/teste.csv
 
 

sexta-feira, agosto 06, 2010

Python Logging - Como implementar um sistema de log na sua aplicação

Tenho a necessidade de colocar um script para funcionar em um servidor público que não tenho acesso senão via browser/aplicação cedida pelo hospedeiro.
A forma que encontrei foi o de logar todas as ocorrências. Como Python tem o módulo logging resolvi procurar e encontrei um exemplo funcional. Em tempo, ele não fazia rotação de log, o que é importante para o arquivo não crescer demasiadamente segue a devida alteração.

Desculpe pela falta de syntaxhighlighting pq troquei o "desenho" do blog e o recurso acabou se perdendo.

#!/usr/bin/python

import logging
import logging.handlers

def configure_logger(log_file):
    """Accepts a fully-qualified filename to the log file.

    Returns a fully-configured logger object.
    """
    logger = logging.getLogger('ProgramName')
    log_formatter = logging.Formatter('%(created)-13s %(asctime)s Pid:%(process)s %(levelname)s %(message)s Thread:%(thread)s Thread Name:%(threadName)s Name:%(name)s File:%(filename)s Module: %(module)s Function Name:%(funcName)s')
    file_handler = logging.handlers.RotatingFileHandler(log_file, maxBytes=1024, backupCount=5)            
    #file_handler = logging.FileHandler(log_file)
    file_handler.setFormatter(log_formatter)
    logger.setLevel(logging.DEBUG)    
    logger.addHandler(file_handler)
    return logger

if __name__ == "__main__":
    LOG = configure_logger('logfile.txt')
    LOG.debug('This is debug level')
    LOG.info('This is info level')
    LOG.warning('This is warning level')
    LOG.error('This is error level')   
    LOG.critical('This is critical level')


fontes:
http://schof.org/2010/basic_python_logging/
http://schof.org/basic_python_logging.py

quarta-feira, agosto 04, 2010

Questão de prova MCDST - Processo com consumo de recursos em excesso degradam performance

O controle de recursos dos processos do sistema operacional é possível fazê-lo através do taskmgr.exe ou Gerenciador de Tarefas (no caso do Windows).
Tenho utilizado uma grande demanda de processamento no computador e percebendo que o antivirus estava consumindo uma boa fatia junto com a virtualização, resolvi por em prática as aulas do MOC.
O processo é relativamente simples, CTRL+ALT+DEL ou então executar taskmgr, ao verificar a tarefa que tem o mais consumo de CPU na aba Processos, clique com o botão direito na tarefa e Definir Prioridade, selecione a opção que lhe convier. Novamente botão direito na tarefa e Definir Afinidade, e selecione o processador que deseja continuar executando. No caso da afinidade, só será mostrado qdo a máquina for multiprocessada, no caso das máquinas com dois (ou +)  núcleos ou dois (ou +) processadores (físicos).
Abaixo um roteiro com as imagens.
Para confirmação da carga de processamento com o Monitor de Recursos (no caso do Windows 7)
A confirmação após algum tempo (a tarefa do antivirus terminou!) com o término da carga excessiva do processo.

Conhecendo um pouco mais do Hyper-V

Como anda o mercado de virtualização?!

Fabio Hara (especialista Microsoft) fala um pouco.
 
12/2/2010

Uma nova categoria surge no mercado: Profissionais Especialistas em Virtualização

Algo muito interessante que andei descobrindo foi a quantidade de ofertas para especialistas de virtualização. Neste caso vão desde profissionais tecnicos certificados até arquitetos de virtualização. Interessante, porque o foco de virtualização estaria a prinicpio dentro das competencias do arquiteto de infraestrutura, enão é este o caso.
Apesar do site não ser brasileiro, vale a pena para entender como anda o mercado:
http://www.virtualization.info/jobboard/
Virtualização acabou crecendo muito, e existem varias categorias de virtualização. Estas categorias seriam:
  • Virtualização de servidores
  • Virtualização de desktops
  • Virtualização de aplicação
  • Virtualização de rede
  • Virtualização de storage
  • Virtualização de estado de usuario
  • etc…
Além do profissional de virtualização saber tudo isso, existem outros aspectos muito importantes, e um deles seria Storage e Networking. Dimensionar soluções de virtualização sem pensar em storage é algo muito arriscado, assim como ignorar os demais aspectos de networking. Quando falamos de storage as pessoas fazem todo seu planejamento visando espaço, o que é errado. Quando se pensa em storage voce deve pensar em performance, pois o principal gargalo em harwdare no ambiente virtualizado é muito maior em velocidade de acesso a disco. Networking tambem é outro ponto forte, pois na concepção logica da virtualização voce tem a principio varias maquinas virtuais usando os mesmos segmentos fisicos de rede, e torna-se necessario saber empregar de forma correta infraestruturas de networking. Lembre tambem que cada vez mais é comum o emprego de iSCSI em ambientes de rede, principalmente com o aparecimento de Ethernet 10gbps, dando mais performance .
Outro ponto de competencia que é fundamental: quando falamos de virtualização existe a grande vamtagem da questão da alta disponibilidade. O disaster recovery de uma maquina virtual é muito mais facil do que uma maquina fisica, e isso facilita muitos projetos de BCP. Sim, a capacitação do profissional de virtualização é muito mais ampla do que parece.
Com certeza farei mais posts falando sobre o profissional de virtualização no futuro, aguardem.


http://fabiohara.spaces.live.com/blog/cns!61F254701739206!3004.entry

terça-feira, agosto 03, 2010

Google translator, situação engraçada... o tradutor não aceita maiúsculas!

Estava verificando a tradução da frase, e percebi q o Google translator não traduzia...
Convertendo o texto para minúscula foi traduzido enquanto escrevia.

MAY THE SOURCE BE WITH YOU LINUX               may the source be with you linux
MAY THE SOURCE BE WITH YOU LINUX               a fonte pode estar com você linux

Pra conferir!!!

http://translate.google.com.br/?hl=pt-BR&sl=pt&tl=en#en|pt|MAY%20THE%20SOURCE%20BE%20WITH%20YOU%20LINUX%0Amay%20the%20source%20be%20with%20you%20linux