Author Archive

0

[Off-Topic] Como um programador mata um dragão

Java
Chega, encontra o dragão. Desenvolve um framework para aniquilamento de dragões em múltiplas camadas.
Escreve vários artigos sobre o framework, mas não mata o dragão.

.NET
Chega, olha a idéia do Javanês e a copia, tenta matar o dragão, mas é comido pelo réptil.

ASP
Os componentes necessários para levantar a espada são proprietários e caros. Outros tantos componentes proprietários para achar a localização do dragão, e mais outros tantos a localização da princesa. Chama então seu amigo programador de PHP.

C
Chega, olha para o dragão com olhar de desprezo, puxa seu canivete, degola o dragão. Encontra a princesa, mas a ignora para ver os últimos checkins no cvs do kernel do linux.

C++
Cria um canivete básico e vai juntando funcionalidades até ter uma espada complexa que apenas ele consegue entender … Mata o dragão, mas trava no meio da ponte por causa dos memory leaks.

COBOL
Chega, olha o dragão, pensa que tá velho demais para conseguir matar um bicho daquele tamanho e pegar a princesa e, então, vai embora de volta ao seu mundinho.

Pascal
Se prepara durante 10 anos para criar um sistema de aniquilamento de dragão… Chegando lá descobre que o programa só aceita lagartixas como entrada.

VB
Monta uma arma de destruição de dragões a partir de vários componentes, parte pro pau pra cima do dragão e, na hora H, descobre que a espada só funciona durante noites chuvosas…

PL/SQL
Coleta dados de outros matadores de dragão, cria tabelas com N relacionamentos de complexidade ternária, dados em 3 dimensões, OLAP, demora 15 anos para processar a informação. Enquanto isso a princesa virou lésbica.

PHP
Pesquisa bancos de scripts e acha as classes de construção de espada, manuseio da espada, localização da princesa e dragão. Remenda tudo e coloca umas firúlas próprias.
Mata o dragão e casa com a princesa. Como tudo foi feito com gambiarras, o dragão um dia vai ressuscitar e comer os dois.

Ruby
Chega com uma p*t* fama, falando que é o melhor faz tudo, quando vai enfrentar o dragão mostra um videozinho dele matando um dragão … O dragão come ele de tédio.

Smalltalk
Chega, analisa o dragão e a princesa, vira as costas e vai embora, pois eles são muito inferiores.

ASSEMBLY
Acha que está fazendo o mais certo e enxuto, porém troca um A por um D, mata a princesa e transa com o dragão.

Shell
Cria uma arma poderosa para matar os dragões, mas na hora H, não se lembra como usá-la.

Shell (2)
O cara chega no dragão com um script de 2 linhas que mata, corta, estripa, pica em pedacinhos e empalha o bicho, mas na hora que ele roda, o script aumenta, engorda, enfurece e coloca álcool no fogo do dragão.

Fortran
Chega, desenvolve uma solução com 45000 linhas de código, mata o dragão e vai ao encontro da princesa… mas esta o chama de tiozinho e sai correndo atrás do programador Java que era elegante e ficou rico.

FOX PRO
Desenvolve um sistema para matar o dragão, por fora é bonitinho e funciona, mas por dentro está tudo remendado. Quando ele vai executar o aniquilador de dragões lembra que esqueceu de indexar os DBF’s.

CLIPPER
Monta uma rotina que carrega um array de codeblocks para insultar o dragão, cantar a princesa, carregar a espada para memória, moer o dragão, limpar a sujeira, lascar leite condensado com morangos na princesa gostosa, transar com a princesa, tomar banho, ligar o carro, colocar gasolina e voltar pra casa. Na hora de rodar recebe um “Bound Error: Array Access” e o dragão come ele com farinha.

