artigo

7 out 2015

Marionetes do Ódio

Submitted by bardo

Me angustia perceber como temos um congresso conservador e que joga contra os direitos do seu povo. Que o Estatuto da Família, sob pretexto de proteger, vem para humilhar todos os arranjos familiares com os quais certo grupo religioso não concorde. Que a reforma política nascida lá pretende tirar ainda mais poder do povo e fortalecer partidos fisiológicos. Que um projeto de lei pretende exigir que todo internauta brasileiro se cadastre para poder navegar e, ao mesmo tempo, que toda corrupção de políticos seja esquecida da Internet. Me angustia ver como Senado e Câmara jogam contra o Brasil e fazem de tudo para enfraquecer cada vez mais o Planalto, para impor seus programas nefastos.

Me angustia quando a Corrupção é institucionalizada e quando eu percebo que os provavelmente mais corruptos são os que mais a usam como arma para atacar os outros, com todo apoio da imprensa para esconderem suas sujeiras. Que quem tem teto de vidro é quem mais atira pedras, pois tem o apoio das famílias mais ricas e influentes do Brasil, com a certeza da impunidade.

Me angustia essa certeza de impunidade ser personificada na tentativa de proibir acesso público a documentos relacionados a um caso de corrupção relacionado ao Metrô de São Paulo, por 25 anos. E termos um presidente da Câmara, sob acusações fortíssimas, que clara e descaradamente mentiu diante de uma CPI, sendo investigado por crimes de colarinho branco até na Suíça, mas que é blindado por partidos e projetos de oposição, tornando-se, mesmo assim, quase intocável.

E o que dizer de termos um partido que foi financiado por empresas investigadas pela Lava Jato, uma grande investigação sobre corruptos e corruptores, tentando tirar do poder outro partido por ter sido financiado pelas mesmas empresas, em escala muito parecida de investimentos? Me angustia a hipocrisia reinante.

E quando até mesmo um juiz do Supremo escancara seu partidarismo, com um discurso de ódio a um partido político? Juizes que deveriam zelar pela isenção, mas evitam, como podem cumprir bem seu importante papel em nossa sociedade? Se não eles, quem cumprirá?

E o ódio... Esse ódio também traz muita angústia. É saber que as famílias mais ricas do país ainda detém os mais influentes veículos de informação. E que, talvez por acordos com um partido de oposição mais comparsa da Elite, talvez por medo de regras que limitem sua influência (prometido pela presidenta em campanha), talvez por outro motivo, talvez mesmo por pura safadeza, eles manipulam o povo. Como não podem inventar notícias (exceto por casos como a bolinha de papel jogada contra um presidenciável em 2010, que na mão dos Marinho virou quase um tijolo), eles simplesmente omitem boas notícias (que sim, existem) e, principalmente, enviezam discursos. Nunca promovem debates (exceto os exigidos pelo TSE), mas apenas a pregação da opinião que eles querem que seja a aceita, informando o povo como um professor a dar aula na 5ª série, de uma matéria pretendida como verdade absoluta.

Me angustia saber que a campanha eleitoral da oposição ainda não acabou, mesmo após quase um ano do período eleitoral. Ao invés disso, ela se transformou em uma campanha para conquistar o poder. Conquistar no sentido mais medieval possível, à força se for preciso. E que essa campanha, junto com a postura parcial da mídia tem manipulado tanto nosso povo. Me angustia o grande número de marionetes, controladas com talento pelos fios do ódio.

Pode parecer exagero, mas esse ódio está se tornando cada vez mais perigoso para a nossa vida civilizada. Hoje todos entendem como foi horrível os nazistas matarem tantos judeus; como é horrível o Estado Islâmico aniquilar vilas e cidades; como obrigar refugiados de guerra a voltar para o seu país sem assistência alguma é condenar famílias inteiras à morte; como a força militar oprimia estudantes e condenava suspeitos sem investigar (a não ser que torturas incapacitantes possam ser consideradas como investigação). Os frutos do ódio são fáceis de perceber quando olhados com distanciamento, mas muitos não o notam olhando de perto. Quando um homem não pode visitar parente em hospital sem que eufóricos tumultuem o ambiente, ou quando uma família tem que se deparar com manifestações de ódio durante um enterro de um ente querido, ou quando alguém é agredido na rua simplesmente por ter um posicionamento político diferente, temos alguma coisa muito errada acontecendo.

E esse ódio serve a um interesse: o projeto de tomada de poder um partido que foi derrotado nas urnas. Me angustia quando até juizes estão contaminados por esse ódio. Quando pretendem "fazer justiça" em nome desse ódio ao invés de julgar.

