24 fev 2013

Blogópolis #42

Submitted by bardo

Agenda Mundial

Bardo WS está de cara nova! Ontem estreou a nova série textual: Agenda Mundial. A publicação dos episódios da nova série será aos sábados (como foi com as primeiras séries), enquanto Blogópolis sai da quarta-feira e vai para o domingo. A newsletter nBardo continua sendo publicada aos domingos.

Se você estiver ansioso pela série Agenta Mundial, confira os novos episódios sempre aos sábados! Se preferir, você pode assinar a newsletter nBardo e receber os novos episódios aos domingos. Simples assim.

A Blogópolis, por sinal, tem uma mudança sutil na listagem de links, que agora são apresentados em uma tabela, com um novo campo Peso. Esse campo não mede a importância do link, mas o quanto eu acredito que valha a pena dar uma olhada no site/blog nesta semana! Como costumo apresentar apenas um artigo/post/charge por blog/site, esse peso é a quantidade total de artigos/posts/charges que gostei muito e dentre os quais tive que escolher um.

Bom, espero que gostem de todas essas novidades! Qualquer coisa, só comentar.

Há 1 ano: Como funciona um blog, para leigos

Direto do @carlisson no Identica:

  • Hoje a promoção do eStarland é Max Payne 3. O jogo novo pra Xbox 360 ou PS3 tá por $17.95 http://ur1.ca/cpwgo
  • RT @mega_nao Walter Feldman autor do #SOPA Brasileiro http://t.co/BtIc3O6n é integrante da #rede ... A rede vai pescar os incautos e pren...
  • RT @faconti A CISPA ESTÁ DE VOLTA… O QUE VOCÊ TEM A VER COM ISSO? De @prenass - http://ur1.ca/cv6xa
  • RT @pensadorlouco Padre usa super-heróis e arma de água benta em missas - http://is.gd/fzK7N5
  • Amanhã começa a nova série textual Agenda Mundial! Não percam! No Bardo WS http://bardo.ws/
  • Promoção de hoje no eStarland, para PS3: Assassins Creed a 19.95 dólares; Dead Island a 14.95! http://ur1.ca/cpwgo

Tirinhas, posts e podcasts dos últimos dias

ArtigoFontePeso
Vida de Programador - Faltou a DLL9
Mentirinhas - Xeque-mate7
Um Sábado Qualquer - Explicações4
Ainda tem espaço para mais um?Software Livre-Mobile3
Análise: Fire Emblem: Awakening (3DS)Nintendo Blast3
Discussão: A localização dos jogos e o papel dos fãsGame Blast3

Pensador Louco - Idade das Trevas
2
9 motivos para fazer root no seu AndroidGizmodo2
A Gradiente venceu: INPI nega marca "iphone" à AppleInfowester2
Em Arapiraca, curso de Ciência da Computação participa de projeto em prol da educaçãoUFAL2
Firefox 19 traz novo visualizador de PDF e funcionalidades adicionaisBR-Linux2
Games: DmC - Devil may Cry! (176)Matando Robôs Gigantes2
Google HomeTrezentos2
Manifesto pró-renúncia de Renan chega ao SenadoCongresso em Foco2
A Cispa está de volta... O que você tem a ver com isso?youPIX1
API's para consulta de CEPPinceladas da Web1
Como eu mudei a minha relação com a comidaEmerson Alecrim1
GameCaster - ferramenta simples para fazer vídeos de jogosTutorFree1
HQ Inédita: "Não tá fácil pra ninguém!", estrelando Tio Combo!YaBlog!1
Improprietário - O Documentário do Mundo do Software LivreDailson Fernandes1
Lançado WineHQ 1.5.24Revista Espírito Livre1
LocaWeb Style - Como iniciamosTableless1
O melhor de 350 Nerdcasts! (350)Nerdcast1
Padre usa super-heróis e arma de água benta em missas!Garotas Nerds1
Todos os jogos Linux no Steam em promoçãoUbuntu-BR-SC1
TolerânciaJesus, me chicoteia!1
Special: 
23 fev 2013

“A pior coisa é ter que ensinar pra quem não quer aprender.”

Agenda Mundial #01 - A Nova Faixa

