Ferramenta para converter seu CSS para envio de emails

Uma dica rápida para evitar dores de cabeça ao criar HTML para ser enviado por email.

http://inlinestyler.torchboxapps.com/styler/convert/

Ele converte praticamente qualquer página HTML em um HTML válido para envio. Funcionou perfeitamente comigo em todos os clientes de email que testei, portanto, recomendo!

Por que você trabalha?

“Eu valia pouco mais que um milhão de dólares quando tinha 23 anos e mais de 100 milhões de dólares quando tinha 25, e nada disso era muito importante, porque nunca fiz as coisas pelo dinheiro” – Steve Jobs

Ganhar dinheiro é bom, mas não pode ser só isso. Forçar-se a sair da cama todo dia de manhã porque você precisa pagar as contas é uma vida miserável. Encontre um bom motivo para trabalhar. Parece óbvio e muitos gurus da auto-ajuda já disseram isso, não é? Porque então você continua admirando histórias como a do Marco Gomes, do Edney InterNey e do Manoel Lemos, e continua vivendo a mesma vidinha de sempre?

Não é sobre largar seu emprego e abrir um negócio. Essa foi a resposta para alguns de nós, mas não é para todos. Estou falando sobre mudar o mundo. Sobre ser grande, fazer algo de que se orgulha e acordar todo dia de manhã com vontade de ir trabalhar.

Isso pode significar dizer a verdade para o seu chefe, procurar um emprego em que você realmente se importe com o que faz, começar uma start-up de garagem trabalhando de madrugada ou gastar suas noites nos próximos meses estudando feito um louco. Pode significar trabalhar num lugar onde você precise varar noites, ou até fazer cafezinho para gente que pode te ensinar muito se seu currículo ainda não for lá essas coisas.

Só não dá para não fazer nada. Você vai ficar velho (e talvez gordo e careca) e vai estar vivendo do mesmo jeito…

Fonte: Blog da Visie

Flash Develop: Erro no code hint do Math.atan2

Estava eu a criar uns exemplos de trigonometria pra postar aqui, usando o Flash Develop 3.2.2 pra codar e notei esse erro,  que a primeira vista achei ter sido mudança de sintaxe, apesar de que desde os tempos do AS2, o método estático atan2 sempre foi o mesmo, Math.atan2(y:Number, x:Number).

O code hint aparece com os parâmetros trocados:




Conferindo no Flash IDE:





Você pode simplesmente usar do jeito correto, ignorando o code hint, mas caso você queira consertar basta usar o goto declaration (F4 no método), localizar o SWC com os ASDOC, descompactá-lo, consertar e compactá-lo novamente.







PS.: Esse erro já foi corrigido nas versões posteriores.

 

Usando CKEditor + CKFinder com o CodeIgniter

CKEditor

Caso você não conheça, o CKEditor (antigo FCKEditor) é visto como um dos melhores editores WYSIWYG open source para HTML, outra boa opção é o TinyMCE. Com eles você pode criar uma caixa de texto “rico”, com formatação de texto, inserção de links, imagens. Você pode até criar formulários.
Ambos funcionam só com Javascript, e são compatíveis com versões variadas dos browsers mais comuns. Como optei por usar o CKEditor, é dele que vou falar.

ckeditor

Com o CKEditor What You See Is What You Get (talvez não com o IE6)

CKFinder

Já o CKFinder é um plugin para o CKEditor, permitindo um gerenciamento completo de arquivos. Com ele você pode navegar nos diretórios do seu servidor e fazer upload de arquivos variados.
O único problema é que ele é pago, mas você pode baixar uma versão demo com a ausência de algumas features.

( Quase ) tudo é traduzido automaticamente. A mensagem da versão demo não foi.

Feitas as devidas apresentações, vamos ao trabalho.
Leia mais

Concatenando resultados com o group_concat() no MySql

Desde “criança” ouço dizer que processamento de banco de dados costuma ser mais rápido (mesmo que invísivel diferença a olho nu) que das linguagens server-side que o manipulam (asp, php, etc.), então me habituei a realizar o máximo de processamento de dados no banco.

Hoje eu estava criando um método num sistema, que envia email para uma grande lista, então decidi que o MySql já devia retornar todos emails numa única row, separados por vírgulas, pra isso usei o group_concat().

1º Exemplo:

1
2
SELECT group_concat( email ) AS lista
FROM usuarios

Este exemplo vai retornar todos os resultados na row lista, separados por vírgula.

lista
email1@gmail.com, email2@gmail.com, email3@gmail.com

2º Exemplo:

1
2
SELECT nivel, group_concat(email) AS lista
    FROM usuarios GROUP BY nivel

Esse exemplo tem uma melhor utilidade dessa função. Você poder concatenar resultados por grupos diferentes.
Não é necessário muita explicação, basta ver o resultado: estão agrupados por nível hierárquico (campo nivel) os emails dos usuários do sistema.

nivel lista
gerentes gerente1@email.com, gerente2@email.com
supervisores joe@email.com, marcelo@email.com, johndoe@email.com
clientes cliente001@email.com, cliente002@email.com

Fica bem melhor trabalhar dessa forma, do que usar vários loops com vários ifs.

Cláusula similar ao LIMIT no SQL Server