Sabe o que mais? Estão avançando aos poucos. Talvez amanhã não tenhamos mais a presidenta atual e é triste ver que as marionetes não percebem para onde o país está sendo levado.

Imagine um congresso com presidente igualmente conservador. E com que cara iremos para a Associação dos Países Golpistas Anônimos? Ao invés de dizermos "Estamos há 30 anos em democracia" vamos ter que aceitar uma recaída. Isso pode parecer "besteira", mas não é. Você pode chamar esse movimento pelo impeachment do que quiser, mas quando poderes são manipulados para forçar a saída de um presidente eleito, quando o acusador tem todas as características de indício que ele aponta no acusado, quando o projeto de impeachment nasce 1 ano antes de a causa ser definida ("Ela tem que ser presa, depois a gente inventa pelo quê"), temos sim um golpe em andamento.

Como em qualquer grupo de recuperação de dependentes sabe, quando temos uma recaída é difícil sair, é preciso muita força de vontade. Se esse projeto de tomada do poder for bem-sucedido, teremos algumas décadas de presidentes em risco de serem botados para fora caso não atendam aos interesses dos poderosos. Você acredita que o grau de investimento do país melhora em um cenário assim?

Sabe outra coisa que me angustia também? Termos tantos motivos para criticar a presidenta e ver que esses motivos não são vistos pelas marionetes do ódio, nem pela grande mídia, nem pela oposição. Sabe por quê? Porque parte desses motivos foram impostos a ela na tentativa de "garantir governabilidade" e são apoiados por esses grandes grupos. Me angustia olhar para a frente: tenho medo de ver o abismo que foi construído para nós.

-- Cárlisson  Galdino

Special: 
31 jul 2015

Os Donos do País

Submitted by bardo

Era uma vez um país. Um país cujos cidadãos viviam felizes, até que um dia ocorreu uma tragédia. Uma tragédia chamada “golpe militar”.

Mas essa tragédia não aconteceu por acaso, nem foi de surpresa. Os donos do país tinham muito medo, pois viam outros países passando por transformações em nome da igualdade entre as pessoas. Os donos desse país sabiam muito bem que igualdade social significa garantir direitos a todos. E sabiam que o aumento de direitos da população significaria também diminuição de privilégios seus. Por isso o medo.

O medo fez com que atacassem o governo e, para isso, utilizaram seu principal instrumento. A pena é mais forte que a espada, então começou a acusar o governo e noticiar de maneira obstinada e enfática qualquer suspeita de corrupção, para que a as pessoas tivessem cada vez mais ódio daquele governo. Tudo isso terminou com os militares tomando o poder.

Os donos do país ficaram felizes, pois o risco havia passado. Logo depois perceberam que, na verdade, iam perder privilégios de qualquer maneira. A partir daquele dia, foram proibidos de falar sobre corrupção no novo governo. Talvez os militares tenham percebido como “corrupção” era um tema capaz de mover montanhas. E, assim como não podiam falar de corrupção, nada de falarem de censura, ditadura, nada de falar mal do poder. Nada de noticiar desaparecimentos de pessoas. Não podiam mais sequer se reunir para conversar sem serem vistos com desconfiança - ou mesmo serem acusados e levados embora – pelos militares daquele país.

Mas tudo bem, afinal seus privilégios econômicos estavam assegurados.

O tempo passou e a ditadura militar caiu, décadas depois. Foi um alívio para os donos do país, que agora teriam novamente os privilégios perdidos. Foi muito bom ter poder econômico, mas aquele poder verbal, que havia sido capaz de derrubar um governo, fazia muita falta.

O bom para eles é que nessas décadas de poder militar, por obrigação imposta, os donos do país terminaram aprendendo a escrever distorcendo as verdades, destacando pontos que interessavam, omitindo outros; construindo assim notícias que atendessem às necessidades daquele tempo em que não se podia falar o que se pensa. Com o fim da tal ditadura, os donos do país resolveram continuar agindo daquela mesma forma, só que dessa vez para atender a interesses próprios.

Na ponta da pena ou da câmera de seus funcionários, ilustres desconhecidos se tornam heróis ou vilões, gigantes massas de insatisfeitos desaparecem, punhados de outros insatisfeitos viram manchete, políticos viram sábios salvadores, enquanto outros se tornam corruptos incorrigíveis. Assim seguiram os donos do país até hoje, controlando as pessoas com seu poder verbal, em todas as formas de noticiar. Jornais cheiram muito mal, mas como o povo, que o lê há tantos anos, vai notar o cheiro? Ora, já se acostumou a ele e sequer o sente!