Uma cidade pequena, se comparada às grandes capitais. Uma cidade de interior, mas em franco desenvolvimento. Com suas praças, seu comércio agitado, girando a economia das cidades vizinhas. Uma cidade grande, perto das que a circundam. Entre o caos dos grandes centros centros e o sossego dos povoados rurais. Seria uma cidade perfeita – e talvez até seja – mas está longe de ser uma cidade pacata. O toque do progresso já a atingiu, pintando as ruas com as cores dos carros quase parados em horários de pico, com criminalidade e com tudo - mesmo que em menor escala - de bom e de ruim que uma cidade grande tem a oferecer.

No meio de um pequeno estado esquecido, que já foi orgulhoso de dar ao Brasil seu primeiro presidente, e outros presidentes depois. O orgulho passou e o título pomposo daqueles tempos - “terra dos marechais” - é hoje uma lembrança, gravada no hino de um clube esportivo local. O que mudou? O que se perdeu?

Em uma das ruas que saem perto da rodoviária, um homem de boné vermelho e branco, de camisa social já gasta e bermuda jeans, prende, de cima de uma escada, uma faixa em frente ao galpão. O Honda cinza escuro pode parar de buzinar e ir em paz, seguido pelos dois carros que também esperavam a rua ser liberada.

Protestos, protestos, mas já terminou. O homem recolhe a escada com ajuda do rapaz de camiseta e esperam passar o corolla prata e uma moto antes de atravessarem a rua: para o galpão.

Um celta preto passa rápido, sem prestar atenção em mais nada. Um furgão branco vem em seguida e estaciona a quatro casas da faixa. Um homem de cabelos grisalhos e poucos, desce e vai até a calçada. Olha para os lados antes de se dirigir ao portão. Enquanto toca a campainha, um celta prateado vem devagar pela rua, pelo mesmo caminho. Diminui a velocidade, quase parando. Para em frente ao galpão.

Ninguém desce, nem o carro sai, por um momento. Finalmente as portas se abrem. Do lado do passageiro, uma mulher de calça jeans e camisa listrada, de botões. Seus cabelos pretos e lisos descem até metade das costas, e como se achassem pouco ainda lhe fazem uma franja na testa. Seu rosto arredondado espera impaciente.

Logo o motorista chega até ela. Cabelos pretos curtos e bem penteados, um queixo quadrado. De roupa social em tons claros, com um bottom verde no bolso da camisa.

- Claudia, vai ser bacana!

- Boxe!? E eu lá tenho cara de quem gosta de boxe?!

- Você viu a faixa! Você sabe que a gente está meio parado e temos que fazer alguma atividade física, não sabe? Quer fazer o quê? Academia ouvindo aquele som?

- Não, né?

- E então? A gente faz boxe e ainda ganha a viagem!

- Até parece...

- Vamos, antes que feche.

O casal entra no prédio e procura o responsável. Depois de uma conversa bonita sobre proteção pessoal, alívio de stresse e segurança, das diferenças entre esporte como atividade física e competição, os dois se matriculam.

Logo saem do galpão e voltam para o carro.

- Só você mesmo pra me fazer lutar Boxe.

- Mas você ouviu o que ele disse, ninguém precisa lutar. É só um esporte! Vai ser legal pra descontrair. Você precisa desestressar da molecada da escola.

- Isso é verdade.

- Uma pena que a viagem pra Fortaleza só um ganha, né? Queria poder levar você comigo.

- Quê?! O sorteio só é quando fecharem as turmas!

- E sabe de uma coisa? Isso está parecendo é enrolada. Se eles quiserem, é só dizer que não fecharam as turmas todas e nunca que ninguém viaja!

- Herbert?

- Oi, amor.

- Não podíamos conversar dirigindo?

- É, né? Mas daqui a pouco a gente chega na sua casa, queria aproveitar mais o tempo.

- E é, seu besta? E não vai entrar hoje não?

- Você quer que eu entre?

- Se você quiser...

Um beijo e o carro parte dali. O céu já escureceu. As aulas só começariam na semana seguinte e ainda era terça-feira. E eles não podiam imaginar que na primeira aula, segunda-feira, já teriam uma boa surpresa para um dos dois.

18 fev 2013

Despertar

Submitted by bardo

Sabe aqueles dias
Que você acorda
O que era não é
Nem deve satisfação

O céu que sua mão
Tocou não é azul
E sob o seu pé
E por onde é que anda o chão?

Verdade e mentira
Não são absolutas
Nesse dia sem razão

Afinal viver
Um sonho qualquer
Vale a pena ou é em vão?