ANALISTA DE PROCESSOS
Chega ao dragão com duas toneladas de documentação desenvolvida sobre o processo de se matar um dragão genérico, desenvolve um fluxograma super complexo para libertar a princesa e se casar com ela, convence o dragão que aquilo vai ser bom pra ele e que não será doloroso. Ao executar o processo ele estima o esforço (usando FPAs) e o tamanho do estrago que isso vai causar, consegue o aval do papa, do Buda e do Raul Seixas para o plano, e então compra 2 bombas nucleares, 45
canhões, 1 porta aviões, contrata 300 homens armados até os dentes, quando na verdade necessitaria apenas da espada que estava na sua mão o tempo todo.

 

Author: Desconhecido….e se alguém souber me avisa o/

17

Tutorial: como criar pacotes debian

Diversos lugares na internet explicam de maneira complicada de como criar um pacote debian, vou passar um resumo de como fazer um pacote de forma simples.

Seguindo a estrutura do nosso aplicativo de testes:

aplicativo\
aplicativo\meu_arquivo

Primeiro vamos instalar tudo que é necessário:

sudo apt-get install dh-make and debhelper devscripts dpkg-dev cdbs lintian

Para criar um pacote precisamos uma versão inicial, muitos tutoriais na internet explicam que tem que fazer um tar com o conteúdo, mas podemos fazer de forma mais simples.

Vamos alterar o nome da pasta do aplicativo ou criar um link simbolico para ele:

mv aplicativo aplicativo-1.0

ou

ln -s aplicativo aplicativo-1.0

Dessa forma já conseguimos acessar o diretório com a versão do nosso aplicativo.

cd aplicativo-1.0

Agora precisamos criar os arquivos básicos, para isso usamos o dh_make que fará toda a mágica:

 dh_make -e usuario@dominio.com.br  -s --createorig

 

O dh_make vai criar o básico do pacote, -e irá colocar o email informado nas descrições do pacote ( facilita o/ ), -s é a opção de pacote single ou seja, será gerado somente um pacote para o aplicativo mas isso não impede de futuramente criar mais de um pacote e por fim o –createorig que é o cara que cria o tar pra gente, dessa forma mesmo sem ter feito um tar com o código fonte ele já fará isso para nós. Esse passo é  conhecido com “debianização” do pacote.

Nesse ponto já podemos fazer um teste com o comando de build do pacote:

 dpkg_buildpackage

Também podemos conferir o conteúdo do nosso pacote:

dpkg -c ../aplicativo_1.0-1_i386.deb

Ele não irá mostrar nenhum conteúdo, afinal não colocamos nada dentro do pacote só criamos a estrutura básica.

Toda a estrutura básica do pacote foi criada dentro de uma pasta aplicativo-1.0/debian onde vamos ver rápidamente sobre alguns dos arquivos chaves.

 

DH_*

Alem do dh_make existem diversos outros dh_* que fazem diversas ações dos pacotes, segue alguns:

 dh_install -> instala os arquivos informados pelos arquivos .install seguindo o formato: ORIG -> DEST

dh_installdirs -> cria os diretórios informados seguindo o formato: DEST/DEST2

dh_fixperms -> ajusta as permissões dos arquivos do pacote nos diretórios debuild.

 

Arquivos do Pacote Debian


Sobre a edição desses arquivos recomendo utilizar o VIM com highlights habilitado, quem não tiver o VIM:

Como root, instale o pacote vim-runtime, ou apenas digite:

$ cd ~
$ sudo apt-get install vim

Depois de instalado, precisamos criar um arquivo no diretório home do usuário.

$ echo “:syntax enable” >> .vimrc

Com isso seu VIM já estará ok.

 

changelog

Tanto no changelog quando nos outros arquivos é bom tomar muito cuidado ao editar, pois ele pode “quebrar” e não irá empacotar.

Nesse arquivo colocamos o histórico de alteração

Exemplo do arquivo:

aplicativo (1.0-1) unstable; urgency=low
* Initial release (Closes: #nnnn)  <nnnn is the bug number of your ITP>

– seu nome <
email@dominio.com.br > Tue, 09 Aug 2011 14:54:06 -0300

A data é algo que muita gente erra e quebra o pacote, então altere com cuidado seguindo o padrão já existente.

 

control

O arquivo control tem a seguinte estrutura padrão:

Source: aplicativo
Section: unknown
Priority: extra
Maintainer: Seu Nome Completo <
 seu_email@exemplo.com >
Build-Depends: debhelper (>= 6)
Standards-Version: 3.9.1
Homepage: http://www.aplicativo.com.br/

Package: aplicativo
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Descrição resumida do pacote
Descrição extendida do pacote.

Nesse arquivo, Source contém as informações do código fonte, Package pra baixo são informações referentes aos pacotes que serão construidos. Por exemplo, ao invés de somente um pacote quisermos criar mais de um com conteúdos distintos:

Source: aplicativo
Section: unknown
Priority: extra
Maintainer: Seu Nome Completo <
 seu_email@exemplo.com >
Build-Depends: debhelper (>= 6)
Standards-Version: 3.9.1
Homepage: http://www.aplicativo.com.br/

Package: aplicativo
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Descrição resumida do pacote
Descrição extendida do pacote.

Package: aplicativo-extras
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Descrição resumida do pacote que tem os extras
Descrição extendida do pacote de extras...
 


copyright


O arquivo de copyright contém a licença utilizada neste software e no seu empacotamento.

rules


O arquivo rules é o arquivo que vai controlar a construção do pacote. Ele possui o formato de um Makefile e deve ser editado para atender às nossas necessidades ao gerar o pacote, por padrão ele não vem quase nada:

#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
#
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
#
# Modified to make a template file for a multi-binary package with separated
# build-arch and build-indep targets  by Bill Allombert 2001

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

# This has to be exported to make some magic below work.
export DH_OPTIONS

%:
    dh $@

Porém com isso ele irá executar todos os dh_* padrões, então é melhor sempre criar seu próprio rules com sómente o básico do seu pacote, exemplo:

#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1
DESTDIR=$(CURDIR)/debian/tmp
LIBDIR=$(DESTDIR)/conteudo
clean:
      dh_clean
      rm -rf $(DESTDIR)
build:
      dh_testdir
      dh_prep
      dh_installdirs

install:

binary-indep: build install
      dh_testdir
      dh_testroot
      dh_install -X/usr/share/man --fail-missing
      dh_installman
      dh_installchangelogs
      dh_installdocs
      dh_lintian
      dh_link
      dh_compress
      dh_fixperms
      dh_makeshlibs
      dh_installdeb
      dh_shlibdeps
      dh_gencontrol
      dh_md5sums
      dh_builddeb

binary: binary-indep

Cuidado ao criar seu próprio rules já que "Com grandes poderes vem grandes responsabilidades", pois ele é um sh e você pode colocar qualquer comando la dentro mas de forma a não destruir os padrões do debian.

Pra facilitar, não vamos mexer nesse cara e usar o padrão.

 

Copiando os arquivos para os lugares corretos

Lembra dos dh_* ? Hora de usar esses poderes!

 

Vamos criar um arquivo aplicativo.install dentro do diretório debian que irá conter os arquivos que vamos copiar da nossa aplicação para o computador com o seguinte conteúdo:

meu_arquivo /opt/local/aplicativo

Vamos criar um arquivo aplicativo.dirs dentro do diretório debian que irá conter os diretórios da nossa aplicação com o seguinte conteúdo:

 /opt/local/aplicativo

Com isso já podemos realizar o build do pacote:

 dpkg_buildpackage

E finalmente podemos conferir o conteúdo do nosso pacote:

 dpkg -c ../aplicativo_1.0-1_i386.deb

Pacote criado! o/

16

Para usuarios do Motorola Defy que utiliza o serviço da claro .

Essa dica e para que está com problema em completar a ligação, por exemplo você tenta liga para alguem e o telefone não completa a chamada e dá como ligação encerrada e ainda mostra o tem da ligação que corresponde a 0 minutos .

No menu principal, encontre o icone “Menu Claro” . Clique no ícone, e escolhe a opção  “Canal Idéias“. Agora, escolha a opção “ATIVAÇÃO”, e em seguida “DESATIVAR”. Pronto.

Efetue o teste.