Assim seguem os donos do país, controlando as massas com closes e vírgulas, enquanto morrem de medo de terem seu poder limitado. Sempre houve quem diga que as pessoas têm direito de serem informadas corretamente sobre os fatos, mas os donos do país sabem muito bem que esse direito afetaria um importante privilégio que hoje eles têm: o Monopólio de Opinião.

-- Cárlisson Galdino
-- Publicado no Informativo ACALA 2015

Special: 
12 mar 2013

Qual a sua anestesia?

Submitted by bardo

Hoje todos nós vivemos sob controle, escravos de um sistema terrível. Um sistema que gira em torno de lucros cada vez maiores e que nos obriga cada vez mais a participar de uma corrida desenfreada por nada. Custo de vida aumentando cada vez mais. Pessoas que sempre viveram da natureza veem suas terras sendo destruídas e se veem obrigados a trabalhar em indústrias. Leis cada vez mais rígidas para manter lucros de grandes empresas e cada vez menos eficazes para o bem estar social.

Quem governa o mundo não é o Legislativo, nem o Executivo, nem o Judiciário: é o Lucro.

Nada disso é novidade e nada disso é facilmente contornável. Nada bom. Como confrontar poderes econômicos? Que outros poderes podem ser fortes o bastante e ainda não foram corrompidos pelo poder? Séculos atrás o controle era feito pela Religião. Hoje, quando a Religião não é tão eficaz assim, o controle é feito pela fé no Lucro.

Mergulhar nesse mundo nos traz cada vez mais revelações terríveis. Que seria possível acabar a Fome no mundo se “eles” quisessem. Que 1% da população mundial detinha 40% de todos os recursos do mundo. Que 11 de setembro foi uma farsa. Que os governos não são democráticos: são executores a serviço de quem tem o “verdadeiro poder que move o mundo”.

Por isso há tantas formas de alienação:

  • Religiões alienantes têm se expandido assustadoramente nas últimas décadas, e giram em torno de Dinheiro

  • Profissões exigem cada vez mais especialização e a cada passo em uma especialização temos forte chance de perder a percepção do todo. Além disso, as exigências do mercado roubam nosso tempo e nos impedem de pensar, exigindo foco em nossas carreiras.

  • Livros são substituídos por filmes

  • A Televisão se torna o novo Livro Sagrado dessa religião monetária. Pessoas não pensam nem leem, simplesmente aceitam o que veem no quadro mágico.

  • Consumo e comércio de drogas crescem assustadoramente mundo afora e os governos não parecem muito interessados em combater isso.

  • A Indústria do Entretenimento cresce cada vez mais. Jogos eletrônicos pela Internet, nos celulares...

Quantos já falaram sobre isso? Quantas pistas? Matrix, por exemplo, foi das mais explícitas, mas as pessoas não conseguem mais enxergar nada além de efeitos especiais. Nada além de sombras. Estamos caindo em um abismo, numa viagem irreversível.

Ver os males do mundo e perceber todas essas coisas fere os nossos olhos. Qual a sua anestesia?

P. S.: Imagem do post: Xeringues, de rofi

Special: 
28 fev 2013

Foi necessário instalar um software em um dos computadores daqui da instituição. O problema: o Windows Vista e as dependências OCX.

De início, a instalação funcionou corretamente, mas apenas no usuário Administrador. Ao executar como usuário sem privilégios, o programa reclamava do registro de uma biblioteca OCX. Tentei várias soluções e cheguei finalmente à resposta. Para resolver essa dependência, pelo menos o que funcionou comigo, basta:

  1. Copiar o arquivo OCX da pasta Windows\System32 para a pasta do programa que está tentando executar
  2. Desregistrar o OCX com o comando regsvr32 /u ARQUIVO.OCX
  3. Abrir o programa como administrador

Ao fazer isso, o programa continuou sem funcionar como usuário normal, mas pedia outra dependência OCX. Assim, bastou repetir esse procedimento para cada OCX que ele pediu e chegou um momento em que o programa simplesmente funcionou!

Bibliotecas são uma coisa muito boa, mas têm suas desvantagens. Por isso é tão bom viver sob um Sistema Operacional com um controle de dependências eficiente e prático como Debian e derivados. :-)

Special: 
26 fev 2013

Quem é usuário avançado de computadores (administradores de sistemas, analistas, programadores esporádicos) sempre precisam de um bom editor de código-fonte. Bom e simples, leve e funcional. Quem programa profissionalmente certamente preferirá IDEs, mas mesmo entre esses ainda há quem aprecie um editor menos carregado.