Há tempos venho desenvolvendo sistemas usando PHP + SQLServer, e uma das coisas que senti muita falta inicialmente (neste caso, pra gerar uma paginação de resultados) foi a cláusula LIMIT, ausente na linguagem de queries da Microsoft.
Mas isso realmente não é um problema pra quem usa alguma plataforma da MS para o desenvolvimento, como VB ou .NET, que já dispõem de ferramentas para paginação, mas como não é o meu caso…

Nesta solução eu uso 3 queries aninhadas. Bastar executar e dar uma olhada pra entender como funciona.

DECLARE @page INT = 1
DECLARE @perPage INT = 10
 
SELECT * FROM
(
    SELECT TOP (@perPage) nome, telefone, email FROM
    (
        SELECT TOP (@page * @perPage) nome, telefone, email FROM clientes
        ORDER BY nome ASC
    ) AS novaTabela1 ORDER BY nome DESC
) AS novaTabela2 ORDER BY nome ASC

AMFPHP: Error #2044: Unhandled NetStatusEvent: level=error, code=NetConnection.Call.BadVersion

Estou com uma idéia de projeto interessante e esta semana comecei a pesquisar as plataformas que poderiam atender essa idéia. Comecei com famoso AMFPHP.

Baixei a versão mais recente e fui assistir uma palestra de introdução ao AMF, mas logo num teste dos mais básicos, ao Flash tentar chamar um método do PHP acontece o erro, maldito erro!

Error #2044: Unhandled NetStatusEvent: level=error, code=NetConnection.Call.BadVersion

Tá bom, Unhandled NetStatusEvent é solucionável, basta adcionar um listener pro NET_STATUS, mas realmente acontece um erro de NetConnection. Procurando pelos fóruns, não se encontra uma solução racional, simplesmente em cada incidência do erro é apontada uma solução diferente.
Eu tentei trocar nomes de classes, conferir urls e paths, desinstalar e instalar módulos do apache, do php, e nada.

O que funcionou pra mim foi baixar uma versão anterior à última:  amfphp-1.9.beta.20080120, seguindo a dica do Danilo Castilho {ASDevs}. Ainda não sei o porque da versão mais recente ter esse problema, mas pretendo descobrir.

Mas outras soluções podem ser:

  • Tirar espaços em branco, antes e depois das tags php.
  • Comentar a linha “$gateway->disableStandalonePlayer();” no gateway.php, que impede a comunicação quando se está usando por um player isolado.
  • Problemas com a versão do encoding de AMF usado: myService.objectEncoding = ObjectEncoding.AMF0; // .AMF3

Conforto visual com o F.lux

Vou dar uma dica de ergonomia que mudou minha vida e pode mudar a sua também ( ou não! ).

F.lux

F.lux

F.lux é um software que adapta os tons de cores do seu monitor de acordo com a hora do dia.
Durante a noite ele mantêm seu monitor com tons menos agressivos, para acompanhar o nivel de iluminação que se tem durante a noite.

Pode parecer frescura, mas faz uma grande diferença. Faça o teste, use o durante uns dois dias, e numa noite dessas experimente desligar o aplicativo para notar.
Desde quando passei a usá-lo, sinto menos dores de cabeça e nos olhos, o que antes era rotineiro.

Só lembre de setar o seu fuso horário assim que instalar.

http://www.stereopsis.com/flux/

Conversão de HTML Entities – AS3

As HTML Entities ( “Entidades HTML” ) são códigos, oriundos de uma tabela de conversão, que representam caracteres e símbolos não tão comuns quanto letras e números. Pra ficar mais fácil de entender…

Caracter Descrição Nome da Entidade Número da Entidade
espaço não separável    
< menor do que &lt; &#60;
> maior do que &gt; &#62;
& e comercial &amp; &#38;
aspas &quot; &#34;

Recentemente fiz alguns projetos em AS3 que carregavam dados de umRSS, e em quase todos os símbolos estavam convertidos às suas entidades HTML, para converter em seus símbolos é super simples.

?View Code ACTIONSCRIPT
public function htmlUnescape(str:String):String
{
    return new XMLDocument(str).firstChild.nodeValue;
}
 
// exemplo:
trace(htmlUnescape("Cachorro &amp; gato"));  // Cachorro & gato

Caso você precise converter os símbolos em entidades:

?View Code ACTIONSCRIPT
public function htmlEscape(str:String):String
{
    return XML( new XMLNode( XMLNodeType.TEXT_NODE, str ) ).toXMLString();
}
 
// exemplo:
trace(htmlUnescape("Cachorro & gato"));  // Cachorro &amp; gato

E caso você ainda viva no mundo pré-histórico do AS2, também há solução:

?View Code ACTIONSCRIPT
function htmlUnescape(str:String):String
{
    return new XML(str).firstChild.nodeValue;
}
 
function htmlEscape(str:String):String
{
    return new XMLNode( 3, str ).toString();
}

Créditos: http://www.razorberry.com/blog/archives/2007/11/02/converting-html-entities-in-as3/

[Portifólio] Stone Age

Stone Age Tech

Stone Age Tech

Link: http://www.stoneage.com.br/
Empresa: DablioTI

Já viu aqueles sites disponíveis em mais de um idioma, que quando você troca o idioma ele te leva de volta à página inicial? Não acho isso legal, então desenvolvi o Stone Age sem esse problema. Você troca o idioma e se mantém na mesma página.
O site tem o conteúdo todo gerenciável, incluido o blog, que tem a opção de incluir e remover usuários.