-- Cárlisson Galdino

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: 
13 fev 2013

Blogópolis #41

Submitted by bardo

Bento XVI dá adeus

Após sete anos de cargo, o papa Bento XVI pediu pra sair. Apesar de a prática não ser novidade na história dos Papas, é novidade se considerarmos a história mais recente. Papa pede pra sair alegando idade (como se alguém esperasse que houvesse um papa jovem). Não sei como vocês veem isso, mas pra mim isso abre margem pra muita teoria conspiratória...

Há 6 anos eu publicava o soneto Iara (que é mais antigo do que isso)

Direto do @carlisson no Identica:

  • RT @fernandodivac FGR* Blog CyanPack 13.0 – 8track: http://t.co/5EmaeN9a Novo estilo HTML e novo visual. Tem...
  • O link do posto no blog FGR* é outro: http://t.co/r2SWXR1n RT @fernandodivac FGR* Blog CyanPack 13.0 – 8track: Novo estilo HTML e novo...
  • Fora Renan! Vamos dizer ao Congresso para escutar a voz do povo e afastar #RenanCalheiros agora! http://ur1.ca/cpvk3
  • Pra Xbox 360: Dead Space 2 e X-Men: Destiny em promoção ($17 e $15.5) hoje no eStarland http://ur1.ca/cpwgo
  • RT @ufa Faltam 16 horas para o lançamento do filme do #Piratebay, TPB AFK: http://watch.tpbafk.tv/
  • RT @wille Duas horas após o lançamento, já há mais de 3300 seeders do filme sobre o The Pirate Bay. Torrent é fantástico! http://ur1.ca/ ...
  • Uia! MEGA vai entrar mesmo na briga com Dropbox, G.Drive e etc? http://ur1.ca/crjh3
  • Top 10: razões para acreditar no sucesso do Wii U http://ur1.ca/crmv8
  • Portal 2 (PS3) no eStarland por $17.75? Quem tem PS3 aproveite! http://ur1.ca/cpwgo

Tirinhas, posts e podcasts dos últimos dias

Pé na Jaca - Mentirinhas 394
http://mentirinhas.com.br/mentirinhas-394/

http://www.talcoeshow.com/2013/02/acordei-grilado.html

http://www.pensadorlouco.com/2013/02/a-pior-maldicao-worst-curse.html

http://vidadeprogramador.com.br/2013/02/06/o-impacto-socio-economico-do-...

http://esbocais.com.br/aventuras-de-eu-mesmo/aprendi-na-irlanda-que/

Foto original do post: Pope calls Catholics from around the World to fight in CATHOLIC RESISTANCE in the Easter-2012, de MATEUS_27:24&25.

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: 
11 fev 2013

Intervenção (1.1)

Submitted by bardo

No espaço vazio disperso
Nas trevas largada esquecida
Mais uma estrela do universo
Mais um astro que espalha vida

Por trás de uma massa de terra
Surge uma imensa serpente
A pobre estrela então berra
À água que vem da sua frente

A chuva cada vez mais perto
Parece que será o fim
A estrela já teme o fim certo

Mas um brilho belo se fez
- Um nascer do Sol no deserto -
E a chuva não vence essa vez

-- Cárlisson Galdino

Special: 
10 fev 2013

Sub10 (-1)

Submitted by bardo

Só uma nota rápida. Não sei se sobrou muito estoque de Natal, se os preços estão naturalmente 11% acima do que deveriam, mas tem alguns sites brasileiros que estão há um bom tempo oferecendo 10% de desconto.

Claro, isso é ótimo! Descontos são sempre bem-vindos! O curioso que achei foi a apelação recente do Submarino, que recebi por email, tentando convencer seus clientes de que 10% são um bom desconto. Deem uma olhada na imagem e digam se não parece que querem fazer as pessoas de besta.

Esses 10% não são novidade, são os mesmos das outras semanas. A novidade é o truque de notação, apelando até para o velho "$Preço-1". Lembra? Aquilo de diminuir o preço em R$ 1,00, pra termos um número cheio de noves, mas com o primeiro número uma unidade menor. Bem, aposto como alguém deve ter ido na onda e comprado por puro impulso. Fico curioso com o resultado prático dessa artimanha. Pena que não tenho como ter acesso a essa informação. Que povo malandro, hein!

Páginas

Subscribe to Cordeis.com RSS