Por isso o CyanPack inclui um editor de textos simples, voltado para código-fonte. Já houve época em que incluiu até mais de um. Hoje o software que atende a essa função é o Geany.

Geany em ação

Segundo o site do projeto, Geany é uma IDE pequena e leve, desenvolvida para ser rápida, tendo pouca dependência de outros pacotes. Outro objetivo é ser tão independente quanto possível de um ambiente Desktop como o KDE ou GNOME, sendo feita com uso apenas das bibliotecas GTK2 padrão.

Mesmo assim, ainda consegue apresentar características muito interessantes:

  • Destaque sintático
  • Ocultar/exibir blocos de código
  • Autocompletar de palavras-chave
  • Autofechamento de tags HTML e XML
  • Suporte às linguagens: Abc, ActionScript, Ada, ASM, C, C#, C++, CAML, CMake, Conf, CSS, D, Diff, Docbook, F77, Ferite, Fortran, FreeBasic, GLSL, Genie, HTML, Haskell, Haxe, Java, Javascript, LaTeX, Lua, Make, Markdown, Matlab, NSIS, Pascal, Perl, PHP, Po, Python, R, reStructuredText, Ruby, Sh, SQL, Tcl, Txt2tags, Vala, Verilog, VHDL, XML e YAML
  • Lista de símbolos
  • Navegador de código
  • Sistema de compilação e execução do código
  • Gerenciamento simples de projeto
  • Emulador de terminal embutido
  • Plugins
  • Traduzido para vários idiomas (incluindo Português)
  • Versões para Linux, FreeBSD, NetBSD, OpenBSD, MacOS X, AIX 5.3, Solaris Express e Windows (e provavelmente qualquer plataforma que disponha de um compilador C e suporte as bibliotecas GTK)
  • Escrito em C, lançado sob a licença GNU GPL

Geany está no CyanPack tanto na forma de um instalador para Windows, como fazendo parte do Trisquel personalizado que vem no DVD (no menu Desenvolvimento). É, pelo jeito o Geany não é só um "editor simples de código-fonte", mas não deixa de ser bem útil e leve!

Special: 
15 fev 2013

Ovos de cobra

Se você não tem nada a ver com programação, nem tem interesse no assunto, simplesmente ignore este artigo.


Mike Driscoll tem um blog dedicado a Python chamado The Mouse vs. the Python e eventualmente há excelentes artigos por lá.
Esta é uma tradução livre do artigo Python 101: esay_install or how to create eggs e modifiquei sutilmente algumas coisas, incluindo os exemplos. Agradeço ao Mike pelos excelentes artigos e me desculpo pelas liberdades que tomei na tradução (incluindo a mudança no nome do artigo). Vamos lá então!


Hoje daremos uma olhada no controverso método easy_install de instalar módulos e pacotes Python. Também aprenderemos como criar nossos próprios arquivos *.egg. Você precisará do pacote Setup Tools para fazer isso tudo. Esse pacote não suporta Python 3.x, assim se você precisar dessa versão do Python, veja pip. Haverá artigos desses projetos no futuro. Por ora, começaremos com o SetupTools e o easy_install.

Por que é controverso? Não estou de todo certo, mas as pessoas não parecem felizes com a forma como se pacotes instalam pela metade quando elas não esperam o download terminar. Pra completar, o autor não parece lá muito interessado em atualizar o pacote ou permitir que alguém o faça. Veja o artigo de Ziade no fim deste post.

SetupTools é o método principal e original de baixar e instalar pacotes Python pelo PyPI e outras fontes via linha de comando, tipo um apt-get para Python. Quando você instala o SetupTools, ele instala um script ou executável chamado easy_install, que você invocará na linha de comando para instalar ou atualizar pacotes. Ele também fornece uma forma de criar ovos de Python. Vamos gastar mais um tempinho para entender melhor essa funcionalidade.

Usando easy_install para instalar Pacotes

Uma vez que você tenha SetupTools instalado, você deve tê-lo no seu caminho. Isso quer dizer que você tem que estar pronto para abrir um terminal (Linux) ou linha de comando (Windows) e simplesmente executar easy_install. Um exemplo de invocação:

easy_install sqlalchemy

Isso pedirá ao PyPI que tente baixar o SQLAlchemy mais recente do repositório dele ou de qualquer outro para o qual o pacote PyPI aponte. O easy_install o instalará. Um

Um problema comumente criticado do easy_install é que ele pode tentar instalar o pacote antes mesmo de concluir seu download, o que leva a problemas e instalações defeituosas. O legla é que se você configurar corretamente o seu setup.py, o easy_install vai baixar também todas as dependências necessárias, instalando-as também. Assim, se você instalar algo complexo, como o TurboGears, você verá o easy_install instalar um bocado de pacotes. Essa é uma razão pela qual você pode querer usar virtualenv para ter certeza de que gosta de todos esses pacotes e de que eles funcionam a contento. Se não funcionarem, você simplesmente apaga a pasta virtualenv. De outro modo, você terá que ir na sua própria pasta do Python e cavar por ali para tentar "desinstalar" (ou seja, deletar pastas) por sua conta. A outra coisa legal que o easy_install faz quando instala os ovos é que ele adiciona o ovo a um arquivo easy_install.pth em site-packages, de modo que quando você o desinstalar, precise editar esse arquivo também. Felizmente, você pode usar pip para desinstalá-lo se você não tiver criado as pastas sozinho. Há um comando -uninstall (-u), mas eu já ouvi relatos contraditórios sobre seu funcionamento.

Você pode instalar um pacote passando uma url diretamente ao easy_install. Outro recurso maneiro é que você pode dizer ao easy_install qual versão você quer e ele tentará instalá-la. Finalmente, easy_install pode instalar tanto a partir de arquivos de código-fonte quanto de ovos (arquivos .egg). Para uma lista completa dos comandos, você deve ler a documentação.

Criando um ovo

Um arquivo egg é um formato de distribuição para pacotes Python. É uma alternativa à distribuição de fontes ou executáveis do Windows, mas perceba que módulos em Python puro são multiplatafroma! Daremos uma olhada em como criar nosso próprio ovo usando o pacote que criamos no tutorial sobre criação de módulos (que ainda não traduzi :-( ). Crie uma nova pasta e coloque a pasta mymath dentro dela. Crie um arquivo setup.py no diretório pai do mymath com o seguinte conteúdo:

from setuptools import setup, find_packages
 
setup(
    name = "mymath",
    version = "0.1",
    packages = find_packages()
    )

Perceba que ao invés de usar a função setup do distutils, usamos o setup do setuptools. Também usamos a função find_packages do setuptoos, que procurará automaticamente por pacotes no diretório corrente e os adicionará ao ovo. Para criar o tal do ovo, você só precisa digitar essa linha de comando:

python setup.py bdist_egg

Isso gera um monte de saída, mas quando tudo estiver ok você vai ver três novas pastas: build, dist e mymath.egg-info. A única que nos interessa é a pasta dist, onde você achará o ovo, mymath-0.1-py2.6.egg. Note que na minha máquina, ele faz referência ao meu Python padrão, que era o 2.6, e cria o ovo para essa versão do Python. O ovo em si é basicamente um arquivo zip. Se você mudar sua extensão para "zip", poderá fuçar por dentro dele e ver que ele tem duas pastas: mymath e EGG-INFO. A partir daqui, você já pode apontar com o easy_install para o seu ovo no sistema de arquivos e assim instalar seu pacote.

Se quiser, vocêm pode usar o easy_install para enviar seu ovo ou fonte diretamente para o Python Package Index (PyPI), usando o seguinte comando (copiado da documentação):

setup.py bdist_egg upload # cria um ovo e o envia
setup.py sdist upload # cria uma distribuição de fonte e a envia
setup.py sdist bdist_egg upload # cria ambos e os envia

Conclusão

Agora você está apto a usar o easy_install ou sabe o suficiente para tentar uma das alternativas. Pessoalmente, tive alguns problemas com ele e não pretendo usá-lo. Porém, daremos uma olhada no pip e sobre distribuição em breve, em artigo futuro. Por enquanto, dê uma chance ao easy_install e veja o que conclusão você tira, ou me conte suas histórias de terror nos comentários!

Leia também (em Inglês)

P. S.: Foto usada no post: 1st Batch Corn Hatching, de Viper76

14 fev 2013

Academy of Champions (Wii)

Submitted by bardo

Academy of Champions

Não gosto de jogos de futebol. Pode parecer estranho, mas não gosto de jogos de futebol nem no sentido esportivo nem no sentido eletrônico. Não quero dizer que eu não entendo das regras, só que não gosto. Não quero também fazer crítica nem ao esporte, tão popular no Brasil, nem aos jogos eletrônicos, que tem seu público fiel.

Bem, mas terminei comprando dois jogos de futebol para Wii (estavam a preço bastante convidativo). Um deles foi o Pro Evolution Soccer 2009 (que comecei o tutorial e abandonei, fazer o quê?) e o Academy of Champions. Este sim, pra mim, valeu a compra.

O jogo tem um estilo cartunesco e tem um quê de fantasia em tudo. Você é uma criança que sonha em se tornar grande no Futebol. Vai para uma academia especial, dirigida por Pelé e Mia Hamm (essa eu não conheço, mas dizem que é famosa :-P). Lá tem que cumprir etapas de treinamento, desafios, procurar jogadores para montar um bom time, comprar equipamentos... E vencer jogos importantes! A evolução dos personagens é um ponto bacana. Outro ainda mais legal são os especiais.

Eu lembro que havia um jogo de futebol para Super Nintendo onde se jogava com a turma do Megaman. Eles tinham chutes especiais, com poder. É tipo o robô de gelo ter um chute que congela em quem a bola bate. Pois bem, o Academy of Champions tem também esse lance de especial. E é bem divertido.

Os times são formados por cinco jogadores, incluindo o goleiro. Não há juiz, nem lateral ou escanteio: a bola está em campo o tempo todo. Os personagens são bem diferenciados, e há mistura de sexo. Você vai encontrar a meio-campista baixinha e gasguita, o goleiro brutamontes, o defensor magrela e altão... E há acessórios. Dá pra jogar com bandana, chapéu mexicano e até um chapéu do Rayman.

Bem, mas vamos voltar às atividades. O roteiro é dividido em trimestres. Cada trimestre é composto por quatro semanas (?), de cinco dias cada (??). Cada dia pode ter de uma a três atividades que precisam ser executadas. Boa parte das vezes podemos esconher entre duas ou três opções de atividade. A cada cinco dias nos deparamos com um jogo que não podemos perder. Se perdermos, a semana é zerada e voltamos ao seu começo. Por exemplo, se perder o desafio do 15º dia, você volta para o 11º.

Pra finalizar, achei o jogo muito criativo e divertido, apesar dos altos tempos de loading. Nem disse, mas a Ubisoft ainda preparou uma surpresa, colocando alguns personagens de jogos consagrados dela dentro desse jogo de futebol (por exemplo, o Altair, de Assassin's Creed).

Special: 
12 fev 2013

HTML Unifier

Submitted by bardo

HTML Unifier

Hoje eu passarei para vocês um conhecimento proibido. Um conhecimento milenar e obscuro dos programadores web,  Uma técnica capaz de reverter o que na maioria dos casos são consideradas boas práticas no desenvolvimento web. Estou falando de Data URI.

Se você já criou alguma página web em HTML você sabe como imagens são adicionadas. Não só imagens, mas muitos arquivos são necessários para ajudar o HTML a compor a página que vemos. Folhas de estilo, javascript, videos... O Data URI Scheme foi criado para permitir embutir diretamente no código HTML um conteúdo que deveria estar separado em seu próprio arquivo.

Como assim? No normal, voocê tem uma imagem praia.jpg. Com Data URI nessa imagem, o arquivo não é mais necessário. A imagem é convertida para ASCII e incluida dentro do HTML, na tag que faz a imagem.

Andei vasculhando os editores de HTML livres e não achei nenhum que permitisse incluir uma imagem nesse modo. Nem Nvu/Kompozer/BlueGriphon, nem LibreOffice, nem os editores de código... Como disse no começo, a técnica é "proibida". Se você adiciona imagens diretamente no arquivo da página, toda aquela modularidade vai pro saco. O cache não poderá ser feito de maneira adequada, por exemplo.

Bom, então por que você quis fazer isso? Simples: precisei preparar email em HTML com imagens, de uma maneira legal, através de um serviço que não aceita anexos. E imagens hospedadas geralmente não são lidas por alguns clientes de email, que temem que haja fraudes ou sei lá o quê. Solução? Data URI.

Pesquisei e não encontrei uma solução para isso. Terminei tendo que criar uma. Assim, apresento o HTMLunifier, que escrevi em PHP CLI, usando DOM e DataURI. Claro que você sabia que o PHP pode ser usado pra fazer script que rode no shell, não é?

O que o HTMLunifier faz basicamente é abrir um arquivo HTML e substituir todas as imagens por Data URI. Por segurança, ele não substitui o arquivo, mas cria um novo com terminação -u.html.

Convertendo a imagem para Data URI

Este código eu peguei na página do criador da biblioteca DataURI para PHP, que utilizei. Claro, com algumas melhorias.

function image_to_html($imagefile) {
	if (preg_match("/.jp(e?)g$/i", $imagefile)) {
		$filetype = "image/jpg";
	} elseif (preg_match("/.png$/i", $imagefile)) {
		$filetype = "image/png";
	} else {
		return $imagefile;
	}
	$fileContents = file_get_contents($imagefile);

	if($fileContents != false) {
		$dataUri = new DataUri(
			$filetype,
			$fileContents,
			DataUri::ENCODING_BASE64
	);

	return $dataUri->toString();
}

O processo unificador

Já temos o método que converte imagem em Data URI. Agora precisamos varrer o HTML procurando pelas tags img. Isso é feito com o seguinte código:

function unify($f) {
	$fpath = dirname(realpath($f));
	$dom = new DomDocument();
	$dom->loadHTML(file_get_contents($f));
	$dom->preserveWhiteSpace = false; 
	$images = $dom->getElementsByTagName('img'); 
	foreach ($images as $img) {    
		$imgfile = $img->getAttribute('src');
		if (preg_match("/^http(s?):/i", $imgfile)) {
			$img->setAttribute('src', image_to_html($imgfile));
		} elseif (preg_match("/^file:/", $imgfile)) {
			$rimgfile = preg_replace('/^file:(\/+)/', '/', $imgfile);
			$img->setAttribute('src', image_to_html($rimgfile));
		} else {
			$rimgfile = "$fpath/$imgfile";
			$img->setAttribute('src', image_to_html($rimgfile));
		}
    } 
    $f2 = $fpath . "/" . basename($f, ".html") . "-u.html";
    $dom->save($f2);
}

Se o arquivo está com protocolor http, https ou file, o tratamento é diferente do endereçamento relativo. No fim, o novo arquivo é gerado.

O programa em si

Claro, temos as funções, agora é hora de escrever o programa que as use. Isso é simples e curto:

for ($i = 1; $i < sizeof($argv); $i++) {
	$f = $argv[$i];
	if (file_exists($f)) {
		print "I will transform $f.\n";
		unify($f);
	} else {
		print "File $f don't exists.\n";
	}
}

Corrigindo o Doctype

Isso por si já deve funcionar, mas "vai que"... Então também fiz um método-gambiarra que corrige o Doctype do arquivo novo:

function fix_doctype($f) {
	$af = file($f);
	print "fix\n";
	$sf = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" .
		"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">";
	foreach ($af as $s) {
		if (preg_match("/^\<\?xml/i", $s)) {
			print "achei xml\n";
		} elseif (preg_match("/^\<\!DOCTYPE/i", $s)) {
			print "achei doctype\n";
		} else {
			$sf .= "\n$s";
		}
	}
	file_put_contents($f, $sf);
}

Concluindo

Enfim, é isso. Espero que isso seja útil para você. Estou anexando neste artigo o código. Como não posso enviar PHP, estou enviando o código em TXT. Basta salvar renomeando o arquivo para tirar o ".txt" ou selecionar, copiar e colar num editor de textos. O arquivo precisa ser marcado como executável.

E lembre-se: você precisará do php5-cli (ou talvez não), do php-xml-algumacoisa (na dúvida dei apt-get install php-xml-*) e do DataURI.php (coloquei na mesma pasta do HTMLunifier). Muita sabedoria para usá-lo e bom proveito!

Special: 
5 fev 2013

Este artigo começou como uma tradução do artigo Customizing a Trisquel iso, disponível na página do próprio Trisquel. Este artigo foi expandido com algumas informações do Live CD Customization, do Ubuntu, além de informações próprias.


Primeiramente, uma ISO é uma imagem de um CD ou DVD. Você pode pegar um CD ou DVD e transformar todo o seu conteúdo em um arquivo, para depois copiá-lo para outro CD ou DVD, tendo duas mídias exatamente iguais. Esse arquivo é que é o iso. Para gravar um iso você deve escolher a opção que fala de "Escrever imagem no disco" ou algo parecido, no seu programa de gravação de CD e DVD.

O CD e o DVD do Trisquel (assim como o do Ubuntu, do Mint e de outros, o que inclui o DVD do CyanPack) traz o sistema operacional de modo que funcionará a partir da mídia, sem precisar instalar. Adicionalmente, permitirá instalação. É algo bem bacana e que quem é usuário de software livre já conhece há alguns anos.

O bom é que você pode personalizar esse arquivo iso, para que venha com os programas que você quer. É o que eu faço para criar a versão modificada do Trisquel, que é distribuída no CyanPack em DVD. E neste artigo, vou mostrar pra você  como fazer isso.

Pré-requisitos

Primeiro você precisa de espaço em disco. Há dois estágios na criação do arquivo iso. Além da iso original, você precisará colocar todo o conteúdo dela em uma pasta, depois replicar o maior arquivo dela para uma outra pasta. E precisa do espaço que usará para a nova iso. Para a iso internacional do Trisquel, por exemplo, para mudanças pequenas, é seguro ter pelo menos 10G livres (sem contar a iso original).

Você precisa da iso na mesma arquitetura que você está usando. Vai poder customizar uma iso de 64 bits se estiver rodando o sistema atual em 64 bits. As imagens de mídia do Trisquel você encontra na página de Downloads do site da distribuição.

Ah, claro, você precisa de uma dessas distribuições instaladas para servir de ambiente de trabalho. Trisquel, Mint, Ubuntu... Ou alguma igualmente compatível. Nela, você precisa instalar os pacotes squashfs-tools e genisoimage.

sudo apt-get install squashfs-tools genisoimage

Desempacotando

Bom, você já tem o iso? Então vamos começar.

Abra um terminal. Os comandos todos deverão ser executados como usuário root. Para isso você pode digitar

sudo bash

Agora, você precisará de um diretório vazio. Se você não mexeu muito na sua instalação, provavelmente o diretório /mnt estará disponível. Se tiver dúvidas, crie e utilize um outro. Eu geralmente utilizo o /mnt mesmo e comigo funciona.

mount -o loop trisquel-original.iso /mnt
cp -a /mnt trisquel-midia
umount /mnt

Pronto, você tem o conteúdo da imagem todo em uma pasta (trisquel-midia). Vamos então pegar o conteúdo do sistema efetivamente, que fica no arquivo squashfs:

mount -o loop trisquel-midia/casper/filesystem.squashfs /mnt
cp -a /mnt trisquel-sistema
umount /mnt

A pasta trisquel-sistema é onde vamos trabalhar.

O arquivo Preseed

O Trisquel vem com um arquivo que permite a preleitura de valores para o banco debconf. Você pode achá-lo em src/preseed/trisquel.seed. O arquivo contém exemplos comentados do que você pode fazer, como mudar o idioma padrão, configurar rede estática ou instalar automagicamente um conjunto extra de pacotes antes de o processo de instalação do live-CD ser concluído (nesse caso você precisará de internet durante a instalação).

Se as mudanças e adaptações de que você precisa puderem ser feitas smplesmente alterando este arquivo, você não precisará seguir o próximo passo.

Bom, pessoalmente não usei ainda esse arquivo, mas #ficadica.

Modificando

Vamos começar a festa. O ambiente ainda não está 100% pronto, pois vamos completá-lo:

cp /etc/resolv.conf trisquel-sistema/etc
mount --bind /dev trisquel-sistema/dev
chroot trisquel-sistema
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts

Pronto! Agora sim podemos brincar pra valer! Comece com apt-get update e apt-get upgrade. Depois você instala tudo o que você precisar, com apt-get, e pode fazer as personalizações que achar necessárias (claro, tudo em linha de comando).

Quando encerrar tudo, você precisa executar

apt-get clean
echo "" > /etc/resolv.conf
umount /dev/pts
umount /sys
umount /proc || umount -lf /proc
exit
umount trisquel-sistema/dev

Caso você tenha substituido o kernel ou os scripts de boot, copie os arquivos do kernel e initrd dessaforma:

cp trisquel-sistema/boot/vmlinuz-custom trisquel-midia/isolinux/vmlinuz
cp trisquel-sistema/boot/initrd.img-custom trisquel-midia/isolinux/initrd

Reempacotando

Depois de as mudanças serem feitas, você precisa reconstruir o squashfs e o arquivo .iso.

Comprima o sistema em um arquivo squashfs, apagando o original:

rm trisquel-midia/casper/filesystem.squashfs
mksquashfs trisquel-sistema trisquel-midia/casper/filesystem.squashfs

Pra terminar, crie o arquivo de imagem:

mkisofs -D -r -V "Meu Trisquel personalizado" -cache-inodes \
-J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot \
-boot-load-size 4 -boot-info-table -o trisquel-personalizado.iso trisquel-midia

Deixe claro para todos que a versão que você está distribuindo não é uma imagem .iso oficial.

Por fim, no caso de personalizar o Trisquel eles pedem: se qualquer software não livre foi incluído, por favor renomeie seu projeto e não use o nosso logotipo.

P. S.: Foto do post: CDs Dangling, de Bernzilla

Special: 

Páginas

Subscribe to RSS - artigo